%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 'Y3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9tYWluLmExZmJhMzM2NTU3NzVkZTkuanMiIHR5cGU9Im1vZHVsZSI+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 '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 ',0 as selectbox_order';
put 'from &lib..&ds';
put 'order by 1;';
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 'LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLmExZmJhMzM2NTU3NzVkZTkuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.a1fba33655775de9.js;
filename filecode temp lrecl=11451648;
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 'UEVlLHBpdm90OigpPT5LYixzdHJpbmdUb0FycmF5OigpPT5vTix0bzJkQXJyYXk6KCk9PnFlZX0pO3ZhciB4PXt9O0Yucih4KSxGLmQoeCx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5ydGUsaXNEZWZpbmVkOigpPT5LaSxpc0VtcHR5OigpPT5wYyxpc1JlZ0V4cDooKT0+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+c2ssaXNWaXNpYmxlOigpPT5lNyxtYXRjaGVzQ1NTUnVsZXM6KCk9PmpFZSxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PnB0ZSxvZmZzZXQ6KCk9PnFsLG91dGVySGVpZ2h0OigpPT5hbCxvdXRlcldpZHRoOigpPT53YSxvdmVybGF5Q29udGFpbnNF'@;
put 'bGVtZW50OigpPT5CcCxyZW1vdmVDbGFzczooKT0+V28scmVtb3ZlRXZlbnQ6KCk9PlVFZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmROLHJlc2V0Q3NzVHJhbnNmb3JtOigpPT5zeSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5mdGUsc2V0Q2FyZXRQb3NpdGlvbjooKT0+b3ksc2V0T3Zlcmxh'@;
put 'eVBvc2l0aW9uOigpPT5va30pO3ZhciBNPXt9O0YucihNKSxGLmQoTSx7Y3Vycnk6KCk9Pm10ZSxjdXJyeVJpZ2h0OigpPT4kRWUsZGVib3VuY2U6KCk9Pm1OLGZhc3RDYWxsOigpPT5hayxpc0Z1bmN0aW9uOigpPT5SYSxwYXJ0aWFsOigpPT52TixwaXBlOigpPT5HRWUsdGhyb3R0bGU6KCk9'@;
put 'Pmd0ZSx0aHJvdHRsZUFmdGVySGl0czooKT0+V0VlfSk7dmFyIE89e307Ri5yKE8pLEYuZChPLHtjbG9uZTooKT0+V3UsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5fZyxkZWVwQ2xvbmU6KCk9Pnl1LGRlZXBFeHRlbmQ6KCk9Pmx5LGRlZXBPYmplY3RTaXplOigpPT51ayxkZWZpbmVH'@;
put 'ZXR0ZXI6KCk9PmZoLGR1Y2tTY2hlbWE6KCk9PnI3LGV4dGVuZDooKT0+S2wsZ2V0UHJvcGVydHk6KCk9PnZ0ZSxoYXNPd25Qcm9wZXJ0eTooKT0+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 'Y3Rpb24gJHQoYyl7cmV0dXJuIFkoYz8udGhlbil9ZnVuY3Rpb24gUG4oYyl7cmV0dXJuIFkoY1tGZV0pfWZ1bmN0aW9uIG5pKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmWShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBsbihjKXtyZXR1cm4gbmV3IFR5cGVF'@;
put 'cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg'@;
put 'QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHFyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZ2koYyl7cmV0dXJuIFko'@;
put 'Yz8uW3FyXSl9ZnVuY3Rpb24geHIoYyl7cmV0dXJuIGZ1bmN0aW9uIE50KGMsbCxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107'@;
put 'cmV0dXJuIGg9e30sXygibmV4dCIpLF8oInRocm93IiksXygicmV0dXJuIiksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBfKEVlKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKFplKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o'@;
put 'aXQsZXQpe2YucHVzaChbRWUsWmUsaXQsZXRdKT4xfHxUKEVlLFplKX0pfSl9ZnVuY3Rpb24gVChFZSxaZSl7dHJ5eyFmdW5jdGlvbiBXKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKGllLHBlKTp3ZShmWzBdWzJdLEVlKX0oZFtF'@;
put 'ZV0oWmUpKX1jYXRjaChpdCl7d2UoZlswXVszXSxpdCl9fWZ1bmN0aW9uIGllKEVlKXtUKCJuZXh0IixFZSl9ZnVuY3Rpb24gcGUoRWUpe1QoInRocm93IixFZSl9ZnVuY3Rpb24gd2UoRWUsWmUpe0VlKFplKSxmLnNoaWZ0KCksZi5sZW5ndGgmJlQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMs'@;
put 'YXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgX3QoYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIF90KHZvaWQgMCk7eWllbGQgeWllbGQgX3QoZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9j'@;
put 'aygpfX0pfWZ1bmN0aW9uIFVpKGMpe3JldHVybiBZKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gS3IoYyl7aWYoYyBpbnN0YW5jZW9mIEtlKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKFBuKGMpKXJldHVybiBmdW5jdGlvbiBubyhjKXtyZXR1cm4gbmV3IEtlKGw9Pntjb25zdCBhPWNbRmVdKCk7'@;
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 'UGgoYyxsKXtpZihudWxsIT1jKXtpZihQbihjKSlyZXR1cm4gZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVs'@;
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 'KGMsbCl7dGhyb3cgbmV3IEFyKC0yMDEsITEpfWZ1bmN0aW9uIGZyKGMsbCl7bnVsbD09YyYmZnVuY3Rpb24gSG8oYyxsLGEsZCl7dGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7Y31gKyhudWxsPT1kPyIiOmAgW0V4cGVjdGVkPT4gJHthfSAke2R9ICR7bH0gPD1BY3R1YWxd'@;
put 'YCkpfShsLGMsbnVsbCwiIT0iKX1mdW5jdGlvbiBocihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIG1pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtd'@;
put 'LGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24geGQoYyl7cmV0dXJuIEIwKGMsYzMpfHxCMChjLE5zKX1mdW5jdGlvbiBCMChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVsbH1mdW5jdGlvbiBubShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoamgp'@;
put 'fHxjLmhhc093blByb3BlcnR5KEs3KSk/Y1tqaF06bnVsbH1jb25zdCBjMz1Bcyh7XHUwMjc1cHJvdjpBc30pLGpoPUFzKHtcdTAyNzVpbmo6QXN9KSxOcz1Bcyh7bmdJbmplY3RhYmxlRGVmOkFzfSksSzc9QXMoe25nSW5qZWN0b3JEZWY6QXN9KTt2YXIgbnM9ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KG5zfHx7fSk7bGV0IGg0O2Z1bmN0aW9uIGRpKGMpe2NvbnN0IGw9aDQ7cmV0'@;
put 'dXJuIGg0PWMsbH1mdW5jdGlvbiBXcyhjLGwsYSl7Y29uc3QgZD14ZChjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6YSZucy5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIFFpKHFhKGMp'@;
put 'KX1jb25zdCBPaT0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNl'@;
put 'b2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksczA9e30sazE9Il9fTkdfRElfRkxBR19fIixrdT0ibmdUZW1wVG9rZW5QYXRoIixuYz0vXG4vZ20sb209Il9fc291cmNlIjtsZXQga2Q7ZnVuY3Rpb24gQTEoYyl7Y29uc3QgbD1rZDtyZXR1cm4ga2Q9YyxsfWZ1bmN0aW9uIFg3KGMsbD1u'@;
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 'bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tVaF18fG51bGx9ZnVuY3Rpb24gUmwoYyl7cmV0dXJuIGNbSmNdfHxudWxsfWZ1bmN0aW9uIE5jKGMsbCl7Y29uc3QgYT1jW0QxXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke3FhKGMpfSBkb2VzIG5vdCBo'@;
put 'YXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEM0KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhv'@;
put 'c3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fFhjLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGws'@;
put 'c3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8U3Msdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURl'@;
put 'ZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpoMyhjLmlucHV0cyxsKSxvdXRwdXRzOmgzKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGNtKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZjMoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/Umw6'@;
put 'eTQ7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihsbSl9Y29uc3QgSGk9MCxCaT0xLERvPTIsdWE9MyxYYT00LEkxPTUsem89NixUdT03LFZhPTgsTGQ9OSxMMT0xMCxWbz0xMSxHaD0xMixTND0xMyxPbD0xNCxKYT0xNSxPMj0xNixQ'@;
put 'Mj0xNyxodT0xOCwkaD0xOSxSMT0yMCxPMT0yMSx1MD0yMixwMz0yMyxnMz0yNCxwcz0yNSxNND0xLHVtPTIsZDA9NyxIMj05LHJjPTExO2Z1bmN0aW9uIFNjKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbTTRdfWZ1bmN0aW9uIGljKGMpe3JldHVybiBB'@;
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 'bGFyZWRJbnB1dHNbYV0sZj1ibShjKXx8ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gY1tGbF09bH0oYyx7cHJldmlvdXM6WGMsY3VycmVudDpudWxsfSksXz1mLmN1cnJlbnR8fChmLmN1cnJlbnQ9e30pLFQ9Zi5wcmV2aW91cyxXPVRbaF07X1toXT1uZXcgbTkoVyYmVy5jdXJyZW50VmFsdWUs'@;
put 'bCxUPT09WGMpLGNbZF09bH12YS5uZ0luaGVyaXQ9ITA7Y29uc3QgRmw9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIGJtKGMpe3JldHVybiBjW0ZsXXx8bnVsbH1jb25zdCBoMD1mdW5jdGlvbihjLGwsYSl7fTtmdW5jdGlvbiBfYShjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9'@;
put 'Y1tIaV07cmV0dXJuIGN9ZnVuY3Rpb24gWTAoYyxsKXtyZXR1cm4gX2EobFtjXSl9ZnVuY3Rpb24gSGwoYyxsKXtyZXR1cm4gX2EobFtjLmluZGV4XSl9ZnVuY3Rpb24ga2UoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gbXQoYyxs'@;
put 'KXtjb25zdCBhPWxbY107cmV0dXJuIFNjKGEpP2E6YVtIaV19ZnVuY3Rpb24gSXIoYyxsKXtyZXR1cm4gbnVsbD09bD9udWxsOmNbbF19ZnVuY3Rpb24geW8oYyl7Y1tQMl09MH1mdW5jdGlvbiBlcyhjKXsxMDI0JmNbRG9dfHwoY1tEb118PTEwMjQsb2MoYywxKSl9ZnVuY3Rpb24genMoYyl7'@;
put 'MTAyNCZjW0RvXSYmKGNbRG9dJj0tMTAyNSxvYyhjLC0xKSl9ZnVuY3Rpb24gb2MoYyxsKXtsZXQgYT1jW3VhXTtpZihudWxsPT09YSlyZXR1cm47YVtJMV0rPWw7bGV0IGQ9YTtmb3IoYT1hW3VhXTtudWxsIT09YSYmKDE9PT1sJiYxPT09ZFtJMV18fC0xPT09bCYmMD09PWRbSTFdKTspYVtJ'@;
put 'MV0rPWwsZD1hLGE9YVt1YV19Y29uc3QgUG89e2xGcmFtZTpadyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBQdygpe3JldHVybiBQby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdzMoKXtyZXR1cm4gbnVsbCE9PVBvLnNr'@;
put 'aXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUG8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIFRzKCl7cmV0dXJuIFBvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBCdChjKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbVmFdfWZ1bmN0aW9uIGp0KGMpe3Jl'@;
put 'dHVybiBQby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBNYygpe2xldCBjPUZ3KCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gRncoKXtyZXR1cm4gUG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBOMShj'@;
put 'LGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIGI5KCl7cmV0dXJuIFBvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBDbSgpe1BvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBWYygpe2NvbnN0IGM9UG8ubEZyYW1lO2xldCBs'@;
put 'PWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIE5kKCl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gQzMoKXtyZXR1cm4gUG8ubEZyYW1lLmJpbmRp'@;
put 'bmdJbmRleCsrfWZ1bmN0aW9uIFYxKGMpe2NvbnN0IGw9UG8ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4K2MsYX1mdW5jdGlvbiBLVChjLGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJ'@;
put 'bmRleD1jLFNtKGwpfWZ1bmN0aW9uIFNtKGMpe1BvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiB3OShjKXtjb25zdCBsPVBvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBCdygpe3JldHVybiBQby5s'@;
put 'RnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gQzkoYyl7UG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gancoYyl7Y29uc3QgbD1jW0JpXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2Nbem9dOm51bGx9ZnVuY3Rpb24gencoYyxs'@;
put 'LGEpe2lmKGEmbnMuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJm5zLkhvc3R8fChoPWp3KGYpLG51bGw9PT1ofHwoZj1mW09sXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9UG8ubEZyYW1lPVV3'@;
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+MDspZD1kW09sXSxhLS07cmV0dXJuIGR9bGV0IE80PSEwO2Z1bmN0aW9uIEIxKGMp'@;
put 'e2NvbnN0IGw9TzQ7cmV0dXJuIE80PWMsbH1jb25zdCBUbT0yNTUsSnc9NTtsZXQgRG09MDtjb25zdCBqMT17fTtmdW5jdGlvbiBJbShjLGwpe2NvbnN0IGE9UXcoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0JpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRl'@;
put 'eD1sLmxlbmd0aCxKaChkLmRhdGEsYyksSmgobCxudWxsKSxKaChkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1BOShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFh3KGgpKXtjb25zdCBfPUIyKGgpLFQ9TTMoaCxsKSxXPVRbQmldLmRhdGE7Zm9yKGxldCBpZT0wO2llPDg7aWUrKylsW2Yr'@;
put 'aWVdPVRbXytpZV18V1tfK2llXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBKaChjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gUXcoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmlu'@;
put 'amVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gQTkoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9'@;
put 'bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zQyhoKSxudWxsPT09ZClyZXR1cm4gUzM7aWYoYSsrLGg9aFtPbF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gUzN9ZnVuY3Rpb24gVDkoYyxsLGEpeyFmdW5jdGlvbiBrOShjLGwsYSl7bGV0'@;
put 'IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoWmgpJiYoZD1hW1poXSksbnVsbD09ZCYmKGQ9YVtaaF09RG0rKyk7Y29uc3QgaD1kJlRtO2wuZGF0YVtjKyhoPj5KdyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZUMoYyxsLGEpe2lm'@;
put 'KGEmbnMuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7UWkoKX1mdW5jdGlvbiB0QyhjLGwsYSxkKXtpZihhJm5zLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKG5zLlNlbGZ8bnMuSG9zdCkpKXtjb25zdCBoPWNbTGRdLGY9ZGkodm9pZCAwKTt0cnl7cmV0dXJuIGg/'@;
put 'aC5nZXQobCxkLGEmbnMuT3B0aW9uYWwpOldzKGwsZCxhJm5zLk9wdGlvbmFsKX1maW5hbGx5e2RpKGYpfX1yZXR1cm4gZUMoZCwwLGEpfWZ1bmN0aW9uIG5DKGMsbCxhLGQ9bnMuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW0RvXSYmIShkJm5zLlNlbGYpKXtjb25zdCBfPWZ1'@;
put 'bmN0aW9uIGREKGMsbCxhLGQsaCl7bGV0IGY9YyxfPWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PV8mJjIwNDgmX1tEb10mJiEoNTEyJl9bRG9dKTspe2NvbnN0IFQ9ckMoZixfLGEsZHxucy5TZWxmLGoxKTtpZihUIT09ajEpcmV0dXJuIFQ7bGV0IFc9Zi5wYXJlbnQ7aWYoIVcpe2NvbnN0IGll'@;
put 'PV9bUjFdO2lmKGllKXtjb25zdCBwZT1pZS5nZXQoYSxqMSxkKTtpZihwZSE9PWoxKXJldHVybiBwZX1XPXNDKF8pLF89X1tPbF19Zj1XfXJldHVybiBofShjLGwsYSxkLGoxKTtpZihfIT09ajEpcmV0dXJuIF99Y29uc3QgZj1yQyhjLGwsYSxkLGoxKTtpZihmIT09ajEpcmV0dXJuIGZ9cmV0'@;
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 'KGMsbCl9ZnVuY3Rpb24gWjQoYyl7Y29uc3QgbD1jW3VhXTtyZXR1cm4gaWMobCk/bFt1YV06bH1mdW5jdGlvbiBDQyhjKXtyZXR1cm4gR20oY1tHaF0pfWZ1bmN0aW9uIFNDKGMpe3JldHVybiBHbShjW1hhXSl9ZnVuY3Rpb24gR20oYyl7Zm9yKDtudWxsIT09YyYmIWljKGMpOyljPWNbWGFd'@;
put 'O3JldHVybiBjfWZ1bmN0aW9uIHJmKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsXz0hMTtpYyhkKT9mPWQ6U2MoZCkmJihfPSEwLGQ9ZFtIaV0pO2NvbnN0IFQ9X2EoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/RzIobCxhLFQpOlkxKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZu'@;
put 'dWxsIT09YT9ZMShsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB0NihjLGwsYSl7Y29uc3QgZD1IMyhjLGwpO2QmJmZ1bmN0aW9uIE91KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULF8pOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYm'@;
put 'JmZ1bmN0aW9uIExDKGMsbCxhLGQsaCl7Y29uc3QgZj1hW2QwXTtmIT09X2EoYSkmJnJmKGwsYyxkLGYsaCk7Zm9yKGxldCBUPXJjO1Q8YS5sZW5ndGg7VCsrKXtjb25zdCBXPWFbVF07RzQoV1tCaV0sVyxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIFU5KGMsbCl7cmV0dXJuIGMu'@;
put 'Y3JlYXRlQ29tbWVudChmdW5jdGlvbiBCNChjKXtyZXR1cm4gYy5yZXBsYWNlKGtELGw9PmwucmVwbGFjZShBRCxXbSkpfShsKSl9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiB4QyhjLGwpe2NvbnN0IGE9Y1tIMl0sZD1hLmluZGV4T2Yo'@;
put 'bCk7enMobCksYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBzZihjLGwpe2lmKGMubGVuZ3RoPD1yYylyZXR1cm47Y29uc3QgYT1yYytsLGQ9Y1thXTtpZihkKXtjb25zdCBoPWRbTzJdO251bGwhPT1oJiZoIT09YyYmeEMoaCxkKSxsPjAmJihjW2EtMV1bWGFdPWRbWGFdKTtjb25zdCBmPVBtKGMs'@;
put 'cmMrbCk7IWZ1bmN0aW9uIEJEKGMsbCl7RzQoYyxsLGxbVm9dLDIsbnVsbCxudWxsKSxsW0hpXT1udWxsLGxbem9dPW51bGx9KGRbQmldLGQpO2NvbnN0IF89ZltodV07bnVsbCE9PV8mJl8uZGV0YWNoVmlldyhmW0JpXSksZFt1YV09bnVsbCxkW1hhXT1udWxsLGRbRG9dJj0tMTI5fXJldHVy'@;
put 'biBkfWZ1bmN0aW9uIEttKGMsbCl7aWYoISgyNTYmbFtEb10pKXtjb25zdCBhPWxbVm9dO2xbcDNdPy5kZXN0cm95KCksbFtnM10/LmRlc3Ryb3koKSxhLmRlc3Ryb3lOb2RlJiZHNChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gVUQoYyl7bGV0IGw9Y1tHaF07aWYoIWwpcmV0dXJuIFht'@;
put 'KGNbQmldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoU2MobCkpYT1sW0doXTtlbHNle2NvbnN0IGQ9bFtyY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbWGFdJiZsIT09YzspU2MobCkmJlhtKGxbQmldLGwpLGw9bFt1YV07bnVsbD09PWwmJihsPWMpLFNjKGwpJiZYbShsW0JpXSxs'@;
put 'KSxhPWwmJmxbWGFdfWw9YX19KGwpfX1mdW5jdGlvbiBYbShjLGwpe2lmKCEoMjU2JmxbRG9dKSl7bFtEb10mPS0xMjksbFtEb118PTI1NixmdW5jdGlvbiBrQyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2Qr'@;
put 'PTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBSNCkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKz0yKXtjb25zdCBUPWhbZltfXV0sVz1mW18rMV07aDAoNCxULFcpO3RyeXtXLmNhbGwoVCl9ZmluYWxseXto'@;
put 'MCg1LFQsVyl9fWVsc2V7aDAoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtoMCg1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIEVDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1R1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIGFbZl0pe2NvbnN0IF89YVtmKzNdO18+PTA/ZFtfXSgpOmRbLV9dLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtUdV09bnVsbCk7Y29uc3QgaD1sW08xXTtpZihudWxsIT09aCl7bFtPMV09bnVsbDtmb3IobGV0IGY9MDtm'@;
put 'PGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtCaV0udHlwZSYmbFtWb10uZGVzdHJveSgpO2NvbnN0IGE9bFtPMl07aWYobnVsbCE9PWEmJmljKGxbdWFdKSl7YSE9PWxbdWFdJiZ4QyhhLGwpO2NvbnN0IGQ9bFtodV07bnVsbCE9PWQmJmQuZGV0YWNoVmlldyhjKX0hZnVu'@;
put 'Y3Rpb24gVEQoYyl7SDkuZGVsZXRlKGNbJGhdKX0obCl9fWZ1bmN0aW9uIEYzKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWTQoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtIaV07e2NvbnN0e2NvbXBv'@;
put 'bmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PVBjLk5vbmV8fGY9PT1QYy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gSGwoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWTEoYyxs'@;
put 'LGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBHMihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WTEoYyxsLGEsZCxoKTpHMihjLGwsYSl9ZnVuY3Rpb24gSDMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwp'@;
put 'fWZ1bmN0aW9uIFcxKGMsbCxhKXtyZXR1cm4gVEMoYyxsLGEpfWxldCBRbSwkNCxHOSxuNixUQz1mdW5jdGlvbiBBQyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9IbChjLGEpOm51bGx9O2Z1bmN0aW9uIGU2KGMsbCxhLGQpe2NvbnN0IGg9RjMoYyxkLGwpLGY9bFtWb10sVD1XMShkLnBhcmVu'@;
put 'dHx8bFt6b10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBXPTA7VzxhLmxlbmd0aDtXKyspSm0oZixoLGFbV10sVCwhMSk7ZWxzZSBKbShmLGgsYSxULCExKTt2b2lkIDAhPT1RbSYmUW0oZixkLGwsYSxoKX1mdW5jdGlvbiBXNChjLGwpe2lmKG51bGwhPT1s'@;
put 'KXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEhsKGwsYyk7aWYoNCZhKXJldHVybiBZOSgtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gVzQoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBpYyhoKT9ZOSgtMSxoKTpf'@;
put 'YShoKX19aWYoMzImYSlyZXR1cm4gejkobCxjKSgpfHxfYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1EQyhjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06VzQoWjQoY1tKYV0pLGQpOlc0KGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gREMoYyxsKXtyZXR1'@;
put 'cm4gbnVsbCE9PWw/Y1tKYV1bem9dLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFk5KGMsbCl7Y29uc3QgYT1yYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtCaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gVzQoZCxoKX1yZXR1cm4g'@;
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 'IGMmJmNbTDFdLnNhbml0aXplcn1jbGFzcyBNaXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1hOnZv'@;
put 'aWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9'@;
put 'YH19Y29uc3QgUTQ9bmV3IE1pKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLFdDPW5ldyBNaSgiSU5KRUNUT1IiLC0xKSxHQz1uZXcgTWkoIklOSkVDVE9SX0RFRl9UWVBFUyIpO2NsYXNzICRDe2dldChsLGE9czApe2lmKGE9PT1zMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3Rv'@;
put 'ckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxYShsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gZ0koLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpxQygwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gcUMo'@;
put 'YywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtyZXR1cm4gRjQobCxmPT57Y29uc3QgXz1mO292KF8sYSxbXSxkKSYmKGh8fD1bXSxoLnB1c2goXykpfSksdm9pZCAwIT09aCYmS0MoaCxhKSxhfWZ1bmN0aW9uIEtDKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2Nv'@;
put 'bnN0e3Byb3ZpZGVyczpofT1jW2FdO3N2KGgsZj0+e2wucHVzaChmKX0pfX1mdW5jdGlvbiBvdihjLGwsYSxkKXtpZighKGM9Ym8oYykpKXJldHVybiExO2xldCBoPW51bGwsZj1ubShjKTtjb25zdCBfPSFmJiZRbyhjKTtpZihmfHxfKXtpZihfJiYhXy5zdGFuZGFsb25lKXJldHVybiExO2g9'@;
put 'Y31lbHNle2NvbnN0IFc9Yy5uZ01vZHVsZTtpZihmPW5tKFcpLCFmKXJldHVybiExO2g9V31jb25zdCBUPWQuaGFzKGgpO2lmKF8pe2lmKFQpcmV0dXJuITE7aWYoZC5hZGQoaCksXy5kZXBlbmRlbmNpZXMpe2NvbnN0IFc9ImZ1bmN0aW9uIj09dHlwZW9mIF8uZGVwZW5kZW5jaWVzP18uZGVw'@;
put 'ZW5kZW5jaWVzKCk6Xy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGllIG9mIFcpb3YoaWUsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFUKXtsZXQgaWU7ZC5hZGQoaCk7dHJ5e0Y0KGYuaW1wb3J0cyxwZT0+e292KHBlLGwsYSxkKSYmKGllfHw9W10s'@;
put 'aWUucHVzaChwZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09aWUmJktDKGllLGwpfWlmKCFUKXtjb25zdCBpZT1IMShoKXx8KCgpPT5uZXcgaCk7bC5wdXNoKHtwcm92aWRlOmgsdXNlRmFjdG9yeTppZSxkZXBzOlNzfSx7cHJvdmlkZTpHQyx1c2VWYWx1ZTpoLG11bHRpOiEwfSx7cHJvdmlkZTpR'@;
put 'NCx1c2VWYWx1ZTooKT0+YXIoaCksbXVsdGk6ITB9KX1jb25zdCBXPWYucHJvdmlkZXJzO251bGw9PVd8fFR8fHN2KFcscGU9PntsLnB1c2gocGUpfSl9fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gc3YoYyxsKXtmb3IobGV0IGEgb2YgYylUMihhKSYmKGE9'@;
put 'YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/c3YoYSxsKTpsKGEpfWNvbnN0IG1JPUFzKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpBc30pO2Z1bmN0aW9uIGF2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZtSSBpbiBjfWZ1bmN0aW9uIGxmKGMp'@;
put 'e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IHQ1PW5ldyBNaSgiU2V0IEluamVjdG9yIHNjb3BlLiIpLG82PXt9LHZJPXt9O2xldCBsdjtmdW5jdGlvbiBzNigpe3JldHVybiB2b2lkIDA9PT1sdiYmKGx2PW5ldyAkQyksbHZ9Y2xhc3MgcTB7fWNsYXNzIGN2IGV4dGVuZHMgcTB7'@;
put 'Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhp'@;
put 'cy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLGR2KGwsXz0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoXykpLHRoaXMucmVjb3Jkcy5zZXQoV0MsQjModm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxMCxCMyh2b2lkIDAsdGhp'@;
put 'cykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldCh0NSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoR0MubXVsdGksU3MsbnMuU2VsZikpfWRlc3Ryb3koKXt0'@;
put 'aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylhLm5nT25EZXN0cm95KCk7Y29uc3QgbD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3Qg'@;
put 'YSBvZiBsKWEoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhv'@;
put 'b2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9QTEodGhpcyksZD1kaSh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7QTEoYSksZGkoZCl9fWdldChsLGE9czAsZD1ucy5E'@;
put 'ZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkobWEpKXJldHVybiBsW21hXSh0aGlzKTtkPWEwKGQpO2NvbnN0IGg9QTEodGhpcyksZj1kaSh2b2lkIDApO3RyeXtpZighKGQmbnMuU2tpcFNlbGYpKXtsZXQgVD10aGlzLnJlY29yZHMuZ2V0KGwp'@;
put 'O2lmKHZvaWQgMD09PVQpe2NvbnN0IFc9ZnVuY3Rpb24gQ0koYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIE1pfShsKSYmeGQobCk7VD1XJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFcpP0IzKHV2KGwpLG82KTpudWxs'@;
put 'LHRoaXMucmVjb3Jkcy5zZXQobCxUKX1pZihudWxsIT1UKXJldHVybiB0aGlzLmh5ZHJhdGUobCxUKX1yZXR1cm4oZCZucy5TZWxmP3M2KCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZucy5PcHRpb25hbCYmYT09PXMwP251bGw6YSl9Y2F0Y2goXyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09'@;
put 'PV8ubmFtZSl7aWYoKF9ba3VdPV9ba3VdfHxbXSkudW5zaGlmdChxYShsKSksaCl0aHJvdyBfO3JldHVybiBmdW5jdGlvbiBBdShjLGwsYSxkKXtjb25zdCBoPWNba3VdO3Rocm93IGxbb21dJiZoLnVuc2hpZnQobFtvbV0pLGMubWVzc2FnZT1mdW5jdGlvbiBBZChjLGwsYSxkPW51bGwpe2M9'@;
put 'YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPXFhKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChxYSkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IF8gaW4g'@;
put 'bClpZihsLmhhc093blByb3BlcnR5KF8pKXtsZXQgVD1sW19dO2YucHVzaChfKyI6IisoInN0cmluZyI9PXR5cGVvZiBUP0pTT04uc3RyaW5naWZ5KFQpOnFhKFQpKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNl'@;
put 'KG5jLCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW2t1XT1udWxsLGN9KF8sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgX31maW5hbGx5e2RpKGYpLEExKGgpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25z'@;
put 'dCBsPUExKHRoaXMpLGE9ZGkodm9pZCAwKTt0cnl7Y29uc3QgZD10aGlzLmdldChRNC5tdWx0aSxTcyxucy5TZWxmKTtmb3IoY29uc3QgaCBvZiBkKWgoKX1maW5hbGx5e0ExKGwpLGRpKGEpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r'@;
put 'ZXlzKCkpbC5wdXNoKHFhKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPWxmKGw9Ym8obCkpP2w6Ym8obCYmbC5w'@;
put 'cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIGJJKGMpe3JldHVybiBhdihjKT9CMyh2b2lkIDAsYy51c2VWYWx1ZSk6QjMoUUMoYyksbzYpfShsKTtpZihsZihsKXx8ITAhPT1sLm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoYSk7ZWxzZXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUIz'@;
put 'KHZvaWQgMCxvNiwhMCksaC5mYWN0b3J5PSgpPT5LYyhoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtyZXR1cm4gYS52YWx1ZT09PW82JiYoYS52YWx1ZT12SSxhLnZhbHVlPWEuZmFj'@;
put 'dG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHdJKGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRk'@;
put 'KGEudmFsdWUpLGEudmFsdWV9aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPWJvKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZU'@;
put 'eXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiB1dihjKXtjb25zdCBsPXhkKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Okgx'@;
put 'KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBNaSl0aHJvdyBuZXcgQXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIF9JKGMpe2NvbnN0IGw9Yy5sZW5ndGg7aWYobD4wKXRocm93IEJkKGwsIj8iKSxuZXcgQXIoMjA0LCEx'@;
put 'KTtjb25zdCBhPWZ1bmN0aW9uIEhzKGMpe3JldHVybiBjJiYoY1tjM118fGNbTnNdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgQXIoMjA0LCExKX1mdW5jdGlvbiBRQyhjLGwsYSl7bGV0IGQ7aWYobGYoYykpe2Nv'@;
put 'bnN0IGg9Ym8oYyk7cmV0dXJuIEgxKGgpfHx1dihoKX1pZihhdihjKSlkPSgpPT5ibyhjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIEpDKGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uS2MoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVu'@;
put 'Y3Rpb24gWEMoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5hcihibyhjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPWJvKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24geUkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBIMSho'@;
put 'KXx8dXYoaCk7ZD0oKT0+bmV3IGgoLi4uS2MoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQjMoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gZHYoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/ZHYo'@;
put 'YSxsKTphJiZUMihhKT9kdihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWNvbnN0IGE2PW5ldyBNaSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TSX0pLFNJPSJuZyIsZVM9bmV3IE1pKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLEdzPW5ldyBNaSgiUGxhdGZvcm0g'@;
put 'SUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksdFM9bmV3IE1pKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksbDY9bmV3IE1pKCJDU1Agbm9uY2UiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5LNCgpLmJvZHk/LnF1ZXJ5U2VsZWN0b3IoIltu'@;
put 'Z0NzcE5vbmNlXSIpPy5nZXRBdHRyaWJ1dGUoIm5nQ3NwTm9uY2UiKXx8bnVsbH0pO2xldCByUz0oYyxsKT0+bnVsbDtmdW5jdGlvbiBvUyhjLGwpe3JldHVybiByUyhjLGwpfWNsYXNzIGxTe31jbGFzcyBjU3t9Y2xhc3MgWjN7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgZnVu'@;
put 'Y3Rpb24geXYoYyl7Y29uc3QgbD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cWEoYyl9LmApO3JldHVybiBsLm5nQ29tcG9uZW50PWMsbH0obCl9fWxldCBLMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OVUxMPW5ldyBaMyxjfSkoKTtmdW5jdGlvbiB3digpe3Jl'@;
put 'dHVybiBZZChNYygpLFhyKCkpfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIG5ldyBOaShIbChjLGwpKX1sZXQgTmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX19cmV0dXJuIGMuX19OR19FTEVNRU5UX0lEX189d3YsY30pKCk7ZnVuY3Rpb24gZGYo'@;
put 'Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jbGFzcyBZM3t9bGV0IEZvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbiBndSgpe2NvbnN0IGM9'@;
put 'WHIoKSxhPW10KE1jKCkuaW5kZXgsYyk7cmV0dXJuKFNjKGEpP2E6YylbVm9dfSgpLGN9KSgpLHA2PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLGN9KSgpO2NsYXNzIHM1e2NvbnN0cnVj'@;
put 'dG9yKGwpe3RoaXMuZnVsbD1sLHRoaXMubWFqb3I9bC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9bC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9bC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgQUk9bmV3IHM1KCIxNi4xLjciKSxDdj17fTtmdW5jdGlvbiBhNShjKXtm'@;
put 'b3IoO2M7KXtjW0RvXXw9NjQ7Y29uc3QgbD1aNChjKTtpZih4NChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWZ1bmN0aW9uIFN2KGMpe3JldHVybiBjLm5nT3JpZ2luYWxFcnJvcn1jbGFzcyBoZntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJv'@;
put 'cihsKXtjb25zdCBhPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKGwpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKSxhJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsYSl9X2ZpbmRPcmlnaW5hbEVycm9yKGwpe2xldCBhPWwmJlN2KGwpO2Zvcig7YSYmU3YoYSk7'@;
put 'KWE9U3YoYSk7cmV0dXJuIGF8fG51bGx9fWNvbnN0IHh2PW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBtNihjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZmKGMpe3JldHVybiBjLm93bmVyRG9jdW1l'@;
put 'bnR9ZnVuY3Rpb24gRXYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5ib2R5fWZ1bmN0aW9uIFdkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9Y2xhc3MgdjYgZXh0ZW5kcyB2M3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25zdW1lckFs'@;
put 'bG93U2lnbmFsV3JpdGVzPSExLHRoaXMuX2xWaWV3PW51bGx9c2V0IGxWaWV3KGwpe3RoaXMuX2xWaWV3PWx9b25Db25zdW1lckRlcGVuZGVuY3lNYXlIYXZlQ2hhbmdlZCgpe2E1KHRoaXMuX2xWaWV3KX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fWdldCBoYXNSZWFkQVNpZ25h'@;
put 'bCgpe3JldHVybiB0aGlzLmhhc1Byb2R1Y2Vyc31ydW5JbkNvbnRleHQobCxhLGQpe2NvbnN0IGg9ZmwodGhpcyk7dGhpcy50cmFja2luZ1ZlcnNpb24rKzt0cnl7bChhLGQpfWZpbmFsbHl7ZmwoaCl9fWRlc3Ryb3koKXt0aGlzLnRyYWNraW5nVmVyc2lvbisrfX1sZXQgXzY9bnVsbDtmdW5j'@;
put 'dGlvbiBtUygpe3JldHVybiBfNj8/PW5ldyB2NixfNn1mdW5jdGlvbiB2UyhjLGwpe3JldHVybiBjW2xdPz9tUygpfWZ1bmN0aW9uIF9TKGMsbCl7Y29uc3QgYT1tUygpO2EuaGFzUmVhZEFTaWduYWwmJihjW2xdPV82LGEubFZpZXc9YyxfNj1uZXcgdjYpfWNvbnN0IFpvPXt9O2Z1bmN0aW9u'@;
put 'IENlKGMpe2t2KFRzKCksWHIoKSxldSgpK2MsITEpfWZ1bmN0aW9uIGt2KGMsbCxhLGQpe2lmKCFkKWlmKDM9PSgzJmxbRG9dKSl7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYma20obCxmLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkFt'@;
put 'KGwsZiwwLGEpfVhoKGEpfWZ1bmN0aW9uIEF2KGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPVR2KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gVHYoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxTcyxn'@;
put 'SShjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6cWEoYykpLG5ldyBjdihmLGx8fHM2KCksZHx8bnVsbCxoKX1sZXQgRWE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgY3JlYXRlKGEsZCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gQXYoe25hbWU6IiJ9LGQsYSwi'@;
put 'Iik7e2NvbnN0IGg9YS5uYW1lPz8iIjtyZXR1cm4gQXYoe25hbWU6aH0sYS5wYXJlbnQsYS5wcm92aWRlcnMsaCl9fX1yZXR1cm4gYy5USFJPV19JRl9OT1RfRk9VTkQ9czAsYy5OVUxMPW5ldyAkQyxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5Oigp'@;
put 'PT5hcihXQyl9KSxjLl9fTkdfRUxFTUVOVF9JRF9fPS0xLGN9KSgpO2Z1bmN0aW9uIHR0KGMsbD1ucy5EZWZhdWx0KXtjb25zdCBhPVhyKCk7cmV0dXJuIG51bGw9PT1hP2FyKGMsbCk6bkMoTWMoKSxhLGJvKGMpLGwpfWZ1bmN0aW9uIGI2KGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlKXtjb25z'@;
put 'dCB3ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB3ZVtIaV09aCx3ZVtEb109MTQwfGQsKG51bGwhPT1pZXx8YyYmMjA0OCZjW0RvXSkmJih3ZVtEb118PTIwNDgpLHlvKHdlKSx3ZVt1YV09d2VbT2xdPWMsd2VbVmFdPWEsd2VbTDFdPV98fGMmJmNbTDFdLHdlW1ZvXT1UfHxjJiZjW1Zv'@;
put 'XSx3ZVtMZF09V3x8YyYmY1tMZF18fG51bGwsd2Vbem9dPWYsd2VbJGhdPWZ1bmN0aW9uIFcyKCl7cmV0dXJuIE45Kyt9KCksd2VbdTBdPXBlLHdlW1IxXT1pZSx3ZVtKYV09Mj09bC50eXBlP2NbSmFdOndlLHdlfWZ1bmN0aW9uIEczKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51'@;
put 'bGw9PT1mKWY9ZnVuY3Rpb24gRHYoYyxsLGEsZCxoKXtjb25zdCBmPUZ3KCksXz1iOSgpLFc9Yy5kYXRhW2xdPWZ1bmN0aW9uIHc2KGMsbCxhLGQsaCxmKXtsZXQgXz1sP2wuaW5qZWN0b3JJbmRleDotMSxUPTA7cmV0dXJuIHczKCkmJihUfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRC'@;
put 'ZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6XyxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpULHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgs'@;
put 'YXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6bCxwcm9qZWN0'@;
put 'aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsXz9m'@;
put 'OmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPVcpLG51bGwhPT1mJiYoXz9udWxsPT1mLmNoaWxkJiZudWxsIT09Vy5wYXJlbnQmJihmLmNoaWxkPVcpOm51bGw9PT1mLm5leHQmJihmLm5leHQ9VyxXLnByZXY9ZikpLFd9KGMs'@;
put 'bCxhLGQsaCksZnVuY3Rpb24gcVQoKXtyZXR1cm4gUG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCBfPWZ1bmN0aW9uIEw0KCl7Y29uc3QgYz1Qby5sRnJhbWUsbD1jLmN1cnJlbnRU'@;
put 'Tm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09Xz8tMTpfLmluamVjdG9ySW5kZXh9cmV0dXJuIE4xKGYsITApLGZ9ZnVuY3Rpb24gbDUoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9'@;
put 'MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIEVTKGMsbCxhLGQsaCl7Y29uc3QgZj12UyhsLHAzKSxfPWV1KCksVD0yJmQ7dHJ5e2lmKFhoKC0xKSxUJiZsLmxlbmd0aD5wcyYma3YoYyxsLHBzLCExKSxo'@;
put 'MChUPzI6MCxoKSxUKWYucnVuSW5Db250ZXh0KGEsZCxoKTtlbHNle2NvbnN0IGllPWZsKG51bGwpO3RyeXthKGQsaCl9ZmluYWxseXtmbChpZSl9fX1maW5hbGx5e1QmJm51bGw9PT1sW3AzXSYmX1MobCxwMyksWGgoXyksaDAoVD8zOjEsaCl9fWZ1bmN0aW9uIEl2KGMsbCxhKXtpZihPZChs'@;
put 'KSl7Y29uc3QgZD1mbChudWxsKTt0cnl7Y29uc3QgZj1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IF89bC5kaXJlY3RpdmVTdGFydDtfPGY7XysrKXtjb25zdCBUPWMuZGF0YVtfXTtULmNvbnRlbnRRdWVyaWVzJiZULmNvbnRlbnRRdWVyaWVzKDEsYVtfXSxfKX19ZmluYWxseXtmbChkKX19fWZ1'@;
put 'bmN0aW9uIEx2KGMsbCxhKXtQdygpJiYoZnVuY3Rpb24gWUkoYyxsLGEsZCl7Y29uc3QgaD1hLmRpcmVjdGl2ZVN0YXJ0LGY9YS5kaXJlY3RpdmVFbmQ7UDEoYSkmJmZ1bmN0aW9uIEpJKGMsbCxhKXtjb25zdCBkPUhsKGwsYyksaD1rUyhhKTtsZXQgXz0xNjthLnNpZ25hbHM/Xz00MDk2OmEu'@;
put 'b25QdXNoJiYoXz02NCk7Y29uc3QgVD1TNihjLGI2KGMsaCxudWxsLF8sZCxsLG51bGwsY1tMMV0ucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGQsYSksbnVsbCxudWxsLG51bGwpKTtjW2wuaW5kZXhdPVR9KGwsYSxjLmRhdGFbaCthLmNvbXBvbmVudE9mZnNldF0pLGMuZmlyc3RD'@;
put 'cmVhdGVQYXNzfHxJbShhLGwpLEJjKGQsbCk7Y29uc3QgXz1hLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBUPWg7VDxmO1QrKyl7Y29uc3QgVz1jLmRhdGFbVF0saWU9UWgobCxjLFQsYSk7QmMoaWUsbCksbnVsbCE9PV8mJlFJKDAsVC1oLGllLFcsMCxfKSxRYyhXKSYmKG10KGEuaW5kZXgsbClb'@;
put 'VmFdPVFoKGwsYyxULGEpKX19KGMsbCxhLEhsKGEsbCkpLDY0PT0oNjQmYS5mbGFncykmJlJTKGMsbCxhKSl9ZnVuY3Rpb24geTYoYyxsLGE9SGwpe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtj'@;
put 'b25zdCBfPWRbZisxXSxUPS0xPT09Xz9hKGwsYyk6Y1tfXTtjW2grK109VH19fWZ1bmN0aW9uIGtTKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PSQzKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGly'@;
put 'ZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uICQzKGMsbCxhLGQsaCxmLF8sVCxXLGllLHBlKXtjb25zdCB3ZT1wcytkLEVlPXdlK2gsWmU9ZnVuY3Rpb24gQVMoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8'@;
put 'bDtkKyspYS5wdXNoKGQ8Yz9udWxsOlpvKTtyZXR1cm4gYX0od2UsRWUpLGl0PSJmdW5jdGlvbiI9PXR5cGVvZiBpZT9pZSgpOmllO3JldHVybiBaZVtCaV09e3R5cGU6YyxibHVlcHJpbnQ6WmUsdGVtcGxhdGU6YSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OlQsZGVjbFROb2RlOmwsZGF0YTpa'@;
put 'ZS5zbGljZSgpLmZpbGwobnVsbCx3ZSksYmluZGluZ1N0YXJ0SW5kZXg6d2UsZXhwYW5kb1N0YXJ0SW5kZXg6RWUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVl'@;
put 'cmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50'@;
put 'UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZj9mKCk6ZixwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIF8/XygpOl8sZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Vyxjb25zdHM6aXQsaW5jb21wbGV0ZUZpcnN0'@;
put 'UGFzczohMSxzc3JJZDpwZX19bGV0IFJ2PWM9Pm51bGw7ZnVuY3Rpb24gcGYoYyxsLGEsZCl7Zm9yKGxldCBoIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShoKSl7YT1udWxsPT09YT97fTphO2NvbnN0IGY9Y1toXTtudWxsPT09ZD9DNihhLGwsaCxmKTpkLmhhc093blByb3BlcnR5KGgpJiZD'@;
put 'NihhLGwsZFtoXSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBDNihjLGwsYSxkKXtjLmhhc093blByb3BlcnR5KGEpP2NbYV0ucHVzaChsLGQpOmNbYV09W2wsZF19ZnVuY3Rpb24gUHUoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBXPUhsKGwsYSk7bGV0IHBlLGllPWwuaW5wdXRzOyFUJiZudWxsIT1p'@;
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 'O2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkoXykhPVQmJl8ucHVzaChUKSxfLnB1c2goYSxkLGYpfX0oYyxsLGQsbDUoYyxhLGguaG9zdFZhcnMsWm8pLGgpfWZ1bmN0aW9uICQxKGMsbCxhLGQsaCxmKXtjb25zdCBfPUhsKGMsbCk7IWZ1bmN0aW9uIEZ2'@;
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 'b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHU1KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtpZihudWxsIT09ZiYmZC5wdXNoKF9hKGYpKSxpYyhmKSl7Zm9yKGxldCBUPXJjO1Q8Zi5sZW5ndGg7VCsr'@;
put 'KXtjb25zdCBXPWZbVF0saWU9V1tCaV0uZmlyc3RDaGlsZDtudWxsIT09aWUmJnU1KFdbQmldLFcsaWUsZCl9ZltkMF0hPT1mW0hpXSYmZC5wdXNoKGZbZDBdKX1jb25zdCBfPWEudHlwZTtpZig4Jl8pdTUoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZfKXtjb25zdCBUPXo5KGEsbCk7bGV0'@;
put 'IFc7Zm9yKDtXPVQoKTspZC5wdXNoKFcpfWVsc2UgaWYoMTYmXyl7Y29uc3QgVD1EQyhsLGEpO2lmKEFycmF5LmlzQXJyYXkoVCkpZC5wdXNoKC4uLlQpO2Vsc2V7Y29uc3QgVz1aNChsW0phXSk7dTUoV1tCaV0sVyxULGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJu'@;
put 'IGR9ZnVuY3Rpb24geDYoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0wxXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbiYmaC5iZWdpbigpO3RyeXtVUyhjLGwsYy50ZW1wbGF0ZSxhKX1jYXRjaChfKXt0aHJvdyBkJiZCUyhsLF8pLF99ZmluYWxseXtoLmVuZCYmaC5lbmQoKSxsW0wxXS5lZmZlY3RN'@;
put 'YW5hZ2VyPy5mbHVzaCgpfX1mdW5jdGlvbiBVUyhjLGwsYSxkKXtjb25zdCBoPWxbRG9dO2lmKDI1NiE9KDI1NiZoKSl7bFtMMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKSxTOShsKTt0cnl7eW8obCksZnVuY3Rpb24gTncoYyl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i'@;
put 'aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJkVTKGMsbCxhLDIsZCk7Y29uc3QgXz0zPT0oMyZoKTtpZihfKXtjb25zdCBpZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUsbnVsbCl9ZWxzZXtjb25zdCBpZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWllJiZBbShs'@;
put 'LGllLDAsbnVsbCksTTkobCwwKX1pZihmdW5jdGlvbiBhTChjKXtmb3IobGV0IGw9Q0MoYyk7bnVsbCE9PWw7bD1TQyhsKSl7aWYoIWxbdW1dKWNvbnRpbnVlO2NvbnN0IGE9bFtIMl07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2VzKGFbZF0pfX19KGwpLFpTKGwsMiksbnVsbCE9PWMu'@;
put 'Y29udGVudFF1ZXJpZXMmJkZTKGMsbCksXyl7Y29uc3QgaWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDEpLE05KGwsMSl9IWZ1bmN0aW9uIHhTKGMsbCl7Y29uc3QgYT1jLmhv'@;
put 'c3RCaW5kaW5nT3BDb2RlcztpZihudWxsPT09YSlyZXR1cm47Y29uc3QgZD12UyhsLGczKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZihmPDApWGgofmYpO2Vsc2V7Y29uc3QgXz1mLFQ9YVsrK2hdLFc9YVsrK2hdO0tUKFQsXyksZC5ydW5JbkNvbnRl'@;
put 'eHQoVywyLGxbX10pfX19ZmluYWxseXtudWxsPT09bFtnM10mJl9TKGwsZzMpLFhoKC0xKX19KGMsbCk7Y29uc3QgVD1jLmNvbXBvbmVudHM7bnVsbCE9PVQmJldTKGwsVCwwKTtjb25zdCBXPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1XJiZIdigyLFcsZCksXyl7Y29uc3QgaWU9Yy52aWV3Q2hl'@;
put 'Y2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy52aWV3SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDIpLE05KGwsMil9ITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW0RvXSY9LTczLHpzKGwpfWZpbmFsbHl7TW0oKX19fWZ1'@;
put 'bmN0aW9uIFpTKGMsbCl7Zm9yKGxldCBhPUNDKGMpO251bGwhPT1hO2E9U0MoYSkpZm9yKGxldCBkPXJjO2Q8YS5sZW5ndGg7ZCsrKVlTKGFbZF0sbCl9ZnVuY3Rpb24gbEwoYyxsLGEpe1lTKG10KGwsYyksYSl9ZnVuY3Rpb24gWVMoYyxsKXtpZighZnVuY3Rpb24gR3QoYyl7cmV0dXJuIDEy'@;
put 'OD09KDEyOCZjW0RvXSl9KGMpKXJldHVybjtjb25zdCBhPWNbQmldO2lmKDgwJmNbRG9dJiYwPT09bHx8MTAyNCZjW0RvXXx8Mj09PWwpVVMoYSxjLGEudGVtcGxhdGUsY1tWYV0pO2Vsc2UgaWYoY1tJMV0+MCl7WlMoYywxKTtjb25zdCBoPWNbQmldLmNvbXBvbmVudHM7bnVsbCE9PWgmJldT'@;
put 'KGMsaCwxKX19ZnVuY3Rpb24gV1MoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxMKGMsbFtkXSxhKX1jbGFzcyBkNXtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbQmldO3JldHVybiB1NShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbVmFdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W1ZhXT1s'@;
put 'fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMjU2PT0oMjU2JnRoaXMuX2xWaWV3W0RvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3'@;
put 'W3VhXTtpZihpYyhsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHNmKGwsZCksUG0oYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9S20odGhpcy5fbFZpZXdbQmldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7IWZ1bmN0aW9uIGYw'@;
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 'RGVmcyh2bixObixjciksTm4ucHVzaCh2bikpOk5uPVt2bl07Y29uc3QgRHI9ZnVuY3Rpb24gcVMoYyxsKXtjb25zdCBhPWNbQmldLGQ9cHM7cmV0dXJuIGNbZF09bCxHMyhhLGQsMiwiI2hvc3QiLG51bGwpfShTdCxaZSksX2k9ZnVuY3Rpb24gZkwoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1o'@;
put 'W0JpXTshZnVuY3Rpb24gcEwoYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPVloKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoTTYobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmT0MoZCxhLGwpKX0oZCxjLGwsXyk7'@;
put 'bGV0IFc9bnVsbDtudWxsIT09bCYmKFc9b1MobCxoW0xkXSkpO2NvbnN0IGllPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IHBlPTE2O2Euc2lnbmFscz9wZT00MDk2OmEub25QdXNoJiYocGU9NjQpO2NvbnN0IHdlPWI2KGgsa1MoYSksbnVsbCxwZSxoW2MuaW5k'@;
put 'ZXhdLGMsZixpZSxudWxsLG51bGwsVyk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZQdihULGMsZC5sZW5ndGgtMSksUzYoaCx3ZSksaFtjLmluZGV4XT13ZX0oRHIsWmUsdm4sTm4sU3QscGUsd2UpO25uPWtlKEV0LHBzKSxaZSYmZnVuY3Rpb24gbUwoYyxsLGEsZCl7aWYoZClEZChjLGEs'@;
put 'WyJuZy12ZXJzaW9uIixBSS5mdWxsXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gXzQoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w'@;
put 'dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIUhjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJkRkKGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZSQyhjLGEsZi5qb2luKCIgIikpfX0od2Usdm4sWmUsZCks'@;
put 'dm9pZCAwIT09YSYmZnVuY3Rpb24gdkwoYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KG5uLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLEp0'@;
put 'PWZ1bmN0aW9uIGdMKGMsbCxhLGQsaCxmKXtjb25zdCBfPU1jKCksVD1oW0JpXSxXPUhsKF8saCk7YzUoVCxoLF8sYSxudWxsLGQpO2ZvcihsZXQgcGU9MDtwZTxhLmxlbmd0aDtwZSsrKUJjKFFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K3BlLF8pLGgpO1JTKFQsaCxfKSxXJiZCYyhXLGgpO2Nv'@;
put 'bnN0IGllPVFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K18uY29tcG9uZW50T2Zmc2V0LF8pO2lmKGNbVmFdPWhbVmFdPWllLG51bGwhPT1mKWZvcihjb25zdCBwZSBvZiBmKXBlKGllLGwpO3JldHVybiBJdihULF8sYyksaWV9KF9pLHZuLE5uLGNyLFN0LFtfTF0pLFZ2KEV0LFN0LG51bGwpfWZp'@;
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 'Y29uc3RzLHBlPUczKGwsYyw0LF98fG51bGwsSXIoaWUsVCkpO092KGwsYSxwZSxJcihpZSxXKSksRW0obCxwZSk7Y29uc3Qgd2U9cGUudFZpZXc9JDMoMixwZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLGllLG51bGwpO3JldHVybiBu'@;
put 'dWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwscGUpLHdlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcocGUpKSxwZX0ocGUsaWUsVyxsLGEsZCxoLGYsXyk6aWUuZGF0YVtwZV07TjEod2UsITEpO2NvbnN0IEVlPUt2KGllLFcsd2UsYyk7eG0oKSYmZTYoaWUs'@;
put 'VyxFZSx3ZSksQmMoRWUsVyksUzYoVyxXW3BlXT1QUyhFZSxXLEVlLHdlKSkscWgod2UpJiZMdihpZSxXLHdlKSxudWxsIT1fJiZ5NihXLHdlLFQpfWxldCBLdj1mdW5jdGlvbiBYdihjLGwsYSxkKXtyZXR1cm4gVmQoITApLGxbVm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiAkaShj'@;
put 'KXtyZXR1cm4gJGUoZnVuY3Rpb24gJFQoKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlld30oKSxwcytjKX1mdW5jdGlvbiBSZShjLGwsYSl7Y29uc3QgZD1YcigpO3JldHVybiBqYyhkLEMzKCksbCkmJlB1KFRzKCksUWEoKSxkLGMsbCxkW1ZvXSxhLCExKSxSZX1mdW5jdGlvbiBKdihj'@;
put 'LGwsYSxkLGgpe2NvbnN0IF89aD8iY2xhc3MiOiJzdHlsZSI7TnYoYyxhLGwuaW5wdXRzW19dLF8sZCl9ZnVuY3Rpb24gbWUoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPXBzK2MsVD1oW1ZvXSxXPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIHVNKGMsbCxhLGQsaCxmKXtjb25z'@;
put 'dCBfPWwuY29uc3RzLFc9RzMobCxjLDIsZCxJcihfLGgpKTtyZXR1cm4gT3YobCxhLFcsSXIoXyxmKSksbnVsbCE9PVcuYXR0cnMmJk02KFcsVy5hdHRycywhMSksbnVsbCE9PVcubWVyZ2VkQXR0cnMmJk02KFcsVy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVz'@;
put 'LmVsZW1lbnRTdGFydChsLFcpLFd9KF8sZixoLGwsYSxkKTpmLmRhdGFbX10saWU9ZE0oZixoLFcsVCxsLGMpO2hbX109aWU7Y29uc3QgcGU9cWgoVyk7cmV0dXJuIE4xKFcsITApLE9DKFQsaWUsVyksMzIhPSgzMiZXLmZsYWdzKSYmeG0oKSYmZTYoZixoLGllLFcpLDA9PT1mdW5jdGlvbiBC'@;
put 'VCgpe3JldHVybiBQby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCkmJkJjKGllLGgpLGZ1bmN0aW9uIGpUKCl7UG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCkscGUmJihMdihmLGgsVyksSXYoZixXLGgpKSxudWxsIT09ZCYmeTYoaCxXKSxtZX1mdW5jdGlvbiB5ZSgpe2xldCBj'@;
put 'PU1jKCk7YjkoKT9DbSgpOihjPWMucGFyZW50LE4xKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIFVUKGMpe3JldHVybiBQby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBHVCgpe1BvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiB6'@;
put 'VCgpe1BvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9VHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFbShhLGMpLE9kKGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHNEKGMpe3JldHVy'@;
put 'biAwIT0oOCZjLmZsYWdzKX0obCkmJkp2KGEsbCxYcigpLGwuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1sLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBhRChjKXtyZXR1cm4gMCE9KDE2JmMuZmxhZ3MpfShsKSYmSnYoYSxsLFhyKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSks'@;
put 'eWV9ZnVuY3Rpb24gcXQoYyxsLGEsZCl7cmV0dXJuIG1lKGMsbCxhLGQpLHllKCkscXR9bGV0IGRNPShjLGwsYSxkLGgsZik9PihWZCghMCkscW0oZCxoLGZ1bmN0aW9uIEd3KCl7cmV0dXJuIFBvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gVnIoYyxsLGEpe2NvbnN0'@;
put 'IGQ9WHIoKSxoPVRzKCksZj1jK3BzLF89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUXYoYyxsLGEsZCxoKXtjb25zdCBmPWwuY29uc3RzLF89SXIoZixkKSxUPUczKGwsYyw4LCJuZy1jb250YWluZXIiLF8pO3JldHVybiBudWxsIT09XyYmTTYoVCxfLCEwKSxPdihsLGEsVCxJcihmLGgp'@;
put 'KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsVCksVH0oZixoLGQsbCxhKTpoLmRhdGFbZl07TjEoXywhMCk7Y29uc3QgVD1mTShoLGQsXyxjKTtyZXR1cm4gZFtmXT1ULHhtKCkmJmU2KGgsZCxULF8pLEJjKFQsZCkscWgoXykmJihMdihoLGQsXyksSXYoaCxf'@;
put 'LGQpKSxudWxsIT1hJiZ5NihkLF8pLFZyfWZ1bmN0aW9uIGpyKCl7bGV0IGM9TWMoKTtjb25zdCBsPVRzKCk7cmV0dXJuIGI5KCk/Q20oKTooYz1jLnBhcmVudCxOMShjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihFbShsLGMpLE9kKGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksanJ9'@;
put 'ZnVuY3Rpb24gamEoYyxsLGEpe3JldHVybiBWcihjLGwsYSksanIoKSxqYX1sZXQgZk09KGMsbCxhLGQpPT4oVmQoITApLFU5KGxbVm9dLCIiKSk7ZnVuY3Rpb24gVm4oKXtyZXR1cm4gWHIoKX1mdW5jdGlvbiB2NShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVu'@;
put 'Y3Rpb24gcE0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9ZnVuY3Rpb24geHQoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPU1jKCk7cmV0dXJuIGdNKGYsaCxoW1ZvXSxfLGMsbCxkKSx4dH1mdW5jdGlvbiBlXyhjLGwpe2NvbnN0IGE9TWMoKSxk'@;
put 'PVhyKCksaD1UcygpO3JldHVybiBnTShoLGQsVlModzkoaC5kYXRhKSxhLGQpLGEsYyxsKSxlX31mdW5jdGlvbiBnTShjLGwsYSxkLGgsZixfKXtjb25zdCBUPXFoKGQpLGllPWMuZmlyc3RDcmVhdGVQYXNzJiZOUyhjKSxwZT1sW1ZhXSx3ZT1IUyhsKTtsZXQgRWU9ITA7aWYoMyZkLnR5cGV8'@;
put 'fF8pe2NvbnN0IGV0PUhsKGQsbCkseXQ9Xz9fKGV0KTpldCxFdD13ZS5sZW5ndGgsU3Q9Xz9ubj0+XyhfYShubltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIV8mJlQmJihKdD1mdW5jdGlvbiBYTChjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihs'@;
put 'ZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCBfPWhbZl07aWYoXz09PWEmJmhbZisxXT09PWQpe2NvbnN0IFQ9bFtUdV0sVz1oW2YrMl07cmV0dXJuIFQubGVuZ3RoPlc/VFtXXTpudWxsfSJzdHJpbmciPT10eXBlb2YgXyYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4'@;
put 'KSksbnVsbCE9PUp0KShKdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8SnQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsSnQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixFZT0hMTtlbHNle2Y9dk0oZCxsLHBlLGYsITEpO2NvbnN0IG5uPWEubGlzdGVuKHl0LGgsZik7d2UucHVzaChmLG5uKSxpZSYm'@;
put 'aWUucHVzaChoLFN0LEV0LEV0KzEpfX1lbHNlIGY9dk0oZCxsLHBlLGYsITEpO2NvbnN0IFplPWQub3V0cHV0cztsZXQgaXQ7aWYoRWUmJm51bGwhPT1aZSYmKGl0PVplW2hdKSl7Y29uc3QgZXQ9aXQubGVuZ3RoO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldDt5dCs9Mil7Y29uc3Qgdm49bFtp'@;
put 'dFt5dF1dW2l0W3l0KzFdXS5zdWJzY3JpYmUoZiksTm49d2UubGVuZ3RoO3dlLnB1c2goZix2biksaWUmJmllLnB1c2goaCxkLmluZGV4LE5uLC0oTm4rMSkpfX19ZnVuY3Rpb24gbU0oYyxsLGEsZCl7dHJ5e3JldHVybiBoMCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGgpe3JldHVybiBCUyhj'@;
put 'LGgpLCExfWZpbmFsbHl7aDAoNyxsLGEpfX1mdW5jdGlvbiB2TShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKF8pe2lmKF89PT1GdW5jdGlvbilyZXR1cm4gZDthNShjLmNvbXBvbmVudE9mZnNldD4tMT9tdChjLmluZGV4LGwpOmwpO2xldCBXPW1NKGwsYSxkLF8pLGllPWYuX19uZ05l'@;
put 'eHRMaXN0ZW5lckZuX187Zm9yKDtpZTspVz1tTShsLGEsaWUsXykmJlcsaWU9aWUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09VyYmXy5wcmV2ZW50RGVmYXVsdCgpLFd9fWZ1bmN0aW9uIFZlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIFhUKGMpe3JldHVybihQby5sRnJhbWUu'@;
put 'Y29udGV4dExWaWV3PWZ1bmN0aW9uIEpUKGMsbCl7Zm9yKDtjPjA7KWw9bFtPbF0sYy0tO3JldHVybiBsfShjLFBvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtWYV19KGMpfWZ1bmN0aW9uIEpMKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIFdoKGMpe2NvbnN0IGw9Yy5hdHRycztp'@;
put 'ZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9tNChjLGYsITApOnY0KGQsZikpcmV0dXJuIGh9'@;
put 'ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gVGkoYyl7Y29uc3QgbD1YcigpW0phXVt6b107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249QmQoYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IF89'@;
put 'Yz9KTChmLGMpOjA7bnVsbCE9PV8mJihoW19dP2hbX10ucHJvamVjdGlvbk5leHQ9ZjpkW19dPWYsaFtfXT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIGtyKGMsbD0wLGEpe2NvbnN0IGQ9WHIoKSxoPVRzKCksZj1HMyhoLHBzK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9u'@;
put 'JiYoZi5wcm9qZWN0aW9uPWwpLENtKCksKCFkW3UwXXx8dzMoKSkmJjMyIT0oMzImZi5mbGFncykmJmZ1bmN0aW9uIFlEKGMsbCxhKXtXRChsW1ZvXSwwLGwsYSxGMyhjLGEsbCksVzEoYS5wYXJlbnR8fGxbem9dLGEsbCkpfShoLGQsZil9ZnVuY3Rpb24gRWMoYyxsLGEpe3JldHVybiBYMihj'@;
put 'LCIiLGwsIiIsYSksRWN9ZnVuY3Rpb24gWDIoYyxsLGEsZCxoKXtjb25zdCBmPVhyKCksXz1LMyhmLGwsYSxkKTtyZXR1cm4gXyE9PVpvJiZQdShUcygpLFFhKCksZixjLF8sZltWb10saCwhMSksWDJ9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBYMChjKXty'@;
put 'ZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gdF8oYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBKMChjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIG5fKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8PDJ9ZnVuY3Rpb24gcl8oYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBNTShjLGwsYSxkLGgp'@;
put 'e2NvbnN0IGY9Y1thKzFdLF89bnVsbD09PWw7bGV0IFQ9ZD9YMChmKTpKMChmKSxXPSExO2Zvcig7MCE9PVQmJighMT09PVd8fF8pOyl7Y29uc3QgcGU9Y1tUKzFdO25SKGNbVF0sbCkmJihXPSEwLGNbVCsxXT1kP3JfKHBlKTp0XyhwZSkpLFQ9ZD9YMChwZSk6SjAocGUpfVcmJihjW2ErMV09'@;
put 'ZD90XyhmKTpyXyhmKSl9ZnVuY3Rpb24gblIoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZqZChjLGwpPj0wfWNvbnN0IFZsPXt0ZXh0RW5kOjAsa2V5'@;
put 'OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiB4TShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoVmwua2V5LFZsLmtleUVuZCl9ZnVuY3Rpb24gRU0oYyxsKXtjb25zdCBhPVZsLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPVZsLmtleUVuZD1mdW5jdGlvbiBzUihjLGws'@;
put 'YSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLFZsLmtleT1sLGEpLHZmKGMsbCxhKSl9ZnVuY3Rpb24gdmYoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gSHUoYyxsLGEpe3JldHVybiB2MChj'@;
put 'LGwsYSwhMSksSHV9ZnVuY3Rpb24gZHIoYyxsKXtyZXR1cm4gdjAoYyxsLG51bGwsITApLGRyfWZ1bmN0aW9uIEsxKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGlSKGMpe3JldHVybiBmdW5jdGlvbiBGdShjKXtWbC5rZXk9MCxWbC5rZXlFbmQ9MCxWbC52YWx1ZT0wLFZsLnZhbHVlRW5kPTAs'@;
put 'VmwudGV4dEVuZD1jLmxlbmd0aH0oYyksRU0oYyx2ZihjLDAsVmwudGV4dEVuZCkpfShsKTthPj0wO2E9RU0obCxhKSl4YyhjLHhNKGwpLCEwKX1mdW5jdGlvbiB2MChjLGwsYSxkKXtjb25zdCBoPVhyKCksZj1UcygpLF89VjEoMik7Zi5maXJzdFVwZGF0ZVBhc3MmJlgxKGYsYyxfLGQpLGwh'@;
put 'PT1abyYmamMoaCxfLGwpJiZjXyhmLGYuZGF0YVtldSgpXSxoLGhbVm9dLGMsaFtfKzFdPWZ1bmN0aW9uIExNKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9cWEoJDIoYykpKSksY30obCxhKSxkLF8p'@;
put 'fWZ1bmN0aW9uIERNKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gWDEoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2V1KCldLF89RE0oYyxhKTt1XyhmLGQpJiZudWxsPT09bCYmIV8mJihsPSExKSxsPWZ1bmN0'@;
put 'aW9uIGxSKGMsbCxhLGQpe2NvbnN0IGg9dzkoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9eTUoYT1sXyhudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1u'@;
put 'dWxsKTtlbHNle2NvbnN0IF89bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PV98fGNbX10hPT1oKWlmKGE9bF8oaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IFc9ZnVuY3Rpb24gY1IoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1K'@;
put 'MChkKSlyZXR1cm4gY1tYMChkKV19KGMsbCxkKTt2b2lkIDAhPT1XJiZBcnJheS5pc0FycmF5KFcpJiYoVz1sXyhudWxsLGMsbCxXWzFdLGQpLFc9eTUoVyxsLmF0dHJzLGQpLGZ1bmN0aW9uIHVSKGMsbCxhLGQpe2NbWDAoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0o'@;
put 'YyxsLGQsVykpfWVsc2UgZj1mdW5jdGlvbiBkUihjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD15NShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiB5NShkLGwuYXR0cnMsYSl9KGMsbCxkKX1y'@;
put 'ZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIGVSKGMsbCxhLGQsaCxmKXtsZXQgXz1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsVD1YMChfKSxXPUowKF8pO2NbZF09YTtsZXQg'@;
put 'cGUsaWU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8ocGU9YVsxXSwobnVsbD09PXBlfHxqZChhLHBlKT4wKSYmKGllPSEwKSk6cGU9YSxoKWlmKDAhPT1XKXtjb25zdCBFZT1YMChjW1QrMV0pO2NbZCsxXT1iNShFZSxUKSwwIT09RWUmJihjW0VlKzFdPW5fKGNbRWUrMV0sZCkpLGNbVCsxXT1m'@;
put 'dW5jdGlvbiBTaShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tUKzFdLGQpfWVsc2UgY1tkKzFdPWI1KFQsMCksMCE9PVQmJihjW1QrMV09bl8oY1tUKzFdLGQpKSxUPWQ7ZWxzZSBjW2QrMV09YjUoVywwKSwwPT09VD9UPWQ6Y1tXKzFdPW5fKGNbVysxXSxkKSxXPWQ7aWUmJihjW2Qr'@;
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 'YXRlVGV4dChsKX0obFtWb10sZCkpO2Z1bmN0aW9uIG9yKGMpe3JldHVybiBwcigiIixjLCIiKSxvcn1mdW5jdGlvbiBwcihjLGwsYSl7Y29uc3QgZD1YcigpLGg9SzMoZCxjLGwsYSk7cmV0dXJuIGghPT1abyYmR2QoZCxldSgpLGgpLHByfWZ1bmN0aW9uIHpjKGMsbCxhLGQsaCl7Y29uc3Qg'@;
put 'Zj1YcigpLF89ZnVuY3Rpb24gWDMoYyxsLGEsZCxoLGYpe2NvbnN0IFQ9Z2YoYyxOZCgpLGEsaCk7cmV0dXJuIFYxKDIpLFQ/bCtrbyhhKStkK2tvKGgpK2Y6Wm99KGYsYyxsLGEsZCxoKTtyZXR1cm4gXyE9PVpvJiZHZChmLGV1KCksXyksemN9ZnVuY3Rpb24gYjAoYyxsLGEsZCxoLGYsXyl7'@;
put 'Y29uc3QgVD1YcigpLFc9ZnVuY3Rpb24gSjMoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBpZT1UNihjLE5kKCksYSxoLF8pO3JldHVybiBWMSgzKSxpZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUOlpvfShULGMsbCxhLGQsaCxmLF8pO3JldHVybiBXIT09Wm8mJkdkKFQsZXUoKSxXKSxiMH1m'@;
put 'dW5jdGlvbiB3NShjLGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9WHIoKSxwZT1mdW5jdGlvbiBRMyhjLGwsYSxkLGgsZixfLFQsVyxpZSl7Y29uc3Qgd2U9bTAoYyxOZCgpLGEsaCxfLFcpO3JldHVybiBWMSg0KSx3ZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUK2tvKFcpK2llOlpvfShp'@;
put 'ZSxjLGwsYSxkLGgsZixfLFQsVyk7cmV0dXJuIHBlIT09Wm8mJkdkKGllLGV1KCkscGUpLHc1fWZ1bmN0aW9uIEZNKGMsbCxhKXshZnVuY3Rpb24gXzAoYyxsLGEsZCl7Y29uc3QgaD1UcygpLGY9VjEoMik7aC5maXJzdFVwZGF0ZVBhc3MmJlgxKGgsbnVsbCxmLGQpO2NvbnN0IF89WHIoKTtp'@;
put 'ZihhIT09Wm8mJmpjKF8sZixhKSl7Y29uc3QgVD1oLmRhdGFbZXUoKV07aWYodV8oVCxkKSYmIURNKGgsZikpe2xldCBXPWQ/VC5jbGFzc2VzV2l0aG91dEhvc3Q6VC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09VyYmKGE9X2MoVyxhfHwiIikpLEp2KGgsVCxfLGEsZCl9ZWxzZSFmdW5jdGlv'@;
put 'biBzYyhjLGwsYSxkLGgsZixfLFQpe2g9PT1abyYmKGg9U3MpO2xldCBXPTAsaWU9MCxwZT0wPGgubGVuZ3RoP2hbMF06bnVsbCx3ZT0wPGYubGVuZ3RoP2ZbMF06bnVsbDtmb3IoO251bGwhPT1wZXx8bnVsbCE9PXdlOyl7Y29uc3QgRWU9VzxoLmxlbmd0aD9oW1crMV06dm9pZCAwLFplPWll'@;
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/MTo1fV07bGV0ICRkPXt9O2Z1bmN0aW9uIEJsKGMpe2NvbnN0IGw9ZnVuY3Rpb24gRVIoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9X18o'@;
put 'bCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPV9fKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIEg2O3Rocm93IG5ldyBBcig3MDEsITEpfWZ1bmN0aW9uIF9fKGMpe3JldHVybiBjIGluICRkfHwoJGRbY109T2kubmcmJk9pLm5nLmNvbW1vbiYm'@;
put 'T2kubmcuY29tbW9uLmxvY2FsZXMmJk9pLm5nLmNvbW1vbi5sb2NhbGVzW2NdKSwkZFtjXX12YXIgcW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0'@;
put 'YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0i'@;
put 'TW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRp'@;
put 'bWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tj'@;
put 'LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0i'@;
put 'UGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30ocW98fHt9KTtjb25zdCBpcD0iZW4tVVMiO2xldCByZT1pcDtmdW5jdGlvbiBVcihjLGwsYSxkLGgpe2lmKGM9Ym8oYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKylVcihjW2Zd'@;
put 'LGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1UcygpLF89WHIoKTtsZXQgVD1sZihjKT9jOmJvKGMucHJvdmlkZSksVz1RQyhjKTtjb25zdCBpZT1NYygpLHBlPTEwNDg1NzUmaWUucHJvdmlkZXJJbmRleGVzLHdlPWllLmRpcmVjdGl2ZVN0YXJ0LEVlPWllLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYo'@;
put 'bGYoYyl8fCFjLm11bHRpKXtjb25zdCBaZT1uZXcgUjQoVyxoLHR0KSxpdD1jaShULGwsaD9wZTpwZStFZSx3ZSk7LTE9PT1pdD8oVDkoSW0oaWUsXyksZixUKSxMcihmLGMsbC5sZW5ndGgpLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5w'@;
put 'cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChaZSksXy5wdXNoKFplKSk6KGFbaXRdPVplLF9baXRdPVplKX1lbHNle2NvbnN0IFplPWNpKFQsbCxwZStFZSx3ZSksaXQ9Y2koVCxsLHBlLHBlK0VlKSx5dD1pdD49MCYmYVtpdF07aWYoaCYmIXl0fHwhaCYmIShaZT49MCYmYVtaZV0p'@;
put 'KXtUOShJbShpZSxfKSxmLFQpO2NvbnN0IEV0PWZ1bmN0aW9uIFVvKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUjQoYyxhLHR0KTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCx4aShmLGgsZCYmIWEpLGZ9KGg/cG86Q28sYS5sZW5ndGgsaCxkLFcp'@;
put 'OyFoJiZ5dCYmKGFbaXRdLnByb3ZpZGVyRmFjdG9yeT1FdCksTHIoZixjLGwubGVuZ3RoLDApLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChFdCksXy5wdXNoKEV0KX1lbHNlIExy'@;
put 'KGYsYyxaZT4tMT9aZTppdCx4aShhW2g/aXQ6WmVdLFcsIWgmJmQpKTshaCYmZCYmeXQmJmFbaXRdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gTHIoYyxsLGEsZCl7Y29uc3QgaD1sZihsKSxmPWZ1bmN0aW9uIGU1KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7'@;
put 'Y29uc3QgVz0oZj9ibyhsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoVyl7Y29uc3QgaWU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHBlPWllLmluZGV4T2YoYSk7LTE9PT1wZT9pZS5wdXNoKGEsW2QsV10p'@;
put 'OmllW3BlKzFdLnB1c2goZCxXKX1lbHNlIGllLnB1c2goYSxXKX19fWZ1bmN0aW9uIHhpKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBjaShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJl'@;
put 'dHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIENvKGMsbCxhLGQpe3JldHVybiBWaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBwbyhjLGwsYSxkKXtjb25zdCBoPXRoaXMubXVsdGk7bGV0IGY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IF89dGhpcy5wcm92aWRlckZhY3RvcnkuY29t'@;
put 'cG9uZW50UHJvdmlkZXJzLFQ9UWgoYSxhW0JpXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxkKTtmPVQuc2xpY2UoMCxfKSxWaShoLGYpO2ZvcihsZXQgVz1fO1c8VC5sZW5ndGg7VysrKWYucHVzaChUW1ddKX1lbHNlIGY9W10sVmkoaCxmKTtyZXR1cm4gZn1mdW5jdGlvbiBWaShjLGwp'@;
put 'e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiB0aShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gYnIoYyxsLGEpe2NvbnN0IGQ9VHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFz'@;
put 'cyl7Y29uc3QgaD1RYyhjKTtVcihhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSxVcihsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWNsYXNzIHpse31jbGFzcyBsY3t9Y2xhc3Mgd2YgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlz'@;
put 'Ll9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgR1ModGhpcyk7Y29uc3QgaD1OYyhsKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVdkKGguYm9vdHN0cmFwKSx0aGlzLl9y'@;
put 'M0luamVjdG9yPVR2KGwsYSxbe3Byb3ZpZGU6emwsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6SzAsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmRdLHFhKGwpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0'@;
put 'b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGwpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3IzSW5qZWN0b3I7IWwuZGVzdHJveWVkJiZsLmRlc3Ryb3koKSx0aGlzLmRlc3Ry'@;
put 'b3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShsKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChsKX19Y2xhc3MgcWQgZXh0ZW5kcyBsY3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1sfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHdm'@;
put 'KHRoaXMubW9kdWxlVHlwZSxsLFtdKX19Y2xhc3MgUTEgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBHUyh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgY3YoWy4uLmwucHJvdmlkZXJzLHtwcm92'@;
put 'aWRlOnpsLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOkswLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fHM2KCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRp'@;
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 'Y3Rpb24gVWwoYyxsLGEpe2NvbnN0IGQ9YytwcyxoPVhyKCksZj0kZShoLGQpO3JldHVybiBDXyhoLGQpP3dZKGgsVmMoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gTTUoYyxsLGEsZCl7Y29uc3QgaD1jK3BzLGY9WHIoKSxfPSRlKGYsaCk7cmV0dXJuIENf'@;
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 'ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLXJjfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj'@;
put 'dG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoVCxoLGZhbHNlKSxUfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IF89bCYmIWZ1bmN0aW9uIGVmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBjfShsKTtsZXQgVDtpZihfKVQ9YTtlbHNle2NvbnN0IGV0PWF8fHt9O1Q9ZXQuaW5kZXgsZD1ldC5pbmplY3RvcixoPWV0LnByb2plY3RhYmxlTm9kZXMsZj1ldC5lbnZpcm9ubWVudEluamVjdG9yfHxldC5uZ01vZHVsZVJlZn1jb25zdCBXPV8/bDpuZXcgaDUoUW8obCkpLGllPWR8fHRo'@;
put 'aXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PVcubmdNb2R1bGUpe2NvbnN0IHl0PShfP2llOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxMCxudWxsKTt5dCYmKGY9eXQpfVFvKFcuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IFplPVcuY3JlYXRlKGllLGgsbnVsbCxmKTtyZXR1cm4g'@;
put 'dGhpcy5pbnNlcnRJbXBsKFplLmhvc3RWaWV3LFQsZmFsc2UpLFplfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCExKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3LGY9aFtCaV07aWYoZnVuY3Rpb24gVW4oYyl7cmV0dXJuIGljKGNbdWFdKX0oaCkp'@;
put 'e2NvbnN0IFc9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09Vyl0aGlzLmRldGFjaChXKTtlbHNle2NvbnN0IGllPWhbdWFdLHBlPW5ldyBUWShpZSxpZVt6b10saWVbdWFdKTtwZS5kZXRhY2gocGUuaW5kZXhPZihsKSl9fWNvbnN0IF89dGhpcy5fYWRqdXN0SW5kZXgoYSksVD10aGlzLl9sQ29u'@;
put 'dGFpbmVyO2lmKGZ1bmN0aW9uIGRhKGMsbCxhLGQpe2NvbnN0IGg9cmMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtYYV09bCksZDxmLXJjPyhsW1hhXT1hW2hdLCQwKGEscmMrZCxsKSk6KGEucHVzaChsKSxsW1hhXT1udWxsKSxsW3VhXT1hO2NvbnN0IF89bFtPMl07bnVsbCE9PV8mJmEh'@;
put 'PT1fJiZmdW5jdGlvbiBEWihjLGwpe2NvbnN0IGE9Y1tIMl07bFtKYV0hPT1sW3VhXVt1YV1bSmFdJiYoY1t1bV09ITApLG51bGw9PT1hP2NbSDJdPVtsXTphLnB1c2gobCl9KF8sbCk7Y29uc3QgVD1sW2h1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMpLGxbRG9dfD0xMjh9KGYsaCxULF8p'@;
put 'LCFkKXtjb25zdCBXPVk5KF8sVCksaWU9aFtWb10scGU9SDMoaWUsVFtkMF0pO251bGwhPT1wZSYmZnVuY3Rpb24gakQoYyxsLGEsZCxoLGYpe2RbSGldPWgsZFt6b109bCxHNChjLGQsYSwxLGgsZil9KGYsVFt6b10saWUsaCxwZSxXKX1yZXR1cm4gbC5hdHRhY2hUb1ZpZXdDb250YWluZXJS'@;
put 'ZWYoKSwkMChSUihUKSxfLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT1EWSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGws'@;
put 'LTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtkJiYoUG0oUlIodGhpcy5fbENvbnRhaW5lciksYSksS20oZFtCaV0sZCkpfWRldGFjaChsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtyZXR1cm4gZCYmbnVsbCE9UG0oUlIodGhp'@;
put 'cy5fbENvbnRhaW5lciksYSk/bmV3IGQ1KGQpOm51bGx9X2FkanVzdEluZGV4KGwsYT0wKXtyZXR1cm4gbD8/dGhpcy5sZW5ndGgrYX19O2Z1bmN0aW9uIERZKGMpe3JldHVybiBjWzhdfWZ1bmN0aW9uIFJSKGMpe3JldHVybiBjWzhdfHwoY1s4XT1bXSl9ZnVuY3Rpb24gSVkoYyxsKXtsZXQg'@;
put 'YTtjb25zdCBkPWxbYy5pbmRleF07cmV0dXJuIGljKGQpP2E9ZDooYT1QUyhkLGwsbnVsbCxjKSxsW2MuaW5kZXhdPWEsUzYobCxhKSksTFkoYSxsLGMsZCksbmV3IFRZKGEsYyxsKX1sZXQgTFk9ZnVuY3Rpb24gUlkoYyxsLGEsZCl7aWYoY1tkMF0pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/'@;
put 'X2EoZCk6ZnVuY3Rpb24gdGNlKGMsbCl7Y29uc3QgYT1jW1ZvXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1IbChsLGMpO3JldHVybiBZMShhLEgzKGEsaCksZCxmdW5jdGlvbiBaRChjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbZDBdPWh9O2NsYXNz'@;
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+MClkLnB1c2goX1tULzJdKTtlbHNle2NvbnN0IGllPWZbVCsxXSxwZT1sWy1XXTtmb3IobGV0IHdlPXJjO3dlPHBlLmxlbmd0aDt3'@;
put 'ZSsrKXtjb25zdCBFZT1wZVt3ZV07RWVbTzJdPT09RWVbdWFdJiZOUihFZVtCaV0sRWUsaWUsZCl9aWYobnVsbCE9PXBlW0gyXSl7Y29uc3Qgd2U9cGVbSDJdO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdO05SKFplW0JpXSxaZSxpZSxkKX19fX19cmV0'@;
put 'dXJuIGR9ZnVuY3Rpb24gc2koYyl7Y29uc3QgbD1YcigpLGE9VHMoKSxkPUJ3KCk7QzkoZCsxKTtjb25zdCBoPU5ZKGEsZCk7aWYoYy5kaXJ0eSYmZnVuY3Rpb24gTHQoYyl7cmV0dXJuIDQ9PSg0JmNbRG9dKX0obCk9PT0oMj09KDImaC5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09aC5t'@;
put 'YXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1oLmNyb3NzZXNOZ1RlbXBsYXRlP05SKGEsbCxkLFtdKTpQWShhLGwsaCxkKTtjLnJlc2V0KGYsZGYpLGMubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUm8oYyxsLGEpe2NvbnN0IGQ9VHMoKTtkLmZp'@;
put 'cnN0Q3JlYXRlUGFzcyYmKEhZKGQsbmV3IE9ZKGMsbCxhKSwtMSksMj09KDImbCkmJihkLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksRlkoZCxYcigpLGwpfWZ1bmN0aW9uIElvKGMsbCxhLGQpe2NvbnN0IGg9VHMoKTtpZihoLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgZj1NYygpO0hZKGgsbmV3'@;
put 'IE9ZKGwsYSxkKSxmLmluZGV4KSxmdW5jdGlvbiBjY2UoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLDI9PSgyJmEpJiYo'@;
put 'aC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9RlkoaCxYcigpLGEpfWZ1bmN0aW9uIGFpKCl7cmV0dXJuIGZ1bmN0aW9uIGxjZShjLGwpe3JldHVybiBjW2h1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oWHIoKSxCdygpKX1mdW5jdGlvbiBGWShjLGwsYSl7Y29uc3QgZD1uZXcgZWgoND09KDQm'@;
put 'YSkpOyhmdW5jdGlvbiBWSShjLGwsYSxkKXtjb25zdCBoPUhTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmTlMoYykucHVzaChkLGgubGVuZ3RoLTEpfSkoYyxsLGQsZC5kZXN0cm95KSxudWxsPT09bFtodV0mJihsW2h1XT1uZXcgUFIpLGxbaHVdLnF1ZXJpZXMucHVzaChuZXcg'@;
put 'T1IoZCkpfWZ1bmN0aW9uIEhZKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBGUiksYy5xdWVyaWVzLnRyYWNrKG5ldyBIUihsLGEpKX1mdW5jdGlvbiBOWShjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBrYyhjLGwpe3JldHVybiBH'@;
put 'TShjLGwpfWNvbnN0IFpSPW5ldyBNaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgWVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29s'@;
put 'dmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1GaShaUix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZih2NShm'@;
put 'KSlhLnB1c2goZik7ZWxzZSBpZihwTShmKSl7Y29uc3QgXz1uZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOld9KX0pO2EucHVzaChfKX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigo'@;
put 'KT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHRXPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCk7Y29uc3QgS2Q9bmV3IE1pKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkZpKEtkLG5zLk9wdGlvbmFsfG5zLlNraXBTZWxmKXx8ZnVuY3Rpb24gRGNlKCl7cmV0dXJu'@;
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 'c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fWNvbnN0IGxXPW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpjV30pO2Z1bmN0aW9uIGNXKCl7Y29uc3QgYz1GaShObyk7bGV0IGw9ITA7cmV0dXJuIGlzKG5l'@;
put 'dyBLZShoPT57bD1jLmlzU3RhYmxlJiYhYy5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dChsKSxoLmNvbXBsZXRlKCl9KX0pLG5ldyBLZShoPT57bGV0IGY7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+'@;
put 'e2Y9Yy5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PnshbCYmIWMuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYobD0hMCxoLm5leHQoITApKX0pfSl9KTtjb25zdCBfPWMu'@;
put 'b25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnRJbkFuZ3VsYXJab25lKCksbCYmKGw9ITEsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dCghMSl9KSl9KTtyZXR1cm4oKT0+e2YudW5zdWJzY3JpYmUoKSxfLnVuc3Vic2NyaWJlKCl9fSkucGlwZSgkYSgpKSl9Y29uc3Qg'@;
put 'dVc9bmV3IE1pKCIiKSxLTT1uZXcgTWkoIiIpO2xldCBLUiwkUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhp'@;
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 'dCBkVz1uZXcgTWkoIkFsbG93TXVsdGlwbGVUb2tlbiIpLFhSPW5ldyBNaSgiUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzIiksSlI9bmV3IE1pKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2NsYXNzIGZXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uYW1lPWwsdGhpcy50b2tlbj1hfX1mdW5jdGlv'@;
put 'biBnVyhjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IE1pKGQpO3JldHVybihmPVtdKT0+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 'aXplcnMoKSxULmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBnZShjKXtmcihjLCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiBjJiYocmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoS2Qs'@;
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 'PVFvKGMpfHxLYShjKXx8UmwoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBBcig0MDUsITEpO2xldCBfO189aD9hOnRoaXMuX2luamVjdG9yLmdldChLMCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKF8uY29tcG9u'@;
put 'ZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBVY2UoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfShfKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KHpsKSxpZT1fLmNyZWF0ZShFYS5OVUxMLFtdLGR8fF8uc2VsZWN0b3IsVCkscGU9aWUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx3ZT1p'@;
put 'ZS5pbmplY3Rvci5nZXQodVcsbnVsbCk7cmV0dXJuIHdlPy5yZWdpc3RlckFwcGxpY2F0aW9uKHBlKSxpZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoaWUuaG9zdFZpZXcpLFhNKHRoaXMuY29tcG9uZW50cyxpZSksd2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihwZSl9KSx0aGlz'@;
put 'Ll9sb2FkQ29tcG9uZW50KGllKSxpZX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEFyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlzLl92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJy'@;
put 'b3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTtYTSh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21B'@;
put 'cHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoSlIsW10pO2QucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGQuZm9y'@;
put 'RWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhp'@;
put 'cy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5YTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0'@;
put 'aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBYTShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNl'@;
put 'KGEsMSl9Y29uc3QgQ1c9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5GaShoZikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7ZnVuY3Rpb24gJGNlKCl7Y29uc3QgYz1GaShObyksbD1GaShoZik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwu'@;
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 'b24gVTYoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYz9jOm51bGwhPWMmJiJmYWxzZSIhPT1jfWxldCBzTz1udWxsO2Z1bmN0aW9uIGFwKCl7cmV0dXJuIHNPfWNsYXNzIE11ZXt9Y29uc3QgTHM9bmV3IE1pKCJEb2N1bWVudFRva2VuIik7bGV0IGFPPSgoKT0+e2NsYXNzIGN7aGlzdG9y'@;
put 'eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShFdWUpfSxwcm92aWRlZEluOiJw'@;
put 'bGF0Zm9ybSJ9KSxjfSkoKTtjb25zdCB4dWU9bmV3IE1pKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO2xldCBFdWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFPe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9RmkoTHMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlz'@;
put 'Ll9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBhcCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVu'@;
put 'dExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJo'@;
put 'YXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1'@;
put 'cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxo'@;
put 'KX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxjfSkoKTtmdW5jdGlvbiBsTyhjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3Ro'@;
put 'KXJldHVybiBjO2xldCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gVlcoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMu'@;
put 'bGVuZ3RoO3JldHVybiBjLnNsaWNlKDAsYS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gQ2YoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgazU9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50'@;
put 'ZWQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEZpKGpXKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBCVz1uZXcgTWkoImFwcEJhc2VI'@;
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 'YXx8e30pLHkwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oeTB8fHt9KTtmdW5jdGlvbiBjTyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3Fv'@;
put 'LkRheXNGb3JtYXRdLGRbcW8uRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdGQoZixhKX1mdW5jdGlvbiB1TyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3FvLk1vbnRoc0Zvcm1hdF0sZFtxby5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHRkKGYsYSl9ZnVuY3Rpb24gdGQo'@;
put 'YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFhXKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQobCk7Zm9yKGNvbnN0'@;
put 'IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29uc3QgeU89L1xzKy8sSlc9'@;
put 'W107bGV0IHVjPSgoKT0+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 'fHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBrTz1uZXcgTWkoIkV2ZW50TWFuYWdlclBsdWdpbnMiKTtsZXQgcEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVU'@;
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 'czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LERPPS8lQ09NUCUvZyx5MWU9bmV3IE1pKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+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 'KX0sbXVsdGk6ITB9LHtwcm92aWRlOkxzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSTFlKCl7cmV0dXJuIGZ1bmN0aW9uIEZDKGMpe0c5PWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLEwxZT1nVyhkdWUsImJyb3dzZXIiLFNHKSxSMWU9bmV3IE1pKCIiKSxNRz1be3Byb3ZpZGU6S00s'@;
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 'IFRlKFtuZXcgUl8oIiIse30pXSksaD1uZXcgVGUoe30pLGY9bmV3IFRlKHt9KSxfPW5ldyBUZSh7fSksVD1uZXcgVGUoIiIpLFc9bmV3IFdsKGQsaCxfLFQsZixscyxsLGEucm9vdCk7cmV0dXJuIFcuc25hcHNob3Q9YS5yb290LG5ldyBhJChuZXcgeGYoVyxbXSksYSl9Y2xhc3MgV2x7Y29u'@;
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 'cy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PVdsP3RoaXMucm91dGU6bD09PUJfP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgRXg9bmV3IE1pKCIiKTtsZXQgaCQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1'@;
put 'YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFT'@;
put 'dWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTYoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlw'@;
put 'ZShTYSgoW2YsXyxUXSxXKT0+KFQ9ey4uLmYsLi4uXywuLi5UfSwwPT09Vz9XaShUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29t'@;
put 'cG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IF89ZnVuY3Rpb24gQ3VlKGMpe2NvbnN0IGw9UW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgaDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9y'@;
put 'fSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRh'@;
put 'bG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKF8pZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIF8uaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0'@;
put 'aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh'@;
put 'Y30pLGN9KSgpO2Z1bmN0aW9uIGpfKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBVZGUoYyxsLGEpe3JldHVybiBsLmNoaWxk'@;
put 'cmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gal8oYyxkLGgpO3JldHVybiBqXyhjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHhmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNo'@;
put 'KGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IF89Zi5yb3V0ZTtyZXR1cm4gXy52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSxfLmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKFQ9PmpfKGMsVCkpLF99fWNvbnN0IGQ9ZnVuY3Rpb24g'@;
put 'WmRlKGMpe3JldHVybiBuZXcgV2wobmV3IFRlKGMudXJsKSxuZXcgVGUoYy5wYXJhbXMpLG5ldyBUZShjLnF1ZXJ5UGFyYW1zKSxuZXcgVGUoYy5mcmFnbWVudCksbmV3IFRlKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+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+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9lYShhKS5waXBlKE1lKCgpPT5sKSk6V2kobCl9KX1jb25zdCBRNj1uZXcgTWkoIlJPVVRF'@;
put 'UyIpO2xldCByUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9RmkoblcpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2Fk'@;
put 'ZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIFdpKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1kcChh'@;
put 'LmxvYWRDb21wb25lbnQoKSkucGlwZShNZShBJCksVWMoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxJXygoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgSEcoZCwo'@;
put 'KT0+bmV3IGJlKS5waXBlKE5PKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMp'@;
put 'cmV0dXJuIFdpKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMoZC5sb2FkQ2hp'@;
put 'bGRyZW4pLnBpcGUoTWUoVD0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZCk7bGV0IFcsaWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/aWU9VDooVz1ULmNyZWF0ZShhKS5pbmplY3RvcixpZT1XLmdldChRNixbXSxucy5TZWxmfG5zLk9wdGlvbmFs'@;
put 'KS5mbGF0KCkpLHtyb3V0ZXM6aWUubWFwKFFPKSxpbmplY3RvcjpXfX0pLElfKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLF89bmV3IEhHKGYsKCk9Pm5ldyBiZSkucGlwZShOTygpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsXyksX31sb2FkTW9k'@;
put 'dWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiBkcChhKCkpLnBpcGUoTWUoQSQpLHlyKGQ9PmQgaW5zdGFuY2VvZiBsY3x8QXJyYXkuaXNBcnJheShkKT9XaShkKTplYSh0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhkKSkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
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 'XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgTHg9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IFoyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm'@;
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 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoV2wpLFA0KCJ0YWJpbmRleCIpLHR0KEZvKSx0dChOaSksdHQoazUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
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 'Iiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLEJ1LDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGlua3M9Zil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0'@;
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 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBpUD1uZXcgTWkoIiIpO2xldCBSJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll'@;
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 'IE1pKCIiLHtmYWN0b3J5OigpPT5uZXcgYmV9KSxvUD1uZXcgTWkoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxIJD1uZXcgTWkoIiIpO2Z1bmN0aW9uIG5oZShjKXtyZXR1cm4gRWYoMCxbe3Byb3ZpZGU6SCQsdXNlRXhpc3Rpbmc6SjJlfSx7cHJvdmlkZTpMJCx1c2VF'@;
put 'eGlzdGluZzpjfV0pfWNvbnN0IE4kPW5ldyBNaSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxpaGU9W0pkLHtwcm92aWRlOk9fLHVzZUNsYXNzOkJPfSxEcyxCXyx7cHJvdmlkZTpXbCx1c2VGYWN0b3J5OmZ1bmN0aW9uIE8kKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0Rz'@;
put 'XX0sclAsW11dO2Z1bmN0aW9uIG9oZSgpe3JldHVybiBuZXcgZlcoIlJvdXRlciIsRHMpfWxldCBkYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbaWhlLFtdLHtwcm92aWRlOlE2LG11bHRpOiEw'@;
put 'LHVzZVZhbHVlOmF9LHtwcm92aWRlOk4kLHVzZUZhY3Rvcnk6Y2hlLGRlcHM6W1tEcyxuZXcgejIsbmV3IGcwXV19LHtwcm92aWRlOkx4LHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOms1LHVzZUNsYXNzOmt1ZX06e3Byb3ZpZGU6azUsdXNlQ2xhc3M6ald9LHtwcm92aWRl'@;
put 'OmlQLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUZpKGowZSksbD1GaShObyksYT1GaShMeCksZD1GaShJeCksaD1GaShPXyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IFIkKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/'@;
put 'bmhlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10se3Byb3ZpZGU6ZlcsbXVsdGk6ITAsdXNlRmFjdG9yeTpvaGV9LGQ/LmluaXRpYWxOYXZpZ2F0aW9uP3VoZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/RWYoOCxbaCQse3Byb3ZpZGU6RXgsdXNlRXhp'@;
put 'c3Rpbmc6aCR9XSkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpWJCx1c2VGYWN0b3J5OlAkfSx7cHJvdmlkZTpKUixtdWx0aTohMCx1c2VFeGlzdGluZzpWJH1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6UTYsbXVsdGk6'@;
put 'ITAsdXNlVmFsdWU6YX1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTiQsOCkpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2Z1bmN0aW9uIGNoZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rp'@;
put 'b24gdWhlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigzLFt7cHJvdmlkZTpaUixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShEcyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOm9Q'@;
put 'LHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigyLFt7cHJvdmlkZTpvUCx1c2VWYWx1ZTowfSx7cHJvdmlkZTpaUixtdWx0aTohMCxkZXBzOltFYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldCh4'@;
put 'dWUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KERzKSxmPWwuZ2V0KEYkKTtJJChoLCgpPT57ZCghMCl9KSxsLmdldChJeCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/V2kodm9pZCAw'@;
put 'KTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgViQ9bmV3IE1pKCIiKTt2YXIgQiQ9RigzNjA3MiksaGhlPUYoNjYzMDQpO2NvbnN0IHNQPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19h'@;
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+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFNoZT1uZXcgTWkoIiIpLHFfPW5ldyBN'@;
put 'aSgiIiksSyQ9bmV3IE1pKCIiKTtmdW5jdGlvbiBNaGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShGaShTaGUse29wdGlvbmFsOiEwfSk/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 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihjRykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZQPW5ldyBNaSgiWFNSRl9FTkFCTEVEIiksZXE9bmV3IE1pKCJYU1JGX0NPT0tJRV9OQU1FIix7cHJvdmlk'@;
put 'ZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlhTUkYtVE9LRU4ifSksdHE9bmV3IE1pKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KTtjbGFzcyBucXt9bGV0IExoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'KXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25z'@;
put 'dCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1YVyhhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoR3MpLGFyKGVxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gUmhlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFG'@;
put 'aShmUCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9RmkobnEpLmdldFRva2VuKCksaD1GaSh0cSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRl'@;
put 'cnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMi'@;
put 'LGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09'@;
put 'IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oZ3B8fHt9KTtmdW5jdGlvbiBJNShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIE9oZSguLi5jKXtjb25zdCBsPVtoUCxRJCxYJCx7cHJvdmlkZTpSeCx1c2VF'@;
put 'eGlzdGluZzpYJH0se3Byb3ZpZGU6T3gsdXNlRXhpc3Rpbmc6USR9LHtwcm92aWRlOnFfLHVzZVZhbHVlOlJoZSxtdWx0aTohMH0se3Byb3ZpZGU6ZlAsdXNlVmFsdWU6ITB9LHtwcm92aWRlOm5xLHVzZUNsYXNzOkxoZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJv'@;
put 'dmlkZXJzKTtyZXR1cm4gZnVuY3Rpb24gaXYoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX0obCl9Y29uc3QgcnE9bmV3IE1pKCJMRUdBQ1lfSU5URVJDRVBUT1JfRk4iKTtsZXQgRmhlPSgoKT0+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+SFAuZW1pdChjLmRldGFpbCkpO2NsYXNzIEdse3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gQUsoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0'@;
put 'aWMgZ2V0VmFsdWUobCl7cmV0dXJuIEdsLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpe0dsLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShHbC5zdGF0ZSxudWxsLDIpKX19R2wuc3RhdGVVcGRhdGVzPUhQLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29u'@;
put 'c3QgbG1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i'@;
put 'Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBWc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246bG1lWzFdLC4uLkdsLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe0dsLnN0YXRlLmljb25S'@;
put 'ZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVZzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlZzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChb'@;
put 'ZCxoXSk9PmgubWFwKGY9PltmLFZzLnJlZ2lzdHJ5W2RdXSkpO0dsLnN0YXRlLmljb25SZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX1jb25zdCBoOD1b'@;
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 'eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBLeChjLGwsYSl7cmV0dXJue3R5cGU6MCxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiBGbWUoYyl7cmV0dXJue3R5cGU6NSxzdGVwczpjfX1mdW5jdGlvbiBoYyhjLGwsYT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6Yyxh'@;
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 'IGxoPW5ldyBNaSgiTmdWYWx1ZUFjY2Vzc29yIiksTm1lPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5TMCksbXVsdGk6ITB9O2xldCBTMD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5w'@;
put 'dXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DaGFuZ2UoZi50YXJnZXQu'@;
put 'Y2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW05tZV0pLGVvXX0pLGN9KSgpO2NvbnN0IFZtZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+V2EpLG11bHRpOiEwfSxqbWU9bmV3IE1pKCJDb21wb3NpdGlvbkV2'@;
put 'ZW50TW9kZSIpO2xldCBXYT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQkt7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9k'@;
put 'ZT0hZnVuY3Rpb24gQm1lKCl7Y29uc3QgYz1hcCgpP2FwKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXso'@;
put 'IXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMu'@;
put 'X2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRm8pLHR0KE5pKSx0dChqbWUsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9s'@;
put 'TmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMs'@;
put 'InR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5faGFuZGxlSW5wdXQoZi50YXJnZXQudmFsdWUp'@;
put 'fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihmKXtyZXR1cm4gZC5fY29tcG9zaXRpb25FbmQoZi50YXJn'@;
put 'ZXQudmFsdWUpfSl9LGZlYXR1cmVzOlt0aShbVm1lXSksZW9dfSksY30pKCk7Y29uc3QgaXU9bmV3IE1pKCJOZ1ZhbGlkYXRvcnMiKSx5cD1uZXcgTWkoIk5nQXN5bmNWYWxpZGF0b3JzIik7ZnVuY3Rpb24gS0soYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gWEsoYyl7cmV0dXJuIHY1KGMp'@;
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 'KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgVjU9bmV3IE1pKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmxifSksbGI9ImFsd2F5cyI7ZnVuY3Rpb24gY2IoYyxsLGE9bGIpe0tQKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRl'@;
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 'YWx1ZSJ9LGZlYXR1cmVzOlt0aShbYzZlXSksZW9dfSksY30pKCk7Y29uc3QgbkY9bmV3IE1pKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLHY2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+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 'aj1taSh7aW1wb3J0czpbd1hdfSksY30pKCksJGw9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKSxENmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92'@;
put 'aWRlOm5GLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy'@;
put 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKTtmdW5jdGlvbiBJNmUoYyxsKXt0aGlzLnY9Yyx0aGlzLms9bH1mdW5jdGlvbiBkRShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoZixfKXt0cnl7dmFyIFQ9Y1tmXShfKSxXPVQudmFsdWUsaWU9VyBp'@;
put 'bnN0YW5jZW9mIEk2ZTtQcm9taXNlLnJlc29sdmUoaWU/Vy52OlcpLnRoZW4oZnVuY3Rpb24ocGUpe2lmKGllKXt2YXIgd2U9InJldHVybiI9PT1mPyJyZXR1cm4iOiJuZXh0IjtpZighVy5rfHxwZS5kb25lKXJldHVybiBkKHdlLHBlKTtwZT1jW3dlXShwZSkudmFsdWV9aChULmRvbmU/InJl'@;
put 'dHVybiI6Im5vcm1hbCIscGUpfSxmdW5jdGlvbihwZSl7ZCgidGhyb3ciLHBlKX0pfWNhdGNoKHBlKXtoKCJ0aHJvdyIscGUpfX1mdW5jdGlvbiBoKGYsXyl7c3dpdGNoKGYpe2Nhc2UicmV0dXJuIjpsLnJlc29sdmUoe3ZhbHVlOl8sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOmwucmVq'@;
put 'ZWN0KF8pO2JyZWFrO2RlZmF1bHQ6bC5yZXNvbHZlKHt2YWx1ZTpfLGRvbmU6ITF9KX0obD1sLm5leHQpP2QobC5rZXksbC5hcmcpOmE9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZixfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVCxXKXt2YXIgaWU9e2tleTpmLGFyZzpfLHJl'@;
put 'c29sdmU6VCxyZWplY3Q6VyxuZXh0Om51bGx9O2E/YT1hLm5leHQ9aWU6KGw9YT1pZSxkKGYsXykpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBjLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9ZEUucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0'@;
put 'ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZEUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsYyl9LGRFLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0'@;
put 'aHJvdyIsYyl9LGRFLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixjKX07Y2xhc3MgaEV7c3RhdGljIGdldFRyYXBFbGVtZW50cygpe3JldHVyblsuLi5HbC5zdGF0ZS5mb2N1c1RyYXBJdGVtc119c3RhdGljIHNldFRyYXBFbGVtZW50'@;
put 'cyhsKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKTtudWxsIT09YSYmZnVuY3Rpb24gc0YoYywuLi5sKXtjJiZsLmZvckVhY2goKFthLGRdKT0+eyExPT09ZHx8bnVsbD09PWQ/Yy5yZW1vdmVBdHRyaWJ1dGUoYSk6Yy5zZXRBdHRyaWJ1dGUoYSxkKyIiKX0pfShhLFsi'@;
put 'Y2RzLWZvY3VzLXRyYXAiLCEhbC5sZW5ndGgmJiIiXSksR2wuc3RhdGUuZm9jdXNUcmFwSXRlbXM9Wy4uLmxdfXN0YXRpYyByZW1vdmVUcmFwRWxlbWVudChsKXt0aGlzLmdldFRyYXBFbGVtZW50cygpLmxlbmd0aDwxfHx0aGlzLnNldFRyYXBFbGVtZW50cyhbLi4udGhpcy5nZXRUcmFwRWxl'@;
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 'dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+'@;
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 'bGFzcyBZNXtzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYoR2wuc3RhdGUuaTE4blJlZ2lzdHJ5PVA1KHZFLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkpLFA1KHZFLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSl9c3Rh'@;
put 'dGljIGZpbmRLZXkobCl7Y29uc3QgYT1ZNS5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmRLKGFbZF0sbCkpfXN0YXRpYyBnZXQobCl7cmV0dXJuIGwmJlk1LmtleXNbbF18fHt9fXN0YXRpYyByZXNldCgpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh7fSx2RSl9c3RhdGlj'@;
put 'IGh5ZHJhdGUobCxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiAkZ2UoYyxsLGEpe3JldHVybiBjLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGQ9PmZ1bmN0aW9uIEZnZShjLGwsYT1gXCR7JHtjfX1gKXtyZXR1cm4gYy5zcGxpdCgiLiIpLnJlZHVjZSgoZCxoKT0+e3RyeXtjb25zdCBmPWRb'@;
put 'aF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1mOmNhc2UhMT09PWY6Y2FzZSIiPT09ZjpjYXNlIDA9PT1mOnJldHVybiBmO2RlZmF1bHQ6cmV0dXJuIGZ8fGF9fWNhdGNoe3JldHVybiBhfX0sbCl9KGQuc3Vic3RyKDIsZC5sZW5ndGgtMykudHJpbSgpLGwsYSkpfShKU09OLnN0cmluZ2lmeShs'@;
put 'KSxhKSl9c3RhdGljIGxvY2FsaXplKGwpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh2RSxHbC5zdGF0ZS5pMThuUmVnaXN0cnksbCl9fXZhciBCOGU9Y0ZgOmhvc3R7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv'@;
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 'YWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVzdFVwZGF0ZShsKX0pLGEmJmEuYXBwbHko'@;
put 'dGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9UDUoWTUua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5fX2kxOG58fHt9KTtyZXR1cm4gWTUuaHlk'@;
put 'cmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3QgXz1mdW5jdGlvbiBOOGUoYyxsKXtpZihfcChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoX3AoZCkpYT17fTtlbHNlIHRyeXthPUpTT04u'@;
put 'cGFyc2UoZCl9Y2F0Y2h7SDUud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBWOGUoYyxsLGEsZCl7cmV0dXJuIF9wKGMpP2RLKGEsZCk/e3VwZGF0ZTohMX06e3Vw'@;
put 'ZGF0ZTohMCx2YWx1ZXM6YX06Yz09PWw/e3VwZGF0ZTohMSx2YWx1ZXM6e319Ont1cGRhdGU6ITAsa2V5OmMsdmFsdWVzOnt9fX0oWTUuZmluZEtleShfKXx8IiIsdGhpcy5fX2kxOG5LZXksXyx0aGlzLl9faTE4bik7dm9pZCAwIT09VC5rZXkmJih0aGlzLl9faTE4bktleT1ULmtleSsiIiks'@;
put 'dm9pZCAwIT09VC52YWx1ZXMmJih0aGlzLl9faTE4bj17Li4uVC52YWx1ZXN9KSwhMD09PVQudXBkYXRlJiZ0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnJlcXVlc3RVcGRhdGUobCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdm9pZCAwIT09bD9mdW5jdGlvbihm'@;
put 'LF8sVCl7Y29uc3QgVz1PYmplY3QuZGVmaW5lUHJvcGVydHkoXyxULGYpO3JldHVybiBrbCh7dHlwZTpPYmplY3QsYXR0cmlidXRlOiJjZHMtaTE4biJ9KShXLFQpfShoLGMsbCk6ZnVuY3Rpb24oZixfKXtjb25zdCBUPXtraW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6'@;
put 'Xy5rZXksZGVzY3JpcHRvcjpmfTtyZXR1cm4ga2woe3R5cGU6T2JqZWN0fSkoVCl9KGgsYyl9fSgpXSxXNS5wcm90b3R5cGUsImkxOG4iLHZvaWQgMCksTXQoW2JKKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxXNS5wcm90b3R5cGUs'@;
put 'ImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBTSiBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMu'@;
put 'YXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19TXQoW2tsKHt0eXBlOlN0cmluZ30pXSxTSi5wcm90b3R5cGUsInNoYXBlIix2b2lkIDApLFZYKCJjZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixTSiksVnMuYWRkSWNvbnMoSUspLFZzLmFkZEFsaWFzZXMoWyJ0aW1l'@;
put 'cyIsWyJjbG9zZSJdXSk7Y29uc3QgRW89WyIqIl07ZnVuY3Rpb24gejhlKGMsbCl7aWYoMSZjJiYoVnIoMCksTmUoMSksanIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFU4ZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'ImRpdiIsMTQpLEplKDEsejhlLDIsMSwibmctY29udGFpbmVyIiwwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWQuQWNjb3JkaW9uU3RhdHVzLkVycm9yKX19ZnVuY3Rpb24gWjhlKGMsbCl7aWYoMSZjJiYoVnIo'@;
put 'MCksTmUoMSksanIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFk4ZShjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5'@;
put 'cy5zdWNjZXNzKX19ZnVuY3Rpb24gVzhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkseHQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRv'@;
put 'bmUoaCkpfSksbWUoMSwiZGl2IiwxNiksa3IoMiwyKSx5ZSgpKCl9MiZjJiZSZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBHOGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxKZSgxLFU4ZSwyLDEsImRpdiIsMSksbWUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImJ1dHRv'@;
put 'biIsNCw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlUGFuZWwoKSl9KSxiYSg2LCJhc3luYyIpLG1lKDcsInNwYW4iLDYpLEplKDgsWjhlLDIsMSwibmctY29udGFpbmVyIiwwKSxKZSg5LFk4ZSwyLDEsIm5nLWNvbnRhaW5lciIsMCkseWUoKSxt'@;
put 'ZSgxMCwic3BhbiIsNykscXQoMTEsImNkcy1pY29uIiw4KSgxMiwic3BhbiIsOSkoMTMsImNkcy1pY29uIiwxMCkoMTQsImNkcy1pY29uIiwxMSkseWUoKSxrcigxNSksa3IoMTYsMSkseWUoKSgpLG1lKDE3LCJkaXYiLDEyKSxKZSgxOCxXOGUsMywxLCJkaXYiLDEzKSx5ZSgpKCksanIoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO2xldCBoO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cyE9PWQuQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKSksQ2UoMiksZHIoImNsci1hY2NvcmRpb24t'@;
put 'aGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShoPVVsKDYsMTYsZC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/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 'b24gVTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiYXJpYS1sYWJlbCIsYS5kYXkpLENlKDEpLHByKCIgIixhLm5hcnJvdywiICIpfX1mdW5jdGlvbiBaN2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNykscXQo'@;
put 'MSwiY2xyLWRheSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gWTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDUpLEplKDEsWjdlLDIsMSwidGQiLDYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtD'@;
put 'ZSgxKSxSZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIFc3ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuY2hhbmdlTW9udGgoZikpfSksTmUoMSkseWUoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKTtkcigiaXMtc2VsZWN0ZWQiLGQ9PT1oLmNhbGVuZGFyTW9udGhJbmRleCksVHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxDZSgxKSxwcigiICIsYSwiICIpfX1mdW5jdGlvbiBHN2UoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jaGFuZ2VZZWFyKGYpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtkcigiaXMtc2Vs'@;
put 'ZWN0ZWQiLGE9PT1kLmNhbGVuZGFyWWVhciksVHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxDZSgxKSxwcigiICIsYSwiICIpfX1mdW5jdGlvbiAkN2UoYyxsKXsxJmMmJnF0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIHE3ZShjLGwpezEmYyYmcXQoMCwiY2xyLXllYXJw'@;
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 'aWQiXSl9ZnVuY3Rpb24gbnZlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiYnV0dG9uIiwxKSxxdCgyLCJjZHMtaWNvbiIsMikseWUoKSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxUcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBydmU9WyJjZWxs'@;
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 'bCl7aWYoMSZjJiYoVnIoMCksSmUoMSxNdmUsMiw1LCJidXR0b24iLDI3KSxKZSgyLHh2ZSwyLDEsImNsci1zcGlubmVyIiwyOCksanIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp'@;
put 'bmcpfX1mdW5jdGlvbiBrdmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI2KSxKZSgxLEV2ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gQXZlKGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMikoMSwiYnV0dG9uIiwzMywzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMiksZj1WZSgyKTtyZXR1cm4ganQoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSkscXQoMywiY2RzLWljb24iLDM1KSx5'@;
put 'ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGRyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFRyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0Rl'@;
put 'dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc09wZW4pKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLENlKDIpLFRyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRp'@;
put 'dGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIFR2ZShjLGwpe31mdW5jdGlvbiBEdmUoYyxsKXsxJmMmJkplKDAsVHZlLDAsMCwibmctdGVtcGxhdGUiLDgp'@;
put 'LDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWZ1bmN0aW9uIEl2ZShjLGwpe31mdW5jdGlvbiBMdmUoYyxsKXsxJmMmJkplKDAsSXZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWNvbnN0IFJ2'@;
put 'ZT1mdW5jdGlvbihjKXtyZXR1cm57ImlzLXJlcGxhY2VkIjpjfX07ZnVuY3Rpb24gT3ZlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSxWcigyLG51bGwsMTEpLEplKDQsd3ZlLDYsOSwiZGl2IiwxMiksSmUoNSxDdmUsNiwxMiwiZGl2IiwxMiksSmUoNixTdmUsMiww'@;
put 'LCJkaXYiLDEzKSxKZSg3LGt2ZSwyLDEsImRpdiIsMTQpLEplKDgsQXZlLDQsNywiZGl2IiwxNSksanIoKSx5ZSgpLG1lKDksImRpdiIsMTYpKDEwLCJkaXYiLDE3KSxrcigxMSwxKSxqYSgxMixudWxsLDE4KSx5ZSgpLEplKDE0LER2ZSwxLDEsbnVsbCwyKSxKZSgxNSxMdmUsMSwxLG51bGws'@;
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 'ZSgyKSx5ZSgpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyl9fWZ1bmN0aW9uIGVfZShjLGwpe31mdW5jdGlvbiB0X2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13'@;
put 'cmFwcGVyIikoMiwiaW5wdXQiLDE0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKF8sIWgpKX0pLHllKCksbWUoMywibGFiZWwiKSxKZSg0LGVfZSwwLDAsIm5nLXRlbXBsYXRl'@;
put 'IiwxNSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksUmUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxl'@;
put 'VGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBuX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDE2KSx4dCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmFsbENvbHVtbnNTZWxlY3RlZCgp'@;
put 'KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLHByKCIgIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKX19ZnVuY3Rpb24gcl9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpKDIsImRpdiIsNCw1KSxOZSg0KSx5ZSgpLEpl'@;
put 'KDUsUXZlLDMsMSwibmctY29udGFpbmVyIiw2KSxrcig2KSxtZSg3LCJidXR0b24iLDcpLHF0KDgsImNkcy1pY29uIiw4KSxtZSg5LCJzcGFuIiw5KSxOZSgxMCkseWUoKSgpKCksbWUoMTEsInVsIiwxMCksSmUoMTIsdF9lLDUsMywibGkiLDExKSx5ZSgpLG1lKDEzLCJkaXYiLDEyKSxrcigx'@;
put 'NCwxKSxKZSgxNSxuX2UsMiwxLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJpZCIsYS5wb3BvdmVySWQpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiks'@;
put 'Q2UoNCksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuY3VzdG9tVG9nZ2xlVGl0bGUpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksQ2UoMSksVHIoInRpdGxlIixhLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5jbG9zZSksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbiksQ2UoMyksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZUJ1dHRvbil9'@;
put 'fWNvbnN0IGlfZT1bW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dXSxvX2U9WyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSIsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdO2Z1bmN0aW9uIGxfZShjLGwpe2lm'@;
put 'KDEmYyYmKFZyKDApLG1lKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLHF0KDMsImlucHV0IiwzKSxtZSg0LCJsYWJlbCIpLE5lKDUpLHllKCksbWUoNiwic3BhbiIsNCksTmUoNykseWUoKSgpKCksanIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNSksb3IoYS5zZWxl'@;
put 'Y3Rpb24uY3VycmVudC5sZW5ndGgpLENlKDIpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGNfZShjLGwpezEmYyYmcXQoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiB1X2UoYyxsKXtpZigxJmMmJihWcigwKSxrcigxLDEpLEplKDIs'@;
put 'Y19lLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLG1lKDMsImRpdiIsNSksa3IoNCwyKSx5ZSgpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyYmIWEudG9nZ2xlKX19Y29uc3QgZF9lPVtbWyJjbHItZGctcGFnaW5hdGlv'@;
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 'LENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gYl9lKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxnX2UsMiwwLCJkaXYiLDEpLG1lKDIsImRpdiIsMiksa3IoMykseWUoKSxKZSg0LF9fZSwyMywxNiwiZGl2IiwzKSxqcigpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLENlKDMpLFJlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geV9lKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiZGl2IiwxOSksTmUoMikseWUoKSxtZSgzLCJkaXYiLDUpKDQsImJ1'@;
put 'dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxtZSg1LCJzcGFuIiw3KSxOZSg2KSx5ZSgpLHF0KDcsImNkcy1pY29uIiwxMCkseWUoKSxtZSg4LCJzcGFuIiksTmUoOSks'@;
put 'eWUoKSxtZSgxMCwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxtZSgxMSwic3BhbiIsNyksTmUoMTIpLHllKCkscXQoMTMsImNkcy1pY29uIiwxNCkseWUoKSgp'@;
put 'LGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksYjAoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxDZSgyKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIs'@;
put 'YS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDMpLG9yKGEucGFnZS5jdXJyZW50KSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksVHIoImFyaWEtbGFi'@;
put 'ZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IHdfZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLENfZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gU19lKGMsbCl7MSZj'@;
put 'JiZxdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZUcigiZGlyZWN0aW9uIixWZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBNX2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z'@;
put 'dGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24geF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSxrcigxLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0h1KCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLFRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFi'@;
put 'ZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBFX2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxrX2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl0sQV9lPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0s'@;
put 'VF9lPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBIX2UoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIE5fZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsSF9lLDEsMCwibmctY29udGFpbmVyIiwyKSxqcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKTtDZSgx'@;
put 'KSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIFZfZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsTl9lLDIsMiwibmctY29udGFpbmVy'@;
put 'IiwxKSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgQl9lPVsiY29udGVudENvbnRhaW5lciJdO2Z1bmN0aW9uIGpfZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
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 'YWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IHNiZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl07ZnVuY3Rpb24gYWJlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwibGkiLDQpLGphKDIsNSkseWUoKSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGlj'@;
put 'aXQ7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBsYmUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGFiZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksanIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUo'@;
put 'KTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIGNiZShjLGwpezEmYyYmamEoMCw1KSwyJmMmJlJlKCJuZ1RlbXBsYXRlT3V0bGV0IixWZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rp'@;
put 'b24gdWJlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxjYmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSxqcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gZGJlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMikseHQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLGZmKSgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp'@;
put 'LFZlKCk7Y29uc3QgZj0kaSg0KTtyZXR1cm4ganQoVmUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxmZikoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLEplKDEsdWJlLDIsMSwibmctY29udGFpbmVyIiwx'@;
put 'KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIGhiZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIsNikoMiwibGkiLDcpKDMsImJ1dHRvbiIsOCw5KSx4dCgibW91c2Vk'@;
put 'b3duIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xl'@;
put 'T3ZlcmZsb3dPbkNsaWNrKCkpfSkscXQoNSwiY2RzLWljb24iLDEwKSx5ZSgpKCksSmUoNixkYmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSx5ZSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxDZSgy'@;
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 'Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShEZnx8e30pO2NvbnN0IGEyPSIwLjJzIGVhc2UtaW4tb3V0Iiwk'@;
put 'YmU9W2ExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hjKCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSldKV0seEY9KGExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hj'@;
put 'KCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoIiogPT4gdm9pZCIsW19zKHtkaXNwbGF5OiJibG9jayJ9KSxydShhMixfcyh7aGVpZ2h0OjAsZGlzcGxh'@;
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 'dXJuIG5ldyhhfHxjKSh0dChFcyksdHQoYmIpLHR0KFl1KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxrSiw0KSwyJmEpe2xldCBmO3NpKGY9YWko'@;
put 'KSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCl9LGlucHV0czp7ZGlzYWJsZWQ6WyJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxw'@;
put 'YW5lbE9wZW46WyJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdGkoW1l1XSksdmFdLG5nQ29udGVudFNlbGVjdG9yczp4SixkZWNsczoyLHZhcnM6Myxj'@;
put 'b25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIs'@;
put 'MywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNj'@;
put 'b3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3ItaWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWlj'@;
put 'b24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9u'@;
put 'LWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoTUopLEplKDAsRzhlLDE5LDE4LCJuZy1jb250YWluZXIiLDApLGJhKDEsImFzeW5jIikpLDImYSYmUmUoIm5nSWYiLFVsKDEsMSxkLnBhbmVsKSl9LGRl'@;
put 'cGVuZGVuY2llczpbWmksdWMscXMsdXhdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246JGJlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFRKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRo'@;
put 'aXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVy'@;
put 'Vmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2'@;
put 'aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9fYi5NdWx0aTpfYi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShjcCh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRl'@;
put 'UGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmIpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpm'@;
put 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLF9FLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbImNsckFj'@;
put 'Y29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOlt0aShbYmJdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp'@;
put 'b246MH0pLGN9KSgpLERKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLElKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1hY2NvcmRpb24tdGl0bGUi'@;
put 'LCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHk4PSgoKT0+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 'cjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOlt0aShbaDFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9jaztvdmVy'@;
put 'ZmxvdzpoaWRkZW59Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZXhwYW5kQW5pbWF0aW9uIixbaGMoInRydWUgPD0+IGZhbHNlIixbX3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksTEY9'@;
put 'KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxzeWU9MDtjb25zdCB4OD1uZXcgTWkoIklGX0FDVElWRV9JRCIp'@;
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 'YSYmUzUoIkBsZWF2ZUFuaW1hdGlvbiIsZC5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImxlYXZl'@;
put 'QW5pbWF0aW9uIixbaGMoIjpsZWF2ZSIsW19zKHtsZWZ0OiIqIix0b3A6IioifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGN9KSgpLFlKPSgoKT0+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 'LHR0KE9GKSx0dChhcyksdHQoSzApLHR0KEVhKSx0dChSRiksdHQoV0opKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWUosNSksMiZhKXtsZXQgZjtz'@;
put 'aShmPWFpKCkpJiYoZC5jdXN0b21HaG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZHJhZ2dhYmxlIiwhMCkoImJlaW5nLWRyYWdnZWQiLGQuZHJhZ09uKX0saW5wdXRzOntkYXRhVHJhbnNmZXI6WyJjbHJEcmFnZ2FibGUiLCJk'@;
put 'YXRhVHJhbnNmZXIiXSxncm91cDpbImNsckdyb3VwIiwiZ3JvdXAiXSxkcmFnU3RhcnREZWxheTpbImNsckRyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXX0sb3V0cHV0czp7ZHJhZ1N0YXJ0RW1pdHRlcjoiY2xyRHJhZ1N0YXJ0IixkcmFnTW92ZUVtaXR0ZXI6ImNsckRyYWdNb3Zl'@;
put 'IixkcmFnRW5kRW1pdHRlcjoiY2xyRHJhZ0VuZCJ9LGZlYXR1cmVzOlt0aShba2IsT0YsUkYsV0osaDFdKV19KSxjfSkoKSwkSj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu'@;
put 'XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NvbnN0IHFKPW5ldyBNaSgiRk9DVVNfT05fVklFV19JTklUIiksdXllPXtwcm92aWRlOnFKLHVzZVZhbHVlOiEwfTtsZXQgUEY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5lbD1hLHRoaXMu'@;
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 'LGQpezEmYSYmKFRpKCksVnIoMCwwKSxKZSgxLG03ZSwyLDEsInNwYW4iLDEpLEplKDIsdjdlLDIsMSwic3BhbiIsMSksSmUoMyxfN2UsMiwxLCJzcGFuIiwxKSxqcigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGQuc3RhdGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUu'@;
put 'TE9BRElORyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltuZCx0aF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImRl'@;
put 'ZmF1bHRCdXR0b24iLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjB9KV0pXSksYTEoInNwaW5uZXIiLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1'@;
put 'KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pLGExKCJ2YWxpZGF0ZWQiLFtoYygiOmVudGVyIixbcnUoIjYwMG1zIixGbWUoW19zKHt0cmFu'@;
put 'c2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksX3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksX3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEp'@;
put 'IixvZmZzZXQ6MX0pXSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxfeWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
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 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIRj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT'@;
put 'ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1d'@;
put 'LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxkcigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGko'@;
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 'cigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNkPSgoKT0+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 'UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoSW8oaCxVcyw1KSxJbyhoLE15ZSw1KSxJbyhoLFN5ZSw1KSxJbyhoLEhGLDUpKSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmly'@;
put 'c3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBDRXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3Is'@;
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 'dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwy'@;
put 'JmEmJmRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbImNsckxhYmVsU2l6ZSIsImxhYmVs'@;
put 'U2l6ZSJdfSxmZWF0dXJlczpbdGkoW09mLE5GXSldfSksY30pKCksWWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhXV19KSxjfSkoKTtjb25zdCBWRj1uZXcgTWkoIklTX1RPR0dMRSIpLEF5ZT17cHJvdmlkZTpWRix1c2VGYWN0b3J5OmZ1bmN0aW9uIGt5ZSgpe3JldHVybiBuZXcgVGUoITEpfX07bGV0IFQwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5fZHluYW1pYz0hMSx0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gt'@;
put 'd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsVXMsNyksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7'@;
put 'MiZhJiZkcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdGkoW2FkLEF5ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dzdlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSh5N2UpLGtyKDApLGtyKDEsMSksSmUoMixiN2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEMD0oKCk9PntjbGFzcyBjIGV4'@;
put 'dGVuZHMgVDh7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKGEsVDAsZCxoLGYsXyksdGhpcy50b2dnbGU9VH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihWRixudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUm'@;
put 'JmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSksUDQoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2ti'@;
put 'b3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbZW9dfSksY30pKCksRDg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRo'@;
put 'aXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9'@;
put 'bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNk'@;
put 'KSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxEMCw1KSwyJmEpe2xldCBm'@;
put 'O3NpKGY9YWkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9u'@;
put 'dWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdGkoW2xkLGswLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpUN2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5n'@;
put 'SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1'@;
put 'ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh'@;
put 'cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoQTdl'@;
put 'KSxrcigwKSxKZSgxLEM3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxKZSg1LFM3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDYsTTdlLDEsMCwiY2RzLWljb24iLDMpLEplKDcseDdlLDEsMCwiY2RzLWljb24iLDQpLEplKDgsRTdlLDEsMCwi'@;
put 'bmctY29udGVudCIsMCksSmUoOSxrN2UsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xh'@;
put 'c3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRl'@;
put 'bmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLFljLHdFXSxZY119KSxjfSkoKTtmdW5jdGlvbiB1ZChjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHUyPSgoKT0+e2NsYXNzIGN7'@;
put 'Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9dWQoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMu'@;
put 'X2ludmVyc2U9dWQoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXVkKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVt'@;
put 'PXVkKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtYnVz'@;
put 'eSIsITApLGRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRz'@;
put 'OntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3Io'@;
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 'ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxKSiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXli'@;
put 'b2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246WyJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxm'@;
put 'b2N1c2FibGVJdGVtczpbImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6RDdlLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRp'@;
put 'KCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCRj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp'@;
put 'O2NvbnN0IEw4PW5ldyBNaSgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2NsYXNzIER5ZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwp'@;
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 'NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sJGwsc2EsQkYsWWMsc2QseGIsQWJdLFljLHNkXX0pLGN9KSgpLGpGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBOHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJj'@;
put 'bHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt0aShbbGQsazAsYWQsY2RdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOno3ZSxkZWNsczoxMCx2YXJzOjcsY29u'@;
put 'c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk'@;
put 'ZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJk'@;
put 'YW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYoVGkoajdlKSxrcigwKSxKZSgxLFA3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksa3IoNCwxKSxKZSg1LEY3ZSwxLDAsImNkcy1pY29uIiwzKSxKZSg2LEg3ZSwxLDAsImNkcy1pY29uIiw0KSx5ZSgpLEplKDcsTjdlLDEsMCwibmctY29udGVudCIsMCksSmUo'@;
put 'OCxWN2UsMSwwLCJuZy1jb250ZW50IiwwKSxKZSg5LEI3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLFJlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxDZSgzKSxSZSgibmdJZiIsZC5zaG93'@;
put 'SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbWmksVXMsdWMscXNdLGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEsakYsZCxoLGYsXyksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0'@;
put 'KHp1LDEwKSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLGVR'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxZY10sWWNd'@;
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 'Rmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBQdWUoYyl7cmV0dXJuIEJsKGMpW3FvLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiB4Xyhj'@;
put 'LGwpe3JldHVybiB0ZChCbChjKVtxby5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUseTAuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihLZCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
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 'LHByKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz'@;
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 'aW5nKSxDZSgxKSxwcigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksQ2UoMSkscHIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksQ2UoMiksVHIoImFyaWEtbGFiZWwiLGQuY29t'@;
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 'KGxkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFg3ZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJz'@;
put 'OjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1'@;
put 'dHM6e2NsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiJ9LGZlYXR1cmVzOlt0aShbYWQsS3MsSWYsUzgsVGIsY2QsekYsazAsUDgsUGYseEUsRGIsRjgsbGRdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOmE5ZSxkZWNsczoxMyx2YXJzOjE0LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQtZ3Jv'@;
put 'dXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjbHJGb2N1c1RyYXAiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xs'@;
put 'VG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj'@;
put 'bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsiYWN0aW9uQnV0dG9uIiwi'@;
put 'Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2xyRm9jdXNUcmFwIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl'@;
put 'Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaShzOWUpLGtyKDApLEplKDEsSjdlLDEsMCwibGFiZWwiLDApLG1lKDIsImRpdiIsMSkoMywiZGl2Iiwy'@;
put 'KSg0LCJkaXYiLDMpLGtyKDUsMSksSmUoNixRN2UsMywxLCJidXR0b24iLDQpLEplKDcsZTllLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw1KSx5ZSgpLEplKDgsdDllLDEsMCwiY2RzLWljb24iLDYpLEplKDksbjllLDEsMCwiY2RzLWljb24iLDcpLHllKCksSmUoMTAscjll'@;
put 'LDEsMCwibmctY29udGVudCIsMCksSmUoMTEsaTllLDEsMCwibmctY29udGVudCIsMCksSmUoMTIsbzllLDEsMCwibmctY29udGVudCIsMCkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNz'@;
put 'KCkpLENlKDIpLGRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLENlKDIpLFJlKCJuZ0lmIixkLmlzRW5hYmxlZCksQ2UoMSksUmUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lk'@;
put 'ZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5z'@;
put 'aG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbY1EsWmksVXMsdWMsd2IsTWIscXMsU2IsTXBdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRGPSgoKT0+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 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyx3RSxzZCx4YixzYSx5RSxZY11dfSksY30pKCk7bmV3IE1pKHZvaWQgMCk7bGV0IGV3ZT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoZG1lLGhtZSxvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxZY10sWWNdfSksY30pKCks'@;
put 'S0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDcpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezImYSYmZHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOlt0aShbYWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOnU5ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoYzllKSxrcigwKSxrcigxLDEp'@;
put 'LEplKDIsbDllLDEsMCwibGFiZWwiLDApKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltaaSxVc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxL'@;
put 'RixkLGgsZixfKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KEVhKSx0dCh6dSwxMCksdHQoRm8pLHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltl'@;
put 'b119KSxjfSkoKSx0d2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3Rh'@;
put 'dGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo'@;
put 'KX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoT2YsOCksdHQoY2QpLHR0KGswKSx0dChsZCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWEYsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm'@;
put 'KFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxp'@;
put 'bmUifSxmZWF0dXJlczpbdGkoW2swLGxkLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpfOWUsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNs'@;
put 'YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi'@;
put 'c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkodjllKSxrcigwKSxKZSgxLGQ5ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxKZSg1LGg5'@;
put 'ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDYsZjllLDEsMCwiY2RzLWljb24iLDMpLEplKDcscDllLDEsMCwiY2RzLWljb24iLDQpLEplKDgsZzllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxtOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwh'@;
put 'ZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxud2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp'@;
put 'e1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFljLHdFLHNhXSxZY119KSxjfSkoKSxyd2U9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFljLHdFLHNhXSxZY119KSxjfSkoKSxIOD0oKCk9'@;
put 'PntjbGFzcyBjIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11'@;
put 'bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShhPT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgZGIsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJD'@;
put 'bGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNkKSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9'@;
put 'd3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxkYiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3RpKFtsZCxrMCxhZCxj'@;
put 'ZF0pLGVvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RTllLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs'@;
put 'aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKHg5ZSksa3IoMCksSmUoMSxiOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksSmUoNSx5OWUsMSwwLCJjZHMtaWNvbiIsMyksSmUoNix3OWUsMSwwLCJjZHMtaWNvbiIs'@;
put 'NCkseWUoKSxKZSg3LEM5ZSwxLDAsIm5nLWNvbnRlbnQiLDApLEplKDgsUzllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxNOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIs'@;
put 'ZC5jb250cm9sQ2xhc3MoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dIZWxwZXIpLENlKDEpLFJlKCJuZ0lmIixkLnNo'@;
put 'b3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltaaSxVcyx1Yyxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxIOCxkLGgsZixfKSx0'@;
put 'aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6'@;
put 'Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltlb119KSxjfSkoKSxpd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLCRsLHNhLFljXSxZY119KSxjfSkoKSx1UT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQTh7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5j'@;
put 'dGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1mb3JtLWNvbnRyb2wi'@;
put 'LCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdGkoW2xkLGswLGFkLGNkXSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpPOWUsZGVjbHM6MTAsdmFy'@;
put 'czo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi'@;
put 'LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi'@;
put 'c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKFRpKFI5ZSksa3IoMCksSmUoMSxrOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksSmUoNSxBOWUsMSwwLCJjZHMtaWNvbiIsMyksSmUoNixUOWUsMSwwLCJjZHMtaWNvbiIsNCkseWUoKSxKZSg3LEQ5ZSwxLDAsIm5nLWNvbnRl'@;
put 'bnQiLDApLEplKDgsSTllLDEsMCwibmctY29udGVudCIsMCksSmUoOSxMOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5n'@;
put 'SWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFz'@;
put 'XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvd2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSx1USxkLGgsZixfKSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFz'@;
put 'KSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl'@;
put 'czpbZW9dfSksY30pKCksc3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6'@;
put 'W1tvbywkbCxzYSxZY10sWWNdfSksY30pKCksZFE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxZYyxUeWUsT3llLFh5ZSxl'@;
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 'LGQpe2lmKDEmYSYmUm8oUDllLDUsTmkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w'@;
put 'ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6RUUsdXNlRXhpc3Rpbmc6Y31dKSxlbyx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii'@;
put 'LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ'@;
put 'b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs'@;
put 'MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwi'@;
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 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhIOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbImNsckZpbHRlck1pblBs'@;
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 'UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhOOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbImNsckZpbHRlclBs'@;
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 'cHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhWOWUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFs'@;
put 'IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxKZSgwLEI5ZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsa2MpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5f'@;
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 'OWUsNSksUm8oejllLDUpKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksc2koaD1haSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkYXRhZ3Jp'@;
put 'ZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJd'@;
put 'LFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImJ1dHRvbiIsMCwxKSx4dCgiY2xyRHJhZ1N0YXJ0Iixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLnNob3dUcmFja2VyKCl9KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm1vdmVUcmFja2VyKGYuZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUcmFja2VyKCl9KSx5ZSgpLG1lKDIs'@;
put 'InNwYW4iLDIpLE5lKDMpLHllKCkscXQoNCwiZGl2IiwzLDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGQuY29sdW1uU2VwYXJhdG9ySWQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVz'@;
put 'Y3JpcHRpb25JZCksQ2UoMiksVHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLENlKDEpLHByKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W0dKXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx0Zz0oKCk9PntjbGFz'@;
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 'ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxFRSw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz'@;
put 'LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLGRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1Bs'@;
put 'YWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZp'@;
put 'bHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlsiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSxz'@;
put 'b3J0ZWQ6WyJjbHJEZ1NvcnRlZCIsInNvcnRlZCJdLHVwZGF0ZUZpbHRlclZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVy'@;
put 'VmFsdWVDaGFuZ2UiLHNvcnRlZENoYW5nZToiY2xyRGdTb3J0ZWRDaGFuZ2UifSxmZWF0dXJlczpbdGkoW1M4LElmLEtzXSksZW8sdmFdLG5nQ29udGVudFNlbGVjdG9yczpROWUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbMSwiZGF0YWdyaWQtY29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0'@;
put 'YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVy'@;
put 'TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNvbHVtblRpdGxlIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIs'@;
put 'NCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJd'@;
put 'LFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9s'@;
put 'ZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEo5ZSksbWUoMCwi'@;
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 'ci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxKZSgxLGV2ZSwxLDAsImRpdiIsMSksbWUoMiwic3BhbiIsMiksSmUoMyx0dmUsMSwwLCJuZy1jb250ZW50IiwzKSx5ZSgpKCkpLDImYSYmKGRyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0'@;
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 'aCl7aWYoMSZhJiZJbyhoLFJFLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3RpKFtLcyxpSCx7cHJvdmlkZTpM'@;
put 'OCx1c2VFeGlzdGluZzpOaX0sb0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1s'@;
put 'aW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxKZSgwLG52ZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksa3IoMSkpLDImYSYmUmUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1ppLFJFLHFzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5j'@;
put 'ZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhydmUsNSks'@;
put 'MiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksSmUoMCxpdmUsMSwwLCJuZy10'@;
put 'ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGFILHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgp'@;
put 'e3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBDRShhSCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVz'@;
put 'OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsc0gsNCksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF0YWdyaWQtY2Vs'@;
put 'bCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1RPTAs'@;
put 'UGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFl1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBUZSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgYmUsbVErKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIr'@;
put 'bVF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3Jl'@;
put 'dHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09VXUuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5u'@;
put 'ZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBaOD1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oWjh8fHt9KSxhYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oYWF8fHt9'@;
put 'KTtsZXQgbEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8ob3ZlLDUpLDImYSl7bGV0IGg7c2koaD1haSgp'@;
put 'KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksSmUoMCxzdmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9'@;
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 'KGFzKSx0dChGbyksdHQoTmkpLHR0KEVzKSx0dChBcCksdHQoTHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFRwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYm'@;
put 'KGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKGJFLDUpLFJvKGF2ZSw1KSxSbyhsdmUsNSxhcyksUm8oY3ZlLDUsYXMpLFJvKHV2ZSw1LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksc2koaD1h'@;
put 'aSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJy'@;
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 'dGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoUHZlKSxKZSgwLGd2ZSwzLDIsImRpdiIsMCksSmUoMSx2dmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEpLEplKDIsYnZlLDEsMSxudWxsLDIpLEplKDMseXZlLDEsMCwi'@;
put 'bmctdGVtcGxhdGUiLG51bGwsMyxrYyksSmUoNSxPdmUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDQsa2MpLGphKDcsbnVsbCw1KSksMiZhJiYoUmUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLENlKDEpLFJlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9u'@;
put 'TW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W2JFLFQwLEtGLHUyLFppLHJkLHVILHVjLFMwLEQwLEJzLE9zLFVzLGxFLFdhLFhGLHFzXSxl'@;
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 'bGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgsVTgsNSksSW8oaCxySCw1KSxJbyhoLHRnLDQpLElvKGgsbmcsNCkpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksc2koZj1haSgp'@;
put 'KSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksc2koZj1haSgpKSYmKGQuY29sdW1ucz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oSHZlLDUsTmkpLFJvKE52ZSw1LGFzKSxSbyhWdmUsNSxhcyksUm8oQnZlLDUsYXMpLFJv'@;
put 'KGp2ZSw1LGFzKSxSbyh6dmUsNSxhcykpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCks'@;
put 'c2koaD1haSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp'@;
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 'MSZhJiYoVGkocXZlKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsImRpdiIsMSkoMywiZGl2IiwyLDMpKDUsImRpdiIsNCkoNiwiZGl2Iiw1LDYpKDgsImRpdiIsNykoOSwiZGl2Iiw4KSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksSmUoMTIsVXZlLDcsNSwiZGl2IiwxMSksSmUoMTMsWnZlLDIs'@;
put 'MSwiZGl2IiwxMiksSmUoMTQsWXZlLDIsMSwiZGl2IiwxMyksSmUoMTUsV3ZlLDIsMSwiZGl2IiwxNCkseWUoKSxtZSgxNiwiZGl2IiwxNSksamEoMTcsbnVsbCwxNikseWUoKSgpKCkoKSxqYSgxOSxudWxsLDE3KSxrcigyMSwxKSxKZSgyMixHdmUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIi'@;
put 'LDE4KSx5ZSgpKCkoKSxrcigyMywyKSxKZSgyNCwkdmUsMywwLCJkaXYiLDE5KSx5ZSgpLGtyKDI1LDMpLHllKCksbWUoMjYsImRpdiIsMjApKDI3LCJkaXYiLDIxKSxqYSgyOCxudWxsLDIyKSx5ZSgpLGphKDMwLG51bGwsMjMpLHllKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWhpZGRlbiIs'@;
put 'ISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxDZSg5KSxSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLENlKDEpLFJlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5n'@;
put 'bGUpLENlKDEpLFJlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLENlKDcpLFJlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks'@;
put 'Q2UoMiksUmUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3JILHUyLFppLHVILFMwLEJzLE9zLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLmFsbFNlbGVjdGVkPW5l'@;
put 'dyBFcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RB'@;
put 'bGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0wwLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhp'@;
put 'cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSGYpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dn'@;
put 'bGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJk'@;
put 'aXNhYmxlZCIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLGtyKDEpLHllKCkpLDImYSYmUmUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2li'@;
put 'bGUpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5UT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sbmdD'@;
put 'b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IHdRPWM9PmM7bGV0IGhIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1z'@;
put 'ZXQgdHJhY2tCeShhKXthIT09d1EmJnRoaXMuX2l0ZW1zJiYodGhpcy5faXRlbXMuaXRlcmF0b3JUcmFja0J5PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBcCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs'@;
put 'Im5nRm9yVHJhY2tCeSIsIiJdXSxpbnB1dHM6e3RyYWNrQnk6WyJuZ0ZvclRyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3Zlcklk'@;
put 'PUljKCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj13USx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0'@;
put 'YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2Vydmlj'@;
put 'ZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9'@;
put 'PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0'@;
put 'ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0wwLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0'@;
put 'aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChIZiksdHQoS3MpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVt'@;
put 'bi10b2dnbGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseVEsNSksSW8oaCxkSCw1KSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVUaXRsZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVCdXR0b249Zi5m'@;
put 'aXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEp2ZSw1LE5pKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29sdW1uLXN3'@;
put 'aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbdGkoW0lmLFM4LEtzXSldLG5nQ29udGVudFNlbGVjdG9yczpvX2UsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIs'@;
put 'IiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50Iiwi'@;
put 'Y2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNo'@;
put 'LWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9z'@;
put 'ZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3Rl'@;
put 'ciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpm'@;
put 'dW5jdGlvbihhLGQpezEmYSYmKFRpKGlfZSksbWUoMCwiYnV0dG9uIiwwKSxOZSgxKSx5ZSgpLEplKDIscl9lLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihUcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVu'@;
put 'U3RhdGUpLENlKDEpLHByKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLENlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVD'@;
put 'bGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1QwLGRILHdiLE1iLFNiLE1wLFppLEZKLHFzLHhzLGhILFMwLEQwLEJzLE9zLFVzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxTUT0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3Vu'@;
put 'dC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGo4LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLFBFPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1hYX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1Nl'@;
put 'cnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCksdHQoaDIpLHR0KEhmKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZkgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC50b2dnbGU9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRT'@;
put 'ZWxlY3RvcnM6aF9lLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwi'@;
put 'ZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoZF9lKSxKZSgwLGxfZSw4LDIsIm5nLWNvbnRhaW5lciIsMCksSmUoMSx1X2UsNSwxLCJuZy1jb250YWluZXIiLDAp'@;
put 'LGtyKDIpKSwyJmEmJihSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W1Qw'@;
put 'LGZILFppLEQwLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBwSD1uZXcgTWkoIkNPTFVNTl9TVEFURSIpLHZ3ZT17cHJvdmlkZTpwSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIG13ZSgpe3JldHVybiBuZXcgVGUoe2NoYW5nZXM6W119KX19O2xldCBnSD0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9SWMoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6WyJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6'@;
put 'ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJpZCIsIm5nTW9kZWwiLCJu'@;
put 'Z01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLnBhZ2Uuc2l6ZT1mfSksSmUoMyxmX2UsMiwyLCJvcHRpb24iLDIpLHllKCkoKSksMiZhJiYoQ2UoMiksZHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUmUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLENlKDEpLFJlKCJuZ0Zvck9m'@;
put 'IixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W00wLEJzLE9zLHhzLGwxLGMxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZp'@;
put 'Y2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5wYWdlLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1z'@;
put 'KCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBh'@;
put 'JiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0'@;
put 'ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2Uu'@;
put 'Y3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVu'@;
put 'dENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMu'@;
put 'cGFnZS5uZXh0KCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5u'@;
put 'YXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFcCksdHQoRXMpLHR0KGgyKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1d'@;
put 'LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZ0gsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHBfZSw1KSwyJmEpe2xldCBoO3NpKGg9'@;
put 'YWkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJk'@;
put 'aXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlsiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlsiY2xyRGdQ'@;
put 'YWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpDX2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFn'@;
put 'aW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsx'@;
put 'LCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0'@;
put 'eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsicmVhZE9ubHkiLCIiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIs'@;
put 'MywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsi'@;
put 'dHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0'@;
put 'aW9uKGEsZCl7MSZhJiYoVGkod19lKSxKZSgwLGJfZSw1LDIsIm5nLWNvbnRhaW5lciIsMCksSmUoMSx5X2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMCkpLDImYSYmKFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksQ2UoMSksUmUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09w'@;
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 'LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLHJnLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IEN3ZT1jPT5ScyhjKT9uZXcgaDE6bmV3IHd3ZTtsZXQgJDg9KCgpPT57Y2xhc3MgY3tjb25z'@;
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 'byksdHQoaDIpLHR0KG5IKSx0dChIZiksdHQoTm8pKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLGlnLDQpLElvKGgsb2csNSkpLDImYSl7bGV0IGY7c2koZj1h'@;
put 'aSgpKSYmKGQuaGVhZGVycz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpoMSx1c2VGYWN0b3J5OkN3ZSxkZXBzOltHc119XSldfSksY30pKCksU3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhmbWUscG1lLG5iLGdt'@;
put 'ZSxJSyxtbWUsTEssdm1lLF9tZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxkUSwkbCxMRixzZCxhd2UsaFEsJEosQWIseGIsQkYseUUscTVd'@;
put 'XX0pLGN9KSgpLE1RPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLG1IPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVk'@;
put 'SWQ9ImNsci1zdGFjay1sYWJlbC0iK0ljKCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1s'@;
put 'YWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j'@;
put 'YXBzdWxhdGlvbjoyfSksY30pKCkseFE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZm9j'@;
put 'dXNlZD0hMSx0aGlzLnVuaXF1ZUlkPUljKCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhp'@;
put 'cy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhw'@;
put 'YW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5h'@;
put 'cmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgo'@;
put 'KXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4'@;
put 'cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3Rh'@;
put 'Y2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYywxMiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsbUgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsImhlYWRpbmciKSgiYXJp'@;
put 'YS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLGRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24t'@;
put 'Zm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxh'@;
put 'cmlhU2V0c2l6ZTpbImNsclN0YWNrVmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0'@;
put 'czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6a19lLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3Bh'@;
put 'Y2UiLCJmb2N1cyIsImJsdXIiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2st'@;
put 'Y2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihUaShFX2UpLG1lKDAsImRpdiIsMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LnRvZ2dsZUV4cGFuZCgpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxKZSgxLFNfZSwx'@;
put 'LDEsImNkcy1pY29uIiwxKSxKZSgyLE1fZSwyLDEsInNwYW4iLDIpLG1lKDMsImRpdiIsMyksa3IoNCkseWUoKSxtZSg1LCJkaXYiLDQpLGtyKDYsMSkseWUoKSgpLG1lKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksSmUoOCx4X2UsMiw0LCJkaXYiLDYpLHllKCkpLDImYSYmKFJl'@;
put 'KCJpZCIsZC51bmlxdWVJZCksVHIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRhYmxlKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLENlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W2JFLFppLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9'@;
put 'Il19KSxjfSkoKSxxOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyBFcighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0'@;
put 'aGlzLl9lZGl0TW9kZX1zZXQgZWRpdGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj'@;
put 'Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6VF9lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihUaShBX2UpLGtyKDApLG1lKDEsImRpdiIsMCksa3IoMiwxKSx5ZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksRXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxoUV1dfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlz'@;
put 'LmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBiZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qga1E9e3Byb3ZpZGU6c2csdXNl'@;
put 'RmFjdG9yeTpmdW5jdGlvbiBrd2UoYyl7cmV0dXJuIGN8fG5ldyBzZ30sZGVwczpbW25ldyB6MixuZXcgZzAsc2ddXX07bGV0IEFRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNj'@;
put 'cmlwdGlvbj10aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNo'@;
put 'b3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5t'@;
put 'b2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQoWXUsOCkpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFy'@;
put 'czoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmSmUoMCxWX2UsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5n'@;
put 'SWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1ppLHhzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgZmM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRF'@;
put 'Uk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oZmN8fHt9KTtjbGFzcyBUUXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IFRlKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBUZShmYy5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMu'@;
put 'X2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhpcy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk'@;
put 'JiZsIT09ZmMuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9Pmguc2V0U2VsZWN0ZWQobCwhMSwhMCkpLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihs'@;
put 'KXt0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1mYy5TRUxFQ1RFRD9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7'@;
put 'bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3Qg'@;
put 'ZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlIGZjLklOREVURVJNSU5BVEU6cmV0dXJuIGZjLklOREVURVJNSU5BVEU7Y2FzZSBmYy5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIGZjLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwp'@;
put 'cmV0dXJuIGZjLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVEOmZjLlVOU0VMRUNURUR9fWNsYXNzIE5FIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9'@;
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 'Y2U9Zix0aGlzLmV4cGFuZFNlcnZpY2U9Xyx0aGlzLmNvbW1vblN0cmluZ3M9VCx0aGlzLmZvY3VzTWFuYWdlcj1XLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBFcix0aGlzLlNUQVRFUz1mYyx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRo'@;
put 'aXMubm9kZUlkPUljKCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhp'@;
put 'cy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uP2llLnZpZXc/aWUudmlldy5jb250ZXh0LmNsck1vZGVsOmllLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgVHdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlz'@;
put 'Ll9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPWZjLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/ZmMuU0VMRUNURUQ6ZmMuVU5TRUxF'@;
put 'Q1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFu'@;
put 'ZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWZjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k'@;
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 'Y2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLERwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oQl9lLDcsTmkpLDImYSl7'@;
put 'bGV0IGg7c2koaD1haSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJd'@;
put 'LHNlbGVjdGVkOlsiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt0'@;
put 'aShba1EsWXUse3Byb3ZpZGU6dmIsdXNlRXhpc3Rpbmc6WXV9XSldLG5nQ29udGVudFNlbGVjdG9yczokX2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlk'@;
put 'b3duIiwiZm9jdXMiXSxbImNvbnRlbnRDb250YWluZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRy'@;
put 'ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2Vkb3duIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0'@;
put 'LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiXSxbInNoYXBlIiwiYW5nbGUiLDEs'@;
put 'ImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVu'@;
put 'IiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsImZvY3VzIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwi'@;
put 'bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEdfZSksbWUoMCwiZGl2IiwwLDEpLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigp'@;
put 'fSksSmUoMixqX2UsMiwxLCJidXR0b24iLDIpLEplKDMsel9lLDIsMCwiZGl2IiwzKSxKZSg0LFVfZSwzLDQsImRpdiIsNCksbWUoNSwiZGl2Iiw1KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzVHJlZU5vZGUoKX0pLGtyKDYpLEplKDcsV19lLDMsMiwiZGl2Iiw2'@;
put 'KSx5ZSgpKCksbWUoOCwiZGl2Iiw3KSxrcig5LDEpLGtyKDEwLDIpLHF0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx5ZSgpKSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxl'@;
put 'Y3RlZCksQ2UoMiksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZmVh'@;
put 'dHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLENlKDMpLFJlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxkLmFyaWFTZWxlY3RlZCksQ2UoMSksUmUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQi'@;
put 'KSxUcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLENlKDMpLFJlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbQVEsWmkscXNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2ExKCJ0'@;
put 'b2dnbGVDaGlsZHJlbkFuaW0iLFtoYygiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbX3Moe2hlaWdodDowfSkscnUoMjAwLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW19zKHtoZWlnaHQ6IioifSkscnUoMjAwLF9zKHtoZWlnaHQ6MH0pKV0pLEt4KCJl'@;
put 'eHBhbmRlZCIsX3Moe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxLeCgiY29sbGFwc2VkIixfcyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCksZGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQse25hdGl2ZUVsZW1lbnQ6aH0sZixfKXt0aGlzLmZlYXR1cmVzU2Vy'@;
put 'dmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBUPV8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKGgsImZvY3VzaW4iKS5zdWJzY3JpYmUoVz0+e1cudGFyZ2V0PT09aCYmKHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5mb2N1c0Zp'@;
put 'cnN0VmlzaWJsZU5vZGUoKSxmLnJlbW92ZUF0dHJpYnV0ZShoLCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChUKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJl'@;
put 'c1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjB9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Um9vdE5vZGVz'@;
put 'KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4h'@;
put 'YS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQodkgpLHR0KE5pKSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp'@;
put 'b24oYSxkLGgpe2lmKDEmYSYmSW8oaCxnMSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsInRyZWUiKSgiYXJpYS1t'@;
put 'dWx0aXNlbGVjdGFibGUiLGQuaXNNdWx0aVNlbGVjdGFibGUpfSxpbnB1dHM6e2xhenk6WyJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbdGkoW2tRLHZIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsz'@;
put 'LCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCksSmUoMSxxX2UsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W0FR'@;
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 'c2FibGUiXX0sZmVhdHVyZXM6W3RpKFtGd2Use3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LGpKLEtzLE93ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks'@;
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 'ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxTRSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsIm1lbnUiKSxkcigiZHJvcGRvd24tbWVudSIsITApKX0saW5w'@;
put 'dXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W2VvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbGc9KCgp'@;
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 'JiYoVGkoKSxKZSgwLFhfZSw0LDgsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1ppLHVjLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxQUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQod0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJjZHMtaWNvbiIsMSkseWUo'@;
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 'aWYoMSZhJiZJbyhoLEhiLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSko'@;
put 'ImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4Olsi'@;
put 'Y2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh'@;
put 'bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbVkVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmViZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKFFfZSksSmUoMCxKX2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxrcigxKSksMiZhJiZSZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltGUSxaaV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP'@;
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 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHphLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLEplKDAscmJlLDEsMCwibmct'@;
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 'MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhpYmUsNyksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsi'@;
put 'aWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKFRpKCksSmUoMCxvYmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLGtjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG5DZT0wO2NvbnN0IENIPW5ldyBNaSgiVEFCU19JRCIpLGlDZT17cHJvdmlkZTpDSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHJDZSgpe3JldHVybiJj'@;
put 'bHItdGFicy0iK25DZSsrfX07bGV0IG9DZT0wLFJwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMuY2ZyPWYsdGhpcy52aWV3Q29udGFpbmVyUmVmPV8sdGhpcy50YWJzU2Vydmlj'@;
put 'ZT1ULHRoaXMudGFic0lkPVcsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrb0NlKyspO2NvbnN0IGllPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFVRKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJl'@;
put 'Zi5jcmVhdGVDb21wb25lbnQoaWUsdm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PXVnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93'@;
put 'KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250'@;
put 'ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOaSksdHQoSzApLHR0KGFzKSx0dChWYiksdHQoQ0gpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFi'@;
put 'IiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJih0MSgiaWQiLGQudGFiTGlua0lkKSxUcigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJv'@;
put 'bHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxkcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOlsi'@;
put 'aWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlsiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksT3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgu'@;
put 'cmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLFJwLDcpLElvKGgsTHAsNykpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQu'@;
put 'dGFiTGluaz1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC50YWJDb250ZW50PWYuZmlyc3QpfX0sZmVhdHVyZXM6W3RpKFtseWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLFNIPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBj'@;
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 'dG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLE9wLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKEk4LDcpLFJvKFNILDUsTmkpLFJvKHNi'@;
put 'ZSw3LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6'@;
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 'Im5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxKZSgwLGZiZSwyLDYsImJ1dHRvbiIsMCksbWUoMSwiZGl2IiwxKSxrcigyKSxKZSgzLHBiZSwxLDEsImJ1dHRvbiIsMikseWUoKSksMiZhJiYoUmUoIm5nSWYiLGQuY29sbGFwc2libGUpLENl'@;
put 'KDMpLFJlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBiZX1nZXQgZXhwYW5kQ2hhbmdlKCl7'@;
put 'cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1'@;
put 'MDI3NWZhY30pLGN9KSgpLFlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGJlLGgmJm4yKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKGFoKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNo'@;
put 'ZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoVWEpLHR0KGtILDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGlj'@;
put 'YWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczp2YmUsbmdDb250ZW50U2VsZWN0b3JzOmJiZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKF9iZSksa3IoMCksbWUoMSwic3Bh'@;
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 'LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKE1wLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZm9jdXNUcmFwPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJnh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0sMCxFdiksMiZhJiZkcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46WyJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOlsiY2xyTW9kYWxDbG9zYWJsZSIsImNs'@;
put 'b3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlsiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlsiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0Jh'@;
put 'Y2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlsiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl0sc3RvcENsb3NlOlsiY2xyTW9kYWxQcmV2'@;
put 'ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlsiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt0aShb'@;
put 'XSxbV1FdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOlNiZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0'@;
put 'cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBw'@;
put 'ZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xv'@;
put 'c2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKENiZSksSmUoMCx3YmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W1ppLE1wLFBGLHFzXSxzdHlsZXM6WyJb'@;
put 'X25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZmFkZURvd24iLFtoYygiKiA9PiBmYWxzZSIsW19zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSks'@;
put 'cnUoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGhjKCJmYWxzZSA9PiAqIixbcnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxhMSgiZmFkZSIsW2hjKCJ2b2lkID0+ICoiLFtfcyh7b3BhY2l0eTowfSkscnUoIjAu'@;
put 'MnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5Oi44NX0pKV0pLGhjKCIqID0+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 'b24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJkaXYiLDEpLG1lKDIsImRpdiIsMikoMywiYnV0dG9uIiwz'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLHF0KDQsImNkcy1pY29uIiw0KSx5ZSgpKCksbWUoNSwiZGl2Iiw1KSxrcig2KSx5ZSgpKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJp'@;
put 'YS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25z'@;
put 'KG5iLFJLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHE1XSxzZF19KSxjfSkoKSxBSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWN9KSxjfSkoKSxUSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl'@;
put 'cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo'@;
put 'KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'YXIoS3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt0aShbS3Mse3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LEFILFRIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6'@;
put 'MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBtQ2U9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sdkNlPVsieHMiLCJzbSIsIm1k'@;
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 'bnB1dHM6e2lkOiJpZCIscG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigw'@;
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 'fWZ1bmN0aW9uIE5DZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIyKX1mdW5jdGlvbiBWQ2UoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJhIiwzMykoMiwic3BhbiIsMzQpLE5lKDMsIkRvY3VtZW50YXRpb24iKSx5ZSgpKCksanIoKSl9ZnVuY3Rpb24gQkNlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSgxLCJkaXYiLDI0LDI1KSgzLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMjYpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj0kaSgyKTtyZXR1cm4ganQoVmUoKS5vbkRlYnVnUm93Q2xpY2soaCxmKSl9KSxt'@;
put 'ZSg0LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg1LCJpbnB1dCIsMjcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5zYXNqc0NvbmZpZy5kZWJ1Zz1oKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9u'@;
put 'RGVidWdNb2RlQ2hhbmdlKCkpfSkseWUoKSxtZSg2LCJsYWJlbCIpLE5lKDcsIkRlYnVnIE1vZGUiKSx5ZSgpKCkoKSgpLG1lKDgsImEiLDI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxtZSg5LCJzcGFuIiksTmUo'@;
put 'MTAsIlNBUyBSZXF1ZXN0cyIpLHllKCkoKSxKZSgxMSxWQ2UsNCwwLCJuZy1jb250YWluZXIiLDIpLHF0KDEyLCJkaXYiLDE1KSxtZSgxMywiYSIsMjkpKDE0LCJzcGFuIiksTmUoMTUsIlN5c3RlbSIpLHllKCkoKSxtZSgxNiwiYSIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'IEJ0KGEpLGp0KFZlKCkubG9nb3V0KGgpKX0pLG1lKDE3LCJzcGFuIiksTmUoMTgsIkxvZyBPdXQiKSx5ZSgpLHF0KDE5LCJjbHItaWNvbiIsMzEpLHllKCksbWUoMjAsImRpdiIsMzIpKDIxLCJzcGFuIiksTmUoMjIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDUpLFJlKCJu'@;
put 'Z01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxDZSg2KSxSZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxDZSgxMSkscHIoInYiLGEuY29tbWl0VmVyLCIiKX19Y29uc3QgakNlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQgekNlPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy51c2VyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnVzZXJOYW1lPSJOb3QgbG9nZ2VkIGluIix0aGlzLnJlcVN1Yj1uZXcgZWUsdGhpcy51c2VyU3ViPW5ldyBlZSx0aGlzLmFwcExv'@;
put 'Z3M9W10sdGhpcy5kZWJ1Z0xvZ3M9W10sdGhpcy5mYWlsZWRSZXFzPVtdLHRoaXMuc2FzRXJyb3JzPVtdLHRoaXMuaXNWaXlhPSExLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMucmVxdWVzdHNDb3VudD0wLHRoaXMuY29tbWl0VmVyPSIifW5nT25Jbml0KCl7dGhp'@;
put 'cy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ni42LjEiLnJlcGxhY2UoInYiLCIiKSsiLmdkYzNhNmFlIn1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlz'@;
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 'Q29uZmlnLmRlYnVnKSxDZSgxKSxSZSgibmdJZiIsIWQuaXNWaXlhKSxDZSgzKSxSZSgiY2xyLW5hdi1sZXZlbCIsMiksQ2UoMykscHIoIiAiLGQudXNlck5hbWUsIiAiKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5zYXNqc0NvbmZpZy5kZWJ1ZykoIm5nTW9kZWxPcHRpb25zIiwkcyg5LGpDZSkp'@;
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 'MSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxOZSgzKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApKCJjbHJBbGVydENsb3NlZCIsYS5jbG9zZWQpLENlKDMpLHByKCIgIixhLm1lc3NhZ2Us'@;
put 'IiAiKX19ZnVuY3Rpb24gWkNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWFsZXJ0cyIpLEplKDEsVUNlLDQsNCwiY2xyLWFsZXJ0IiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgWUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBlZX1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1YnNjcmliZShhPT57dGhpcy5hbGVydHMu'@;
put 'cHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKHR0KGxQKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENs'@;
put 'b3NlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIl0sWzEsImFsZXJ0LWl0ZW0iXSxbMSwiYWxlcnQtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmSmUoMCxaQ2UsMiwxLCJjbHItYWxlcnRzIiwwKSwyJmEmJlJlKCJuZ0lmIixkLmhhc09wZW5BbGVydCl9LGRlcGVuZGVuY2llczpbeHMsWmksSGIsSFEsTmJdLHN0eWxlczpbImNsci1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxq'@;
put 'RT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jbGFzc2VzPSIifW5nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY29udGFjdC1saW5rIl1dLGlucHV0'@;
put 'czp7Y2xhc3NlczoiY2xhc3NlcyJ9LGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYSIsMCksTmUoMSwi'@;
put 'c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHllKCkpLDImYSYmKGRyKCJ1bnNldCIsIiIhPT1kLmNsYXNzZXMpLFJlKCJuZ0NsYXNzIixkLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOlt1Y10sc3R5bGVzOlsiLnVuc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp1bnNldH0iXX0pLGN9'@;
put 'KSgpLFliPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IEVyLHRoaXMuZmlsZURyYWdnZWRPdmVyPW5ldyBFcn1vbkRyYWdPdmVyKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29u'@;
put 'dGFpbnNGaWxlcyhhKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9b25EcmFnTGVhdmUoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoYSl7YS5wcmV2'@;
put 'ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2QubGVuZ3RoPjAmJnRoaXMuZmlsZURyb3BwZWQuZW1pdChkKX1jb250YWluc0ZpbGVzKGEpe2lmKGEmJmEuZGF0YVRyYW5zZmVyJiZhLmRhdGFUcmFu'@;
put 'c2Zlci50eXBlcylmb3IobGV0IGQ9MDtkPGEuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtkKyspaWYoIkZpbGVzIj09YS5kYXRhVHJhbnNmZXIudHlwZXNbZF0pcmV0dXJuITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1D'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBEcmFnTmRyb3AiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcmFnb3ZlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EcmFnT3ZlcihmKX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKGYpe3Jl'@;
put 'dHVybiBkLm9uRHJhZ0xlYXZlKGYpfSkoImRyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uZHJvcChmKX0pLDImYSYmZHIoImZpbGVvdmVyIixkLmZpbGVPdmVyKX0sb3V0cHV0czp7ZmlsZURyb3BwZWQ6ImZpbGVEcm9wcGVkIixmaWxlRHJhZ2dlZE92ZXI6ImZpbGVEcmFnZ2VkT3ZlciJ9'@;
put 'fSksY30pKCk7ZnVuY3Rpb24gV0NlKGMsbCl7MSZjJiYobWUoMCwicCIsNiksTmUoMSwiTm8gcmVxdWVzdHMgbWFkZSIpLHllKCkpfWZ1bmN0aW9uIEdDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTMpLHllKCkpfWZ1bmN0aW9uICRDZShjLGwpezEmYyYmKG1l'@;
put 'KDAsInNwYW4iKSxxdCgxLCJjbHItaWNvbiIsMTQpLHllKCkpfWZ1bmN0aW9uIHFDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgzKS5pbmRleDtyZXR1'@;
put 'cm4ganQoVmUoMikuZ29Ub0xvZ0xpbmUoZiwicmVxdWVzdF8iK18sImVycm9yIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxwcigiICIsYSwiICIpfX1jb25zdCB1ZWU9ZnVuY3Rpb24oKXtyZXR1cm5bXX07ZnVu'@;
put 'Y3Rpb24gS0NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHF0KDEsImNsci1pY29uIiwxOSksTmUoMiksSmUoMyxxQ2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxwcigiIEVycm9ycyAoIixh'@;
put 'LmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHwkcygyLHVlZSkpfX1mdW5jdGlvbiBYQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQo'@;
put 'YSkuJGltcGxpY2l0LF89VmUoMykuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLmdvVG9Mb2dMaW5lKGYsInJlcXVlc3RfIitfLCJ3YXJuaW5nIikpfSksbWUoMSwiYnV0dG9uIiwyMiksTmUoMikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxwcigiICIsYSwiICIpfX1m'@;
put 'dW5jdGlvbiBKQ2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiwxOCkscXQoMSwiY2xyLWljb24iLDIzKSxOZSgyKSxKZSgzLFhDZSwzLDEsImNsci10cmVlLW5vZGUiLDIwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDIpLHByKCIgV2FybmluZ3Mg'@;
put 'KCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksQ2UoMSksUmUoIm5nRm9yT2YiLGEubG9nV2FybmluZ3N8fCRzKDIsdWVlKSl9fWZ1bmN0aW9uIFFDZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93bmxvYWRMb2coaC5sb2dGaWxlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gZVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiY2xyLXRyZWUiKSxKZSgyLEtDZSw0LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDE1KSxKZSgzLEpDZSw0LDMsImNsci10cmVlLW5vZGUiLDE1KSx5ZSgpLHF0KDQsImRpdiIsMTYpLEplKDUsUUNlLDIsMCwiYnV0dG9uIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ0lmIixhLmxvZ0Vycm9ycyksQ2Uo'@;
put 'MSksUmUoIm5nSWYiLGEubG9nV2FybmluZ3MpLENlKDEpLFJlKCJpbm5lckhUTUwiLGEubG9nRmlsZSxxMiksQ2UoMSksUmUoIm5nSWYiLChudWxsPT1hLmxvZ0ZpbGU/bnVsbDphLmxvZ0ZpbGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gdFNlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiYnV0dG9uIiwyNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5kb3dubG9hZFNvdXJjZUNvZGUoaC5zb3VyY2VDb2RlKSl9KSxOZSgxLCIgRG93bmxvYWQgIikseWUoKX19ZnVuY3Rpb24gblNlKGMsbCl7aWYo'@;
put 'MSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyNSksTmUoMikseWUoKSxKZSgzLHRTZSwyLDAsImJ1dHRvbiIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLnNvdXJjZUNvZGUpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5zb3Vy'@;
put 'Y2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHJTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93'@;
put 'bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIGlTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLE5lKDIpLHllKCksSmUoMyxyU2UsMiwwLCJidXR0b24iLDE3KSx5'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMikscHIoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIG9TZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9Zi5rZXkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZHIo'@;
put 'InNlbGVjdGVkIixWZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxDZSgxKSxwcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gc1NlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSxKZSgxLG9TZSwyLDMsImRpdiIsMzApLGJhKDIsImtleXZhbHVl'@;
put 'IikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsVWwoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBhU2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwzNSkoMSwic3Ryb25nIiksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMykuJGlt'@;
put 'cGxpY2l0O0NlKDIpLHByKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gbFNlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSkscHIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9u'@;
put 'IGNTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKS4kaW1wbGljaXQ7Q2UoMSkscHIoIiAiLGRbYS5rZXldLCIgIil9fWZ1bmN0aW9uIHVTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiksSmUoMSxjU2UsMiwxLCJ0'@;
put 'ZCIsMzcpLGJhKDIsImtleXZhbHVlIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdGb3JPZiIsVWwoMiwxLGEuU0FTV09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIGRTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRh'@;
put 'YmxlIiwzNikoMSwidGhlYWQiKSgyLCJ0ciIpLEplKDMsbFNlLDIsMSwidGgiLDM3KSxiYSg0LCJrZXl2YWx1ZSIpLHllKCkoKSxtZSg1LCJ0Ym9keSIpLEplKDYsdVNlLDMsMywidHIiLDM3KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKS4kaW1wbGljaXQ7Q2UoMyksUmUoIm5nRm9yT2Yi'@;
put 'LFVsKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLENlKDMpLFJlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93cyl9fWZ1bmN0aW9uIGhTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpLEpl'@;
put 'KDEsYVNlLDMsMSwicCIsMzIpLG1lKDIsImRpdiIsMzMpLEplKDMsZFNlLDcsNCwidGFibGUiLDM0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSksQ2UoMiksUmUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1'@;
put 'bmN0aW9uIGZTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI2KSgyLCJidXR0b24iLDI3KSxOZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLHF0KDQsImNsci1pY29uIiwyOCkseWUoKSxKZSg1LHNTZSwzLDMsImNsci1kcm9wZG93'@;
put 'bi1tZW51IiwyOSkseWUoKSxKZSg2LGhTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykudGFibGVzQWN0aXZlPWgpfSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoImNsckNs'@;
put 'b3NlTWVudU9uSXRlbUNsaWNrIiwhMCksQ2UoNSksUmUoImNscklmQWN0aXZlIixhLnRhYmxlc0FjdGl2ZSl9fWZ1bmN0aW9uIHBTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1zdGFjay1ibG9jayIsOCkoMSwiY2xyLXN0YWNrLWxhYmVsIiksTmUoMiksbWUoMywic3Bh'@;
put 'biIsOSksSmUoNCxHQ2UsMiwwLCJzcGFuIiw1KSxKZSg1LCRDZSwyLDAsInNwYW4iLDUpLHllKCkoKSxtZSg2LCJjbHItc3RhY2stY29udGVudCIpLE5lKDcpLHllKCksbWUoOCwiY2xyLXN0YWNrLWJsb2NrIiwxMCkoOSwiY2xyLXN0YWNrLWNvbnRlbnQiKSgxMCwiY2xyLXRhYnMiKSgxMSwi'@;
put 'Y2xyLXRhYiIpKDEyLCJidXR0b24iLDExKSxOZSgxMywiU0FTIExvZyIpLHllKCksSmUoMTQsZVNlLDYsNCwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5zYXNMb2dBY3RpdmU9aCl9KSx5ZSgpLG1lKDE1'@;
put 'LCJjbHItdGFiIikoMTYsImJ1dHRvbiIsMTEpLE5lKDE3LCJTQVMgU291cmNlIENvZGUiKSx5ZSgpLEplKDE4LG5TZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc2FzU291cmNlQ29kZUFjdGl2'@;
put 'ZT1oKX0pLHllKCksbWUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksTmUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLHllKCksSmUoMjIsaVNlLDQsMiwibmctdGVtcGxhdGUiLDEyKSx4dCgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgy'@;
put 'KS5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpfSkseWUoKSxKZSgyMyxmU2UsNywyLCJjbHItdGFiIiw1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKTtSZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSgi'@;
put 'Y2xyU3RhY2tWaWV3U2V0c2l6ZSIsMykoImNsclN0YWNrVmlld1Bvc2luc2V0IiwzKSxDZSgyKSxwcigiICIsYS5zZXJ2aWNlTGluaywiICIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIs'@;
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 'LEplKDcsZ1NlLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLHllKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuZWQpLENlKDQpLHByKCJBcHAgTG9jYXRpb246ICIsZC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLENlKDIpLFJlKCJuZ0lmIiwobnVsbD09ZC5zYXNqc1JlcXVlc3Rz'@;
put 'P251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksQ2UoMSksUmUoIm5nSWYiLGQub3BlbmVkJiYobnVsbD09ZC5zYXNqc1JlcXVlc3RzP251bGw6ZC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHE4LHhRLG1ILE1RLGRkLGcxLERwLGthLG91LHN1'@;
put 'LEU4LGMyLExwLE9wLGRnLFJwLElwLGNnLE5mLGFnLGxnLEs4LGR4XSxzdHlsZXM6WyIucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9ICAucmVxdWVzdHMtbW9kYWwgLm1vZGFsLWNvbnRlbnR7cGFkZGluZzoyMHB4'@;
put 'IDEwcHggNXB4fSAgLndvcmstdGFibGVzLWRyb3Bkb3duIGJ1dHRvbntjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstY29sb3IsICM4YzhjOGMpIWltcG9ydGFudH0gIC5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFz'@;
put 'ay1pbWFnZTpub25lIWltcG9ydGFudH0gIC5jb250ZW50IGNsci1pY29ue21hcmdpbi1ib3R0b206NXB4fSAgLmNvbnRlbnQgcHJle3dvcmQtYnJlYWs6YnJlYWstYWxsO3doaXRlLXNwYWNlOnByZS13cmFwO21heC1oZWlnaHQ6aW5pdGlhbDtvdmVyZmxvdzp2aXNpYmxlO2JvcmRlcjowfSAg'@;
put 'LmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7ZGlzcGxheTpub25lIWltcG9ydGFudH0gIC5lcnItbGlua3MgLmNsci10cmVlbm9kZS1j'@;
put 'aGlsZHJlbnttYXgtaGVpZ2h0OjU1cHg7b3ZlcmZsb3c6YXV0b30uZHJvcGRvd24taXRlbS5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJn'@;
put 'aW4tdG9wOjEwcHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2JhY2tncm91bmQtY29sb3I6I2ZiZmJmYjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5uby1yZXFzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9w'@;
put 'OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKTtwYWRkaW5nLXRvcDo1cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KSxjfSkoKTtjbGFzcyB2U2V7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBkZWV9fWNs'@;
put 'YXNzIGRlZXt9ZnVuY3Rpb24gX1NlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsOCksTmUoMSwiIFNBUyBTZXJ2aWNlOiAiKSxtZSgyLCJzdHJvbmciKSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gYlNlKGMsbCl7'@;
put 'aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksTmUoMywiU1lTV0FSTklOR1RFWFQ6IikseWUoKSxOZSg0KSx5ZSgpLG1lKDUsInAiKSg2LCJzdHJvbmciKSxOZSg3LCJTWVNFUlJPUlRFWFQ6IikseWUoKSxOZSg4KSx5ZSgpLG1lKDksInAiKSgxMCwic3Ryb25nIiks'@;
put 'TmUoMTEsIk1BQzoiKSx5ZSgpLE5lKDEyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLHByKCIgIixhLmRhdGEuZGV0YWlscy5TWVNXQVJOSU5HVEVYVCwiIiksQ2UoNCkscHIoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksQ2UoNCkscHIoIiAiLGEuZGF0YS5k'@;
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 'KSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLm1vZGFsRW5hYmxlZCkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCFkLmZvcmNlUmVsb2FkKSxDZSgyKSxwcigiICIsZC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsZC5kYXRhLnNhc1Nl'@;
put 'cnZpY2UmJmQuZGF0YS5zYXNTZXJ2aWNlLmxlbmd0aD4wKSxDZSgyKSxSZSgiaW5uZXJIVE1MIixkLmRhdGEubWVzc2FnZSxxMiksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1kLmRhdGEuZGV0YWlscyksQ2UoMiksUmUoIm5nSWYiLGQuc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihkLmRhdGEuc2Fz'@;
put 'U2VydmljZSkpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09ZC5kYXRhLmRldGFpbHMpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09ZC5kYXRhLmRldGFpbHM/bnVsbDpkLmRhdGEuZGV0YWlscy5MT0cpJiYobnVsbD09ZC5kYXRhLmRldGFpbHN8fG51bGw9PWQuZGF0YS5kZXRhaWxzLkxPRz9udWxs'@;
put 'OmQuZGF0YS5kZXRhaWxzLkxPRy50cmltKCkubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIsIWQuZm9yY2VSZWxvYWQpLENlKDEpLFJlKCJuZ0lmIixkLmZvcmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbWmksb3Usc3UsWWJdLHN0eWxlczpbIi5jbHItYWJvcnQtbW9kYWxbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgICAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWx7ei1pbmRleDoyMDUwfS5tb2RhbC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnNhc1NlcnZp'@;
put 'Y2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7d29yZC13cmFwOmJyZWFrLXdv'@;
put 'cmR9Il19KSxjfSkoKTtmdW5jdGlvbiBFU2UoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVw'@;
put 'Z3JhZGUgY29udGFjdCAiKSxxdCg3LCJjb250YWN0LWxpbmsiLDI1KSx5ZSgpKCkoKSxtZSg4LCJhIiwyNiksTmUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSxqcigpKX1mdW5jdGlvbiBrU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDIwKSgyLCJk'@;
put 'aXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLHllKCkoKSgpLG1lKDcsImEiLDI3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSksTmUoOCwiTW9yZSBkZXRhaWxzIikseWUoKSxqcigpfX1mdW5jdGlvbiBBU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE5KSxKZSgxLEVTZSwx'@;
put 'MCwwLCJuZy1jb250YWluZXIiLDEpLEplKDIsa1NlLDksMCwibmctY29udGFpbmVyIiwxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0u'@;
put 'dmFsdWUpfX1mdW5jdGlvbiBUU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwyNiksTmUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSl9ZnVuY3Rpb24gRFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xy'@;
put 'LWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYpLHF0KDcsImNvbnRhY3QtbGluayIsMjUpLE5lKDgpLHllKCkoKSgpLEplKDksVFNlLDIsMCwiYSIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg2KSx6YygiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4g'@;
put 'IixhLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLENlKDIpLHByKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lz'@;
put 'c2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIElTZShjLGwpezEmYyYmKG1lKDAsImEiLDI2KSxOZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSx5ZSgpKX1mdW5jdGlvbiBMU2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi'@;
put 'LDI4KSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSxxdCg0LCJjbHItaWNvbiIsMjMpLHllKCksbWUoNSwiZGl2IiwyNCksTmUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4g'@;
put 'UGxlYXNlIGNvbnRhY3QgIikscXQoNywiY29udGFjdC1saW5rIiwyNSksTmUoOCkseWUoKSgpKCksSmUoOSxJU2UsMiwwLCJhIiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLHByKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Ig'@;
put 'c2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIFJTZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsQVNlLDMsMiwiZGl2IiwxNyksSmUoMixEU2UsMTAs'@;
put 'NCwiZGl2IiwxOCksSmUoMyxMU2UsMTAsMiwiZGl2IiwxOCksanIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxhLmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLENlKDEpLFJlKCJuZ0lmIixhLmxp'@;
put 'Y2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxDZSgxKSxSZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiBPU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkudG9nZ2xlU2lkZWJhcigpKX0pLHF0KDEsImNsci1pY29uIiwzMSkseWUoKX19Y29uc3QgUFNlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvIl19O2Z1bmN0aW9uIEZTZShjLGwpezEmYyYmKG1lKDAsImEiLDMyKSxxdCgxLCJpbWciLDMzKSgyLCJpbWciLDM0KSx5ZSgpKSwyJmMmJlJlKCJy'@;
put 'b3V0ZXJMaW5rIiwkcygxLFBTZSkpfWZ1bmN0aW9uIEhTZShjLGwpezEmYyYmKG1lKDAsImEiKSxxdCgxLCJzcGFuIiwzNSkseWUoKSl9Y29uc3QgaGVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldyJdfSxmZWU9ZnVuY3Rpb24oKXtyZXR1cm5bIi9ob21lIl19LElIPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuWyIvcmV2aWV3L3N1Ym1pdHRlZCJdfTtmdW5jdGlvbiBOU2UoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDMpKDEsImEiLDQ0KSxOZSgyLCJWSUVXIikseWUoKSxtZSgzLCJhIiw0NCksTmUoNCwiTE9BRCIpLHllKCksbWUoNSwiYSIsNDQpLE5lKDYsIlJFVklFVyIp'@;
put 'LHllKCkoKSksMiZjJiYoQ2UoMSksUmUoInJvdXRlckxpbmsiLCRzKDMsaGVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDQsZmVlKSksQ2UoMiksUmUoInJvdXRlckxpbmsiLCRzKDUsSUgpKSl9ZnVuY3Rpb24gVlNlKGMsbCl7aWYoMSZjJiYoVnIoMCksbWUoMSwiZGl2IiwzNikoMiwi'@;
put 'Y2xyLWRyb3Bkb3duIikoMywiYnV0dG9uIiwzNyksTmUoNCwiIE1lbnUgIikseWUoKSxKZSg1LE5TZSw3LDYsImNsci1kcm9wZG93bi1tZW51IiwzOCkseWUoKSgpLG1lKDYsImRpdiIsMzkpKDcsImEiLDQwKSxOZSg4LCJWSUVXIikseWUoKSxtZSg5LCJhIiw0MSksTmUoMTAsIkxPQUQiKSx5'@;
put 'ZSgpLG1lKDExLCJhIiw0MiksTmUoMTIsIlJFVklFVyIpLHllKCkoKSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg3KSxSZSgicm91dGVyTGluayIsJHMoNyxoZWUpKSxDZSgyKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXRvciIpfHxhLnJvdXRlci51cmwuaW5j'@;
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 'YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTAuMiIsIkFwcCB2ZXJzaW9uIjoidjYuNi4xIi5yZXBsYWNlKCJ2IiwiIiksIkJ1aWxkIHRpbWVzdGFtcCI6S28ocGFyc2VJbnQo'@;
put 'IjE3MDgzNDk5MTEyNzMiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjYuMSIucmVwbGFjZSgidiIsIiIpKyIuZ2RjM2E2YWUiLGguZXZlbnRzLnN1YnNjcmliZSh3'@;
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 'aWNlbmNpbmdQYWdlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVXgpLHR0KEMwKSx0dChEcyksdHQoV2wpLHR0KEpkKSx0dCh2bCksdHQoZTgpLHR0KFVh'@;
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 'cGVuKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLENlKDIpLHByKCIgTG9ja2VkIEZlYXR1cmUgKCIsZC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksQ2UoNSkscHIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixkLnN5c3NpdGUudmFsdWUsIikg'@;
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/W106WUgobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLF8saXQseXQsdm4saWUsd2UpO2xldCBjcj0wO2lmKE5uLmZvckVhY2goX2k9Pntjcj1NYXRoLm1heChfaS5kdXJhdGlvbitfaS5kZWxheSxjcil9KSx3ZS5sZW5ndGgpcmV0dXJuIEll'@;
put 'ZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxubixpdCx5dCxbXSxbXSxTdCxKdCxjcix3ZSk7Tm4uZm9yRWFjaChfaT0+e2NvbnN0IGxpPV9pLmVsZW1lbnQsbXI9bTEoU3QsbGksbmV3IFNldCk7X2kucHJlU3R5bGVQcm9wcy5mb3JFYWNoKFpyPT5tci5hZGQoWnIpKTtjb25zdCBFaT1tMShK'@;
put 'dCxsaSxuZXcgU2V0KTtfaS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKFpyPT5FaS5hZGQoWnIpKSxsaSE9PWEmJkV0LmFkZChsaSl9KTtjb25zdCBEcj1XRShFdC52YWx1ZXMoKSk7cmV0dXJuIEllZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxubixpdCx5dCxObixEcixTdCxKdCxjcil9fWZ1'@;
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 'KE90KSxPbj1pdC5nZXQoT3QpLEpuPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oX3IsZCxPbixFbixjbik7aWYoSm4uZXJyb3JzJiZKbi5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIE5uLnB1c2goSm4pO2lmKGNuKXJldHVybiB2dC5vblN0YXJ0KCgpPT5mZyhPdCxKbi5mcm9tU3R5bGVzKSks'@;
put 'dnQub25EZXN0cm95KCgpPT5oaChPdCxKbi50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHZ0KTtpZihfci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gdnQub25TdGFydCgoKT0+ZmcoT3QsSm4uZnJvbVN0eWxlcykpLHZ0Lm9uRGVzdHJveSgoKT0+aGgoT3QsSm4udG9TdHlsZXMpKSx2b2lk'@;
put 'IGgucHVzaCh2dCk7Y29uc3QgUHI9W107Sm4udGltZWxpbmVzLmZvckVhY2goJHI9Pnskci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKCRyLmVsZW1lbnQpfHxQci5wdXNoKCRyKX0pLEpuLnRpbWVsaW5lcz1QcixkLmFwcGVuZChPdCxKbi50aW1l'@;
put 'bGluZXMpLF8ucHVzaCh7aW5zdHJ1Y3Rpb246Sm4scGxheWVyOnZ0LGVsZW1lbnQ6T3R9KSxKbi5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaCgkcj0+bTEoVCwkcixbXSkucHVzaCh2dCkpLEpuLnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoJHIsWXIpPT57aWYoJHIuc2l6ZSl7bGV0IE5yPVcuZ2V0'@;
put 'KFlyKTtOcnx8Vy5zZXQoWXIsTnI9bmV3IFNldCksJHIuZm9yRWFjaCgoUmksWG8pPT5Oci5hZGQoWG8pKX19KSxKbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKCgkcixZcik9PntsZXQgTnI9aWUuZ2V0KFlyKTtOcnx8aWUuc2V0KFlyLE5yPW5ldyBTZXQpLCRyLmZvckVhY2goKFJpLFhvKT0+'@;
put 'TnIuYWRkKFhvKSl9KX0pO2lmKE5uLmxlbmd0aCl7Y29uc3QgUW49W107Tm4uZm9yRWFjaChNcj0+e1FuLnB1c2goZnVuY3Rpb24gQU1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNTA1LCExKX0oKSl9KSx2bi5mb3JFYWNoKE1yPT5Nci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoUW4pfWNv'@;
put 'bnN0IGNyPW5ldyBNYXAsRHI9bmV3IE1hcDtfLmZvckVhY2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O2QuaGFzKE1yKSYmKERyLnNldChNcixNciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoUW4ucGxheWVyLm5hbWVzcGFjZUlkLFFuLmluc3RydWN0aW9uLGNyKSl9KSxoLmZvckVh'@;
put 'Y2goUW49Pntjb25zdCBNcj1Rbi5lbGVtZW50O3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhNciwhMSxRbi5uYW1lc3BhY2VJZCxRbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKHZ0PT57bTEoY3IsTXIsW10pLnB1c2godnQpLHZ0LmRlc3Ryb3koKX0pfSk7Y29uc3QgX2k9eXQuZmlsdGVy'@;
put 'KFFuPT5CZWUoUW4sVyxpZSkpLGxpPW5ldyBNYXA7SGVlKGxpLHRoaXMuZHJpdmVyLFN0LGllLEFmKS5mb3JFYWNoKFFuPT57QmVlKFFuLFcsaWUpJiZfaS5wdXNoKFFuKX0pO2NvbnN0IEVpPW5ldyBNYXA7WmUuZm9yRWFjaCgoUW4sTXIpPT57SGVlKEVpLHRoaXMuZHJpdmVyLG5ldyBTZXQo'@;
put 'UW4pLFcsIiEiKX0pLF9pLmZvckVhY2goUW49Pntjb25zdCBNcj1saS5nZXQoUW4pLF9yPUVpLmdldChRbik7bGkuc2V0KFFuLG5ldyBNYXAoWy4uLk1yPy5lbnRyaWVzKCk/P1tdLC4uLl9yPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QgWnI9W10sRm49W10sRnI9e307Xy5mb3JFYWNoKFFu'@;
put 'PT57Y29uc3R7ZWxlbWVudDpNcixwbGF5ZXI6X3IsaW5zdHJ1Y3Rpb246dnR9PVFuO2lmKGQuaGFzKE1yKSl7aWYocGUuaGFzKE1yKSlyZXR1cm4gX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLF9yLmRpc2FibGVkPSEwLF9yLm92ZXJyaWRlVG90YWxUaW1lKHZ0LnRvdGFs'@;
put 'VGltZSksdm9pZCBoLnB1c2goX3IpO2xldCBPdD1GcjtpZihEci5zaXplPjEpe2xldCBFbj1Ncjtjb25zdCBPbj1bXTtmb3IoO0VuPUVuLnBhcmVudE5vZGU7KXtjb25zdCBKbj1Eci5nZXQoRW4pO2lmKEpuKXtPdD1KbjticmVha31Pbi5wdXNoKEVuKX1Pbi5mb3JFYWNoKEpuPT5Eci5zZXQo'@;
put 'Sm4sT3QpKX1jb25zdCBjbj10aGlzLl9idWlsZEFuaW1hdGlvbihfci5uYW1lc3BhY2VJZCx2dCxjcixmLEVpLGxpKTtpZihfci5zZXRSZWFsUGxheWVyKGNuKSxPdD09PUZyKVpyLnB1c2goX3IpO2Vsc2V7Y29uc3QgRW49dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChPdCk7RW4mJkVuLmxl'@;
put 'bmd0aCYmKF9yLnBhcmVudFBsYXllcj1GcChFbikpLGgucHVzaChfcil9fWVsc2UgZmcoTXIsdnQuZnJvbVN0eWxlcyksX3Iub25EZXN0cm95KCgpPT5oaChNcix2dC50b1N0eWxlcykpLEZuLnB1c2goX3IpLHBlLmhhcyhNcikmJmgucHVzaChfcil9KSxGbi5mb3JFYWNoKFFuPT57Y29uc3Qg'@;
put 'TXI9Zi5nZXQoUW4uZWxlbWVudCk7aWYoTXImJk1yLmxlbmd0aCl7Y29uc3QgX3I9RnAoTXIpO1FuLnNldFJlYWxQbGF5ZXIoX3IpfX0pLGguZm9yRWFjaChRbj0+e1FuLnBhcmVudFBsYXllcj9Rbi5zeW5jUGxheWVyRXZlbnRzKFFuLnBhcmVudFBsYXllcik6UW4uZGVzdHJveSgpfSk7Zm9y'@;
put 'KGxldCBRbj0wO1FuPHl0Lmxlbmd0aDtRbisrKXtjb25zdCBNcj15dFtRbl0sX3I9TXJbcDJdO2lmKFE4KE1yLHpFKSxfciYmX3IuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCB2dD1bXTtpZihULnNpemUpe2xldCBjbj1ULmdldChNcik7Y24mJmNuLmxlbmd0aCYmdnQucHVzaCguLi5jbik7'@;
put 'bGV0IEVuPXRoaXMuZHJpdmVyLnF1ZXJ5KE1yLE5ILCEwKTtmb3IobGV0IE9uPTA7T248RW4ubGVuZ3RoO09uKyspe2xldCBKbj1ULmdldChFbltPbl0pO0puJiZKbi5sZW5ndGgmJnZ0LnB1c2goLi4uSm4pfX1jb25zdCBPdD12dC5maWx0ZXIoY249PiFjbi5kZXN0cm95ZWQpO090Lmxlbmd0'@;
put 'aD9reGUodGhpcyxNcixPdCk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKE1yKX1yZXR1cm4geXQubGVuZ3RoPTAsWnIuZm9yRWFjaChRbj0+e3RoaXMucGxheWVycy5wdXNoKFFuKSxRbi5vbkRvbmUoKCk9PntRbi5kZXN0cm95KCk7Y29uc3QgTXI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoUW4pO3Ro'@;
put 'aXMucGxheWVycy5zcGxpY2UoTXIsMSl9KSxRbi5wbGF5KCl9KSxacn1hZnRlckZsdXNoKGwpe3RoaXMuX2ZsdXNoRm5zLnB1c2gobCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGwpfV9nZXRQcmV2aW91c1BsYXllcnMobCxhLGQsaCxmKXts'@;
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 'bWUoMywicCIpLE5lKDQsIkRlcGxveWluZy4uLiIpLHllKCksanIoKSl9ZnVuY3Rpb24gR3hlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uICR4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBxeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29u'@;
put 'IiwzMCl9ZnVuY3Rpb24gS3hlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIFh4ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjIpLEplKDEscXhlLDEsMCwiY2xyLWljb24iLDIzKSxKZSgyLEt4ZSwxLDAsImNsci1pY29uIiwyNCksbWUoMywicCIpLE5lKDQsIkNy'@;
put 'ZWF0ZSBkYXRhYmFzZSIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLENlKDEpLFJlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIEp4ZShjLGwpezEm'@;
put 'YyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBReGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiwyMCksTmUoMiwiRG9uZSIpLHllKCkscXQoMywiaHIiLDIxKSxtZSg0LCJkaXYiLDIyKSxKZSg1LEd4ZSwxLDAsImNsci1pY29uIiwyMyksSmUoNiwkeGUs'@;
put 'MSwwLCJjbHItaWNvbiIsMjQpLG1lKDcsInAiKSxOZSg4LCJEZXBsb3kgU0FTIEpvYnMiKSx5ZSgpKCksSmUoOSxYeGUsNSwyLCJkaXYiLDI1KSxxdCgxMCwiaHIiLDIxKSxtZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsMjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxKZSgxMyxKeGUsMSwwLCJjbHItaWNvbiIsMjQpLE5lKDE0LCIgTEFVTkNIIC8gQ09ORklHVVJFICIpLHllKCksbWUoMTUsImJ1dHRvbiIsMjgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdCho'@;
put 'LmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxOZSgxNiwiIERvd25sb2FkIGxvZyAiKSx5ZSgpKCkscXQoMTcsImhyIiwyMSksbWUoMTgsImRpdiIsMjYpKDE5LCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLGp0KGguYXV0b2RlcGxveURvbmU9ITEpfSksTmUoMjAsIiBDbG9zZSAiKSx5ZSgpLG1lKDIxLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9wZW5TYXNS'@;
put 'ZXF1ZXN0c01vZGFsKCkpfSksTmUoMjIsIiBTQVMgUmVxdWVzdHMgIikseWUoKSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDUpLFJlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLENlKDEpLFJlKCJuZ0lmIiwhYS5hdXRvRGVwbG95U3RhdHVz'@;
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 'UGF0aCksQ2UoNiksb3IoZC5zZWxlY3RlZEFkbWluR3JvdXApLENlKDIpLFJlKCJuZ01vZGVsIixkLnJlY3JlYXRlRGF0YWJhc2UpLENlKDQpLFJlKCJkaXNhYmxlZCIsIWQuanNvbkZpbGUpLENlKDEpLHByKCIgRGVwbG95ICIsZC5qc29uRmlsZT8iIjoiKGpzb24gZmlsZSBpcyBub3QgYXZh'@;
put 'aWxhYmxlKSIsIlxuIiksQ2UoNSksUmUoImNsck1vZGFsT3BlbiIsZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOltaaSxTMCxCcyxPcyxrYSxvdSxzdSxVcyxEMCxUMF0sc3R5bGVzOlsiLmF1'@;
put 'dG8tZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjQpO3otaW5kZXg6MTAwfS5zcGlubmVyLWJveFtfbmdjb250'@;
put 'ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFw'@;
put 'eCA4cHggIzAwMDAwMDgyfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3dpZHRoOjEwMCV9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LmRlcGxveS1zdWNjZXNzW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjojNmVjZjQ0fS5kZXBsb3ktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmRlcGxveS11bmRldGVybWluYXRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2NhY2FjYX1ocltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLWJv'@;
put 'dHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMjcwNTg4MjM1Myl9Il19KSxjfSkoKTtmdW5jdGlvbiBuRWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDYpKDEsInAiLDcpLE5lKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSx5ZSgpLG1lKDMsImxhYmVsIiw4KSxOZSg0LCJVc2VybmFtZSIpLHll'@;
put 'KCksbWUoNSwiZGl2Iiw5KSg2LCJkaXYiLDEwKSxxdCg3LCJpbnB1dCIsMTEpLHllKCkoKSxtZSg4LCJsYWJlbCIsMTIpLE5lKDksIlBhc3N3b3JkIikseWUoKSxtZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCkscXQoMTIsImlucHV0IiwxMykseWUoKSgpLG1lKDEzLCJidXR0b24iLDE0KSxO'@;
put 'ZSgxNCwiTG9nIGluIikseWUoKSgpKX1mdW5jdGlvbiByRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLmlkKSxDZSgxKSxwcigiICIsYS5uYW1lLCIgIil9fWZ1bmN0aW9uIGlFZShjLGwp'@;
put 'e2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSkscHIoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBvRWUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDM2KSxOZSgxKSxKZSgyLGlF'@;
put 'ZSwyLDEsInNwYW4iLDUpLGJhKDMsImpzb24iKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLm5hbWUpLENlKDEpLHByKCIgIixhLm5hbWUsIiAiKSxDZSgxKSxSZSgibmdJZiIsInt9IiE9VWwoMywzLGEuYXR0cmlidXRlcykpfX1mdW5jdGlvbiBzRWUoYyxs'@;
put 'KXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiSlNPTiBTdWJtaXR0ZWQgU3VjY2Vzc2Z1bGx5IikseWUoKSl9ZnVuY3Rpb24gYUVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5k'@;
put 'b3dubG9hZFNhc1ByZWNvZGVGaWxlKCkpfSkscXQoMSwiY2xyLWljb24iLDM4KSx5ZSgpfX1mdW5jdGlvbiBsRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJwIiwzOSksTmUoMiwiRmlsZSBleGVjdXRlIGNvbXBsZXRlZCIpLHllKCkscXQoMywiaHIiKSxtZSg0LCJk'@;
put 'aXYiKSg1LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5qb2JMb2csImV4ZWN1dGUtc2NyaXB0LWxvZyIsInR4dCIpKX0pLE5lKDYsIiBEb3dubG9hZCBsb2cgIikseWUoKSgpLGpyKCl9fWZ1'@;
put 'bmN0aW9uIGNFZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxwcigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIHVFZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInNwYW4iLDI1KSxOZSgyLCIgVmFs'@;
put 'aWRhdGluZyBkZXBsb3kuLi4gIikseWUoKSxtZSgzLCJzcGFuIiksTmUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHllKCksanIoKSl9ZnVuY3Rpb24gZEVlKGMsbCl7MSZjJiYoVnIoMCkscXQoMSwiY2xyLWljb24iLDQ2KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gZmFp'@;
put 'bGVkICIpLHllKCksanIoKSl9ZnVuY3Rpb24gaEVlKGMsbCl7MSZjJiYoVnIoMCkscXQoMSwiY2xyLWljb24iLDQ3KSxtZSgyLCJzcGFuIiksTmUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLHllKCksanIoKSl9ZnVuY3Rpb24gZkVlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NSks'@;
put 'SmUoMSx1RWUsNSwwLCJuZy1jb250YWluZXIiLDUpLEplKDIsZEVlLDQsMCwibmctY29udGFpbmVyIiw1KSxKZSgzLGhFZSw0LDAsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksQ2UoMSksUmUoIm5nSWYi'@;
put 'LCFhLmlzVmFsaWRhdGluZyYmImVycm9yIj09PWEudmFsaWRhdGlvblN0YXRlKSxDZSgxKSxSZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIHBFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsInAi'@;
put 'LDM5KSxOZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIikseWUoKSxxdCgzLCJociIpLEplKDQsY0VlLDIsMSwiZGl2Iiw0MSksbWUoNSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLE5lKDYs'@;
put 'IiBMZXQncyBnZXQgc3RhcnRlZCAiKSx5ZSgpLG1lKDcsImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxO'@;
put 'ZSg4LCIgRG93bmxvYWQgbG9nICIpLHllKCksbWUoOSwiYnV0dG9uIiw0MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLE5lKDEwLCIgVmFsaWRhdGUgIikseWUoKSxKZSgxMSxmRWUsNCwzLCJkaXYiLDQzKSxqcigpfWlm'@;
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 'biBCdChhKSxqdChWZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksTmUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIikseWUoKSxKZSg0OCxwRWUsMTIsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksUmUoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1p'@;
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 'SmUoNyxuRWUsMTUsMCwiZGl2Iiw0KSxKZSg4LGdFZSw0OSwyMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKSwyJmEmJihDZSgzKSxwcigiQXBwIExvY2F0aW9uOiAiLGQuYXBwTG9jLCIiKSxDZSg0KSxSZSgibmdJZiIsZC5uZWVkc0xvZ2luKSxDZSgxKSxSZSgibmdJZiIsIWQubmVlZHNMb2dp'@;
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 'LENlKDYpLFJlKCJuZ01vZGVsIixkLmRjQWRtaW5Hcm91cCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZGNBZG1pbkdyb3VwTGlzdCksQ2UoMTIpLHByKCJNRVRBUEVSU09OOiAiLGQuTUVUQVBFUlNPTiwiIiksQ2UoMikscHIoIlNZU1VTRVJJRDogIixkLlNZU1VTRVJJRCwiIiksQ2UoMikscHIo'@;
put 'IlNZU0hPU1ROQU1FOiAiLGQuU1lTSE9TVE5BTUUsIiIpLENlKDIpLHByKCJTWVNWTE9ORzogIixkLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsTTAsQnMsT3MsVXMsTjgsSDhdLHN0eWxlczpbIi5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVde3dpZHRoOjUwdnd9LmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50aGluUHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH0udGhpblByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0b3A6MH0iXX0pLGN9KSgpO2Z1bmN0aW9uIHlFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRp'@;
put 'diIsNCkoMSwiZGl2Iiw1KSxOZSgyLCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLHllKCksbWUoMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsInAiKSxOZSg2LCIgVGhlIERlbW8gdmVyc2lvbiBvZiBEYXRhIENvbnRyb2xsZXIgaXMgZnJlZSBmb3IgRVZBTFVBVElPTiBwdXJwb3NlcyBvbmx5LiBC'@;
put 'ZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24sIHBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byB0aGUgIiksbWUoNywiYSIsOCksTmUoOCwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdy'@;
put 'ZWVtZW50IikseWUoKSxOZSg5LCIuICIpLHllKCkoKSxxdCgxMCwiaHIiLDkpLG1lKDExLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEyLCJpbnB1dCIsMTApLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudGVybXNBZ3JlZUNoYW5nZSgpKX0pLHllKCksbWUo'@;
put 'MTMsImxhYmVsIiksTmUoMTQsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLG1lKDE1LCJhIiw4KSxOZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiB3RWUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE1KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTYpLHh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1WZSgzKTtDZSgxKSxSZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEu'@;
put 'c2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gQ0VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNykoMSwiYXBwLW1hbnVhbC1kZXBsb3kiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykub25OYXZpZ2F0'@;
put 'ZVRvSG9tZSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIFNFZShjLGwpe2lmKDEmYyYm'@;
put 'KFZyKDApLEplKDEsd0VlLDIsNiwiZGl2IiwxMyksSmUoMixDRWUsMiwzLCJkaXYiLDE0KSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEuYXV0b2RlcGxveSksQ2UoMSksUmUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBNRWUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCksanIoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoMik7Q2UoMiksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIHhFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIs'@;
put 'MTUpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE4KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLHllKCkoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgic2FzSnMiLGEu'@;
put 'c2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gRUVlKGMsbCl7aWYoMSZjJiYoVnIoMCwxMSksSmUoMSxTRWUsMywyLCJuZy1jb250YWluZXIiLDEyKSxKZSgyLE1FZSwzLDMsIm5nLWNv'@;
put 'bnRhaW5lciIsMTIpLEplKDMseEVlLDMsMywibmctY29udGFpbmVyIiwxMiksanIoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoIm5nU3dpdGNoIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEp'@;
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 'dCBBRWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQoa0VlKSxkY119KSxjfSkoKSxURWU9KCgpPT57Y2xhc3Mg'@;
put 'Y3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsX3UsQUVlXX0pLGN9KSgpO0YoODcxMyksRig1NjU4KSxGKDkxOTQ1KTt2YXIgREVlPUYoNzA4OTYp'@;
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+InUifWZ1bmN0aW9uIHBjKGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHxMYShjKX1mdW5jdGlvbiBKZWUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9Y29uc3QgWGI9Imxlbmd0aCIsSmI9Yz0+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+IiJ9O2Z1bmN0aW9uIHJ0ZShjLGwpe2NvbnN0IGE9IXBjKGMpLGQ9InN0cmluZyI9PXR5cGVv'@;
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 'ZnVuY3Rpb24gcWwoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsXyxULGg9Yztmb3IoZj1oLm9mZnNldExlZnQsXz1oLm9mZnNldFRvcCxUPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5OylmKz1oLm9m'@;
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 'XSldOltdOm51bGwpfSkpLGx9ZnVuY3Rpb24gemYoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gS2woYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4g'@;
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 'bm4pe2NvbnN0IGNyPVtdO2lmKHZuJiZjci5wdXNoKGByb3dzcGFuPSIke3ZufSJgKSxObiYmY3IucHVzaChgY29sc3Bhbj0iJHtObn0iYCkscGMoSnQpKVN0PWA8dGQgJHtjci5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IERyPUp0LnRvU3RyaW5nKCkucmVwbGFjZSgiPCIsIiZsdDsi'@;
put 'KS5yZXBsYWNlKCI+IiwiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMC9naSwiJm5ic3A7IikucmVwbGFjZSgvXHQvZ2ksIiYjOTsiKTtTdD1gPHRkICR7Y3Iuam9pbigiICIpfT4ke0RyfTwvdGQ+YH19'@;
put 'fWl0LnB1c2goU3QpfWNvbnN0IGV0PVsiPHRyPiIsLi4uaXQsIjwvdHI+Il0uam9pbigiIik7WmU/Vy5zcGxpY2UoMSwwLGV0KTppZS5zcGxpY2UoLTEsMCxldCl9cmV0dXJuIFQuc3BsaWNlKDEsMCxXLmpvaW4oIiIpLGllLmpvaW4oIiIpKSxULmpvaW4oIiIpfWZ1bmN0aW9uIEROKGMpe2Nv'@;
put 'bnN0IGw9Yy5sZW5ndGgsYT1bIjx0YWJsZT4iXTtmb3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3QgaD1jW2RdLGY9aC5sZW5ndGgsXz1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBUPTA7VDxmO1QrPTEpe2NvbnN0IFc9aFtUXSxpZT1wYyhXKT8iIjpXLnRvU3RyaW5nKCku'@;
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 'PT57Y29uc3QgTm49QXJyYXkuZnJvbSh2bi5jZWxscykucmVkdWNlKChjcixEcixfaSk9PntpZihUJiYwPT09X2kpcmV0dXJuIGNyO2NvbnN0e2NvbFNwYW46bGksaW5uZXJIVE1MOm1yfT1EcjtyZXR1cm4gY3IucHVzaChsaT4xP3tsYWJlbDptcixjb2xzcGFuOmxpfTptciksY3J9LFtdKTty'@;
put 'ZXR1cm4gbm4ucHVzaChObiksbm59LFtdKTpFZSYmKGEuY29sSGVhZGVycz1BcnJheS5mcm9tKEp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKG5uLHZuLE5uKT0+KFQmJjA9PT1Obnx8bm4ucHVzaCh2bi5pbm5lckhUTUwpLG5uKSxbXSkpfXdlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPXdlLmxl'@;
put 'bmd0aCkscGUubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209cGUubGVuZ3RoKTtjb25zdCBldD1bLi4ud2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoSnQsbm4pPT4oSnQucHVzaCguLi5BcnJheS5mcm9tKG5uLnJvd3MpKSxKdCksW10pLC4uLnBlXTtpdD1ldC5sZW5ndGg7'@;
put 'Y29uc3QgeXQ9bmV3IEFycmF5KGl0KTtmb3IobGV0IEp0PTA7SnQ8aXQ7SnQrKyl5dFtKdF09bmV3IEFycmF5KGllKTtjb25zdCBFdD1bXSxTdD1bXTtmb3IobGV0IEp0PTA7SnQ8aXQ7SnQrKyl7Y29uc3Qgdm49QXJyYXkuZnJvbShldFtKdF0uY2VsbHMpLE5uPXZuLmxlbmd0aDtmb3IobGV0'@;
put 'IGNyPTA7Y3I8Tm47Y3IrKyl7Y29uc3QgRHI9dm5bY3JdLHtub2RlTmFtZTpfaSxpbm5lckhUTUw6bGkscm93U3Bhbjptcixjb2xTcGFuOkVpfT1Ecixacj15dFtKdF0uZmluZEluZGV4KEZuPT52b2lkIDA9PT1Gbik7aWYoIlREIj09PV9pKXtpZihtcj4xfHxFaT4xKXtmb3IobGV0IE1yPUp0'@;
put 'O01yPEp0K21yO01yKyspaWYoTXI8aXQpZm9yKGxldCBfcj1acjtfcjxacitFaTtfcisrKXl0W01yXVtfcl09bnVsbDtjb25zdCBGcj1Eci5nZXRBdHRyaWJ1dGUoInN0eWxlIik7RnImJkZyLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8RXQucHVzaCh7Y29sOlpyLHJvdzpKdCxy'@;
put 'b3dzcGFuOm1yLGNvbHNwYW46RWl9KX1sZXQgRm49IiI7Rm49XyYmL2V4Y2VsL2dpLnRlc3QoXy5jb250ZW50KT9saS5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwyfS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOmxpLnJlcGxhY2Uo'@;
put 'Lzxicihccyp8XC8pPltcclxuXT8vZ2ltLCJcclxuIikseXRbSnRdW1pyXT1Gbi5yZXBsYWNlKHVrZSxGcj0+RHRlW0ZyXSl9ZWxzZSBTdC5wdXNoKGxpKX19cmV0dXJuIEV0Lmxlbmd0aCYmKGEubWVyZ2VDZWxscz1FdCksU3QubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPVN0KSx5dC5sZW5ndGgm'@;
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 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKSxwZT1pZS5sZW5ndGg7bGV0IHdlPSExLEVlPWw7aWYodGhpcy5pc01hc3RlciYmKHRoaXMuaG9sZGVyT2Zmc2V0PXFsKHRoaXMuaG9sZGVyKSxFZT1oLmNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKEVlKSxXJiYhYS5nZXRTZXR0aW5nKCJmaXhl'@;
put 'ZENvbHVtbnNTdGFydCIpKSl7Y29uc3QgaXQ9ZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxldD10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09aXQsZXQhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKEVlPSExKX1p'@;
put 'Zih0aGlzLmlzTWFzdGVyJiYod2U9ZC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCkpLEVlKXRoaXMuaXNNYXN0ZXImJmguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZCYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9xbCh0aGlzLlRBQkxFKTp0'@;
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 'dFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9YS5nZXRGaXJzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Xyl7Y29uc3QgVz1xbChhLnd0Um9vdEVsZW1lbnQpLGllPWpmKGEuaGlkZXIpLHBlPWpmKF8pLHdlPW55KF8sXyk7aWYo'@;
put 'Vy50b3AraWUtcGU8PXdlKXtsZXQgRWU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtFZSs9bC5zdW1DZWxsU2l6ZXMoMCxmKTtmb3IobGV0IFplPWg7WmU+MDtaZS0tKWlmKEVlKz1sLnN1bUNlbGxTaXplcyhaZS0xLFplKSxXLnRvcCtpZS1FZTw9d2Upe1Q9WmU7YnJlYWt9fX1yZXR1cm4g'@;
put 'VH1nZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBfPWEuZ2V0TGFzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVF'@;
put 'bGVtZW50PT09Zil7Y29uc3QgVD1xbChhLnd0Um9vdEVsZW1lbnQpLFc9bnkoZixmKTtpZihULnRvcD5XKXtjb25zdCBpZT1qZihmKTtsZXQgcGU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IHdlPTE7d2U8PWg7d2UrKylpZihwZSs9bC5zdW1DZWxsU2l6ZXMod2UtMSx3ZSks'@;
put 'VC50b3ArcGUtVz49aWUpe189d2UtMjticmVha319fXJldHVybiBffWdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0e2lubGluZVN0YXJ0T3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxDb2x1bW5zOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7'@;
put 'bGV0IF89YS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3QgVD1xbChhLnd0Um9vdEVsZW1lbnQpLFc9aXkoYS5oaWRlciksaWU9aXkoZikscGU9TWF0aC5hYnMoaWsoZixmKSk7aWYoVC5sZWZ0K1ctaWU8PXBlKXtsZXQg'@;
put 'd2U9ZC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgRWU9aDtFZT4wO0VlLS0paWYod2UrPWwuc3VtQ2VsbFNpemVzKEVlLTEsRWUpLFQubGVmdCtXLXdlPD1wZSl7Xz1FZTticmVha319fXJldHVybiBffWdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdpbmRvdzpffT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9ZC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1fKXtsZXQgaWU9'@;
put 'bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3Qgd2U9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZT1NYXRoLmFicyh3ZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgp'@;
put 'fWVsc2UgaWU9cWwoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IHBlPU1hdGguYWJzKGlrKF8sXykpO2lmKGllPnBlKXtjb25zdCB3ZT1peShfKTtsZXQgRWU9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgWmU9MTtaZTw9ZjtaZSsrKWlmKEVlKz1hLnN1bUNlbGxTaXplcyhaZS0x'@;
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 'YS5zdHlsZS5oZWlnaHQ9IjFweCIsbC5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWEub2Zmc2V0V2lkdGg7cmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg9ZCxsLnJlbW92ZUNoaWxkKGEpLGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIHFsKHRoaXMud3RUYWJsZS5UQUJMRSl9Z2V0Q29s'@;
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 'b2lkIHRoaXMuZGlzYXBwZWFyKCk7bGV0IFplPWEuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYsVCkpO2NvbnN0IGl0PWYhPT1ffHxUIT09VyxldD1pdD9hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhfLFcpKTpaZSx5dD1xbChaZSksRXQ9aXQ/cWwoZXQp'@;
put 'Onl0LFN0PXFsKGEuVEFCTEUpLEp0PXdhKGEuVEFCTEUpLG5uPXl0LnRvcCx2bj15dC5sZWZ0LE5uPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpO2xldCBjcj0wLERyPTA7aWYoTm4pe2NvbnN0IF9yPXdhKFplKTtEcj12bitfci1FdC5sZWZ0LGNyPWguaW5uZXJX'@;
put 'aWR0aC12bi1fci0oaC5pbm5lcldpZHRoLVN0LmxlZnQtSnQpLTF9ZWxzZSBEcj1FdC5sZWZ0K3dhKGV0KS12bixjcj12bi1TdC5sZWZ0LTE7aWYodGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGYsXykpe2NvbnN0IF9yPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoImNvbHVtbnMi'@;
put 'LFQsVyxpZSxTdCk7bGV0IHZ0PW51bGw7X3ImJihbdnQsY3IsRHJdPV9yKSx2dCYmKFplPXZ0KX1sZXQgX2k9bm4tU3QudG9wLTEsbGk9RXQudG9wK2FsKGV0KS1ubjtpZih0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoVCxXKSl7Y29uc3QgX3I9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRl'@;
put 'cigicm93cyIsZixfLHBlLFN0KTtsZXQgdnQ9bnVsbDtfciYmKFt2dCxfaSxsaV09X3IpLHZ0JiYoWmU9dnQpfWNvbnN0IG1yPXpwKFplLGgpO3BhcnNlSW50KG1yLmJvcmRlclRvcFdpZHRoLDEwKT4wJiYoX2krPTEsbGk9bGk+MD9saS0xOjApLHBhcnNlSW50KG1yW05uPyJib3JkZXJSaWdo'@;
put 'dFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIl0sMTApPjAmJihjcis9MSxEcj1Ecj4wP0RyLTE6MCk7Y29uc3QgRWk9Tm4/InJpZ2h0IjoibGVmdCI7dGhpcy50b3BTdHlsZS50b3A9YCR7X2l9cHhgLHRoaXMudG9wU3R5bGVbRWldPWAke2NyfXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke0Ry'@;
put 'fXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke19pfXB4YCx0aGlzLnN0YXJ0U3R5bGVbRWldPWAke2NyfXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke2xpfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0'@;
put 'IFpyPU1hdGguZmxvb3IodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7dGhpcy5ib3R0b21TdHlsZS50b3A9X2krbGktWnIrInB4Iix0aGlzLmJvdHRvbVN0eWxlW0VpXT1gJHtjcn1weGAsdGhpcy5ib3R0b21TdHlsZS53aWR0aD1gJHtEcn1weGAsdGhpcy5ib3R0b21TdHlsZS5kaXNw'@;
put 'bGF5PSJibG9jayIsdGhpcy5lbmRTdHlsZS50b3A9YCR7X2l9cHhgLHRoaXMuZW5kU3R5bGVbRWldPWNyK0RyLVpyKyJweCIsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7bGkrMX1weGAsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJibG9jayI7bGV0IEZuPXRoaXMuc2V0dGluZ3MuYm9yZGVyLmNv'@;
put 'cm5lclZpc2libGU7Rm49ImZ1bmN0aW9uIj09dHlwZW9mIEZuP0ZuKHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZlbCk6Rm47Y29uc3QgRnI9dGhpcy53b3QuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixfLFcpO2xldFtRbixNcl09W18sV107aWYoRnImJkFycmF5LmlzQXJyYXko'@;
put 'RnIpJiYoWywsUW4sTXJdPUZyKSxtMigpfHwhRm58fHRoaXMuaXNQYXJ0UmFuZ2UoUW4sTXIpKXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7ZWxzZXt0aGlzLmNvcm5lclN0eWxlLnRvcD1faStsaSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5l'@;
put 'clN0eWxlW0VpXT1jcitEcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LTErInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRT'@;
put 'dHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBfcj12ZyhhLlRBQkxFKTtjb25zdCB2dD1fcj09PWg7dnQmJihfcj1kLmRvY3VtZW50RWxlbWVudCk7Y29uc3QgT3Q9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsY249cGFy'@;
put 'c2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yO2lmKFc9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCBFbj12dD9ldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0OmV0Lm9mZnNldExlZnQ7bGV0IE9uPSExLEpuPTA7Tm4/'@;
put 'KEpuPUVuLXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLE9uPUpuPDApOihKbj1Fbit3YShldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsT249Sm4+PWl5KF9yKSksT24mJih0aGlzLmNvcm5lclN0eWxlW0VpXT1gJHtN'@;
put 'YXRoLmZsb29yKGNyK0RyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtT3QpfXB4YCx0aGlzLmNvcm5lclN0eWxlW05uPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCl9Xz09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEmJih2dD9ldC5nZXRC'@;
put 'b3VuZGluZ0NsaWVudFJlY3QoKS50b3A6ZXQub2Zmc2V0VG9wKSthbChldCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yPj1qZihfcikmJih0aGlzLmNvcm5lclN0eWxlLnRvcD1gJHtNYXRoLmZsb29yKF9pK2xpK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRP'@;
put 'ZmZzZXQtY24pfXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPTApLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifW0yKCkmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oXyxXLF9pLGNyLERyLGxpKX1pc0VudGlyZUNvbHVt'@;
put 'blNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRG'@;
put 'aXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdldERpbWVuc2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTpffT10aGlzLndvdCxUPV8ud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xldCBXPW51'@;
put 'bGwsaWU9bnVsbCxwZT1udWxsLHdlPW51bGwsRWU9bnVsbCxaZT1udWxsLGl0PW51bGwsZXQ9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpXPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LGllPWZ1bmN0aW9uKCl7cmV0dXJuIGFsKC4uLmFyZ3VtZW50'@;
put 'cyl9LHBlPSJodF9fc2VsZWN0aW9uLS1yb3dzIixaZT0idG9wIjticmVhaztjYXNlImNvbHVtbnMiOlc9ZnVuY3Rpb24oKXtyZXR1cm4gXy5nZXRDb2x1bW5IZWFkZXIoLi4uYXJndW1lbnRzKX0saWU9ZnVuY3Rpb24oKXtyZXR1cm4gd2EoLi4uYXJndW1lbnRzKX0scGU9Imh0X19zZWxlY3Rp'@;
put 'b24tLWNvbHVtbnMiLFplPSJsZWZ0In1pZihULmNsYXNzTGlzdC5jb250YWlucyhwZSkpe2NvbnN0IHl0PXRoaXMud290LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoaXQ9VyhhLHl0LWgpLGV0PVcoZCx5dC1oKSwhaXR8fCFldClyZXR1cm4hMTtjb25zdCBFdD1xbChp'@;
put 'dCksU3Q9cWwoZXQpO3JldHVybiBpdCYmZXQmJih3ZT1FdFtaZV0tZltaZV0tMSxFZT1TdFtaZV0raWUoZXQpLUV0W1plXSksW2l0LHdlLEVlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9waSh0aGlzW2xd'@;
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 'YS5oYXMoYykpfHwhYmwobCxjKSl9KShfLGEpJiYoaFtfXT1mLG51bGw9PT0oVD1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1UfHxULmFkZChfKSl9KSxLbChjLGgpfWZ1bmN0aW9uIEJrKGMpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1'@;
put 'bmN0aW9uIGprKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiB6ayhjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBIbmU9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xh'@;
put 'c3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGF1dG9Db2x1bW5TaXpl'@;
put 'OnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xs'@;
put 'YXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21t'@;
put 'ZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3Vz'@;
put 'dG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51'@;
put 'OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVm'@;
put 'dDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05h'@;
put 'bWU6Imh0SW52YWxpZCIsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09cGMoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9'@;
put 'MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09cGMoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksbGsodGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFi'@;
put 'ZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFu'@;
put 'dWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuZXN0ZWRIZWFk'@;
put 'ZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEwLHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6'@;
put 'dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixyZW5kZXJBbGxSb3dzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAs'@;
put 'cm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZh'@;
put 'bmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAs'@;
put 'dHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86dm9pZCAwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aXNpYmxlUm93'@;
put 'czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtjbGFzcyBSRGV7Y29uc3RydWN0b3IobCl7dGhpcy5tZXRhQ3Rvcj1jbGFzc3t9LHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSxLbCh0aGlzLm1ldGEsSG5lKCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25z'@;
put 'dHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7S2wodGhpcy5tZXRhLGwpLFZrKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1sLnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9'@;
put 'LGwpfX1jbGFzcyBPRGV7Y29uc3RydWN0b3IobCl7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe0tsKHRoaXMubWV0YSxsKSxWayh0aGlzLm1ldGEsbCxsKX19Y2xhc3MgWkJ7Y29u'@;
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+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7S2wo'@;
put 'ZCxhKSxWayhkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRo'@;
put 'aXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gSURlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtm'@;
put 'dW5jdGlvbiBhKCl7fXpmKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksUERlKS5wcm90b3R5cGV9fWNsYXNzIEhEZXtjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'LmNvbHVtbk1ldGE9bCx0aGlzLm1ldGFzPW5ldyBaQigoKT0+dGhpcy5fY3JlYXRlUm93KCkpfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7S2woaCxkKSxWayhoLGQpfWNyZWF0ZVJvdyhsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1u'@;
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 'cygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsT3QpKTp4bmUodnQpfWZ1bmN0aW9uIGNyKHZ0LE90KXtjb25zdCBjbj0iY2xhc3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZih3ZSlwaShjbixPdCk7ZWxzZXtsZXQgRW49W10sT249W107eXRbdnRdJiYoRW49QXJyYXkuaXNBcnJh'@;
put 'eSh5dFt2dF0pP3l0W3Z0XTpvTih5dFt2dF0pKSxPdCYmKE9uPUFycmF5LmlzQXJyYXkoT3QpP090Om9OKE90KSk7Y29uc3QgSm49aU4oRW4sT24pLFByPWlOKE9uLEVuKTtKbi5sZW5ndGgmJldvKGNuLEpuKSxQci5sZW5ndGgmJnBpKGNuLFByKX15dFt2dF09T3R9ZnVuY3Rpb24gRHIoKXts'@;
put 'ZXQgdnQ9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3Jz'@;
put 'SW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhpcy5vblF1ZXVlRW1w'@;
put 'dHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gX2kodnQpe2NvbnN0IE90PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KE90KSk/cGFyc2VGbG9hdChPdCk6dnR9ZnVuY3Rpb24gbGkodnQsT3QsY24pe2lmKCF2dC5sZW5ndGgpcmV0dXJuO2NvbnN0IEVu'@;
put 'PWYuZ2V0QWN0aXZlRWRpdG9yKCksT249bmV3IERyO2xldCBKbj0hMDtPbi5vblF1ZXVlRW1wdHk9UHI9PntFbiYmSm4mJkVuLmNhbmNlbENoYW5nZXMoKSxjbihQcil9O2ZvcihsZXQgUHI9dnQubGVuZ3RoLTE7UHI+PTA7UHItLSl7Y29uc3RbT3IsJHIsLFlyXT12dFtQcl0sTnI9VC5wcm9w'@;
put 'VG9Db2woJHIpLFJpPWYuZ2V0Q2VsbE1ldGEoT3IsTnIpOyJudW1lcmljIj09PVJpLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgWXImJkx0ZShZcikmJih2dFtQcl1bM109X2koWXIpKSxmLmdldENlbGxWYWxpZGF0b3IoUmkpJiYoT24uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVD'@;
put 'ZWxsKHZ0W1ByXVszXSxSaSxmdW5jdGlvbihYbyxHbyl7cmV0dXJuIGZ1bmN0aW9uKEpzKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBKcyl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpO2lmKCExPT09SnMmJiExPT09R28uYWxsb3dJbnZh'@;
put 'bGlkKXtKbj0hMSx2dC5zcGxpY2UoWG8sMSksR28udmFsaWQ9ITA7Y29uc3QgZ2E9Zi5nZXRDZWxsKEdvLnZpc3VhbFJvdyxHby52aXN1YWxDb2wpO251bGwhPT1nYSYmV28oZ2EsZXQuaW52YWxpZENlbGxDbGFzc05hbWUpfU9uLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oUHIsUmkp'@;
put 'LE90KSl9T24uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIG1yKHZ0LE90KXtsZXQgY249dnQubGVuZ3RoLTE7aWYoY248MClyZXR1cm47Zm9yKDtjbj49MDtjbi0tKXtsZXQgT249ITE7aWYobnVsbCE9PXZ0W2NuXSl7aWYobnVsbCE9dnRbY25dWzJdfHxudWxsIT12dFtjbl1bM10p'@;
put 'e2lmKGV0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbY25dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOkpufT1ULmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09Sm4pe09uPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFldC5j'@;
put 'b2x1bW5zfHwwPT09ZXQuY29sdW1ucy5sZW5ndGgpJiZldC5hbGxvd0luc2VydENvbHVtbilmb3IoO1QucHJvcFRvQ29sKHZ0W2NuXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6Sm59PVQuY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZTpPdH0pO2lmKDA9PT1Kbil7'@;
put 'T249ITA7YnJlYWt9fU9ufHxULnNldCh2dFtjbl1bMF0sdnRbY25dWzFdLHZ0W2NuXVszXSl9fWVsc2UgdnQuc3BsaWNlKGNuLDEpfWYuZm9yY2VGdWxsUmVuZGVyPSEwLGllLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlUmVuZGVyIix2dCxPdCkscGUubG9j'@;
put 'a0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLHBlLnVubG9ja0VkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsdnQsT3R8fCJlZGl0Iik7Y29uc3QgRW49Zi5nZXRBY3RpdmVFZGl0b3IoKTtFbiYmS2koRW4ucmVmcmVz'@;
put 'aFZhbHVlKSYmRW4ucmVmcmVzaFZhbHVlKCl9ZnVuY3Rpb24gRWkodnQsT3QsY24pe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LE90LGNuXV19ZnVuY3Rpb24gWnIodnQsT3Qpe2NvbnN0IGNuPWYuZ2V0QWN0aXZlRWRpdG9yKCksRW49Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdl'@;
put 'Iix2dCxPdHx8ImVkaXQiKSxPbj12dC5maWx0ZXIoSm49Pm51bGwhPT1Kbik7cmV0dXJuITE9PT1Fbnx8MD09PU9uLmxlbmd0aD8oY24mJmNuLmNhbmNlbENoYW5nZXMoKSxbXSk6T259dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdm4pLHRoaXMu'@;
put 'cm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHZuKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9j'@;
put 'YWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5n'@;
put 'ZUVuZCIsdnQpLHZ0LnJvdzwwJiYodnQucm93PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSksdnQuY29sPDAmJih2dC5jb2w9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9v'@;
put 'aygiYWZ0ZXJTZXRSYW5nZUVuZCIsdnQ9Pntjb25zdCBPdD1fZyghMSksY249dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOkVuLHRvOk9ufT1jbi5jdXJyZW50KCksSm49Y24uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLEVuLnJvdyxFbi5j'@;
put 'b2wsT24ucm93LE9uLmNvbCxPdCxKbiksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLEVuLnJvdyxmLmNvbFRvUHJvcChFbi5jb2wpLE9uLnJvdyxmLmNvbFRvUHJvcChPbi5jb2wpLE90LEpuKTtjb25zdCBQcj10aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlBbnlIZWFk'@;
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 'dCBPbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxKbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxQcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBPcj0kcj0+e2lmKDA9'@;
put 'PT0kci5sZW5ndGgpcmV0dXJuW107Y29uc3QgWXI9Wy4uLiRyXTtyZXR1cm4gWXIuc29ydCgoUmksWG8pPT57bGV0W0dvXT1SaSxbSnNdPVhvO3JldHVybiBHbz09PUpzPzA6R28+SnM/MTotMX0pLEFsKFlyLChSaSxYbyk9PntsZXRbR28sSnNdPVhvO2NvbnN0IGdhPVJpW1JpLmxlbmd0aC0x'@;
put 'XSxbdW8sQXRdPWdhLElpPXVvK0F0O2lmKEdvPD1JaSl7Y29uc3QgUXM9TWF0aC5tYXgoSnMtKElpLUdvKSwwKTtnYVsxXSs9UXN9ZWxzZSBSaS5wdXNoKFtHbyxKc10pO3JldHVybiBSaX0sW1lyWzBdXSl9O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9y'@;
put 'b3dfYWJvdmUiOmNvbnN0ICRyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYoZXQubWF4Um93cz09PSRyKXJldHVybjtjb25zdCBZcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7T3Q9bnVsbCE9PShjbj1PdCkmJnZvaWQgMCE9PWNuP2NuOiJiZWxvdyI9PT1Zcj8kcjow'@;
put 'O2NvbnN0e2RlbHRhOk5yLHN0YXJ0UGh5c2ljYWxJbmRleDpSaX09VC5jcmVhdGVSb3coT3QsT24se3NvdXJjZTpKbixtb2RlOllyfSk7aWYoTnIpe2NvbnN0IEF0PW5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLElpPUF0Py5mcm9tLFFzPUlpPy5yb3csbGE9Zi50b1Zpc3VhbFJvdyhSaSk7'@;
put 'aWYobm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHtyb3c6RnMsY29sOmVjfT1BdC50bztsZXQgQ2E9SWkuY29sO25uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYoQ2E9LTEpLG5uLmdldFNlbGVjdGVkUmFuZ2UoKS5w'@;
put 'b3AoKSxubi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKFFzK05yLENhKSwhMCksbm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcytOcixlYykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2Ui'@;
put 'aW5zZXJ0X2NvbF9lbmQiOmNvbnN0IFhvPSJpbnNlcnRfY29sX2VuZCI9PT12dD8iZW5kIjoic3RhcnQiO090PW51bGwhPT0oRW49T3QpJiZ2b2lkIDAhPT1Fbj9FbjoiZW5kIj09PVhvP2YuY291bnRTb3VyY2VDb2xzKCk6MDtjb25zdHtkZWx0YTpHbyxzdGFydFBoeXNpY2FsSW5kZXg6SnN9'@;
put 'PVQuY3JlYXRlQ29sKE90LE9uLHtzb3VyY2U6Sm4sbW9kZTpYb30pO2lmKEdvKXtpZihBcnJheS5pc0FycmF5KGV0LmNvbEhlYWRlcnMpKXtjb25zdCBGcz1bZi50b1Zpc3VhbENvbHVtbihKcyksMF07RnMubGVuZ3RoKz1HbyxBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGV0LmNvbEhl'@;
put 'YWRlcnMsRnMpfWNvbnN0IEF0PW5uLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLElpPUF0Py5mcm9tLFFzPUlpPy5jb2wsbGE9Zi50b1Zpc3VhbENvbHVtbihKcyk7aWYobm4uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKEtpKFFzKSYmUXM+PWxhKXtjb25zdHty'@;
put 'b3c6RnMsY29sOmVjfT1BdC50bztsZXQgQ2E9SWkucm93O25uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYoQ2E9LTEpLG5uLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKSxubi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKENhLFFzK0dvKSwhMCksbm4uc2V0UmFu'@;
put 'Z2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhGcyxlYytHbykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IGdhPUF0PT57bGV0IElpPTA7RG4oQXQsUXM9PntsZXRbbGEsRnNdPVFzO2NvbnN0IGVjPXBjKGxhKT9mLmNvdW50Um93cygpLTE6'@;
put 'TWF0aC5tYXgobGEtSWksMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihsYSkmJihsYT1NYXRoLm1heChsYS1JaSwwKSksIVQucmVtb3ZlUm93KGxhLEZzLEpuKSlyZXR1cm47Y29uc3QgUmg9Zi5jb3VudFJvd3MoKSxTMT1ldC5maXhlZFJvd3NUb3A7UzE+PWVjKzEmJihldC5maXhlZFJvd3NUb3At'@;
put 'PU1hdGgubWluKEZzLFMxLWVjKSk7Y29uc3QgRGw9ZXQuZml4ZWRSb3dzQm90dG9tO0RsJiZlYz49UmgtRGwmJihldC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKEZzLERsKSksSWkrPUZzfSl9O0FycmF5LmlzQXJyYXkoT3QpP2dhKE9yKE90KSk6Z2EoW1tPdCxPbl1dKSxpZS5hZGp1c3RS'@;
put 'b3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCB1bz1BdD0+e2xldCBJaT0wO0RuKEF0LFFzPT57bGV0W2xhLEZzXT1Rcztjb25zdCBlYz1wYyhsYSk/Zi5jb3VudENvbHMoKS0xOk1hdGgubWF4KGxhLUlpLDApO2xldCBDYT1mLnRv'@;
put 'UGh5c2ljYWxDb2x1bW4oZWMpO2lmKE51bWJlci5pc0ludGVnZXIobGEpJiYobGE9TWF0aC5tYXgobGEtSWksMCkpLCFULnJlbW92ZUNvbChsYSxGcyxKbikpcmV0dXJuO2NvbnN0IFMxPWV0LmZpeGVkQ29sdW1uc1N0YXJ0O1MxPj1lYysxJiYoZXQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgu'@;
put 'bWluKEZzLFMxLWVjKSksQXJyYXkuaXNBcnJheShldC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBDYT4idSImJihDYT0tMSksZXQuY29sSGVhZGVycy5zcGxpY2UoQ2EsRnMpKSxJaSs9RnN9KX07QXJyYXkuaXNBcnJheShPdCk/dW8oT3IoT3QpKTp1byhbW090LE9uXV0pLGllLmFkanVzdFJvd3NB'@;
put 'bmRDb2xzKCksZi5fcmVmcmVzaEJvcmRlcnMoKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBhY3Rpb24gIiR7dnR9ImApfVByfHxpZS5hZGp1c3RSb3dzQW5kQ29scygpfSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHZ0PWV0Lm1pblJvd3MsT3Q9'@;
put 'ZXQubWluU3BhcmVSb3dzLGNuPWV0Lm1pbkNvbHMsRW49ZXQubWluU3BhcmVDb2xzO2lmKDA9PT1mLmNvdW50Um93cygpJiYwPT09Zi5jb3VudENvbHMoKSYmbm4uZGVzZWxlY3QoKSx2dCl7Y29uc3QgT249Zi5jb3VudFJvd3MoKTtPbjx2dCYmVC5jcmVhdGVSb3coT24sdnQtT24se3NvdXJj'@;
put 'ZToiYXV0byJ9KX1pZihPdCl7Y29uc3QgT249Zi5jb3VudEVtcHR5Um93cyghMCk7aWYoT248T3Qpe2NvbnN0IFByPU1hdGgubWluKE90LU9uLGV0Lm1heFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7VC5jcmVhdGVSb3coZi5jb3VudFJvd3MoKSxQcix7c291cmNlOiJhdXRvIn0pfX17bGV0'@;
put 'IE9uOyhjbnx8RW4pJiYoT249Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBKbj1mLmNvdW50Q29scygpO2lmKGNuJiYhZXQuY29sdW1ucyYmSm48Y24pe2NvbnN0IFByPWNuLUpuO09uKz1QcixULmNyZWF0ZUNvbChKbixQcix7c291cmNlOiJhdXRvIn0pfWlmKEVuJiYhZXQuY29sdW1ucyYm'@;
put 'ImFycmF5Ij09PWYuZGF0YVR5cGUmJk9uPEVuKXtKbj1mLmNvdW50Q29scygpO2NvbnN0IE9yPU1hdGgubWluKEVuLU9uLGV0Lm1heENvbHMtSm4pO1QuY3JlYXRlQ29sKEpuLE9yLHtzb3VyY2U6ImF1dG8ifSl9fWlmKG5uLmlzU2VsZWN0ZWQoKSl7Y29uc3QgT249Zi5jb3VudFJvd3MoKSxK'@;
put 'bj1mLmNvdW50Q29scygpO0RuKG5uLnNlbGVjdGVkUmFuZ2UsUHI9PntsZXQgT3I9ITEsJHI9UHIuZnJvbS5yb3csWXI9UHIuZnJvbS5jb2wsTnI9UHIudG8ucm93LFJpPVByLnRvLmNvbDskcj5Pbi0xPygkcj1Pbi0xLE9yPSEwLE5yPiRyJiYoTnI9JHIpKTpOcj5Pbi0xJiYoTnI9T24tMSxP'@;
put 'cj0hMCwkcj5OciYmKCRyPU5yKSksWXI+Sm4tMT8oWXI9Sm4tMSxPcj0hMCxSaT5ZciYmKFJpPVlyKSk6Umk+Sm4tMSYmKFJpPUpuLTEsT3I9ITAsWXI+UmkmJihZcj1SaSkpLE9yJiZmLnNlbGVjdENlbGwoJHIsWXIsTnIsUmkpfSl9Zi52aWV3JiZmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCl9LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE90LGNuLEVuLE9uKXtsZXQgSm4sUHIsT3IsJHI7Y29uc3QgWXI9W10sTnI9e30sUmk9W10sWG89dnQucm93LEdvPXZ0LmNvbDtpZihQcj1PdC5sZW5ndGgsMD09PVByKXJldHVybiExO2xldCBKcz0wLGdhPTA7c3dpdGNoKHVzKGNuKSYmKEpzPWNu'@;
put 'LmNvbC1HbysxLGdhPWNuLnJvdy1YbysxKSxPbil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCB1bz1LYihPdCksQXQ9dW8ubGVuZ3RoLElpPU1hdGgubWF4KEF0LEpzKSxRcz1mLmdldERhdGEoKS5zbGljZShYbyksbGE9S2IoUXMpLnNsaWNlKEdvLEdvK0lpKTtmb3IoT3I9MDtPcjxJaTtPcis9'@;
put 'MSlpZihPcjxBdCl7Zm9yKEpuPTAsUHI9dW9bT3JdLmxlbmd0aDtKbjxnYS1QcjtKbis9MSl1b1tPcl0ucHVzaCh1b1tPcl1bSm4lUHJdKTtSaS5wdXNoKHVvW09yXS5jb25jYXQoT3I8bGEubGVuZ3RoP2xhW09yXTpuZXcgQXJyYXkoUXMubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBSaS5w'@;
put 'dXNoKHVvW09yJUF0XS5jb25jYXQobGFbT3JdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheShYbyxHbyxLYihSaSkpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IEZzPU90Lmxlbmd0aCxlYz1NYXRoLm1heChGcyxnYSksQ2E9Zi5nZXREYXRhKCkuc2xpY2UoWG8pLm1hcCgkYz0+JGMuc2xp'@;
put 'Y2UoR28pKTtmb3IoSm49MDtKbjxlYztKbis9MSlpZihKbjxGcyl7Zm9yKE9yPTAsJHI9T3RbSm5dLmxlbmd0aDtPcjxKcy0kcjtPcis9MSlPdFtKbl0ucHVzaChPdFtKbl1bT3IlJHJdKTtpZihKbjxDYS5sZW5ndGgpZm9yKGxldCAkYz0wOyRjPENhW0puXS5sZW5ndGg7JGMrPTEpT3RbSm5d'@;
put 'LnB1c2goQ2FbSm5dWyRjXSk7ZWxzZSBPdFtKbl0ucHVzaCguLi5uZXcgQXJyYXkoQ2FbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE90LnB1c2goT3RbSm4lUHJdLnNsaWNlKDAsZWMpLmNvbmNhdChDYVtKbl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KFhvLEdvLE90KTticmVhaztkZWZh'@;
put 'dWx0Ok5yLnJvdz12dC5yb3csTnIuY29sPXZ0LmNvbDtsZXQgeDIsUmg9MCxTMT0wLERsPSEwO2NvbnN0IHU0PWZ1bmN0aW9uKFNkKXtsZXQgSnU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3QgTTE9T3RbU2QlT3QubGVu'@;
put 'Z3RoXTtyZXR1cm4gbnVsbCE9PUp1P00xW0p1JU0xLmxlbmd0aF06TTF9LE9oPU90Lmxlbmd0aCxDZD1jbj9jbi5yb3ctdnQucm93KzE6MDtmb3IoUHI9Y24/Q2Q6TWF0aC5tYXgoT2gsQ2QpLEpuPTA7Sm48UHImJiEoY24mJk5yLnJvdz5jbi5yb3cmJkNkPk9ofHwhZXQuYWxsb3dJbnNlcnRS'@;
put 'b3cmJk5yLnJvdz5mLmNvdW50Um93cygpLTF8fE5yLnJvdz49ZXQubWF4Um93cyk7Sm4rKyl7Y29uc3QgJGM9Sm4tUmgsU2Q9dTQoJGMpLmxlbmd0aCxKdT1jbj9jbi5jb2wtdnQuY29sKzE6MDtpZigkcj1jbj9KdTpNYXRoLm1heChTZCxKdSksTnIuY29sPXZ0LmNvbCx4Mj1mLmdldENlbGxN'@;
put 'ZXRhKE5yLnJvdyxOci5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09RW4mJiJBdXRvZmlsbC5maWxsIiE9PUVufHwheDIuc2tpcFJvd09uUGFzdGUpe2ZvcihTMT0wLE9yPTA7T3I8JHImJiEoY24mJk5yLmNvbD5jbi5jb2wmJkp1PlNkfHwhZXQuYWxsb3dJbnNlcnRDb2x1bW4mJk5yLmNvbD5m'@;
put 'LmNvdW50Q29scygpLTF8fE5yLmNvbD49ZXQubWF4Q29scyk7T3IrKyl7aWYoeDI9Zi5nZXRDZWxsTWV0YShOci5yb3csTnIuY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Fbnx8IkF1dG9maWxsLmZpbGwiPT09RW4pJiZ4Mi5za2lwQ29sdW1uT25QYXN0ZSl7UzErPTEsTnIuY29sKz0xLCRy'@;
put 'Kz0xO2NvbnRpbnVlfWlmKHgyLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Fbil7TnIuY29sKz0xO2NvbnRpbnVlfWxldCBNdT11NCgkYyxPci1TMSksYXU9Zi5nZXREYXRhQXRDZWxsKE5yLnJvdyxOci5jb2wpO2lmKG51bGwhPT1NdSYmIm9iamVjdCI9PXR5cGVvZiBNdSlpZihBcnJh'@;
put 'eS5pc0FycmF5KE11KSYmbnVsbD09PWF1JiYoYXU9W10pLG51bGw9PT1hdXx8Im9iamVjdCIhPXR5cGVvZiBhdSlEbD0hMTtlbHNle2NvbnN0IHgxPXI3KEFycmF5LmlzQXJyYXkoYXUpP2F1OmF1WzBdfHxhdSksRTI9cjcoQXJyYXkuaXNBcnJheShNdSk/TXU6TXVbMF18fE11KTtsayh4MSxF'@;
put 'Mil8fEFycmF5LmlzQXJyYXkoeDEpJiZBcnJheS5pc0FycmF5KEUyKT9NdT15dShNdSk6RGw9ITF9ZWxzZSBudWxsIT09YXUmJiJvYmplY3QiPT10eXBlb2YgYXUmJihEbD0hMSk7RGwmJllyLnB1c2goW05yLnJvdyxOci5jb2wsTXVdKSxEbD0hMCxOci5jb2wrPTF9TnIucm93Kz0xfWVsc2Ug'@;
put 'UmgrPTEsTnIucm93Kz0xLFByKz0xfWYuc2V0RGF0YUF0Q2VsbChZcixudWxsLG51bGwsRW58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1cuc2V0RGF0YShldC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKG0yKCl8fHlOKCkpJiZwaShmLnJv'@;
put 'b3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGV0LCEwKSx0aGlzLnZpZXc9bmV3IGhUZSh0aGlzKSxwZT1ja2UuZ2V0SW5zdGFuY2UoZixldCxubiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMudmlldy5yZW5kZXIoKSx3ZSYm'@;
put 'bnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZwdGUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIHdl'@;
put 'JiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHdlWzBdLHdlWzFdKSx3ZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29yZHModnQsT3QpfSx0aGlzLl9jcmVh'@;
put 'dGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQsT3QsY24pe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCxPdCxjbil9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgT249Zi5nZXRDZWxsVmFsaWRhdG9yKE90KTtmdW5jdGlvbiBKbihQcil7aWYo'@;
put 'YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09T3QuaGlkZGVuKXJldHVybiB2b2lkIGNuKFByKTtjb25zdCAkcj1PdC52aXN1YWxDb2wsWXI9T3QudmlzdWFsUm93LE5yPWYuZ2V0Q2VsbChZciwkciwhMCk7aWYoTnImJiJUSCIh'@;
put 'PT1Oci5ub2RlTmFtZSl7Y29uc3QgUmk9Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFlyKSxYbz1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoJHIpO2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVy'@;
put 'IixSaSxYbyxOcil9Y24oUHIpfXZhciBQcjtKZWUoT24pJiYoUHI9T24sT249ZnVuY3Rpb24oT3IsJHIpeyRyKFByLnRlc3QoT3IpKX0pLFJhKE9uKT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLEVuKSxmLl9yZWdpc3RlckltbWVkaWF0'@;
put 'ZSgoKT0+e09uLmNhbGwoT3QsdnQsUHI9PntmJiYoUHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnByb3AsRW4pLE90LnZhbGlkPVByLEpuKFByKSxmLnJ1bkhvb2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsUHIsdnQsT3QudmlzdWFsUm93LE90LnBy'@;
put 'b3AsRW4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57T3QudmFsaWQ9ITAsSm4oT3QudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgT249RWkodnQsT3QsY24pLEpuPVtdO2xldCBPciwkcixZcixQcj1Fbjtmb3IoT3I9'@;
put 'MCwkcj1Pbi5sZW5ndGg7T3I8JHI7T3IrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPbltPcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBPbltPcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBt'@;
put 'ZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7WXI9T25bT3JdWzFdPj10aGlzLmNvdW50Q29scygpP09uW09yXVsxXTpULmNvbFRvUHJvcChPbltPcl1bMV0pLEpuLnB1c2goW09uW09yXVswXSxZcixXLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coT25bT3JdWzBdKSxPbltPcl1bMV0p'@;
put 'LE9uW09yXVsyXV0pfSFQciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKFByPU90KTtjb25zdCBOcj1acihKbixFbik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixOcixQciksbGkoTnIsUHIsKCk9PnttcihOcixQcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuLEVuKXtjb25zdCBPbj1FaSh2dCxPdCxjbiksSm49W107bGV0IE9yLCRyLFByPUVuO2ZvcihPcj0wLCRyPU9uLmxlbmd0aDtPcjwkcjtPcisrKUpuLnB1c2goW09uW09yXVswXSxPbltPcl1bMV0sVy5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KE9uW09yXVswXSksT25bT3Jd'@;
put 'WzFdKSxPbltPcl1bMl1dKTshUHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihQcj1PdCk7Y29uc3QgWXI9WnIoSm4sRW4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsWXIsUHIpLGxpKFlyLFByLCgpPT57bXIoWXIsUHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYm'@;
put 'IWYuaXNMaXN0ZW5pbmcoKSYmKFlCPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKFlCPW51bGwsZi5ydW5Ib29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlv'@;
put 'bigpe3JldHVybiBZQj09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7Zi5fcmVmcmVzaEJvcmRlcnMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdKXx8YXJndW1lbnRzWzFdKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbixPbixKbixQcil7aWYoIm9iamVjdCIhPXR5cGVvZiBjbnx8Im9iamVjdCIhPXR5cGVvZiBjblswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFt'@;
put 'ZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgT3I9Im51bWJlciI9PXR5cGVvZiBFbj9mLl9jcmVhdGVDZWxsQ29vcmRzKEVuLE9uKTpudWxsO3JldHVybiBpZS5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxjbixPcixK'@;
put 'bixQcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHZ0LE90LGNuKXtmb3IodmFyIEVuPWFyZ3VtZW50cy5sZW5ndGgsT249bmV3IEFycmF5KEVuPjM/RW4tMzowKSxKbj0zO0puPEVuO0puKyspT25bSm4tM109YXJndW1lbnRzW0puXTtyZXR1cm4gVC5zcGxpY2VDb2wodnQsT3QsY24sLi4u'@;
put 'T24pfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih2dCxPdCxjbil7Zm9yKHZhciBFbj1hcmd1bWVudHMubGVuZ3RoLE9uPW5ldyBBcnJheShFbj4zP0VuLTM6MCksSm49MztKbjxFbjtKbisrKU9uW0puLTNdPWFyZ3VtZW50c1tKbl07cmV0dXJuIFQuc3BsaWNlUm93KHZ0LE90LGNuLC4uLk9u'@;
put 'KX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKG5uLmlzU2VsZWN0ZWQoKSlyZXR1cm4gY3Mobm4uZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206T3QsdG86Y259PXZ0O3JldHVybltPdC5yb3csT3QuY29sLGNuLnJvdyxjbi5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRM'@;
put 'YXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBPdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoT3Q9dnRbdnQubGVuZ3RoLTFdKSxPdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYobm4uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5m'@;
put 'cm9tKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgT3Q7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE90PXZ0W3Z0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZW1wdHlT'@;
put 'ZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHZ0KXtpZighbm4uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE90PVtdO0RuKG5uLmdldFNlbGVjdGVkUmFuZ2UoKSxjbj0+e2NvbnN0IEVuPWNuLmdldFRvcFN0YXJ0Q29y'@;
put 'bmVyKCksT249Y24uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dm8oRW4ucm93LE9uLnJvdyxKbj0+e3ZvKEVuLmNvbCxPbi5jb2wsUHI9Pnt0aGlzLmdldENlbGxNZXRhKEpuLFByKS5yZWFkT25seXx8T3QucHVzaChbSm4sUHIsbnVsbF0pfSl9KX0pLE90Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFB'@;
put 'dENlbGwoT3QsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVy'@;
put 'PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiYodGhpcy5yZW5k'@;
put 'ZXJDYWxsP3RoaXMucmVuZGVyKCk6dGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMucmVuZGVyQ2FsbD0hMCx0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fChwZS5sb2NrRWRp'@;
put 'dG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkscGUudW5sb2NrRWRpdG9yKCkpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgT3Q9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5pc0V4ZWN1dGlv'@;
put 'blN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJh'@;
put 'dGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgT3Q9dGhpcy5leGVjdXRp'@;
put 'b25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE90LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZPdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5y'@;
put 'ZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3Bl'@;
put 'bmRFeGVjdXRpb24oKTtjb25zdCBjbj12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihPdCksY259LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE90PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1l'@;
put 'RXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0e3dpZHRoOnZ0LGhlaWdodDpPdH09Zi52aWV3LmdldExhc3RTaXplKCkse3dpZHRoOmNuLGhlaWdodDpFbn09Zi5yb290RWxl'@;
put 'bWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxPbj1jbiE9PXZ0fHxFbiE9PU90OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp2dCxoZWlnaHQ6T3R9LHt3aWR0aDpjbixoZWlnaHQ6RW59LE9uKSYmKChPbnx8Zi52aWV3Ll93dC53dE92ZXJsYXlz'@;
put 'LnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKGYudmlldy5zZXRMYXN0U2l6ZShjbixFbiksZi5yZW5kZXIoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRoOnZ0LGhlaWdodDpPdH0se3dpZHRoOmNuLGhlaWdodDpFbn0sT24pKX0sdGhpcy51'@;
put 'cGRhdGVEYXRhPWZ1bmN0aW9uKHZ0LE90KXtqbmUodnQsY249PntUPWNufSxjbj0+e1Q9Y24sZi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxmLnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dz'@;
put 'KCkpLGllLmFkanVzdFJvd3NBbmRDb2xzKCl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpPdCxtZXRhTWFuYWdlcjppdCxmaXJzdFJ1bjp3ZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHZ0LE90KXtq'@;
put 'bmUodnQsY249PntUPWNufSwoKT0+e2l0LmNsZWFyQ2VsbHNDYWNoZSgpLGYuaW5pdEluZGV4TWFwcGVycygpLGllLmFkanVzdFJvd3NBbmRDb2xzKCksd2UmJih3ZT1bbnVsbCwibG9hZERhdGEiXSl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlcsaW50ZXJuYWxTb3Vy'@;
put 'Y2U6ImxvYWREYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6aXQsZmlyc3RSdW46d2V9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCB2dD1ldC5jb2x1bW5zO2xldCBPdD0wO2lmKEFycmF5LmlzQXJyYXkodnQpKU90PXZ0Lmxlbmd0aDtlbHNlIGlmKFJh'@;
put 'KHZ0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29uc3QgY249dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IEVuPTA7RW48Y247RW4rPTEpdnQoRW4pJiYoT3QrPTEpfWVsc2UoIm9iamVjdCI9PT1mLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihPdD1ULmNv'@;
put 'bFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihLaShldC5kYXRhU2NoZW1hKSl7Y29uc3QgY249VC5nZXRTY2hlbWEoKTtPdD1BcnJheS5pc0FycmF5KGNuKT9jbi5sZW5ndGg6dWsoY24pfWVsc2UgT3Q9dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gT3R9LHRoaXMuaW5pdEluZGV4'@;
put 'TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24o'@;
put 'dnQsT3QsY24sRW4pe3JldHVybiBMYSh2dCk/VC5nZXRBbGwoKTpULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pLFQuREVTVElOQVRJT05fUkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbih2dCxPdCxj'@;
put 'bixFbil7cmV0dXJuIFQuZ2V0Q29weWFibGVUZXh0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24odnQsT3Qpe3JldHVybiBULmdldENvcHlhYmxlKHZ0LFQuY29sVG9Qcm9wKE90KSl9'@;
put 'LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGNuPSh3ZT9mLmxvYWRE'@;
put 'YXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgT24sSm4sRW49ITE7aWYoS2kodnQucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7'@;
put 'aWYoS2kodnQuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7aWYoS2kodnQuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4'@;
put 'LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IoT24gaW4gdnQpImRhdGEiPT09T258fCgibGFuZ3VhZ2UiPT09T24/Tm4odnQubGFuZ3VhZ2UpOiJjbGFzc05hbWUiPT09T24/Y3IoImNsYXNzTmFtZSIsdnQuY2xhc3NOYW1lKToidGFi'@;
put 'bGVDbGFzc05hbWUiPT09T24mJmYudGFibGU/KGNyKCJ0YWJsZUNsYXNzTmFtZSIsdnQudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpKTpzby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoT24pfHxzby5nZXRTaW5n'@;
put 'bGV0b24oKS5pc0RlcHJlY2F0ZWQoT24pPyhSYSh2dFtPbl0pfHxBcnJheS5pc0FycmF5KHZ0W09uXSkpJiYodnRbT25dLmluaXRpYWxIb29rPSEwLGYuYWRkSG9vayhPbix2dFtPbl0pKTohT3QmJmJsKHZ0LE9uKSYmKHl0W09uXT12dFtPbl0pKTt2b2lkIDA9PT12dC5kYXRhJiZ2b2lkIDA9'@;
put 'PT1ldC5kYXRhP2NuKG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT9jbih2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihULmNyZWF0ZU1hcCgpLGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBQcj1mLmNvdW50Q29scygpLE9y'@;
put 'PWV0LmNvbHVtbnM7aWYoT3ImJlJhKE9yKSYmKEVuPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZpdC5jbGVhckNhY2hlKCksUHI+MClmb3IoT249MCxKbj0wO09uPFByO09uKyspe2lmKE9yKXtjb25zdCBOcj1Fbj9PcihP'@;
put 'bik6T3JbSm5dO05yJiZpdC51cGRhdGVDb2x1bW5NZXRhKEpuLE5yKX1Kbis9MX1LaSh2dC5jZWxsKSYmZHModnQuY2VsbCxOcj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QoTnIucm93LE5yLmNvbCxOcil9KSxmLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgJHI9Zi5yb290RWxl'@;
put 'bWVudC5zdHlsZS5oZWlnaHQ7IiIhPT0kciYmKCRyPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IFlyPXZ0LmhlaWdodDtpZihSYShZcikmJihZcj1ZcigpKSxPdCYmZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQu'@;
put 'c2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT1Zcil7Y29uc3QgTnI9Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7TnImJihOci5pbmRleE9mKCJoZWlnaHQiKT4t'@;
put 'MXx8TnIuaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixOcik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09WXImJihmLnJvb3RFbGVtZW50'@;
put 'LnN0eWxlLmhlaWdodD1pc05hTihZcik/YCR7WXJ9YDpgJHtZcn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IE5yPXZ0LndpZHRoO1JhKE5yKSYmKE5yPU5yKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9'@;
put 'aXNOYU4oTnIpP2Ake05yfWA6YCR7TnJ9cHhgfU90fHwoZi52aWV3JiYoZi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSksZi5ydW5Ib29rcygiYWZ0ZXJVcGRh'@;
put 'dGVTZXR0aW5ncyIsdnQpKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIXdlJiYoZi5mb3JjZUZ1bGxSZW5kZXI9ITAscGUubG9ja0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSxwZS51bmxv'@;
put 'Y2tFZGl0b3IoKSksIU90JiZmLnZpZXcmJigiIj09PSRyfHwiIj09PVlyfHx2b2lkIDA9PT1ZcikmJiRyIT09WXImJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB2dD1mLmdldFNlbGVj'@;
put 'dGVkTGFzdCgpO2lmKGV0LmdldFZhbHVlKXtpZihSYShldC5nZXRWYWx1ZSkpcmV0dXJuIGV0LmdldFZhbHVlLmNhbGwoZik7aWYodnQpcmV0dXJuIGYuZ2V0RGF0YSgpW3Z0WzBdWzBdXVtldC5nZXRWYWx1ZV19ZWxzZSBpZih2dClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKHZ0WzBdLHZ0WzFd'@;
put 'KX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiBldH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRlcj1mdW5jdGlvbih2dCxPdCxjbixFbixPbil7aWUuYWx0ZXIodnQsT3QsY24sRW4s'@;
put 'T24pfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24odnQsT3Qpe2xldCBjbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLEVuPU90LE9uPXZ0O2lmKE90Pj0wKXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlz'@;
put 'aWNhbENvbHVtbihPdCkpKXJldHVybiBudWxsO0VuPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCl9aWYodnQ+PTApe2lmKHRoaXMucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KHZ0KSkpcmV0dXJuIG51bGw7'@;
put 'T249dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZ0KX1yZXR1cm4gbnVsbD09PU9ufHxudWxsPT09RW4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHMoT24sRW4pLGNuKX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rp'@;
put 'b24odnQpe2NvbnN0IE90PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1PdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6Y24sY29sOkVufT1PdDtsZXQgT249Y24sSm49RW47cmV0dXJuIGNuPj0wJiYoT249dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxG'@;
put 'cm9tUmVuZGVyYWJsZUluZGV4KGNuKSksRW4+PTAmJihKbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoRW4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKE9uLEpuKX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24odnQpe3JldHVybiBULmNvbFRvUHJv'@;
put 'cCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVC5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVt'@;
put 'bkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBl'@;
put 'ci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsVC5jb2xUb1Byb3AoT3QpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXQodnQsT3QpfSx0aGlz'@;
put 'LmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSx2dCksVC5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBFbj0wO0VuPGNuLmxl'@;
put 'bmd0aDtFbis9MSlmb3IobGV0IE9uPTA7T248Y25bRW5dLmxlbmd0aDtPbis9MSlPdC5wdXNoKGNuW0VuXVtPbl0pO3JldHVybiBPdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD1bXSxjbj1ULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxULnByb3BU'@;
put 'b0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZXQuZGF0YS5sZW5ndGgtMSxULnByb3BUb0NvbCh2dCkpLFQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgRW49MDtFbjxjbi5sZW5ndGg7RW4rPTEpZm9yKGxldCBPbj0wO09uPGNuW0VuXS5sZW5ndGg7T24rPTEpT3QucHVzaChj'@;
put 'bltFbl1bT25dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IE9uO3JldHVybiBPbj12b2lkIDA9PT12dD9XLmdldERhdGEoKTpXLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCksZi5fY3JlYXRlQ2VsbENvb3Jkcyhj'@;
put 'bixFbikpLE9ufSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IE9uO3JldHVybiBPbj12b2lkIDA9PT12dD9XLmdldERhdGEoITApOlcuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLEVu'@;
put 'KSwhMCksT259LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVy5nZXRBdENvbHVtbih2dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgT249RWkodnQsT3QsY24pLEpuPXRoaXMuaGFzSG9vaygiYWZ0ZXJT'@;
put 'ZXRTb3VyY2VEYXRhQXRDZWxsIiksUHI9W107Sm4mJkRuKE9uLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtQci5wdXNoKFtZcixOcixXLmdldEF0Q2VsbChZcixOciksUmldKX0pLERuKE9uLCRyPT57bGV0W1lyLE5yLFJpXT0kcjtXLnNldEF0Q2VsbChZcixOcixSaSl9KSxKbiYmdGhpcy5ydW5I'@;
put 'b29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixQcixFbiksdGhpcy5yZW5kZXIoKTtjb25zdCBPcj1mLmdldEFjdGl2ZUVkaXRvcigpO09yJiZLaShPci5yZWZyZXNoVmFsdWUpJiZPci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3Jl'@;
put 'dHVybiBXLmdldEF0Um93KHZ0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVy5nZXRBdENlbGwodnQsT3QpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIFQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxm'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291bnRDb2xzKCktMSksVC5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtjb25zdCBPbj12b2lkIDA9PT12dD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3Vu'@;
put 'dENvbHMoKV06W3Z0LE90LGNuLEVuXSxbSm4sUHJdPU9uO2xldFssLE9yLCRyXT1PbixZcj1udWxsLE5yPW51bGw7dm9pZCAwPT09T3ImJihPcj1Kbiksdm9pZCAwPT09JHImJigkcj1Qcik7bGV0IFJpPSJtaXhlZCI7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKEpuLE9yKSwwKSxNYXRo'@;
put 'Lm1heChKbixPciksWG89PntsZXQgR289ITA7cmV0dXJuIHZvKE1hdGgubWF4KE1hdGgubWluKFByLCRyKSwwKSxNYXRoLm1heChQciwkciksSnM9PihOcj10aGlzLmdldENlbGxNZXRhKFhvLEpzKS50eXBlLFlyP0dvPVlyPT09TnI6WXI9TnIsR28pKSxSaT1Hbz9OcjoibWl4ZWQiLEdvfSks'@;
put 'Uml9LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24odnQsT3QsY24pe2NvbnN0W0VuLE9uXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpXTtsZXQgSm49aXQuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShFbixPbixjbik7ITEhPT1mLnJ1bkhvb2tzKCJi'@;
put 'ZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsT3QsY24sSm4pJiYoaXQucmVtb3ZlQ2VsbE1ldGEoRW4sT24sY24pLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE90LGNuLEpuKSksSm49bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIGNuPWFyZ3VtZW50cy5sZW5ndGgsRW49bmV3IEFycmF5KGNuPjI/Y24tMjowKSxPbj0yO09uPGNuO09uKyspRW5bT24tMl09YXJndW1lbnRzW09uXTtpZihFbi5sZW5ndGg+MCYmIUFy'@;
put 'cmF5LmlzQXJyYXkoRW5bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO090PjAmJml0LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3co'@;
put 'dnQpLE90KSxFbi5sZW5ndGg+MCYmRG4oRW4ucmV2ZXJzZSgpLEpuPT57aXQuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLERuKEpuLChQcixPcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQsT3IsUHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9'@;
put 'ZnVuY3Rpb24odnQsT3QsY24peyJvYmplY3QiPT10eXBlb2YgY24mJmRzKGNuLChFbixPbik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE90LE9uLEVuKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRh'@;
put 'Iix2dCxPdCxjbixFbikpcmV0dXJuO2xldCBKbj12dCxQcj1PdDt2dDx0aGlzLmNvdW50Um93cygpJiYoSm49dGhpcy50b1BoeXNpY2FsUm93KHZ0KSksT3Q8dGhpcy5jb3VudENvbHMoKSYmKFByPXRoaXMudG9QaHlzaWNhbENvbHVtbihPdCkpLGl0LnNldENlbGxNZXRhKEpuLFByLGNuLEVu'@;
put 'KSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIix2dCxPdCxjbixFbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIGl0LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249dGhpcy50b1BoeXNpY2FsUm93KHZ0KSxF'@;
put 'bj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpO3JldHVybiBudWxsPT09Y24mJihjbj12dCksbnVsbD09PUVuJiYoRW49T3QpLGl0LmdldENlbGxNZXRhKGNuLEVuLHt2aXN1YWxSb3c6dnQsdmlzdWFsQ29sdW1uOk90fSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0'@;
put 'dXJuIGl0LmdldENlbGxzTWV0YUF0Um93KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ZXQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0i'@;
put 'bnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnJlbmRlcmVyOnZ0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/YmsoY24pOkxhKGNuKT9iaygidGV4dCIpOmNufSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsT3Qpe2NvbnN0IGNuPSJudW1i'@;
put 'ZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxPdCkuZWRpdG9yOnZ0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP3BrKGNuKTpMYShjbik/cGsoInRleHQiKTpjbn0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09'@;
put 'dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLnZhbGlkYXRvcjp2dC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9GTihjbik6Y259LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dz'@;
put 'PWZ1bmN0aW9uKHZ0LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0'@;
put 'LE90KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhPdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0'@;
put 'LE90LGNuKXtjb25zdCBFbj1uZXcgRHI7dnQmJihFbi5vblF1ZXVlRW1wdHk9dnQpO2xldCBPbj1mLmNvdW50Um93cygpLTE7Zm9yKDtPbj49MDspe2lmKHZvaWQgMCE9PU90JiYtMT09PU90LmluZGV4T2YoT24pKXtPbi09MTtjb250aW51ZX1sZXQgSm49Zi5jb3VudENvbHMoKS0xO2Zvcig7'@;
put 'Sm4+PTA7KXZvaWQgMD09PWNufHwtMSE9PWNuLmluZGV4T2YoSm4pPyhFbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKE9uLEpuKSxmLmdldENlbGxNZXRhKE9uLEpuKSxQcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIFByKXRocm93IG5ldyBF'@;
put 'cnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1QciYmKEVuLnZhbGlkPSExKSxFbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxKbi09MSk6Sm4tPTE7T24tPTF9RW4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0'@;
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 'LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbih2dCl7cmV0dXJuIGV0LmlzRW1wdHlDb2wuY2FsbChmLHZ0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtsZXQgT249IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0'@;
put 'XSxKbj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFMYSh2dCkmJiFMYShPdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1t2dCxPdCxjbixFbl1dLE9uLEpuKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCBjbj0h'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pJiYoaD0hMCk7Y29uc3QgRW49bm4uc2VsZWN0Q2VsbHMoYXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0pO3JldHVybiBFbiYmY24mJmYubGlzdGVuKCksaD0hMSxFbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gbm4uc2VsZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQpfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBubi5zZWxlY3RSb3dzKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCl9LHRoaXMuZGVzZWxl'@;
put 'Y3RDZWxsPWZ1bmN0aW9uKCl7bm4uZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtjb25zdCBPdD12dCYmdGhpcy5oYXNSb3dIZWFkZXJzKCksY249dnQm'@;
put 'JnRoaXMuaGFzQ29sSGVhZGVycygpO2g9ITAsbm4uc2VsZWN0QWxsKE90LGNuKSxoPSExfTtjb25zdCBGbj0odnQsT3QpPT52dC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoT3QsMSwhMCk7dGhpcy5zY3JvbGxWaWV3cG9ydFRvPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249YXJndW1lbnRzLmxl'@;
put 'bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxFbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IEpuPSFjbixQcj0hRW47bGV0IE9yPXZ0LCRyPU90O2lmKCEoYXJndW1lbnRzLmxlbmd0aD40JiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0pe2NvbnN0IFJpPU51bWJlci5pc0ludGVnZXIodnQpLFhvPU51bWJlci5pc0ludGVnZXIoT3QpLEdvPVJpP0ZuKHRoaXMucm93SW5kZXhNYXBwZXIsdnQpOnZvaWQgMCxKcz1Ybz9Gbih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLE90'@;
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 'Zil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24odnQsT3QsY24sRW4sT24sSm4sUHIpe3JldHVybiBzby5nZXRTaW5nbGV0b24oKS5ydW4oZix2dCxPdCxjbixFbixPbixKbixQcil9LHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZT1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIEluZShldC5sYW5ndWFn'@;
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 'IkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzpPdCxjb2w6Y259PXZ0W3Z0Lmxlbmd0aC0xXS5oaWdobGlnaHQsRW49Zi5nZXREYXRhQXRDZWxsKE90LGNuKSxPbj1uZXcgTWFwO2ZvcihsZXQgSm49MDtKbjx2'@;
put 'dC5sZW5ndGg7Sm4rKyl2dFtKbl0uZm9yQWxsKChQcixPcik9PntpZihQcj49MCYmT3I+PTAmJihQciE9PU90fHxPciE9PWNuKSl7Y29uc3R7cmVhZE9ubHk6JHJ9PWYuZ2V0Q2VsbE1ldGEoUHIsT3IpOyRyfHxPbi5zZXQoYCR7UHJ9eCR7T3J9YCxbUHIsT3IsRW5dKX19KTtmLnNldERhdGFB'@;
put 'dENlbGwoQXJyYXkuZnJvbShPbi52YWx1ZXMoKSkpfSxydW5Pbmx5SWY6KCk9PmYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRDZWxsc0NvdW50KCk+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 'cyhjbix2dC5jb2wpLE9uPXZ0LnJvdy1mLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxKbj1NYXRoLm1heChFbi5yb3ctT24sMCk7bm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntubi50'@;
put 'cmFuc2Zvcm1TdGFydChmLmNvdW50VmlzaWJsZVJvd3MoKSwwKX19LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzp2dH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE90PU1hdGgubWluKHZ0LnJvdytmLmNvdW50VmlzaWJsZVJvd3MoKSxmLmNv'@;
put 'dW50Um93cygpLTEpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LC0xKTtpZihudWxsIT09Y24pe2NvbnN0IEVuPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sdnQuY29sKSxPbj12dC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksSm49'@;
put 'TWF0aC5taW4oRW4ucm93LU9uLGYuY291bnRSb3dzKCktMSk7bm4uc2V0UmFuZ2VFbmQoRW4pLGYuc2Nyb2xsVmlld3BvcnRUbyhKbil9fX0se2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOnZ0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9mIGV0LnRhYk1vdmVzP2V0LnRhYk1vdmVzKHZ0'@;
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 'cmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyxfPXFsKGEpLFQ9d2EoYSksVz1xbCh0aGlzLmhvdC5yb290RWxlbWVudCksaWU9d2EodGhpcy5ob3Qucm9vdEVsZW1lbnQpLHBlPWQudG9wT3Zlcmxh'@;
put 'eS5ob2xkZXIsd2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLEVlPXBlIT09Zj9wZS5zY3JvbGxUb3A6MCxaZT13ZSE9PWY/d2Uuc2Nyb2xsTGVmdDowLGl0PWYuaW5uZXJXaWR0aC1XLmxlZnQtaWUse3d0VGFibGU6ZXR9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2'@;
put 'b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QseXQ9ZXQubmFtZSxFdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHl0KT9FZTowLFN0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMoeXQpP1plOjA7bGV0IG5uPV8udG9wLVcudG9wLShfLnRvcD09PVcu'@;
put 'dG9wPzA6MSktRXQsdm49MDt2bj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC1fLmxlZnQtVC1pdC0xK1N0Ol8ubGVmdC1XLmxlZnQtMS1TdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeXQpJiYobm4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zm'@;
put 'c2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyh5dCkmJih2bis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgTm49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLGNyPXRoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLERyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLGxpPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJ'@;
put 'bmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KE5uJiZjcjw9MHx8Y3I9PT1saSkmJihubis9MSksRHI8PTAmJih2bis9MSk7Y29uc3QgbXI9aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLEVpPWguY29sdW1u'@;
put 'c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixacj1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxGbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxGcj1MYyh0aGlzLmhvdC5yb290RG9jdW1lbnQpLFFuPWEub2Zmc2V0VG9w'@;
put 'K21yLUZuO2xldCBNcj0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IFlyPWEub2Zmc2V0TGVmdDtNcj1Zcj49MD9ldC5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhZciksTXIrPUVpLVpyLVR9ZWxzZSBNcj1hLm9mZnNldExlZnQrRWktWnI7Y29uc3QgX3I9enAodGhpcy5U'@;
put 'RCx0aGlzLmhvdC5yb290V2luZG93KSx2dD10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixPdD1wYXJzZUludChfclt2dF0sMTApPjA/MDoxLGNuPXBhcnNlSW50KF9yLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSxFbj13YShhKStPdCxPbj1h'@;
put 'bChhKStjbixKbj1kdGUocGUpP0ZyOjAsUHI9aHRlKHdlKT9GcjowLE9yPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoTXIpLUpuK090O3JldHVybnt0b3A6bm4sc3RhcnQ6dm4saGVpZ2h0Ok9uLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGlt'@;
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 'e2lmKDEmYSYmUm8oaUllLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuY29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6'@;
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 'bnN0YW5jZS5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJktsKFcsXy5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPVd9YmVnaW5F'@;
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 'c3QgbD12Zyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSxhPWw9PT10aGlzLmhvdC5yb290V2luZG93LGQ9dGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7aWYoYXx8IWEmJihkfHwiaG9yaXpvbnRhbCI9PT1kKSlyZXR1cm4hMTtjb25zdCBoPXFsKHRoaXMuVEVY'@;
put 'VEFSRUEpLGY9YWwodGhpcy5URVhUQVJFQSksXz10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksVD1sLnNjcm9sbFRvcCxXPWFsKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpLGllPXFsKGwpLHBlPWgudG9wLWllLnRvcC1XK1Qsd2U9bC5zY3JvbGxIZWlnaHQtcGUtVy1mLEVlPV8+'@;
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 'TG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT09PV9sKF8udW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT9XLmNoZWNrZWQ9ITE6cGMoZik/cGkoVywibm9WYWx1ZSIpOihXLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHBpKFcsd0llKSxwZT0hMCksVy5zZXRBdHRy'@;
put 'aWJ1dGUoeTcsYSksVy5zZXRBdHRyaWJ1dGUodzcsZCksIXBlJiZpZSl7bGV0IGl0PSIiO2lmKGllLnZhbHVlKWl0PSJmdW5jdGlvbiI9PXR5cGVvZiBpZS52YWx1ZT9pZS52YWx1ZS5jYWxsKHRoaXMsYSxkLGgsZik6aWUudmFsdWU7ZWxzZSBpZihpZS5wcm9wZXJ0eSl7Y29uc3QgeXQ9Yy5n'@;
put 'ZXREYXRhQXRSb3dQcm9wKGEsaWUucHJvcGVydHkpO2l0PW51bGwhPT15dD95dDoiIn1jb25zdCBldD1mdW5jdGlvbiB4SWUoYyxsLGEpe2NvbnN0IGQ9Yy5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO3JldHVybiBkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8iZnVs'@;
put 'bFdpZHRoIjoiIiksZC5hcHBlbmRDaGlsZChjLmNyZWF0ZVRleHROb2RlKGwpKSxkLmNsb25lTm9kZSghMCl9KFQsaXQsITAhPT1pZS5zZXBhcmF0ZWQpOyJiZWZvcmUiPT09aWUucG9zaXRpb24/aWUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKGV0KSxsLmFwcGVuZENoaWxkKFcpKTooZXQu'@;
put 'YXBwZW5kQ2hpbGQoVyksVz1ldCk6KCFpZS5wb3NpdGlvbnx8ImFmdGVyIj09PWllLnBvc2l0aW9uKSYmKGllLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChXKSxsLmFwcGVuZENoaWxkKGV0KSk6KGV0Lmluc2VydEJlZm9yZShXLGV0LmZpcnN0Q2hpbGQpLFc9ZXQpKX1mdW5jdGlvbiBFZSgp'@;
put 'e2xldCBpdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGV0PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldC5sZW5ndGg7eXQrKyl7Y29uc3R7cm93OkV0LGNvbDpTdH09ZXRbeXRdLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkse3JvdzpKdCxjb2w6bm59PWV0W3l0XS5nZXRCb3R0b21FbmRDb3JuZXIoKSx2bj1bXTtmb3IobGV0IE5uPUV0O05uPD1KdDtObis9MSlmb3IobGV0IGNyPVN0O2NyPD1ubjtjcis9MSl7Y29uc3QgRHI9Yy5nZXRDZWxsTWV0YShObixjcik7aWYoImNoZWNrYm94IiE9'@;
put 'PURyLnR5cGUpcmV0dXJuO2lmKCEwPT09RHIucmVhZE9ubHkpY29udGludWU7dHlwZW9mIERyLmNoZWNrZWRUZW1wbGF0ZT4idSImJihEci5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiBEci51bmNoZWNrZWRUZW1wbGF0ZT4idSImJihEci51bmNoZWNrZWRUZW1wbGF0ZT0hMSk7Y29uc3Qg'@;
put 'X2k9Yy5nZXREYXRhQXRDZWxsKE5uLGNyKTshMT09PWl0P1tEci5jaGVja2VkVGVtcGxhdGUsRHIuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCldLmluY2x1ZGVzKF9pKT92bi5wdXNoKFtObixjcixEci51bmNoZWNrZWRUZW1wbGF0ZV0pOltEci51bmNoZWNrZWRUZW1wbGF0ZSxEci51bmNo'@;
put 'ZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpLG51bGwsdm9pZCAwXS5pbmNsdWRlcyhfaSkmJnZuLnB1c2goW05uLGNyLERyLmNoZWNrZWRUZW1wbGF0ZV0pOnZuLnB1c2goW05uLGNyLERyLnVuY2hlY2tlZFRlbXBsYXRlXSl9dm4ubGVuZ3RoPjAmJmMuc2V0RGF0YUF0Q2VsbCh2bil9fWZ1bmN0'@;
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 'aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5ob3Qucm9vdERvY3VtZW50LGQ9cWwodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK2Fs'@;
put 'KHRoaXMuaG90LnRhYmxlKSxoPXFsKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0fHxhLnNjcm9sbExlZnQpK3dhKHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0'@;
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/MDpwYyhoKT9wYyhmKT8wOl8mJiJhc2MiPT09Yz8tMToxOnBjKGYpP18mJiJhc2MiPT09Yz8xOi0xOmlzTmFOKGgpJiYhaXNOYU4oZik/ImFzYyI9PT1jPzE6LTE6IWlzTmFOKGgp'@;
put 'JiZpc05hTihmKXx8KGlzTmFOKGgpfHxpc05hTihmKXx8KGg9cGFyc2VGbG9hdChoKSxmPXBhcnNlRmxvYXQoZikpLGg8Zik/ImFzYyI9PT1jPy0xOjE6aD5mPyJhc2MiPT09Yz8xOi0xOjB9fWNvbnN0e3JlZ2lzdGVyOktrLGdldEl0ZW06RHJlLGhhc0l0ZW06UUxlfT1wZCgic29ydGluZy5j'@;
put 'b21wYXJlRnVuY3Rpb25GYWN0b3J5Iikse3JlZ2lzdGVyOklyZSxnZXRJdGVtOmVSZX09cGQoInNvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yIik7ZnVuY3Rpb24gTHJlKGMpe3JldHVybiBRTGUoYyk/RHJlKGMpOkRyZSgiZGVmYXVsdCIpfUtrKCJudW1lcmljIixmdW5jdGlvbiBHTGUoYyxs'@;
put 'LGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSxfPXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOlR9PWE7aWYoZj09PV98fGlzTmFOKGYpJiZpc05hTihfKSlyZXR1cm4gMDtpZihUKXtpZihwYyhkKSlyZXR1cm4iYXNjIj09PWM/LTE6MTtpZihwYyho'@;
put 'KSlyZXR1cm4iYXNjIj09PWM/MTotMX1yZXR1cm4gaXNOYU4oZik/MTppc05hTihfKT8tMTpmPF8/ImFzYyI9PT1jPy0xOjE6Zj5fPyJhc2MiPT09Yz8xOi0xOjB9fSksS2soImNoZWNrYm94IixmdW5jdGlvbiBxTGUoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hl'@;
put 'Y2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbihfLFQpe2NvbnN0IFc9cGMoXyksaWU9cGMoVCkscGU9Vz9oOl8sd2U9aWU/aDpULEVlPXBlPT09aHx8cGU9PT1kLFplPXdlPT09aHx8d2U9PT1kO2lmKCExPT09Zil7aWYoVyYmITE9PT1pZSlyZXR1cm4g'@;
put 'MTtpZighMT09PVcmJmllKXJldHVybi0xfXJldHVybiExPT09RWUmJlplPyJhc2MiPT09Yz8tMToxOkVlJiYhMT09PVplPyJhc2MiPT09Yz8xOi0xOiExPT09RWUmJiExPT09WmU/QXJlKGMsbCxhKShfLFQpOnBlPT09aCYmd2U9PT1kPyJhc2MiPT09Yz8tMToxOnBlPT09ZCYmd2U9PT1oPyJh'@;
put 'c2MiPT09Yz8xOi0xOjB9fSksS2soImRhdGUiLGZ1bmN0aW9uIFhMZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4gMDtpZihwYyhkKSlyZXR1cm4gcGMoaCk/MDpmJiYiYXNjIj09PWM/LTE6MTtpZihwYyhoKSly'@;
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/YWwoeXQpOjAse2xlZnQ6bm4sdG9wOnZuLHdpZHRoOk5uLGhlaWdodDpjcn09eXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOkRyLGhlaWdodDpfaX09dGhpcy5lZGl0b3IuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOmxpLGlubmVySGVpZ2h0Om1yfT10aGlz'@;
put 'LmhvdC5yb290V2luZG93LEVpPXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7bGV0IFpyPW5uK1plLnNjcm9sbFgrU3QsRm49dm4rWmUuc2Nyb2xsWStKdDt0aGlzLmhvdC5pc1J0bCgpJiYoWnItPURyK1N0KSx0aGlzLmhvdC5pc0x0cigpJiZubitObitEcj5saT9acj1u'@;
put 'bitaZS5zY3JvbGxYLURyLTE6dGhpcy5ob3QuaXNSdGwoKSYmWnI8LShFaS5zY3JvbGxXaWR0aC1FaS5jbGllbnRXaWR0aCkmJihacj1ubitaZS5zY3JvbGxYK1N0KzEpLHZuK19pPm1yJiYoRm4tPV9pLWNyKzEpLHRoaXMuZWRpdG9yLnNldFBvc2l0aW9uKFpyLEZuKSx0aGlzLmVkaXRvci5z'@;
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/ZjpfXTtUfHwoVD1mKSx1cyhmKT9L'@;
put 'bChULGYpOiJzdHJpbmciPT10eXBlb2YgVCYmKFQ9e25hbWU6VH0pLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9XyksZC5wdXNoKFQpfSk6RG4oaCwoZixfKT0+e2xldCBUPWFbZl07IVQmJlZyZS5pbmRleE9mKGYpPj0wfHwoVHx8KFQ9e25hbWU6ZixrZXk6YCR7X31gfSksdXMoZikmJktsKFQs'@;
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 'ZU9wdGlvbnMobCl7bGV0IGE9V3UodGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGQ9bmV3IERhdGU7cmV0dXJuIGE9S2woV3UoT2ouREVGQVVMVF9PUFRJT05TKSxhKSxhPUtsKGEsbCksYS5maWxlbmFtZT1jTihhLmZpbGVuYW1lLHtZWVlZOmQuZ2V0RnVsbFllYXIo'@;
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 'dGlvbiBPZyhjKXtpZighVnlbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBWeVtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIFhsKGMsbCxhKXthLmtleT1jLFZ5W2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0'@;
put 'IEdjPSJub25lIjtYbChHYyxmdW5jdGlvbiAkT2UoKXtyZXR1cm4hMH0se25hbWU6TGssaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgQnk9ImVtcHR5IjtYbChCeSxmdW5jdGlvbiBxT2UoYyl7cmV0dXJuIHBjKGMudmFsdWUpfSx7bmFtZTpsQixpbnB1dHNDb3VudDow'@;
put 'LHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB5QT0ibm90X2VtcHR5IjtYbCh5QSxmdW5jdGlvbiBLT2UoYyxsKXtyZXR1cm4hSnAoQnksbCkoYyl9LHtuYW1lOmNCLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGp5PSJlcSI7WGwoanksZnVuY3Rpb24gWE9lKGMsbCl7'@;
put 'bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpPT09X2woYSl9LHtuYW1lOnVCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHdBPSJuZXEiO1hsKHdBLGZ1bmN0aW9uIEpPZShjLGwpe3JldHVybiFKcChqeSxs'@;
put 'KShjKX0se25hbWU6ZEIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksWGwoImd0IixmdW5jdGlvbiBRT2UoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+ZH0se25hbWU6bUIsaW5wdXRz'@;
put 'Q291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksWGwoImd0ZSIsZnVuY3Rpb24gZVBlKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPj1kfSx7bmFtZTp2QixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRv'@;
put 'cnM6ITB9KSxYbCgibHQiLGZ1bmN0aW9uIHRQZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTpfQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxYbCgibHRlIixmdW5j'@;
put 'dGlvbiBuUGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOmJCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEZqPSJkYXRlX2FmdGVyIjtYbChGaixmdW5j'@;
put 'dGlvbiByUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6Q0IsaW5wdXRzQ291bnQ6MSxzaG93'@;
put 'T3BlcmF0b3JzOiEwfSk7Y29uc3QgSGo9ImRhdGVfYmVmb3JlIjtYbChIaixmdW5jdGlvbiBpUGUoYyxsKXtsZXRbYV09bDtjb25zdCBkPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9S28oYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFs'@;
put 'aWQoKSkmJmQuZGlmZihoKTw9MH0se25hbWU6U0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQ0E9ImJldHdlZW4iO1hsKENBLGZ1bmN0aW9uIG9QZShjLGwpe2xldFthLGRdPWwsaD1hLGY9ZDtpZigibnVtZXJpYyI9PT1jLm1ldGEudHlwZSl7Y29uc3QgXz1wYXJz'@;
put 'ZUZsb2F0KGgsMTApLFQ9cGFyc2VGbG9hdChmLDEwKTtoPU1hdGgubWluKF8sVCksZj1NYXRoLm1heChfLFQpfWVsc2UgaWYoImRhdGUiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IF89SnAoSGosW2ZdKSxUPUpwKEZqLFtoXSk7cmV0dXJuIF8oYykmJlQoYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMu'@;
put 'dmFsdWU8PWZ9LHtuYW1lOnlCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGNpZT0ibm90X2JldHdlZW4iO1hsKGNpZSxmdW5jdGlvbiBzUGUoYyxsKXtyZXR1cm4hSnAoQ0EsbCkoYyl9LHtuYW1lOndCLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2Nv'@;
put 'bnN0IHVpZT0iYmVnaW5zX3dpdGgiO1hsKHVpZSxmdW5jdGlvbiBhUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gX2woYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChfbChhKSl9LHtuYW1lOmhCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczoh'@;
put 'MH0pLFhsKCJlbmRzX3dpdGgiLGZ1bmN0aW9uIGxQZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChfbChhKSl9LHtuYW1lOmZCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IE5q'@;
put 'PSJjb250YWlucyI7WGwoTmosZnVuY3Rpb24gY1BlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YoX2woYSkpPj0wfSx7bmFtZTpwQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBo'@;
put 'aWU9Im5vdF9jb250YWlucyI7WGwoaGllLGZ1bmN0aW9uIHVQZShjLGwpe3JldHVybiFKcChOaixsKShjKX0se25hbWU6Z0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZmllPSJkYXRlX3RvbW9ycm93IjtYbChmaWUsZnVuY3Rpb24gZFBlKGMpe2NvbnN0IGw9S28o'@;
put 'Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOnhCLGlucHV0c0NvdW50OjB9KTtjb25zdCBwaWU9ImRhdGVfdG9kYXkiO1hsKHBpZSxmdW5jdGlv'@;
put 'biBoUGUoYyl7Y29uc3QgbD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShLbygpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOk1CLGlucHV0c0NvdW50OjB9KTtjb25zdCBnaWU9ImRhdGVfeWVzdGVyZGF5IjtYbChnaWUsZnVu'@;
put 'Y3Rpb24gZlBlKGMpe2NvbnN0IGw9S28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6RUIsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IHZpZT17bnVt'@;
put 'ZXJpYzpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsImd0IiwiZ3RlIiwibHQiLCJsdGUiLENBLGNpZV0sdGV4dDpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsdWllLCJlbmRzX3dpdGgiLGdzLE5qLGhpZV0sZGF0ZTpbR2MsZ3MsQnkseUEsZ3Msanksd0EsZ3MsSGosRmosQ0EsZ3MsZmllLHBp'@;
put 'ZSxnaWVdfSxWaj0iYnVpbHQiLEJqPSJidWlsZGluZyIsX2llPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgU0F7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiIiLHZh'@;
put 'bHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLm9wdGlvbnM9S2woU0EuREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9j'@;
put 'dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKSx0aGlzLmJ1aWxkU3RhdGU9bnVsbH1zZXRWYWx1ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9u'@;
put 'cy52YWx1ZX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1Caj90aGlzLl9lbGVtZW50OnRoaXMuYnVpbGRTdGF0ZT09PVZqPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9QmosdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT1W'@;
put 'aix0aGlzLl9lbGVtZW50KX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PVZqfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoJHUpP3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2Nv'@;
put 'bnN0IGw9KGEsZCk9Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPUJqKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZwaSh0aGlzLl9lbGVt'@;
put 'ZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpRG4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGE9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYS5lbGVtZW50KSk7ZWxzZSBpZih0aGlzLm9wdGlvbnMud3JhcEl0KXtjb25zdCBhPXRoaXMu'@;
put 'aG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTtkcyh0aGlzLm9wdGlvbnMsKGQsaCk9Pnt2b2lkIDAhPT1hW2hdJiYiY2xhc3NOYW1lIiE9PWgmJiJ0YWdOYW1lIiE9PWgmJiJjaGlsZHJlbiIhPT1oJiYoYVtoXT10aGlzLnRyYW5zbGF0ZUlmUG9z'@;
put 'c2libGUoZCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSxEbihfaWUsZD0+bChhLGQpKX1lbHNlIERuKF9pZSxhPT5sKHRoaXMuX2VsZW1lbnQsYSkpfXVwZGF0ZSgpe31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1l'@;
put 'bnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50'@;
put 'Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19VGEoU0EsTzApO2NvbnN0IFFwPVNBLE1BPW5ldyBXZWFrTWFwO2NsYXNzIGpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBX'@;
put 'dSh7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKGpqLkRFRkFVTFRTLGEpKSxNQS5zZXQodGhpcyx7fSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJj'@;
put 'bGljayIsKCk9PnRoaXMub25DbGljaygpKSx0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PnRoaXMub25LZXl1cChsKSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9TUEuZ2V0KHRoaXMpLGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuaW5w'@;
put 'dXQ9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkLHBpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLHBpKGEsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBs'@;
put 'PU1BLmdldCh0aGlzKS5pbnB1dDtsLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsbC5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxsLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpfWZv'@;
put 'Y3VzKCl7dGhpcy5pc0J1aWx0KCkmJk1BLmdldCh0aGlzKS5pbnB1dC5mb2N1cygpfW9uQ2xpY2soKXt9b25LZXl1cChsKXt0aGlzLm9wdGlvbnMudmFsdWU9bC50YXJnZXQudmFsdWV9fWNvbnN0IEk3PWpqLHhBPW5ldyBXZWFrTWFwO2NsYXNzIHpqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBE'@;
put 'RUZBVUxUUygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Iix3cmFwSXQ6ITF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsS2woemouREVGQVVMVFMsYSkpLHhBLnNldCh0aGlzLHt9KSx0aGlzLm1lbnU9bnVsbCx0aGlzLml0ZW1zPVtdLHRoaXMucmVnaXN0ZXJIb29rcygp'@;
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 'KXtyZXR1cm4gV3Uoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xhc3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKFdqLkRFRkFVTFRTLGEpKSxrQS5zZXQodGhpcyx7fSl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9'@;
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 'fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxLbChLai5ERUZBVUxUUyxhKSkscWouc2V0KHRoaXMse30pfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxxai5nZXQodGhpcykubGluaz10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGR9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihxai5nZXQodGhpcyku'@;
put 'bGluay50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9fWNvbnN0IE1pZT1LaixJUGU9bmV3IFdlYWtNYXA7Y2xhc3MgWGogZXh0ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHtjbGFzc05hbWU6Imh0'@;
put 'VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsS2woWGouREVGQVVMVFMsYSkpLElQZS5zZXQodGhpcyx7fSksdGhpcy5zZWFyY2hJbnB1dD1uZXcgSTcodGhpcy5ob3Qse3BsYWNlaG9sZGVyOk9CLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2Vs'@;
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 'Y2VEYXRhQXRDZWxsKGEpfX1jb25zdCB4aWU9WGosUGc9ImJ5X3ZhbHVlIjtYbChQZyxmdW5jdGlvbiBQUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xldFtsXT1jO3JldHVy'@;
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 'LXl0KzE7Zm9yKGxldCB2bj0wO3ZuPGl0Lmxlbmd0aDt2bis9MSlmb3IobGV0IE5uPTA7Tm48aXRbdm5dLmxlbmd0aDtObis9MSl7Y29uc3QgY3I9aXRbdm5dW05uXSxEcj12biVKdCxfaT1ObiVubixsaT10aGlzLmhvdC5nZXRDZWxsTWV0YShEcixfaSk7ZXooY3IsbGkudHlwZSkmJihjci5z'@;
put 'dGFydHNXaXRoKCInIik/aXRbdm5dW05uXT1jci5zbGljZSgxKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoRHIsX2ksdGhpcy5zaGVldElkKSYmKGl0W3ZuXVtObl09ZUZlKGNyLGxpLmRhdGVGb3JtYXQpKSl9cmV0dXJuIGl0fW9uQmVmb3JlTG9hZERhdGEobCxhKXsoYXJndW1lbnRz'@;
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 'b3dIZWFkZXJzPSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzLFcuY291bnRDb2xzPXRoaXMuaG90LmNvdW50Q29scygpLFcuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxXLnJvb3RFbGVtZW50T2Zmc2V0PXFsKHRo'@;
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 'cm9vdEVsZW1lbnQsaWU9cWwoVykscGU9dmcoVyk7bGV0IEVlO0VlPXRoaXMuaG90LnJvb3RXaW5kb3c9PT1wZT9wZS5zY3JvbGxZOnBlLnNjcm9sbFRvcDtjb25zdCBpdD1sLnRhcmdldC5ldmVudFBhZ2VZLShpZS50b3AtRWUpK18uaG9sZGVyLnNjcm9sbFRvcCxldD1fLmhpZGVyLm9mZnNl'@;
put 'dEhlaWdodCx5dD1fLlRCT0RZLm9mZnNldFRvcCxFdD10aGlzLmJhY2tsaWdodC5nZXRPZmZzZXQoKS50b3AsU3Q9dGhpcy5iYWNrbGlnaHQuZ2V0U2l6ZSgpLmhlaWdodCxKdD1ULm9mZnNldEhlaWdodC8yLG5uPVQub2Zmc2V0SGVpZ2h0O2xldCB2bj10aGlzLmhvdC52aWV3LlRIRUFELm9m'@;
put 'ZnNldEhlaWdodCt0aGlzLmdldFJvd3NIZWlnaHQoMCxhLnJvdy0xKTtjb25zdCBObj1pdD49dm4rSnQ7dGhpcy5pc0ZpeGVkUm93VG9wKGEucm93KSYmKHZuKz1fLmhvbGRlci5zY3JvbGxUb3ApLGEucm93PDA/bC50YXJnZXQucm93PWQ+MD9kLTE6ZDpObj8obC50YXJnZXQucm93PWEucm93'@;
put 'KzEsdm4rPTA9PT1hLnJvdz9ubi0xOm5uKTpsLnRhcmdldC5yb3c9YS5yb3c7bGV0IGNyPWl0LERyPXZuO2l0K1N0K0V0Pj1ldD9jcj1ldC1TdC1FdDppdCtFdDx5dCYmKGNyPXl0K01hdGguYWJzKEV0KSksdm4+PWV0LTEmJihEcj1ldC0xKSx0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihj'@;
put 'ciksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24oRHIpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+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 'XyxkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOkVlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3VycmVudEZpbGxEYXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLEtsKHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxm'@;
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 'KSkpLFh5KHRoaXMsVmcsdzIodGhpcyxKZikubGVuZ3RoKX1nZXREYXRhKCl7cmV0dXJuIHcyKHRoaXMsSmYpfW1lcmdlV2l0aChsKXtEbihsLGE9PntsZXR7cm93OmQsY29sOmgsLi4uZn09YTtjb25zdCBfPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoZCxoKTtudWxsIT09XyYmS2woXyxmLHBv'@;
put 'ZSl9KX1tYXAobCl7RG4odzIodGhpcyxKZiksYT0+e0RuKGEsZD0+e2NvbnN0IGg9bCh7Li4uZH0pO3VzKGgpJiZLbChkLGgscG9lKX0pfSl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZDtpZihsPj13Mih0aGlzLFZnKXx8bDwwKXJldHVybiBudWxsO2NvbnN0IGg9dzIodGhpcyxKZilb'@;
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 'LCJnZXQiKSl9ZnVuY3Rpb24geG9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IEVvZT0ibmVzdGVkSGVhZGVycyI7dmFyIEpsPW5l'@;
put 'dyBXZWFrTWFwLHM0PW5ldyBXZWFrTWFwO2NsYXNzIHJOZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxNb2UodGhpcyxKbCx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IFdIZX0pLE1vZSh0aGlzLHM0LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksU29lKHRo'@;
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 'bHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7U2wodGhpcyxKbCkuc2V0Q29sdW1uc0xpbWl0KHRoaXMuaG90LmNvdW50Q29scygpKSxB'@;
put 'cnJheS5pc0FycmF5KGwpJiYodGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzPVNsKHRoaXMsSmwpLnNldFN0YXRlKGwpKSx0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMmJkdhKEFhYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIHNldHVwIGNvbnRhaW5zIG92ZXJsYXBwaW5n'@;
put 'IGhlYWRlcnMuIFRoaXMga2luZCBvZiBjb25maWd1cmF0aW9uXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5gKSx0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdl'@;
put 'ZFZhbHVlcygpLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPSEwPT09YT8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7U2wodGhpcyxKbCkudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihoLGQpfSksIVNsKHRoaXMsczQpJiZ0aGlzLmVuYWJsZWQmJmpBKHRoaXMsczQsdGhpcy5ob3QuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuY3JlYXRlQ2hhbmdlc09ic2VydmVyKCJoaWRpbmciKS5zdWJzY3JpYmUoYT0+e2EuZm9yRWFjaChkPT57bGV0e29wOmgsaW5kZXg6ZixuZXdWYWx1ZTpffT1kO2lmKCJyZXBsYWNlIj09PWgpe2NvbnN0IFQ9ITA9PT1fPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1u'@;
put 'IjtTbCh0aGlzLEpsKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKFQsZil9fSksdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCl9KSksdGhpcy5naG9zdFRhYmxlLnNldExheWVyc0NvdW50KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkuYnVpbGRXaWR0aHNNYXAoKSxzdXBlci51cGRh'@;
put 'dGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbHNwYW5zKCksU2wodGhpcyxKbCkuY2xlYXIoKSxTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRl'@;
put 'TWFuYWdlcigpe3JldHVybiBTbCh0aGlzLEpsKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBTbCh0aGlzLEpsKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0dXJuIFNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lm'@;
put 'KCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxoPWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3Zlcmxh'@;
put 'eXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgXz0wO188YTtfKyspe2NvbnN0IFQ9ZC5jaGlsZE5vZGVzW19dO2lmKCFUKWJyZWFrO2NvbnN0IFc9aC5j'@;
put 'aGlsZE5vZGVzW19dLGllPWY/Zi5jaGlsZE5vZGVzW19dOm51bGw7Zm9yKGxldCBwZT0wLHdlPVQuY2hpbGROb2Rlcy5sZW5ndGg7cGU8d2U7cGUrKylULmNoaWxkTm9kZXNbcGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFQuY2hpbGROb2Rlc1twZV0sImhpZGRlbkhlYWRlciIp'@;
put 'LFcmJlcuY2hpbGROb2Rlc1twZV0mJihXLmNoaWxkTm9kZXNbcGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKFcuY2hpbGROb2Rlc1twZV0sImhpZGRlbkhlYWRlciIpKSxmJiZpZSYmaWUuY2hpbGROb2Rlc1twZV0mJihpZS5jaGlsZE5vZGVzW3BlXS5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'ImNvbHNwYW4iKSxXbyhpZS5jaGlsZE5vZGVzW3BlXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJuKGgsZik9Pnt2YXIgXztj'@;
put 'b25zdHtjb2x1bW5JbmRleE1hcHBlcjpULHZpZXc6V309dGhpcy5ob3Q7bGV0IGllPVQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxsPT09aWUmJihpZT1oKSxmLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFdvKGYsImhpZGRlbkhlYWRlciIpO2NvbnN0e2NvbHNwYW46'@;
put 'cGUsaXNIaWRkZW46d2UsaXNQbGFjZWhvbGRlcjpFZX09bnVsbCE9PShfPVNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGwsaWUpKSYmdm9pZCAwIT09Xz9fOntsYWJlbDoiIn07aWYoRWV8fHdlKXBpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYocGU+MSl7dmFyIFplLGl0O2NvbnN0'@;
put 'e3d0T3ZlcmxheXM6ZXR9PVcuX3d0LHl0PW51bGw9PT0oWmU9ZXQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8dm9pZCAwPT09WmU/dm9pZCAwOlplLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksRXQ9bnVsbD09PShpdD1ldC5pbmxpbmVTdGFydE92ZXJsYXkpfHx2b2lk'@;
put 'IDA9PT1pdD92b2lkIDA6aXQuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKSxTdD15dHx8RXQ/TWF0aC5taW4ocGUsZC1oKTpwZTtTdD4xJiZmLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsU3QpfXRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGllLGYsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKX19Z2V0Q29sdW1uSGVhZGVyVmFsdWUobCxhKXt2YXIgZDtjb25zdHtpc0hpZGRlbjpoLGlzUGxhY2Vob2xkZXI6Zn09bnVsbCE9PShkPVNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGEsbCkpJiZ2b2lkIDAh'@;
put 'PT1kP2Q6e307cmV0dXJuIGZ8fGg/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwsYSl9b25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIobCxhLGQpe2NvbnN0IGg9U2wodGhpcyxKbCkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCk7aWYoIWgpcmV0dXJuIGw7Y29uc3R7Y2xhc3NO'@;
put 'YW1lczpmLGNvbHVtbkN1cnNvcjpfLHNlbGVjdGlvblR5cGU6VCxzZWxlY3Rpb25XaWR0aDpXfT1kLHtpc1Jvb3Q6aWUsY29sc3BhbjpwZX09U2wodGhpcyxKbCkuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKTtpZihUPT09eXkpe2lmKCFpZSlyZXR1cm4gaC5jb2x1bW5JbmRleH1lbHNlIFQ9PT1Q'@;
put 'ayYmKHBlPlctX3x8IWllKSYmKGYubGVuZ3RoPTApO3JldHVybiBsfW9uQmVmb3JlQ29weShsLGEsZCl7bGV0e2NvbHVtbkhlYWRlcnNDb3VudDpofT1kO2lmKDAhPT1oKWZvcihsZXQgXz0wO188YS5sZW5ndGg7XysrKXtjb25zdHtzdGFydFJvdzpULHN0YXJ0Q29sOlcsZW5kUm93OmllLGVu'@;
put 'ZENvbDpwZX09YVtfXSx3ZT1pZS1UKzE7aWYoVD49MHx8MT09Vy1wZSsxKWJyZWFrO2ZvcihsZXQgWmU9VztaZTw9cGU7WmUrKylmb3IobGV0IGl0PVQ7aXQ8PWllO2l0Kyspe3ZhciBmO2NvbnN0IGV0PXdlK2l0LHl0PVplLVc7MCE9PXl0JiYhMT09PShudWxsPT09KGY9U2wodGhpcyxKbCku'@;
put 'Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGl0LFplKSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuaXNSb290KSYmKGxbZXRdW3l0XT0iIil9fX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKSYmKGguY29sdW1uPSEwKX1v'@;
put 'bkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7Y29uc3QgZD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtpZighZClyZXR1cm47Y29uc3R7c2VsZWN0aW9uOmh9PXRoaXMuaG90LGY9aC5pc1NlbGVjdGVkKCk/aC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51'@;
put 'bGwsXz1bXSx7Y29sdW1uSW5kZXg6VCxvcmlnQ29sc3BhbjpXfT1kLGllPSFoLmluSW5TZWxlY3Rpb24oYSk7bC5zaGlmdEtleSYmZj9hLmNvbDxmLmZyb20uY29sP18ucHVzaChmLmdldFRvcEVuZENvcm5lcigpLmNvbCxULGEucm93KTpfLnB1c2goYS5jb2w+Zi5mcm9tLmNvbD9mLmdldFRv'@;
put 'cFN0YXJ0Q29ybmVyKCkuY29sOlQsVCtXLTEsYS5yb3cpOihmayhsKXx8VXAobCkmJmllKSYmXy5wdXNoKFQsVCtXLTEsYS5yb3cpLGguc2VsZWN0Q29sdW1ucyguLi5fKX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpKXJl'@;
put 'dHVybjtjb25zdCBmPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGEpO2lmKCFmKXJldHVybjtjb25zdHtjb2x1bW5JbmRleDpfLG9yaWdDb2xzcGFuOlR9PWYsVz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGllPVcuZ2V0VG9wU3RhcnRDb3JuZXIoKSxwZT1X'@;
put 'LmdldEJvdHRvbUVuZENvcm5lcigpLHtmcm9tOndlfT1XO2guY29sdW1uPSEwLGguY2VsbD0hMDtjb25zdCBFZT1bXTthLmNvbDx3ZS5jb2w/RWUucHVzaChwZS5jb2wsXyk6RWUucHVzaChhLmNvbD53ZS5jb2w/aWUuY29sOl8sXytULTEpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoLi4uRWUp'@;
put 'fW9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMobCl7bC5sZW5ndGg9MDtmb3IobGV0IGE9MDthPFNsKHRoaXMsSmwpLmdldExheWVyc0NvdW50KCk7YSsrKWwucHVzaCh0aGlzLmhlYWRlclJlbmRlcmVyRmFjdG9yeShhKSl9b25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92'@;
put 'ZXJyaWRlKGwpe2NvbnN0IGE9U2wodGhpcyxKbCkuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgZD1sLnN0YXJ0Q29sdW1uLGg9ISFhO2ZvcihsZXQgZj0wO2Y8YTtmKyspe2NvbnN0IF89U2wodGhpcyxKbCkuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoZixsLnN0YXJ0Q29sdW1uKSxUPXRoaXMuaG90'@;
put 'LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoXyk7aWYoXz49MCYmKGg9ITEpLEd1KFQpJiZUPGwuc3RhcnRDb2x1bW4pe2Q9VDticmVha319bC5zdGFydENvbHVtbj1oP1NsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGQpLmNvbHVtbklu'@;
put 'ZGV4OmR9b25Nb2RpZnlDb2xXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5naG9zdFRhYmxlLmdldFdpZHRoKGEpO3JldHVybiBsPmQ/bDpkfW9uTW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUobCxhLGQpe3ZhciBoO2NvbnN0e2xhYmVsOmZ9PW51bGwhPT0oaD1TbCh0aGlzLEpsKS5nZXRIZWFkZXJU'@;
put 'cmVlTm9kZURhdGEoZCxhKSkmJnZvaWQgMCE9PWg/aDp7bGFiZWw6IiJ9O3JldHVybiBmfW9uSW5pdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9b25BZnRlckxvYWREYXRhKGwsYSl7YXx8dGhpcy51cGRhdGVQbHVnaW4oKX1kZXN0cm95KCl7akEodGhpcyxKbCxudWxsKSxudWxsIT09U2wodGhp'@;
put 'cyxzNCkmJihTbCh0aGlzLHM0KS51bnN1YnNjcmliZSgpLGpBKHRoaXMsczQsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIFNsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0'@;
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 'bFBdLGltcG9ydHM6W29vLCRsLGRjLF91LEMyXX0pLGN9KSgpLHR3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgp'@;
put 'LExvZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbF19KSxjfSkoKSxCNz0oKCk9PntjbGFzcyBje31yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbywkbCxfdSxkYyxWNyx0dyxDMixMb2VdfSksY30pKCk7dmFyIEh6LE56LFZ6LEJ6LGp6LGdjPUYoODM0MTcpLHQzPUYoMTIw'@;
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/ZXQuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCBEcj0wO0RyPEV0LnZhbHVlcy5sZW5ndGg7RHIrKyl7aWYoInN0cmluZyI9PXR5cGVvZiBFdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBFdC52YWx1ZXNbRHJdLmZvcm1hdHRlZClFdC52YWx1ZT09PUpTT04uc3Ry'@;
put 'aW5naWZ5KEV0LnZhbHVlc1tEcl0uZm9ybWF0dGVkKSYmKFN0PUV0LnZhbHVlc1tEcl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IGxpPSJudW1iZXIiIT10eXBlb2YgRXQudmFsdWVzW0RyXS5mb3JtYXR0ZWQmJm51bGwhPT1FdC52YWx1ZXNbRHJdLmZvcm1hdHRlZD9FdC52YWx1ZXNbRHJdLmZv'@;
put 'cm1hdHRlZC50cmltKCk6RXQudmFsdWVzW0RyXS5mb3JtYXR0ZWQ7RXQudmFsdWU9PT1saSYmKFN0PUV0LnZhbHVlc1tEcl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PUV0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihFdC5v'@;
put 'cGVyYXRvcikmJihTdD0iIiksKCJDT05UQUlOUyI9PT1FdC5vcGVyYXRvcnx8IkxJS0UiPT09RXQub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1FdC5vcGVyYXRvcikmJihTdD1FdC52YWx1ZSl9aWYoU3R8fChTdD1FdC52YWx1ZSksRXQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdF'@;
put 'RU4iPT09RXQub3BlcmF0b3Ipe1N0PVtdLFN0LnB1c2goRXQudmFsdWVbMF0pLFN0LnB1c2goRXQudmFsdWVbMV0pO2ZvcihsZXQgRHI9MDtEcjxFdC52YWx1ZXMubGVuZ3RoO0RyKyspU3RbMF09PT1FdC52YWx1ZXNbRHJdLmZvcm1hdHRlZCYmKFN0WzBdPUV0LnZhbHVlc1tEcl0udW5mb3Jt'@;
put 'YXR0ZWQpLFN0WzFdPT09RXQudmFsdWVzW0RyXS5mb3JtYXR0ZWQmJihTdFsxXT1FdC52YWx1ZXNbRHJdLnVuZm9ybWF0dGVkKX1pZihFdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PUV0Lm9wZXJhdG9yfHwiTk9UIElOIj09PUV0Lm9wZXJhdG9yKSl7U3Q9W10sU3Q9RXQudmFs'@;
put 'dWU7Zm9yKGxldCBEcj0wO0RyPEV0LnZhbHVlcy5sZW5ndGg7RHIrKylTdFtEcl0mJlN0W0RyXS52YWw9PT1FdC52YWx1ZXNbRHJdLmZvcm1hdHRlZCYmKFN0W0RyXS52YWw9RXQudmFsdWVzW0RyXS51bmZvcm1hdHRlZCl9bGV0IEp0PUV0LnR5cGU7Y29uc3Qgbm49RXQudmFsdWVWYXJpYWJs'@;
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 'LGMuXHUwMjc1aW5qPW1pKHt9KSxjfSkoKTtjb25zdCBhQmU9bmV3IE1pKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gbEJlKCl7cmV0dXJuIEZpKExzKX19KSxjQmU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlst'@;
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 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSxhcihObyksYXIoVVZlKSxhcihiQmUpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBzVT1uZXcgTWkoIkNE'@;
put 'S19EUkFHX1BBUkVOVCIpLGFVPW5ldyBNaSgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBwc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNh'@;
put 'YmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hNChhKX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdy'@;
put 'b3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6WyJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCJdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6YVUsdXNlRXhpc3Rpbmc6Y31dKV19KSxjfSkoKTtj'@;
put 'b25zdCBnc2U9bmV3IE1pKCJDREtfRFJBR19DT05GSUciKTtsZXQgd0JlPTA7Y29uc3QgbXNlPW5ldyBNaSgiQ2RrRHJvcExpc3QiKTtsZXQgdnNlPSgoKT0+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 'Om1zZSx1c2VFeGlzdGluZzpjfV0pXX0pLGN9KSgpO2NvbnN0IGxVPW5ldyBNaSgiQ2RrRHJhZ0hhbmRsZSIpO2xldCBfc2U9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWE0KGEpLHRoaXMu'@;
put 'X3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBiZSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9wYXJlbnREcmFnPWR9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KHNVLDEyKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6'@;
put 'e2Rpc2FibGVkOlsiY2RrRHJhZ0hhbmRsZURpc2FibGVkIiwiZGlzYWJsZWQiXX0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOmxVLHVzZUV4aXN0aW5nOmN9XSldfSksY30pKCk7Y29uc3QgYnNlPW5ldyBNaSgiQ2RrRHJhZ1BsYWNlaG9sZGVyIikseXNlPW5ldyBNaSgi'@;
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 'YnNlLDUpLElvKGgsbFUsNSkpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuX3ByZXZpZXdUZW1wbGF0ZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5faGFuZGxlcz1mKX19LGhvc3RBdHRyczpbMSwiY2RrLWRy'@;
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 'LE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLHByKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1jb25zdCBUQmU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfX0sREJlPVsiKiJdO2xl'@;
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 'bGVjdG9yczpbWyJhcHAtYXV0b2NvbXBsZXRlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oa0JlLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXRFbGVtZW50PWguZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVzaXpl'@;
put 'IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNil9LGlucHV0czp7aW5wdXRJZDoiaW5wdXRJZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsYXV0b2NvbXBsZXRlOiJhdXRvY29tcGxl'@;
put 'dGUiLHRhYmluZGV4OiJ0YWJpbmRleCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7b25JbnB1dEtleWRvd246Im9uSW5wdXRLZXlkb3duIixvbklucHV0Q2hhbmdlOiJvbklucHV0Q2hhbmdlIix2'@;
put 'YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uTG9hZGluZ01vcmU6Im9uTG9hZGluZ01vcmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6REJlLGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1sxLCJhdXRvY29tcGxldGUtd3JhcHBlciIsMywia2V5ZG93biJdLFsidHlwZSIsInRleHQiLCJhdXRvY29t'@;
put 'cGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJ0YWJpbmRleCIsIjAiLDEsImlucHV0LXZhbCIsMywiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiXSxb'@;
put 'ImlucHV0IiwiIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsIm5nU3R5bGUiLCJpZCIsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiXSxbIm9wdGlvbnMiLCIiXSxbImRhdGEtdHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJu'@;
put 'Z0lmIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSx4dCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25NYWluS2V5ZG93bihmKX0pLG1lKDEsImlucHV0Iiwx'@;
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 'ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikub25DaGFuZ2VMYWJlbCgic2Vjb25kIikpfSksTmUoMykseWUoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxkcigidmFsdWUtdHlwZS1zZWxlY3RlZCIsInNlY29uZCI9PT1hLmxhYmVsU2VsZWN0ZWQpLENlKDEpLG9y'@;
put 'KGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBPQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsYWJlbCIsMykoMSwic3BhbiIsNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksTmUoMikseWUoKSxK'@;
put 'ZSgzLFJCZSw0LDMsIm5nLWNvbnRhaW5lciIsNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLENlKDEpLGRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09YS5sYWJl'@;
put 'bFNlbGVjdGVkKSxDZSgxKSxvcihhLmxhYmVsKSxDZSgxKSxSZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIFBCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImNsci1kYXRlLWNvbnRhaW5lciIpKDIsImlucHV0Iiw2KSx4dCgiY2xyRGF0ZUNoYW5nZSIs'@;
put 'ZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25EYXRlSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZv'@;
put 'Y3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxiYSgzLCJkYXRlVGltZUZvcm1hdHRlciIpLHllKCkoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJpZCIsYS5pbnB1dElkKSgicGxhY2Vob2xkZXIiLE01KDMsNSxhLnRlbXAsImRhdGUiKSkoImNs'@;
put 'ckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9uIEZCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImlucHV0Iiw3KSx4dCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBC'@;
put 'dChhKSxqdChWZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1'@;
put 'bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklu'@;
put 'cHV0TW91c2VPdXQoKSl9KSx5ZSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoInZhbHVlIixhLnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxUcigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gSEJlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOCw5KSx4dCgib25JbnB1dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQo'@;
put 'YSksanQoVmUoKS5hdXRvY29tcGxldGVMb2FkaW5nTW9yZShoKSl9KSxrcigzKSx5ZSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoImlucHV0SWQiLGEuaW5wdXRJZCkoInZhbHVlIiwobnVsbD09YS52YWx1ZT9udWxsOmEudmFsdWUudG9TdHJpbmcoKSl8fCIiKSgiZW5h'@;
put 'YmxlTG9hZE1vcmUiLGEuZW5hYmxlTG9hZE1vcmUpKCJlbWl0T25seVNlbGVjdGVkIixhLmVtaXRPbmx5U2VsZWN0ZWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCl9fWNvbnN0IE5CZT1bIioiXTtsZXQgTXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhp'@;
put 'cy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBFcix0aGlzLm9uSW5wdXRFdmVudD1uZXcg'@;
put 'RXIsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IEVyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgRXIsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBFcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNo'@;
put 'YW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0'@;
put 'ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVl'@;
put 'Q2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRo'@;
put 'aXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJz'@;
put 'dCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7'@;
put 'aWYoMSZhJiZSbyhMQmUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5pbnB1dEVsZW1lbnQ9aC5maXJzdCl9fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxl'@;
put 'ZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVjdGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRF'@;
put 'dmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2FkaW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0ZWRMYWJlbENoYW5nZSJ9LGZlYXR1cmVzOlt2YV0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOk5CZSxkZWNsczo1LHZhcnM6NSxjb25zdHM6W1siY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNs'@;
put 'aWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMywiaWQiLCJwbGFjZWhvbGRlciIsImNsckRhdGUiLCJkaXNhYmxlZCIsImNsckRhdGVDaGFuZ2UiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0Il0sWyJ0eXBlIiwi'@;
put 'dGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCIsImlucHV0IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMi'@;
put 'LCIiLDEsImlucHV0LXZhbCIsMywiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJlbWl0T25seVNlbGVjdGVkIiwiZGlzYWJsZWQiLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgp'@;
put 'LEplKDAsT0JlLDQsNiwibGFiZWwiLDApLFZyKDEsMSksSmUoMixQQmUsNCw4LCJuZy1jb250YWluZXIiLDIpLEplKDMsRkJlLDIsNCwibmctY29udGFpbmVyIiwyKSxKZSg0LEhCZSw0LDUsIm5nLWNvbnRhaW5lciIsMiksanIoKSksMiZhJiYoUmUoIm5nSWYiLGQubGFiZWwpLENlKDEpLFJl'@;
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 'YyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgic2VsZWN0ZWQiLFZlKCkubG9naWNPcGVyYXRvcnNbMF0pLENlKDEpLHByKCIgIixhLCIgIil9fWZ1bmN0aW9uIHpCZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMjMpLE5lKDEsIlxu'@;
put 'ICAgICAgICAiKSxxdCgyLCJwcm9ncmVzcyIpLE5lKDMsIlxuICAgICAgIikseWUoKSl9ZnVuY3Rpb24gVUJlKGMsbCl7MSZjJiZxdCgwLCJkaXYiKX1mdW5jdGlvbiBaQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDIyKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQ7UmUoInNlbGVjdGVkIixWZSgyKS5sb2dpY09wZXJhdG9yc1swXSksQ2UoMSkscHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gWUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5h'@;
put 'ZGRHcm91cENsYXVzZSgpKX0pLHF0KDEsImNsci1pY29uIiwzMyksbWUoMiwic3BhbiIpLE5lKDMsIkdyb3VwIikseWUoKSgpfX1mdW5jdGlvbiBXQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z'@;
put 'dCBoPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSkseWUoKX19ZnVuY3Rpb24gR0JlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLHByKCIgIixhLk5BTUUsIiAiKX19'@;
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 'dWVJbmRleDtyZXR1cm4ganQoVmUoKS5kYXRlQ2hhbmdlKGgsXyxULFcsaWUpKX0pLGJhKDIsInNhc1RvSnNEYXRlIiksYmEoMywic2FzVG9Kc0RhdGUiKSx5ZSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCksZD1hLnF1ZXJ5SW5kZXgsaD1hLmNsYXVzZUluZGV4LGY9YS5xdWVyeVZhbHVl'@;
put 'SW5kZXgsXz1hLnF1ZXJ5O0NlKDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/VWwoMiwzLF8udmFsdWVbZl0pOlVsKDMsNSxfLnZhbHVlKSl9fWZ1bmN0aW9uIGRqZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO1ZyKDApLG1lKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLF89Zi5jbGF1c2VJbmRleCxUPWYucXVlcnlJbmRleDtyZXR1cm4ganQoVmUoKS5nZXRRdWVyeURhdGVUaW1lKF8sVCkuZGF0ZT1o'@;
put 'KX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLGY9aC5xdWVyeSxfPWgucXVlcnlJbmRleCxUPWguY2xhdXNlSW5kZXgsVz1oLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS5kYXRlVGltZUNoYW5nZShmLF8sVCxXKSl9KSxiYSgyLCJzYXNUb0pz'@;
put 'RGF0ZSIpLGJhKDMsInNhc1RvSnNEYXRlIikseWUoKSxtZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKSxfPWYuY2xhdXNlSW5kZXgsVD1mLnF1ZXJ5SW5kZXg7cmV0dXJuIGp0KFZlKCkuZ2V0UXVlcnlEYXRl'@;
put 'VGltZShfLFQpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4LFc9aC5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGp0KFZlKCkuZGF0ZVRpbWVDaGFuZ2UoZixfLFQsVykp'@;
put 'fSksYmEoNSwic2FzVG9Kc0RhdGUiKSxiYSg2LCJzYXNUb0pzRGF0ZSIpLHllKCksanIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPWEucXVlcnlJbmRleCxoPWEuY2xhdXNlSW5kZXgsZj1hLnF1ZXJ5VmFsdWVJbmRleCxfPWEucXVlcnk7Q2UoMSksUmUoImRpc2FibGVTb2Z0c2VsZWN0Iiwh'@;
put 'MCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2QrIl8iK2gpKCJ2YWx1ZSIsdm9pZCAwIT09Zj9NNSgyLDYsXy52YWx1ZVtmXSwic2Vjb25kcyIpOk01KDMsOSxfLnZhbHVlLCJzZWNvbmRzIikpLENlKDMpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc190aW1lIitk'@;
put 'KyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/RFIoNSwxMixfLnZhbHVlW2ZdLCJzZWNvbmRzIiwhMCk6RFIoNiwxNixfLnZhbHVlLCJzZWNvbmRzIiwhMCkpfX1mdW5jdGlvbiBoamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJhcHAtc29mdC1zZWxlY3QiLDY1KSx4'@;
put 'dCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleCxpZT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4ganQoVmUoKS50aW1lQ2hhbmdlKGgsXyxULFcsaWUpKX0pLGJhKDIsInNlY29uZHNQ'@;
put 'YXJzZXIiKSxiYSgzLCJzZWNvbmRzUGFyc2VyIikseWUoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9YS5xdWVyeUluZGV4LGg9YS5jbGF1c2VJbmRleCxmPWEucXVlcnlWYWx1ZUluZGV4LF89YS5xdWVyeTtDZSgxKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIs'@;
put 'InZhbHNfIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/VWwoMiwzLF8udmFsdWVbZl0pOlVsKDMsNSxfLnZhbHVlKSl9fWZ1bmN0aW9uIGZqZShjLGwpezEmYyYmKFZyKDAsNjApLEplKDEsdWplLDQsNywibmctY29udGFpbmVyIiw2MSksSmUoMixkamUsNywyMCwibmctY29udGFpbmVy'@;
put 'Iiw2MSksSmUoMyxoamUsNCw3LCJuZy1jb250YWluZXIiLDYxKSxqcigpKSwyJmMmJihSZSgibmdTd2l0Y2giLGwucXVlcnkuZGR0eXBlKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLENlKDEpLFJlKCJuZ1N3aXRj'@;
put 'aENhc2UiLCJUSU1FIikpfWZ1bmN0aW9uIHBqZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEudW5mb3JtYXR0ZWQpLENlKDEpLHByKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVu'@;
put 'Y3Rpb24gZ2plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxwamUsMiwyLCJvcHRpb24iLDY3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5xdWVyeTtDZSgxKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBtamUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDY4'@;
put 'KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoInZhbHVlIixhLk5BTUUpLENlKDEpLHByKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gdmplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxtamUsMiwyLCJvcHRpb24iLDY5KSxqcigpKSwyJmMpe2NvbnN0IGE9'@;
put 'bC4kaW1wbGljaXQsZD1WZSgyKS5xdWVyeTtDZSgxKSxSZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gX2plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSx2amUsMiwxLCJuZy1jb250YWluZXIiLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUo'@;
put 'Im5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIGJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYpLHh0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLnF1ZXJ5O3JldHVybiBqdChWZSgpLnNlbGVjdGVk'@;
put 'TGFiZWxDaGFuZ2UoaCxfKSl9KSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS5xdWVyeS52YWx1ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5SW5kZXgsVD1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgp'@;
put 'LnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLF8sVCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5vbkF1dG9jb21wbGV0'@;
put 'ZUxvYWRpbmdNb3JlKGgsXy52YXJpYWJsZSxULFcpKX0pLEplKDEsZ2plLDIsMSwiZGl2IiwxNiksSmUoMixfamUsMiwxLCJkaXYiLDE2KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleDtSZSgic2Vjb25kTGFiZWwiLCJWYXJpYWJs'@;
put 'ZSIpKCJlbWl0T25seVNlbGVjdGVkIixhLnZhbHVlVmFyaWFibGUpKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpKCJ2YWx1ZSIsYS52YWx1ZSkoImVuYWJsZUxvYWRNb3JlIixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSxDZSgxKSxSZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIHlqZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNjgpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxDZSgxKSxwcigiICIsYS5mb3JtYXR0ZWQsIiAiKX19'@;
put 'ZnVuY3Rpb24gd2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw3MCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpO3JldHVybiBqdChmLnF1ZXJ5LnZhbHVlW2YucXVlcnlWYWx1ZUluZGV4XT1oKX0pKCJvbklucHV0'@;
put 'RXZlbnQiLGZ1bmN0aW9uKCl7Y29uc3QgaD1CdChhKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLnNldFZhcmlhYmxlVmFsdWVzKGYudmFsdWUsXyxUKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29u'@;
put 'c3QgZj1CdChhKSxfPWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsVz1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCxfLnZhcmlhYmxlLFQsVykpfSksSmUoMSx5amUsMiwyLCJvcHRpb24iLDY3KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLnJh'@;
put 'bmdlLGQ9bC5xdWVyeSxoPWwucXVlcnlWYWx1ZUluZGV4O1JlKCJpbnB1dElkIiwidmFscy0iK2ErIl8iK2wucXVlcnlJbmRleCsiXyIrbC5jbGF1c2VJbmRleCkoInZhbHVlIixkLnZhbHVlW2hdKSgiZW5hYmxlTG9hZE1vcmUiLGQubm9icz5kLnZhbHVlcy5sZW5ndGgpKCJkaXNhYmxlZCIs'@;
put 'dm9pZCAwIT09aCYmInN0YXJ0IiE9PWEmJiFkLnZhbHVlWzBdKSxDZSgxKSxSZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiBDamUoYyxsKXsxJmMmJihtZSgwLCJoNSIsNzgpLE5lKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSx5ZSgpKX1mdW5jdGlvbiBTamUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLnF1ZXJ5LnZhbHVlW19dLmNoZWNrZWQ9aCl9KSgibmdNb2RlbENo'@;
put 'YW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKSxfPWYucXVlcnlJbmRleCxUPWYuY2xhdXNlSW5kZXg7cmV0dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxfLFQpKX0pLHllKCksbWUoMiwibGFiZWwiKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGlt'@;
put 'cGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLnF1ZXJ5O0NlKDEpLFJlKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLENlKDIpLHByKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBNamUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNv'@;
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 'aWFsTWlzc2luZykoTm4uVU5GT1JNQVRURUQpPyIuIitObi5VTkZPUk1BVFRFRDpObi5VTkZPUk1BVFRFRDtyZXR1cm4gY3ImJm51bGw9PT1faSYmKF9pPSIuIikse2Zvcm1hdHRlZDppdD9Obi5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpObi5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6X2l9fSkp'@;
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 'VFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSl7aWYobnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1'@;
put 'ZXx8IiI9PT1kLnZhbHVlKXJldHVybiBkLmludmFsaWRDbGF1c2U9ITAsITA7ZC5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdyb3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7'@;
put 'aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFk'@;
put 'ZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBj'@;
put 'bGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10s'@;
put 'b3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4idSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRv'@;
put 'R2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5'@;
put 'LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxl'@;
put 'Y3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVzZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEs'@;
put 'ZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihhPSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihh'@;
put 'JiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5ncm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhp'@;
put 'cy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihh'@;
put 'LmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBd'@;
put 'LmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vi'@;
put 'c2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Hbi5yb290UGFyYW0mJiJlZGl0b3IiIT09R24ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEduLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09'@;
put 'R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsR24udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3Vi'@;
put 'PWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmR24uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5w'@;
put 'YXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEduLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1v'@;
put 'bkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJf'@;
put 'aWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7'@;
put 'cmV0dXJuIG5ldyhhfHxjKSh0dChiZCksdHQodmwpLHR0KFRjKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnkiXV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LGZlYXR1cmVzOlt0aShbe3Byb3Zp'@;
put 'ZGU6S2QsdXNlVmFsdWU6ImVuLUdCIn1dKV0sZGVjbHM6MzgsdmFyczoxMSxjb25zdHM6W1sxLCJjbHItZmxleC1yb3ciLCJjbHItZm9ybS1jb250cm9sIiwibS0wIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5n'@;
put 'TW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsIm1sLTE1Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImlkIiwidXNlUGlja2VycyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LCJjaGFuZ2UiXSxbMSwiY2xyLXJvdyJdLFsxLCJzZWxlY3QiLCJjbHItY29sLW1kLTIiLCJtYi0zMCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJkaXNhYmxlZCIsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInNlbGVjdGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWNvbC1t'@;
put 'ZC0xMCIsIm1iLTMwIl0sWzEsImxpbmUtbnVtYmVycyIsImxhbmd1YWdlLW1hcmt1cCJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwibGFuZ3VhZ2Utc3FsIl0sWzEsImNvbnRlbnQiXSxbMSwiY2xhdXNlcy1jb250YWluZXIiLCJjbHItY29s'@;
put 'LW1kLTEyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiY2xhdXNlLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIsIiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzMsInNlbGVjdGVkIl0sWzEsInByb2dyZXNT'@;
put 'dGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xhdXNlLXJvdyJdLFsxLCJjbGF1c2UtbG9naWMiLCJjbHItY29sLW1kLTIiXSxbMSwic2VsZWN0Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwiYnRuIGJ0bi1w'@;
put 'cmltYXJ5IGJ0bi1ibG9jayBtdC0xMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2xhdXNlLXF1ZXJ5IiwiY2xyLWNvbC1tZC0xMCJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsImNsYXNzIiwicmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsImNsci1yb3ciLDMsImludmFsaWQtY2xhdXNlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLCJtdC0xMCIsMywiY2xpY2siXSxbInNoYXBlIiwicGx1cyJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIzNiIsMSwicmVt'@;
put 'b3ZlLWdyb3VwLWNsYXVzZS1idXR0b24iLDMsImNsaWNrIl0sWzEsInZhcmlhYmxlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbMSwiZGF0YWxpc3Qtd3JhcHBlciJdLFsibGFiZWwiLCJWYXJpYWJsZSIsMywiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZh'@;
put 'bHVlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm9wZXJhdG9yLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsclNlbGVjdCIsIiIsMSwibXQtMiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNz'@;
put 'IiwidmFsdWUtY29sIGZvcm0tZ3JvdXAgY2xyLWNvbC1tZC0zIiw0LCJuZ1ZhciJdLFsxLCJjbGF1c2UtYnV0dG9ucyIsImNsci1jb2wtbWQtMiIsImJ0bi1ncm91cCJdLFsxLCJidG4iLCJidG4td2FybmluZyIsImJ0bi1ibG9jayIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJt'@;
put 'aW51cyJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbMSwidmFsdWUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xhc3MiLCJjaGVja2JveC12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpbmdsZS1maWVsZC12YWxzIiw0LCJu'@;
put 'Z0lmIl0sWyJjbGFzcyIsInJhbmdlLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udGFpbnMtdmFscyIsNCwibmdJZiJdLFsxLCJjaGVja2JveC12YWxzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5n'@;
put 'VGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsInNpbmdsZS1maWVsZC12YWxzIl0sWzEsInJhbmdlLXZhbHMiXSxbMSwiZnJvbSJdLFsxLCJ0byJdLFsxLCJjb250YWlucy12YWxzIl0sWyJ0eXBlIiwidGV4dCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsz'@;
put 'LCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJkaXNhYmxlU29mdHNl'@;
put 'bGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWyJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJ0'@;
put 'aW1lIiwzLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSIsIm9uSW5wdXRFdmVudCJdLFsibGFiZWwiLCJWYWx1ZSIsMywic2Vjb25kTGFiZWwiLCJlbWl0T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJzZWxlY3RlZExhYmVsQ2hh'@;
put 'bmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMywidmFsdWUiLDQsIm5nSWYiXSxbImxhYmVsIiwiVmFsdWUiLDMsImlucHV0SWQiLCJ2YWx1ZSIs'@;
put 'ImVuYWJsZUxvYWRNb3JlIiwiZGlzYWJsZWQiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiXSxbMSwiaW4tdmFsdWVzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEs'@;
put 'Im1vZGFsLWJvZHkiXSxbImNsYXNzIiwibm8tdmFsdWVzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZvcm0tYmxvY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwibm8tdmFsdWVzIl0sWzEs'@;
put 'ImZvcm0tYmxvY2siXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDMsImlu'@;
put 'cHV0IiwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZHluYW1pY1doZXJlQ2xhdXNlPWZ9KSx5ZSgpLG1lKDQsImxhYmVsIiwzKSxOZSg1LCJEeW5hbWljIHdoZXJlIGNsYXVzZSIpLHllKCkoKSgpLG1lKDYsImRpdiIsNCkoNywiY2xyLWNoZWNrYm94LXdyYXBw'@;
put 'ZXIiKSg4LCJpbnB1dCIsNSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnVzZVBpY2tlcnM9Zn0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudXNlUGlja2Vyc0NoYW5nZSgpfSkseWUoKSxtZSg5LCJsYWJlbCIsMyksTmUoMTAsIiBVc2UgcGlja2VycyAi'@;
put 'KSx5ZSgpKCkoKSgpLG1lKDExLCJkaXYiLDYpKDEyLCJkaXYiLDcpKDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLE5lKDE1LCJHcm91cCBsb2dpYyIpLHllKCksbWUoMTYsInNlbGVjdCIsOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmdy'@;
put 'b3VwTG9naWM9Zn0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnNldEdyb3VwTG9naWMoZC5ncm91cExvZ2ljKX0pLEplKDE3LGpCZSwyLDIsIm9wdGlvbiIsOSkseWUoKSgpKCksbWUoMTgsImRpdiIsMTApKDE5LCJwcmUiLDExKSxOZSgyMCwiICAgICAgIiksSmUoMjEs'@;
put 'ekJlLDQsMCwiZGl2IiwxMiksTmUoMjIsIlxuXG4gICAgICAiKSxtZSgyMywiY29kZSIsMTMpLE5lKDI0KSx5ZSgpLE5lKDI1LCJcbiAgICAiKSx5ZSgpKCkoKSxtZSgyNiwiZGl2IiwxNCkoMjcsImRpdiIsMTUpLEplKDI4LFVCZSwxLDAsImRpdiIsMTYpLEplKDI5LGNqZSwxNSw4LCJkaXYi'@;
put 'LDE3KSx5ZSgpKCksSmUoMzAsZmplLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMTgsa2MpLEplKDMyLGJqZSwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDE5LGtjKSxKZSgzNCx3amUsMiw1LCJuZy10ZW1wbGF0ZSIsbnVsbCwyMCxrYyksSmUoMzYseGplLDksNCwibmctdGVtcGxhdGUiLG51bGws'@;
put 'MjEsa2MpKSwyJmEmJihDZSgzKSxSZSgibmdNb2RlbCIsZC5keW5hbWljV2hlcmVDbGF1c2UpLENlKDUpLFJlKCJuZ01vZGVsIixkLnVzZVBpY2tlcnMpLENlKDgpLFJlKCJkaXNhYmxlZCIsKG51bGw9PWQuY2xhdXNlc3x8bnVsbD09ZC5jbGF1c2VzLnF1ZXJ5T2JqP251bGw6ZC5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqLmxlbmd0aCk8MSkoIm5nTW9kZWwiLGQuZ3JvdXBMb2dpYyksQ2UoMSksUmUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLENlKDQpLFJlKCJuZ0lmIixkLndoZXJlQ2xhdXNlTG9hZGluZyksQ2UoMyksb3IoZC53aGVyZUNsYXVzZSksQ2UoMyksZHIoImNsci1jb2wtbWQt'@;
put 'MTAiLChudWxsPT1kLmNsYXVzZXN8fG51bGw9PWQuY2xhdXNlcy5xdWVyeU9iaj9udWxsOmQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09ZC5jbGF1c2VzfHxudWxsPT1kLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpkLmNsYXVzZXMucXVlcnlPYmou'@;
put 'bGVuZ3RoKT4xKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqKSl9LGRlcGVuZGVuY2llczpbeHMsWmkscmQsbmQsdGgsa2Esb3Usc3UsVXMsRDAsRDgsVDAsTjgsSDgsbDEsYzEsV2EsUzAsTTAsQnMsT3MsTXNlLFU3LFZCZSxCQmVdLHN0eWxlczpbJ0BjaGFyc2V0ICJV'@;
put 'VEYtOCI7LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtbG9naWNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNlOWU5ZTk7'@;
put 'cGFkZGluZzoxNXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7YmFja2dyb3VuZDojZmJmOGY4O2Rpc3Bs'@;
put 'YXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0l'@;
put 'Q09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTYpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j'@;
put 'bGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtjb2xvcjpncmF5'@;
put 'fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpm'@;
put 'bGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNs'@;
put 'YXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zZWxlY3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX0uY29udGVudFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5n'@;
put 'LWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWNoZWNrYm94LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5jb250ZW50W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgc2VjdGlvbltfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29s'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1'@;
put 'dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNp'@;
put 'bmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVl'@;
put 'cnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1j'@;
put 'b250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0'@;
put 'LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFu'@;
put 'Z2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9LmNvbnRlbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUt'@;
put 'Y29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25n'@;
put 'Y29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxz'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12'@;
put 'YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz'@;
put 'ZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAl'@;
put 'O3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlu'@;
put 'cy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNv'@;
put 'bnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFk'@;
put 'ZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpm'@;
put 'bGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6YXV0b30uaW52YWxpZC1jbGF1c2VbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfS5jbGF1c2Utcm93'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5'@;
put 'MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmdcXDIwMjYlMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzEl'@;
put 'MkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MH1bX25nY29udGVudC0lQ09NUCVdOm5vdChwcmUpID4gY29kZVtjbGFzcyo9bGFuZ3Vh'@;
put 'Z2UtXVtfbmdjb250ZW50LSVDT01QJV0sIHByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmJmOGY4fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1'@;
put 'czoxcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zcGlubmVyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEwcHh9cHJlW2NsYXNzKj1sYW5ndWFnZS1dIGNvZGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3Jk'@;
put 'ZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjow'@;
put 'O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOm5vbmV9LmluLXZhbHVlcy1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dpZHRoOjEw'@;
put 'MCU7aGVpZ2h0OjRweDt0b3A6M3B4fSddfSksY30pKCk7Y29uc3QgRWplPVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24ga2plKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsOSl9ZnVuY3Rpb24gQWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEw'@;
put 'KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBUamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwz'@;
put 'KSgxLCJkaXYiLDQpKDIsImlucHV0Iiw1LDYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uRmlsdGVyKCkpfSkseWUo'@;
put 'KSxKZSg0LGtqZSwxLDAsImNsci1pY29uIiw3KSxKZSg1LEFqZSwxLDAsImNsci1pY29uIiw4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxD'@;
put 'ZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIERqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIElqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZl'@;
put 'KCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIExqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp'@;
put 'O21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDE3LDE4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3Qg'@;
put 'aD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLHllKCksSmUoNCxEamUsMSwwLCJjbHItaWNvbiIsNyksSmUoNSxJamUsMSwwLCJjbHItaWNvbiIsOCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKDIpLiRpbXBsaWNp'@;
put 'dDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFJqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBPamUoYyxs'@;
put 'KXsxJmMmJnF0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gUGplKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLHllKCkpfWZ1bmN0aW9uIEZqZShjLGwpe2lmKDEmYyYmKG1l'@;
put 'KDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxKZSgxLFBqZSwyLDAsInNwYW4iLDI1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYSl9fWZ1bmN0aW9uIEhqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIE5qZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDMpLiRpbXBsaWNpdCxfPVZlKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVy'@;
put 'KGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIFZqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMpKDEsImRpdiIsNCkoMiwiaW5wdXQiLDI5LDE4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEp'@;
put 'LGp0KFZlKDMpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpLEplKDQsSGplLDEsMCwiY2xyLWlj'@;
put 'b24iLDcpLEplKDUsTmplLDEsMCwiY2xyLWljb24iLDgpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgzKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBCamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89VmUoMykuJGltcGxpY2l0LFQ9VmUo'@;
put 'MikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbHVtbk9uQ2xpY2soZixULF8pKX0pLHF0KDIsImNsci1pY29uIiwzMSksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDYpO0NlKDEpLGRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShh'@;
put 'LkNPTFVSSSkpLENlKDIpLHByKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gamplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxWamUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxKZSgyLEJqZSw0LDMsImNsci10cmVlLW5vZGUiLDEpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1w'@;
put 'bGljaXQ7Q2UoMSksUmUoIm5nSWYiLGEuY29sdW1ucyksQ2UoMSksUmUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIHpqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0'@;
put 'IGY9QnQoYSkubmdWYXIsXz1WZSgpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdCxXPVZlKCk7cmV0dXJuIGp0KGY/IiI6Vy50YWJsZU9uQ2xpY2soXy5UQUJMRVVSSSxfLFQpKX0pLFZyKDIsMjEpLEplKDMsUmplLDEsMCwiY2xyLWljb24iLDIyKSxKZSg0LE9qZSwxLDAsImNsci1pY29u'@;
put 'IiwyMyksanIoKSxOZSg1KSx5ZSgpLEplKDYsRmplLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpLEplKDcsamplLDMsMiwibmctY29udGFpbmVyIiwyNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0LGg9VmUoMikuJGltcGxpY2l0LGY9VmUoKTtD'@;
put 'ZSgxKSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksQ2UoMSksUmUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENh'@;
put 'c2UiLCExKSxDZSgxKSxwcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLENlKDIpLFJlKCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBVamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMikseHQoImNsaWNrIixmdW5jdGlvbihoKXtj'@;
put 'b25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlTm9kZUNsaWNrZWQoaCxfLFQudGFibGVzKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxKZSgx'@;
put 'LHpqZSw4LDksImNsci10b29sdGlwIiwxOSkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMyk7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1u'@;
put 'cyYmIWEuY29sdW1ucyksQ2UoMSksUmUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBaamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxMiwxMykseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8ubGlicmFyeUxpc3QpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVk'@;
put 'PWgpfSksbWUoMiwicCIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPSRpKDEpLGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLmxpYj1mLkxJQlJBUllJRCxqdChfLmxpYnJhcnlPbkNsaWNrKF8ubGlifHwiIixmLGgpKX0pLHF0KDMsImNsci1pY29uIiwx'@;
put 'NSksTmUoNCkseWUoKSxKZSg1LExqZSw2LDMsImNsci10cmVlLW5vZGUiLDApLEplKDYsVWplLDIsNSwiY2xyLXRyZWUtbm9kZSIsMTYpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5l'@;
put 'eHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSg0KSxwcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gWWplKGMsbCl7aWYoMSZjJiYo'@;
put 'VnIoMCksSmUoMSxaamUsNyw3LCJjbHItdHJlZS1ub2RlIiwxMSksanIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gV2plKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMp'@;
put 'LE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9bGV0IEdqZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBlaCx0aGlzLnRhYmxlT25DbGlja0VtaXR0'@;
put 'ZXI9bmV3IEVyLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyPW5ldyBFcix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VT'@;
put 'dGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlz'@;
put 'dD8uY3VycmVudFZhbHVlJiZ0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhp'@;
put 'cy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLEduLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNl'@;
put 'Ij09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGY9KCk9PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVl'@;
put 'cnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGli'@;
put 'cmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IF89c2V0SW50ZXJ2YWwoKCk9PntkLmxvYWRpbmdUYWJsZXN8fChmKCksY2xlYXJJbnRlcnZhbChfKSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVl'@;
put 'SXRlbXModGhpcy5saWJyYXJ5TGlzdCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2YuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoNTAsKCk9PntmLmhhc0NvbHVtbnM/KGQuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwh'@;
put 'MD09PWQuZXhwYW5kZWQmJihmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMH0pKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPWEsZi50'@;
put 'YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpKTpmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJh'@;
put 'cnk6aCxjb2x1bW5zTG9hZGVkOiExfSl9KX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkm'@;
put 'JmE9PT10aGlzLmxpYiYmZD09PXRoaXMudGFibGV9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19Y29sbGFwc2VU'@;
put 'cmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNl'@;
put 'cnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2QmJmQuc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxp'@;
put 'YnJhcmllcygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYyksdHQoQzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEVqZSw1KSwy'@;
put 'JmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnNlYXJjaExpYklucHV0TGlzdD1oKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInNjcm9sbCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlU2Nyb2xsKGYpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFzQ29sdW1ucyIs'@;
put 'cGFnaW5nOiJwYWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlzdCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJhcnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sZmVhdHVyZXM6W3ZhXSxkZWNsczo0LHZh'@;
put 'cnM6Myxjb25zdHM6W1siY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIi'@;
put 'LCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0'@;
put 'aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4'@;
put 'cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbImxpYlRyZWVOb2RlIiwiIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHIt'@;
put 'ZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5'@;
put 'dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQs'@;
put 'Im5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxn'@;
put 'Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0'@;
put 'cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLXRyZWUiKSxKZSgxLFRqZSw2LDMsImNsci10cmVlLW5vZGUiLDApLEplKDIsWWplLDIsMSwibmctY29udGFpbmVyIiwx'@;
put 'KSx5ZSgpLEplKDMsV2plLDMsMCwiZGl2IiwyKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNQYWdpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxuZCx0aCxk'@;
put 'ZCxnMSxEcCxrYSxadSxjMixmMSxqYixVYix6YixXYSxCcyxPcyxVN10sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1jbHItdHJlZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5j'@;
put 'bHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzIC5jbHItdHJlZW5vZGUtbGlua3tiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yLCAjZThlOGU4KTt0ZXh0LWRlY29yYXRpb246bm9uZX0iXX0pLGN9KSgpO2NvbnN0'@;
put 'ICRqZT1bInJlc2l6ZUJveCJdLHFqZT1bImRyYWdIYW5kbGVDb3JuZXIiXTtmdW5jdGlvbiBLamUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwzMiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksemMoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52'@;
put 'YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIFhqZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMzMpLHF0'@;
put 'KDEsImNsci1zcGlubmVyIiwzNCkseWUoKSl9ZnVuY3Rpb24gSmplKGMsbCl7MSZjJiYobWUoMCwicCIsMzUpLE5lKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSx5ZSgpKX1mdW5jdGlvbiBRamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkYy10cmVlIiwzNiks'@;
put 'eHQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnRhYmxlT25DbGljayhoKSl9KSx5ZSgpfTImYyYm'@;
put 'UmUoImxpYnJhcnlMaXN0IixWZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gZXplKGMsbCl7MSZjJiYobWUoMCwicCIsMzcpLE5lKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIikseWUoKSl9ZnVuY3Rpb24gdHplKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIs'@;
put 'NDUpfWZ1bmN0aW9uIG56ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBfLm1pbmltaXplKGYpLGp0KF8uc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0'@;
put 'KDEsImNsci1pY29uIiwxNSksbWUoMiwic3BhbiIsMTQpLE5lKDMsIk1pbmltaXplIHZpZXdib3giKSx5ZSgpKCl9fWZ1bmN0aW9uIHJ6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1w'@;
put 'bGljaXQsXz1WZSgpO3JldHVybiBfLnJlc3RvcmUoZiksanQoXy5zdG9wUHJvcGFnYXRpb24oaCkpfSkscXQoMSwiY2xyLWljb24iLDE2KSxtZSgyLCJzcGFuIiwxNCksTmUoMywiUmVzdG9yZSB2aWV3Ym94IikseWUoKSgpfX1mdW5jdGlvbiBpemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4o'@;
put 'KTttZSgwLCJkaXYiLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuc2VsZWN0Vmlld2JveChmKSl9KSxtZSgxLCJkaXYiLDM5KSxOZSgyKSxKZSgzLHR6ZSwxLDAsImNsci1zcGlubmVyIiw0MCkseWUoKSxtZSg0LCJkaXYi'@;
put 'KSg1LCJhIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKCk7cmV0dXJuIFQucmVzZXRQb3NTaXplKF8pLGp0KFQuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0KDYsImNsci1pY29uIiw0MiksbWUoNywic3BhbiIsMTQpLE5lKDgsIlJlc2V0'@;
put 'IHBvc2l0aW9uIGFuZCBzaXplIikseWUoKSgpLEplKDksbnplLDQsMCwiYSIsNDMpLEplKDEwLHJ6ZSw0LDAsImEiLDQzKSxtZSgxMSwiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBULmNsb3NlKF8pLGp0KFQuc3Rv'@;
put 'cFByb3BhZ2F0aW9uKGgpKX0pLHF0KDEyLCJjbHItaWNvbiIsNDQpLG1lKDEzLCJzcGFuIiwxNCksTmUoMTQsIkNsb3NlIHZpZXdib3giKSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/'@;
put 'bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxDZSgyKSxiMCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxDZSgyKSxkcigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkpLENlKDQpLFJlKCJu'@;
put 'Z0lmIiwhYS5taW5pbWl6ZWQpLENlKDEpLFJlKCJuZ0lmIixhLm1pbmltaXplZCl9fWZ1bmN0aW9uIG96ZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxwcigiICIsYSwiICIpfX1mdW5jdGlvbiBzemUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJkaXYiLDQ4KSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw0OSw1MCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPSRpKDMpLF89VmUoKS5uZ1ZhcjtyZXR1cm4ganQoVmUoKS5vbkNvbHNlYXJjaENoYW5n'@;
put 'ZShmLGgsXy5jb2xIZWFkZXJzSGlkZGVuKSl9KSxKZSg0LG96ZSwyLDEsIm9wdGlvbiIsNTEpLHllKCkoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDIpLFJlKCJpbnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxDZSgy'@;
put 'KSxSZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gYXplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTcpfWZ1bmN0aW9uIGx6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEp'@;
put 'O2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLm9uQ29sUmVtb3ZlKGgpKX0pLHllKCl9fWZ1bmN0aW9uIGN6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNTQpKDEsInNwYW4iKSxOZSgyKSxKZSgzLGF6ZSwxLDAsImNsci1pY29uIiw1NSkseWUoKSxKZSg0LGx6ZSwx'@;
put 'LDAsImNsci1pY29uIiw1NikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikubmdWYXIsaD1WZSgpO0ZNKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLGRyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHls'@;
put 'ZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLFJlKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLENlKDIpLHpjKCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVk'@;
put 'Vmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLENlKDEpLFJlKCJuZ0lmIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksQ2UoMSksUmUoIm5nSWYiLCFk'@;
put 'LmhlYWRlclBrcy5pbmNsdWRlcyhhKSl9fWZ1bmN0aW9uIHV6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsInAiLDUpLE5lKDIsIkNvbHVtbnMgVG8gRGlzcGxheSAoZHJhZyBhbmQgcmUtb3JkZXIpIikseWUoKSxtZSgzLCJkaXYiLDUyKSx4dCgiY2RrRHJvcExpc3RE'@;
put 'cm9wcGVkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY29sdW1uc0Ryb3AoaCkpfSksSmUoNCxjemUsNSwxMywiZGl2Iiw1MykseWUoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDMpLFJlKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVhZGVyc1Zpc2li'@;
put 'bGUpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gZHplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NiksSmUoMSxzemUsNSwzLCJuZy1jb250YWluZXIiLDQ3KSxKZSgyLHV6ZSw1LDIsIm5nLWNvbnRhaW5lciIsNDcpLHllKCkpLDImYyl7Y29u'@;
put 'c3QgYT1sLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLENlKDEpLFJlKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gaHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDg1KSx4dCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2xsYXBzZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBmemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsODYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZl'@;
put 'KCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmV4cGFuZChoKSl9KSx5ZSgpfX1mdW5jdGlvbiBwemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsODcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9JGkoMTYp'@;
put 'O3JldHVybiBqdChWZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSkseWUoKX19ZnVuY3Rpb24gZ3plKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsODgpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIG16ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDg5KSxOZSgxLCJMb2FkaW5nLi4u'@;
put 'IikseWUoKSl9ZnVuY3Rpb24gdnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDkwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPSRpKDE2KTtyZXR1cm4gVmUoKS5yZWxvYWRUYWJsZURhdGEoaCksanQoZi52'@;
put 'YWx1ZT0iIil9KSx5ZSgpfX1mdW5jdGlvbiBfemUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDk0KSxxdCgxLCJjbHItc3Bpbm5lciIsMzQpLHllKCkpfWZ1bmN0aW9uIGJ6ZShjLGwpe2lmKDEmYyYmcXQoMCwiaG90LXRhYmxlIiw5NSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLiRp'@;
put 'bXBsaWNpdCxoPVZlKCk7UmUoImhvdElkIiwiaG90SW5zdGFuY2Vfdmlld2JveF8iK2QuaWQpKCJyZWFkT25seSIsITApKCJtb2RpZnlDb2xXaWR0aCIsaC5tYXhXaWR0aENoZWtlcikoImNvcHlQYXN0ZSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRN'@;
put 'ZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29udGV4dE1lbnUpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixoLnZpZXdi'@;
put 'b3hUYWJsZXNbYV0uaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2x1bW5zKSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kcm9wZG93bk1lbnUpKCJoZWlnaHQiLGgudmll'@;
put 'd2JveFRhYmxlc1thXS5ob3RUYWJsZS5oZWlnaHQpKCJjZWxscyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgibGljZW5zZUtleSIsaC52aWV3'@;
put 'Ym94VGFibGVzW2FdLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiB5emUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDkxKSxKZSgxLF96ZSwyLDAsImRpdiIsOTIpLEplKDIsYnplLDEsMTcsImhvdC10YWJsZSIsOTMpLHllKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9VmUoKS4k'@;
put 'aW1wbGljaXQ7SHUoImRpc3BsYXkiLGQuY29sbGFwc2VkPyJub25lIjoiIiksQ2UoMSksUmUoIm5nSWYiLGQubG9hZGluZ0RhdGEmJmE8MCksQ2UoMSksUmUoIm5nSWYiLGE+LTEpfX1jb25zdCB3emU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57eDpjLHk6bH19O2Z1bmN0aW9uIEN6ZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTksNjApLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuZm9jdXNWaWV3Ym94KGYpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGlt'@;
put 'cGxpY2l0O3JldHVybiBqdChWZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxfKSl9KSxtZSgyLCJkaXYiLDYxKSgzLCJzcGFuIiw2MiksTmUoNCkseWUoKSxtZSg1LCJkaXYiLDYzKSxKZSg2LGh6ZSwxLDAsImNsci1pY29uIiw2NCksSmUoNyxmemUsMSwwLCJjbHItaWNvbiIsNjUpLG1lKDgsImNs'@;
put 'ci1pY29uIiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLm1pbmltaXplKGYpKX0pLHllKCksbWUoOSwiY2xyLWljb24iLDY3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJu'@;
put 'IGp0KFZlKCkuY2xvc2UoZikpfSkseWUoKSgpKCksbWUoMTAsInNwYW4iLDY4LDY5KSx4dCgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPSRpKDExKSxXPSRpKDEpO3JldHVybiBqdChWZSgpLmRyYWdNb3ZlKFQsVyxfLGgpKX0pLHllKCksbWUo'@;
put 'MTIsImZvcm0iLDcwKSgxMywiZGl2Iiw3MSkoMTQsImRpdiIsNzIpKDE1LCJpbnB1dCIsNzMsNzQpLHh0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdCxfPSRpKDE2KTtyZXR1cm4ganQoVmUoKS5zZWFyY2hUYWJsZShfLGYpKX0pLHllKCksSmUoMTcs'@;
put 'cHplLDEsMCwiY2xyLWljb24iLDc1KSxKZSgxOCxnemUsMiwwLCJzcGFuIiw3NikseWUoKSxtZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIxLCJpbnB1dCIsNzcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4g'@;
put 'anQoQnQoYSkuJGltcGxpY2l0LnNlYXJjaE51bWVyaWM9aCl9KSx5ZSgpLG1lKDIyLCJsYWJlbCIpLE5lKDIzLCJOdW1lcmljIikseWUoKSgpKCkoKSxtZSgyNCwiZGl2IiwzOSksSmUoMjUsbXplLDIsMCwic3BhbiIsNzgpLEplKDI2LHZ6ZSwxLDAsImNsci1pY29uIiw3OSksbWUoMjcsImEi'@;
put 'LDgwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz0kaSgxNik7cmV0dXJuIFZlKCkub3BlbkZpbHRlcihmKSxqdChfLnZhbHVlPSIiKX0pLHF0KDI4LCJjbHItaWNvbiIsODEpLG1lKDI5LCJzcGFuIiw4MiksTmUoMzApLHllKCkoKSxtZSgzMSwiY2xy'@;
put 'LWljb24iLDgzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkub3BlblRhYmxlRWRpdChmKSl9KSx5ZSgpKCkoKSxKZSgzMix5emUsMyw0LCJkaXYiLDg0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7'@;
put 'SHUoImRpc3BsYXkiLGEubWluaW1pemVkPyJub25lIjoiIikoIndpZHRoIixhLndpZHRoLCJweCIpKCJoZWlnaHQiLGEuaGVpZ2h0LCJweCIpKCJwb2ludGVyLWV2ZW50cyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSgiYm94LXNoYWRvdyIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxkcigiZm9j'@;
put 'dXNlZCIsYS5mb2N1c2VkKSxSZSgiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLFEyKDM0LHd6ZSxhLngsYS55KSkoImlkIiwidmlld2JveF8iK2EuaWQpLENlKDQpLGIwKCIgIyIsYS5pZCwiICIsYS5saWJyYXJ5LCIuIixhLnRhYmxlLCIgIiksQ2UoMiksUmUoIm5nSWYiLCFhLmNvbGxhcHNl'@;
put 'ZCksQ2UoMSksUmUoIm5nSWYiLGEuY29sbGFwc2VkKSxDZSgzKSxSZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLENlKDIpLEh1KCJkaXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLENlKDMpLFJlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxDZSgy'@;
put 'KSxSZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksQ2UoMyksUmUoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksQ2UoNCksUmUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nRGF0YSksQ2Uo'@;
put 'MiksZHIoImZpbHRlci1hY3RpdmUiLCIwIiE9PWEuZmlsdGVyX3BrKSxDZSgyKSxvcihhLmZpbHRlclRleHQpLENlKDEpLGRyKCJkaXNhYmxlZCIsIWQudGFibGVFZGl0RXhpc3RzKGEpKSxDZSgxKSxSZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiBTemUo'@;
put 'YyxsKXtpZigxJmMmJnF0KDAsImFwcC1xdWVyeSIsOTYsOTcpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJ2aWV3Ym94SWQiLG51bGw9PWEuZmlsdGVyaW5nVmlld2JveD9udWxsOmEuZmlsdGVyaW5nVmlld2JveC5pZCl9fWNvbnN0IE16ZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJue2NvbEhlYWRl'@;
put 'cnNIaWRkZW46Yyxjb2xIZWFkZXJzVmlzaWJsZTpsLGhlYWRlclBrczphfX07bGV0IHhzZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52'@;
put 'aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVj'@;
put 'dG9yKGEsZCxoLGYsXyxULFcsaWUscGUsd2Upe3RoaXMubmdab25lPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuZXZlbnRTZXJ2aWNlPWYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Xyx0aGlzLmxvZ2dlclNlcnZpY2U9VCx0aGlzLmhlbHBlclNlcnZpY2U9'@;
put 'Vyx0aGlzLnJvdXRlcj1pZSx0aGlzLmFjdGl2YXRlZFJvdXRlPXBlLHRoaXMuY2RmPXdlLHRoaXMuX3ZpZXdib3hNb2RhbD0hMSx0aGlzLnZpZXdib3hNb2RhbENoYW5nZT1uZXcgRXIsdGhpcy5saWJpbmZvPW51bGwsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSEwLHRoaXMudmlld2JveGVzPVtd'@;
put 'LHRoaXMuZGVmYXVsdENvbmZpZz17aWQ6LTEsbGlicmFyeToiIix0YWJsZToiIix3aWR0aDo1MDAsaGVpZ2h0OjMwMCx4OjAseToxNTAsY29sdW1uczpbXX0sdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5ob3RUYWJsZURlZmF1bHQ9e2RhdGE6W10saGVhZGVyUGtz'@;
put 'OltdLCRkYXRhZm9ybWF0czp7fSxhbGxDb2xIZWFkZXJzOltdLGNvbEhlYWRlcnNIaWRkZW46W10sY29sSGVhZGVyc1Zpc2libGU6W10sY29sSGVhZGVyczpbXSxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQ'@;
put 'YXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxjb2x1bW5zOltdLGNvbHM6W10saGVpZ2h0OiIxMDAlIixzZXR0aW5nczp7fSxoaWRkZW5Db2x1bW5zOiEwLG1hbnVhbENvbHVtbk1vdmU6ITEsYWZ0ZXJHZXRDb2xIZWFkZXI6dm9pZCAwLGxpY2Vu'@;
put 'c2VLZXk6dm9pZCAwLGRyb3Bkb3duTWVudTp2b2lkIDB9LHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRl'@;
put 'LHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0fHw2LHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBBZ31uZ09uSW5pdCgp'@;
put 'e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57dGhpcy5saWJyYXJpZXM9ZC5zYXNsaWJzfSkuY2F0Y2goZD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITF9KSx0aGlzLl9xdWVyeT10aGlz'@;
put 'LnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e3RoaXMuY2xhdXNlcz1kLm9iaix0aGlzLmZpbHRlckxpYmRzPWQubGliZHN9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vf'@;
put 'a2V5LnN1YnNjcmliZShkPT57dGhpcy5ob3RUYWJsZURlZmF1bHQubGljZW5zZUtleT1kfSk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnZpZXdib3hlczthJiYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyhzZXRUaW1lb3V0'@;
put 'KCgpPT50aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkxpbmtpbmcgVmlld2JveGVzIikpLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6e319KSk6KHRoaXMudmlld2JveGVzPXRoaXMuZGVjb2Rl'@;
put 'VXJsRGF0YShhKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pKSksdGhpcy5yZUxvYWRWaWV3Ym94dGFibGVzKHRoaXMudmlld2JveGVzKX1uZ0FmdGVyVmlld0luaXQoKXt9Z2V0IHZpZXdib3hMaW1pdFJlYWNoZWQoKXtyZXR1cm4gdGhpcy52aWV3Ym94'@;
put 'ZXMubGVuZ3RoPj10aGlzLm1heFZpZXdib3hlc31jbHJNb2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdChhKX1saWJyYXJ5T25DbGljayhhKXthLnRhYmxlc0xvYWRlZHx8dGhpcy5sb2FkVGFibGVzKGEubGlicmFyeS5MSUJSQVJZUkVGLGEubGlicmFyeSl9'@;
put 'dGFibGVPbkNsaWNrKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGQudmlld2JveExpbWl0UmVhY2hlZClyZXR1cm47Y29uc3QgaD17Li4uZC5kZWZhdWx0Q29uZmlnLHRhYmxlOmEubGliVGFibGUsbGlicmFyeTphLmxpYnJhcnkuTElCUkFSWU5BTUUsbG9hZGluZ0Rh'@;
put 'dGE6ITAsZmlsdGVyX3BrOiIwIixpZDpkLnZpZXdib3hlcy5sZW5ndGgrMSx4OndpbmRvdy5pbm5lcldpZHRoLWQuZGVmYXVsdENvbmZpZy53aWR0aCx5OjE1MH07ZC52aWV3Ym94ZXMucHVzaChoKSxzZXRUaW1lb3V0KCgpPT57ZC5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pO2NvbnN0IGY9'@;
put 'YCR7YS5saWJyYXJ5LkxJQlJBUllSRUZ9LiR7YS5saWJUYWJsZX1gO3lpZWxkIGQubG9hZERhdGEoZixoKSxoLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLGQuc25hcFRvR3JpZCgpfSkoKX1sb2FkVGFibGVzKGEsZCl7dGhpcy5zYXNTdG9y'@;
put 'ZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKGg9PntsZXQgZj1oLm1wdGFibGVzLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5NRU1OQU1FfSk7dGhpcy5saWJpbmZvPWgubGliaW5mb3x8W10sdGhpcy50YWJsZXM9ZixkJiYoZC50YWJsZXM9ZixkLmxpYmluZm89dGhpcy5saWJpbmZvLGQu'@;
put 'bG9hZGluZ1RhYmxlcz0hMSxmLmxlbmd0aD4wJiYoZC5leHBhbmRlZD0hMCkpfSkuY2F0Y2goaD0+e3RoaXMubG9nZ2VyU2VydmljZS5lcnJvcihoKX0pfXJlbG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9Pnts'@;
put 'ZXQgVD1oLnZpZXdib3hUYWJsZXMuZmluZChXPT5XLnZpZXdib3hJZD09PWQuaWQpO2guc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oVz0+e1QmJihULmhvdFRhYmxlLmRhdGE9Vy52aWV3ZGF0YSksZihudWxsKX0pLmNhdGNoKCgp'@;
put 'PT57XygpfSl9KX0pKCl9bG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsXyk9PntsZXQgVD0hMSxXPWgudmlld2JveFRhYmxlcy5maW5kKGllPT5pZS52aWV3Ym94SWQ9PT1kLmlkKTtXJiYoIjAiPT09ZC5maWx0ZXJf'@;
put 'cGt8fCFkLmZpbHRlcl9waykmJmYoKSxoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKGllPT57Vz9UPSEwOlc9e3ZpZXdib3hJZDpkLmlkLHZpZXdib3hMaWJEYXRhc2V0OmEsaG90VGFibGU6engoaC5ob3RUYWJsZURlZmF1bHQp'@;
put 'fSxXLmhvdFRhYmxlLmRhdGE9aWUudmlld2RhdGEsVy5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9aWUuJHZpZXdkYXRhLFcuaG90VGFibGUuY29scz1pZS5jb2xzLHp6KFcuaG90VGFibGUuY29scyxbXSxpZS4kdmlld2RhdGEpO2xldCBwZT1bXSx3ZT1bXTtmb3IobGV0IEVlIGluIGllLnZpZXdk'@;
put 'YXRhWzBdKUVlJiZ3ZS5wdXNoKEVlKTtmb3IobGV0IEVlPTA7RWU8d2UubGVuZ3RoO0VlKyspcGUucHVzaCh7ZGF0YTp3ZVtFZV19KTtXLmhvdFRhYmxlLmhlYWRlclBrcz16eChpZS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIikpLFcuaG90VGFibGUuYWxsQ29sSGVhZGVycz13'@;
put 'ZS5maWx0ZXIoRWU9PiFXLmhvdFRhYmxlLmhlYWRlclBrcy5pbmNsdWRlcyhFZSkpLFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbj16eChXLmhvdFRhYmxlLmFsbENvbEhlYWRlcnMpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9d2UuZmlsdGVyKEVlPT5XLmhvdFRhYmxlLmhlYWRl'@;
put 'clBrcy5pbmNsdWRlcyhFZSkpLFcuaG90VGFibGUuY29sSGVhZGVycz13ZSxXLmhvdFRhYmxlLmNvbHVtbnM9cGUsZC5jb2x1bW5zJiZkLmNvbHVtbnMubGVuZ3RoPjA/KFcuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZT1kLmNvbHVtbnMsZC5jb2x1bW5zPy5tYXAoKEVlLFplKT0+e2NvbnN0'@;
put 'IGl0PXdlW0VlXSxldD1XLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uaW5kZXhPZihpdCk7ZXQ+LTEmJihXLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKGV0LDEpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGVbWmVdPWl0KX0pKTpXLmhvdFRhYmxlLmNvbEhlYWRlcnNW'@;
put 'aXNpYmxlLnB1c2goLi4uVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZSgwLDEwKSksVy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1XLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmZpbHRlcihFZT0+RWUpLFR8fGgudmlld2JveFRhYmxlcy5wdXNoKFcpLGQucXVlcnk9'@;
put 'aC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZS5xdWVyeSksZC5maWx0ZXJUZXh0PWllLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKFcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgRWU9aC5nZXRW'@;
put 'aWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7RWU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOlcuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooWmUsaXQpPT57Y29uc3QgZXQ9RWU/LmNvbFRvUHJvcChaZSk7ZXQmJlcuaG90VGFibGUuaGVhZGVy'@;
put 'UGtzLmluZGV4T2YoZXQpPi0xJiZpdC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKX19KSxFZT8ucmVuZGVyKCksaC5zZWxlY3RlZFZpZXdib3gmJmgucmVzZXRTZWxlY3RlZFZpZXdib3goZCl9KSxmKCl9KS5jYXRjaChpZT0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihp'@;
put 'ZSksXygpfSl9KX0pKCl9cmVMb2FkVmlld2JveHRhYmxlcyhhKXthLm1hcChkPT57Y29uc3QgaD1gJHtkLmxpYnJhcnl9LiR7ZC50YWJsZX1gO2QubG9hZGluZ0RhdGE9ITAsdGhpcy5sb2FkRGF0YShoLGQpLnRoZW4oKCk9PntkLmxvYWRpbmdEYXRhPSExfSl9KX1tYXhXaWR0aENoZWtlcihh'@;
put 'LGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRWaWV3Ym94VGFibGVJbmRleChhKXtyZXR1cm4gdGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChoPT5oLnZpZXdib3hJZD09PWEuaWQpfXJlc2l6ZShhLGQpe2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWQuZ2V0Qm91bmRp'@;
put 'bmdDbGllbnRSZWN0KCksXz1oLmxlZnQtZi5sZWZ0K2gud2lkdGgsVD1oLnRvcC1mLnRvcCtoLmhlaWdodDtyZXR1cm4gZC5zdHlsZS53aWR0aD1fKyJweCIsZC5zdHlsZS5oZWlnaHQ9VCsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91'@;
put 'bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx7d2lkdGg6XyxoZWlnaHQ6VH19ZHJhZ01vdmUoYSxkLGgsZil7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBfPXRo'@;
put 'aXMucmVzaXplKGEsZCk7aC53aWR0aD1fLndpZHRoLGguaGVpZ2h0PV8uaGVpZ2h0fSl9c2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl7dGhpcy5yZXNpemVCb3hRdWVyeS5mb3JFYWNoKGE9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWBoYW5kbGVf'@;
put 'JHthLm5hdGl2ZUVsZW1lbnQuaWR9YCxmPXRoaXMuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5LmZpbmQoKF8sVCk9Pl8ubmF0aXZlRWxlbWVudC5pZD09PWgpO3RoaXMuc2V0SGFuZGxlVHJhbnNmb3JtKGY/Lm5hdGl2ZUVsZW1lbnQsZCwiYm90aCIpfSl9c2V0SGFuZGxlVHJhbnNmb3JtKGEsZCxo'@;
put 'KXtjb25zdCBmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IF89ZC53aWR0aC1mLndpZHRoLFQ9ZC5oZWlnaHQtZi5oZWlnaHQ7Xys9NSxUKz01LCJ4Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7X31weCwgMClgKSwieSI9PT1oJiYoYS5zdHlsZS50cmFuc2Zv'@;
put 'cm09YHRyYW5zbGF0ZSgwLCAke1R9cHgpYCksImJvdGgiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHtffXB4LCAke1R9cHgpYCl9Zm9jdXNWaWV3Ym94KGEpe3RoaXMudmlld2JveGVzLm1hcChkPT57ZC5mb2N1c2VkPSExfSksYS5mb2N1c2VkPSEwfXZpZXdib3hEcmFn'@;
put 'RW5kZWQoYSxkKXtsZXQgZj1hLnNvdXJjZS5nZXRSb290RWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QueD1mLmxlZnQsZC55PWYudG9wLHRoaXMudmlld2JveENoYW5nZWQoKX1zbmFwVG9HcmlkKCl7Y29uc3QgYT13aW5kb3cuaW5uZXJXaWR0aCxkPXdpbmRvdy5pbm5lckhl'@;
put 'aWdodCxUPU1hdGguY2VpbCh0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksVz1NYXRoLmZsb29yKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSx3ZT0oYS01KihUKzEpKS9ULEVlPShhLTUqKFcrMSkpL1c7bGV0IGl0PTAseXQ9KGQtMjUwLTYwKS8yLEV0PTAsU3Q9MDtmb3IobGV0IEp0PTA7SnQ8'@;
put 'dGhpcy52aWV3Ym94ZXMubGVuZ3RoO0p0Kyspe2xldCBubj10aGlzLnZpZXdib3hlc1tKdF0sdm49IShKdD5ULTEpO2NvbnN0IE5uPXZuP3dlOkVlOyF2biYmMD09PVN0JiYoRXQ9MCxTdCsrLGl0PTApLG5uLng9NStpdCtFdCooTm4rNSksbm4ueT0yNTArU3QqKHl0KzUpLG5uLndpZHRoPU5u'@;
put 'LG5uLmhlaWdodD15dCxFdCsrfXRoaXMudmlld2JveENoYW5nZWQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKX0pfW1pbmltaXplQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITB9KSx0aGlzLnZpZXdib3hDaGFuZ2Vk'@;
put 'KCl9cmVzdG9yZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc2V0UG9zU2l6ZShhKXthLng9d2luZG93LmlubmVyV2lkdGgtdGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEueT10aGlzLmRlZmF1bHRDb25m'@;
put 'aWcueSxhLndpZHRoPXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLmhlaWdodD10aGlzLmRlZmF1bHRDb25maWcuaGVpZ2h0LHRoaXMudmlld2JveENoYW5nZWQoKX1taW5pbWl6ZShhKXthLm1pbmltaXplZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzdG9yZShhKXthLm1pbmltaXpl'@;
put 'ZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y29sbGFwc2UoYSl7YS5jb2xsYXBzZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWV4cGFuZChhKXthLmNvbGxhcHNlZD0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9Y2xvc2UoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgo'@;
put 'Zj0+Zi5pZD09PWEuaWQpLGg9dGhpcy52aWV3Ym94VGFibGVzLmZpbmRJbmRleChmPT5mLnZpZXdib3hJZD09PWEuaWQpO2Q+LTEmJnRoaXMudmlld2JveGVzLnNwbGljZShkLDEpLGg+LTEmJnRoaXMudmlld2JveFRhYmxlcy5zcGxpY2UoaCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ9'@;
put 'PT1hLmlkJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCksR24udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoUE8pLHRoaXMudmlld2JveENoYW5nZWQoKX1zZWxlY3RWaWV3Ym94KGEpe3ZvaWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJnZv'@;
put 'aWQgMD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94P3RoaXMucmVzZXRTZWxlY3RlZFZpZXdib3goYSk6YS5pZD09PXRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD90aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCk6dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKX1jb2x1bW5zRHJvcChhKXt0aGlz'@;
put 'LnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuJiYoYS5wcmV2aW91c0NvbnRhaW5lcj09PWEuY29udGFpbmVyP2NzZShhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCk6ZnVuY3Rpb24gZ0JlKGMsbCxhLGQpe2NvbnN0'@;
put 'IGg9YXcoYSxjLmxlbmd0aC0xKSxmPWF3KGQsbC5sZW5ndGgpO2MubGVuZ3RoJiZsLnNwbGljZShmLDAsYy5zcGxpY2UoaCwxKVswXSl9KGEucHJldmlvdXNDb250YWluZXIuZGF0YSxhLmNvbnRhaW5lci5kYXRhLGEucHJldmlvdXNJbmRleCxhLmN1cnJlbnRJbmRleCksdGhpcy5zZWxlY3Rl'@;
put 'ZFZpZXdib3hUYWJsZS5ob3RUYWJsZSYmIm9iamVjdCI9PXR5cGVvZiB0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnMpJiZ0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEuaXRlbS5kYXRhLGEuY3VycmVudEluZGV4LHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFi'@;
put 'bGUudmlld2JveElkKX1vbkNvbHNlYXJjaENoYW5nZShhLGQsaCl7Y29uc3QgZj1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZiwxKSxhLnZhbHVlPSIiLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlJiYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFk'@;
put 'ZXJzVmlzaWJsZS5wdXNoKGQpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGQsdGhpcy5z'@;
put 'ZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgtMSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkpfW9uQ29sUmVtb3ZlKGEpe2lmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlKXtjb25zdCBkPXRoaXMuc2Vs'@;
put 'ZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuaW5kZXhPZihhKTt0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnNwbGljZShkLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVy'@;
put 'c0hpZGRlbi5wdXNoKGEpLHRoaXMudXBkYXRlSG90Q29sdW1ucyh0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSx0aGlzLnVwZGF0ZUNvbHVtbk9yZGVySG90KGEsdGhpcy5zZWxl'@;
put 'Y3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfX1yZXNldFNlbGVjdGVkVmlld2JveChhKXt0aGlzLnNlbGVjdGVkVmlld2JveD1hLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dGhp'@;
put 'cy52aWV3Ym94VGFibGVzLmZpbmQoZD0+ZC52aWV3Ym94SWQ9PT1hLmlkKX11bnNldFNlbGVjdGVkVmlld2JveCgpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PXZvaWQgMCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXZvaWQgMH1zdG9wUHJvcGFnYXRpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24o'@;
put 'KX1vcGVuRmlsdGVyKGEpe3RoaXMuc2VsZWN0Vmlld2JveChhKTtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlc1t0aGlzLmdldFZpZXdib3hUYWJsZUluZGV4KGEpXTt0aGlzLmZpbHRlckxpYmRzPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWAsdGhpcy5maWx0ZXJpbmdWaWV3Ym94PWEsdGhp'@;
put 'cy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMuZmlsdGVyTGliZHMsZC5ob3RUYWJsZS5jb2xzKX1vcGVuVGFibGVFZGl0KGEpe2NvbnN0IGQ9YS5saWJyYXJ5KyIuIithLnRhYmxlO2xldCBoPWxv'@;
put 'Y2F0aW9uLmhyZWYuc2xpY2UoMCxsb2NhdGlvbi5ocmVmLmluZGV4T2YoIiMiKSk7aD1gJHtofSMvZWRpdG9yLyR7ZH1gLHdpbmRvdy5vcGVuKGgsIl9ibGFuayIpfXJlc2V0RmlsdGVyKCl7dGhpcy5maWx0ZXJpbmdWaWV3Ym94JiYodGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz0i'@;
put 'MCIsdGhpcy5yZWxvYWRUYWJsZURhdGEodGhpcy5maWx0ZXJpbmdWaWV3Ym94KSx0aGlzLmZpbHRlcj0hMSx0aGlzLnZpZXdib3hDaGFuZ2VkKCksR24udmlld2JveGVzW3RoaXMuZmlsdGVyaW5nVmlld2JveC5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQTykpfXNlbmRDbGF1'@;
put 'c2UoKXt0aGlzLmZpbHRlckxvYWRpbmc9ITA7bGV0IGE9W10sZD1bXTtpZih0eXBlb2YgdGhpcy5jbGF1c2VzPiJ1IilyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0ZXJMb2FkaW5nPSExKTt7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqO2ZvcihsZXQgZj0w'@;
put 'O2Y8aC5sZW5ndGg7ZisrKXtjb25zdCBfPWhbZl0uZWxlbWVudHM7YT1fLmZpbHRlcihmdW5jdGlvbihUKXtyZXR1cm4gbnVsbD09PVQudmFyaWFibGV9KSxhLmxlbmd0aCYmZC5wdXNoKF8pfX1pZihkLmxlbmd0aClyZXR1cm4gdGhpcy5udWxsVmFyaWFibGVzPSEwLHZvaWQodGhpcy5maWx0'@;
put 'ZXJMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09dGhpcy5jbGF1c2VzJiZ0aGlzLmZpbHRlckxpYmRzKXtjb25zdCBoPXtncm91cExvZ2ljOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goXz0+e2NvbnN0IFQ9'@;
put 'e2ZpbHRlckNsYXVzZXM6W119O18uZWxlbWVudHMuZm9yRWFjaChXPT57VC5maWx0ZXJDbGF1c2VzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KSxULmNsYXVzZUxvZ2ljPV8uY2xhdXNlTG9naWMsaC5maWx0ZXJHcm91cHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2Uu'@;
put 'ZGVlcENsb25lKFQpKX0pO2NvbnN0IGY9dGhpcy5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShoKTt0aGlzLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkodGhpcy5maWx0ZXJMaWJkcyxmKS50aGVuKF89Pnt0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPV8u'@;
put 'cmVzdWx0WzBdLkZJTFRFUl9SSyx0aGlzLmxvYWREYXRhKHRoaXMuZmlsdGVyTGliZHMsdGhpcy5maWx0ZXJpbmdWaWV3Ym94KS50aGVuKCgpPT57dGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfSkuY2F0Y2goXz0+e3RoaXMuZmls'@;
put 'dGVyTG9hZGluZz0hMX0pfX1jYXRjaHt0aGlzLmZpbHRlckxvYWRpbmc9ITF9fXNlYXJjaFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBmPWEudmFsdWUsXz1kLmxpYnJhcnkrIi4iK2QudGFibGUsVD1wYXJzZUludChk'@;
put 'LmZpbHRlcl9wa3x8IjAiKTtjb25zdCBXPWgudmlld2JveFRhYmxlcy5maW5kKGllPT5pZS52aWV3Ym94SWQ9PT1kLmlkKTtXJiYoeWllbGQgaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goZixkLnNlYXJjaE51bWVyaWMsXyxUKS50aGVuKGllPT57aWUuc2FzcGFyYW1zfHxpZS52'@;
put 'aWV3RGF0YT9XLmhvdFRhYmxlLmRhdGE9aWUudmlld2RhdGE6ZC5zZWFyY2hMb2FkaW5nPSEwfSkuY2F0Y2goaWU9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0'@;
put 'aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0'@;
put 'aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IF89Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1h'@;
put 'bnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKF8sZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJs'@;
put 'ZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNv'@;
put 'bHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCBfPXRo'@;
put 'aXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsVD1bXTtyZXR1cm4gaC5tYXAoKFcsaWUpPT57aWYoaWU8Xyl7Y29uc3QgcGU9Zi5pbmRleE9mKFcpO3BlPi0xJiZULnB1c2gocGUpfX0pLFR9dXBkYXRlSGlkZGVuQ29sdW1uc0hv'@;
put 'dChhLGQpe2NvbnN0IGg9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZCk7aWYoaCl7Y29uc3QgZj1hLm1hcChfPT5oLnByb3BUb0NvbChfKSk7aC51cGRhdGVTZXR0aW5ncyh7aGlkZGVuQ29sdW1uczp7Y29sdW1uczpmfX0pLGgucmVuZGVyKCl9fWdldFZpZXdib3hIb3RJbnN0YW5jZShh'@;
put 'KXtyZXR1cm4gYT90aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZShgaG90SW5zdGFuY2Vfdmlld2JveF8ke2F9YCk6dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2'@;
put 'aWV3Ym94ZXM6ZH0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZpbHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEdu'@;
put 'LnZpZXdib3hlc1thLmlkXXx8KEduLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFBPKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5mLnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hl'@;
put 'cy4ke2EuaWR9YDtHbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksR24udmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2EudGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRh'@;
put 'YmxlLmNvbHMpfX1lbmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxmKT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2guY29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8x'@;
put 'OjB9LSR7aC5maWx0ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8iLSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYmKGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAoXz0+'@;
put 'e2NvbnN0IFQ9Xy5zcGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoVFswXSksbGlicmFyeTpUWzFdLHRhYmxlOlRbMl0sd2lkdGg6cGFyc2VJbnQoVFszXSksaGVpZ2h0OnBhcnNlSW50KFRbNF0pLHg6cGFyc2VJbnQoVFs1XSkseTpwYXJzZUludChUWzZdKSxjb2xsYXBzZWQ6ISFwYXJz'@;
put 'ZUludChUWzddKSxtaW5pbWl6ZWQ6ISFwYXJzZUludChUWzhdKSxjb2x1bW5zOlRbMTBdPy5zcGxpdCgiLCIpLm1hcChXPT5wYXJzZUludChXKSl8fFtdLGZpbHRlcl9wazpUWzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5vKSx0dChDMCksdHQob2EpLHR0KHZsKSx0dChiZCksdHQodzApLHR0KFRjKSx0dChEcyksdHQoV2wpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3Ym94ZXMiXV0sdmlld1F1'@;
put 'ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oJGplLDUpLFJvKHFqZSw1KSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5yZXNpemVCb3hRdWVyeT1oKSxzaShoPWFpKCkpJiYoZC5kcmFnSGFuZGxlQ29ybmVyUXVlcnk9aCl9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1v'@;
put 'ZGFsIn0sb3V0cHV0czp7dmlld2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxkZWNsczo1Nix2YXJzOjIzLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9z'@;
put 'YWJsZSIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxb'@;
put 'MSwibXQtMC1pIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVP'@;
put 'bkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1i'@;
put 'b3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFwZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwi'@;
put 'dGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZs'@;
put 'ZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsi'@;
put 'dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4'@;
put 'IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXIt'@;
put 'bW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmll'@;
put 'd2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJsaWNlbmNl'@;
put 'LW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5TGlzdCIsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiXSxbMSwidGV4'@;
put 'dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFs'@;
put 'bCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJd'@;
put 'LFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJt'@;
put 'bC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5z'@;
put 'IiwidGFiaW5kZXgiLCIwIiwzLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlQ2hhbmdlIl0sWyJpbnB1dCIsIiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0Ryb3BMaXN0IiwiIiwxLCJjb2xzLWxpc3QiLDMsImNka0Ryb3BMaXN0RGF0YSIsImNka0Ryb3BMaXN0RHJv'@;
put 'cHBlZCJdLFsiY2RrRHJhZyIsIiIsMywiY2xhc3MiLCJjdXJzb3ItZGVmYXVsdC1pIiwicHJpbWFyeUtleUhlYWRlclN0eWxlIiwiY2RrRHJhZ0RhdGEiLCJjZGtEcmFnRGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJhZyIsIiIsMywiY2RrRHJhZ0RhdGEiLCJjZGtEcmFn'@;
put 'RGlzYWJsZWQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRyYXNoIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwia2V5Il0sWyJzaGFwZSIsInRyYXNoIiwxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNk'@;
put 'a0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMSwidmlld2JveCIsMywiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCJdLFsicmVzaXplQm94IiwiIl0sWyJjZGtEcmFn'@;
put 'SGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImlkIiwiY2RrRHJhZ01vdmVkIl0sWyJkcmFn'@;
put 'SGFuZGxlQ29ybmVyIiwiIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVy'@;
put 'IiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywidHlwZSIsImtleXVwLmVudGVyIl0sWyJzZWFyY2hFbCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNr'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bp'@;
put 'bm5lci1zbSIsNCwibmdJZiJdLFsic2hhcGUiLCJyZWZyZXNoIiwiY2xhc3MiLCJjbGljay1pY29uIiwzLCJjbGljayIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbGciLCJ0b29sdGlwLWJvdHRvbS1sZWZ0'@;
put 'IiwibWwtNSIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIiwxLCJjbGljay1pY29uIl0sWzEsInRvb2x0aXAtY29udGVudCIsInRvb2x0aXAtbG9uZyJdLFsic2hhcGUiLCJwZW5jaWwiLDEsImNsaWNrLWljb24iLCJtbC01IiwzLCJjbGljayJdLFsiY2xhc3MiLCJjb250ZW50IiwzLCJk'@;
put 'aXNwbGF5Iiw0LCJuZ1ZhciJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWzEsInNwaW5uZXIiLCJzcGlubmVy'@;
put 'LXNtIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsImNsaWNrLWljb24iLDMsImNsaWNrIl0sWzEsImNvbnRlbnQiXSxbImNsYXNzIiwiaG90LXNwaW5uZXIgbXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJ'@;
put 'ZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhl'@;
put 'aWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiLDQsIm5nSWYiXSxbMSwiaG90LXNwaW5uZXIiLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFk'@;
put 'T25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJj'@;
put 'ZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Il0sWzMsInZpZXdib3hJZCJdLFsicXVlcnlGaWx0ZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKGYpe3JldHVybiBkLmNsck1vZGFsT3BlbkNoYW5nZShmKX0pLG1lKDEsImgzIiwxKSxOZSgyLCIgVmlld2JveGVzICIpLEplKDMsS2plLDIsMiwic3BhbiIsMikseWUoKSxtZSg0LCJkaXYiLDMpKDUsImRpdiIsNCkoNiwicCIsNSksTmUoNywiQWRkIG5ldyIpLHllKCkscXQoOCwiaHIi'@;
put 'LDYpLEplKDksWGplLDIsMCwiZGl2Iiw3KSxKZSgxMCxKamUsMiwwLCJwIiw4KSxKZSgxMSxRamUsMSwxLCJkYy10cmVlIiw5KSx5ZSgpLG1lKDEyLCJkaXYiLDEwKSgxMywiZGl2IiwxMSkoMTQsInAiLDUpLE5lKDE1LCJDdXJyZW50bHkgb3BlbiIpLHllKCksbWUoMTYsImRpdiIpKDE3LCJh'@;
put 'IiwxMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNuYXBUb0dyaWQoKX0pLHF0KDE4LCJjbHItaWNvbiIsMTMpLG1lKDE5LCJzcGFuIiwxNCksTmUoMjAsIlNuYXAgdmlld2JveGVzIHRvIGdyaWQiKSx5ZSgpKCksbWUoMjEsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGQubWluaW1pemVBbGwoKX0pLHF0KDIyLCJjbHItaWNvbiIsMTUpLG1lKDIzLCJzcGFuIiwxNCksTmUoMjQsIk1pbmltaXplIGFsbCB2aWV3Ym94ZXMiKSx5ZSgpKCksbWUoMjUsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzdG9yZUFsbCgpfSkscXQo'@;
put 'MjYsImNsci1pY29uIiwxNiksbWUoMjcsInNwYW4iLDE0KSxOZSgyOCwiUmVzdG9yZSBhbGwgdmlld2JveGVzIikseWUoKSgpKCkoKSxxdCgyOSwiaHIiKSxKZSgzMCxlemUsMiwwLCJwIiwxNyksSmUoMzEsaXplLDE1LDEwLCJkaXYiLDE4KSxtZSgzMiwiZGl2IiwxOSkoMzMsInAiLDIwKSxO'@;
put 'ZSgzNCkseWUoKSgpLHF0KDM1LCJociIpLEplKDM2LGR6ZSwzLDIsImRpdiIsMjEpLHllKCkoKSxtZSgzNywiZGl2IiwyMikoMzgsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3Ym94TW9kYWw9ITF9KSxOZSgzOSwiIE9rICIpLHllKCkoKSgpLG1lKDQw'@;
put 'LCJkaXYiLDI0KSxKZSg0MSxDemUsMzMsMzcsImRpdiIsMjUpLHllKCksbWUoNDIsImNsci1tb2RhbCIsMjYpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmZpbHRlcj1mfSksbWUoNDMsImgzIiwyNyksTmUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFi'@;
put 'bGU6ICIpLG1lKDQ1LCJzcGFuIiksTmUoNDYpLHllKCkoKSxtZSg0NywiZGl2IiwyOCksSmUoNDgsU3plLDIsMSwiYXBwLXF1ZXJ5IiwyOSkseWUoKSxtZSg0OSwiZGl2IiwyMikoNTAsImJ1dHRvbiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSks'@;
put 'TmUoNTEsIiByZXNldCBmaWx0ZXIgIikseWUoKSxtZSg1MiwiYnV0dG9uIiwyMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmZpbHRlcj0hMX0pLE5lKDUzLCIgQ2FuY2VsICIpLHllKCksbWUoNTQsImJ1dHRvbiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5z'@;
put 'ZW5kQ2xhdXNlKCl9KSxOZSg1NSwiIE9rICIpLHllKCkoKSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgzKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2Jv'@;
put 'eF9saW1pdCE9PWQuSW5maW5pdHkpLENlKDYpLFJlKCJuZ0lmIixkLmxpYnJhcmllc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLnZpZXdib3hMaW1pdFJlYWNoZWQpLENlKDEpLFJlKCJuZ0lmIixkLnZpZXdib3hNb2RhbCksQ2UoMTkpLFJlKCJuZ0lmIixkLnZpZXdib3hlcy5sZW5ndGg8'@;
put 'MSksQ2UoMSksUmUoIm5nRm9yT2YiLGQudmlld2JveGVzKSxDZSgzKSxwcigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9ZC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmZC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFi'@;
put 'bGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLENlKDIpLFJl'@;
put 'KCJuZ1ZhciIseV8oMTksTXplLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09ZC5zZWxlY3RlZFZpZXdib3hU'@;
put 'YWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJs'@;
put 'ZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksQ2UoNSksUmUoIm5nRm9yT2YiLGQudmlld2JveGVzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbHRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0'@;
put 'KSx6YygiICMiLG51bGw9PWQuZmlsdGVyaW5nVmlld2JveD9udWxsOmQuZmlsdGVyaW5nVmlld2JveC5pZCwiICIsZC5maWx0ZXJMaWJkcywiICIpLENlKDIpLFJlKCJuZ0lmIixkLmZpbHRlciksQ2UoNiksUmUoImNsckxvYWRpbmciLGQuZmlsdGVyTG9hZGluZykpfSxkZXBlbmRlbmNpZXM6'@;
put 'W3hzLFppLGthLG91LHN1LFp1LGRoLFVzLFhKLEQwLEQ4LFQwLGYxLHUyLENwLGwxLGMxLFMwLEJzLHdwLE9zLHIyLGNVLHh5LHZzZSxwc2Usd3NlLF9zZSxTc2UsR2plLFU3LFliXSxzdHlsZXM6WyIubGljZW5jZS1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2Rp'@;
put 'c3BsYXk6YmxvY2s7b3BhY2l0eTouNn1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMzAwfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6Y2FsYygxMDAlIC0gNjBweCl9'@;
put 'Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtY29udGVudHtoZWlnaHQ6ODB2aH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9Y2xyLW1vZGFs'@;
put 'LnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6MTAwJTtoZWlnaHQ6MTAwJX1kYy10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6MX0udG9vbHRpcC1sb25nW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFkZC1uZXdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJTtwYWRkaW5nLXJpZ2h0OjVweH0udmlld2JveC1saW1pdC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY30uY3VycmVudGx5LW9w'@;
put 'ZW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAgLm9wZW4tdmlld2JveFtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAub3Blbi12aWV3Ym94LnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoNjAsMTMzLDAsLjE4MDM5MjE1NjkpfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNr'@;
put 'Z3JvdW5kOiNlOGU4ZTh9LnZpZXdib3hlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjIwMHB4O21pbi1oZWlnaHQ6'@;
put 'MjAwcHg7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3BvaW50ZXItZXZlbnRzOmFsbDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMCAxMHB4IC0z'@;
put 'cHggIzAwMH0udmlld2JveC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMwMTk2MDc4'@;
put 'NDMpO2JhY2tncm91bmQ6d2hpdGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3Vu'@;
put 'ZC1jb2xvcjojM2M4NTAwO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAudGFibGUtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdj'@;
put 'b250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17'@;
put 'Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNm'@;
put 'b3JtOnNjYWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zv'@;
put 'cm06c2NhbGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuY29ybmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0'@;
put 'aDoxNXB4O2hlaWdodDoxNXB4O2N1cnNvcjpud3NlLXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5yaWdodFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmRyYWdIYW5kbGUuYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7Y3Vyc29yOm5zLXJlc2l6ZX0uY29scy1zZWFyY2hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2Jh'@;
put 'KDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH0uY29scy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6'@;
put 'YmxvY2s7d2lkdGg6NDAwcHg7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHh9LmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI2NjYztjb2xvcjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9u'@;
put 'OnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2JhY2tncm91bmQ6d2hpdGU7Zm9udC1zaXplOjE0cHh9LmNvbC1ib3guc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNr'@;
put 'Z3JvdW5kOnJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpfS5jb2wtYm94LnByaW1hcnlLZXlIZWFkZXJTdHlsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC4xNDExNzY0NzA2KX0uY2RrLWRyYWctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemlu'@;
put 'Zzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMsMCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHggMnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fS5jZGstZHJhZy1wbGFjZWhvbGRlcltfbmdjb250'@;
put 'ZW50LSVDT01QJV17b3BhY2l0eTowfS5jZGstZHJhZy1hbmltYXRpbmdbX25nY29udGVudC0lQ09NUCVde3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uY29sLWJveFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtib3JkZXI6bm9uZX0uY29s'@;
put 'cy1saXN0LmNkay1kcm9wLWxpc3QtZHJhZ2dpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVdOm5vdCguY2RrLWRyYWctcGxhY2Vob2xkZXIpe3RyYW5zaXRpb246dHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKX0uZGlzYWJsZWRb'@;
put 'X25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjU7dHJhbnNmb3JtOm5vbmUhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LmZpbHRlci1hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDcyYTN9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmZpcnN0Q29s'@;
put 'dW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC42OTAxOTYwNzg0KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tn'@;
put 'cm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0aC5yZWFkb25seUNlbGwgZGl2e29wYWNpdHk6LjR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGQucmVhZG9ubHlDZWxse29wYWNpdHk6LjV9Il19KSxjfSko'@;
put 'KSxFc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBFcix0aGlzLmZpbGVEcm9wPW5ldyBFcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihk'@;
put 'KWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRh'@;
put 'dGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3By'@;
put 'ZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIs'@;
put 'IiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJkcm9wIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3AoZil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJhZ092ZXIoZil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRy'@;
put 'YWdMZWF2ZShmKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KSxjfSkoKSxrc2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVTZWxlY3RlZD1uZXcgRXIsdGhpcy5l'@;
put 'bGVtZW50PWF9aXNFbXB0eUFmdGVyU2VsZWN0aW9uKCl7cmV0dXJuISF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLm11bHRpcGxlfW9uQ2hhbmdlKCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maWxlczt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVl'@;
put 'KGEpLHRoaXMuZmlsZVNlbGVjdGVkLmVtaXQoYSksdGhpcy5pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKSYmKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVk'@;
put 'aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6'@;
put 'e2ZpbGVTZWxlY3RlZDoiZmlsZVNlbGVjdGVkIn19KSxjfSkoKTtmdW5jdGlvbiB4emUoYyxsKXsxJmMmJihtZSgwLCJwIiw4KSxOZSgxLCIgTm8gZGF0YXNldCBtZXRhIHRvIHNob3cuICIpLHllKCkpfWZ1bmN0aW9uIEV6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kZy1yb3ciKSgxLCJj'@;
put 'bHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLk5BTUUpLENlKDIpLG9yKGEuVkFMVUUpfX1mdW5jdGlvbiBremUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRl'@;
put 'bnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSgyLCJjbHItZGctY29sdW1uIiksTmUoMywiTmFtZSIpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIpLE5lKDUsIlZhbHVlIikseWUoKSxKZSg2LEV6ZSw1LDIsImNsci1kZy1yb3ciLDUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxp'@;
put 'Y2l0O0NlKDYpLFJlKCJuZ0Zvck9mIixhLmRzbWV0YSl9fWZ1bmN0aW9uIEF6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkpLE5lKDIpLHllKCksSmUoMyxremUsNywxLCJjbHItdGFiLWNvbnRlbnQiLDEwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQsZD1sLmluZGV4O0NlKDIpLG9yKGEuZ3JvdXApLENlKDEpLFJlKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgQXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcix0aGlzLmRzbWV0YUdyb3Vw'@;
put 'cGVkPVtdfW5nT25Jbml0KCl7fW5nT25DaGFuZ2VzKGEpe2EuZHNtZXRhPy5jdXJyZW50VmFsdWU/Lmxlbmd0aD4wJiZ0aGlzLnBhcnNlRFNNZXRhKCl9cGFyc2VEU01ldGEoKXt0aGlzLmRzbWV0YUdyb3VwcGVkPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21l'@;
put 'dGFHcm91cHBlZC5maW5kSW5kZXgoaD0+aC5ncm91cD09PWEuT0RTX1RBQkxFKTtkPDAmJihkPXRoaXMuZHNtZXRhR3JvdXBwZWQucHVzaCh7Z3JvdXA6YS5PRFNfVEFCTEUsZHNtZXRhOltdfSktMSksdGhpcy5kc21ldGFHcm91cHBlZFtkXS5kc21ldGEucHVzaChhKX19b25PcGVuQ2hhbmdl'@;
put 'KGEpe3RoaXMub3Blbj1hLHRoaXMub3BlbkNoYW5nZS5lbWl0KGEpfW9uQ2xvc2VDbGljaygpe3RoaXMub25PcGVuQ2hhbmdlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFw'@;
put 'cC1kYXRhc2V0LWluZm8iXV0saW5wdXRzOntvcGVuOiJvcGVuIixkc21ldGE6ImRzbWV0YSJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdmFdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJN'@;
put 'b2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0'@;
put 'aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlk'@;
put 'IiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihtZSgwLCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uT3BlbkNoYW5nZShmKX0pLG1lKDEsImgzIiwxKSxOZSgyLCJEYXRhc2V0IE1ldGEiKSx5ZSgpLG1lKDMsImRpdiIsMiksSmUoNCx4emUsMiwwLCJwIiwz'@;
put 'KSxtZSg1LCJjbHItdGFicyIsNCksSmUoNixBemUsNCwyLCJjbHItdGFiIiw1KSx5ZSgpKCksbWUoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkNsb3NlQ2xpY2soKX0pLE5lKDksIiBDbG9zZSAiKSx5ZSgpKCkoKSksMiZhJiYoUmUo'@;
put 'ImNsck1vZGFsT3BlbiIsZC5vcGVuKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLENlKDQpLFJlKCJuZ0lmIixkLmRzbWV0YUdyb3VwcGVkLmxlbmd0aDwxKSxDZSgyKSxSZSgibmdGb3JPZiIsZC5kc21ldGFHcm91cHBlZCkpfSxkZXBlbmRlbmNpZXM6W3hz'@;
put 'LFppLFc4LFRwLHRnLG5nLHJnLGlnLCQ4LG9nLEI4LGtwLHo4LG91LHN1LEU4LExwLE9wLGRnLFJwLElwLGNnXSxzdHlsZXM6WyIubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItdGFic1tfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo3MHZofS5tb2RhbC1ib2R5W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfSJdfSksY30pKCk7ZnVuY3Rpb24gVHpl'@;
put 'KGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0aW9uIER6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7UmUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcpLENlKDEpLHByKCIgIixhLmdlbmVyYXRlZFJlY29y'@;
put 'ZFVybD8iY29weSB0byBjbGlwYm9hcmQiOmEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz8iR2VuZXJhdGluZyB1cmwuLi4iOiJMaW5rIHRvIHRoaXMgcmVjb3JkIiwiICIpfX1mdW5jdGlvbiBJemUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLFR6ZSwyLDEsInNwYW4iLDExKSxKZSgy'@;
put 'LER6ZSwyLDIsImJ1dHRvbiIsMTIpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLENlKDEpLFJlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJy'@;
put 'ZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBMemUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE1KSgxLCJzcGFuIiwxNiksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBSemUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gT3plKGMs'@;
put 'bCl7MSZjJiYobWUoMCwic3BhbiIsMzApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIFB6ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBGemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaW5wdXQtY29udGFpbmVyIiwzMyko'@;
put 'MSwiaW5wdXQiLDM0KSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgzKS5pbmRleDtyZXR1cm4ganQoVmUoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNSkucmVjb3JkSW5wdXRQYXN0'@;
put 'ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0LF89VmUoMik7cmV0dXJuIF8ucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSksanQoXy5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7QnQoYSk7Y29uc3QgZj1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKS4kaW1wbGljaXQsZD1WZSgyKTtkcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29s'@;
put 'cy5pbmNsdWRlcyhhLmtleSkpLENlKDEpLFJlKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gSHplKGMsbCl7MSZjJiZqYSgwKX1jb25zdCB1VT1mdW5jdGlvbihjLGwpe3JldHVybntjb2w6Yyxjb2xJbmRleDpsfX07ZnVuY3Rpb24gTnplKGMsbCl7aWYoMSZj'@;
put 'JiYobWUoMCwiZGl2IiksSmUoMSxIemUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7VmUoMik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'Q29udGV4dCIsUTIoMix1VSxkLGgpKX19Y29uc3QgVnplPWZ1bmN0aW9uKCl7cmV0dXJuWyJudW1lcmljIix2b2lkIDBdfSxUc2U9ZnVuY3Rpb24oKXtyZXR1cm5bImF1dG9jb21wbGV0ZSJdfTtmdW5jdGlvbiBCemUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLEZ6ZSwyLDMsImNsci1pbnB1'@;
put 'dC1jb250YWluZXIiLDMyKSxKZSgyLE56ZSwyLDUsImRpdiIsMiksanIoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxkPVZlKDIpO2xldCBoLGY7Q2UoMSksUmUoIm5nSWYiLCRzKDIsVnplKS5pbmNsdWRlcyhudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PSho'@;
put 'PWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLmVkaXRvcikpLENlKDEpLFJlKCJuZ0lmIiwkcygzLFRzZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZj1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVs'@;
put 'ZShhLmtleSkpP251bGw6Zi5lZGl0b3IpKX19ZnVuY3Rpb24ganplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRleHRhcmVhIiwzNiwzNykseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuaW5k'@;
put 'ZXg7cmV0dXJuIGp0KFZlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLiRpbXBsaWNpdDtyZXR1'@;
put 'cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLE5lKDMsIiAgICAgICAgICAgICAgICAg'@;
put 'ICIpLHllKCksbWUoNCwiY2xyLWNvbnRyb2wtaGVscGVyIiksTmUoNSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgyKSxkPVZlKDMpLiRpbXBsaWNpdCxoPVZlKDIpO2xldCBmLF8sVDtDZSgxKSxkcigiaW52YWxpZC1kYXRhIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRl'@;
put 'cyhkLmtleSkpKCJub3QtY2hhciIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Zi50eXBlKSxSZSgicm93cyIsZC52YWx1ZS5sZW5ndGg+ODA/NjoxKSgibmdNb2RlbCIsaC5jdXJy'@;
put 'ZW50UmVjb3JkW2Qua2V5XSkoIm1heExlbmd0aCIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oXz1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Xy5sZW5ndGgpLENlKDQpLHpjKCIiLGEudmFsdWUubGVuZ3RoLCIgLyAiLG51bGw9'@;
put 'PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KFQ9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOlQubGVuZ3RoLCIiKX19ZnVuY3Rpb24genplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBVemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxK'@;
put 'ZSgxLHp6ZSwxLDAsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtWZSgyKTtjb25zdCBmPSRpKDE2KTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRMigyLHVV'@;
put 'LGQsaCkpfX1jb25zdCBaemU9ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwXX07ZnVuY3Rpb24gWXplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxqemUsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwyKSxKZSgyLFV6ZSwyLDUsImRpdiIsMiksanIoKSksMiZjKXtjb25zdCBhPVZlKDIp'@;
put 'LiRpbXBsaWNpdCxkPVZlKDIpO2xldCBoLGY7Q2UoMSksUmUoIm5nSWYiLCRzKDIsWnplKS5pbmNsdWRlcyhudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLmVkaXRvcikpLENlKDEp'@;
put 'LFJlKCJuZ0lmIiwkcygzLFRzZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZj1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6Zi5lZGl0b3IpKX19ZnVuY3Rpb24gV3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMzgpKDEsInRleHRhcmVhIiwzOSkseHQoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoNCkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGlt'@;
put 'cGxpY2l0O3JldHVybiBqdChWZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpfSkseWUoKSxtZSgyLCJj'@;
put 'bHItY29udHJvbC1oZWxwZXIiKSxOZSgzLCJISDptbTpzcyIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0LGQ9VmUoMik7bGV0IGg7Q2UoMSksZHIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSgibm90LWNo'@;
put 'YXIiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmgudHlwZSksUmUoInJvd3MiLGEudmFsdWUubGVuZ3RoPjgwPzY6MSkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0p'@;
put 'fX1mdW5jdGlvbiBHemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDM4KSgxLCJ0ZXh0YXJlYSIsNDApLHh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChh'@;
put 'KTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5'@;
put 'XT1oKX0pLHllKCksbWUoMiwiY2xyLWRhdGUtY29udGFpbmVyIiw0MSkoMywiaW5wdXQiLDQyKSx4dCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZERhdGVDaGFuZ2UoaCxmLmtleSkpfSkseWUo'@;
put 'KSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxkPVZlKDIpO0NlKDEpLGRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksUmUoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiAkemUo'@;
put 'YyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIHF6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLEplKDEsJHplLDEsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1ZlKDIpO2NvbnN0IGY9JGkoMTYpO0NlKDEpLFJl'@;
put 'KCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFEyKDIsdVUsZCxoKSl9fWZ1bmN0aW9uIEt6ZShjLGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsImRpdiIsMTgpKDIsImRpdiIsMTkpKDMsInAiLDIwKSxOZSg0KSxKZSg1LFJ6ZSwxLDAsImNsci1pY29uIiwy'@;
put 'MSkseWUoKSxtZSg2LCJwIiwyMiksTmUoNykseWUoKSgpLG1lKDgsImRpdiIsMjMpLEplKDksT3plLDIsMCwic3BhbiIsMjQpLEplKDEwLFB6ZSwxLDAsImNsci1pY29uIiwyNSksSmUoMTEsQnplLDMsNCwibmctY29udGFpbmVyIiwyNiksSmUoMTIsWXplLDMsNCwibmctY29udGFpbmVyIiwy'@;
put 'NiksSmUoMTMsV3plLDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjcpLEplKDE0LEd6ZSw0LDMsImRpdiIsMjcpLEplKDE1LHF6ZSwyLDUsImRpdiIsMjYpLHllKCkoKSxxdCgxNiwiaHIiLDI4KSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxm'@;
put 'PVZlKDIpO2xldCBfLFQ7Q2UoNCkscHIoIiAiLGQua2V5LCIgIiksQ2UoMSksUmUoIm5nSWYiLGYuaXNDb2xQayhkLmtleSkpLENlKDIpLHByKCIgIixudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShfPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5'@;
put 'KSk/bnVsbDpfLmRlc2MsIiAiKSxDZSgxKSxSZSgibmdTd2l0Y2giLG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KFQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOlQudHlwZSksQ2UoMSksUmUoIm5nSWYiLGYuY3VycmVudFJlY29y'@;
put 'ZExvYWRpbmdzLmluY2x1ZGVzKGgpKSxDZSgxKSxSZSgibmdJZiIsZi5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKGgpKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwibnVtZXJpYyIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIs'@;
put 'InRpbWUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gWHplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxLemUsMTcsMTEsIm5nLWNvbnRhaW5lciIsMiksanIoKSksMiZjKXtjb25zdCBh'@;
put 'PWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwiQWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gSnplKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxYemUsMiwxLCJuZy1j'@;
put 'b250YWluZXIiLDE3KSxiYSgyLCJrZXl2YWx1ZSIpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0Zvck9mIixNNSgyLDIsYS5jdXJyZW50UmVjb3JkLGEub3JpZ2luYWxPcmRlcikpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19ZnVuY3Rpb24gUXplKGMsbCl7MSZj'@;
put 'JiYobWUoMCwiY2xyLWFsZXJ0Iiw0MykoMSwiY2xyLWFsZXJ0LWl0ZW0iKSgyLCJzcGFuIiw0NCksTmUoMywiIERhdGEgVmFsaWRhdGlvbiBFcnJvcnMgLSBQbGVhc2UgUmV2aWV3ICIpLHllKCkoKSgpKSwyJmMmJihIdSgidmlzaWJpbGl0eSIsVmUoKS5jdXJyZW50UmVjb3JkSW52YWxpZENv'@;
put 'bHMubGVuZ3RoPjA/InZpc2libGUiOiJoaWRkZW4iKSxSZSgiY2xyQWxlcnRDbG9zYWJsZSIsITEpKCJjbHJBbGVydFR5cGUiLCJkYW5nZXIiKSl9ZnVuY3Rpb24gZVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw0NSkoMSwiYnV0dG9uIiw0NikseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uUHJldmlvdXNSZWNvcmRDbGljaygpKX0pLHF0KDIsImNsci1pY29uIiw0NykseWUoKSxtZSgzLCJwIiksTmUoNCwiIEN1cnJlbnQgcm93OiAiKSxtZSg1LCJzdHJvbmciKSxOZSg2KSx5ZSgpKCksbWUoNywiYnV0dG9uIiw0NikseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uTmV4dFJlY29yZENsaWNrKCkpfSkscXQoOCwiY2xyLWljb24iLDQ4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+'@;
put 'MCksQ2UoNSkscHIoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gdFVlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw1MyksTmUoMSkseWUoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O1JlKCJuZ1ZhbHVlIixhKSxDZSgxKSxwcigiICIsYSwiICIpfX1mdW5jdGlvbiBuVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJhcHAtc29mdC1zZWxlY3QiLDUxKSx4dCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7QnQoYSk7Y29u'@;
put 'c3QgZj1WZSgpLmNvbEluZGV4O3JldHVybiBqdChWZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLmNvbDtyZXR1cm4ganQoVmUoKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pKCJvbklucHV0RXZlbnQi'@;
put 'LGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLGY9aC5jb2wsXz1oLmNvbEluZGV4O3JldHVybiBqdChWZSgpLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoZi5rZXksXykpfSksSmUoMix0VWUsMiwyLCJvcHRpb24iLDUyKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuY29sLGQ9VmUo'@;
put 'KTtsZXQgaDtDZSgxKSxSZSgidmFsdWUiLGQuY3VycmVudFJlY29yZFthLmtleV0pKCJpbnB1dElkIixhLmtleSksQ2UoMSksUmUoIm5nRm9yT2YiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkp'@;
put 'KT9udWxsOmguc291cmNlKX19ZnVuY3Rpb24gclVlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw1NiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYSksQ2UoMSkscHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gaVVlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPVZuKCk7bWUoMCwic2VsZWN0Iiw1NCkseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1W'@;
put 'ZSgpLmNvbDtyZXR1cm4ganQoVmUoKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLEplKDEsclVlLDIsMiwib3B0aW9uIiw1NSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS5jb2wsZD1WZSgpO2xldCBoO1JlKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKSxDZSgxKSxSZSgi'@;
put 'bmdGb3JPZiIsbnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5zb3VyY2UpfX1jb25zdCBvVWU9ZnVuY3Rpb24oKXtyZXR1cm5bIlNPRlRTRUxFQ1QiLCJTT0ZUU0VMRUNUX0hPT0si'@;
put 'XX07ZnVuY3Rpb24gc1VlKGMsbCl7aWYoMSZjJiYoSmUoMCxuVWUsMywzLCJkaXYiLDQ5KSxKZSgxLGlVZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDUwLGtjKSksMiZjKXtjb25zdCBhPWwuY29sLGQ9JGkoMiksaD1WZSgpO1JlKCJuZ0lmIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0'@;
put 'b3I/bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSwkcygyLG9VZSkpKSgibmdJZkVsc2UiLGQpfX1sZXQgYVVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMu'@;
put 'cmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50'@;
put 'UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IEVyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IEVyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IEVyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IEVyLHRoaXMub25SZWNvcmRFZGl0Q29uZmly'@;
put 'bT1uZXcgRXIsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IEVyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgRXIsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhp'@;
put 'cy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25Jbml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rp'@;
put 'b24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLF8pPT57aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxUPT57ZihUKX0pfSl9KSgpfXJlY29yZERhdGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUo'@;
put 'ZCksZj1oP2guZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09SUcoKShhKS5mb3JtYXQoZikpfWNvbmZpcm1SZWNvcmRFZGl0KCl7dGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEmJnRoaXMub25SZWNvcmRDaGFuZ2Uu'@;
put 'ZW1pdCh0aGlzLmN1cnJlbnRSZWNvcmQpfWNsb3NlUmVjb3JkRWRpdCgpe3RoaXMub25SZWNvcmRFZGl0Q2xvc2UuZW1pdCgpfW9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYSxkKXt0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkLmVtaXQoe2NvbE5hbWU6YSxjb2w6ZH0pfW9uUmVjb3JkSW5w'@;
put 'dXRGb2N1cyhhLGQpe3RoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQuZW1pdCh7ZXZlbnQ6YSxjb2xOYW1lOmR9KX1yZWNvcmRJbnB1dFBhc3RlKGEpe3NldFRpbWVvdXQoKCk9PnthLnRhcmdldC52YWx1ZT1hLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9ccyskLywiIil9LDApfXJlY29yZElucHV0'@;
put 'Q2hhbmdlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksXz1hLnRhcmdldC52YWx1ZTtoLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2wo'@;
put 'ZixfKS50aGVuKFQ9Pntjb25zdCBXPWguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluZGV4T2YoZCk7VD9XPi0xJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5zcGxpY2UoVywxKTpXPDAmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goZCl9KX0pfSkoKX1vbk5leHRSZWNv'@;
put 'cmRDbGljaygpe3RoaXMub25OZXh0UmVjb3JkLmVtaXQoKX1vblByZXZpb3VzUmVjb3JkQ2xpY2soKXt0aGlzLm9uUHJldmlvdXNSZWNvcmQuZW1pdCgpfWNvcHlUb0NsaXAoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVjb3JkTW9kYWxSZWYgLm1vZGFsLXRpdGxlIik7'@;
put 'aWYoZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2guc3R5bGUucG9zaXRpb249ImZpeGVkIixoLnN0eWxlLmxlZnQ9IjAiLGguc3R5bGUudG9wPSIwIixoLnN0eWxlLm9wYWNpdHk9IjAiLGguc3R5bGUuekluZGV4PSI1MDAwIixoLnZhbHVlPWEsZC5hcHBl'@;
put 'bmRDaGlsZChoKSxoLmZvY3VzKCksaC5zZWxlY3QoKSxkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpLGQucmVtb3ZlQ2hpbGQoaCksdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9YX19Z2VuZXJhdGVFZGl0UmVjb3JkVXJsKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYo'@;
put 'YS5nZW5lcmF0ZWRSZWNvcmRVcmwpYS5jb3B5VG9DbGlwKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKTtlbHNle2EuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMDtjb25zdCBkPVtdO2EuaGVhZGVyUGtzLmZvckVhY2goaD0+e2xldCBmPSJDIixfPSIiO2ZvcihsZXQgVD0wO1Q8YS5jZWxs'@;
put 'VmFsaWRhdGlvbi5sZW5ndGg7VCsrKXtjb25zdCBXPWEuY2VsbFZhbGlkYXRpb25bVF07aWYoVy5kYXRhPT09aCl7KCJudW1lcmljIj09PVcudHlwZXx8ImRhdGUiPT09Vy50eXBlfHwidGltZSI9PT1XLnR5cGUpJiYoZj0iTiIpO2JyZWFrfX1fPSJDIj09PWY/YCcke2EuY3VycmVudFJlY29y'@;
put 'ZFtoXX0nYDphLmN1cnJlbnRSZWNvcmRbaF0udG9TdHJpbmcoKSxkLnB1c2goe0dST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0lEOjAsVkFSSUFCTEVfTk06aCxPUEVSQVRPUl9OTToiPSIsUkFXX1ZBTFVFOl99KX0pLGQubGVuZ3RoPjAmJmEubGliZHMm'@;
put 'Jih5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxkKS50aGVuKGg9PnthLnF1ZXJ5RmlsdGVyPXtpZDpoLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6aC5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfTtjb25zdCBUPWxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSsi'@;
put 'Iy9lZGl0b3IvZWRpdC1yZWNvcmQvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkO2EuY29weVRvQ2xpcChUKSxhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEsYS5maWx0ZXI9ITF9KS5jYXRjaChoPT57YS5zdWJtaXRMb2FkaW5nPSExfSkpfX0pKCl9'@;
put 'aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX10cmFja0J5Rm4oYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KFRjKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbImFwcC1lZGl0LXJlY29yZCJdXSxpbnB1dHM6e2N1cnJlbnRSZWNvcmQ6ImN1cnJlbnRSZWNvcmQiLHJlY29yZEFjdGlvbjoicmVjb3JkQWN0aW9uIixsaWJkczoibGliZHMiLHF1ZXJ5RmlsdGVyOiJxdWVyeUZpbHRlciIsZmlsdGVyOiJmaWx0ZXIiLHN1Ym1pdExvYWRpbmc6InN1'@;
put 'Ym1pdExvYWRpbmciLGhlYWRlclBrczoiaGVhZGVyUGtzIixjZWxsVmFsaWRhdGlvbjoiY2VsbFZhbGlkYXRpb24iLGN1cnJlbnRSZWNvcmRJbmRleDoiY3VycmVudFJlY29yZEluZGV4IixjdXJyZW50UmVjb3JkTG9hZGluZ3M6ImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsY3VycmVudFJlY29y'@;
put 'ZEVycm9yczoiY3VycmVudFJlY29yZEVycm9ycyIsY3VycmVudFJlY29yZFZhbGlkYXRvcjoiY3VycmVudFJlY29yZFZhbGlkYXRvciJ9LG91dHB1dHM6e29uUmVjb3JkQ2hhbmdlOiJvblJlY29yZENoYW5nZSIsb25SZWNvcmRJbnB1dEZvY3VzZWQ6Im9uUmVjb3JkSW5wdXRGb2N1c2VkIixv'@;
put 'blJlY29yZERyb3Bkb3duQ2hhbmdlZDoib25SZWNvcmREcm9wZG93bkNoYW5nZWQiLG9uUmVjb3JkRWRpdENsb3NlOiJvblJlY29yZEVkaXRDbG9zZSIsb25SZWNvcmRFZGl0Q29uZmlybToib25SZWNvcmRFZGl0Q29uZmlybSIsb25OZXh0UmVjb3JkOiJvbk5leHRSZWNvcmQiLG9uUHJldmlv'@;
put 'dXNSZWNvcmQ6Im9uUHJldmlvdXNSZWNvcmQifSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWyJpZCIsInJlY29yZE1vZGFsUmVmIiwxLCJyZWNvcmQtZWRpdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFs'@;
put 'LXRpdGxlIl0sWzQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgcHktMTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwicC0wIiwiY2xyLWdhcC01IiwiY2xyLWdhcC1t'@;
put 'ZC0wIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWyJjbGFzcyIsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywidmlzaWJpbGl0eSIsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiLDQsIm5nSWYiXSxbImNsYXNzIiwicHJldi1uZXh0Iiw0LCJuZ0lmIl0s'@;
put 'WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9jdXNhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJhdXRvY29tcGxldGUiLCIiXSxbImNsYXNzIiwi'@;
put 'cG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24gcG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJz'@;
put 'b2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5rIiwiZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjb2x1bW4tZW50cnkiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9u'@;
put 'dC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2VsbC1kZXNjIl0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1h'@;
put 'YnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwi'@;
put 'bmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1v'@;
put 'ZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwxLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYi'@;
put 'XSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4dCIsMSwibm90LWNoYXIiLDMsIm5nTW9kZWwiLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0'@;
put 'Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywicm93cyIsIm5nTW9kZWwiLCJtYXhMZW5ndGgiLCJmb2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsxLCJkYXRlLWZpZWxkIl0sWyJjbHJUZXh0YXJlYSIsIiIsMywicm93cyIsIm5nTW9k'@;
put 'ZWwiLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dzIiwiMSIsImNvbHMiLCJhdXRvIiwxLCJub3QtY2hhciIsMywibmdNb2RlbCIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImRhdGUtcGlja2VyIl0sWyJ0eXBlIiwi'@;
put 'ZGF0ZSIsIm5hbWUiLCJkYXRlIiwiY2xyRGF0ZSIsIiIsMSwiZC1ub25lIiwzLCJjbHJEYXRlQ2hhbmdlIl0sWzEsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSJdLFsxLCJhbGVydC10ZXh0Il0sWzEsInByZXYtbmV4dCJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgbGVmdCIsInNpemUiLCIyMyJdLFsic2hhcGUiLCJhbmdsZSByaWdodCIsInNpemUiLCIyMyJdLFs0LCJuZ0lmIiwi'@;
put 'bmdJZkVsc2UiXSxbIm90aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIiXSxbMywidmFsdWUiLCJpbnB1dElkIiwiZm9jdXNpbiIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl0sWyJjbHJTZWxlY3QiLCIi'@;
put 'LDMsIm5nTW9kZWwiLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSgxLCJoMyIsMSksTmUoMiksSmUoMyxJemUsMywyLCJu'@;
put 'Zy1jb250YWluZXIiLDIpLHllKCksbWUoNCwiZGl2IiwzKSxKZSg1LEx6ZSwzLDAsImRpdiIsNCksSmUoNixKemUsMyw1LCJuZy1jb250YWluZXIiLDIpLHllKCksbWUoNywiZGl2Iiw1KSxKZSg4LFF6ZSw0LDQsImNsci1hbGVydCIsNiksSmUoOSxlVWUsOSwzLCJkaXYiLDcpLG1lKDEwLCJk'@;
put 'aXYiKSgxMSwiYnV0dG9uIiw4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEsZC5jbG9zZVJlY29yZEVkaXQoKX0pLE5lKDEyLCIgQ2FuY2VsICIpLHllKCksbWUoMTMsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBkLmNvbmZpcm1SZWNvcmRFZGl0KCl9KSxOZSgxNCwiIENvbmZpcm0gIikseWUoKSgpKCksSmUoMTUsc1VlLDMsMywibmctdGVtcGxhdGUiLG51bGwsMTAsa2MpLHllKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLCEwKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDIpLGIw'@;
put 'KCIgIiwiQUREIj09PWQucmVjb3JkQWN0aW9uPyJBZGQiOiJFZGl0IiwiIHJlY29yZCBpbiAiLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMF0sIi4iLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMV0sIiAiKSxDZSgxKSxSZSgibmdJZiIsIkVE'@;
put 'SVQiPT09ZC5yZWNvcmRBY3Rpb24pLENlKDIpLFJlKCJuZ0lmIixkLmFkZFJlY29yZExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhZC5hZGRSZWNvcmRMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIixk'@;
put 'LmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSksQ2UoNCksUmUoImRpc2FibGVkIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHJkLG5kLHRoLGwxLGMxLFdhLE0wLEJzLE9zLEhiLFBRLE5iLGhILGthLG91LHN1LEhG'@;
put 'LExiLCRGLHFGLGYxLGpGLE44LG93ZSx1USxNc2UsZHhdLHN0eWxlczpbIi5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29y'@;
put 'ZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWUtaW5wdXQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGwtZGVzY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+Kjpub3QoLmRhdGUtZmllbGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdGV4dGFyZWEtd3Jh'@;
put 'cHBlcnttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjIyNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1'@;
put 'cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNl'@;
put 'bGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDpmb2N1c3tiYWNrZ3Jv'@;
put 'dW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVk'@;
put 'aXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9k'@;
put 'YWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQgICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZp'@;
put 'ZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde3dp'@;
put 'ZHRoOjIzMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1waWNrZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjRweH0ucmVjb3JkLWVkaXQtbW9k'@;
put 'YWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6'@;
put 'LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'ICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4IDEw'@;
put 'cHg7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpmb2N1c3tiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg'@;
put 'Y2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAj'@;
put 'OTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRh'@;
put 'aW5lciBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9u'@;
put 'ey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'ICAgLm1vZGFsLWRpYWxvZ3t3aWR0aDo4MHZ3fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFp'@;
put 'bmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZDtvdXRsaW5l'@;
put 'OjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5ub3QtY2hhcntmb250LWZhbWlseTpMdWNpZGEgQ29uc29sZSxNb25hY28sbW9ub3NwYWNlfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9ue3JpZ2h0OjI1cHg7dG9wOjVweH0ucmVjb3JkLWVkaXQt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtaGVhZGVye3BhZGRpbmc6MCAwIDFyZW19LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpz'@;
put 'cGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXIgLmFsZXJ0e21hcmdpbjowfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnByZXYtbmV4dFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMTBweH0uZm9jdXNhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tib3gtc2hhZG93OjAg'@;
put 'MCAzcHggIzVhYTIyMH0uZW50cnktaW5wdXQtbGVmdC1vZmZzZXRbX25nY29udGVudC0lQ09NUCVde2xlZnQ6LTMwcHh9LnZhbGlkYXRpb24taW5mby1hbGVydFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzEwcHh9Il19KSxjfSkoKTtmdW5jdGlvbiBsVWUoYyxsKXtpZigxJmMmJihtZSgw'@;
put 'LCJwIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSkscHIoIiAiLGEsIiAiKX19bGV0IGNVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVz'@;
put 'cz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRo'@;
put 'aXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVu'@;
put 'Z3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIi'@;
put 'KSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVy'@;
put 'Iiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiKSxKZSgxLGxVZSwyLDEsInAiLDApLHllKCksbWUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxOZSg0LCJMb2FkaW5nLi4uIikseWUo'@;
put 'KSgpKSwyJmEmJihDZSgxKSxSZSgibmdGb3JPZiIsZC5wcm9jZXNzZWRTdGF0ZXMpKX0sZGVwZW5kZW5jaWVzOlt4c10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyfSJdfSksY30p'@;
put 'KCksdVVlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBhLnJlcGxhY2UoL1x8L2csIiB8ICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6YyxwdXJl'@;
put 'OiEwfSksY30pKCksRHNlPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IF89aC5sZW5ndGg+'@;
put 'MT8iLiIraFsxXToiIixUPS8oXGQrKShcZHszfSkvO2Zvcig7VC50ZXN0KGYpOylmPWYucmVwbGFjZShULCIkMSIrZCsiJDIiKTtyZXR1cm4gZitffX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJ0aG91c2Fu'@;
put 'ZFNlcGFyYXRvciIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKTtjb25zdCBkVWU9WyJodCJdLGhVZT1bInVwbG9hZFN0YXRlciJdLGZVZT1bInF1ZXJ5RmlsdGVyIl0scFVlPVsiaG90SW5zdGFuY2UiXSxnVWU9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBtVWUoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYxKSgxLCJzcGFuIiw2MikoMiwibGFiZWwiLDYzKSxOZSgzLCIgQnJvd3NlICIpLHllKCkoKSxtZSg0LCJpbnB1dCIsNjQsNjUpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmdldEZpbGVEZXNjKGgpKX0pLHllKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSg0KSxSZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlvbiB2VWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDY2KSgxLCJidXR0b24iLDY3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl'@;
put 'KCkuZ2V0RmlsZSgpKX0pLE5lKDIsIiBVcGxvYWQgIikseWUoKSgpfTImYyYmKENlKDEpLFJlKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBfVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDY4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0'@;
put 'KFZlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE5lKDEsIiBDbG9zZSAiKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO1JlKCJkaXNhYmxlZCIsYS5leGNlbEZpbGVQYXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBiVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw'@;
put 'LCJidXR0b24iLDY5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLE5lKDEsIiBTa2lwICIpLHllKCl9fWZ1bmN0aW9uIHlVZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNzApLHF0KDEsImFwcC11cGxvYWQtc3RhdGVyIixu'@;
put 'dWxsLDcxKSx5ZSgpKX1mdW5jdGlvbiB3VWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhcHAtZWRpdC1yZWNvcmQiLDcyKSx4dCgib25SZWNvcmRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29uZmlybVJlY29yZEVkaXQoKSl9KSgib25SZWNvcmRJ'@;
put 'bnB1dEZvY3VzZWQiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uUmVjb3JkSW5wdXRGb2N1cyhoKSl9KSgib25SZWNvcmRFZGl0Q2xvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY2xvc2VSZWNvcmRFZGl0KCkpfSkoIm9uTmV4dFJlY29yZCIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbk5leHRSZWNvcmQoKSl9KSgib25QcmV2aW91c1JlY29yZCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblByZXZpb3VzUmVjb3JkKCkpfSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtSZSgiY3VycmVudFJlY29yZCIsYS5j'@;
put 'dXJyZW50RWRpdFJlY29yZCkoInJlY29yZEFjdGlvbiIsYS5yZWNvcmRBY3Rpb24pKCJsaWJkcyIsYS5saWJkcykoInF1ZXJ5RmlsdGVyIixhLnF1ZXJ5RmlsdGVyKSgiZmlsdGVyIixhLmZpbHRlcikoInN1Ym1pdExvYWRpbmciLGEuc3VibWl0TG9hZGluZykoImhlYWRlclBrcyIsYS5oZWFk'@;
put 'ZXJQa3MpKCJjZWxsVmFsaWRhdGlvbiIsYS5jZWxsVmFsaWRhdGlvbikoImN1cnJlbnRSZWNvcmRJbmRleCIsYS5jdXJyZW50RWRpdFJlY29yZEluZGV4KSgiY3VycmVudFJlY29yZExvYWRpbmdzIixhLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MpKCJjdXJyZW50UmVjb3JkRXJyb3JzIixh'@;
put 'LmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzKSgiY3VycmVudFJlY29yZFZhbGlkYXRvciIsYS5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcil9fWZ1bmN0aW9uIENVZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNzMpLHF0KDEsInByb2dyZXNzIikseWUoKSl9Y29uc3QgU1VlPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuWyIvaG9tZSJdfTtmdW5jdGlvbiBNVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDc0KSgxLCJzcGFuIiw3NSkscXQoMiwiY2xyLWljb24iLDc2KSxOZSgzLCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiAiKSx5ZSgpLG1lKDQsInNwYW4iLDc3KSx4dCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudmlld2JveE1hbmFnZXIoKSl9KSxxdCg1LCJjbHItaWNvbiIsNzgpLE5lKDYsIiBWaWV3Ym94ZXMgIikseWUoKSgpfTImYyYmKENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwkcygxLFNVZSkpKX1mdW5jdGlvbiB4VWUoYyxsKXsxJmMm'@;
put 'JnF0KDAsImNsci1pY29uIiw4NSl9ZnVuY3Rpb24gRVVlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODYpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxwcigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24ga1VlKGMsbCl7aWYoMSZjJiYo'@;
put 'VnIoMCksTmUoMSksYmEoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksdzUoIiAoIixNNSgyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93cyIsIiwgIixhLmNvbHMubGVu'@;
put 'Z3RoLCIiLDE9PT1hLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBBVWUoYyxsKXsxJmMmJihWcigwKSxOZSgxLCIgKDAgcm93cykgIiksanIoKSl9ZnVuY3Rpb24gVFVlKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxrVWUsMyw3LCJuZy1jb250YWluZXIiLDM1'@;
put 'KSxKZSgyLEFVZSwyLDAsIm5nLWNvbnRhaW5lciIsMzUpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIWEuemVyb0ZpbHRlclJvd3MpLENlKDEpLFJlKCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gRFVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiaDQiLDc5KSgxLCJjbHItdG9vbHRpcCIpKDIsImNsci1pY29uIiw4MCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmRhdGFzZXRJbmZvPSEwKX0pLHllKCksSmUoMyx4VWUsMSwwLCJjbHItaWNvbiIsODEpLG1lKDQsInNwYW4iLDgyKSxOZSg1'@;
put 'KSxtZSg2LCJhIiw4MyksTmUoNykseWUoKSgpLEplKDgsRVVlLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODQpLHllKCksSmUoOSxUVWUsMywyLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9VmUoKTtDZSgzKSxSZSgibmdJZiIsYS50YWJsZU5h'@;
put 'bWUuaW5jbHVkZXMoIi1GQyIpKSxDZSgyKSxwcigiICIsYS5saWJOYW1lLCIuIiksQ2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrZC5saWJkcyksQ2UoMSksb3IoYS50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLENlKDIpLFJlKCJuZ0lmIixkLmRhdGFTb3VyY2UpfX1m'@;
put 'dW5jdGlvbiBJVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDkzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSkscXQoMSwiY2xyLWljb24iLDk0KSxtZSgyLCJzcGFuIiksTmUoMywiVXBs'@;
put 'b2FkIikseWUoKSgpfX1mdW5jdGlvbiBMVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJidXR0b24iLDg4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9wZW5RYigpKX0pLHF0KDIsImNsci1pY29uIiw4OSksbWUoMywic3BhbiIp'@;
put 'LE5lKDQsIkZpbHRlciIpLHllKCkoKSxtZSg1LCJidXR0b24iLDkwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmVkaXRUYWJsZSgpKX0pLHF0KDYsImNsci1pY29uIiw5MSksbWUoNywic3BhbiIpLE5lKDgsIkVkaXQiKSx5ZSgpKCksSmUoOSxJVWUsNCww'@;
put 'LCJidXR0b24iLDkyKSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg5KSxSZSgibmdJZiIsIWEuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcpfX1mdW5jdGlvbiBSVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDEpLHpj'@;
put 'KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIp'@;
put 'fX1mdW5jdGlvbiBPVWUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NiksSmUoMSxSVWUsMiwyLCJzcGFuIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9u'@;
put 'IFBVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImJ1dHRvbiIsOTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2FuY2VsRWRpdCgpKX0pLHF0KDIsImNsci1pY29uIiw5NiksbWUoMywic3BhbiIpLE5lKDQsIkNhbmNlbCIpLHll'@;
put 'KCkoKSxtZSg1LCJjbHItdG9vbHRpcCIpKDYsImJ1dHRvbiIsOTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJvdygpKX0pLHF0KDcsImNsci1pY29uIiw5OCksTmUoOCwi'@;
put 'QWRkIFJvdyAiKSx5ZSgpLEplKDksT1VlLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODQpLHllKCksbWUoMTAsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2hlY2tTYXZlKCkpfSkscXQoMTEsImNsci1pY29uIiw5OSksTmUoMTIs'@;
put 'IlN1Ym1pdCAiKSx5ZSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDYpLGRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLFJlKCJjbHJMb2FkaW5nIixhLmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9uIEZVZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTAzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITApfSkscXQoMSwiY2xyLWljb24iLDkxKSxtZSgyLCJzcGFuIiksTmUoMywiRWRpdCIpLHllKCkoKX19ZnVuY3Rpb24gSFVl'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiYnV0dG9uIiwxMDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZGlzY2FyZFNvdXJjZUZpbGU9ITApfSkscXQoMiwiY2xyLWljb24iLDk2KSxtZSgzLCJzcGFuIiksTmUoNCwiRGlzY2Fy'@;
put 'ZCBmaWxlIikseWUoKSgpLEplKDUsRlVlLDQsMCwiYnV0dG9uIiwxMDEpLG1lKDYsImJ1dHRvbiIsMTAyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnN1Ym1pdEV4Y2VsKCkpfSkscXQoNywiY2xyLWljb24iLDk5KSxOZSg4LCIgU3VibWl0ICIpLHllKCks'@;
put 'anIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNSksUmUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkpLENlKDEpLFJlKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBOVWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDg3KSxKZSgxLExVZSwxMCwxLCJuZy1j'@;
put 'b250YWluZXIiLDM1KSxKZSgyLFBVZSwxMywzLCJuZy1jb250YWluZXIiLDM1KSxKZSgzLEhVZSw5LDIsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxDZSgxKSxS'@;
put 'ZSgibmdJZiIsIWEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLENlKDEpLFJlKCJuZ0lmIixhLnVwbG9hZFByZXZpZXcpfX1mdW5jdGlvbiBWVWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEwNCkoMSwic3BhbiIpLE5lKDIsIkZJTFRFUiA6ICIpLG1lKDMsImIiKSxO'@;
put 'ZSg0KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNCksb3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBCVWUoYyxsKXsxJmMmJihWcigwKSxtZSgxLCJzcGFuIiwxMDcpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCksbWUoMywiZGl2IikoNCwiaDMiKSxOZSg1LCJMb2FkaW5nIHRh'@;
put 'YmxlIikseWUoKSgpLGpyKCkpfWZ1bmN0aW9uIGpVZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInNwYW4iKSxxdCgyLCJjbHItaWNvbiIsMTA4KSx5ZSgpLG1lKDMsImRpdiIpKDQsImgzIiksTmUoNSwiTG9hZGluZyB0YWJsZSBlcnJvciIpLHllKCkoKSxqcigpKX1mdW5jdGlvbiB6VWUoYyxs'@;
put 'KXtpZigxJmMmJihtZSgwLCJkaXYiLDEwNSkoMSwiZGl2IiwxMDYpLEplKDIsQlVlLDYsMCwibmctY29udGFpbmVyIiwzNSksSmUoMyxqVWUsNiwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLENl'@;
put 'KDEpLFJlKCJuZ0lmIixhLmdldGRhdGFFcnJvcil9fWZ1bmN0aW9uIFVVZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksemMoIlRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93'@;
put 'c19hbGxvd2VkLCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZD8icm93Ijoicm93cyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIFpVZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRlbnQi'@;
put 'LDExMSksSmUoMSxVVWUsMiwyLCJzcGFuIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFlVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10b29sdGlwIikoMSwi'@;
put 'YnV0dG9uIiwxMDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xpY2soKSl9KSxxdCgyLCJjbHItaWNvbiIsOTgpLE5lKDMsIiBBZGQgUmVjb3JkICIp'@;
put 'LHllKCksSmUoNCxaVWUsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFdVZShjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'InAiLDExMiksTmUoMSkscXQoMiwiY29udGFjdC1saW5rIikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSkscHIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBH'@;
put 'VWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwxMjQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSx6YygiT25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGlt'@;
put 'aXQ/InJvdyI6InJvd3MiLCIgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiAkVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDEyNSkoMSwiZGl2Iiwx'@;
put 'MjYpKDIsImxhYmVsIiwxMjcpLE5lKDMsIk1lc3NhZ2UiKSx5ZSgpLG1lKDQsInRleHRhcmVhIiwxMjgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikubWVzc2FnZT1oKX0pLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxS'@;
put 'ZSgibmdNb2RlbCIsYS5tZXNzYWdlKSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGEudmFsaWRhdGlvbkRvbmU/IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHZhbGlkYXRlICIrYS5jb2xzLmxlbmd0aCphLm1vZGlmZWRSb3dzSW5kZXhlcy5sZW5ndGgrIiBjZWxscy4i'@;
put 'KX19ZnVuY3Rpb24gcVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxMTMpKDEsImRpdiIsMTE0KSgyLCJkaXYiLDExNSkoMywiZGl2IiwxMTYpKDQsImJ1dHRvbiIsMTE3KSxxdCg1LCJjbHItaWNvbiIsMTE4KSx5ZSgpLG1lKDYsImgzIiwyKSxOZSg3KSx5ZSgpKCks'@;
put 'bWUoOCwiZGl2IiwzKSxKZSg5LEdVZSwyLDIsInNwYW4iLDExOSksSmUoMTAsJFVlLDUsMywiZGl2IiwxMjApLHllKCksbWUoMTEsImRpdiIsMTIxKSgxMiwiYnV0dG9uIiwxMjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguc2F2ZVRhYmxl'@;
put 'KGguaG90VGFibGUuZGF0YSkpfSksTmUoMTMsIiBTdWJtaXQgIikseWUoKSxtZSgxNCwiYnV0dG9uIiwxMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGguY2FuY2VsU3VibWl0KCksaC5zdWJtaXQ9ITEsanQoaC52YWxpZGF0aW9uRG9uZT0wKX0p'@;
put 'LE5lKDE1LCIgQ2FuY2VsICIpLHllKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSg3KSxiMCgiIFN1Ym1pdCBmb3IgQXBwcm92YWwgKCIsYS5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIixhLnJv'@;
put 'd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksQ2UoMiksUmUoIm5nSWYiLGEudG90YWxSb3dzQ2hhbmdlZD5hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCYmYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1hLkluZmluaXR5KSxD'@;
put 'ZSgxKSxSZSgibmdJZiIsYS50YWJsZVRydWUpLENlKDIpLFJlKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpfX1mdW5jdGlvbiBLVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiwxMjkpLE5lKDEpLGJhKDIsInBrU3BhY2VTZXBhcmF0ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRp'@;
put 'bXBsaWNpdCxkPVZlKCk7Q2UoMSksemMoIiBPbiByb3cgIixhKzEsIjogIixVbCgyLDIsZC5wa0ZpZWxkc1thXS5yZXBsYWNlKCJ8IiwiIikpLCIgIil9fWZ1bmN0aW9uIFhVZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2Uo'@;
put 'MSksYjAoIiAiLGEuY29sLCIoIixhLmxlbiwiKSwgIixhLnZhbCwiICIpfX1mdW5jdGlvbiBKVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDEzMCkoMSwiZGl2IiwxMzEpKDIsImRpdiIsMTE1KSgzLCJkaXYiLDExNikoNCwiYnV0dG9uIiwxMTcpLHF0KDUsImNsci1p'@;
put 'Y29uIiwxMTgpLHllKCksbWUoNiwiaDMiLDIpLE5lKDcsIkVycm9yIikseWUoKSgpLG1lKDgsImRpdiIsMykoOSwicCIpLE5lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIikseWUoKSgpLG1lKDExLCJkaXYiLDE3KSgxMiwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTmUoMTMsIiBPayAiKSx5ZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFFVZShjLGwpezEmYyYmcXQoMCwiYXBwLXF1ZXJ5IixudWxsLDEzMil9ZnVuY3Rpb24gZVplKGMsbCl7MSZjJiYobWUoMCwicCIsMTMzKSxO'@;
put 'ZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSx5ZSgpKX1jb25zdCB0WmU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57bGliTmFtZTpjLHRhYmxlTmFtZTpsfX0sSXNlPWZ1bmN0aW9uKCl7cmV0dXJuWyIiLCIgIl19LG5aZT1mdW5jdGlvbihjKXtyZXR1cm57aGVhZGVy'@;
put 'QmFyRmlsdGVyOmN9fSxMc2U9Rig1MyksUnNlPUYoMzkwMDcpLkJ1ZmZlcjtsZXQgSkE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0'@;
put 'aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5yb3V0ZT1XLHRoaXMuc2FzU2VydmljZT1pZSx0aGlzLmNkZj1wZSx0aGlzLmhvdFJlZ2lzdGVyZXI9d2UsdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdD1uZXcgZWgsdGhpcy5xdWVy'@;
put 'eUZpbHRlckNvbXBMaXN0PW5ldyBlaCx0aGlzLmhvdEluc3RhbmNlQ29tcExpc3Q9bmV3IGVoLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IGVoLHRoaXMubWVzc2FnZT0iIix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuY29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0'@;
put 'aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMudmlld2JveGVzPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxoaWRkZW46ITAsY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1pblNwYXJl'@;
put 'Um93czoxLGxpY2Vuc2VLZXk6dm9pZCAwLHJlYWRPbmx5OiEwLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxzZXR0aW5nczp7Y29udGV4dE1lbnU6e2l0ZW1zOntlZGl0X3Jvdzp7bmFtZToiRWRpdCByb3ciLGhpZGRlbigpe2NvbnN0'@;
put 'IGl0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKCFpdClyZXR1cm4hMTtjb25zdCBldD1pdFswXTtyZXR1cm4gZXQuZnJvbS5yb3chPT1ldC50by5yb3d9LGNhbGxiYWNrOihaZSxpdCxldCk9PntsZXQgeXQ9aXRbMF07eXQuc3RhcnQucm93PT09eXQuZW5kLnJvdyYmdGhpcy5lZGl0UmVj'@;
put 'b3JkKG51bGwseXQuc3RhcnQucm93KX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyJ9LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3cifSxjb3B5OntuYW1lOiJDb3B5IHdpdGhvdXQgaGVhZGVycyJ9LGNv'@;
put 'cHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRoIGhlYWRlcnMifSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNvcHkgaGVhZGVycyBvbmx5In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSx1bmRvOntuYW1lOiJVbmRvIn0scmVkbzp7bmFtZToiUmVkbyJ9fX19'@;
put 'fSx0aGlzLmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRlZDowfSx0aGlzLm1vZGlmZWRSb3dzSW5k'@;
put 'ZXhlcz1bXSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0PSExLHRoaXMuc2F2ZUxvYWRpbmc9ITEs'@;
put 'dGhpcy5hcHByb3ZlcnM9W10sdGhpcy5lcnJWYWxpZGF0aW9uPSExLHRoaXMucGtOdWxsPSExLHRoaXMubm9Qa051bGw9ITEsdGhpcy50YWJsZURhdGE9W10sdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5xdWVyeVRleHRTYXZlZD0iIix0aGlzLnNob3dBcHByb3ZlcnM9ITEsdGhpcy5wa0R1cHM9'@;
put 'ITEsdGhpcy52YWxpZGF0aW9uRG9uZT0wLHRoaXMuZHVwbGljYXRlUGtJbmRleGVzPVtdLHRoaXMuY29sdW1uSGVhZGVyPVtdLHRoaXMuc3BlY0luZm89W10sdGhpcy50b29Mb25nPSExLHRoaXMuZXhjZWVkQ2VsbHM9W10sdGhpcy51cGxvYWRlcj1uZXcgUm9lLHRoaXMudXBsb2FkVXJsPSIi'@;
put 'LHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbCx0aGlzLmRhdGE9W10sdGhpcy5oZWFkZXJBcnJheT1bXSx0aGlzLmhvdERhdGFTY2hlbWE9e30sdGhpcy5oZWFkZXJT'@;
put 'aG93PVtdLHRoaXMuaGVhZGVyVmlzaWJsZT0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5oYXNBbm90aGVyRHJvcFpvbmVPdmVyPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ITEsdGhpcy5kYXRlVGltZUhlYWRlcnM9W10sdGhp'@;
put 'cy50aW1lSGVhZGVycz1bXSx0aGlzLmRhdGVIZWFkZXJzPVtdLHRoaXMueGxSdWxlcz1bXSx0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5oZWFkZXJDb2x1bW5zPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0PW5ldyBiZSx0aGlzLmZpbGVVbmxv'@;
put 'Y2tFcnJvcj0hMSx0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSExLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuZGlzY2FyZFNvdXJjZUZpbGU9ITEsdGhpcy5tYW51YWxGaWxlRWRpdE1vZGFsPSExLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRp'@;
put 'bmdzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnM9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5y'@;
put 'ZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMuc2luZ2xlUm93U2VsZWN0ZWQ9ITEsdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5nZXRkYXRhRXJyb3I9ITEsdGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0aGlzLnRhYmxlRmlsZURyYWdPdmVyPSEx'@;
put 'LHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdD0yMCx0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxFWFRSQV9DT0xfTkFNRToxLERJU1BMQVlfVkFMVUU6MixESVNQTEFZX1RZUEU6MyxSQVdfVkFM'@;
put 'VUVfTlVNOjQsUkFXX1ZBTFVFX0NIQVI6NSxGT1JDRV9GTEFHOjZ9LHRoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxESVNQTEFZX1ZBTFVFOjEsUkFXX1ZBTFVFOjJ9LHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcD1bXSx0aGlzLmxp'@;
put 'Y2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnRpbWVzQ2xpY2tlZD0wLFp6W3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdJiZUSWUoKS5yZWdpc3Rlckxhbmd1YWdlKFp6W3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0aGlzLmhvdFJlZ2lzdGVy'@;
put 'ZXI9bmV3IEFnLHRoaXMucGFyc2VSZXN0cmljdGlvbnMoKSx0aGlzLnNldFJlc3RyaWN0aW9ucygpfXBhcnNlUmVzdHJpY3Rpb25zKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQsdGhpcy5yZXN0cmlj'@;
put 'dGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkfXNldFJlc3RyaWN0aW9ucyhhKXthJiYo'@;
put 'dGhpcy5yZXN0cmljdGlvbnM9ey4uLnRoaXMucmVzdHJpY3Rpb25zLC4uLmF9KSx0aGlzLnJlc3RyaWN0aW9ucy5yZW1vdmVFZGl0UmVjb3JkQnV0dG9uJiZkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5lZGl0X3Jvdyx0aGlzLnJlc3RyaWN0aW9u'@;
put 'cy5yZXN0cmljdEFkZFJvdyYmKGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19hYm92ZSxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYmVsb3csZGVsZXRlKHRoaXMuaG90VGFibGU/LnNl'@;
put 'dHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucmVtb3ZlX3Jvdyl9Y2hlY2tSb3dMaW1pdCgpe3RoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWd8fHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT0xLzAmJih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFk'@;
put 'ZFJvdz10aGlzLmRhdGFTb3VyY2U/Lmxlbmd0aD49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigp'@;
put 'fW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRmlsZSBVcGxvYWQiKTp0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZv'@;
put 'TW9kYWwoIkluZm9ybWF0aW9uIiwiVXBsb2FkIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hpbGUgQ29sdW1uIExldmVsIFNlY3VyaXR5IHJ1bGVzIGFyZSBhY3RpdmUiKTp0aGlzLnVwbG9hZFByZXZpZXd8fCh0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCl9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFz'@;
put 'QmFzZURyb3Bab25lT3Zlcj1hfXVwZGF0ZV9zaGVldF9yYW5nZShhKXt2YXIgZD17czp7cjoxLzAsYzoxLzB9LGU6e3I6MCxjOjB9fTtPYmplY3Qua2V5cyhhKS5maWx0ZXIoZnVuY3Rpb24oaCl7cmV0dXJuIiEiIT1oLmNoYXJBdCgwKX0pLm1hcChnYy51dGlscy5kZWNvZGVfY2VsbCkuZm9y'@;
put 'RWFjaChmdW5jdGlvbihoKXtkLnMuYz1NYXRoLm1pbihkLnMuYyxoLmMpLGQucy5yPU1hdGgubWluKGQucy5yLGguciksZC5lLmM9TWF0aC5tYXgoZC5lLmMsaC5jKSxkLmUucj1NYXRoLm1heChkLmUucixoLnIpfSksYVsiIXJlZiJdPWdjLnV0aWxzLmVuY29kZV9yYW5nZShkKX1nZXRSYW5n'@;
put 'ZUFuZFNoZWV0KGEpe2xldCBkPTAsaD0wLGY9LTEsXz0tMSxUPSIiLFc9ITEsaWU9W10sd2U9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLnRoaXMuaGVhZGVyQXJyYXldLm1hcChpdD0+aXQudG9Mb3dlckNhc2UoKSksRWU9d2UucmVkdWNlKChpdCxldCk9PihpdFtldF09'@;
put 'LTEsaXQpLHt9KTtyZXR1cm4gYS5TaGVldE5hbWVzLmZvckVhY2goaXQ9PntpZihXKXJldHVybjtpZT1bXSxUPWl0O2NvbnN0IGV0PWEuU2hlZXRzW1RdO2lmKHRoaXMuZGF0YT1nYy51dGlscy5zaGVldF90b19qc29uKGV0LHtoZWFkZXI6MSxibGFua3Jvd3M6ITEsZGVmdmFsOiIifSksdGhp'@;
put 'cy5kYXRhLmxlbmd0aDw9MSlyZXR1cm47bGV0IHl0PVtdO3RoaXMuaGVhZGVyQXJyYXkuZm9yRWFjaCgoKT0+eXQucHVzaCgiIikpLHRoaXMuZGF0YS5wdXNoKHl0KTtsZXQgRXQ9ITE7aWYodGhpcy5kYXRhLmZvckVhY2goKFN0LEp0KT0+e2lmKCFXKWlmKEV0KXtsZXQgbm49ITAsdm49ITE7'@;
put 'd2UuZm9yRWFjaChObj0+e2NvbnN0IGNyPUVlW05uXTsiIiE9PVN0W2NyXSYmdm9pZCAwIT09U3RbY3JdP25uPSExOi0xIT09dGhpcy5oZWFkZXJQa3MuaW5kZXhPZihObi50b1VwcGVyQ2FzZSgpKSYmKHZuPSEwKX0pLG5ufHx2bj8oXz1KdCxXPSEwKTotMT09PWYmJihmPUp0KX1lbHNle2Nv'@;
put 'bnN0IG5uPVN0Lm1hcChObj0+Tm4udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtpZighbm4uaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpKXtjb25zdCBObj13ZS5pbmRleE9mKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKTtObj4tMSYmd2Uuc3Bs'@;
put 'aWNlKE5uLDEpfUV0PSEwLHdlLmZvckVhY2goTm49PnstMT09PW5uLmluZGV4T2YoTm4pJiYoRXQ9ITEpfSk7bGV0IHZuPVtdO3ZuPXRoaXMuZmluZFZhbGlkSGVhZGVycyhubix3ZSxKdCxUKSwhMT09PXZuWzBdPyhFdD0hMSx2blsxXS5sZW5ndGg+MCYmdm5bMV0uZm9yRWFjaChObj0+e2ll'@;
put 'LnB1c2goTm4pfSkpOkVlPXZuWzFdfX0pLFcmJih0aGlzLnVwZGF0ZV9zaGVldF9yYW5nZShldCksZXRbIiFyZWYiXSkpe2NvbnN0IEp0PWdjLnV0aWxzLmRlY29kZV9yYW5nZShldFsiIXJlZiJdfHwiIik7ZD1KdC5zLnIsaD1KdC5zLmN9fSksLTE9PT1mJiYoVz0hMSkse2ZvdW5kRGF0YTpX'@;
put 'LHNoZWV0TmFtZTpULHN0YXJ0Um93OmYsZW5kUm93Ol8sY3N2QXJyYXlIZWFkZXJzTWFwOkVlLG1pc3NpbmdIZWFkZXJzOmllLHJhbmdlU3RhcnRSb3c6ZCxyYW5nZVN0YXJ0Q29sOmh9fXByb21wdEV4Y2VsUGFzc3dvcmQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLmZpbGVQ'@;
put 'YXNzd29yZE1vZGFsPSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNmaWxlUGFzc3dvcmRJbnB1dCIpO2gmJihoLmZvY3VzKCksaC52YWx1ZT0iIil9LDEwMCksdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0LnN1YnNjcmliZShoPT57dGhpcy5maWxl'@;
put 'VW5sb2NrRXJyb3I9ITEsYShofHx2b2lkIDApfSl9KX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7bGV0IGY7dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF0sdGhpcy5leGNlbEZp'@;
put 'bGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPSIiO2xldCBfPWYubmFtZTt0aGlzLmZpbGVuYW1lPV8sdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZShgTG9hZGluZyAke199IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgVz1fLnNsaWNlKF8ubGFzdEluZGV4T2YoIi4iKSsxLF8ubGFzdEluZGV4T2YoIi4i'@;
put 'KSs0KTtpZigieGxzIj09PVcudG9Mb3dlckNhc2UoKSl7bGV0IGllPW5ldyBGaWxlUmVhZGVyO2llLm9ubG9hZD1mdW5jdGlvbigpe3ZhciB3ZT1maShmdW5jdGlvbiooRWUpe2NvbnN0IFplPWgudG9Cc3RyKEVlLnRhcmdldC5yZXN1bHQpO2xldCBpdCxldD0hMTtjb25zdCB5dD17dHlwZToi'@;
put 'YmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITF9O3RyeXtpdD1nYy5yZWFkKFplLHsuLi55dH0pfWNhdGNoKERyKXtpZihEci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpZm9yKGV0'@;
put 'PSEwO2V0Oyl7Y29uc3QgX2k9eWllbGQgaC5wcm9tcHRFeGNlbFBhc3N3b3JkKCk7aWYoX2kpdHJ5e2l0PWdjLnJlYWQoWmUsey4uLnl0LHBhc3N3b3JkOl9pfSksZXQ9ITEsaC5maWxlVW5sb2NrRXJyb3I9ITF9Y2F0Y2gobGkpe2guZmlsZVVubG9ja0Vycm9yPSEwLGxpLm1lc3NhZ2UudG9M'@;
put 'b3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KGV0PSExKX1lbHNlIGV0PSExfWVsc2UgaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxEcix2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFpdClyZXR1cm4gaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQo'@;
put 'aC5zaG93VXBsb2FkTW9kYWw9ITEpO2xldCBFdD0hMSxTdD1bXTtjb25zdCBKdD1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4uaC5oZWFkZXJBcnJheV07bGV0IG5uPUp0Lm1hcChEcj0+RHIudG9Mb3dlckNhc2UoKSksdm49bm4ucmVkdWNlKChEcixfaSk9PihEcltfaV09'@;
put 'LTEsRHIpLHt9KSxObj1bXTtjb25zdCBjcj1oLmdldFJhbmdlQW5kU2hlZXQoaXQpO2lmKFN0PWNyLm1pc3NpbmdIZWFkZXJzLGNyLmZvdW5kRGF0YSl7RXQ9ITAsdm49Y3IuY3N2QXJyYXlIZWFkZXJzTWFwO2NvbnN0IERyPWl0LlNoZWV0c1tjci5zaGVldE5hbWVdO2guYXBwZW5kVXBsb2Fk'@;
put 'U3RhdGUoYFRhYmxlIGZvdW5kIG9uIHNoZWV0ICR7Y3Iuc2hlZXROYW1lfSBvbiByb3cgJHtjci5zdGFydFJvd31gKTtsZXQgX2k9IiIsbGk9IiI7Zm9yKGxldCBtcj1jci5zdGFydFJvdzttcjxjci5lbmRSb3c7Kyttcil7Y29uc3QgRWk9W107bm4uZm9yRWFjaChGbj0+e2NvbnN0IFFuPWdj'@;
put 'LnV0aWxzLmVuY29kZV9jZWxsKHtyOmNyLnJhbmdlU3RhcnRSb3crbXIsYzpjci5yYW5nZVN0YXJ0Q29sK3ZuW0ZuXX0pO2xldCBNcjsiIj09PV9pJiYoX2k9UW4pLGxpPVFuLE1yPURyW1FuXT9EcltRbl06e3Y6IiJ9LEVpLnB1c2goTXIpfSksRWkuZmluZChGbj0+IiIhPT1Gbi52KSYmTm4u'@;
put 'cHVzaChFaSl9aC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91bmQiLGBTaGVldDogJHtjci5zaGVldE5hbWV9XG5SYW5nZTogJHtfaX06JHtsaX1gKX1lbHNlIFN0PWNyLm1pc3NpbmdIZWFkZXJzO2lmKFN0Lmxlbmd0aD4wKXtTdC5zb3J0KGZ1bmN0aW9uKGxpLG1yKXty'@;
put 'ZXR1cm4gbGlbMV09PT1tclsxXT8wOmxpWzFdPm1yWzFdPy0xOjF9KTtsZXQgRHI9U3QubWFwKF9pPT5faVswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO3JldHVybiBoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLERyKSxzZXRUaW1lb3V0KCgpPT57aC5maWxlbmFtZT0iIn0p'@;
put 'LGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCl9aWYoMD09PU5uLmxlbmd0aHx8MD09PU5uWzBdLmxlbmd0aClyZXR1cm4gaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiKSxz'@;
put 'ZXRUaW1lb3V0KCgpPT57aC5maWxlbmFtZT0iIn0pLGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCk7aWYoKGguZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHxoLmRhdGVIZWFkZXJzLmxlbmd0aD4wfHxoLnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKE5u'@;
put 'PWgudXBkYXRlRGF0ZVRpbWVDb2xzKEp0LE5uKSksaC54bFJ1bGVzLmxlbmd0aD4wJiYoTm49aC51cGRhdGVYTFJ1bGVDb2xzKEp0LE5uKSksIUV0KXtpZigwPT09U3QubGVuZ3RoKWguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4g'@;
put 'RmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KTtlbHNle1N0LnNvcnQoZnVuY3Rpb24obGksbXIpe3JldHVybiBsaVsxXT09PW1yWzFdPzA6bGlbMV0+bXJbMV0/LTE6MX0pO2xldCBEcj1TdC5tYXAoX2k9Pl9pWzBdKS5zbGljZSgwLDUpLmpvaW4oIlxuIik7aC5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxEcil9cmV0dXJuIGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGgudXBsb2FkZXIucXVldWUucG9wKCl9e2guaGVhZGVyU2hvdz1KdCxObj1Obi5tYXAoX2k9Pl9pLm1hcChsaT0+Im4iPT09bGkudD9saS52OmxpLncpKSxObj1Obi5tYXAo'@;
put 'X2k9Pl9pLm1hcCgobGksbXIpPT57IWxpJiYwIT09bGkmJihsaT0iIiksaXNOYU4obGkpJiYobGk9bGkucmVwbGFjZSgvIi9nLCciIicpKS5zZWFyY2goLywvZyk+LTEmJihsaT0nIicrbGkrJyInKTtjb25zdCBFaT1oLmhlYWRlclNob3dbbXJdO3JldHVybiJudW1lcmljIj09PWguZGNWYWxp'@;
put 'ZGF0b3I/LmdldFJ1bGUoRWkpPy50eXBlJiYoMCx0My5pc1NwZWNpYWxNaXNzaW5nKShsaSkmJiFsaS5pbmNsdWRlcygiLiIpJiYobGk9Ii4iK2xpKSxsaX0pKSxoLmRhdGE9Tm47bGV0IERyPUp0LmpvaW4oIiwiKSsiXG4iO2lmKERyKz1Obi5zbGljZSgwLGgubGljZW5jZVN0YXRlLnZhbHVl'@;
put 'LnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoX2k9Pl9pLmpvaW4oIiwiKSkuam9pbigiXG4iKSwiV0xBVElOMSI9PT1oLmVuY29kaW5nKXtsZXQgX2k9THNlLmRlY29kZShSc2UuZnJvbShEciksIkNQLTEyNTIiKSxsaT1uZXcgQmxvYihbX2ldLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSksbXI9'@;
put 'aC5ibG9iVG9GaWxlKGxpLGguZmlsZW5hbWUrIi5jc3YiKTtoLnVwbG9hZGVyLmFkZFRvUXVldWUoW21yXSl9ZWxzZXtsZXQgX2k9bmV3IEJsb2IoW0RyXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLGxpPWguYmxvYlRvRmlsZShfaSxoLmZpbGVuYW1lKyIuY3N2Iik7aC51cGxvYWRlci5h'@;
put 'ZGRUb1F1ZXVlKFtsaV0pfWguZXhjZWxGaWxlUmVhZHk9ITB9aWYoMD09PWguZGF0YS5sZW5ndGgpcmV0dXJuIGguc2hvd1VwbG9hZE1vZGFsPSExLGgudXBsb2FkUHJldmlldz0hMSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxs'@;
put 'LCJUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogIik7aC5leGNlbEZpbGVSZWFkeT0hMCxoLmdldFBlbmRpbmdFeGNlbFByZXZpZXcoKX0pO3JldHVybiBmdW5jdGlvbihFZSl7cmV0dXJuIHdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksaWUucmVh'@;
put 'ZEFzQXJyYXlCdWZmZXIoZil9ZWxzZSBpZigiY3N2Ij09PVcudG9Mb3dlckNhc2UoKSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzApcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIkV4Y2VsIGZpbGVzIG9u'@;
put 'bHkuIFRvIHVubG9jayBDU1YgdXBsb2FkcywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKTtpZigiV0xBVElOMSI9PT10'@;
put 'aGlzLmVuY29kaW5nKXtsZXQgaWU9bmV3IEZpbGVSZWFkZXI7aWUub25sb2FkPXdlPT57bGV0IEVlPUxzZS5kZWNvZGUoUnNlLmZyb20od2UudGFyZ2V0LnJlc3VsdCksIkNQLTEyNTIiKSxaZT1uZXcgQmxvYihbRWVdLHt0eXBlOld9KSxpdD10aGlzLmJsb2JUb0ZpbGUoWmUsdGhpcy5maWxl'@;
put 'bmFtZSk7dGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLnVwbG9hZGVyLmFkZFRvUXVldWUoW2l0XSksdGhpcy5leGNlbEZpbGVSZWFkeT0hMH0sdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsaWUucmVhZEFzQXJyYXlCdWZmZXIoZiksdGhpcy5n'@;
put 'ZXRGaWxlKCl9ZWxzZSB0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmdldEZpbGUoKX1lbHNlIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4i'@;
put 'LiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLicpLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCl9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1p'@;
put 'dD09PTEvMD90aGlzLmdldEZpbGUoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfWdldEZpbGUoKXtpZih0aGlzLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lm'@;
put 'KHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHZvaWQodGhpcy5zdWJtaXQ9ITEpO3RoaXMucGtEdXBzPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMDtsZXQgYT1bXTtmb3IoY29uc3QgZCBv'@;
put 'ZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVzaCh7ZmlsZTpkLGZpbGVOYW1lOmQubmFtZX0pO3RoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKHRoaXMudXBsb2FkVXJsLGEse3RhYmxlOnRoaXMubGliZHN9KS50aGVuKGQ9PntpZih0eXBlb2YgZC5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9m'@;
put 'IGQuc2FzcGFyYW1zPiJ1IilyZXR1cm47e3RoaXMudXBsb2FkTG9hZGluZz0hMTtsZXQgaD1kLnNhc3BhcmFtc1swXTt0aGlzLnN1Y2Nlc3NFbmFibGU9ITAsdGhpcy50YWJsZUlkPWguRFNJRCx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIit0aGlzLnRhYmxlSWQpfX1lbHNl'@;
put 'e2NvbnN0IGg9ZCxmPWguc2FzanNBYm9ydFswXS5NU0csXz1oLnNhc2pzQWJvcnRbMF0uTUFDO3RoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0'@;
put 'Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIiIsZix7U1lTV0FSTklOR1RFWFQ6aC5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6aC5TWVNFUlJPUlRFWFQsTUFDOl99KX19LGQ9Pnt0aGlz'@;
put 'LnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3Bv'@;
put 'bnNlRXJyb3IoImZpbGUgdXBsb2FkIixkKX0pfWdldFBlbmRpbmdFeGNlbFByZXZpZXcoKXt0aGlzLnF1ZXJ5VGV4dFNhdmVkPXRoaXMucXVlcnlUZXh0LHRoaXMucXVlcnlUZXh0PSIiLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iUGFyc2luZyIsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRl'@;
put 'eHRNZW51IiwhMSk7bGV0IGE9W107dGhpcy5kYXRhLm1hcChoPT57bGV0IGY9e307dGhpcy5oZWFkZXJTaG93Lm1hcCgoXyxUKT0+e2ZbX109aFtUXX0pLGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwoZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIiksYS5w'@;
put 'dXNoKGYpfSksdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmhvdFRhYmxlLmRhdGE9YTtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5leGNlbFVwbG9hZFN0YXRl'@;
put 'PSJWYWxpZGF0aW5nLUhPVCIsZC51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsbWF4Um93czoxLzB9LCExKSxkLnJlbmRlcigpLHRoaXMuYXBwZW5kVXBsb2FkU3RhdGUoIlZhbGlkYXRpbmcgcm93cyIpLGQudmFsaWRhdGVDZWxscygoKT0+e3RoaXMuc2hvd1VwbG9hZE1v'@;
put 'ZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGx9KX1kaXNjYXJkUGVuZGluZ0V4Y2VsKGEpe3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe21heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUu'@;
put 'dmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZH0pLGEmJnRoaXMuY2FuY2VsRWRpdCgpLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkUHJldmlldz0h'@;
put 'MSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkZXIucXVldWU9W10saXNOYU4ocGFyc2VJbnQodGhpcy5yb3V0ZXIudXJsLnNwbGl0KCIvIikucG9wKCl8fCIiKSl8fHRoaXMucXVlcnlUZXh0U2F2ZWQubGVuZ3RoPjAmJih0aGlzLnF1ZXJ5VGV4dD10aGlzLnF1ZXJ5VGV4dFNh'@;
put 'dmVkLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIpfXByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl7dGhpcy5kaXNjYXJkUGVuZGluZ0V4Y2VsKCksdGhpcy5jb252ZXJ0VG9Db3JyZWN0VHlwZXModGhpcy5kYXRhU291cmNlKSx0aGlzLmVkaXRUYWJsZSghMCl9YXBwZW5kVXBsb2FkU3RhdGUoYSxk'@;
put 'PSExKXt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdCYmKGQ/dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5yZXBsYWNlTGFzdFN0YXRlKGEpOnRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QuYXBwZW5kU3RhdGUoYSkp'@;
put 'fWZpbmRWYWxpZEhlYWRlcnMoYSxkLGgsZil7bGV0IF89ITEsVD1bXSxXPTA7Zm9yKDtXPGEubGVuZ3RoOyl7aWYoIV8mJi0xIT09ZC5pbmRleE9mKGFbV10pKXtsZXQgaWUscGU9MCx3ZT0wLEVlPTAsWmU9W10saXQ9ITE7Zm9yKGxldCBFdD1XO0V0PGEubGVuZ3RoO0V0Kyspe2lmKCIiPT09'@;
put 'YVtFdF18fC0xIT09WmUuaW5kZXhPZihhW0V0XSkmJnRoaXMuaXNDb2xIZWFkZXIoYVtFdF0pKXsiIj09PWFbRXRdJiYoaXQ9ITApLGllPUV0O2JyZWFrfVplLnB1c2goYVtFdF0pfWxldCBldD1bXTt2b2lkIDAhPT1pZT8oZXQ9YS5zbGljZShXLGllKSxFZT1XLHdlPWllLGl0PyhwZT1XLFc9'@;
put 'aWUpOihwZT1XLFc9aWUtMSkpOihldD1hLnNsaWNlKFcpLHBlPVcsRWU9Vyx3ZT1hLmxlbmd0aCxXPWEubGVuZ3RoKTtsZXQgeXQ9ITA7aWYoZC5mb3JFYWNoKEV0PT57LTE9PT1ldC5pbmRleE9mKEV0KSYmKHl0PSExKX0pLHl0KXtfPSEwO2xldCBTdD1kLnJlZHVjZShmdW5jdGlvbihubix2'@;
put 'bil7cmV0dXJuIG5uW3ZuXT0tMSxubn0se30pLEp0PWEuc2xpY2UocGUsd2UpO3JldHVybiBkLmZvckVhY2gobm49PntTdFtubl09SnQuaW5kZXhPZihubikrcGV9KSxbITAsU3RdfXtsZXQgRXQ9JE5lKGV0LGQpO1QucHVzaChbIjxiPlRBQigiK2YrIik8L2I+IC0gIitFdFsxXS5qb2luKCIs'@;
put 'IikrIiAoIG1pc3NpbmcgIitFdFswXS5qb2luKCIsIikrIiApIixFdFsxXS5sZW5ndGhdKX19VysrfXJldHVyblshMSxUXX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfWlzUmVhZG9ubHlDb2woYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1'@;
put 'bGUoYSk/LnJlYWRPbmx5fWlzQ29sSGVhZGVyKGEpe3JldHVybiB0aGlzLmhlYWRlckFycmF5LmluZGV4T2YoYS50b1VwcGVyQ2FzZSgpKT4tMX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfXVwZGF0ZURhdGVUaW1lQ29scyhhLGQpe2lmKHRoaXMu'@;
put 'ZGF0ZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO3RoaXMuZGF0ZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1hLmluZGV4T2YoZikmJmgucHVzaChhLmluZGV4T2YoZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfXTtpZigkeihULnYpKXtjb25zdCBXPVd6'@;
put 'KE51bWJlcihULnYpKTtULnY9Vy5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhXLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitXLmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYoVCYmVC52JiYtMT09PVQudi50b1N0cmluZygpLmluZGV4T2YoIjoiKSl7Y29uc3QgVz1uZXcg'@;
put 'RGF0ZShULnYpOyJJbnZhbGlkIERhdGUiIT09Vy50b1VUQ1N0cmluZygpJiYoVC52PVl6KFcpKX1mW19dPVR9KX0pfWlmKHRoaXMudGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO3RoaXMudGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1hLmluZGV4T2YoZikmJmgucHVzaChhLmlu'@;
put 'ZGV4T2YoZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfXTtpZigkeihULnYpfHxGb2UoVC52KXx8VC52LmluY2x1ZGVzKCJFLSIpKXtjb25zdCBXPVd6KE51bWJlcihULnYpKTtULnY9UG9lKFcpfWZbX109VH0pfSl9aWYodGhpcy5kYXRlVGltZUhlYWRlcnMu'@;
put 'bGVuZ3RoPjApe2xldCBoPVtdO3RoaXMuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbX107aWYoJHooVC52KXx8Rm9lKFQudikpe2xldCBXPVd6'@;
put 'KE51bWJlcihULnYpKTtULnY9WXooVykrIiAiK1BvZShXKX1lbHNle2lmKC0xPT09VC52LmluZGV4T2YoIiAiKSYmLTEhPT1ULnYuaW5kZXhPZigiOiIpKXtsZXQgaWU9VC52LnN1YnN0cmluZygwLFQudi5pbmRleE9mKCI6IikpO2llPWllKyIgIitULnYuc3Vic3RyaW5nKFQudi5pbmRleE9m'@;
put 'KCI6IikrMSksVC52PWllfWxldCBXPW5ldyBEYXRlKFQudik7IkludmFsaWQgRGF0ZSIhPT1XLnRvVVRDU3RyaW5nKCkmJihULnY9WXooVykrIiAiKyhjPT57bGV0IGw9KCIwIitjLmdldEhvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0TWludXRlcygpKS5zbGlj'@;
put 'ZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSkoVykpfWZbX109VH0pfSl9cmV0dXJuIGR9dXBkYXRlWExSdWxlQ29scyhhLGQpe2lmKHRoaXMueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaD1bXTt0aGlzLnhsUnVsZXMuZm9yRWFjaChmPT57LTEhPT1hLmlu'@;
put 'ZGV4T2YoZi5YTF9DT0xVTU4pJiYoZi5pbmRleD1hLmluZGV4T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxkLmZvckVhY2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW18uaW5kZXhdOyJGT1JNVUxBIj09PV8uWExfUlVMRSYmImYiaW4gVCYmKCJuIj09PVQudD9ULnY9Ij0iK1Qu'@;
put 'ZjpULnc9Ij0iK1QuZiksZltfXT1UfSl9KX1yZXR1cm4gZH1ibG9iVG9GaWxlKGEsZCl7Y29uc3QgaD1hO3JldHVybiBoLmxhc3RNb2RpZmllZERhdGU9bmV3IERhdGUsaC5uYW1lPWQsaH10b0JzdHIoYSl7bGV0IGQ9bmV3IFVpbnQ4QXJyYXkoYSksaD0iIixmPWQuYnl0ZUxlbmd0aDtmb3Io'@;
put 'bGV0IF89MDtfPGY7XysrKWgrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFtfXSk7cmV0dXJuIGh9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBh'@;
put 'Lm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkmJihHbi5lZGl0b3IuZmls'@;
put 'dGVyLmNsYXVzZXM9W10sR24uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxHbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgXz0wO188'@;
put 'Zi5sZW5ndGg7XysrKXtjb25zdCBUPWZbX10uZWxlbWVudHM7ZD1ULmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gbnVsbD09PVcudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKFQpfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5n'@;
put 'PSExKTt0cnl7aWYodm9pZCAwIT09YS5jbGF1c2VzJiZhLmxpYmRzKXtjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goVD0+e2NvbnN0IFc9e2ZpbHRlckNsYXVzZXM6W119O1QuZWxlbWVu'@;
put 'dHMuZm9yRWFjaChpZT0+e1cuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaWUpKX0pLFcuY2xhdXNlTG9naWM9VC5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVykpfSk7Y29uc3QgXz1hLnNhc1N0'@;
put 'b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLF8pLnRoZW4oVD0+e2EucXVlcnlGaWx0ZXI9e2lkOlQucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpULnJlc3VsdFswXS5GSUxURVJfVEFCTEV9LGEu'@;
put 'cm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+YS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZF0se3F1ZXJ5'@;
put 'UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pKSxhLmZpbHRlcj0hMX0pLmNhdGNoKFQ9PnthLnN1Ym1pdExvYWRpbmc9ITF9KX19Y2F0Y2goZil7YS5xdWVyeUVycj0hMCxhLnN1Ym1pdExvYWRpbmc9ITEsYS5xdWVyeUVyck1lc3NhZ2U9Zn19KSgpfW9wZW5RYigpe3RoaXMubGliZHMmJih0'@;
put 'aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliZHMsdGhpcy5jb2xzKSl9ZWRpdFRhYmxlKGEsZCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRl'@;
put 'eHRNZW51IiwhMCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2xldCBmPWguZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSxfPWYuZ2V0U29ydENvbmZpZygpLFQ9QXJyYXkuaXNBcnJheShfKT9fOltfXTtzZXRUaW1lb3V0KCgpPT57YXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdl'@;
put 'ZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksZCYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsaC51cGRhdGVTZXR0aW5ncyh7cmVh'@;
put 'ZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sITEpLGgucmVuZGVyKCk7Zm9yKGxldCBXIG9mIFQpZi5zb3J0KFcpO3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9yKGxldCBkIG9mIGEpZm9yKGxldCBoIGluIGQpe2xl'@;
put 'dCBmPXRoaXMuY29scy5maW5kKF89Pl8uTkFNRT09PWgpO2YmJiIiIT09ZFtoXSYmIm51bSI9PT1mLlRZUEUmJiFmLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFyc2VJbnQoZFtoXSkpfX1jYW5jZWxFZGl0KCl7dGhpcy50b2dn'@;
put 'bGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0IGQ9YS5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGg9ZC5nZXRTb3J0Q29uZmlnKCksZj1BcnJheS5pc0FycmF5KGgpP2g6'@;
put 'W2hdO3RoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMCxh'@;
put 'LnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGRhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpO2ZvcihsZXQgXyBvZiBmKWQuc29ydChfKTt0aGlzLmNoZWNrUm93TGltaXQoKX1ob3RD'@;
put 'bGlja2VkKCl7MT09PXRoaXMudGltZXNDbGlja2VkJiZ0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSgpLDA9PT10aGlzLnRpbWVzQ2xpY2tlZCYmKHRoaXMudGltZXNDbGlja2VkKyssc2V0VGltZW91dCgoKT0+e3RoaXMudGltZXNDbGlja2VkPTB9LDIwMCkpfWNsZWFu'@;
put 'RXhjZWVkKCl7dGhpcy5leGNlZWRDZWxscz1bXX1hcHByb3ZlcnNUb2dnbGUoKXt0aGlzLnNob3dBcHByb3ZlcnM9IXRoaXMuc2hvd0FwcHJvdmVyc31hZGRSb3coKXt0aGlzLmFkZGluZ05ld1Jvdz0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPXRo'@;
put 'aXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsZCwxKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0aGlzLmRhdGFTb3VyY2Vb'@;
put 'ZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0'@;
put 'YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhp'@;
put 'cy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVybiAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJv'@;
put 'd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1nZXRSb3dzU3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5sb2dnZXJTZXJ2'@;
put 'aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0wLGQ9MCxoPTA7dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2YrKyl7bGV0IF89dGhpcy5oZWxwZXJTZXJ2aWNl'@;
put 'LmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pO2lmKCJZZXMiPT09Xy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaChfKSxkKys7ZWxzZXtsZXQgVD10aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQuZmluZChXPT57Zm9yKGxldCBpZSBvZiB0'@;
put 'aGlzLmhlYWRlclBrcylpZihXW2llXSE9PV9baWVdKXJldHVybiExO3JldHVybiEwfSk7VD9KU09OLnN0cmluZ2lmeShfKSE9PUpTT04uc3RyaW5naWZ5KFQpJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaChfKSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGErKyk6KHRoaXMuZGF0'@;
put 'YU1vZGlmaWVkLnB1c2goXyksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxoKyspfX10aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0'@;
put 'IGQ9YS5nZXREYXRhKCk7dGhpcy5wa0ZpZWxkcz1bXTtmb3IobGV0IFQ9MDtUPGQubGVuZ3RoO1QrKyl7bGV0IFc9IiI7Zm9yKGxldCBpZT0xO2llPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtpZSsrKVc9VysifCIrZFtUXVtpZV07dGhpcy5wa0ZpZWxkcy5wdXNoKFcpfWxldCBfLGg9W10sZj10'@;
put 'aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2ZvcihsZXQgVD0wO1Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VCsrKWZvcihsZXQgVz0wO1c8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7VysrKXRoaXMucGtGaWVsZHNbVF09PT10aGlzLnBrRmllbGRzW1ddJiZXIT09VCYmaC5wdXNoKFcpO2lmKHRoaXMucGtG'@;
put 'aWVsZHMubGVuZ3RoPmYpZm9yKGxldCBUPWY7VDx0aGlzLnBrRmllbGRzLmxlbmd0aDtUKyspZm9yKGxldCBXPWY7Vzx0aGlzLnBrRmllbGRzLmxlbmd0aDtXKyspVDxXJiZ0aGlzLnBrRmllbGRzW1RdPT09dGhpcy5wa0ZpZWxkc1tXXSYmaC5wdXNoKFcpO2ZvcihsZXQgVD0wO1Q8aC5sZW5n'@;
put 'dGg7VCsrKWZvcihsZXQgVz0xO1c8dGhpcy5yZWFkT25seUZpZWxkcysxO1crKylfPWEuZ2V0Q2VsbE1ldGEoaFtUXSxXKSxfLnZhbGlkPSExLF8uZHVwS2V5PSEwLGEucmVuZGVyKCk7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoaC5zb3J0KCkpXX1yZVNldENlbGxWYWxp'@;
put 'ZGF0aW9uVmFsdWVzKGE9ITEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2ZvcihsZXQgZiBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBfPWYudmFsdWVzLm1hcChUPT5UW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7aC5iYXRjaCgoKT0+e2Nv'@;
put 'bnN0IFQ9aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksVz10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKFQuZGF0YXx8IiIpO2xldCBpZTtXJiYoaWU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShXKSksaWV8fChpZT1bXSk7Y29uc3QgcGU9Wy4uLm5ldyBTZXQoWy4u'@;
put 'LmllLC4uLl9dKV07dGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7c291cmNlOnBlfSksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic291cmNlIixwZSksZi52YWx1ZXMubGVuZ3RoPjAmJihoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJyZW5k'@;
put 'ZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImVkaXRvciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInN0cmljdCIsZi5zdHJpY3QpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImZpbHRlciIsITEpLHRoaXMuY3Vy'@;
put 'cmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGYsdm9pZCAw'@;
put 'LGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7aWYoYSl7ZHx8KGQ9YS5yb3cpO2NvbnN0IFQ9dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxU'@;
put 'LGgsZil9ZWxzZSBmb3IobGV0IFQgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgVz10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoVCk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoVCxULnJvdyxXLGgsZil9fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxs'@;
put 'cyhhLGQsaCxmPSExLF8pe2NvbnN0IFQ9dGhpcy5ob3RJbnN0YW5jZTtsZXQgVz1bXTtmb3IobGV0IGllIG9mIGgpVy5pbmRleE9mKGllLkVYVFJBX0NPTF9OQU1FKTwwJiZXLnB1c2goaWUuRVhUUkFfQ09MX05BTUUpO2ZvcihsZXQgaWUgb2YgVyl7Y29uc3QgcGU9aC5maWx0ZXIoU3Q9PlN0'@;
put 'LkVYVFJBX0NPTF9OQU1FPT09aWUpO2xldCB3ZT1wZS5tYXAoU3Q9PiJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5SQVdfVkFMVUVfTlVNKTtjb25zdCBFZT1ULnByb3BUb0NvbChpZSk7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFw'@;
put 'LmZpbmQoU3Q9PlN0LnJvdz09PWQmJlN0LmNvbD09PUVlKXx8dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpkLGNvbDpFZSxhY3RpdmU6ITF9KSxULnNldENlbGxNZXRhKGQsRWUsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksVC5zZXRDZWxs'@;
put 'TWV0YShkLEVlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUiKSxULnNldENlbGxNZXRhKGQsRWUsInN0cmljdCIsYS5zdHJpY3QpLFQuc2V0Q2VsbE1ldGEoZCxFZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShFZSx7cmVuZGVyZXI6ImF1'@;
put 'dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUiLHN0cmljdDphLnN0cmljdCxmaWx0ZXI6ITF9KTtjb25zdCBpdD1ULmdldENlbGxNZXRhKGQsRWUpLGV0PXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoaXQuZGF0YXx8IiIpO2xldCB5dDtldCYmKHl0PXRoaXMuZGNWYWxpZGF0b3I/'@;
put 'LmdldERxRHJvcGRvd25Tb3VyY2UoZXQpKSx5dHx8KHl0PVtdKSwibnVtZXJpYyI9PT1ldD8udHlwZT8oeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwibnVtYmVyIiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwibnVtYmVy'@;
put 'IikpOih5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJzdHJpbmciKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJzdHJpbmciKSk7Y29uc3QgRXQ9Wy4uLm5ldyBTZXQoWy4uLnl0LC4uLndlXSldO2lmKFQuc2V0Q2VsbE1l'@;
put 'dGEoZCxFZSwic291cmNlIixFdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShFZSx7c291cmNlOkV0fSksZil7aWYoXyYmXyE9PWQpcmV0dXJuO2NvbnN0IFN0PXBlLmZpbmQoSnQ9PjE9PT1KdC5GT1JDRV9GTEFHKTtTdCYmc2V0VGltZW91dCgoKT0+e1Qu'@;
put 'c2V0RGF0YUF0Q2VsbChkLEVlLCJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5SQVdfVkFMVUVfTlVNLCJmb3JjZV9jZWxsX3ZhbGlkYXRpb25fdmFsdWUiKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9PT1kJiYodGhpcy5kYXRhU291cmNlW3RoaXMuY3Vy'@;
put 'cmVudEVkaXRSZWNvcmRJbmRleF1baWVdPSJDIj09PVN0LkRJU1BMQVlfVFlQRT9TdC5SQVdfVkFMVUVfQ0hBUjpTdC5SQVdfVkFMVUVfTlVNKX0pfX19Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhLGQpe2NvbnN0IGY9dGhpcy5ob3RJbnN0YW5jZS5nZXREYXRhQXRDZWxsKGR8fGEu'@;
put 'cm93LGEuY29sKSxfPShhLnZhbHVlcy5maW5kKHBlPT5wZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV09PT1mKXx8W10pW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuRElTUExBWV9JTkRFWF0sVD1hLmV4dGVuZGVkX3ZhbHVlcz8uZmlsdGVyKHBlPT5wZVswXT09PV8p'@;
put 'LFc9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHMpLGllPVtdO2ZvcihsZXQgcGUgb2YgVHx8W10pe2xldCB3ZT17fTtmb3IobGV0IEVlIG9mIE9iamVjdC5rZXlzKFcpKXdlW0VlXT1wZVtXW0VlXV07aWUucHVzaCh3ZSl9cmV0'@;
put 'dXJuIGllfWNoZWNrU2F2ZSgpe2lmKHRoaXMuZ2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpLDA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkKXJldHVybiB0aGlzLmJh'@;
put 'ZEVkaXRUaXRsZT0iTm8gY2hhbmdlcyB0byBzdWJtaXQiLHRoaXMuYmFkRWRpdENhdXNlPSJQbGVhc2UgbW9kaWZ5IHNvbWUgdmFsdWVzIGFuZCB0cnkgYWdhaW4uIix2b2lkKHRoaXMuYmFkRWRpdD0hMCk7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO3RoaXMuZGF0YVNvdXJjZUJlZm9yZVN1'@;
put 'Ym1pdD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSk7Zm9yKGxldCBoPTA7aDx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2grKylkZWxldGUgdGhpcy5kYXRhU291cmNlW2hdLm5vTGlua09wdGlvbjthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNv'@;
put 'dXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaCxmKXtyZXR1cm4gaD41MDA/NTAwOmh9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBr'@;
put 'Q250PTA7bGV0IGQ9YS5nZXREYXRhKCk7aWYoZC5sZW5ndGg+MSYmYS5pc0VtcHR5Um93KGQubGVuZ3RoLTEpJiZhLmFsdGVyKCJyZW1vdmVfcm93IixkLmxlbmd0aC0xKSx0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoKXJldHVy'@;
put 'biB0aGlzLnBrRHVwcz0hMCx0aGlzLnN1Ym1pdD0hMSx2b2lkIHRoaXMuY2FuY2VsU3VibWl0KCk7dGhpcy5wa0R1cHM9ITEsYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMsKCk9Pnt0aGlzLmNoZWNrSW52YWxpZCgpP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9k'@;
put 'YWwoIlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpOih0aGlzLnN1Ym1pdD0hMCx0aGlzLnZhbGlkYXRpb25Eb25lPTEsc2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgiKS5mb2N1cygpfSkpfSl9c2F2ZVRh'@;
put 'YmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGQuaG90SW5zdGFuY2UuZ2V0RGF0YSgpLGE9KGE9YS5maWx0ZXIoXz0+ISFkLmRhdGFNb2RpZmllZC5maW5kKFc9Pntmb3IobGV0IGllIG9mIGQuaGVhZGVyUGtzKWlmKFdbaWVdIT09X1tpZV0pcmV0dXJuITE7cmV0'@;
put 'dXJuITB9KSkpLm1hcChfPT57bGV0IFQ9Xy5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSBfLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyxfLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1ULE9iamVjdC5rZXlzKF8pLm1hcChXPT57Im51'@;
put 'bWVyaWMiPT09ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShXKT8udHlwZSYmIi4iPT09X1tXXSYmKF9bV109bnVsbCl9KSxffSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwo'@;
put 'IlZhbGlkYXRpb24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQuc2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09PWQuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aCYm'@;
put 'Yy5ub25Qa0NudDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtsZXQgXz17QUNUSU9OOiJMT0FEIn07aWYoZC5tZXNzYWdlPWQubWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLF8uTUVTU0FHRT1kLm1lc3NhZ2UsXy5MSUJEUz1kLmxpYmRzLGQu'@;
put 'Y29scyl7Y29uc3QgVD1hLnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2lmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnVwZGF0ZVRhYmxlKF8sVCwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLGQuJGRhdGFGb3JtYXRzKS50aGVu'@;
put 'KGllPT57aWYodHlwZW9mIGllLnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2llLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgcGU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7aWUmJihwZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIGllP2ll'@;
put 'OkpTT04uc3RyaW5naWZ5KGllKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLHBlLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2goaWU9Pntjb25zb2xlLmxvZygiZXJyIixpZSksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3Vi'@;
put 'bWl0PSEwLGQuc3VibWl0PSExO2xldCBwZT0ic3RyaW5nIj09dHlwZW9mIGllP2llOkpTT04uc3RyaW5naWZ5KGllKTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke3BlfWAsbnVsbCwiU3Vi'@;
put 'bWl0IGVycm9yIiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsYy5ub25Qa0NudD49MT8oZC5ub1BrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxk'@;
put 'LmRpc2FibGVTdWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSl9Y2hlY2tJbnZhbGlkKCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdC5maXJzdC5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNl'@;
put 'bGVjdG9yQWxsKCIuaHRJbnZhbGlkIikubGVuZ3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29yZEVkaXQoYSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3Vy'@;
put 'cmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0'@;
put 'YTp0aGlzLmRhdGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVkaXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7YSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25zdCBfPXRoaXMuY3VycmVu'@;
put 'dEVkaXRSZWNvcmRbZl0sVD0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2ZdPy50eXBlLFc9KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoXyk7VCYmIWlzTmFOKF8pJiYhVyYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSpfKX0pLHRoaXMuZGF0YVNvdXJjZVtkXT10aGlzLmN1'@;
put 'cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNv'@;
put 'cmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVs'@;
put 'bCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlz'@;
put 'LmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1p'@;
put 'dE1vZGFsKCJBZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7'@;
put 'dGhpcy5hZGRSb3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8fHRoaXMucmVzdHJpY3Rp'@;
put 'b25zLnJlc3RyaWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9u'@;
put 'ZSh0aGlzLmRjVmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJ'@;
put 'bnN0YW5jZS5nZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IobGV0IF8gb2YgZilpZihfKXtjb25zdCBUPV8ucHJvcD8udG9TdHJpbmcoKTtkZWxldGUgXy5wcm9wLGRlbGV0ZSBfLmRhdGEsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShfLmNvbCx7Li4uXyxkYXRh'@;
put 'OlR9KX19dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PWQsdGhpcy5jdXJyZW50RWRpdFJlY29yZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtkXSl9fXRvZ2dsZUhvdFBsdWdpbihhLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtoLmJhdGNoKCgp'@;
put 'PT57bGV0IGY9aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIithKyIgLSBjb3Vs'@;
put 'ZCBub3QgYmUgZm91bmQuIil9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHluYW1pY0NlbGxWYWxpZGF0'@;
put 'aW9uKGEsZCl7aWYodGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCBfPWguZ2V0RGF0YUF0Q2VsbChhLGQpLFQ9dGhpcy5oZWxwZXJT'@;
put 'ZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pLFc9T2JqZWN0LmtleXMoVClbZF0saWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKFQsW1csIm5vTGlua09wdGlvbiJdLCExKSxwZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleCh3ZT0+'@;
put 'd2UuaGFzaD09PWllKTtpZihwZT4tMSl7bGV0IHdlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcGVdLnZhbHVlcy5tYXAoaXQ9Pml0W3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7Y29uc3QgRWU9KGguZ2V0Q2VsbE1ldGEoYSxkKS5zb3VyY2V8fFtdKS5sZW5ndGg8'@;
put 'MSxaZT0iICIhPT1fO2guYmF0Y2goKCk9Pntjb25zdCBpdD1oLmdldENlbGxNZXRhKGEsZCksZXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShpdC5kYXRhfHwiIik7bGV0IHl0O2V0JiYoeXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShldCkpLHl0fHwoeXQ9W10p'@;
put 'LCJudW1lcmljIj09PWV0Py50eXBlPyh5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJudW1iZXIiKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJudW1iZXIiKSk6KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJy'@;
put 'YXlWYWx1ZXMoeXQsInN0cmluZyIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsInN0cmluZyIpKTtjb25zdCBFdD1bLi4ubmV3IFNldChbLi4ueXQsLi4ud2VdKV07aWYoaC5zZXRDZWxsTWV0YShhLGQsInNvdXJjZSIsRXQpLHRoaXMuY3VycmVudEVkaXRS'@;
put 'ZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7c291cmNlOkV0fSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtwZV0udmFsdWVzLmxlbmd0aD4wKXtjb25zdCBTdD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3BlXS5zdHJpY3Q7aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIiwi'@;
put 'YXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShhLGQsImVkaXRvciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJzdHJpY3QiLFN0KSxoLnNldENlbGxNZXRhKGEsZCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShk'@;
put 'LHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZSIsc3RyaWN0OlN0LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcGVdLGEsRWUmJlplKSxoLnJlbmRlcigpfSl9aWYo'@;
put 'cGU8MCl7Y29uc3Qgd2U9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06V31dLHNvdXJjZV9yb3c6W1RdfSxFZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoVykuZmluZChaZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1aZS5SVUxFX1RZUEV8fCJI'@;
put 'QVJEU0VMRUNUX0hPT0siPT09WmUuUlVMRV9UWVBFKTtFZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29sOmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09RWUuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOmllLGNvdW50OnRoaXMuY2VsbFZhbGlkYXRpb25T'@;
put 'b3VyY2UubGVuZ3RoKzF9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLEtOZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnB1c2goZCksaC5yZW5kZXIoKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRkeW5hbWljY29sdmFscyIsd2Usdm9pZCAwLHtz'@;
put 'dXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOiEwLHN1cHByZXNzRXJyb3JBYm9ydE1vZGFsOiEwfSkudGhlbihaZT0+e2lmKFplLmR5bmFtaWNfdmFsdWVzLm1hcChldD0+ZXRbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29uc3QgZXQ9dGhpcy5jZWxs'@;
put 'VmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoeXQ9Pnl0Lmhhc2g9PT1pZSk7ZXQ+LTEmJih0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2V0XT17Li4udGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtldF0scm93OmEsY29sOmQsdmFsdWVzOlplLmR5bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3Zh'@;
put 'bHVlczpaZS5keW5hbWljX2V4dGVuZGVkX3ZhbHVlc30pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsR3opLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwo'@;
put 'KSxoLnJlbmRlcigpLGguYmF0Y2goKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCEwLGEpLGgucmVuZGVyKCksaC52YWxpZGF0ZVJvd3MoW2FdKX0sMTAwKX0pfWlmKGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsR3opLHRoaXMuY3VycmVu'@;
put 'dEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0'@;
put 'IGV0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChFdCxTdCk9PkV0LmNvdW50PFN0LmNvdW50P0V0OlN0KSx5dD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YoZXQpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKHl0LDEpfX0pLmNhdGNoKFplPT57'@;
put 'Y29uc3QgaXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgoZXQ9PmV0Lmhhc2g9PT1pZSk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoaXQsMSksaC5iYXRjaCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIscU5lKSxoLnJlbmRlcigpfSksdGhp'@;
put 'cy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnB1c2goZCksc2V0VGltZW91dCgoKT0+e2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsR3op'@;
put 'LGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5pbmRleE9mKGQpLDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLHRoaXMubG9nZ2VyU2VydmljZS5sb2coImdldGR5bmFtaWNj'@;
put 'b2x2YWxzIGVycm9yOiIsWmUpfSkpfX1jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJvd3M9ITEsdHlwZW9mIHRoaXMuZmlsdGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5sZW5ndGgmJltudWxsLCIiXS5pbmNsdWRlcyh0aGlzLmhvdFRhYmxlLmRh'@;
put 'dGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRoaXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRGb2N1cyhhKXt0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgsYS5jb2xOYW1lKX1leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0'@;
put 'aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaCh0aGlzLmRhdGFTb3VyY2VbaF0sW2EsIm5vTGlua09wdGlvbiJdKSxfPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZChUPT5ULmhhc2g9PT1mJiZkPT09VC5jb2wp'@;
put 'O2lmKF8mJl8uZXh0ZW5kZWRfdmFsdWVzJiZfLmV4dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgVD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoXyxoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhfLGgsVCwhMCl9fXZpZXdib3hNYW5hZ2VyKCl7dGhpcy52'@;
put 'aWV3Ym94ZXM9ITB9Z2V0IHRvdGFsUm93c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkK3RoaXMucm93c0NoYW5nZWQucm93c0FkZGVkfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rp'@;
put 'b24qKCl7YS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGg9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aH0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndoZXJlU3RyaW5nPWguc3Ry'@;
put 'aW5nLGEuY2xhdXNlcz1oLm9iail9KTtsZXQgZD17fTt0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1IiYmKGEubGliZHM9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGEuZmlsdGVyX3BrPWEucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkLCJlZGl0'@;
put 'LXJlY29yZCI9PT1hLnJvdXRlLnNuYXBzaG90LnVybFswXS5wYXRoJiYoYS5yZWNvcmRBY3Rpb249dHlwZW9mIGEuZmlsdGVyX3BrPCJ1Ij8iRURJVCI6IkFERCIpLGQuTElCRFM9YS5saWJkcyx0eXBlb2YgYS5maWx0ZXJfcGs8InUiJiYoZC5GSUxURVJfUks9cGFyc2VJbnQoYS5maWx0ZXJf'@;
put 'cGspKSxkLk9VVERFU1Q9IldFQiIsYS5saWJkcyYmKEduLmVkaXRvci5saWJyYXJ5PWEubGliZHMuc3BsaXQoIi4iKVswXSxHbi5lZGl0b3IudGFibGU9YS5saWJkcy5zcGxpdCgiLiIpWzFdKSksYS5saWJkcyYmKGEuZ2V0ZGF0YUVycm9yPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmNh'@;
put 'bGxTZXJ2aWNlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYS5saWJkcykudGhlbihoPT57YS5pbml0U2V0dXAoaCl9KS5jYXRjaChoPT57YS5nZXRkYXRhRXJyb3I9ITAsYS50YWJsZVRydWU9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31pbml0U2V0dXAoYSl7'@;
put 'aWYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5nZXRkYXRhRXJyb3J8fCFhfHwhYS5kYXRhKXJldHVybjt0aGlzLmNvbHM9YS5kYXRhLmNvbHMsdGhpcy5kc21ldGE9YS5kYXRhLmRzbWV0YTtjb25zdCBkPXRoaXMu'@;
put 'ZHNtZXRhLmZpbmQoaWU9PiJOT1RFUyI9PT1pZS5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoaWU9PiJERF9MT05HREVTQyI9PT1pZS5OQU1FKSxmPXRoaXMuZHNtZXRhLmZpbmQoaWU9PiJERF9TSE9SVERFU0MiPT09aWUuTkFNRSk7dGhpcy5kc05vdGU9ZCYmZC5WQUxVRT9kLlZBTFVFOmgm'@;
put 'JmguVkFMVUU/aC5WQUxVRTpmJiZmLlZBTFVFP2YuVkFMVUU6IiI7Y29uc3QgXz10aGlzLmhvdEluc3RhbmNlLFQ9YS5kYXRhLmFwcHJvdmVyczt0aGlzLmNvbHMmJih0aGlzLmhlYWRlckFycmF5PShjPT57Y29uc3QgbD1bXTtmb3IobGV0IGEgb2YgYykiX19fX19ERUxFVEVfX1RISVNfX1JF'@;
put 'Q09SRF9fX19fIiE9PWEuTkFNRSYmbC5wdXNoKGEuTkFNRSk7cmV0dXJuIGx9KSh0aGlzLmNvbHMpKSxULmZvckVhY2goaWU9Pnt0aGlzLmFwcHJvdmVycy5wdXNoKGllLlBFUlNPTk5BTUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0'@;
put 'YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEu'@;
put 'c2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1do'@;
put 'ZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxl'@;
put 'dGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBd'@;
put 'LlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxh'@;
put 'LmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBaTmUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5k'@;
put 'cXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBpZT0wO2llPHRoaXMuaGVhZGVyQ29s'@;
put 'dW1ucy5sZW5ndGg7aWUrKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRhdGlvbltpZV0uZGF0YV09WU5lKHRoaXMuY2VsbFZhbGlkYXRpb25baWVdLnR5cGUsdGhpcy5jZWxsVmFsaWRhdGlvbltpZV0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLF8udXBkYXRlU2V0dGluZ3Moe2Rh'@;
put 'dGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlz'@;
put 'LmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaWUscGUpe3JldHVybiAwPT09cGU/NjA6aWU+NTAwPzUwMDppZX0sY29weVBhc3Rl'@;
put 'OnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6aWU9'@;
put 'PiIgIixyb3dIZWFkZXJXaWR0aDoxNSxyb3dIZWlnaHRzOjI0LG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZHx8MS8wLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGRyb3Bkb3duTWVudTp7aXRlbXM6e21ha2VfcmVhZF9vbmx5Ontu'@;
put 'YW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihpZSxwZSx3ZSxFZSxaZSxpdCk9Pntjb25zdCBldD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu'@;
put 'Iik7bGV0IHl0LEV0PSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBTdD10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLEp0PVN0P1N0WzBdWzFdOi0xLG5uPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChKdCk7eXQ9dGhpcy4kZGF0YUZvcm1h'@;
put 'dHM/LnZhcnNbbm5dLHl0JiYoRXQ9YExBQkVMOiAke3l0Py5sYWJlbH08YnI+VFlQRTogJHt5dD8udHlwZX08YnI+TEVOR1RIOiAke3l0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHt5dD8uZm9ybWF0fWApfXJldHVybiBldC5pbm5lckhUTUw9RXQsZXR9fX19LGRhdGFTY2hlbWE6dGhpcy5ob3RE'@;
put 'YXRhU2NoZW1hLGNvbnRleHRNZW51OnRoaXMuaG90VGFibGUuc2V0dGluZ3MuY29udGV4dE1lbnUsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VzdG9tSCIsYWZ0ZXJHZXRDb2xIZWFkZXI6KGllLHBlKT0+e2NvbnN0IHdlPXRoaXMuY29sdW1uSGVhZGVyW2llXSxFZT13ZSYmdGhpcy5pc0Nv'@;
put 'bFBrKHdlKSxaZT13ZSYmdGhpcy5pc1JlYWRvbmx5Q29sKHdlKTtFZSYmcGUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksWmUmJiFFZSYmcGUuY2xhc3NMaXN0LmFkZCgicmVhZG9ubHlDZWxsIiksMD09PWllJiZwZS5jbGFzc0xpc3QuYWRkKCJmaXJzdENvbHVtbkhl'@;
put 'YWRlclN0eWxlIil9LGFmdGVyR2V0Q2VsbE1ldGE6KGllLHBlLHdlKT0+e3BlJiZ0aGlzLmlzUmVhZG9ubHlDb2wocGUpJiYod2UuY2xhc3NOYW1lPSJyZWFkb25seUNlbGwiKX19LCExKSx0aGlzLmhvdFRhYmxlLmhpZGRlbj0hMSx0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUi'@;
put 'LCExKSx0aGlzLnF1ZXJ5VGV4dD1hLmRhdGEuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHRoaXMuY29sdW1uSGVhZGVyPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuY29sdW1uSGVhZGVyWzBdPSJEZWxldGU/Iix0aGlzLnJlYWRPbmx5RmllbGRzPWEu'@;
put 'ZGF0YS5zYXNwYXJhbXNbMF0uUEtDTlQ7bGV0IFc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7VyYmVy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGllPT57dGhpcy51cGxvYWRQcmV2aWV3fHx0aGlzLmhvdENsaWNrZWQoKSxzZXRUaW1lb3V0KCgpPT57bGV0'@;
put 'IHBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7cGUmJnBlLmNsaWNrKCl9LDEwMCl9KSxfLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoaWUscGUsd2UsRWUsWmUsaXQpPT57aWU9PT13ZSYmcGU9PT1FZSYmITE9PT10aGlzLmhvdFRhYmxl'@;
put 'LnJlYWRPbmx5JiZ0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbihpZSxwZSl9KSxfLmFkZEhvb2soImJlZm9yZUtleURvd24iLGllPT57Y29uc3QgcGU9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLHdlPXBlJiZwZVswXTtpZih3ZSl7Y29uc3QgRWU9d2VbMF0saXQ9d2VbMV07aWYo'@;
put 'RWU9PT13ZVsyXSYmaXQ9PT13ZVszXSl7Y29uc3QgeXQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShFZSxpdCk7eXQmJiExPT09eXQuZmlsdGVyJiZ0aGlzLmhvdEluc3RhbmNlLnNldENlbGxNZXRhKEVlLGl0LCJmaWx0ZXIiLCEwKX19fSksXy5hZGRIb29rKCJhZnRlckNoYW5nZSIs'@;
put 'KGllLHBlKT0+e2lmKCJlZGl0Ij09PXBlKXtjb25zdCB3ZT10aGlzLmhvdEluc3RhbmNlLEVlPWllWzBdWzBdLFplPWllWzBdWzFdLGl0PXdlLnByb3BUb0NvbChaZSksZXQ9d2UuZ2V0Q2VsbE1ldGEoRWUsaXQpO2V0JiYhMT09PWV0LmZpbHRlciYmd2Uuc2V0Q2VsbE1ldGEoRWUsaXQsImZp'@;
put 'bHRlciIsITApLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZShaZSxpdCxFZSl9fSksXy5hZGRIb29rKCJhZnRlclJlbmRlciIsaWU9Pnt0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLF8uYWRkSG9vaygiYWZ0ZXJDcmVhdGVS'@;
put 'b3ciLChpZSxwZSk9PntpZihpZT50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtsZXQgd2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnd0SG9sZGVyIik7c2V0VGltZW91dCgoKT0+e3dlJiYod2Uuc2Nyb2xsVG9wPXdlLnNjcm9sbEhlaWdodCl9KX19KSxfLmFkZEhvb2soImJlZm9yZVBhc3Rl'@;
put 'IiwoaWUscGUpPT57Y29uc3Qgd2U9cGVbMF0uc3RhcnRDb2w7aWVbMF09aWVbMF0ubWFwKChFZSxaZSk9Pntjb25zdCBpdD10aGlzLmNvbHVtbkhlYWRlclt3ZStaZV0sZXQ9Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tpdF0/LnR5cGUseXQ9KDAsdDMuaXNTcGVjaWFsTWlzc2lu'@;
put 'ZykoRWUpO3JldHVybiBldCYmIWlzTmFOKEVlKSYmIXl0JiYoRWUqPTEpLEVlfSl9KSxfLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksXy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHRoaXMu'@;
put 'dXBsb2FkVXJsPSJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIixudWxsIT09dGhpcy5yZWNvcmRBY3Rpb24mJigiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uPyh0aGlzLmFkZFJlY29yZCgpLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCkpOjE9PT10'@;
put 'aGlzLmRhdGFTb3VyY2UubGVuZ3RoJiZ0aGlzLmVkaXRSZWNvcmQobnVsbCwwKSksYS5kYXRhLnF1ZXJ5Lmxlbmd0aD4wJiYoImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkmJjA9PT1Hbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoR24uZWRp'@;
put 'dG9yLmZpbHRlci5xdWVyeT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0YS5xdWVyeSksR24uZWRpdG9yLmZpbHRlci5saWJkcz10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVz'@;
put 'ZSgiZWRpdG9yIix0aGlzLmNvbHMpKSxfLnJlbmRlcigpfX1yZXR1cm4gYy5jbnQ9MCxjLm5vblBrQ250PTAsYy5sYXN0Q2VsbD0wLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQzApLHR0KHZsKSx0dCh3MCksdHQoYmQpLHR0KFRjKSx0dChEcyksdHQoV2wp'@;
put 'LHR0KG9hKSx0dChVYSksdHQoQWcpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhkVWUsNyksUm8oaFVlLDUpLFJvKGZVZSw1KSxSbyhwVWUsNSksUm8oZ1VlLDUpKSwyJmEpe2xl'@;
put 'dCBoO3NpKGg9YWkoKSkmJihkLmh0PWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLnVwbG9hZFN0YXRlckNvbXBMaXN0PWgpLHNpKGg9YWkoKSkmJihkLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9aCksc2koaD1haSgpKSYmKGQuaG90SW5zdGFuY2VDb21wTGlzdD1oKSxzaShoPWFpKCkpJiYoZC5maWxl'@;
put 'VXBsb2FkSW5wdXRDb21wTGlzdD1oKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxNzcsdmFyczo3Myxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywi'@;
put 'dXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiIsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsx'@;
put 'LCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC1hdXRvIl0sWzEsImVuY29kaW5nLWJsb2NrIl0sWyJjbHJJbmxpbmUiLCIiLDEs'@;
put 'Im10LTAtaSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5h'@;
put 'bWUiLCJlbmNvZGluZyIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3Mi'@;
put 'LCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwi'@;
put 'bmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50'@;
put 'UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYi'@;
put 'XSxbMSwiY2xyLWZsZXgtMSJdLFsiaHQiLCIiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1zaGFkb3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIs'@;
put 'ImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIiLCJjbHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNl'@;
put 'bnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0s'@;
put 'WyJjbGFzcyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wLWkiLDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJ0bkN0cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2si'@;
put 'LCJwLTAiLCJjbHItZmxleC0xIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbMSwiY2FyZC10ZXh0IiwiaG90RWRpdG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRy'@;
put 'YW5zcGFyZW50Il0sWzEsImhvdC13cmFwcGVyIiwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLDEsImVkaXQtaG90IiwzLCJsaWNlbnNlS2V5Il0sWyJob3RJbnN0YW5jZSIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0'@;
put 'ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibS0wIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbInR5cGUi'@;
put 'LCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJkdXBsaWNhdGUta2V5cy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWyJjbGFzcyIsImQtYmxvY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbImNsYXNzIiwibW9kYWwgei1pbmRleC1oaWdoZXN0Iiw0LCJuZ0lmIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIs'@;
put 'InRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9u'@;
put 'IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxl'@;
put 'IiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImRhdGEtbHBpZ25vcmUiLCJ0'@;
put 'cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIsInR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiXSxbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYi'@;
put 'XSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMywib3BlbiIsImRzbWV0YSIsIm9wZW5DaGFuZ2UiXSxbMywidmlld2JveE1vZGFsIiwidmlld2JveE1vZGFsQ2hhbmdlIl0sWzEsImNsci1jb2wt'@;
put 'bWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmls'@;
put 'ZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsInVwbG9hZGVyIiwiY2hhbmdlIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbMSwiY2xyLWNvbC1tZC0zIiwiZWRpdEJ0biJdLFsxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCIs'@;
put 'MywiZGlzYWJsZWQiLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImV4Y2VsLXBhcnNpbmci'@;
put 'LCJjbHItY29sLW1kLTEyIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5k'@;
put 'ZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNv'@;
put 'cmQiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJidG4tc20iLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEs'@;
put 'ImJ0biIsImJ0bi1zbSIsInZpZXdib3gtb3BlbiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10LTAtaSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwi'@;
put 'c2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3IteWVsbG93Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsxLCJtci0xMCIsMywicm91dGVyTGluayJdLFsiY2xyUG9z'@;
put 'aXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiYnRu'@;
put 'Q3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwz'@;
put 'LCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4t'@;
put 'YmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0'@;
put 'eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0'@;
put 'bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9u'@;
put 'IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29s'@;
put 'LW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLDEsImVycm9y'@;
put 'LWljb24iXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtdC01LWkiLDMsImNsaWNrIl0sWyJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3Np'@;
put 'dGlvbiIsInRvcC1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsIm1vZGFsIl0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLCJtb2RhbC1sZyJdLFsxLCJtb2RhbC1jb250ZW50'@;
put 'Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbImNsYXNzIiwiZC1ibG9jayB3LTEwMCB0ZXh0LWNlbnRlciBjb2xvci1yZWQiLDQsIm5nSWYi'@;
put 'XSxbImNsYXNzIiwiY2xyLW9mZnNldC1tZC0yIGNsci1jb2wtbWQtOCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyLWkiXSxbImlkIiwic3VibWl0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0'@;
put 'bGluZSIsIm0tMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiaWQiLCJjYW5jZWxTdWJtaXRCdG4iLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiZC1ibG9jayIsInctMTAwIiwidGV4dC1jZW50ZXIiLCJjb2xvci1yZWQiXSxb'@;
put 'MSwiY2xyLW9mZnNldC1tZC0yIiwiY2xyLWNvbC1tZC04Il0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNfOCJdLFsidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbCIsImRpc2FibGVkIiwidmFsdWUiLCJu'@;
put 'Z01vZGVsQ2hhbmdlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVZuKCk7bWUoMCwiZGl2IiwwKSgxLCJjbHItbW9kYWwiLDEpLHh0KCJmaWxlT3ZlciIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZmlsZU92ZXJCYXNlKF8pfSkoImZpbGVEcm9wIixmdW5jdGlvbihfKXtyZXR1cm4gZC5nZXRGaWxlRGVzYyhf'@;
put 'LCEwKX0pKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnNob3dVcGxvYWRNb2RhbD1ffSksbWUoMiwiaDMiLDIpLE5lKDMsIlVwbG9hZCBGaWxlIikseWUoKSxtZSg0LCJkaXYiLDMpKDUsImRpdiIsNCkoNiwic3BhbiIpLE5lKDcsIkRyb3AgZmlsZSBhbnl3aGVy'@;
put 'ZSB0byB1cGxvYWQhIikseWUoKSgpLG1lKDgsImRpdiIsNSkoOSwiZGl2Iiw2KSgxMCwiZGl2Iiw3KSgxMSwiZGl2Iiw4KSgxMiwiY2xyLXJhZGlvLWNvbnRhaW5lciIsOSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KF8pe3JldHVybiBkLmVuY29kaW5nPV99KSx5ZSgpLG1lKDE1LCJsYWJlbCIpLE5lKDE2LCJVVEYtOCIpLHllKCkoKSxtZSgxNywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxOCwiaW5wdXQiLDExKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZW5jb2Rpbmc9X30pLHll'@;
put 'KCksbWUoMTksImxhYmVsIiksTmUoMjAsIldMQVRJTjEiKSx5ZSgpKCkoKSgpKCksSmUoMjEsbVVlLDYsMSwiZGl2IiwxMiksSmUoMjIsdlVlLDMsMSwiZGl2IiwxMyksbWUoMjMsImRpdiIsNyksSmUoMjQsX1VlLDIsMSwiYnV0dG9uIiwxNCksSmUoMjUsYlVlLDIsMCwiYnV0dG9uIiwxNSks'@;
put 'eWUoKSxKZSgyNix5VWUsMywwLCJkaXYiLDE2KSx5ZSgpKCkoKSxxdCgyNywiZGl2IiwxNykseWUoKSxKZSgyOCx3VWUsMSwxMiwiYXBwLWVkaXQtcmVjb3JkIiwxOCksbWUoMjksImRpdiIsMTksMjApLEplKDMxLENVZSwyLDAsImRpdiIsMjEpLG1lKDMyLCJkaXYiLDIyKSx4dCgiZmlsZURy'@;
put 'YWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uU2hvd1VwbG9hZE1vZGFsKCl9KSxtZSgzMywiZGl2IiwyMyksSmUoMzQsTVVlLDcsMiwiZGl2IiwyNCksbWUoMzUsImRpdiIsMjUpLEplKDM2LERVZSwxMCw1LCJoNCIsMjYpLHllKCksSmUoMzcsTlVlLDQsMywiZGl2IiwyNyksSmUo'@;
put 'MzgsVlVlLDUsMSwiZGl2IiwyOCkseWUoKSxtZSgzOSwiZGl2IiwyOSksSmUoNDAselVlLDQsMiwiZGl2IiwzMCksbWUoNDEsImRpdiIsMzEpKDQyLCJkaXYiLDMyKSxxdCg0MywiaG90LXRhYmxlIiwzMywzNCkseWUoKSxtZSg0NSwiZGl2IiksSmUoNDYsWVVlLDUsMiwiY2xyLXRvb2x0aXAi'@;
put 'LDM1KSxKZSg0NyxXVWUsMywxLCJwIiwzNikseWUoKSxKZSg0OCxxVWUsMTYsNiwiZGl2IiwzNyksbWUoNDksImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnN1Ym1pdExpbWl0Tm90aWNlPV99KSxtZSg1MCwiaDMiLDIpLE5lKDUx'@;
put 'LCJOb3RpY2UiKSx5ZSgpLG1lKDUyLCJkaXYiLDMpKDUzLCJwIiwzOSksTmUoNTQpLHllKCkoKSxtZSg1NSwiZGl2IiwxNykoNTYsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDU3LCIgQ2FuY2VsICIpLHllKCks'@;
put 'bWUoNTgsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5nZXRGaWxlKCksZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDU5LCIgU3VibWl0ICIpLHllKCkoKSgpLG1lKDYwLCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlv'@;
put 'bihfKXtyZXR1cm4gZC5iYWRFZGl0PV99KSxtZSg2MSwiaDMiLDIpLE5lKDYyKSx5ZSgpLG1lKDYzLCJkaXYiLDMpKDY0LCJwIiksTmUoNjUpLHllKCkoKSxtZSg2NiwiZGl2IiwxNykoNjcsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5iYWRFZGl0PSExfSks'@;
put 'TmUoNjgsIiBPayAiKSx5ZSgpKCkoKSxtZSg2OSwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucGtOdWxsPV99KSxtZSg3MCwiaDMiLDIpLE5lKDcxLCJFcnJvciIpLHllKCksbWUoNzIsImRpdiIsMykoNzMsInAiKSxOZSg3NCwi'@;
put 'IE51bGwgdmFsdWVzIG9yIGluY29ycmVjdCBkYXRhIHR5cGVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIikseWUoKSgpLG1lKDc1LCJkaXYiLDE3KSg3NiwiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBrTnVsbD0hMSxk'@;
put 'LmJhZEVkaXQ9ITF9KSxOZSg3NywiIE9rICIpLHllKCkoKSgpLG1lKDc4LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5ub1BrTnVsbD1ffSksbWUoNzksImgzIiwyKSxOZSg4MCwiRXJyb3IiKSx5ZSgpLG1lKDgxLCJkaXYiLDMp'@;
put 'KDgyLCJwIiksTmUoODMsIkluY29ycmVjdCBkYXRhIHR5cGVzIGluIG5vbi1QcmltYXJ5IEtleSBjb2x1bW5zIikseWUoKSgpLG1lKDg0LCJkaXYiLDE3KSg4NSwiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5vUGtOdWxsPSExLGQuYmFkRWRpdD0hMX0pLE5l'@;
put 'KDg2LCIgT2sgIikseWUoKSgpKCksbWUoODcsImNsci1tb2RhbCIsNDIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnBrRHVwcz1ffSksbWUoODgsImgzIiwyKSxOZSg4OSwiRXJyb3IiKSx5ZSgpLG1lKDkwLCJkaXYiLDMpKDkxLCJwIiksTmUoOTIsIiBE'@;
put 'dXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIikseWUoKSxtZSg5MywicCIpLE5lKDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLHllKCksSmUoOTUsS1VlLDMsNCwic3BhbiIsNDMpLHllKCksbWUoOTYsImRpdiIsMTcpKDk3LCJidXR0'@;
put 'b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGtEdXBzPSExfSksTmUoOTgsIiBPayAiKSx5ZSgpKCkoKSxtZSg5OSwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQudG9vTG9uZz1ffSksbWUoMTAwLCJoMyIs'@;
put 'MiksTmUoMTAxLCJFcnJvciIpLHllKCksbWUoMTAyLCJkaXYiLDMpKDEwMywicCIpLE5lKDEwNCwiIFRoZSBmb2xsb3dpbmcgY29sdW1ucyBoYXZlIHZhbHVlcyB0aGF0IGV4Y2VlZCBsZW5ndGggbGltaXRzOiAiKSx5ZSgpLEplKDEwNSxYVWUsMiwzLCJwIiw0NCkseWUoKSxtZSgxMDYsImRp'@;
put 'diIsMTcpKDEwNywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvb0xvbmc9ITEsZC5jbGVhbkV4Y2VlZCgpfSksTmUoMTA4LCIgT2sgIikseWUoKSgpKCkoKSgpKCkoKSgpLEplKDEwOSxKVWUsMTQsMCwiZGl2Iiw0NSksbWUoMTEwLCJjbHItbW9kYWwiLDQ2'@;
put 'KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5maWx0ZXI9X30pLG1lKDExMSwiaDMiLDQ3KSxOZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxtZSgxMTMsInNwYW4iKSxOZSgxMTQpLHllKCkoKSxtZSgxMTUsImRpdiIsMyksSmUoMTE2LFFVZSwyLDAs'@;
put 'ImFwcC1xdWVyeSIsMzUpLHllKCksbWUoMTE3LCJkaXYiLDE3KSgxMTgsImJ1dHRvbiIsNDgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSksTmUoMTE5LCIgcmVzZXQgZmlsdGVyICIpLHllKCksbWUoMTIwLCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGQuZmlsdGVyPSExfSksTmUoMTIxLCIgQ2FuY2VsICIpLHllKCksbWUoMTIyLCJidXR0b24iLDUwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoMTIzLCIgT2sgIikseWUoKSgpKCksbWUoMTI0LCJjbHItbW9kYWwiLDM4'@;
put 'KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5xdWVyeUVycj1ffSksbWUoMTI1LCJoMyIsMiksTmUoMTI2LCJFcnJvciIpLHllKCksbWUoMTI3LCJkaXYiLDMpKDEyOCwicCIpLE5lKDEyOSkseWUoKSgpLG1lKDEzMCwiZGl2IiwxNykoMTMxLCJidXR0b24i'@;
put 'LDUxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucXVlcnlFcnI9ITF9KSxOZSgxMzIsIiBDYW5jZWwgIikseWUoKSxtZSgxMzMsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDEzNCwiIE9rICIpLHllKCkoKSgpLG1l'@;
put 'KDEzNSwiY2xyLW1vZGFsIiw1MikseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZGlzY2FyZFNvdXJjZUZpbGU9X30pLG1lKDEzNiwiaDMiLDQ3KSxOZSgxMzcsIldhcm5pbmciKSx5ZSgpLG1lKDEzOCwiZGl2IiwzKSxOZSgxMzksIiBUaGlzIGFjdGlvbiB3'@;
put 'aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRlZCBkYXRhICIpLG1lKDE0MCwiYiIpLE5lKDE0MSkseWUoKSxOZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSx5ZSgpLG1lKDE0MywiZGl2IiwxNykoMTQ0LCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGQuZGlzY2FyZFNvdXJjZUZpbGU9ITF9KSxOZSgxNDUsIiBDYW5jZWwgIikseWUoKSxtZSgxNDYsImJ1dHRvbiIsNTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kaXNjYXJkU291cmNlRmlsZT0hMSxkLmRpc2NhcmRQZW5kaW5nRXhjZWwoITApfSks'@;
put 'TmUoMTQ3LCIgT2sgIikseWUoKSgpKCksbWUoMTQ4LCJjbHItbW9kYWwiLDUyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5maWxlUGFzc3dvcmRNb2RhbD1ffSksbWUoMTQ5LCJoMyIsNDcpLE5lKDE1MCwiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIp'@;
put 'LHllKCksbWUoMTUxLCJkaXYiLDU0KSgxNTIsInAiLDM5KSxOZSgxNTMsIlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSx5ZSgpLHF0KDE1NCwiaW5wdXQiLDU1LDU2KSx5ZSgpLG1lKDE1NiwiZGl2IiwxNyksSmUoMTU3LGVaZSwyLDAsInAiLDU3KSxtZSgxNTgsImJ1dHRvbiIsNDkpLHh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWxlUGFzc3dvcmRNb2RhbD0hMSxkLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApfSksTmUoMTU5LCIgQ2FuY2VsIHVwbG9hZCAiKSx5ZSgpLG1lKDE2MCwiYnV0dG9uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGgpO2Nv'@;
put 'bnN0IF89JGkoMTU1KTtyZXR1cm4gZC5maWxlUGFzc3dvcmRNb2RhbD0hMSxqdChkLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dChfLnZhbHVlKSl9KSxOZSgxNjEsIiBVbmxvY2sgIikseWUoKSgpKCksbWUoMTYyLCJjbHItbW9kYWwiLDUyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5j'@;
put 'dGlvbihfKXtyZXR1cm4gZC5tYW51YWxGaWxlRWRpdE1vZGFsPV99KSxtZSgxNjMsImgzIiw0NyksTmUoMTY0LCJXYXJuaW5nIikseWUoKSxtZSgxNjUsImRpdiIsMyksTmUoMTY2LCIgTWFudWFsbHkgZWRpdGluZyB0aGlzIGRhdGEgd2lsbCBtZWFuIHRoZSBzb3VyY2UgZmlsZSAiKSxtZSgx'@;
put 'NjcsImIiKSxOZSgxNjgpLHllKCksTmUoMTY5LCIgd2lsbCBiZSBkaXNjYXJkZWQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLHllKCksbWUoMTcwLCJkaXYiLDE3KSgxNzEsImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5tYW51YWxGaWxlRWRpdE1vZGFs'@;
put 'PSExfSksTmUoMTcyLCIgQ2FuY2VsICIpLHllKCksbWUoMTczLCJidXR0b24iLDUzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxkLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl9KSxOZSgxNzQsIiBPayAiKSx5ZSgpKCkoKSxtZSgxNzUs'@;
put 'ImFwcC1kYXRhc2V0LWluZm8iLDU5KSx4dCgib3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZGF0YXNldEluZm89X30pLHllKCksbWUoMTc2LCJhcHAtdmlld2JveGVzIiw2MCkseHQoInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQudmlld2JveGVzPV99'@;
put 'KSx5ZSgpfWlmKDImYSl7Y29uc3QgaD0kaSgxNTUpO0NlKDEpLFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09ZC5leGNlbFVwbG9hZFN0'@;
put 'YXRlKSgiY2xyTW9kYWxPcGVuIixkLnNob3dVcGxvYWRNb2RhbCksQ2UoMTMpLFJlKCJuZ01vZGVsIixkLmVuY29kaW5nKSgiZGlzYWJsZWQiLCIiIT1kLmZpbGVuYW1lKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5lbmNvZGluZykoImRpc2FibGVkIiwiIiE9ZC5maWxlbmFtZSksQ2UoMyksUmUo'@;
put 'Im5nSWYiLCFkLmV4Y2VsRmlsZVBhcnNpbmcmJiFkLnVwbG9hZExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhZC5leGNlbEZpbGVQYXJzaW5nJiYhZC51cGxvYWRMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsIlZhbGlkYXRpbmciIT09ZC5leGNlbFVwbG9hZFN0YXRlKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsIlZhbGlkYXRpbmctRFEiPT09ZC5leGNlbFVwbG9hZFN0YXRlKSxDZSgxKSxSZSgibmdJZiIsZC5leGNlbEZpbGVQYXJzaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxDZSgzKSxSZSgibmdJZiIsIWQudmFsaWRhdGlvbkRvbmUmJmQuc3VibWl0'@;
put 'KSxDZSgzKSxSZSgibmdJZiIsZC50YWJsZVRydWUpLENlKDEpLGRyKCJjbHItY29sLWxnLTEyIiwhZC50YWJsZVRydWUpLENlKDEpLFJlKCJuZ1ZhciIsUTIoNjYsdFplLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMF0sbnVsbD09ZC5saWJkcz9udWxsOmQubGliZHMu'@;
put 'c3BsaXQoIi4iKVsxXSkpLENlKDEpLFJlKCJuZ0lmIixkLnRhYmxlVHJ1ZSksQ2UoMSksUmUoIm5nSWYiLCEkcyg2OSxJc2UpLmluY2x1ZGVzKGQucXVlcnlUZXh0KSksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDcxLG5aZSwhJHMoNzAsSXNlKS5pbmNsdWRlcyhkLnF1ZXJ5VGV4dCkpKSxDZSgx'@;
put 'KSxSZSgibmdJZiIsIWQudGFibGVUcnVlKSxDZSgzKSxkcigiaGlkZGVuIixkLmhvdFRhYmxlLmhpZGRlbiksUmUoImxpY2Vuc2VLZXkiLGQuaG90VGFibGUubGljZW5zZUtleSksQ2UoMyksUmUoIm5nSWYiLGQudGFibGVUcnVlJiYhZC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0'@;
put 'dG9uKSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkmJmQuZGF0YVNvdXJjZSYmZC5kYXRhU291cmNlLmxlbmd0aD5kLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsZC5zdWJtaXQpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQuc3VibWl0TGltaXROb3RpY2UpLENlKDUpLHByKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBz'@;
put 'dWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxDZSg2KSxSZSgiY2xyTW9kYWxPcGVuIixkLmJhZEVkaXQpLENlKDIpLG9yKGQuYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxDZSgzKSxvcihkLmJhZEVkaXRDYXVz'@;
put 'ZSksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC5wa051bGwpLENlKDkpLFJlKCJjbHJNb2RhbE9wZW4iLGQubm9Qa051bGwpLENlKDkpLFJlKCJjbHJNb2RhbE9wZW4iLGQucGtEdXBzKSxDZSg4KSxSZSgibmdGb3JPZiIsZC5kdXBsaWNhdGVQa0luZGV4ZXMpLENlKDQpLFJlKCJjbHJNb2Rh'@;
put 'bE9wZW4iLGQudG9vTG9uZyksQ2UoNiksUmUoIm5nRm9yT2YiLGQuZXhjZWVkQ2VsbHMpLENlKDQpLFJlKCJuZ0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZmlsdGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENl'@;
put 'KDQpLHByKCIgIixkLmxpYmRzLCIgIiksQ2UoMiksUmUoIm5nSWYiLGQuZmlsdGVyKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsZC5zdWJtaXRMb2FkaW5nKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnF1ZXJ5RXJyKSxDZSg1KSxvcihkLnF1ZXJ5RXJyTWVzc2FnZSksQ2UoNiksUmUoImNs'@;
put 'ck1vZGFsT3BlbiIsZC5kaXNjYXJkU291cmNlRmlsZSkoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg2KSxvcihkLmZpbGVuYW1lKSxDZSg3KSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbGVQYXNzd29yZE1vZGFsKSgiY2xyTW9kYWxTaXplIiwibWQiKSgi'@;
put 'Y2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDkpLFJlKCJuZ0lmIixkLmZpbGVVbmxvY2tFcnJvciksQ2UoMyksUmUoImRpc2FibGVkIixoLnZhbHVlLmxlbmd0aDwxKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLm1hbnVhbEZpbGVFZGl0TW9kYWwpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJj'@;
put 'bHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5maWxlbmFtZSksQ2UoNyksUmUoIm9wZW4iLGQuZGF0YXNldEluZm8pKCJkc21ldGEiLGQuZHNtZXRhKSxDZSgxKSxSZSgidmlld2JveE1vZGFsIixkLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W3hzZSx1Yyx4cyxaaSxXYSxsRSxC'@;
put 'cyxPcyxCdSxrYSxvdSxzdSxadSxjMixkaCxVcyxYRix0d2UsS0YsamIsVWIsemIseHksVTcsWWIsRXNlLGtzZSxBc2UsakUsY1UsYVVlLGNVZSx1VWUsRHNlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2JvcmRlcjowfS5idXR0b25CYXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDEwcHg7YWxpZ24taXRlbXM6Y2VudGVyfS50ZXN0UmVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmdiYSgyNTUsMCwwLC44KSFpbXBvcnRhbnR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmZpcnN0'@;
put 'Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC42OTAxOTYwNzg0KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2Jh'@;
put 'Y2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0aC5yZWFkb25seUNlbGwgZGl2e29wYWNpdHk6LjR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGQucmVhZG9ubHlDZWxse29wYWNpdHk6LjV9LmluZm9C'@;
put 'YXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTRweDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3'@;
put 'aGl0ZS1zcGFjZTpub3dyYXB9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6ODAlfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntoZWlnaHQ6dW5zZXQ7d2hpdGUtc3BhY2U6bm9ybWFsfS5pbmZvQmFyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXTpob3ZlciAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOnVuc2V0fS5wa0hlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojNjg3NjgyO2NvbG9yOiNmZmY7bWFyZ2luOi0xcHh9LmhlYWRlckJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRl'@;
put 'bXM6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZmZmZjtiYWNrZ3JvdW5kOiNmNWY2ZmV9LmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfS5idG5DdHJsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250'@;
put 'ZW50OmZsZXgtZW5kfS5jYXJkLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnR9LmhpZGRlbltfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTpoaWRkZW59Lm15LWRyb3Atem9uZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVy'@;
put 'OnNvbGlkIDFweCBsaWdodGdyYXk7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6d2hpdGVzbW9rZTtib3gtc2hhZG93Omluc2V0IDAgMCA0cHggMnB4ICNhN2E1YTUyYjtoZWlnaHQ6NTB2aH0ubnYtZmlsZS1vdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMnB4IGdy'@;
put 'ZWVufS5maWxlLWRyb3AtdGV4dFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5wcm9ncmVzU3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjlweCFpbXBvcnRhbnR9LnByb2dyZXNzW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSwgLnByb2dyZXNzLXN0YXRpY1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6Y2FsYygxMDAlIC0gMTRweCl9fS5ob3RFZGl0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5leGNlbC1wYXJzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNw'@;
put 'bGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uZXhjZWwtcGFyc2luZ1tfbmdjb250ZW50LSVDT01QJV0gICAuZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOi00'@;
put 'NXB4fS5lZGl0LXJlY29yZC1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC42KTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3'@;
put 'aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsucHJvZ3Jlc1N0YXRpY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDozMnB4IWltcG9ydGFudH0uY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltf'@;
put 'bmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH19LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtwYWRkaW5nLXRvcDowfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0'@;
put 'OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweDttYXJnaW4tdG9w'@;
put 'OjIwcHg7Y29sb3I6I2ZmZn0jc3VibWl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXSwgI2NhbmNlbFN1Ym1pdEJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTUwcHh9Il19KSxjfSkoKTtjb25zdCByWmU9W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6SkF9LHtwYXRoOiI6bGliTWVtLzpm'@;
put 'aWx0ZXJJZCIsY29tcG9uZW50OkpBfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbSIsY29tcG9uZW50OkpBfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpKQX1dO2xldCBpWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sZGMuZm9yQ2hpbGQoclplKSxkY119KSxjfSkoKSxRQT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbCxDMl19KSxjfSkoKSxvWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ob21lLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwi'@;
put 'cm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpO2NvbnN0IHNaZT1bInNpZGViYXJOYXYiXTtmdW5jdGlvbiBhWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5u'@;
put 'YXZpZ2F0ZVRvVmlld2VyKCkpfSksTmUoMSwiRGF0YSIpLHllKCl9fWZ1bmN0aW9uIGxaZShjLGwpezEmYyYmKG1lKDAsImEiLDE5KSxOZSgxLCJBUEkgRXhwbG9yZXIiKSx5ZSgpKX1mdW5jdGlvbiBjWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMCksTmUoMSwiTGluZWFnZSIpLHllKCkpfWZ1'@;
put 'bmN0aW9uIHVaZShjLGwpezEmYyYmKG1lKDAsImEiLDIxKSxOZSgxLCJNZXRhZGF0YSIpLHllKCkpfWZ1bmN0aW9uIGRaZShjLGwpezEmYyYmKG1lKDAsImEiLDIyKSxOZSgxLCIgVXNlcnMiKSx5ZSgpKX1mdW5jdGlvbiBoWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMyksTmUoMSwiU3VibWl0'@;
put 'dGVkIikseWUoKSl9ZnVuY3Rpb24gZlplKGMsbCl7MSZjJiYobWUoMCwiYSIsMjQpLE5lKDEsIlRvIEFwcHJvdmUiKSx5ZSgpKX1mdW5jdGlvbiBwWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLEplKDEsYVplLDIsMCwiYSIsMTEpLEplKDIsbFplLDIsMCwiYSIs'@;
put 'MTIpLEplKDMsY1plLDIsMCwiYSIsMTMpLEplKDQsdVplLDIsMCwiYSIsMTQpLEplKDUsZFplLDIsMCwiYSIsMTUpLEplKDYsaFplLDIsMCwiYSIsMTYpLEplKDcsZlplLDIsMCwiYSIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgi'@;
put 'dmlldyIpKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUo'@;
put 'InZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24g'@;
put 'Z1plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE5lKDMpLHF0KDQsImNsci1pY29uIiw5KSx5ZSgpLEplKDUscFplLDgsNywiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLHBy'@;
put 'KCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiBtWmUoYyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIHZaZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1jb250ZW50Iil9Y29uc3QgX1plPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldy91c2VybmF2L3Jv'@;
put 'bGVzIl19O2Z1bmN0aW9uIGJaZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNykscXQoMywiY2xyLWljb24iLDMyKSxOZSg0LCIgUm9sZXMgIikseWUoKSgpLEplKDUsdlplLDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCkseWUoKSksMiZjKXtj'@;
put 'b25zdCBhPVZlKDIpO0NlKDEpLFJlKCJyb3V0ZXJMaW5rIiwkcygyLF9aZSkpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9yb2xlcyIpKX19Y29uc3QgeVplPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldy91c2VybmF2L3VzZXJzIl19LHdaZT1m'@;
put 'dW5jdGlvbigpe3JldHVyblsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXX07ZnVuY3Rpb24gQ1plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYnMiLDI1KSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyNikoMywicCIsMjcpLHF0KDQsImNsci1pY29uIiwyOCksTmUoNSwiIFVzZXJzIikseWUo'@;
put 'KSgpLHF0KDYsImNsci10YWItY29udGVudCIpLHllKCksbWUoNywiY2xyLXRhYiIpKDgsImJ1dHRvbiIsMjYpKDksInAiLDI3KSxxdCgxMCwiY2xyLWljb24iLDI5KSxOZSgxMSwiIEdyb3VwcyIpLHllKCkoKSxKZSgxMixtWmUsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSx5ZSgpLEplKDEz'@;
put 'LGJaZSw2LDMsImNsci10YWIiLDMxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgicm91dGVyTGluayIsJHMoNCx5WmUpKSxDZSg2KSxSZSgicm91dGVyTGluayIsJHMoNSx3WmUpKSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYv'@;
put 'Z3JvdXBzIikpLENlKDEpLFJlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpfX1mdW5jdGlvbiBTWmUoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIpKDEsImEiLDMzKSxOZSgyLCJUYWJsZXMiKSx5ZSgpLG1lKDMsImEiLDM0KSxOZSg0LCJGaWxlcyIpLHllKCkoKSl9'@;
put 'ZnVuY3Rpb24gTVplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE5lKDMpLHF0KDQsImNsci1pY29uIiw5KSx5ZSgpLEplKDUsU1plLDUsMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgp'@;
put 'O0NlKDMpLHByKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1jb25zdCB4WmU9WyIqIl07bGV0IG4zPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRv'@;
put 'bT1uZXcgRXIsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2Uu'@;
put 'Z2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJP'@;
put 'cGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0'@;
put 'ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlV'@;
put 'cmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRF'@;
put 'bGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5z'@;
put 'aWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5k'@;
put 'KCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KHZsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAt'@;
put 'c2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHNaZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnNpZGViYXJOYXY9aC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGYpe3JldHVy'@;
put 'biBkLm9uTW91c2VNb3ZlKGYpfSwwLGZmKSgibW91c2V1cCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Nb3VzZVVwKGYpfSwhMSxmZil9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0NvbnRlbnRTZWxlY3RvcnM6eFplLGRlY2xzOjksdmFyczoxMyxj'@;
put 'b25zdHM6W1siaWQiLCJzaWRlYmFyTmF2Il0sWyJzaWRlYmFyTmF2IiwiIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHN1Yi1kcm9wZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJuZ0lmIl0sWzEsIm5hdi1kaXZpZGVyIl0sWzEsIm5hdi10cmVl'@;
put 'IiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywibW91c2Vkb3duIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzdWItZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiZHJvcGRvd24tdG9nZ2xlIiwiYnRuIiwiYnRuLWxpbmsiXSxb'@;
put 'InNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGkt'@;
put 'ZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIs'@;
put 'InJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xy'@;
put 'VmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIs'@;
put 'InJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIi'@;
put 'LCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0'@;
put 'YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBw'@;
put 'cm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbMSwicC0xMCJdLFsiY2xyVGFiTGluayIs'@;
put 'IiIsMSwidXNlci1uYXYtYnRuIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInplcm8tbWFyZ2luIl0sWyJzaGFwZSIsInVzZXIiXSxbInNoYXBlIiwidXNlcnMiXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIs'@;
put 'IiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvZmlsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYoVGkoKSxtZSgwLCJjbHItdmVydGljYWwtbmF2IiwwLDEpLEplKDIsZ1plLDYsMSwiZGl2IiwyKSxKZSgzLENaZSwxNCw2LCJjbHItdGFicyIsMyksSmUoNCxNWmUsNiwxLCJkaXYiLDIpLHF0KDUsImRpdiIsNCksbWUoNiwiZGl2Iiw1KSx4dCgic2Nyb2xsIixmdW5jdGlvbihmKXty'@;
put 'ZXR1cm4gZC5vblRyZWVTY3JvbGwoZil9KSxrcig3KSx5ZSgpLG1lKDgsInNwYW4iLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzaXplU3RhcnQoKX0pLHllKCkoKSksMiZhJiYoSHUoIndpZHRoIixkLnNpZGViYXJXaWR0aCwicHgiKSgibWF4LXdpZHRoIixkLnNp'@;
put 'ZGViYXJNYXhXaWR0aCwicHgiKSxkcigiY2xvc2VkIiwhZC5zaWRlYmFyT3BlbikoInJlc2l6aW5nIixkLnJlc2l6aW5nKSxDZSgyKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldyIpKSxDZSgxKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixkLmlzTWFpblJvdXRlKCJob21lIikpLENlKDQpLGRyKCJyZXNpemluZyIsZC5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W1ppLGthLEU4LGMyLExwLE9wLGRnLFJwLElwLGNnLFpRLFlRLE5mLGFnLGxnLEJ1LEdfXSxzdHlsZXM6WyJjbHItdmVydGljYWwtbmF2W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXt3aWR0aDoyNzJweDttaW4td2lkdGg6MjcycHg7aGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjM3NXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaGFkb3c6MCAwIDVweCAjMDAwMDAwMWY7YmFja2dyb3VuZC1jb2xvcjojZmZmIWltcG9ydGFudH1jbHItdmVydGljYWwtbmF2W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5zdW4tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MzZweH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtdHJlZVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfWNs'@;
put 'ci12ZXJ0aWNhbC1uYXYuY2xvc2VkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDotMjcycHh9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7'@;
put 'cmlnaHQ6LTNweDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkICM4MGI0NDE7Y3Vyc29yOmNvbC1yZXNpemU7b3BhY2l0eTowO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlLWluLW91dH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXTpob3ZlcntvcGFjaXR5Oi41fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGUucmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX1jbHItdmVydGljYWwtbmF2LnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFu'@;
put 'c2l0aW9uOm5vbmUhaW1wb3J0YW50fS5uYXYtZGl2aWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2QzZDNkMzttYXJnaW4tYm90dG9tOjB9LnBhZ2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3Rl'@;
put 'eHQtYWxpZ246Y2VudGVyfS56ZXJvLW1hcmdpbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnVzZXItbmF2LWJ0bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDJweH0jc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoyMDB9QG1lZGlhIChtYXgtd2lkdGg6'@;
put 'IDc2N3B4KXsjc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fSJdfSksY30pKCk7ZnVuY3Rpb24gRVplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGtaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp'@;
put 'O21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gQVplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJh'@;
put 'cnlPbkZpbHRlcigpKX0pLHllKCksSmUoNCxFWmUsMSwwLCJjbHItaWNvbiIsMTApLEplKDUsa1plLDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lm'@;
put 'IixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFRaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBEWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLHllKCl9fWZ1bmN0aW9uIElaZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDE4LDE5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7'@;
put 'QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLHllKCksSmUoNCxUWmUsMSwwLCJjbHItaWNvbiIsMTApLEplKDUsRFplLDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9'@;
put 'VmUoMikuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gTFplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjYpfWZ1'@;
put 'bmN0aW9uIFJaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBPWmUoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIikseWUoKSl9ZnVuY3Rpb24gUFplKGMs'@;
put 'bCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLEplKDEsT1plLDIsMCwic3BhbiIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixhKX19ZnVuY3Rpb24gRlplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xy'@;
put 'LXRvb2x0aXAiKSgxLCJidXR0b24iLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS5uZ1ZhcixfPVZlKCkuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0LFc9VmUoKTtyZXR1cm4ganQoZj8iIjpXLm9uVGFibGVDbGljayhfLFQpKX0pLFZyKDIsMjIpLEplKDMsTFpl'@;
put 'LDEsMCwiY2xyLWljb24iLDIzKSxKZSg0LFJaZSwxLDAsImNsci1pY29uIiwyNCksanIoKSxOZSg1KSx5ZSgpLEplKDYsUFplLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjUpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1WZSgpLiRpbXBsaWNpdCxoPVZlKDIpLiRpbXBsaWNp'@;
put 'dCxmPVZlKCk7Q2UoMSksZHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCEwKSxDZSgxKSxSZSgi'@;
put 'bmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSkscHIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gSFplKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIpLEplKDEsRlplLDcsOCwiY2xyLXRvb2x0aXAiLDIwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxk'@;
put 'PVZlKDMpO0NlKDEpLFJlKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gTlplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQo'@;
put 'YSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIF8udHJlZU5vZGVDbGlja2VkKGgsZiksanQoXy5saWI9Zi5MSUJSQVJZUkVGKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSks'@;
put 'bWUoMSwicCIsMTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLGp0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLHF0KDIsImNsci1pY29uIiwxNyksTmUoMykseWUo'@;
put 'KSxKZSg0LElaZSw2LDMsImNsci10cmVlLW5vZGUiLDApLEplKDUsSFplLDIsMSwiY2xyLXRyZWUtbm9kZSIsMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xy'@;
put 'TG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLHByKCIgIixhLkxJQlJBUllSRUYsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIFZaZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsTlpl'@;
put 'LDYsNywiY2xyLXRyZWUtbm9kZSIsMTQpLGpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gQlplKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkoMSwiZGl2IiwzMSkoMiwic3BhbiIsMzIpLE5lKDMsIiBMb2FkaW5nLi4u'@;
put 'ICIpLHllKCkoKSgpKX1mdW5jdGlvbiBqWmUoYyxsKXsxJmMmJihtZSgwLCJoMyIsMzYpLE5lKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIikseWUoKSl9ZnVuY3Rpb24gelplKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM2KSxOZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQg'@;
put 'IikseWUoKSl9ZnVuY3Rpb24gVVplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzMykscXQoMSwiY2xyLWljb24iLDM0KSxKZSgyLGpaZSwyLDAsImgzIiwzNSksSmUoMyx6WmUsMiwwLCJoMyIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIiwobnVsbD09YS50'@;
put 'cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk8MSl9fWxldCBaWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv'@;
put 'cihhLGQsaCxmLF8sVCl7dGhpcy5yb3V0ZT1hLHRoaXMucm91dGVyPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuaGVscGVyU2VydmljZT1mLHRoaXMuZXZlbnRTZXJ2aWNlPV8sdGhpcy5zYXNTZXJ2aWNlPVQsdGhpcy50cmVlTm9kZUxpYnJhcmllcz1udWxsLHRoaXMubGlicmFyaWVz'@;
put 'U2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMubG9hZGluZz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57'@;
put 'aC5MSUJSQVJZSUQhPT1kLkxJQlJBUllJRCYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7ZC5leHBh'@;
put 'bmRlZD0hZC5leHBhbmRlZCxkLmV4cGFuZGVkJiYhdGhpcy50YWJsZSYmdGhpcy5zZWxlY3RMaWJyYXJ5KGEsITEsZCksdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1zZWxlY3RMaWJyYXJ5KGEsZCxoKXtoLmxvYWRpbmdUYWJsZXM9ITA7bGV0IGYsXz1bXTtp'@;
put 'Zih0aGlzLmxpYnNBbmRUYWJsZXMmJihmPXRoaXMubGlic0FuZFRhYmxlc1thXSx0aGlzLnRhYmxlPXZvaWQgMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWEpKXtsZXQgVD1mLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4tMT09PV8uaW5kZXhPZihXKSYmKF8ucHVzaChXKSwhMCl9KTt0'@;
put 'aGlzLnRhYmxlcz1ULEduLmVkaXRvci5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXN9R24uZWRpdG9yLmxpYnJhcnk9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSEwfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4g'@;
put 'ZmkoZnVuY3Rpb24qKCl7aC5saWJUYWI9aC5saWIrIi4iK2gudGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksR24uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7R24uZWRpdG9yLmZpbHRlci5saWJkcz0i'@;
put 'IixHbi5lZGl0b3IuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEduLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixHbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sR24uZWRpdG9yLmZpbHRlci52YWxzPVtdLEduLmVkaXRvci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1'@;
put 'cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVy'@;
put 'KHRoaXMudHJlZU5vZGVMaWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxHbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMu'@;
put 'c2VsZWN0VGFibGUoYSksdGhpcy5lZGl0VGFibGUoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUoKXtpZihudWxsIT09R24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVz'@;
put 'JiYodGhpcy50cmVlTm9kZUxpYnJhcmllcz1Hbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09R24uZWRpdG9yLmxpYnJhcnkpe3RoaXMubGliPUduLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVlTm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxpYnJhcmll'@;
put 'cy5maW5kKGQ9PmQuTElCUkFSWVJFRj09PXRoaXMubGliKSksdGhpcy5zZWxlY3RMaWJyYXJ5KEduLmVkaXRvci5saWJyYXJ5LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Hbi5lZGl0b3Iu'@;
put 'bGlicmFyaWVzLHRoaXMuZ2V0TGlicmFyeVRhYmxlU3RhdGUoKSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0KCl7R24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJl'@;
put 'KCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KERzKSx0dChXbCksdHQoQzApLHR0KFRjKSx0dCh2bCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaG9tZS1j'@;
put 'b21wb25lbnQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZC1ibG9jayJdLFsiY2xh'@;
put 'c3MiLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIs'@;
put 'Im5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNr'@;
put 'IiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01v'@;
put 'ZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hD'@;
put 'YXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQi'@;
put 'LCJjbHJTaXplIiwibGciXSxbNCwibmdJZiJdLFsxLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1p'@;
put 'bmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSgxLCJjbHItdHJlZSIpLEplKDIs'@;
put 'QVplLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksSmUoMyxWWmUsMiwxLCJuZy1jb250YWluZXIiLDEpLHllKCkoKSxtZSg0LCJkaXYiLDIpKDUsImRpdiIsMyksSmUoNixCWmUsNCwwLCJkaXYiLDQpLEplKDcsVVplLDQsMiwiZGl2Iiw1KSx5ZSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwo'@;
put 'bnVsbD09ZC50cmVlTm9kZUxpYnJhcmllcz9udWxsOmQudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC50cmVlTm9kZUxpYnJhcmllcyksQ2UoMyksUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmcpKX0sZGVwZW5k'@;
put 'ZW5jaWVzOltXYSxCcyxPcyxkZCxnMSxEcCxrYSxadSxjMixmMSxqYixVYix6YixuMyx4cyxaaSxuZCx0aCxVN10sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uY2FyZC1ibG9j'@;
put 'a1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cGFkZGluZzowfS5uby10YWJsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9ICBjbHItaWNvbi5pcy1ibHVlLCAgIGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fS5z'@;
put 'cGlubmVyLXdyYXBwZXItZnVsbHBhZ2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfSJdfSksY30pKCk7Y29uc3QgWVplPWM9Pntmb3IoY29uc3QgbCBpbiBjKWlm'@;
put 'KCJfX3Jvd051bV9fIiE9PWwpcmV0dXJuITE7cmV0dXJuITB9LGRVPWM9Pntjb25zdCBhPWMubWF0Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGE/e3JvdzpwYXJzZUludChhWzFdLDEwKSxjb2x1bW46cGFyc2VJbnQoYVsyXSwxMCl9Om51bGx9LE9zZT0oYyxsKT0+e2lmKGMu'@;
put 'c3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihjPWMucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGMuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGE9ZFUoYyk7aWYoYSl7Y29uc3R7cm93OmQsY29sdW1uOmh9PWE7Yz1nYy51dGlscy5lbmNvZGVfY2VsbCh7cjpkLTEsYzpoLTF9KX19'@;
put 'aWYoYy5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IGE9IiI7Y29uc3QgZD1jLm1hdGNoKC9DXFtcZCtcXTooLispLyk7ZCYmKGE9ZFsxXSk7Y29uc3QgZj1jLnNwbGl0KCIgIilbMV07bGV0IF89IiIsVD0tMSxXPSIiO2lmKGlzTmFOKE51bWJlcihmKSk/Xz1mOlQ9cGFyc2VJbnQoZiksLTEh'@;
put 'PT1UKXtjb25zdCB3ZT1sW1QtMV07Zm9yKGNvbnN0IEVlIGluIHdlKWlmKCJfX3Jvd051bV9fIiE9PUVlJiZ3ZVtFZV09PT1hKXtXPUVlK1Q7YnJlYWt9fWVsc2UgZm9yKGxldCB3ZT0wO3dlPGwubGVuZ3RoO3dlKyspaWYobFt3ZV1bX109PT1hKXtXPV8rKHdlKzEpO2JyZWFrfWNvbnN0IGll'@;
put 'PWdjLnV0aWxzLmRlY29kZV9jZWxsKFcpLHBlPWRVKGMpO2lmKHBlKXtjb25zdHtyb3c6d2UsY29sdW1uOkVlfT1wZTtjPWdjLnV0aWxzLmVuY29kZV9jZWxsKHtyOmllLnIrd2UsYzppZS5jK0VlfSl9fXJldHVybiBjfSxxWmU9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBLWmUoYyxs'@;
put 'KXsxJmMmJihtZSgwLCJkaXYiLDI4KSxxdCgxLCJjbHItc3Bpbm5lciIsMjkpLHllKCkpfWZ1bmN0aW9uIFhaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBKWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzEpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGguc2VhcmNoU3RyaW5nPSIiLGp0KGgueGxtYXBMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBRWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxtZSgxLCJjbHItdHJlZS1ub2RlIikoMiwiYnV0dG9u'@;
put 'IiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnhsbWFwT25DbGljayhmKSl9KSxxdCgzLCJjbHItaWNvbiIsMzMpLE5lKDQpLHllKCkoKSxqcigpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMiks'@;
put 'ZHIoInRhYmxlLWFjdGl2ZSIsZC5pc0FjdGl2ZVhMTWFwKGEuaWQpKSxDZSgyKSxwcigiICIsYS5pZCwiICIpfX1mdW5jdGlvbiBlWWUoYyxsKXsxJmMmJihtZSgwLCJoMyIsMzcpLE5lKDEsIiBQbGVhc2Ugc2VsZWN0IGEgbWFwICIpLHllKCkpfWZ1bmN0aW9uIHRZZShjLGwpezEmYyYmKG1l'@;
put 'KDAsImgzIiwzNyksTmUoMSwiIE5vIGV4Y2VsIG1hcCBpcyBmb3VuZCAiKSx5ZSgpKX1mdW5jdGlvbiBuWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM0KSxxdCgxLCJjbHItaWNvbiIsMzUpLEplKDIsZVllLDIsMCwiaDMiLDM2KSxKZSgzLHRZZSwyLDAsImgzIiwzNikseWUoKSksMiZj'@;
put 'KXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiByWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM4KSgxLCJzcGFuIiwzOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUo'@;
put 'KSxtZSgzLCJkaXYiKSg0LCJoNCIpLE5lKDUpLHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg1KSxvcihhLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBpWWUoYyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIG9ZZShjLGwpezEmYyYmcXQoMCwiY2xyLXRh'@;
put 'Yi1jb250ZW50Iil9ZnVuY3Rpb24gc1llKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDQwKSx4dCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uU2hvd1VwbG9hZE1vZGFs'@;
put 'KCkpfSksbWUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLlJ1bGVzKX0pLE5lKDQsIlJ1bGVzIikseWUoKSxKZSg1LGlZZSwx'@;
put 'LDAsImNsci10YWItY29udGVudCIsNDIpLHllKCksbWUoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5EYXRhKX0pLE5lKDgsIkRhdGEiKSx5ZSgpLEpl'@;
put 'KDksb1llLDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MikseWUoKSgpLEplKDEwLHNZZSwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLG1lKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxOZSgxMykseWUoKSxtZSgxNCwiaSIsNDUpLE5lKDE1KSx5ZSgpLG1lKDE2LCJoNSIsNDUpLE5lKDE3LCIgUnVs'@;
put 'ZXMgU291cmNlOiAiKSxtZSgxOCwiYSIsNDYpLE5lKDE5KSx5ZSgpKCksbWUoMjAsImg1Iiw0NSksTmUoMjEsIiBUYXJnZXQgZGF0YXNldDogIiksbWUoMjIsImEiLDQ2KSxOZSgyMykseWUoKSgpKCksbWUoMjQsImRpdiIsNDcpLHF0KDI1LCJob3QtdGFibGUiLDQ4KSx5ZSgpKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPVZlKCksZD0kaSg0MSk7Q2UoNSksUmUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcyksQ2UoNCksUmUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5EYXRhKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIs'@;
put 'ZCksQ2UoMykscHIoIiAiLGEuc2VsZWN0ZWRYTE1hcC5pZCwiICIpLENlKDIpLG9yKGEuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlvbiksQ2UoMyksUmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5ydWxlc1NvdXJjZSksQ2UoMSkscHIoIiAiLGEucnVsZXNTb3VyY2UsIiAiKSxDZSgz'@;
put 'KSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMpLENlKDEpLHByKCIgIixhLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMsIiAiKSxDZSgyKSxSZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1'@;
put 'MCkoImRhdGEiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoImNvbEhlYWRlcnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0hlYWRlcnM6YS54bFVwbG9hZEhlYWRlcikoImNvbHVtbnMiLGEuc2Vs'@;
put 'ZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0NvbHVtbnM6YS54bFVwbG9hZENvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImhlaWdodCIsIjEwMCUiKSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVja2VyKSgiY2VsbHMiLGEuZ2V0Q2VsbENvbmZpZ3VyYXRpb24p'@;
put 'KCJtYXhSb3dzIixhLmhvdFRhYmxlTWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsMTUpKCJyb3dIZWlnaHRzIiwyMCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KX19ZnVuY3Rpb24g'@;
put 'bFllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLHF0KDIsImNsci1pY29uIiw1MyksbWUoMywic3BhbiIpLE5lKDQs'@;
put 'IlVwbG9hZCIpLHllKCkoKSgpfX1mdW5jdGlvbiBjWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnN1Ym1pdEV4Y2VsKCkpfSkscXQoMiwiY2xyLWljb24i'@;
put 'LDUzKSxtZSgzLCJzcGFuIiksTmUoNCwiU3VibWl0IikseWUoKSgpKCl9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZGlzY2FyZEV4'@;
put 'dHJhY3RlZERhdGEoKSl9KSxxdCgyLCJjbHItaWNvbiIsNTUpLG1lKDMsInNwYW4iKSxOZSg0LCJEaXNjYXJkIikseWUoKSgpKCl9fWZ1bmN0aW9uIGRZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDkpLEplKDEsbFllLDUsMCwiZGl2Iiw1MCksSmUoMixjWWUsNSwwLCJkaXYiLDUwKSxK'@;
put 'ZSgzLHVZZSw1LDAsImRpdiIsNTApLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvVXBsb2FkKSxDZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksQ2UoMSksUmUo'@;
put 'Im5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpfX12YXIgeWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixjW2MuRmV0Y2hpbmdSdWxlcz0xXT0iRmV0Y2hpbmdSdWxlcyIsY1tjLlJlYWR5VG9VcGxvYWQ9'@;
put 'Ml09IlJlYWR5VG9VcGxvYWQiLGNbYy5FeHRyYWN0aW5nRGF0YT0zXT0iRXh0cmFjdGluZ0RhdGEiLGNbYy5SZWFkeVRvU3VibWl0PTRdPSJSZWFkeVRvU3VibWl0IixjW2MuU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09IlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhIixjW2MuU3VibWl0dGlu'@;
put 'Zz02XT0iU3VibWl0dGluZyIsY30oeWR8fHt9KSxaNz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJ1bGVzPTBdPSJSdWxlcyIsY1tjLkRhdGE9MV09IkRhdGEiLGN9KFo3fHx7fSk7bGV0IFBzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZXZlbnRTZXJ2'@;
put 'aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj1fLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPVQsdGhpcy5zYXNTZXJ2aWNlPVcsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5w'@;
put 'dXRDb21wTGlzdD1uZXcgZWgsdGhpcy5TdGF0dXNFbnVtPXlkLHRoaXMuVGFic0VudW09WjcsdGhpcy5zZWxlY3RlZFRhYj1aNy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPUduLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAw'@;
put 'LHRoaXMuc2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9eWQuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9J'@;
put 'RCIsIlhMTUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10s'@;
put 'dGhpcy54bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwiUk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9'@;
put 'XSx0aGlzLnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IFJvZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VT'@;
put 'ZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfXhsbWFwT25DbGljayhhKXthLmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5p'@;
put 'ZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50'@;
put 'LnZhbHVlPSIiKSx0aGlzLnNlbGVjdGVkVGFiPVo3LlJ1bGVzLHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9maWxlcy8iK2EuaWQpKX14bG1hcExpc3RPbkZpbHRlcigpe3RoaXMueGxtYXBzPXRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aD4w'@;
put 'P0duLnhsbWFwcy5maWx0ZXIoZD0+ZC5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTpHbi54bG1hcHN9aXNBY3RpdmVYTE1hcChhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFhMTWFwPy5pZD09PWF9bWF4V2lkdGhDaGVja2VyKGEsZCl7'@;
put 'cmV0dXJuIGE+MjAwPzIwMDphfWdldENlbGxDb25maWd1cmF0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7cmV0dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITB9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25l'@;
put 'T3Zlcj1hfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZighZilyZXR1cm47Y29uc3QgXz1mLm5hbWU7aWYodGhpcy5maWxlbmFtZT1fLCJ4bHMiPT09Xy5zbGljZShfLmxhc3RJbmRleE9mKCIuIikrMSxfLmxhc3RJbmRl'@;
put 'eE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPXlkLkV4dHJhY3RpbmdEYXRhO2NvbnN0IFc9bmV3IEZpbGVSZWFkZXI7Vy5vbmxv'@;
put 'YWQ9ZnVuY3Rpb24oKXt2YXIgaWU9ZmkoZnVuY3Rpb24qKHBlKXtjb25zdCB3ZT0oYz0+e2NvbnN0IGw9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGE9IiI7Y29uc3QgZD1sLmJ5dGVMZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbaF0pO3JldHVybiBh'@;
put 'fSkocGUudGFyZ2V0LnJlc3VsdCk7bGV0IEVlO2NvbnN0IFplPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMX07dHJ5e0VlPWdjLnJlYWQod2Usey4uLlplfSl9Y2F0Y2goaXQpe2guZXZlbnRTZXJ2'@;
put 'aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsaXQsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighRWUpcmV0dXJuIGguaXNMb2FkaW5nPSExLGguaXNMb2FkaW5nRGVzYz0iIixoLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtoLmV4dHJh'@;
put 'Y3REYXRhKEVlKX0pO3JldHVybiBmdW5jdGlvbihwZSl7cmV0dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksVy5yZWFkQXNBcnJheUJ1ZmZlcihmKX1lbHNlIHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2Fk'@;
put 'LHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwLHRoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwnSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrdGhpcy5maWxlbmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgZXhjZWwgZmlsZS4nKX1k'@;
put 'aXNjYXJkRXh0cmFjdGVkRGF0YSgpe3RoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkLHRoaXMueGxEYXRhPVtdLHRoaXMuc2VsZWN0ZWRUYWI9WjcuUnVsZXMsdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1'@;
put 'ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/'@;
put 'dGhpcy5zdWJtaXQoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSEwfXN1Ym1pdCgpe2lmKCF0aGlzLnNlbGVjdGVkWExNYXB8fCF0aGlzLnhsRGF0YS5sZW5ndGgpcmV0dXJuO3RoaXMuc3RhdHVzPXlkLlN1Ym1pdHRpbmcsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJT'@;
put 'dWJtaXR0aW5nIGV4dHJhY3RlZCBkYXRhIjtjb25zdCBhPVtdO2Zvcihjb25zdCBUIG9mIHRoaXMudXBsb2FkZXIucXVldWUpYS5wdXNoKHtmaWxlOlQsZmlsZU5hbWU6VC5uYW1lfSk7Y29uc3QgZD1PYmplY3Qua2V5cyh0aGlzLnhsRGF0YVswXSkuam9pbigiLCIpKyJcbiIrdGhpcy54bERh'@;
put 'dGEuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCkubWFwKFQ9Pk9iamVjdC52YWx1ZXMoVCkuam9pbigiLCIpKS5qb2luKCJcbiIpLGY9KChjLGwpPT5uZXcgRmlsZShbY10sdGhpcy5maWxlbmFtZSsiLmNzdiIse2xhc3RNb2RpZmllZDoobmV3IERh'@;
put 'dGUpLmdldFRpbWUoKX0pKShuZXcgQmxvYihbZF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSk7YS5wdXNoKHtmaWxlOmYsZmlsZU5hbWU6Zi5uYW1lfSksdGhpcy5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLGEse3RhYmxlOnRoaXMuc2VsZWN0'@;
put 'ZWRYTE1hcC50YXJnZXREU30pLnRoZW4oVD0+e1Quc2FzanNBYm9ydD90aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixULnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpULlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpULlNZU0VSUk9SVEVYVCxNQUM6VC5z'@;
put 'YXNqc0Fib3J0WzBdLk1BQ30pOlQuc2FzcGFyYW1zJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitULnNhc3BhcmFtc1swXS5EU0lEKX0pLmNhdGNoKFQ9Pnt0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixUKX0pLmZpbmFsbHko'@;
put 'KCk9Pnt0aGlzLnN0YXR1cz15ZC5SZWFkeVRvU3VibWl0LHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIn0pfWV4dHJhY3REYXRhKGEpe2NvbnN0IGQ9W107dGhpcy54bG1hcFJ1bGVzLmZvckVhY2goaD0+e2xldCBmPWguWExNQVBfU0hFRVQ7aWYoZi5zdGFydHNXaXRo'@;
put 'KCIvIikpe2NvbnN0IFplPWYuc3BsaXQoIi8iKVsxXSxpdD1wYXJzZUludChaZSktMTtmPWEuU2hlZXROYW1lc1tpdF19Y29uc3QgXz1hLlNoZWV0c1tmXSxUPWdjLnV0aWxzLnNoZWV0X3RvX2pzb24oXyx7cmF3OiEwLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSksVz1Pc2UoaC5YTE1BUF9T'@;
put 'VEFSVCxUKSxpZT0oKGMsbCxhKT0+e2lmKCIiPT09bClyZXR1cm4gYztpZihsLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYobD1sLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxsLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBkPWRVKGwpO2lmKGQpe2NvbnN0e3JvdzpoLGNvbHVt'@;
put 'bjpmfT1kLHtyOl8sYzpUfT1nYy51dGlscy5kZWNvZGVfY2VsbChjKTtsPWdjLnV0aWxzLmVuY29kZV9jZWxsKHtyOl8raCxjOlQrZn0pfX1pZihsLnN0YXJ0c1dpdGgoIk1BVENIICIpJiYobD1Pc2UobCxhKSksIkxBU1RET1dOIj09PWwpe2NvbnN0e3I6ZCxjOmh9PWdjLnV0aWxzLmRlY29k'@;
put 'ZV9jZWxsKGMpLGY9Z2MudXRpbHMuZW5jb2RlX2NvbChoKTtsZXQgXz1kO2ZvcihsZXQgVD1kKzE7VDxhLmxlbmd0aCYmYVtUXVtmXTtUKyspXz1UO2w9ZisoXysxKX1pZigiQkxBTktST1ciPT09bCl7Y29uc3R7cjpkfT1nYy51dGlscy5kZWNvZGVfY2VsbChjKTtsZXQgaD1kO2ZvcihsZXQg'@;
put 'Vz1kKzE7VzxhLmxlbmd0aCYmIVlaZShhW1ddKTtXKyspaD1XO2w9T2JqZWN0LmtleXMoYVtoXSkuZmlsdGVyKFc9PiJfX3Jvd051bV9fIiE9PVcpLnJlZHVjZSgoVyxpZSk9PmllPlc/aWU6VywiIikrKGgrMSl9cmV0dXJuIGx9KShXLGguWExNQVBfRklOSVNILFQpLHBlPWAke1d9OiR7aWV9'@;
put 'YCx3ZT1nYy51dGlscy5kZWNvZGVfcmFuZ2UocGUpLEVlPWdjLnV0aWxzLnNoZWV0X3RvX2pzb24oXyx7cmF3OiEwLHJhbmdlOnBlLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSk7Zm9yKGxldCBaZT0wO1plPEVlLmxlbmd0aDtaZSsrKXtjb25zdCBpdD1FZVtaZV07Zm9yKGxldCBldD13ZS5z'@;
put 'LmMseXQ9MDtldDw9d2UuZS5jO2V0KysseXQrKyl7Y29uc3QgRXQ9Z2MudXRpbHMuZW5jb2RlX2NvbChldCk7RXQgaW4gaXQmJmQucHVzaCh7TE9BRF9SRUY6IjAiLFhMTUFQX0lEOmguWExNQVBfSUQsWExNQVBfUkFOR0VfSUQ6aC5YTE1BUF9SQU5HRV9JRCxST1dfTk86WmUrMSxDT0xfTk86'@;
put 'eXQrMSxWQUxVRV9UWFQ6aXRbRXRdfSl9fX0pLHRoaXMuc3RhdHVzPXlkLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMueGxEYXRhPWQsdGhpcy5zZWxlY3RlZFRhYj1aNy5EYXRhfXZpZXdYTE1hcFJ1bGVzKCl7dmFyIGE9dGhpczty'@;
put 'ZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zZWxlY3RlZFhMTWFwJiYoYS5pc0xvYWRpbmc9ITAsYS5pc0xvYWRpbmdEZXNjPSJMb2FkaW5nIGV4Y2VsIHJ1bGVzIixhLnN0YXR1cz15ZC5GZXRjaGluZ1J1bGVzLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFhMTWFwUnVsZXMoYS5zZWxlY3Rl'@;
put 'ZFhMTWFwLmlkKS50aGVuKGQ9PnthLnhsbWFwUnVsZXM9ZC54bG1hcHJ1bGVzLGEuc3RhdHVzPXlkLlJlYWR5VG9VcGxvYWR9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSksYS5pc0xvYWRpbmc9ITEsYS5pc0xvYWRpbmdEZXNjPSIiKX0pKCl9bG9hZCgpe3RoaXMueGxt'@;
put 'YXBzPUduLnhsbWFwcyx0aGlzLnhsbWFwc0xvYWRpbmc9ITE7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZDtpZihhKXtjb25zdCBkPXRoaXMueGxtYXBzLmZpbmQoaD0+aC5pZD09PWEpO2QmJih0aGlzLnNlbGVjdGVkWExNYXA9ZCx0aGlzLnZpZXdYTE1hcFJ1bGVzKCkp'@;
put 'fX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXtHbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmxvYWQoKTp0'@;
put 'aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMubG9hZCgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHZsKSx0dChDMCksdHQodzApLHR0KFdsKSx0dChEcyksdHQoYmQpLHR0KG9hKSl9'@;
put 'LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHFaZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWgpfX0saG9zdFZhcnM6Mixob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjb250ZW50LWNvbnRhaW5lciIsZC5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxkZWNsczo0Mix2YXJzOjE2LGNvbnN0czpbWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxb'@;
put 'MSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoWExNYXBUcmVlSW5wdXQi'@;
put 'LCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRp'@;
put 'bmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLCJjbGFzcyIsImNhcmQgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIiw0LCJuZ0lmIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsInVwbG9hZGVyIiwiY2xyTW9k'@;
put 'YWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEs'@;
put 'ImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEs'@;
put 'ImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsInVwbG9hZGVyIiwiY2hhbmdlIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIi'@;
put 'XSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYWN0aW9uQnV0dG9ucyIsIiJdLFsxLCJteS0xMC1teC1h'@;
put 'dXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFw'@;
put 'ZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bp'@;
put 'bm5lciJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsiY2xyVGFiTGluayIsIiIsMywiY2xpY2siXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJj'@;
put 'bHItcm93IiwibS0wIiwibWItMTAtaSIsInZpZXdlclRpdGxlIl0sWzEsImQtZmxleCIsImNsci1jb2wtMTIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTUtaSJdLFsxLCJtbC0xMCIsMywicm91dGVyTGluayJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3Rh'@;
put 'bmNlIiwiaWQiLCJob3QtdGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiaGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIs'@;
put 'Im1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWlnaHRzIiwibGljZW5zZUtleSJdLFsxLCJjbHItcm93IiwibS0wIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5'@;
put 'LWNvbnRlbnQtY2VudGVyIGNsci1jb2wtMTIgY2xyLWNvbC1sZy00Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nl'@;
put 'c3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl1dLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSxKZSgxLEtaZSwyLDAsImRpdiIsMCksbWUoMiwiY2xyLXRyZWUiKSgzLCJjbHItdHJlZS1ub2RlIiwxKSg0LCJkaXYiLDIpKDUsImlucHV0IiwzLDQpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1'@;
put 'cm4gZC5zZWFyY2hTdHJpbmc9Zn0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gZC54bG1hcExpc3RPbkZpbHRlcigpfSkseWUoKSxKZSg3LFhaZSwxLDAsImNsci1pY29uIiw1KSxKZSg4LEpaZSwxLDAsImNsci1pY29uIiw2KSx5ZSgpKCksSmUoOSxRWmUsNSwzLCJuZy1jb250YWluZXIi'@;
put 'LDcpLHllKCkoKSxtZSgxMCwiZGl2Iiw4KSxKZSgxMSxuWWUsNCwyLCJkaXYiLDkpLEplKDEyLHJZZSw2LDEsImRpdiIsMTApLEplKDEzLGFZZSwyNiwyNCwiZGl2IiwxMSksbWUoMTQsImNsci1tb2RhbCIsMTIpLHh0KCJmaWxlT3ZlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZmlsZU92ZXJC'@;
put 'YXNlKGYpfSkoImZpbGVEcm9wIixmdW5jdGlvbihmKXtyZXR1cm4gZC5nZXRGaWxlRGVzYyhmLCEwKX0pKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNob3dVcGxvYWRNb2RhbD1mfSksbWUoMTUsImgzIiwxMyksTmUoMTYsIlVwbG9hZCBGaWxlIikseWUoKSxt'@;
put 'ZSgxNywiZGl2IiwxNCkoMTgsImRpdiIsMTUpKDE5LCJzcGFuIiksTmUoMjAsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIikseWUoKSgpLG1lKDIxLCJkaXYiLDE2KSgyMiwiZGl2IiwxNykoMjMsImRpdiIsMTgpKDI0LCJzcGFuIiwxOSkoMjUsImxhYmVsIiwyMCksTmUoMjYsIiBC'@;
put 'cm93c2UgIikseWUoKSgpLG1lKDI3LCJpbnB1dCIsMjEsMjIpLHh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmdldEZpbGVEZXNjKGYpfSkseWUoKSgpKCkoKSgpKCksbWUoMjksImNsci1tb2RhbCIsMjMpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVy'@;
put 'biBkLnN1Ym1pdExpbWl0Tm90aWNlPWZ9KSxtZSgzMCwiaDMiLDEzKSxOZSgzMSwiTm90aWNlIikseWUoKSxtZSgzMiwiZGl2IiwxNCkoMzMsInAiLDI0KSxOZSgzNCkseWUoKSgpLG1lKDM1LCJkaXYiLDI1KSgzNiwiYnV0dG9uIiwyNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBk'@;
put 'LnN1Ym1pdExpbWl0Tm90aWNlPSExfSksTmUoMzcsIiBDYW5jZWwgIikseWUoKSxtZSgzOCwiYnV0dG9uIiwyNikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnN1Ym1pdCgpLGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxOZSgzOSwiIFN1Ym1pdCAiKSx5ZSgpKCkoKSgpLEplKDQw'@;
put 'LGRZZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDI3LGtjKSksMiZhKXtjb25zdCBoPSRpKDYpO0NlKDEpLFJlKCJuZ0lmIixkLnhsbWFwc0xvYWRpbmcpLENlKDQpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGgudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJl'@;
put 'KCJuZ0lmIixoLnZhbHVlLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC54bG1hcHMpLENlKDIpLFJlKCJuZ0lmIiwhZC5zZWxlY3RlZFhMTWFwKSxDZSgxKSxSZSgibmdJZiIsZC5pc0xvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhZC5pc0xvYWRpbmcmJmQuc2VsZWN0ZWRYTE1hcCks'@;
put 'Q2UoMSksUmUoInVwbG9hZGVyIixkLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsT3BlbiIsZC5zaG93VXBsb2FkTW9kYWwpLENlKDEzKSxSZSgidXBsb2FkZXIiLGQudXBs'@;
put 'b2FkZXIpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQuc3VibWl0TGltaXROb3RpY2UpLENlKDUpLHByKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0'@;
put 'ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19LGRlcGVuZGVuY2llczpbeHksQnUsV2EsQnMsT3MsZGQsZzEsRHAsa2Esb3Usc3UsRTgsVXMsZjEsTHAsT3AsZGcsUnAsSXAsY2csdTIsbjMseHMsWmkscmQsWWIsRXNl'@;
put 'LGtzZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1jbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3Bh'@;
put 'Y2U6bm93cmFwfS5uby10YWJsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uaGVh'@;
put 'ZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAub3B0aW9ucy1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnN3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MXJlbSAwcmVtIC41cmVtIDFyZW19LnZpZXdlclRpdGxlW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uY2FyZEZsZXhbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6'@;
put 'ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7'@;
put 'aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MXB4O2JvcmRlcjoycHggZGFzaGVkICNmZmY7ei1pbmRleDotMX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4O21hcmdp'@;
put 'bi10b3A6MjBweDtjb2xvcjojZmZmfSJdfSksY30pKCk7Y29uc3QgaFllPVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5k'@;
put 'ZW5jaWVzOltmcF19KSxjfSkoKSxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OlBzZX0se3BhdGg6IjppZCIsY29tcG9uZW50OlBzZX1dfV07bGV0IGZZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVt'@;
put 'b2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltkYy5mb3JDaGlsZChoWWUpLGRjXX0pLGN9KSgpO0Z6KCk7bGV0IHBZZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5'@;
put 'cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltfNyxmWWUsJGwsX3UsQjcsb28sUUEsQzJdfSksY30pKCk7Y29uc3QgZ1llPVt7cGF0aDoiIixjb21wb25lbnQ6b1plLGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtwYXRoOiJ0'@;
put 'YWJsZXMiLGNvbXBvbmVudDpaWmV9LHtwYXRoOiJmaWxlcyIsbG9hZENoaWxkcmVuOigpPT5wWWV9XX1dO2xldCBtWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3'@;
put 'NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQoZ1llKSxkY119KSxjfSkoKSxoVT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltt'@;
put 'WWUsJGwsX3UsQjcsb28sUUEsQzJdfSksY30pKCksZlU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28sJGwsQjcsdHcs'@;
put 'QzJdfSksY30pKCksRnNlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLF91LG9vLCRsLGZVLF83LENzZSxMb2UsUUEsQzJdfSks'@;
put 'Y30pKCk7RnooKTtsZXQgdlllPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W0ZzZSxvbywkbCxpWmUsX3UsXzcuZm9yUm9vdCgpLEI3'@;
put 'LEMyLFY3LGhVLHR3LFFBLENzZSxmVV19KSxjfSkoKSxwVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMucm91dGVyPWR9Y2FuQWN0aXZhdGUoYSxkKXtyZXR1cm4hISh2b2lkIDAhPT1kPy5yb290LnF1ZXJ5UGFyYW1zLmZvcmNlfHxk'@;
put 'Py51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy91cGRhdGUiKSYmdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZHx8bnVsbCE9PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiExPT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1'@;
put 'ZSl8fCh0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpLCExKX1jYW5EZWFjdGl2YXRlKGEsZCxoLGYpe3JldHVybiEoaD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvcmVnaXN0ZXIiKXx8dGhpcy5saWNlbmNlU2VydmljZS5hcHBMb2NrZWQudmFsdWUpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihDMCksYXIoRHMpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtmdW5jdGlvbiBIc2UoYyxsKXsoZnVuY3Rpb24gX1llKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9ZnVuY3Rpb24gZ1UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZh'@;
put 'dGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGF9ZnVuY3Rpb24gbHcoYyl7cmV0dXJuKGx3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGwpe3JldHVybiB0eXBlb2YgbH06ZnVuY3Rpb24obCl7cmV0'@;
put 'dXJuIGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmwuY29uc3RydWN0b3I9PT1TeW1ib2wmJmwhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBsfSkoYyl9ZnVuY3Rpb24gRjAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHlZZShjKXt2YXIgbD1mdW5jdGlvbiBiWWUo'@;
put 'YyxsKXtpZigib2JqZWN0IiE9PWx3KGMpfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWx3KGQpKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1sdyhsKT9sOlN0cmluZyhsKX0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9bGV0IGw0PXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGln'@;
put 'aHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRt'@;
put 'bDohMX07ZnVuY3Rpb24gTnNlKGMpe2w0PWN9Y29uc3QgVnNlPS9bJjw+IiddLyx3WWU9bmV3IFJlZ0V4cChWc2Uuc291cmNlLCJnIiksQnNlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxDWWU9bmV3IFJlZ0V4cChCc2Uuc291cmNlLCJnIiks'@;
put 'U1llPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxqc2U9Yz0+U1llW2NdO2Z1bmN0aW9uIFN1KGMsbCl7aWYobCl7aWYoVnNlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZSh3WWUsanNlKX1lbHNlIGlmKEJzZS50ZXN0KGMpKXJl'@;
put 'dHVybiBjLnJlcGxhY2UoQ1llLGpzZSk7cmV0dXJuIGN9Y29uc3QgTVllPS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIHpzZShjKXtyZXR1cm4gYy5yZXBsYWNlKE1ZZSwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/Ijoi'@;
put 'OiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IHhZZT0vKF58W15cW10pXF4vZztmdW5jdGlvbiBmYShj'@;
put 'LGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZSh4WWUsIiQxIiksYz1jLnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1j'@;
put 'b25zdCBFWWU9L1teXHc6XS9nLGtZZT0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIFVzZShjLGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KHpzZShhKSkucmVwbGFjZShFWWUsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51'@;
put 'bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIWtZZS50ZXN0KGEpJiYoYT1mdW5jdGlvbiBJWWUoYyxsKXtlVFsiICIrY118fChlVFsiICIrY109QVllLnRl'@;
put 'c3QoYyk/YysiLyI6blQoYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9ZVRbIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShUWWUsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKERZZSwiJDEiKSts'@;
put 'OmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGF9Y29uc3QgZVQ9e30sQVllPS9eW146XSs6XC8qW14vXSokLyxUWWU9L14oW146XSs6KVtcc1xTXSokLyxEWWU9L14oW146XSs6XC8qW14vXSopW1xzXFNd'@;
put 'KiQvLHRUPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gWnNlKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsXyxUKT0+e2xldCBXPSExLGllPV87Zm9yKDstLWllPj0wJiYiXFwiPT09VFtpZV07KVc9IVc7cmV0dXJuIFc/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9'@;
put 'MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5y'@;
put 'ZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBuVChjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxz'@;
put 'ZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uIFlzZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/U3UobC50aXRsZSk6bnVsbCxfPWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGlu'@;
put 'az0hMDtjb25zdCBUPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0Ol8sdG9rZW5zOmQuaW5saW5lVG9rZW5zKF8pfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsVH1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6U3UoXyl9fWNsYXNz'@;
put 'IHJUe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNH1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMu'@;
put 'YmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOm5UKGQsIlxuIil9fX1mZW5jZXMo'@;
put 'bCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIE9ZZShjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgi'@;
put 'XG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W19dPWY7cmV0dXJuIF8ubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpk'@;
put 'LGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVz'@;
put 'dChkKSl7Y29uc3QgaD1uVChkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19'@;
put 'fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+'@;
put 'WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4'@;
put 'dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsXyxULFcsaWUscGUsd2UsRWUsWmUsaXQsZXQ9YVsxXS50cmltKCk7Y29uc3QgeXQ9ZXQubGVuZ3RoPjEsRXQ9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOnl0LHN0YXJ0'@;
put 'Onl0PytldC5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07ZXQ9eXQ/YFxcZHsxLDl9XFwke2V0LnNsaWNlKC0xKX1gOmBcXCR7ZXR9YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihldD15dD9ldDoiWyorLV0iKTtjb25zdCBTdD1uZXcgUmVnRXhwKGBeKCB7MCwzfSR7ZXR9KSgo'@;
put 'PzpbXHQgXVteXFxuXSopPyg/OlxcbnwkKSlgKTtmb3IoO2wmJihpdD0hMSwoYT1TdC5leGVjKGwpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdChsKSk7KXtpZihkPWFbMF0sbD1sLnN1YnN0cmluZyhkLmxlbmd0aCkscGU9YVsyXS5zcGxpdCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsv'@;
put 'LG5uPT4iICIucmVwZWF0KDMqbm4ubGVuZ3RoKSksd2U9bC5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oXz0yLFplPXBlLnRyaW1MZWZ0KCkpOihfPWFbMl0uc2VhcmNoKC9bXiBdLyksXz1fPjQ/MTpfLFplPXBlLnNsaWNlKF8pLF8rPWFbMV0ubGVuZ3RoKSxXPSEx'@;
put 'LCFwZSYmL14gKiQvLnRlc3Qod2UpJiYoZCs9d2UrIlxuIixsPWwuc3Vic3RyaW5nKHdlLmxlbmd0aCsxKSxpdD0hMCksIWl0KXtjb25zdCBubj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxu'@;
put 'fCQpKWApLHZuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLF8tMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSxObj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxfLTEpfX0oPzpcYFxgXGB8fn5+KWApLGNyPW5ldyBSZWdF'@;
put 'eHAoYF4gezAsJHtNYXRoLm1pbigzLF8tMSl9fSNgKTtmb3IoO2wmJihFZT1sLnNwbGl0KCJcbiIsMSlbMF0sd2U9RWUsdGhpcy5vcHRpb25zLnBlZGFudGljJiYod2U9d2UucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhKE5uLnRlc3Qod2UpfHxjci50ZXN0KHdl'@;
put 'KXx8bm4udGVzdCh3ZSl8fHZuLnRlc3QobCkpKTspe2lmKHdlLnNlYXJjaCgvW14gXS8pPj1ffHwhd2UudHJpbSgpKVplKz0iXG4iK3dlLnNsaWNlKF8pO2Vsc2V7aWYoV3x8cGUuc2VhcmNoKC9bXiBdLyk+PTR8fE5uLnRlc3QocGUpfHxjci50ZXN0KHBlKXx8dm4udGVzdChwZSkpYnJlYWs7'@;
put 'WmUrPSJcbiIrd2V9IVcmJiF3ZS50cmltKCkmJihXPSEwKSxkKz1FZSsiXG4iLGw9bC5zdWJzdHJpbmcoRWUubGVuZ3RoKzEpLHBlPXdlLnNsaWNlKF8pfX1FdC5sb29zZXx8KGllP0V0Lmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZCkmJihpZT0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJiho'@;
put 'PS9eXFtbIHhYXVxdIC8uZXhlYyhaZSksaCYmKGY9IlsgXSAiIT09aFswXSxaZT1aZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLEV0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6WmV9KSxFdC5yYXcrPWR9'@;
put 'RXQuaXRlbXNbRXQuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLEV0Lml0ZW1zW0V0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PVplLnRyaW1SaWdodCgpLEV0LnJhdz1FdC5yYXcudHJpbVJpZ2h0KCk7Y29uc3QgSnQ9RXQuaXRlbXMubGVuZ3RoO2ZvcihUPTA7VDxKdDtUKyspaWYo'@;
put 'dGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsRXQuaXRlbXNbVF0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoRXQuaXRlbXNbVF0udGV4dCxbXSksIUV0Lmxvb3NlKXtjb25zdCBubj1FdC5pdGVtc1tUXS50b2tlbnMuZmlsdGVyKE5uPT4ic3BhY2UiPT09Tm4udHlwZSksdm49bm4ubGVu'@;
put 'Z3RoPjAmJm5uLnNvbWUoTm49Pi9cbi4qXG4vLnRlc3QoTm4ucmF3KSk7RXQubG9vc2U9dm59aWYoRXQubG9vc2UpZm9yKFQ9MDtUPEp0O1QrKylFdC5pdGVtc1tUXS5sb29zZT0hMDtyZXR1cm4gRXR9fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihh'@;
put 'KXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRo'@;
put 'aXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTpTdShhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4'@;
put 'ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxh'@;
put 'WzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtj'@;
put 'b25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOlpzZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxp'@;
put 'dCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsXyxULFcsaD1kLmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQv'@;
put 'LnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1ac2UoZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKGllPT4oe3RleHQ6aWV9KSk7Zm9y'@;
put 'KGg9ZC5oZWFkZXIubGVuZ3RoLF89MDtfPGg7XysrKWQuaGVhZGVyW19dLnRva2Vucz10aGlzLmxleGVyLmlubGluZShkLmhlYWRlcltfXS50ZXh0KTtmb3IoaD1kLnJvd3MubGVuZ3RoLF89MDtfPGg7XysrKWZvcihXPWQucm93c1tfXSxUPTA7VDxXLmxlbmd0aDtUKyspV1tUXS50b2tlbnM9'@;
put 'dGhpcy5sZXhlci5pbmxpbmUoV1tUXS50ZXh0KTtyZXR1cm4gZH19fWxoZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOiI9Ij09PWFbMl0uY2hhckF0KDApPzE6Mix0ZXh0'@;
put 'OmFbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMV0pfX1wYXJhZ3JhcGgobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9IlxuIj09PWFbMV0uY2hhckF0KGFbMV0ubGVuZ3RoLTEpP2FbMV0uc2xpY2UoMCwtMSk6YVsxXTty'@;
put 'ZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6YVswXSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19dGV4dChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6InRleHQiLHJhdzphWzBdLHRleHQ6YVswXSx0b2tlbnM6'@;
put 'dGhpcy5sZXhlci5pbmxpbmUoYVswXSl9fWVzY2FwZShsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmFbMF0sdGV4dDpTdShhWzFdKX19dGFnKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4'@;
put 'ZWMobCk7aWYoYSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSks'@;
put 'IXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+'@;
put 'KS9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzphWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdC'@;
put 'bG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6U3UoYVswXSk6YVswXX19bGluayhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhsKTtpZihhKXtjb25z'@;
put 'dCBkPWFbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdChkKSl7aWYoIS8+JC8udGVzdChkKSlyZXR1cm47Y29uc3QgXz1uVChkLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChkLmxlbmd0aC1fLmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCBfPWZ1bmN0'@;
put 'aW9uIExZZShjLGwpe2lmKC0xPT09Yy5pbmRleE9mKGxbMV0pKXJldHVybi0xO2NvbnN0IGE9Yy5sZW5ndGg7bGV0IGQ9MCxoPTA7Zm9yKDtoPGE7aCsrKWlmKCJcXCI9PT1jW2hdKWgrKztlbHNlIGlmKGNbaF09PT1sWzBdKWQrKztlbHNlIGlmKGNbaF09PT1sWzFdJiYoZC0tLGQ8MCkpcmV0'@;
put 'dXJuIGg7cmV0dXJuLTF9KGFbMl0sIigpIik7aWYoXz4tMSl7Y29uc3QgVz0oMD09PWFbMF0uaW5kZXhPZigiISIpPzU6NCkrYVsxXS5sZW5ndGgrXzthWzJdPWFbMl0uc3Vic3RyaW5nKDAsXyksYVswXT1hWzBdLnN1YnN0cmluZygwLFcpLnRyaW0oKSxhWzNdPSIifX1sZXQgaD1hWzJdLGY9'@;
put 'IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCBfPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhoKTtfJiYoaD1fWzFdLGY9X1szXSl9ZWxzZSBmPWFbM10/YVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaD1oLnRyaW0oKSwvXjwvLnRlc3QoaCkmJihoPXRo'@;
put 'aXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChkKT9oLnNsaWNlKDEpOmguc2xpY2UoMSwtMSkpLFlzZShhLHtocmVmOmgmJmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpmJiZmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMs'@;
put 'IiQxIil9LGFbMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsobCxhKXtsZXQgZDtpZigoZD10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMobCkpfHwoZD10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhsKSkpe2xldCBoPShkWzJdfHxkWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lm'@;
put 'KGg9YVtoLnRvTG93ZXJDYXNlKCldLCFoKXtjb25zdCBmPWRbMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6Zix0ZXh0OmZ9fXJldHVybiBZc2UoZCxoLGRbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGwsYSxkPSIiKXtsZXQgaD10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9u'@;
put 'Zy5sRGVsaW0uZXhlYyhsKTtpZighKCFofHxoWzNdJiZkLm1hdGNoKC9bXHB7TH1ccHtOfV0vdSkpJiYoIWhbMV0mJiFoWzJdfHwhZHx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhkKSkpe2NvbnN0IF89aFswXS5sZW5ndGgtMTtsZXQgVCxXLGllPV8scGU9MDtjb25zdCB3'@;
put 'ZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKHdlLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSpsLmxlbmd0aCtfKTtudWxsIT0oaD13ZS5leGVjKGEpKTspe2lmKFQ9aFsx'@;
put 'XXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhVCljb250aW51ZTtpZihXPVQubGVuZ3RoLGhbM118fGhbNF0pe2llKz1XO2NvbnRpbnVlfWlmKChoWzVdfHxoWzZdKSYmXyUzJiYhKChfK1cpJTMpKXtwZSs9Vztjb250aW51ZX1pZihpZS09VyxpZT4wKWNvbnRpbnVlO1c9TWF0aC5t'@;
put 'aW4oVyxXK2llK3BlKTtjb25zdCBFZT1sLnNsaWNlKDAsXytoLmluZGV4K1crMSk7aWYoTWF0aC5taW4oXyxXKSUyKXtjb25zdCBpdD1FZS5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzpFZSx0ZXh0Oml0LHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhpdCl9fWNvbnN0'@;
put 'IFplPUVlLnNsaWNlKDIsLTIpO3JldHVybnt0eXBlOiJzdHJvbmciLHJhdzpFZSx0ZXh0OlplLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhaZSl9fX19Y29kZXNwYW4obCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS5yZXBs'@;
put 'YWNlKC9cbi9nLCIgIik7Y29uc3QgaD0vW14gXS8udGVzdChkKSxmPS9eIC8udGVzdChkKSYmLyAkLy50ZXN0KGQpO3JldHVybiBoJiZmJiYoZD1kLnN1YnN0cmluZygxLGQubGVuZ3RoLTEpKSxkPVN1KGQsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3OmFbMF0sdGV4dDpkfX19YnIobCl7Y29u'@;
put 'c3QgYT10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImJyIixyYXc6YVswXX19ZGVsKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiZGVsIixyYXc6YVswXSx0ZXh0OmFbMl0sdG9rZW5zOnRoaXMu'@;
put 'bGV4ZXIuaW5saW5lVG9rZW5zKGFbMl0pfX1hdXRvbGluayhsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhsKTtpZihkKXtsZXQgaCxmO3JldHVybiJAIj09PWRbMl0/KGg9U3UodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMV0pOmRbMV0pLGY9Im1haWx0bzoi'@;
put 'K2gpOihoPVN1KGRbMV0pLGY9aCkse3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX11cmwobCxhKXtsZXQgZDtpZihkPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGwpKXtsZXQgaCxmO2lmKCJAIj09PWRb'@;
put 'Ml0paD1TdSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFswXSk6ZFswXSksZj0ibWFpbHRvOiIraDtlbHNle2xldCBfO2Rve189ZFswXSxkWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhkWzBdKVswXX13aGlsZShfIT09ZFswXSk7aD1TdShkWzBdKSxmPSJ3d3cuIj09PWRb'@;
put 'MV0/Imh0dHA6Ly8iK2RbMF06ZFswXX1yZXR1cm57dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fWlubGluZVRleHQobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhsKTtpZihkKXts'@;
put 'ZXQgaDtyZXR1cm4gaD10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihkWzBdKTpTdShkWzBdKTpkWzBdOlN1KHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz9hKGRbMF0p'@;
put 'OmRbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6ZFswXSx0ZXh0Omh9fX19Y29uc3QgVG89e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMs'@;
put 'fSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgjezEs'@;
put 'Nn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJl'@;
put 'YSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8'@;
put 'Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8'@;
put 'PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/'@;
put 'OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOnRULGxoZWFkaW5nOi9eKCg/Oig/IV5idWxsICkufFxuKD8hXG58YnVsbCApKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxfcGFyYWdyYXBoOi9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGlu'@;
put 'Z3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSspKikvLHRleHQ6L15bXlxuXSsvLF9sYWJlbDovKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxfdGl0bGU6Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFte'@;
put 'KCldKlwpKS99O1RvLmRlZj1mYShUby5kZWYpLnJlcGxhY2UoImxhYmVsIixUby5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixUby5fdGl0bGUpLmdldFJlZ2V4KCksVG8uYnVsbGV0PS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLFRvLmxpc3RJdGVtU3RhcnQ9ZmEoL14oICopKGJ1bGwpICovKS5y'@;
put 'ZXBsYWNlKCJidWxsIixUby5idWxsZXQpLmdldFJlZ2V4KCksVG8ubGlzdD1mYShUby5saXN0KS5yZXBsYWNlKC9idWxsL2csVG8uYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJl'@;
put 'cGxhY2UoImRlZiIsIlxcbisoPz0iK1RvLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLFRvLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRp'@;
put 'dnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlv'@;
put 'bnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLFRvLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxUby5odG1sPWZhKFRvLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50'@;
put 'IixUby5fY29tbWVudCkucmVwbGFjZSgidGFnIixUby5fdGFnKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLFRvLmxoZWFkaW5nPWZhKFRvLmxo'@;
put 'ZWFkaW5nKS5yZXBsYWNlKC9idWxsL2csVG8uYnVsbGV0KS5nZXRSZWdleCgpLFRvLnBhcmFncmFwaD1mYShUby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsVG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgi'@;
put 'fHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1s'@;
put 'IiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFRvLl90YWcpLmdldFJlZ2V4KCksVG8uYmxvY2txdW90ZT1mYShUby5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLFRvLnBhcmFncmFwaCku'@;
put 'Z2V0UmVnZXgoKSxUby5ub3JtYWw9ey4uLlRvfSxUby5nZm09ey4uLlRvLm5vcm1hbCx0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJs'@;
put 'b2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSJ9LFRvLmdmbS50YWJsZT1mYShUby5nZm0udGFibGUpLnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHsw'@;
put 'LDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/'@;
put 'OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixUby5fdGFnKS5nZXRSZWdleCgpLFRvLmdmbS5wYXJhZ3JhcGg9ZmEoVG8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwi'@;
put 'IHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixUby5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxc'@;
put 'biIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixUby5fdGFnKS5nZXRSZWdleCgpLFRvLnBlZGFu'@;
put 'dGljPXsuLi5Uby5ub3JtYWwsaHRtbDpmYSgiXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkp'@;
put 'IikucmVwbGFjZSgiY29tbWVudCIsVG8uX2NvbW1lbnQpLnJlcGxhY2UoL3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJy'@;
put 'fHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpAKVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8s'@;
put 'ZmVuY2VzOnRULGxoZWFkaW5nOi9eKC4rPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8scGFyYWdyYXBoOmZhKFRvLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsVG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgKiN7MSw2fSAqW15cbl0iKS5yZXBsYWNlKCJsaGVhZGluZyIs'@;
put 'VG8ubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCBYaT17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9A'@;
put 'XFtcXVxcXl9ge3x9fl0pLyxhdXRvbGluazovXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vLHVybDp0VCx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/'@;
put 'XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xb'@;
put 'KHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15f'@;
put 'Kl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8h'@;
put 'XCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15wdW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8r'@;
put 'KSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXigg'@;
put 'ezIsfXxcXClcbig/IVxzKiQpLyxkZWw6dFQsdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfTtmdW5jdGlvbiBQWWUo'@;
put 'Yyl7cmV0dXJuIGMucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0tL2csIlx1MjAxMyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10p'@;
put 'Ii9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgvXC57M30vZywiXHUyMDI2Iil9ZnVuY3Rpb24gV3NlKGMpe2xldCBhLGQsbD0iIjtjb25zdCBoPWMubGVuZ3RoO2ZvcihhPTA7YTxoO2ErKylkPWMuY2hhckNvZGVBdChhKSxNYXRoLnJhbmRvbSgpPi41JiYo'@;
put 'ZD0ieCIrZC50b1N0cmluZygxNikpLGwrPSImIyIrZCsiOyI7cmV0dXJuIGx9WGkuX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iLFhpLnB1bmN0dWF0aW9uPWZhKFhpLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4'@;
put 'KCksWGkuYmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nLFhpLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyxYaS5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxYaS5fY29tbWVudD1mYShUby5fY29tbWVudCkucmVwbGFjZSgiKD86LS1c'@;
put 'eDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxYaS5lbVN0cm9uZy5sRGVsaW09ZmEoWGkuZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuZW1TdHJvbmcuckRlbGltQXN0PWZhKFhpLmVtU3Ryb25nLnJEZWxpbUFz'@;
put 'dCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5lbVN0cm9uZy5yRGVsaW1VbmQ9ZmEoWGkuZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmFueVB1bmN0dWF0'@;
put 'aW9uPWZhKFhpLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLl9lc2NhcGVzPWZhKFhpLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLl9zY2hlbWU9'@;
put 'L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLFhpLl9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEt'@;
put 'WjAtOV0pPykrKD8hWy1fXSkvLFhpLmF1dG9saW5rPWZhKFhpLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLFhpLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixYaS5fZW1haWwpLmdldFJlZ2V4KCksWGkuX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJd'@;
put 'KiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/LyxYaS50YWc9ZmEoWGkudGFnKS5yZXBsYWNlKCJjb21tZW50IixYaS5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixYaS5fYXR0cmlidXRlKS5nZXRSZWdleCgpLFhpLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xd'@;
put 'XFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/LyxYaS5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxYaS5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxYaS5saW5rPWZh'@;
put 'KFhpLmxpbmspLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLnJlcGxhY2UoImhyZWYiLFhpLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsWGkuX3RpdGxlKS5nZXRSZWdleCgpLFhpLnJlZmxpbms9ZmEoWGkucmVmbGluaykucmVwbGFjZSgibGFiZWwiLFhpLl9sYWJlbCkucmVwbGFjZSgicmVm'@;
put 'IixUby5fbGFiZWwpLmdldFJlZ2V4KCksWGkubm9saW5rPWZhKFhpLm5vbGluaykucmVwbGFjZSgicmVmIixUby5fbGFiZWwpLmdldFJlZ2V4KCksWGkucmVmbGlua1NlYXJjaD1mYShYaS5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsWGkucmVmbGluaykucmVwbGFjZSgi'@;
put 'bm9saW5rIixYaS5ub2xpbmspLmdldFJlZ2V4KCksWGkubm9ybWFsPXsuLi5YaX0sWGkucGVkYW50aWM9ey4uLlhpLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/'@;
put 'IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8p'@;
put 'L2d9LGxpbms6ZmEoL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLFhpLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOmZhKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixYaS5fbGFiZWwpLmdldFJlZ2V4KCl9LFhpLmdm'@;
put 'bT17Li4uWGkubm9ybWFsLGVzY2FwZTpmYShYaS5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6'@;
put 'L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/'@;
put 'KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9c'@;
put 'L3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LFhpLmdmbS51cmw9ZmEoWGkuZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIixYaS5nZm0uX2V4dGVuZGVk'@;
put 'X2VtYWlsKS5nZXRSZWdleCgpLFhpLmJyZWFrcz17Li4uWGkuZ2ZtLGJyOmZhKFhpLmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDpmYShYaS5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJl'@;
put 'Z2V4KCl9O2NsYXNzIGtoe2NvbnN0cnVjdG9yKGwpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPWx8fGw0LHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcnx8bmV3IHJULHRoaXMudG9r'@;
put 'ZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07Y29uc3QgYT17'@;
put 'YmxvY2s6VG8ubm9ybWFsLGlubGluZTpYaS5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oYS5ibG9jaz1Uby5wZWRhbnRpYyxhLmlubGluZT1YaS5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKGEuYmxvY2s9VG8uZ2ZtLGEuaW5saW5lPXRoaXMub3B0aW9ucy5icmVha3M/WGku'@;
put 'YnJlYWtzOlhpLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9YX1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOlRvLGlubGluZTpYaX19c3RhdGljIGxleChsLGEpe3JldHVybiBuZXcga2goYSkubGV4KGwpfXN0YXRpYyBsZXhJbmxpbmUobCxhKXtyZXR1cm4gbmV3IGtoKGEpLmlu'@;
put 'bGluZVRva2VucyhsKX1sZXgobCl7bGV0IGE7Zm9yKGw9bC5yZXBsYWNlKC9cclxufFxyL2csIlxuIiksdGhpcy5ibG9ja1Rva2VucyhsLHRoaXMudG9rZW5zKTthPXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnMoYS5zcmMsYS50b2tlbnMpO3JldHVybiB0aGlz'@;
put 'LnRva2Vuc31ibG9ja1Rva2VucyhsLGE9W10pe2xldCBkLGgsZixfO2ZvcihsPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9sLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTpsLnJlcGxhY2UoL14oICopKFx0KykvZ20sKFQsVyxpZSk9PlcrIiAgICAiLnJlcGVhdChp'@;
put 'ZS5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShUPT4hIShkPVQuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3'@;
put 'Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlz'@;
put 'LnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGlu'@;
put 'ZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7'@;
put 'bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0'@;
put 'cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxl'@;
put 'bmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8'@;
put 'KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRo'@;
put 'aXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0'@;
put 'aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgVD0xLzA7Y29uc3QgVz1sLnNsaWNlKDEpO2xldCBpZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24ocGUpe2llPXBlLmNhbGwoe2xleGVyOnRo'@;
put 'aXN9LFcpLCJudW1iZXIiPT10eXBlb2YgaWUmJmllPj0wJiYoVD1NYXRoLm1pbihULGllKSl9KSxUPDEvMCYmVD49MCYmKGY9bC5zdWJzdHJpbmcoMCxUKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGQ9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGYpKSl7aD1hW2EubGVuZ3RoLTFdLF8mJiJw'@;
put 'YXJhZ3JhcGgiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCksXz1mLmxlbmd0aCE9PWwubGVu'@;
put 'Z3RoLGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRleHQobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIr'@;
put 'ZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgVD0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0'@;
put 'aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKFQpO2JyZWFrfXRocm93IG5ldyBFcnJvcihUKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLGF9aW5saW5lKGwsYT1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmwsdG9rZW5zOmF9KSxhfWlubGluZVRva2Vu'@;
put 'cyhsLGE9W10pe2xldCBkLGgsZixULFcsaWUsXz1sO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCBwZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYocGUubGVuZ3RoPjApZm9yKDtudWxsIT0oVD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5l'@;
put 'eGVjKF8pKTspcGUuaW5jbHVkZXMoVFswXS5zbGljZShUWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoXz1fLnNsaWNlKDAsVC5pbmRleCkrIlsiKyJhIi5yZXBlYXQoVFswXS5sZW5ndGgtMikrIl0iK18uc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFy'@;
put 'Y2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oVD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMoXykpOylfPV8uc2xpY2UoMCxULmluZGV4KSsiWyIrImEiLnJlcGVhdChUWzBdLmxlbmd0aC0yKSsiXSIrXy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxp'@;
put 'bmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oVD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhfKSk7KV89Xy5zbGljZSgwLFQuaW5kZXgpKyIrKyIrXy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRp'@;
put 'b24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKFd8fChpZT0iIiksVz0hMSwhKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZS5zb21lKHBlPT4hIShkPXBlLmNhbGwoe2xleGVyOnRoaXN9'@;
put 'LGwsYSkpJiYobD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKSwhMCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5lc2NhcGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50YWcobCkpe2w9bC5z'@;
put 'dWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09ZC50eXBlJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGluayhsKSl7bD1sLnN1YnN0cmlu'@;
put 'ZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnJlZmxpbmsobCx0aGlzLnRva2Vucy5saW5rcykpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09ZC50eXBlJiYidGV4dCI9PT1oLnR5cGU/'@;
put 'KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcobCxfLGllKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGwp'@;
put 'KXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYnIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWwobCkpe2w9bC5zdWJzdHJpbmco'@;
put 'ZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5hdXRvbGluayhsLFdzZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYoZD10aGlzLnRva2VuaXplci51cmwobCxX'@;
put 'c2UpKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgcGU9MS8wO2NvbnN0IHdlPWwuc2xpY2UoMSk7bGV0IEVlO3RoaXMu'@;
put 'b3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rpb24oWmUpe0VlPVplLmNhbGwoe2xleGVyOnRoaXN9LHdlKSwibnVtYmVyIj09dHlwZW9mIEVlJiZFZT49MCYmKHBlPU1hdGgubWluKHBlLEVlKSl9KSxwZTwxLzAmJnBlPj0wJiYoZj1sLnN1YnN0cmluZygwLHBl'@;
put 'KzEpKX1pZihkPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoZixQWWUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksIl8iIT09ZC5yYXcuc2xpY2UoLTEpJiYoaWU9ZC5yYXcuc2xpY2UoLTEpKSxXPSEwLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1k'@;
put 'LnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IHBlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IocGUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihwZSl9'@;
put 'fXJldHVybiBhfX1jbGFzcyBpVHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDR9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxs'@;
put 'IT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeCtTdShoKSsnIj4nKyhkP2w6U3UobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/'@;
put 'bDpTdShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIk'@;
put 'e3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1'@;
put 'cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJj'@;
put 'aGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsi'@;
put 'PC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25n'@;
put 'KGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+'@;
put 'JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShsPVVzZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwv'@;
put 'YT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1Vc2UodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlz'@;
put 'Lm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFzcyB2VXtzdHJvbmcobCl7cmV0dXJuIGx9ZW0obCl7cmV0dXJuIGx9Y29kZXNwYW4obCl7cmV0dXJuIGx9ZGVsKGwpe3JldHVybiBsfWh0bWwobCl7cmV0dXJuIGx9dGV4dChsKXtyZXR1cm4gbH1saW5rKGws'@;
put 'YSxkKXtyZXR1cm4iIitkfWltYWdlKGwsYSxkKXtyZXR1cm4iIitkfWJyKCl7cmV0dXJuIiJ9fWNsYXNzIF9Ve2NvbnN0cnVjdG9yKCl7dGhpcy5zZWVuPXt9fXNlcmlhbGl6ZShsKXtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5y'@;
put 'ZXBsYWNlKC9bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSorLC4vOjs8PT4/QFtcXV5ge3x9fl0vZywiIikucmVwbGFjZSgvXHMvZywiLSIpfWdldE5leHRTYWZlU2x1ZyhsLGEpe2xldCBkPWwsaD0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl7aD10aGlz'@;
put 'LnNlZW5bbF07ZG97aCsrLGQ9bCsiLSIraH13aGlsZSh0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpfXJldHVybiBhfHwodGhpcy5zZWVuW2xdPWgsdGhpcy5zZWVuW2RdPTApLGR9c2x1ZyhsLGE9e30pe2NvbnN0IGQ9dGhpcy5zZXJpYWxpemUobCk7cmV0dXJuIHRoaXMuZ2V0TmV4dFNh'@;
put 'ZmVTbHVnKGQsYS5kcnlydW4pfX1jbGFzcyBBaHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDQsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IGlULHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIu'@;
put 'b3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IHZVLHRoaXMuc2x1Z2dlcj1uZXcgX1V9c3RhdGljIHBhcnNlKGwsYSl7cmV0dXJuIG5ldyBBaChhKS5wYXJzZShsKX1zdGF0aWMgcGFyc2VJbmxpbmUobCxhKXtyZXR1cm4gbmV3IEFoKGEpLnBhcnNlSW5saW5lKGwp'@;
put 'fXBhcnNlKGwsYT0hMCl7bGV0IGgsZixfLFQsVyxpZSxwZSx3ZSxFZSxaZSxpdCxldCx5dCxFdCxTdCxKdCxubix2bixObixkPSIiO2NvbnN0IGNyPWwubGVuZ3RoO2ZvcihoPTA7aDxjcjtoKyspaWYoWmU9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVu'@;
put 'c2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbWmUudHlwZV0mJihObj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbWmUudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LFplKSwhMSE9PU5ufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIs'@;
put 'ImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhaZS50eXBlKSkpZCs9Tm58fCIiO2Vsc2Ugc3dpdGNoKFplLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtj'@;
put 'b250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKFplLnRva2VucyksWmUuZGVwdGgsenNlKHRoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNv'@;
put 'ZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZShaZS50ZXh0LFplLmxhbmcsWmUuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKHdlPSIiLHBlPSIiLFQ9WmUuaGVhZGVyLmxlbmd0aCxmPTA7ZjxUO2YrKylwZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGlu'@;
put 'ZShaZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOlplLmFsaWduW2ZdfSk7Zm9yKHdlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHBlKSxFZT0iIixUPVplLnJvd3MubGVuZ3RoLGY9MDtmPFQ7ZisrKXtmb3IoaWU9WmUucm93c1tmXSxwZT0iIixXPWllLmxlbmd0aCxfPTA7'@;
put 'XzxXO18rKylwZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShpZVtfXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246WmUuYWxpZ25bX119KTtFZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhwZSl9ZCs9dGhpcy5yZW5kZXJlci50YWJsZSh3ZSxFZSk7Y29udGlu'@;
put 'dWU7Y2FzZSJibG9ja3F1b3RlIjpFZT10aGlzLnBhcnNlKFplLnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKEVlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihpdD1aZS5vcmRlcmVkLGV0PVplLnN0YXJ0LHl0PVplLmxvb3NlLFQ9WmUuaXRlbXMubGVuZ3RoLEVlPSIiLGY9'@;
put 'MDtmPFQ7ZisrKVN0PVplLml0ZW1zW2ZdLEp0PVN0LmNoZWNrZWQsbm49U3QudGFzayxFdD0iIixTdC50YXNrJiYodm49dGhpcy5yZW5kZXJlci5jaGVja2JveChKdCkseXQ/U3QudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PVN0LnRva2Vuc1swXS50eXBlPyhTdC50b2tlbnNbMF0u'@;
put 'dGV4dD12bisiICIrU3QudG9rZW5zWzBdLnRleHQsU3QudG9rZW5zWzBdLnRva2VucyYmU3QudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09U3QudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoU3QudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PXZuKyIgIitTdC50b2tlbnNb'@;
put 'MF0udG9rZW5zWzBdLnRleHQpKTpTdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDp2bn0pOkV0Kz12biksRXQrPXRoaXMucGFyc2UoU3QudG9rZW5zLHl0KSxFZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShFdCxubixKdCk7ZCs9dGhpcy5yZW5kZXJlci5saXN0KEVlLGl0LGV0'@;
put 'KTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbChaZS50ZXh0LFplLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZv'@;
put 'cihFZT1aZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMpOlplLnRleHQ7aCsxPGNyJiYidGV4dCI9PT1sW2grMV0udHlwZTspWmU9bFsrK2hdLEVlKz0iXG4iKyhaZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMpOlplLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJl'@;
put 'ci5wYXJhZ3JhcGgoRWUpOkVlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IERyPSdUb2tlbiB3aXRoICInK1plLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKERyKTt0aHJvdyBuZXcgRXJyb3IoRHIp'@;
put 'fX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjtsZXQgaCxmLF8sZD0iIjtjb25zdCBUPWwubGVuZ3RoO2ZvcihoPTA7aDxUO2grKylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYm'@;
put 'dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJihfPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxmKSwhMSE9PV98fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIs'@;
put 'ImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkpZCs9X3x8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2Ui'@;
put 'bGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRv'@;
put 'a2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNl'@;
put 'SW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBXPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoVyk7dGhyb3cgbmV3IEVycm9yKFcpfX1yZXR1'@;
put 'cm4gZH19Y2xhc3MgY3d7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0fXByZXByb2Nlc3MobCl7cmV0dXJuIGx9cG9zdHByb2Nlc3MobCl7cmV0dXJuIGx9fUYwKGN3LCJwYXNzVGhyb3VnaEhvb2tzIixuZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIl0pKTt2YXIg'@;
put 'YlU9bmV3IFdlYWtTZXQsR3NlPW5ldyBXZWFrU2V0O2Z1bmN0aW9uICRzZShjLGwpe3JldHVybihhLGQsaCk9PnsiZnVuY3Rpb24iPT10eXBlb2YgZCYmKGg9ZCxkPW51bGwpO2NvbnN0IGY9ey4uLmR9O2Q9ey4uLnRoaXMuZGVmYXVsdHMsLi4uZn07Y29uc3QgXz1nVSh0aGlzLEdzZSxIWWUp'@;
put 'LmNhbGwodGhpcyxkLnNpbGVudCxkLmFzeW5jLGgpO2lmKHR5cGVvZiBhPiJ1Inx8bnVsbD09PWEpcmV0dXJuIF8obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gXyhuZXcgRXJy'@;
put 'b3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gUlllKGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2Fs'@;
put 'bGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxj'@;
put 'LnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFk'@;
put 'IG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVy'@;
put 'cyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZj'@;
put 'b25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3Rh'@;
put 'bGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2'@;
put 'ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQo'@;
put 'KTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNt'@;
put 'YXJ0eXBhbnRzLiIpLGMueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0'@;
put 'dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUg'@;
put 'ZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5'@;
put 'IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShkLGgpLGQuaG9va3MmJihkLmhvb2tzLm9wdGlvbnM9ZCksaCl7Y29uc3QgVD1kLmhpZ2hsaWdodDtsZXQgVzt0cnl7ZC5ob29rcyYmKGE9ZC5ob29rcy5wcmVwcm9jZXNzKGEpKSxXPWMoYSxkKX1jYXRjaCh3ZSl7cmV0dXJuIF8o'@;
put 'd2UpfWNvbnN0IGllPXdlPT57bGV0IEVlO2lmKCF3ZSl0cnl7ZC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoVyxkLndhbGtUb2tlbnMpLEVlPWwoVyxkKSxkLmhvb2tzJiYoRWU9ZC5ob29rcy5wb3N0cHJvY2VzcyhFZSkpfWNhdGNoKFplKXt3ZT1aZX1yZXR1cm4gZC5oaWdobGlnaHQ9'@;
put 'VCx3ZT9fKHdlKTpoKG51bGwsRWUpfTtpZighVHx8VC5sZW5ndGg8M3x8KGRlbGV0ZSBkLmhpZ2hsaWdodCwhVy5sZW5ndGgpKXJldHVybiBpZSgpO2xldCBwZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoVyx3ZT0+eyJjb2RlIj09PXdlLnR5cGUmJihwZSsrLHNldFRpbWVvdXQoKCk9PntU'@;
put 'KHdlLnRleHQsd2UubGFuZywoRWUsWmUpPT57aWYoRWUpcmV0dXJuIGllKEVlKTtudWxsIT1aZSYmWmUhPT13ZS50ZXh0JiYod2UudGV4dD1aZSx3ZS5lc2NhcGVkPSEwKSxwZS0tLDA9PT1wZSYmaWUoKX0pfSwwKSl9KSx2b2lkKDA9PT1wZSYmaWUoKSl9aWYoZC5hc3luYylyZXR1cm4gUHJv'@;
put 'bWlzZS5yZXNvbHZlKGQuaG9va3M/ZC5ob29rcy5wcmVwcm9jZXNzKGEpOmEpLnRoZW4oVD0+YyhULGQpKS50aGVuKFQ9PmQud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoVCxkLndhbGtUb2tlbnMpKS50aGVuKCgpPT5UKTpUKS50aGVuKFQ9PmwoVCxkKSkudGhlbihU'@;
put 'PT5kLmhvb2tzP2QuaG9va3MucG9zdHByb2Nlc3MoVCk6VCkuY2F0Y2goXyk7dHJ5e2QuaG9va3MmJihhPWQuaG9va3MucHJlcHJvY2VzcyhhKSk7Y29uc3QgVD1jKGEsZCk7ZC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoVCxkLndhbGtUb2tlbnMpO2xldCBXPWwoVCxkKTtyZXR1cm4g'@;
put 'ZC5ob29rcyYmKFc9ZC5ob29rcy5wb3N0cHJvY2VzcyhXKSksV31jYXRjaChUKXtyZXR1cm4gXyhUKX19fWZ1bmN0aW9uIEhZZShjLGwsYSl7cmV0dXJuIGQ9PntpZihkLm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2Vk'@;
put 'LiIsYyl7Y29uc3QgaD0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitTdShkLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiBsP1Byb21pc2UucmVzb2x2ZShoKTphP3ZvaWQgYShudWxsLGgpOmh9aWYobClyZXR1cm4gUHJvbWlzZS5yZWplY3QoZCk7aWYoIWEpdGhyb3cg'@;
put 'ZDthKGQpfX1jb25zdCBaZz1uZXcgY2xhc3MgRllle2NvbnN0cnVjdG9yKC4uLmwpe0hzZSh0aGlzLEdzZSksSHNlKHRoaXMsYlUpLEYwKHRoaXMsImRlZmF1bHRzIix7YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxo'@;
put 'ZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVs'@;
put 'bCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9KSxGMCh0aGlzLCJvcHRpb25zIix0aGlzLnNldE9wdGlvbnMpLEYwKHRoaXMsInBhcnNlIixnVSh0aGlzLGJVLCRzZSkuY2FsbCh0aGlzLGtoLmxleCxBaC5wYXJzZSkpLEYwKHRoaXMsInBhcnNlSW5saW5lIixnVSh0aGlzLGJVLCRzZSkuY2Fs'@;
put 'bCh0aGlzLGtoLmxleElubGluZSxBaC5wYXJzZUlubGluZSkpLEYwKHRoaXMsIlBhcnNlciIsQWgpLEYwKHRoaXMsInBhcnNlciIsQWgucGFyc2UpLEYwKHRoaXMsIlJlbmRlcmVyIixpVCksRjAodGhpcywiVGV4dFJlbmRlcmVyIix2VSksRjAodGhpcywiTGV4ZXIiLGtoKSxGMCh0aGlzLCJs'@;
put 'ZXhlciIsa2gubGV4KSxGMCh0aGlzLCJUb2tlbml6ZXIiLHJUKSxGMCh0aGlzLCJTbHVnZ2VyIixfVSksRjAodGhpcywiSG9va3MiLGN3KSx0aGlzLnVzZSguLi5sKX13YWxrVG9rZW5zKGwsYSl7bGV0IGQ9W107Zm9yKGNvbnN0IGggb2YgbClzd2l0Y2goZD1kLmNvbmNhdChhLmNhbGwodGhp'@;
put 'cyxoKSksaC50eXBlKXtjYXNlInRhYmxlIjpmb3IoY29uc3QgZiBvZiBoLmhlYWRlcilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhmLnRva2VucyxhKSk7Zm9yKGNvbnN0IGYgb2YgaC5yb3dzKWZvcihjb25zdCBfIG9mIGYpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoXy50b2tlbnMs'@;
put 'YSkpO2JyZWFrO2Nhc2UibGlzdCI6ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC5pdGVtcyxhKSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2VucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNo'@;
put 'aWxkVG9rZW5zW2gudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0uZm9yRWFjaChmPT57ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaFtmXSxhKSl9KTpoLnRva2VucyYmKGQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGgudG9rZW5zLGEpKSl9'@;
put 'cmV0dXJuIGR9dXNlKC4uLmwpe2NvbnN0IGE9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gbC5mb3JFYWNoKGQ9Pntjb25zdCBoPXsuLi5kfTtpZihoLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fGguYXN5bmN8fCExLGQu'@;
put 'ZXh0ZW5zaW9ucyYmKGQuZXh0ZW5zaW9ucy5mb3JFYWNoKGY9PntpZighZi5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZihmLnJlbmRlcmVyKXtjb25zdCBfPWEucmVuZGVyZXJzW2YubmFtZV07YS5yZW5kZXJlcnNbZi5uYW1lXT1fP2Z1bmN0aW9u'@;
put 'KC4uLlQpe2xldCBXPWYucmVuZGVyZXIuYXBwbHkodGhpcyxUKTtyZXR1cm4hMT09PVcmJihXPV8uYXBwbHkodGhpcyxUKSksV306Zi5yZW5kZXJlcn1pZihmLnRva2VuaXplcil7aWYoIWYubGV2ZWx8fCJibG9jayIhPT1mLmxldmVsJiYiaW5saW5lIiE9PWYubGV2ZWwpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7YVtmLmxldmVsXT9hW2YubGV2ZWxdLnVuc2hpZnQoZi50b2tlbml6ZXIpOmFbZi5sZXZlbF09W2YudG9rZW5pemVyXSxmLnN0YXJ0JiYoImJsb2NrIj09PWYubGV2ZWw/YS5zdGFydEJsb2NrP2Euc3Rh'@;
put 'cnRCbG9jay5wdXNoKGYuc3RhcnQpOmEuc3RhcnRCbG9jaz1bZi5zdGFydF06ImlubGluZSI9PT1mLmxldmVsJiYoYS5zdGFydElubGluZT9hLnN0YXJ0SW5saW5lLnB1c2goZi5zdGFydCk6YS5zdGFydElubGluZT1bZi5zdGFydF0pKX1mLmNoaWxkVG9rZW5zJiYoYS5jaGlsZFRva2Vuc1tm'@;
put 'Lm5hbWVdPWYuY2hpbGRUb2tlbnMpfSksaC5leHRlbnNpb25zPWEpLGQucmVuZGVyZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IGlUKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCBfIGluIGQucmVuZGVyZXIpe2NvbnN0IFQ9ZltfXTtmW19dPSguLi5XKT0+e2xldCBp'@;
put 'ZT1kLnJlbmRlcmVyW19dLmFwcGx5KGYsVyk7cmV0dXJuITE9PT1pZSYmKGllPVQuYXBwbHkoZixXKSksaWV9fWgucmVuZGVyZXI9Zn1pZihkLnRva2VuaXplcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IHJUKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCBfIGluIGQu'@;
put 'dG9rZW5pemVyKXtjb25zdCBUPWZbX107ZltfXT0oLi4uVyk9PntsZXQgaWU9ZC50b2tlbml6ZXJbX10uYXBwbHkoZixXKTtyZXR1cm4hMT09PWllJiYoaWU9VC5hcHBseShmLFcpKSxpZX19aC50b2tlbml6ZXI9Zn1pZihkLmhvb2tzKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5l'@;
put 'dyBjdztmb3IoY29uc3QgXyBpbiBkLmhvb2tzKXtjb25zdCBUPWZbX107ZltfXT1jdy5wYXNzVGhyb3VnaEhvb2tzLmhhcyhfKT9XPT57aWYodGhpcy5kZWZhdWx0cy5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGQuaG9va3NbX10uY2FsbChmLFcpKS50aGVuKHBlPT5ULmNhbGwoZixw'@;
put 'ZSkpO2NvbnN0IGllPWQuaG9va3NbX10uY2FsbChmLFcpO3JldHVybiBULmNhbGwoZixpZSl9OiguLi5XKT0+e2xldCBpZT1kLmhvb2tzW19dLmFwcGx5KGYsVyk7cmV0dXJuITE9PT1pZSYmKGllPVQuYXBwbHkoZixXKSksaWV9fWguaG9va3M9Zn1pZihkLndhbGtUb2tlbnMpe2NvbnN0IGY9'@;
put 'dGhpcy5kZWZhdWx0cy53YWxrVG9rZW5zO2gud2Fsa1Rva2Vucz1mdW5jdGlvbihfKXtsZXQgVD1bXTtyZXR1cm4gVC5wdXNoKGQud2Fsa1Rva2Vucy5jYWxsKHRoaXMsXykpLGYmJihUPVQuY29uY2F0KGYuY2FsbCh0aGlzLF8pKSksVH19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0'@;
put 'cywuLi5ofX0pLHRoaXN9c2V0T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5sfSx0aGlzfX0obDQpO2Z1bmN0aW9uIHBhKGMsbCxhKXtyZXR1cm4gWmcucGFyc2UoYyxsLGEpfXBhLm9wdGlvbnM9cGEuc2V0T3B0aW9ucz1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gWmcuc2V0T3B0aW9ucyhjKSxOc2UocGEuZGVmYXVsdHM9WmcuZGVmYXVsdHMpLHBhfSxwYS5nZXREZWZhdWx0cz1mdW5jdGlvbiBtVSgpe3JldHVybnthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRl'@;
put 'clByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdh'@;
put 'bGtUb2tlbnM6bnVsbCx4aHRtbDohMX19LHBhLmRlZmF1bHRzPWw0LHBhLnVzZT1mdW5jdGlvbiguLi5jKXtyZXR1cm4gWmcudXNlKC4uLmMpLE5zZShwYS5kZWZhdWx0cz1aZy5kZWZhdWx0cykscGF9LHBhLndhbGtUb2tlbnM9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gWmcud2Fsa1Rva2Vucyhj'@;
put 'LGwpfSxwYS5wYXJzZUlubGluZT1aZy5wYXJzZUlubGluZSxwYS5QYXJzZXI9QWgscGEucGFyc2VyPUFoLnBhcnNlLHBhLlJlbmRlcmVyPWlULHBhLlRleHRSZW5kZXJlcj12VSxwYS5MZXhlcj1raCxwYS5sZXhlcj1raC5sZXgscGEuVG9rZW5pemVyPXJULHBhLlNsdWdnZXI9X1UscGEuSG9v'@;
put 'a3M9Y3cscGEucGFyc2U9cGE7Y29uc3QgVlllPVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gQlllKGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0IGpZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuYWdyZWVDaGVja2VkPSEx'@;
put 'LHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBM'@;
put 'dGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVLIExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBD'@;
put 'b21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQg'@;
put 'ZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5v'@;
put 'dC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNv'@;
put 'ZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6'@;
put 'Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBp'@;
put 'bmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9mIHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2'@;
put 'ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElO'@;
put 'IE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFO'@;
put 'WSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9cGEuc2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmll'@;
put 'd0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdy'@;
put 'ZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9sVGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5yZXR1cm4mJmQucmV0dXJuWzBdJiYiU1VDQ0VTUyI9PT1k'@;
put 'LnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+ZCkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Ny'@;
put 'b2xsKGEpe2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7ZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNldEhlaWdodD49ZC5zY3JvbGxIZWlnaHQtMjApKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpKHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFZZZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLm1hcmtkb3duQ2FyZD1oLmZpcnN0KX19LGRlY2xzOjEzLHZh'@;
put 'cnM6Nixjb25zdHM6W1sxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsImlubmVySFRNTCIsInNjcm9sbCJdLFsibWFya2Rvd25DYXJkIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYWNjZXB0LWNoZWNrYm94Il0sWyJj'@;
put 'bHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSIsImNoYW5nZSJdLFsiY2xySW5saW5lIiwic21hbGwiLDQsIm5nSWYiXSxbImNscklubGluZSIsInNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo'@;
put 'bWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLE5lKDIsIiBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAiKSxtZSgzLCJwIiksTmUoNCwiIFdlbGNvbWUgdG8gRGF0YSBDb250cm9sbGVyIGZvciBTQVMhIFBsZWFzZSByZXZpZXcgYW5kIGFjY2VwdCBhZ3JlZW1lbnQgYmVsb3cgaW4gb3JkZXIg'@;
put 'dG8gcHJvY2VlZC4gIikseWUoKSgpLG1lKDUsImRpdiIsMiwzKSx4dCgic2Nyb2xsIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNhcmRCbG9ja1Njcm9sbChmKX0pLHllKCksbWUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLHh0KCJuZ01vZGVs'@;
put 'Q2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5hZ3JlZUNoZWNrZWQ9Zn0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudGVybXNBZ3JlZUNoYW5nZSgpfSkseWUoKSxtZSgxMCwibGFiZWwiKSxOZSgxMSwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiBhYm92'@;
put 'ZS4iKSx5ZSgpKCksSmUoMTIsQlllLDEsMCwiY2xyLXNwaW5uZXIiLDcpLHllKCkoKSksMiZhJiYoQ2UoNSksUmUoImlubmVySFRNTCIsZC5ldWxhX21hcmtkb3duLHEyKSxDZSgzKSxkcigiZGlzYWJsZWQiLGQuYWdyZWVCb3hMb2NrZWQpLENlKDEpLFJlKCJuZ01vZGVsIixkLmFncmVlQ2hl'@;
put 'Y2tlZCkoImRpc2FibGVkIixkLmFncmVlQm94TG9ja2VkKSxDZSgzKSxSZSgibmdJZiIsZC5hZ3JlZUJveExvY2tlZCYmZC5hZ3JlZUNsaWNrZWQpKX0sZGVwZW5kZW5jaWVzOltaaSxTMCxCcyxPcyxVcyxEMCxUMCx1Ml0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtoZWlnaHQ6MTAwJTti'@;
put 'YWNrZ3JvdW5kOiNmNWY2ZmZ9LmNsci1jaGVja2JveC13cmFwcGVyLmRpc2FibGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi41fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbi10b3A6MH0u'@;
put 'Y2FyZFtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17ZmxleDoxO292ZXJmbG93OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZjRmNGY0fS5hY2NlcHQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAxNXB4fSJdfSksY30p'@;
put 'KCk7ZnVuY3Rpb24gelllKGMsbCl7MSZjJiYobWUoMCwicCIsMjcpLE5lKDEsIiBMaWNlbmNlIGtleSBpcyBpbnZhbGlkLiBXZSBjYW4ndCBwcm92aWRlIHlvdSBtb3JlIGRldGFpbHMgYXQgdGhlIG1vbWVudCAiKSx5ZSgpKX1mdW5jdGlvbiBVWWUoYyxsKXtpZigxJmMmJnF0KDAsInAiLDI4'@;
put 'KSwyJmMpe2NvbnN0IGE9VmUoMyk7UmUoImlubmVySFRNTCIsYS5saWNlbnNlRXJyb3JzW2Eua2V5RXJyb3JdLHEyKX19ZnVuY3Rpb24gWlllKGMsbCl7aWYoMSZjJiYobWUoMCwicCIpKDEsInN0cm9uZyIpLE5lKDIsIkRldGFpbHM6IikseWUoKSxOZSgzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoMyk7Q2UoMykscHIoIiAiLGEuZXJyb3JEZXRhaWxzLCIiKX19ZnVuY3Rpb24gWVllKGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSx6WWUsMiwwLCJwIiwyNSksSmUoMixVWWUsMSwxLCJwIiwyNiksSmUoMyxaWWUsNCwxLCJwIiwxKSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSks'@;
put 'UmUoIm5nSWYiLCFhLmtleUVycm9yKSxDZSgxKSxSZSgibmdJZiIsYS5rZXlFcnJvciksQ2UoMSksUmUoIm5nSWYiLGEuZXJyb3JEZXRhaWxzKX19ZnVuY3Rpb24gV1llKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwicCIsMjcpLE5lKDIsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMg'@;
put 'cmVhY2hlZCB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2VuY2UuIFBsZWFzZSBjb250YWN0ICIpLHF0KDMsImNvbnRhY3QtbGluayIsMjkpLE5lKDQsIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlcyBmb3IgdGhpcyBwcm9kdWN0LiAiKSx5'@;
put 'ZSgpLGpyKCkpfWZ1bmN0aW9uIEdZZShjLGwpezEmYyYmKFZyKDApLG1lKDEsInAiLDI3KSxOZSgyLCIgVXBkYXRlIHRoZSBsaWNlbnNlIGtleSBieSB1cGxvYWRpbmcgdGhlIGxpY2VuY2UgZmlsZSBvciBieSBwYXN0aW5nIGEgbGljZW5zZSBrZXkgYW5kIGFjdGl2YXRpb24ga2V5IGluIHRo'@;
put 'ZSBpbnB1dHMgYmVsb3cuICIpLHllKCksanIoKSl9ZnVuY3Rpb24gJFllKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKTtkcigibWlzc2tleSIsaC5taXNzbWF0Y2hlZEtleSYmaC5taXNzbWF0'@;
put 'Y2hlZEtleT09PWEpLENlKDEpLHpjKCIgIixhLCIiLGQ9PT0obnVsbD09aC5zeXNzaXRlLnZhbHVlP251bGw6aC5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rpb24gcVllKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMzApKDEsInN0cm9uZyIpLE5lKDIsIkFsbG93'@;
put 'ZWQgdXNlcnM6IikseWUoKSxOZSgzKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMykscHIoIiAiLGEubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5jdGlvbiBLWWUoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiwzMSl9ZnVuY3Rpb24gWFllKGMsbCl7MSZj'@;
put 'JiYobWUoMCwiZGl2IiksTmUoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLHllKCkpfWZ1bmN0aW9uIEpZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLE5lKDEsIiBTZWxlY3RlZCBmaWxlOiAiKSxtZSgyLCJzdHJvbmciKSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1W'@;
put 'ZSgzKTtDZSgzKSxvcihhLmxpY2VuY2VmaWxlLmZpbGVuYW1lKX19ZnVuY3Rpb24gUVllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwic3Ryb25nIiksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMiksb3IoYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gZVdl'@;
put 'KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxYWWUsMiwwLCJkaXYiLDEpLEplKDIsSlllLDQsMSwiZGl2IiwxKSxKZSgzLFFZZSwzLDEsImRpdiIsMSksanIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwiIj09PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLENlKDEpLFJl'@;
put 'KCJuZ0lmIiwiIiE9PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLENlKDEpLFJlKCJuZ0lmIixhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiB0V2UoYyxsKXsxJmMmJihtZSgwLCJidXR0b24iLDMyKSxOZSgxLCIgQ29udGludWUgd2l0aCBmcmVlIHRpZXIgIikseWUoKSl9ZnVuY3Rpb24g'@;
put 'bldlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpLE5lKDIsIkxpY2VuY2luZyIpLHllKCksbWUoMywiZGl2Iiw0KSxKZSg0LFlZZSw0LDMsIm5nLWNvbnRhaW5lciIsNSksSmUoNSxXWWUsNSwwLCJuZy1jb250YWluZXIiLDUpLEplKDYsR1llLDMs'@;
put 'MCwibmctY29udGFpbmVyIiw1KSxtZSg3LCJwIikoOCwic3Ryb25nIiksTmUoOSwiU1lTU0lURToiKSx5ZSgpLEplKDEwLCRZZSwyLDQsInNwYW4iLDYpLG1lKDExLCJhIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD0kaSgxMyksZj0kaSgxNSksXz1WZSgpO3JldHVy'@;
put 'biBqdChfLmNvcHlTeXNzaXRlKGgsZixfLnN5c3NpdGUudmFsdWV8fFtdKSl9KSxxdCgxMiwiY2xyLWljb24iLDgsOSksbWUoMTQsInNwYW4iLDEwLDExKSxOZSgxNiwiQ29weSB0byBjbGlwYm9hcmQiKSx5ZSgpKCkoKSxKZSgxNyxxWWUsNCwxLCJwIiwxMiksbWUoMTgsImNsci10YWJzIiko'@;
put 'MTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMyksTmUoMjEsIlVwbG9hZCBsaWNlbmNlIikseWUoKSxtZSgyMiwiY2xyLXRhYi1jb250ZW50IikoMjMsImlucHV0IiwxNCwxNSkseHQoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25GaWxlQ2FwdHVyZShoKSl9'@;
put 'KSx5ZSgpLG1lKDI1LCJkaXYiLDE2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KCRpKDI0KS5jbGljaygpKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25GaWxlQ2FwdHVyZShoLCEwKSl9KSxKZSgyNixLWWUsMSwwLCJjbHIt'@;
put 'c3Bpbm5lciIsMTcpLEplKDI3LGVXZSw0LDMsIm5nLWNvbnRhaW5lciIsMSkseWUoKSgpKCksbWUoMjgsImNsci10YWIiKSgyOSwiYnV0dG9uIiwxMyksTmUoMzAsIlBhc3RlIGxpY2VuY2UiKSx5ZSgpLG1lKDMxLCJjbHItdGFiLWNvbnRlbnQiKSgzMiwiZm9ybSIsMTgpKDMzLCJwIiksTmUo'@;
put 'MzQsIkxpY2VuY2Uga2V5OiIpLHllKCksbWUoMzUsImRpdiIsMTkpKDM2LCJ0ZXh0YXJlYSIsMjApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWNlbmNlS2V5VmFsdWU9aCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQo'@;
put 'YSksanQoVmUoKS50cmltS2V5cygpKX0pLHllKCkoKSgpLG1lKDM3LCJmb3JtIiwyMSkoMzgsInAiKSxOZSgzOSwiQWN0aXZhdGlvbiBrZXk6IikseWUoKSxtZSg0MCwiZGl2IiwxOSkoNDEsInRleHRhcmVhIiwyMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChh'@;
put 'KSxqdChWZSgpLmFjdGl2YXRpb25LZXlWYWx1ZT1oKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnRyaW1LZXlzKCkpfSkseWUoKSgpKCkoKSgpKCksbWUoNDIsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQo'@;
put 'VmUoKS5hcHBseUtleXMoKSl9KSxOZSg0MywiIEFwcGx5IGxpY2VuY2Uga2V5cyAiKSx5ZSgpLEplKDQ0LHRXZSwyLDAsImJ1dHRvbiIsMjQpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxSZSgibmdTd2l0Y2giLGEuYWN0aW9uKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwi'@;
put 'a2V5IiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsInVwZGF0ZSIpLENlKDQpLFJlKCJuZ0Zvck9mIixhLnN5c3NpdGUudmFsdWUpLENlKDcpLFJlKCJuZ0lmIixhLmxpY2Vuc2VLZXlEYXRhJiZhLnVzZXJDb3VudExpbWl0YXRpb24p'@;
put 'LENlKDkpLFJlKCJuZ0lmIixhLmxpY2VuY2VGaWxlTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFhLmxpY2VuY2VGaWxlTG9hZGluZyksQ2UoOSksUmUoIm5nTW9kZWwiLGEubGljZW5jZUtleVZhbHVlKSxDZSg1KSxSZSgibmdNb2RlbCIsYS5hY3RpdmF0aW9uS2V5VmFsdWUpLENlKDEpLFJl'@;
put 'KCJjbHJMb2FkaW5nIixhLmFwcGx5aW5nS2V5cykoImRpc2FibGVkIixhLmRpc2FibGVBcHBseUJ1dHRvbiksQ2UoMiksUmUoIm5nSWYiLGEuaXNBcHBGcmVlVGllci52YWx1ZSl9fWZ1bmN0aW9uIHJXZShjLGwpezEmYyYmcXQoMCwiYXBwLXRlcm1zIil9dmFyIHFzZT1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gYy5rZXk9ImtleSIsYy5yZWdpc3Rlcj0icmVnaXN0ZXIiLGMubGltaXQ9ImxpbWl0IixjLnVwZGF0ZT0idXBkYXRlIixjfShxc2V8fHt9KTtjb25zdCBpV2U9W3twYXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnJv'@;
put 'dXRlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMuYXBwU2VydmljZT1mLHRoaXMuYWN0aW9uPW51bGwsdGhpcy5saWNlbnNlRXJyb3JzPXttaXNzaW5nOidMaWNlbmNlIGtleSBpcyBtaXNzaW5nIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9y'@;
put 'LWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsZXhwaXJlZDonTGljZW5jZSBrZXkgaXMgZXhwaXJlZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNz'@;
put 'PSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGludmFsaWQ6J0xpY2VuY2Uga2V5IGlzIGludmFsaWQgLSBwbGVhc2UgY29udGFjdCA8'@;
put 'YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxtaXNzbWF0Y2g6J1lvdXIgU1lTU0lURSAoYmVsb3cpIGlzIG5vdCBmb3Vu'@;
put 'ZCBpbiB0aGUgbGljZW5jZSBrZXkgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJ30sdGhp'@;
put 'cy5saWNlbmNlS2V5VmFsdWU9IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9IiIsdGhpcy5hcHBseWluZ0tleXM9ITEsdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMuY3VycmVudExpY2VuY2VLZXk9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlS2V5LHRoaXMu'@;
put 'Y3VycmVudEFjdGl2YXRpb25LZXk9dGhpcy5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uS2V5LHRoaXMuaXNBcHBGcmVlVGllcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPXRoaXMubGljZW5jZVNlcnZpY2UudXNlckNvdW50TGlt'@;
put 'aXRhdGlvbix0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5pbnB1dFR5cGU9ImZpbGUiLHRoaXMubGljZW5jZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZWZpbGU9e2ZpbGVuYW1lOiIifX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMuY3VycmVudExpY2VuY2VL'@;
put 'ZXl8fCIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl8fCIiLHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmtleUVycm9yPWEuZXJyb3IsdGhpcy5taXNzbWF0Y2hlZEtleT1hLm1pc3NtYXRjaElkLGEuZGV0YWlscyYm'@;
put 'KHRoaXMuZXJyb3JEZXRhaWxzPWF0b2IoYS5kZXRhaWxzKSl9KSx0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoYT0+e2xldCBkPWEuYWN0aW9uO2QmJk9iamVjdC52YWx1ZXMocXNlKS5pbmNsdWRlcyhkKSYmKHRoaXMuYWN0aW9uPWQpfSksdGhpcy5saWNlbnNlS2V5RGF0YT10aGlzLmxp'@;
put 'Y2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCl9dHJpbUtleXMoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmxpY2VuY2VLZXlWYWx1ZS50cmltKCksdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUudHJpbSgpfWNvcHlTeXNzaXRlKGEsZCxo'@;
put 'KXtjb25zdCBmPWguam9pbigiXG4iKTtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChmKS50aGVuKCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY2hlY2siKSxhLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJpcy1zdWNjZXNzIiksZC5pbm5lclRleHQ9IkNvcGllZCEiLHNldFRpbWVv'@;
put 'dXQoKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjb3B5IiksYS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIiksZC5pbm5lclRleHQ9IkNvcHkgdG8gY2xpcGJvYXJkIn0sMWUzKX0pfWFwcGx5S2V5cygpe3RoaXMuYXBwbHlpbmdLZXlzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJh'@;
put 'ZG1pbi9yZWdpc3RlcmtleSIse2tleXVwbG9hZDpbe0FDVElWQVRJT05fS0VZOnRoaXMuYWN0aXZhdGlvbktleVZhbHVlLExJQ0VOQ0VfS0VZOnRoaXMubGljZW5jZUtleVZhbHVlfV19KS50aGVuKGQ9PntkLnJldHVybiYmZC5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQucmV0dXJuWzBdLk1T'@;
put 'RyYmbG9jYXRpb24ucmVwbGFjZShsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0pfSkuZmluYWxseSgoKT0+e3RoaXMuYXBwbHlpbmdLZXlzPSExfSl9b25GaWxlQ2FwdHVyZShhLGQ9ITEpe2xldCBoPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZih0aGlzLmxpY2VuY2VmaWxlLmZpbGVu'@;
put 'YW1lPWgubmFtZSwhaClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITA7Y29uc3QgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD1fPT57aWYodGhpcy5saWNlbmNlRmlsZUVycm9yPSJFcnJvciByZWFkaW5nIGZpbGUuIiwhX3x8IV8udGFyZ2V0fHwyIT1fLnRhcmdldC5yZWFkeVN0'@;
put 'YXRlfHxfLnRhcmdldC5lcnJvcnx8IV8udGFyZ2V0LnJlc3VsdClyZXR1cm47dGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlRmlsZUVycm9yPXZvaWQgMDtjb25zdCBUPV8udGFyZ2V0LnJlc3VsdC50b1N0cmluZygpLnNwbGl0KCJcbiIpO3RoaXMuYWN0aXZhdGlvbktl'@;
put 'eVZhbHVlPVRbMV0sdGhpcy5saWNlbmNlS2V5VmFsdWU9VFswXX0sZi5yZWFkQXNUZXh0KGgpfXN3aXRjaFR5cGUoYSl7dGhpcy5pbnB1dFR5cGU9YX1nZXQgZGlzYWJsZUFwcGx5QnV0dG9uKCl7cmV0dXJuIHRoaXMubGljZW5jZUtleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmFjdGl2YXRpb25L'@;
put 'ZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5saWNlbmNlS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5JiZ0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT09PXRoaXMuY3VycmVudEFjdGl2YXRpb25LZXl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KHR0KFdsKSx0dChDMCksdHQob2EpLHR0KFV4KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1o'@;
put 'ZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Iiwi'@;
put 'c2l6ZSIsIjE1IiwxLCJjdXJzb3ItcG9pbnRlciJdLFsiY29weUljb24iLCIiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJjb3B5VG9vbHRpcCIsIiJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjaGFu'@;
put 'Z2UiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwiZHJvcC1hcmVhIiwzLCJjbGljayIsImZpbGVEcm9wIl0sWyJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbMSwiY2xyLWZvcm0iLCJsaWNlbnNlLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNvbnRh'@;
put 'aW5lciJdLFsibmFtZSIsImxpY2Vuc2Uta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGxpY2VuY2Uga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXktZm9y'@;
put 'bSJdLFsibmFtZSIsImFjdGl2YXRpb24ta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGFjdGl2YXRpb24ga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJtb3VzZWxlYXZlIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYXBwbHkt'@;
put 'a2V5cyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIiwiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCIs'@;
put 'NCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIl1dLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGEsZCl7MSZhJiYoSmUoMCxuV2UsNDUsMTMsImRpdiIsMCksSmUoMSxyV2UsMSwwLCJhcHAtdGVybXMiLDEpKSwyJmEmJihSZSgibmdJZiIsInJlZ2lzdGVyIiE9PWQuYWN0aW9uKSxDZSgxKSxSZSgibmdJZiIsInJlZ2lzdGVyIj09PWQuYWN0aW9uKSl9LGRlcGVuZGVuY2ll'@;
put 'czpbeHMsWmksbmQsdGgsQ3AsV2EsQnMsd3AsT3MscjIsa2EsWnUsZGgsTHAsT3AsZGcsUnAsSXAsY2csdTIsQnUsalllLGpFXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRkaW5nOjIwcHh9LmNhcmRbX25nY29udGVudC0lQ09NUCVde21h'@;
put 'cmdpbi10b3A6MH0ua2V5LWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWlzc2tleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2U3NGMzY30ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0sIC5hY3RpdmF0aW9uLWtleS1mb3JtW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtwYWRkaW5nOjB9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5hY3RpdmF0aW9uLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0YXJlYVtfbmdjb250ZW50LSVDT01QJV0sIC5hY3RpdmF0aW9uLWtleS1mb3Jt'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjE3MHB4O21heC1oZWlnaHQ6MTcwcHg7bWluLWhlaWdodDoxNzBweDtyZXNpemU6bm9uZX0u'@;
put 'YXBwbHkta2V5c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjQwcHg7d2lkdGg6MjAwcHh9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MTVweDtib3JkZXI6MnB4IGRh'@;
put 'c2hlZCAjYjJiMmIyO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxMHB4IDB9Y2xyLXRhYnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fSJdfSksY30pKCksY2FuQWN0aXZhdGU6'@;
put 'W3BVXSxjYW5EZWFjdGl2YXRlOltwVV19XTtsZXQgb1dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKGlXZSks'@;
put 'ZGNdfSksY30pKCksc1dlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLCRsLF91LG9XZSxWN119KSxjfSkoKTtmdW5jdGlvbiBh'@;
put 'V2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsMTkpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7UmUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIitkLmpzUGFyYW1zW2FdKSxDZSgxKSxwcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBsV2Uo'@;
put 'YyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtDZSgxKSxwcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBjV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiw0KSxOZSgyKSx5ZSgp'@;
put 'LEplKDMsYVdlLDIsMiwidGQiLDE3KSxKZSg0LGxXZSwyLDEsInRkIiwxOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEpLENlKDEpLFJlKCJuZ0lmIixhLmluY2x1ZGVzKCJUQUJMRV9JRCIpKSxDZSgxKSxSZSgibmdJZiIsIWEuaW5jbHVkZXMoIlRBQkxFX0lE'@;
put 'IikpfX1mdW5jdGlvbiB1V2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiw0KSxOZSgyKSx5ZSgpLG1lKDMsInRkIiw0KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDMpO0NlKDIpLG9yKGEpLENlKDIpLG9yKGQuc3VibWl0RGV0YWlsc1thXSl9'@;
put 'fWZ1bmN0aW9uIGRXZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwzKSgzLCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLE5lKDYsIk5hbWUiKSx5ZSgpLG1lKDcsInRoIiw0KSxOZSg4LCJWYWx1ZSIpLHllKCkoKSgpLG1lKDks'@;
put 'InRib2R5IiksSmUoMTAsdVdlLDUsMiwidHIiLDUpLHllKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxMCksUmUoIm5nRm9yT2YiLGEuc3VibWl0QXJyKX19ZnVuY3Rpb24gaFdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNCksTmUoMikseWUoKSxtZSgzLCJ0ZCIs'@;
put 'NCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKTtDZSgyKSxvcihhKSxDZSgyKSxvcihkLmpzUGFyYW1zW2FdKX19ZnVuY3Rpb24gZldlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyMCksTmUoMywi'@;
put 'U3VibWl0dGVkIFRhYmxlIERldGFpbHMiKSx5ZSgpLEplKDQsZFdlLDExLDEsImNsci10YWItY29udGVudCIsMjEpLHllKCksbWUoNSwiY2xyLXRhYiIpKDYsImJ1dHRvbiIsMjApLE5lKDcsIkJhc2UgVGFibGUgRGV0YWlscyIpLHllKCksbWUoOCwiY2xyLXRhYi1jb250ZW50IikoOSwiZGl2'@;
put 'IiwyMikoMTAsInRhYmxlIiwzKSgxMSwidGhlYWQiKSgxMiwidHIiKSgxMywidGgiLDQpLE5lKDE0LCJOYW1lIikseWUoKSxtZSgxNSwidGgiLDQpLE5lKDE2LCJWYWx1ZSIpLHllKCkoKSgpLG1lKDE3LCJ0Ym9keSIpLEplKDE4LGhXZSw1LDIsInRyIiw1KSx5ZSgpKCkoKSgpKCkoKSksMiZj'@;
put 'KXtjb25zdCBhPVZlKCk7Q2UoNCksUmUoImNscklmQWN0aXZlIiwhMCksQ2UoMTQpLFJlKCJuZ0Zvck9mIixhLmtleXNBcnJheSl9fWZ1bmN0aW9uIHBXZShjLGwpezEmYyYmKG1lKDAsInAiLDc0KSxOZSgxLCIgVGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSx5ZSgpKX1mdW5jdGlv'@;
put 'biBnV2UoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJkaXYiLDc1KSgyLCJzcGFuIiksTmUoMywiVGFibGUgSWQ6IikseWUoKSxtZSg0LCJzdHJvbmciLDc2KSxOZSg1KSx5ZSgpKCksbWUoNiwiZGl2IikoNywic3BhbiIpLE5lKDgsIlN1Ym1pdHRlcjoiKSx5ZSgpLG1lKDksInNwYW4iLDc3'@;
put 'KSxOZSgxMCkseWUoKSgpLG1lKDExLCJkaXYiKSgxMiwic3BhbiIpLE5lKDEzLCJTdWJtaXR0ZWQgb246IikseWUoKSxtZSgxNCwic3BhbiIsNzcpLE5lKDE1KSx5ZSgpKCksbWUoMTYsImRpdiIpKDE3LCJzcGFuIiksTmUoMTgsIlN1Ym1pdHRlZCBSZWFzb246IikseWUoKSxtZSgxOSwic3Bh'@;
put 'biIsNzcpLE5lKDIwKSx5ZSgpKCksanIoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLFJlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQpKSxDZSgxKSxwcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/'@;
put 'bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiICIpLENlKDUpLHByKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9CWV9OTSwiICIpLENlKDUpLHByKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNV'@;
put 'Qk1JVFRFRF9PTl9EVFRNLCIgIiksQ2UoNSkscHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX1JFQVNPTl9UWFQsIiAiKX19ZnVuY3Rpb24gbVdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsNzgpLHF0KDEsImNsci1pY29uIiw3OSksTmUo'@;
put 'MiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSx5ZSgpKX1mdW5jdGlvbiB2V2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiLDUxKSxKZSgzLHBXZSwyLDAs'@;
put 'InAiLDQ1KSxKZSg0LGdXZSwyMSw1LCJuZy1jb250YWluZXIiLDgpLHllKCksbWUoNSwiZGl2Iiw1MikoNiwiZGl2Iiw1MykoNywiZGl2Iiw1NCkoOCwiZGl2Iiw1NSkoOSwiYnV0dG9uIiw1NikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoNCk7cmV0dXJuIGp0KGgu'@;
put 'Z29Ub0Jhc2UobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLE5lKDEwLCIgR28gdG8gYmFzZSB0YWJsZSBzY3JlZW4gIikseWUoKSxtZSgxMSwiYnV0dG9uIiw1NykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoNCk7cmV0dXJuIGp0'@;
put 'KGguZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxOZSgxMiwiIEdvIHRvIGVkaXRlZCBzY3JlZW4gIikseWUoKSxtZSgxMywiYnV0dG9uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoNCk7cmV0dXJuIGp0KGguZ29CYWNrKG51bGw9PWguanNQYXJhbXM/bnVsbDpo'@;
put 'LmpzUGFyYW1zLlRBQkxFX05NKSl9KSxOZSgxNCwiIEdvIGJhY2sgdG8gZWRpdG9yICIpLHllKCkoKSgpKCksbWUoMTUsImRpdiIsNTkpKDE2LCJidXR0b24iLDYwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLmFwcHJvdmVUYWJsZSgpKX0pLE5lKDE3LCIg'@;
put 'QUNDRVBUICIpLHllKCksbWUoMTgsImJ1dHRvbiIsNjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkucmVqZWN0T3Blbj0hMCl9KSxOZSgxOSwiIFJFSkVDVCAiKSx5ZSgpLG1lKDIwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsNjIpKDIxLCJjbHItdG9nZ2xl'@;
put 'LXdyYXBwZXIiKSgyMiwiaW5wdXQiLDYzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLmZvcm1hdHRlZFZhbHVlcz1oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSks'@;
put 'eWUoKSxtZSgyMywibGFiZWwiLDY0KSxOZSgyNCkseWUoKSgpKCkoKSxtZSgyNSwiZGl2Iiw2NSksSmUoMjYsbVdlLDMsMCwic3BhbiIsNjYpLG1lKDI3LCJkaXYiLDMxKSgyOCwiZGl2Iiw2NykoMjksInNwYW4iLDY4KSxOZSgzMCwiIENoYW5nZWQgUm93cyAiKSxtZSgzMSwic3BhbiIsNjkp'@;
put 'LE5lKDMyKSx5ZSgpKCksbWUoMzMsInNwYW4iLDcwKSxOZSgzNCwiIEFkZGVkIFJvd3MgIiksbWUoMzUsInNwYW4iLDcxKSxOZSgzNikseWUoKSgpLG1lKDM3LCJzcGFuIiw3MiksTmUoMzgsIiBEZWxldGVkIFJvd3MgIiksbWUoMzksInNwYW4iLDczKSxOZSg0MCkseWUoKSgpKCkoKSgpKCko'@;
put 'KSgpfWlmKDImYyl7Y29uc3QgYT1WZSg0KTtDZSgzKSxSZSgibmdJZiIsIWEudGFibGVEZXRhaWxzKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZURldGFpbHMpLENlKDEyKSxSZSgiY2xyTG9hZGluZyIsYS5hY2NlcHRMb2FkaW5nKSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09'@;
put 'PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksQ2UoMiksUmUoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLENlKDQpLFJl'@;
put 'KCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksQ2UoMiksb3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksQ2UoMiksUmUoIm5nSWYiLGEuZGlmZnNMaW1pdCksQ2UoNiksb3IoYS5sZW5zLnVwZGF0ZWQpLENlKDQpLG9yKGEubGVucy5uZXcpLENlKDQp'@;
put 'LG9yKGEubGVucy5kZWxldGVkKX19ZnVuY3Rpb24gX1dlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBiV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDgwKSgxLCJzcGFuIiw4MSksTmUoMiwiIExvYWRpbmcu'@;
put 'Li4gIikseWUoKSxKZSgzLF9XZSwzLDAsImRpdiIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDMpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiB5V2UoYyxsKXsxJmMmJihtZSgwLCJwIiw3NCksTmUoMSwiIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHNob3cg'@;
put 'IikseWUoKSl9ZnVuY3Rpb24gd1dlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxvcihhKX19ZnVuY3Rpb24gQ1dlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsODYpLE5lKDEpLHllKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1WZSgpLmluZGV4LGQ9VmUoMikuaW5kZXgsaD1WZSg0KTtDZSgxKSxwcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1jb25zdCBLc2U9ZnVuY3Rpb24oYyl7cmV0dXJueyJjaCB0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC10b3AtcmlnaHQiOmN9'@;
put 'fTtmdW5jdGlvbiBTV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsODQpLE5lKDEpLEplKDIsQ1dlLDIsMSwic3BhbiIsODUpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKS5pbmRleCxmPVZlKDQpO1JlKCJuZ0NsYXNzIixKMigzLEtzZSwxPT1mLmFy'@;
put 'ckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLENlKDEpLHByKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksQ2UoMSksUmUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gTVdlKGMsbCl7aWYo'@;
put 'MSZjJiYoVnIoMCksSmUoMSxTV2UsMyw1LCJ0ZCIsODMpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoNCk7Q2UoMSksUmUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIHhXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKS5pbmRleCxoPVZlKDQpO0NlKDEpLHByKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIEVXZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEseFdlLDIsMSwidGQiLDQ3KSxqcigpKSwyJmMpe2NvbnN0IGE9VmUoKS5pbmRl'@;
put 'eCxkPVZlKDQpO0NlKDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1jb25zdCBYc2U9ZnVuY3Rpb24oYyxsLGEpe3JldHVybnthZGRlZFJvdzpjLGRlbGV0ZWRSb3c6bCx1cGRhdGVkUm93OmF9fTtmdW5jdGlvbiBrV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsODIpLEplKDEsTVdl'@;
put 'LDIsMSwibmctY29udGFpbmVyIiw4KSxKZSgyLEVXZSwyLDEsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1WZSg0KTtSZSgibmdDbGFzcyIseV8oMyxYc2UsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1k'@;
put 'LmNoQXJyW2FdKSksQ2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLENlKDEpLFJlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gQVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyOSkoMSwiZGl2IiwzMCkoMiwiZGl2'@;
put 'IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsMzMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZ29Ub0FwcHJvdmFsc0xpc3QoKSl9KSxxdCg1LCJjbHItaWNvbiIsMzQpLE5lKDYsIkJhY2sgdG8gYXBwcm92YWxzIGxpc3QgIikseWUoKSgpLG1lKDcsImRp'@;
put 'diIsMzUpKDgsImgzIiwzNiksTmUoOSkseWUoKSgpLG1lKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZ2V0RGV0YWlscygpKX0pLHF0KDEyLCJjbHItaWNvbiIsMzkpLHllKCkoKSgpLG1lKDEzLCJwIiw0MCksTmUo'@;
put 'MTQpLHllKCkoKSxtZSgxNSwiZGl2Iiw0MSksSmUoMTYsdldlLDQxLDExLCJkaXYiLDQyKSx5ZSgpLEplKDE3LGJXZSw0LDEsImRpdiIsNDMpLG1lKDE4LCJkaXYiLDQ0KSxKZSgxOSx5V2UsMiwwLCJwIiw0NSksbWUoMjAsInRhYmxlIiwzKSgyMSwidGhlYWQiKSgyMiwidHIiLDQ2KSxKZSgy'@;
put 'Myx3V2UsMiwxLCJ0aCIsNDcpLHllKCkoKSxtZSgyNCwidGJvZHkiKSxKZSgyNSxrV2UsMyw3LCJ0ciIsNDgpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDkpLHByKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9OTSwiICIpLENlKDUpLHBy'@;
put 'KCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9ERVNDLCIgIiksQ2UoMiksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxDZSgyKSxSZSgibmdJZiIsYS5sb2FkaW5nVGFibGUmJmEubm9DaGFuZ2VzKSxDZSg0KSxS'@;
put 'ZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLENlKDIpLFJlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBUV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI3KSxKZSgxLEFXZSwyNiw3LCJkaXYiLDI4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEu'@;
put 'bG9hZGVkKX19ZnVuY3Rpb24gRFdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsODEpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIElXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBwcmV2aWV3IikseWUoKSgpKX1mdW5jdGlvbiBMV2Uo'@;
put 'YyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDg3KSxKZSgxLERXZSwyLDAsInNwYW4iLDg4KSxKZSgyLElXZSwzLDAsImRpdiIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBS'@;
put 'V2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIzKSxKZSgxLFRXZSwyLDEsImRpdiIsMjQpLG1lKDIsImRpdiIsMjUpLEplKDMsTFdlLDMsMiwiZGl2IiwyNikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDIpLFJlKCJuZ0lmIiwhYS5s'@;
put 'b2FkZWQpfX1mdW5jdGlvbiBPV2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw3OCkscXQoMSwiY2xyLWljb24iLDc5KSxOZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLHllKCkpfWZ1bmN0aW9uIFBXZShjLGwpezEm'@;
put 'YyYmcXQoMCwiZGl2Iiw0OSl9ZnVuY3Rpb24gRldlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBIV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEwMykoMSwic3BhbiIsODEpLE5lKDIsIiBMb2FkaW5nLi4u'@;
put 'ICIpLHllKCksSmUoMyxGV2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgzKSxSZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gTldlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp'@;
put 'dDtDZSgxKSxvcihhKX19ZnVuY3Rpb24gVldlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsODYpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoMikuaW5kZXgsaD1WZSg0KTtDZSgxKSxwcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1b'@;
put 'YV0sIiIpfX1mdW5jdGlvbiBCV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsODQpLE5lKDEpLEplKDIsVldlLDIsMSwic3BhbiIsODUpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKS5pbmRleCxmPVZlKDQpO1JlKCJuZ0NsYXNzIixKMigzLEtzZSwx'@;
put 'PT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLENlKDEpLHByKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksQ2UoMSksUmUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24galdlKGMs'@;
put 'bCl7aWYoMSZjJiYoVnIoMCksSmUoMSxCV2UsMyw1LCJ0ZCIsODMpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoNCk7Q2UoMSksUmUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIHpXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw0KSxOZSgxKSx5ZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKS5pbmRleCxoPVZlKDQpO0NlKDEpLHByKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIFVXZShjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEseldlLDIsMSwidGQiLDQ3KSxqcigpKSwyJmMpe2NvbnN0IGE9VmUo'@;
put 'KS5pbmRleCxkPVZlKDQpO0NlKDEpLFJlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsODIpLEplKDEsaldlLDIsMSwibmctY29udGFpbmVyIiw4KSxKZSgyLFVXZSwyLDEsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuaW5kZXgsZD1WZSg0KTtSZSgibmdDbGFzcyIseV8oMyxYc2UsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksQ2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLENlKDEpLFJlKCJuZ0lm'@;
put 'IiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gWVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw5MykoMSwiZGl2Iiw5NCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsOTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoMykuZ29Ub1N1Ym1pdExpc3QoKSl9KSxxdCg1LCJjbHItaWNvbiIsMzQpLE5lKDYsIkJhY2sgdG8gc3VibWl0dGVkIGxpc3QgIikseWUoKSgpLG1lKDcsImRpdiIsOTYpKDgsImgzIiw5NyksTmUoOSkseWUoKSgpLG1lKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykudGFibGVGbGFnPSEwKX0pLHF0KDEyLCJjbHItaWNvbiIsMzkpLHllKCkoKSgpLG1lKDEzLCJwIiw5OCksTmUoMTQpLHllKCkoKSxtZSgxNSwiZGl2Iiw1MCkoMTYsImRpdiIsNTEpKDE3LCJkaXYiLDc1KSgxOCwic3BhbiIpLE5lKDE5'@;
put 'LCJUYWJsZSBJZDoiKSx5ZSgpLG1lKDIwLCJzdHJvbmciLDc2KSgyMSwic3BhbiIpLE5lKDIyKSx5ZSgpKCkoKSxtZSgyMywiZGl2IikoMjQsInNwYW4iKSxOZSgyNSwiU3VibWl0dGVkIG9uOiIpLHllKCksbWUoMjYsInNwYW4iLDc3KSxOZSgyNykseWUoKSgpLG1lKDI4LCJkaXYiKSgyOSwi'@;
put 'c3BhbiIpLE5lKDMwLCJTdWJtaXQgTWVzc2FnZToiKSx5ZSgpLG1lKDMxLCJzcGFuIiksTmUoMzIpLHllKCkoKSgpLG1lKDMzLCJkaXYiLDUyKSgzNCwiZGl2Iiw1MykoMzUsImRpdiIsNTQpKDM2LCJkaXYiLDU1KSgzNywiYnV0dG9uIiw1NikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEp'@;
put 'O2NvbnN0IGg9VmUoMyk7cmV0dXJuIGp0KGguZ29Ub0Jhc2UoaC5zdWJPYmouYmFzZSkpfSksTmUoMzgsIiBHbyB0byBiYXNlIHRhYmxlIHNjcmVlbiAiKSx5ZSgpLG1lKDM5LCJidXR0b24iLDU3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQo'@;
put 'aC5nZXRUYWJsZShoLnN1Yk9iai50YWJsZUlkKSl9KSxOZSg0MCwiIEdvIHRvIGVkaXRlZCBzY3JlZW4gIikseWUoKSxtZSg0MSwiYnV0dG9uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMyk7cmV0dXJuIGp0KGguZ29CYWNrKGguc3ViT2JqLmJhc2UpKX0p'@;
put 'LE5lKDQyLCIgR28gYmFjayB0byBlZGl0b3IgIikseWUoKSgpKCkoKSxtZSg0MywiZGl2Iiw2NSksSmUoNDQsT1dlLDMsMCwic3BhbiIsNjYpLG1lKDQ1LCJkaXYiLDMxKSg0NiwiZGl2Iiw2NykoNDcsInNwYW4iLDY4KSxOZSg0OCwiIENoYW5nZWQgUm93cyAiKSxtZSg0OSwic3BhbiIsNjkp'@;
put 'LE5lKDUwKSx5ZSgpKCksbWUoNTEsInNwYW4iLDcwKSxOZSg1MiwiIEFkZGVkIFJvd3MgIiksbWUoNTMsInNwYW4iLDcxKSxOZSg1NCkseWUoKSgpLG1lKDU1LCJzcGFuIiw3MiksTmUoNTYsIiBEZWxldGVkIFJvd3MgIiksbWUoNTcsInNwYW4iLDczKSxOZSg1OCkseWUoKSgpKCkoKSgpLG1l'@;
put 'KDU5LCJkaXYiLDUzKSg2MCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDk5KSg2MSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNjIsImlucHV0Iiw2MykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS5mb3JtYXR0ZWRWYWx1ZXM9aCl9KSgiY2hhbmdl'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLHllKCksbWUoNjMsImxhYmVsIiksTmUoNjQpLHllKCkoKSgpKCkoKSgpLG1lKDY1LCJkaXYiLDEwMCksSmUoNjYsUFdlLDEsMCwiZGl2Iiw0MikseWUoKSxKZSg2NyxIV2UsNCwxLCJkaXYi'@;
put 'LDEwMSksbWUoNjgsImRpdiIsMTAyKSg2OSwidGFibGUiLDMpKDcwLCJ0aGVhZCIpKDcxLCJ0ciIsNDYpLEplKDcyLE5XZSwyLDEsInRoIiw0NykseWUoKSgpLG1lKDczLCJ0Ym9keSIpLEplKDc0LFpXZSwzLDcsInRyIiw0OCkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2Uo'@;
put 'OSkscHIoIiAiLGEuc3ViT2JqLmJhc2UsIiAiKSxDZSg1KSxwcigiICIsYS50YWJsZURlc2NyaXB0aW9uLCIgIiksQ2UoNiksUmUoInJvdXRlckxpbmsiLCIvc3RhZ2UvIithLnN1Yk9iai50YWJsZUlkKSxDZSgyKSxwcigiICIsYS5zdWJPYmoudGFibGVJZCwiIiksQ2UoNSkscHIoIiAiLGEu'@;
put 'c3ViT2JqLnN1Ym1pdHRlZCwiICIpLENlKDUpLHByKCIgIixhLnN1Yk9iai5zdWJtaXRSZWFzb24sIiAiKSxDZSgxMiksUmUoIm5nSWYiLGEuZGlmZnNMaW1pdCksQ2UoNiksb3IoYS5sZW5zLnVwZGF0ZWQpLENlKDQpLG9yKGEubGVucy5uZXcpLENlKDQpLG9yKGEubGVucy5kZWxldGVkKSxD'@;
put 'ZSg0KSxSZSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLENlKDIpLG9yKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLENlKDIpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksQ2UoNSksUmUoIm5nRm9y'@;
put 'T2YiLGEucm93SGVhZGVyKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gV1dlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5MSksSmUoMSxZV2UsNzUsMTYsImRpdiIsOTIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQp'@;
put 'fX1mdW5jdGlvbiBHV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiAkV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEwNCkoMSwiZGl2IiwxMDUpKDIsInNwYW4iLDgxKSxOZSgzLCIgTG9h'@;
put 'ZGluZy4uLiAiKSx5ZSgpLEplKDQsR1dlLDMsMCwiZGl2Iiw4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gcVdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxXV2UsMiwxLCJkaXYiLDg5KSxKZSgyLCRXZSw1'@;
put 'LDEsImRpdiIsOTApLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWNvbnN0IEtXZT1mdW5jdGlvbigpe3JldHVybntzdGFuZGFsb25lOiEwfX07bGV0IEpzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEsZCxoLGYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLmRldGFpbHNPcGVuPSExLHRoaXMucmVqZWN0T3Blbj0hMSx0aGlzLmxlbnM9e25ldzowLHVwZGF0ZWQ6MCxkZWxldGVkOjB9LHRoaXMu'@;
put 'bG9hZGVkPSExLHRoaXMubG9hZGluZ1RhYmxlPSExLHRoaXMuc3VibWl0UmVhc29uPSIiLHRoaXMuaW5zdGFuY2U9ImhvdEluc3RhbmNlIix0aGlzLmFjY2VwdExvYWRpbmc9ITEsdGhpcy5yZWplY3RMb2FkaW5nPSExLHRoaXMuc3VibWl0dGVkPSExLHRoaXMudGFibGVGbGFnPSExLHRoaXMu'@;
put 'cm93S2V5cz1bXSx0aGlzLmNoQXJyPVtdLHRoaXMuc2Vjb25kT3Blbj0hMSx0aGlzLmZvcm1hdHRlZFZhbHVlcz0hMCx0aGlzLmNoYW5nZXNBcnI9W10sdGhpcy5kaWZmVGFibGU9e2RhdGE6W119LHRoaXMuZGlmZnNMaW1pdD0hMSx0aGlzLnJlY29yZHNMaW1pdD0xMDB9Z2V0IG5vQ2hhbmdl'@;
put 'cygpe3JldHVybiAwPT09dGhpcy5sZW5zLm5ldyYmMD09PXRoaXMubGVucy51cGRhdGVkJiYwPT09dGhpcy5sZW5zLmRlbGV0ZWR9Z29Ub0Jhc2UoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z29Ub0FwcHJvdmFsc0xpc3QoKXt0aGlzLnJvdXRlLm5hdmln'@;
put 'YXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZSIpfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29CYWNrKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwo'@;
put 'Ii92aWV3L2RhdGEiKX1zaG93RGV0YWlsc1NlbGVjdChhKXthLnByZXZlbnREZWZhdWx0KCksdGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWdldERldGFpbHMoKXt0aGlzLmRldGFpbHNPcGVuPSEwfW9uSG90U2VsZWN0aW9uKGEpe3RoaXMuaG90U2VsZWN0aW9uPWEuc2xpY2UoMCw0'@;
put 'KX1vbkhvdERlc2VsZWN0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90U2VsZWN0aW9uPW51bGx9LDEwMCl9cmVqZWN0aW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5yZWplY3RMb2FkaW5nPSEwLGEuc3VibWl0UmVhc29uPWEuc3VibWl0UmVhc29uLnJlcGxhY2Uo'@;
put 'L1xuL2csIi4gIik7bGV0IGQ9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLFNUUF9SRUFTT046YS5zdWJtaXRSZWFzb259O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpLnRo'@;
put 'ZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0hMX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmFjY2VwdExvYWRp'@;
put 'bmc9ITA7bGV0IGQ9e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOmEucGFyYW1zPy5ESUZGVElNRSxMSUJEUzphLnBhcmFtcz8uTElCRFN9O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVUYWJsZShkLCJTQVNDb250cm9sVGFibGUiLCJhdWRp'@;
put 'dG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSl9KSgpfWdvVG9TdWJtaXRMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZCIp'@;
put 'fWNhbGxDaGFuZ2VzSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEpLnRoZW4oaD0+e2QudGFibGVEZXRhaWxzPWguanNwYXJhbXNbMF0sZC5qc1BhcmFtcz1oLmpzcGFyYW1zWzBdO2xldCBmPVtd'@;
put 'O2Zvcihjb25zdCBfIGluIGQuanNQYXJhbXMpZC5qc1BhcmFtcy5oYXNPd25Qcm9wZXJ0eShfKSYmZi5wdXNoKF8pO2Qua2V5c0FycmF5PWZ9KS5jYXRjaChoPT57ZC5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2QubG9hZGVkPSEwfSl9KSgpfWZvcm1hdHRpbmdDaGFuZ2VkKCl7'@;
put 'dGhpcy5jYWxjRGlmZigpfWNhbGNEaWZmKCl7aWYoIXRoaXMucmVzcG9uc2UpcmV0dXJuO2xldCBhPXRoaXMucmVzcG9uc2UubmV3LGQ9dGhpcy5yZXNwb25zZS51cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5vcmlnaW5hbHM7dGhpcy5mb3JtYXR0ZWRW'@;
put 'YWx1ZXMmJihhPXRoaXMucmVzcG9uc2UuZm10X25ldyxkPXRoaXMucmVzcG9uc2UuZm10X3VwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmZtdF9kZWxldGVkLGY9dGhpcy5yZXNwb25zZS5mbXRfb3JpZ2luYWxzKSx0aGlzLm9yaWdpbmFscz1mLHRoaXMucm93S2V5cz1bXTtmb3IobGV0IFN0PTA7'@;
put 'U3Q8ZC5sZW5ndGg7U3QrKyl7bGV0IEp0PU9iamVjdC5rZXlzKGRbU3RdKTtmb3IobGV0IG5uPTA7bm48SnQubGVuZ3RoO25uKyspZFtTdF1bSnRbbm5dXSE9PWZbU3RdW0p0W25uXV0mJnRoaXMuY2hhbmdlc0Fyci5wdXNoKHtpbmQ6U3QsZmllbGQ6SnRbbm5dLHByb3A6ZFtTdF1bSnRbbm5d'@;
put 'XSxvcmlnaW5hbDpmW1N0XVtKdFtubl1dfSl9dGhpcy5sZW5zPXtuZXc6dGhpcy5wYXJhbXM/Lk5VTV9BRERFRHx8MCx1cGRhdGVkOnRoaXMucGFyYW1zPy5OVU1fVVBEQVRFRHx8MCxkZWxldGVkOnRoaXMucGFyYW1zPy5OVU1fREVMRVRFRHx8MH07bGV0IGllPVtdLHBlPWQuY29uY2F0KGEs'@;
put 'aCk7Zm9yKGxldCBTdD0wO1N0PHRoaXMucmVzcG9uc2UuY29scy5sZW5ndGg7U3QrKylpZS5wdXNoKHRoaXMucmVzcG9uc2UuY29sc1tTdF0uTkFNRSk7bGV0IHdlPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5zLm5ldyxFZT10aGlz'@;
put 'LmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBkYXRlZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy5k'@;
put 'ZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9d2U7bGV0IGl0PVtdLGV0PVtdO2ZvcihsZXQgU3Q9MDtTdDxpZS5sZW5ndGg7U3QrKylldC5wdXNoKHtkYXRhOmllW1N0XSxyZWFkT25seTohMH0pO3RoaXMuZGlmZlRhYmxlLmRhdGE9cGU7Zm9yKGxldCBTdD0wO1N0PHBl'@;
put 'Lmxlbmd0aDtTdCsrKXtsZXQgbm49T2JqZWN0LmtleXMocGVbU3RdKTt0aGlzLnJvd0tleXMucHVzaChubil9bGV0IHl0PVtdLEV0PVtdO2ZvcihsZXQgU3Q9MDtTdDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtTdCsrKXtpZihTdDxFZSYmMCE9PUVlKXt5dC5wdXNoKFtdKSxFdC5wdXNo'@;
put 'KFtdKSxpdC5wdXNoKCJ1cGRhdGVkIik7bGV0IEp0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbU3RdKTtmb3IobGV0IG5uPTA7bm48SnQubGVuZ3RoO25uKyspe2xldCB2bj1KdFtubl07ZltTdF1bdm5dIT09ZFtTdF1bdm5dPyh5dFtTdF0ucHVzaCghMCksRXRbU3RdLnB1c2go'@;
put 'ZltTdF1bdm5dKSk6KHl0W1N0XS5wdXNoKCExKSxFdFtTdF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPXl0LHRoaXMuYXJyT2ZDaGFuZ2VzPUV0fVN0Pj1FZSYmU3Q8RWUrd2UmJml0LnB1c2goImFkZGVkIiksU3Q+d2UrRWUtMSYmaXQucHVzaCgiZGVsZXRlZCIpfXRoaXMuY2hBcnI9'@;
put 'aXQsdGhpcy5yb3dIZWFkZXI9dGhpcy5yb3dLZXlzWzBdLHRoaXMuZGlmZlRhYmxlLmRhdGE9cGV9bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoYS5fZGV0YWlsc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmli'@;
put 'ZShmdW5jdGlvbigpe3ZhciBoPWZpKGZ1bmN0aW9uKihmKXthLnN1Yk9iaj1mLnZpZXdEYXRhLGEudGFibGVJZD1mLnZpZXdEYXRhLnRhYmxlSWQsYS5zdWJtaXR0ZWQ9Zi52aWV3RGF0YS5zdWIsYS5zdWJtaXREZXRhaWxzPWYuZGF0YSxhLnN1Ym1pdEFycj1bXTtmb3IobGV0IFQgaW4gYS5z'@;
put 'dWJtaXREZXRhaWxzKSJzdWIiIT09VCYmYS5zdWJtaXRBcnIucHVzaChUKTtsZXQgXz17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnMoXywiU0FTQ29udHJvbFRh'@;
put 'YmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKFQ9PnthLnBhcmFtcz1ULnBhcmFtc1swXSxhLnJlc3BvbnNlPVQsYS5jYWxjRGlmZigpfSkuY2F0Y2goVD0+VCkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwfSksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pO3JldHVy'@;
put 'biBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ+InUiKXJldHVybjthLnRhYmxlSWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7bGV0IGQ9e0FDVElPTjoiU0hPV19E'@;
put 'SUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5wYXJhbXM9aC5wYXJhbXNbMF0sYS5yZXNwb25z'@;
put 'ZT1oLGEuY2FsY0RpZmYoKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRGb2N1cygpfSksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlz'@;
put 'Ll9kZXRhaWxzU3ViLnVuc3Vic2NyaWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2NlcHRCdG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKHR0KGJkKSx0dCh2bCksdHQoV2wpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLWRldGFpbHMiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQyLHZhcnM6MTIsY29uc3RzOltbMywiY2xyTW9k'@;
put 'YWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJi'@;
put 'dG4tcHJpbWFyeSIsMywiY2xpY2siXSxbNCwibmdJZiJdLFsxLCJmb3JtLWJsb2NrIl0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNfOCJdLFsiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsImlu'@;
put 'bmVySFRNTCIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzEsImNvbnRlbnQtYXJlYSJd'@;
put 'LFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxlZnQgbGluay1pdCIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0lmIl0sWzEsImxlZnQiLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJUYWJMaW5rIiwiIl0sWzQsImNscklm'@;
put 'QWN0aXZlIl0sWzEsIm92ZXJmbG93LWF1dG8iXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxl'@;
put 'eCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJjYXJkIiwiY2xhc3MiLCJtdC0wIiw0'@;
put 'LCJuZ0lmIl0sWzEsIm10LTAiXSxbMSwiY2FyZC1oZWFkZXIiLCJwLTAiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEJhY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJtLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwi'@;
put 'bGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxJbmZvIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLXNtIiwidG9v'@;
put 'bHRpcC10b3AtbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCIyOCJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtMjR2aCBkLWZs'@;
put 'ZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250IiwibXQtMCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXNpemUtMTgiLDQsIm5nSWYiXSxbMSwiZC1mbGV4Il0sWyJjbGFzcyIsImxlZnQi'@;
put 'LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJkLWZsZXgiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYXJkLXRleHQiXSxbMSwiY2xyLXJvdyIsImZvbnQtc2l6ZS0xNSJdLFsxLCJjbHItY29sLW1kLTUiXSxbMSwiY2xyLWNvbC1tZC03Il0sWzEsImNhcmQt'@;
put 'YmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0wIl0sWzEsImNsci1yb3ciLCJjbHItZ2FwLTUiLCJjbHItZ2FwLXNtLTAiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0'@;
put 'LWNlbnRlciIsIm10LTUiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLDMsImNsaWNr'@;
put 'Il0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCJhY2NlcHRCdG4iLCJ0eXBl'@;
put 'Iiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIiwiY2xpY2siXSxbImlkIiwicmVqZWN0QnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4iLCJidG4tZGFuZ2VyIiwibXItMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJt'@;
put 'LTAiLCJtbC0yMGkiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsImNoZWNrZWQiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzEsImZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlIl0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJjbHItYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsInJvd3Mtbm90aWNlIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCJdLFsxLCJsYWJlbCIsImxhYmVsLXdhcm5p'@;
put 'bmciXSxbMSwiYmFkZ2UiLCJiYWRnZS13YXJuaW5nIl0sWzEsImxhYmVsIiwibGFiZWwtc3VjY2VzcyJdLFsxLCJiYWRnZSIsImJhZGdlLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwiYmFkZ2UiLCJiYWRnZS1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250'@;
put 'LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4'@;
put 'LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJkLWZsZXgiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwibGVmdCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImxlZnQiLDMsIm5nQ2xhc3Mi'@;
put 'XSxbImNsYXNzIiwidG9vbHRpcC1jb250ZW50Iiw0LCJuZ0lmIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwi'@;
put 'bmdJZiJdLFsiY2xhc3MiLCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJj'@;
put 'YXJkIG0tMCIsNCwibmdJZiJdLFsxLCJjYXJkIiwibS0wIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0t'@;
put 'MCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBh'@;
put 'bGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGV0YWlsc09wZW49Zn0pLG1lKDEsImgzIiwxKSxOZSgyLCJBcHByb3ZhbCBEZXRhaWxzIikseWUoKSxtZSgzLCJkaXYiLDIpKDQsInRh'@;
put 'YmxlIiwzKSg1LCJ0aGVhZCIpKDYsInRyIikoNywidGgiLDQpLE5lKDgsIk5hbWUiKSx5ZSgpLG1lKDksInRoIiw0KSxOZSgxMCwiVmFsdWUiKSx5ZSgpKCkoKSxtZSgxMSwidGJvZHkiKSxKZSgxMixjV2UsNSwzLCJ0ciIsNSkseWUoKSgpKCksbWUoMTMsImRpdiIsNikoMTQsImJ1dHRvbiIs'@;
put 'NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRldGFpbHNPcGVuPSExfSksTmUoMTUsIiBPayAiKSx5ZSgpKCkoKSxtZSgxNiwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50YWJsZUZsYWc9Zn0pLG1lKDE3LCJoMyIs'@;
put 'MSksTmUoMTgsIkFsbCBEZXRhaWxzIikseWUoKSxtZSgxOSwiZGl2IiwyKSxKZSgyMCxmV2UsMTksMiwiY2xyLXRhYnMiLDgpLHllKCksbWUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlRmxhZz0hMX0pLE5lKDIzLCIgT2sg'@;
put 'IikseWUoKSgpKCksbWUoMjQsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVqZWN0T3Blbj1mfSksbWUoMjUsImgzIiwxKSxOZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSx5ZSgpLG1lKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjks'@;
put 'InNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwiLDExKSxOZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IikseWUoKSxtZSgzMywidGV4dGFyZWEiLDEyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc3VibWl0UmVhc29uPWZ9KSx5ZSgpKCkoKSgp'@;
put 'KCksbWUoMzQsImRpdiIsNikoMzUsImJ1dHRvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWplY3RPcGVuPSExfSksTmUoMzYsIiBDYW5jZWwgIikseWUoKSxtZSgzNywiYnV0dG9uIiwxNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlamVjdGluZygp'@;
put 'fSksTmUoMzgsIiBPSyAiKSx5ZSgpKCkoKSxtZSgzOSwiZGl2IiwxNSksSmUoNDAsUldlLDQsMiwiZGl2IiwxNiksSmUoNDEscVdlLDMsMiwiZGl2Iiw4KSx5ZSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIixkLmRldGFpbHNPcGVuKSxDZSgxMiksUmUoIm5nRm9yT2YiLGQua2V5c0FycmF5'@;
put 'KSxDZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixkLnRhYmxlRmxhZyksQ2UoNCksUmUoIm5nSWYiLGQudGFibGVGbGFnKSxDZSg0KSxSZSgiY2xyTW9kYWxPcGVuIixkLnJlamVjdE9wZW4pLENlKDkpLFJlKCJuZ01vZGVsIixkLnN1Ym1pdFJlYXNvbikoIm5nTW9kZWxPcHRpb25zIiwkcygxMSxL'@;
put 'V2UpKSgiaW5uZXJIVE1MIixkLnN1Ym1pdFJlYXNvbixxMiksQ2UoNCksUmUoImNsckxvYWRpbmciLGQucmVqZWN0TG9hZGluZyksQ2UoMyksUmUoIm5nSWYiLCFkLnN1Ym1pdHRlZCksQ2UoMSksUmUoIm5nSWYiLGQuc3VibWl0dGVkKSl9LGRlcGVuZGVuY2llczpbdWMseHMsWmksQ3AsV2Es'@;
put 'UzAsQnMsd3AsT3MscjIsQnUsa2Esb3Usc3UsWnUsRTgsZGgsVXMsRDAsRDgsVDAsTHAsT3AsZGcsUnAsSXAsY2ddLHN0eWxlczpbJy5sb2FkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNl'@;
put 'bnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1vZGFsTGFyZ2VbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwcmVtIWltcG9ydGFudH0uYWRkZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiKDE0NiwyMDgsMTU0KTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSw3Nywx'@;
put 'MTcsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5kZWxldGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYigyMzAsMTc5LDE3OSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDcwLDcxLDcwLC4yKTtib3JkZXItcmFkaXVzOjVweH0udXBkYXRlZFJvd1tfbmdjb250ZW50LSVDT01Q'@;
put 'JV17YmFja2dyb3VuZDojZmFmZGE4O2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDExNyw5LC4yKTtib3JkZXItcmFkaXVzOjVweH0uY2hbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVy'@;
put 'LXJhZGl1czo1cHh9LmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOnJnYmEoMjUyLDEzNSwxMjAsLjQpfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRp'@;
put 'cC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi41NDE2N3JlbTtm'@;
put 'b250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6IzMxNDM1MTtib3JkZXItcmFkaXVzOi4xMjVyZW07Y29sb3I6I2YwZjFlYztsaW5lLWhlaWdodDouNzVyZW07bWFyZ2luOjA7cGFkZGluZzouMzc1cmVtIC41cmVtO3dpZHRoOjIzNXB4O3Bvc2l0aW9uOmFi'@;
put 'c29sdXRlO2luc2V0OmF1dG8gYXV0byAxMDAlIDEycHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206LjY2NjY3cmVtfS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09N'@;
put 'UCVdOmJlZm9yZSwgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0uMzc1cmVtO2xlZnQ6MDt0b3A6YXV0bztyaWdodDphdXRvO2NvbnRlbnQ6IiI7Ym9yZGVyLWxlZnQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLXRvcDouMjA4MzNyZW0gc29saWQgIzMxNDM1MTtib3JkZXItcmlnaHQ6'@;
put 'LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkIHRyYW5zcGFyZW50fS50YWJsZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweCBzb2xpZH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94'@;
put 'XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJv'@;
put 'cmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS50YWJsZUNvbnRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87bWFyZ2luOjE1cHggMTBweCAxMHB4fS50YWJsZUNvbnRbX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWst'@;
put 'd29yZH0uYXBwcm92YWxJbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5hcHByb3ZhbEJhY2tbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1AbWVkaWEgc2NyZWVuIGFu'@;
put 'ZCAobWF4LXdpZHRoOiA3NjhweCl7LmFwcHJvdmFsSW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxNXB4fS5hcHByb3ZhbEJhY2tbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl'@;
put 'bnQ6Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowcmVtIWltcG9ydGFudDttaW4taGVpZ2h0OmNhbGMoMTAwdmggKyAtMHB4KSFpbXBvcnRhbnR9LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkLmxlZnRbX25nY29udGVu'@;
put 'dC0lQ09NUCVdLCAudGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGgubGVmdFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjE1MHB4IWltcG9ydGFudDtmbGV4OjB9fS50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSwgLnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoLmxlZnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDtmbGV4OjE7d2lkdGg6MzAwcHghaW1wb3J0YW50fS50b29sbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojZTZiM2Iz'@;
put 'O2NvbG9yOiMzMTQzNTE7dG9wOjA7aGVpZ2h0OjM2cHg7d2lkdGg6MTAwJTtsZWZ0OjA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4fSNhY2NlcHRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjcmVqZWN0QnRuW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXt3aWR0aDoxNzVweH0uZm9ybWF0dGVkLXZhbHVlcy10b2dnbGVbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo3NXB4fWNsci1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1ib2R5LXdyYXBwZXJ7b3ZlcmZsb3c6YXV0b30ucm93cy1ub3RpY2VbX25nY29udGVudC0l'@;
put 'Q09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXJpZ2h0OjEwcHg7Y29sb3I6IzZhNmE2YTtmb250LXNpemU6MTVweH0ucm93cy1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfSddfSksY30p'@;
put 'KCk7ZnVuY3Rpb24gWFdlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSxxdCgyLCJjbHItaWNvbiIsMTEpLG1lKDMsImgzIiwxMiksTmUoNCwiVGhlcmUgYXJlIG5vIGFwcHJvdmFscyByZW1haW5pbmciKSx5ZSgpKCkoKSl9ZnVuY3Rpb24gSldlKGMsbCl7MSZjJiYobWUo'@;
put 'MCwiaDMiLDEzKSxOZSgxLCIgUkVWSUVXICIpLHllKCkpfWZ1bmN0aW9uIFFXZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDE0KSxOZSgxLCIgWW91IGhhdmUgIiksbWUoMiwic3BhbiIpLE5lKDMpLHllKCksTmUoNCwiYXBwcm92YWxzIHJlbWFpbmluZyAiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoKTtDZSgzKSxwcigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIGVHZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDE3KSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiB0R2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgYXBwcm92'@;
put 'YWxzIGxpc3QiKSx5ZSgpKCkpfWZ1bmN0aW9uIG5HZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTUpLEplKDEsZUdlLDIsMCwic3BhbiIsMTYpLEplKDIsdEdlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxS'@;
put 'ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gckdlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzgpfWZ1bmN0aW9uIGlHZShjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDM5KSwyJmMmJlJlKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIG9HZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1WbigpO21lKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpLG1lKDUsImNsci1kZy1jZWxsIiksTmUoNikseWUoKSxtZSg3LCJjbHItZGctY2VsbCIpLE5lKDgpLHllKCksbWUoOSwiY2xyLWRnLWNlbGwi'@;
put 'KSgxMCwiZGl2IiwyNikoMTEsImEiLDI3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS5pbmRleDtyZXR1cm4ganQoVmUoMikuZ2V0Q2xpY2tlZChmKSl9KSxxdCgxMiwiY2xyLWljb24iLDI4KSxtZSgxMywic3BhbiIsMjkpLE5lKDE0LCJHbyB0byByZXZpZXcgcGFnZSBz'@;
put 'Y3JlZW4iKSx5ZSgpKCksbWUoMTUsImEiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1CdChhKSxmPWguJGltcGxpY2l0LF89aC5pbmRleCxUPVZlKDIpO3JldHVybiBqdChmLnJlamVjdExvYWRpbmc/IiI6VC5yZWplY3RpbmcoXykpfSksSmUoMTYsckdlLDEsMCwiY2xyLWlj'@;
put 'b24iLDMxKSxKZSgxNyxpR2UsMSwxLCJjbHItc3Bpbm5lciIsMzIpLG1lKDE4LCJzcGFuIiwyOSksTmUoMTksIlJlamVjdCIpLHllKCkoKSxtZSgyMCwiYSIsMzMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZ2V0VGFibGUo'@;
put 'Zi50YWJsZUlkKSl9KSxxdCgyMSwiY2xyLWljb24iLDM0KSxtZSgyMiwic3BhbiIsMjkpLE5lKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSx5ZSgpKCkoKSgpLG1lKDI0LCJjbHItZGctY2VsbCIsMzUpKDI1LCJidXR0b24iLDM2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0'@;
put 'IF89QnQoYSkuJGltcGxpY2l0O3JldHVybiBWZSgyKS5kb3dubG9hZChfLnRhYmxlSWQpLGp0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSkscXQoMjYsImNsci1pY29uIiwzNykseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuc3VibWl0dGVyKSxDZSgyKSxv'@;
put 'cihhLmJhc2VUYWJsZSksQ2UoMiksb3IoYS5zdWJtaXR0ZWQpLENlKDIpLG9yKGEuc3VibWl0UmVhc29uKSxDZSg4KSxSZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEucmVqZWN0TG9hZGluZyksQ2UoOCksUmUoImlkIixhLnRhYmxlSWQpfX1mdW5jdGlvbiBz'@;
put 'R2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDE4KSgyLCJjbHItZGctY29sdW1uIiwxOSksTmUoMywiU1VCTUlUVEVSIikseWUoKSxtZSg0LCJjbHItZGctY29sdW1uIiwxOSksTmUoNSwiQkFTRSBUQUJMRSIpLHllKCksbWUoNiwiY2xy'@;
put 'LWRnLWNvbHVtbiIsMTkpLE5lKDcsIlNVQk1JVFRFRCIpLHllKCksbWUoOCwiY2xyLWRnLWNvbHVtbiIsMTkpLE5lKDksIlNVQk1JVCBSRUFTT04iKSx5ZSgpLG1lKDEwLCJjbHItZGctY29sdW1uIiksTmUoMTEsIkFDVElPTiIpLHllKCksbWUoMTIsImNsci1kZy1jb2x1bW4iKSxOZSgxMywi'@;
put 'RE9XTkxPQUQiKSx5ZSgpLEplKDE0LG9HZSwyNyw3LCJjbHItZGctcm93IiwyMCksbWUoMTUsImNsci1kZy1mb290ZXIiLDIxKSgxNiwic3BhbiIpLE5lKDE3LCJpdGVtcyBwZXIgcGFnZSIpLHllKCksbWUoMTgsInNlbGVjdCIsMjIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXty'@;
put 'ZXR1cm4gQnQoYSksanQoVmUoKS5pdGVtc051bT1oKX0pLG1lKDE5LCJvcHRpb24iLDIzKSxOZSgyMCwiMyIpLHllKCksbWUoMjEsIm9wdGlvbiIsMjMpLE5lKDIyLCI1IikseWUoKSxtZSgyMywib3B0aW9uIiwyMyksTmUoMjQsIjEwIikseWUoKSxtZSgyNSwib3B0aW9uIiwyMyksTmUoMjYs'@;
put 'IjE1IikseWUoKSgpLG1lKDI3LCJjbHItZGctcGFnaW5hdGlvbiIsMjQsMjUpLE5lKDI5KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgyOCksZD1WZSgpO0NlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJiYXNlVGFibGUiKSxD'@;
put 'ZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksQ2UoNiksUmUoImNsckRnSXRlbXNPZiIsZC5hcHByb3ZlTGlzdCksQ2UoNCksUmUoIm5nTW9kZWwiLGQuaXRlbXNOdW0pLENlKDEpLFJlKCJuZ1ZhbHVlIiwzKSxD'@;
put 'ZSgyKSxSZSgibmdWYWx1ZSIsNSksQ2UoMiksUmUoIm5nVmFsdWUiLDEwKSxDZSgyKSxSZSgibmdWYWx1ZSIsMTUpLENlKDIpLFJlKCJjbHJEZ1BhZ2VTaXplIixkLml0ZW1zTnVtKSxDZSgyKSxiMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJ'@;
put 'dGVtcywiIGFwcHJvdmFscyAiKX19Y29uc3QgYUdlPWZ1bmN0aW9uKGMpe3JldHVybntub0JvcmRlcjpjfX07bGV0IGxHZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGU9aCx0'@;
put 'aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmNkcj1fLHRoaXMubG9hZGVkPSExLHRoaXMuaXRlbXNOdW09MTB9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9'@;
put 'dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpKX1yZWplY3RpbmcoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7dm9pZCAwIT09ZC5hcHBy'@;
put 'b3ZlTGlzdCYmKGQudGFibGVJZD1kLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpO2xldCBoPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmQudGFibGVJZCxTVFBfUkVBU09OOiJxdWljayByZWplY3Rpb24ifTt0cnl7KGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5n'@;
put 'PSEwLCh5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoaCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKSkuZnJvbXNhc1swXS5SRVNQT05TRS5pbmNsdWRlcygiU1VDQ0VTUyIpJiYoKGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSExLGQu'@;
put 'YXBwcm92ZUxpc3Q/LnNwbGljZShhLDEpLGQucmVtYWluZWQtLSxkLmNkci5kZXRlY3RDaGFuZ2VzKCkpfWNhdGNoKGYpe2QuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL3JlamVjdGlvbiIsZil9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZp'@;
put 'KGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLml0ZW1zTnVtPTEwO2xldCBkPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2Vy'@;
put 'dmljZS5nZXRBcHByb3ZhbHMoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTthLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGg7bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbihfKXtyZXR1cm57dGFibGVJZDpfLlRBQkxFX0lELHN1Ym1pdHRlcjpfLlNVQk1J'@;
put 'VFRFRF9CWV9OTSxzdWJtaXR0ZWQ6Xy5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6Xy5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjpfLlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2EuYXBwcm92ZUxpc3Q9ZixhLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3Bv'@;
put 'bnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGgpfX0pKCl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLF89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3Bl'@;
put 'bihoK18rIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGJkKSx0dCh2bCksdHQoRHMpLHR0KG9hKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OSx2YXJzOjgsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIi'@;
put 'LDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIiw0LCJuZ0lmIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayIsIm5vYXBwcm92YWxzLWluZm8td3JhcHBl'@;
put 'ciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJm'@;
put 'b250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdG'@;
put 'aWVsZCJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1zdGFydCJdLFszLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJuZ1ZhbHVlIl0sWzEsImNlbnRlciIsMywiY2xyRGdQYWdlU2l6ZSJdLFsicGFnaW5hdGlvbiIs'@;
put 'IiJdLFsicm9sZSIsInRvb2x0aXAiLDEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItZ3JlZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIs'@;
put 'ImNoZWNrIiwic2l6ZSIsIjI0Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1yZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIs'@;
put 'NCwibmdJZiJdLFszLCJjbHJTbWFsbCIsNCwibmdJZiJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInAt'@;
put 'MCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImlkIiwiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIl0sWzMsImNsclNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEplKDIsWFdlLDUsMCwiZGl2IiwyKSxtZSgzLCJkaXYiLDMpLEplKDQsSldlLDIsMCwiaDMiLDQpLEplKDUsUVdlLDUsMSwicCIsNSkseWUoKSxKZSg2LG5HZSwzLDIsImRpdiIsNiksbWUoNywiZGl2Iiw3KSxKZSg4LHNHZSwzMCwxNCwi'@;
put 'ZGl2Iiw4KSx5ZSgpKCkoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLDA9PT1kLnJlbWFpbmVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoNixhR2UsIWQubG9hZGVkKSksQ2UoMSksUmUoIm5nSWYiLGQubG9hZGVkJiYwIT09ZC5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLGQubG9hZGVkJiYw'@;
put 'IT09ZC5yZW1haW5lZCksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRlZCksQ2UoMiksUmUoIm5nSWYiLGQuYXBwcm92ZUxpc3QmJjAhPT1kLnJlbWFpbmVkKSl9LGRlcGVuZGVuY2llczpbdWMsWmksbDEsYzEsTTAsQnMsT3MsVzgsVHAsdGcsUEUsVTgsRkUsbmcscmcsaWcsJDgsb2csQjgsa3As'@;
put 'ejgsa2EsdTJdLHN0eWxlczpbIi5jb2x1bW4tY2VudGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0'@;
put 'YWdyaWQtY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGVbX25nY29udGVudC0lQ09NUCVde291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmxpbmtzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXJ9LnRvb2x0aXAu'@;
put 'dG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXti'@;
put 'YWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250'@;
put 'ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm9Cb3JkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206'@;
put 'MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH0uYXBwcm92YWxzLWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0Ojcwdmg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0u'@;
put 'bm9hcHByb3ZhbHMtaW5mby13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSksY30pKCk7ZnVuY3Rp'@;
put 'b24gY0dlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMikoMSwiZGl2IiwxMykscXQoMiwiY2xyLWljb24iLDE0KSxtZSgzLCJoMyIsMTUpLE5lKDQsIiBZb3UgaGF2ZSBub3Qgc3VibWl0dGVkIGFueSB0YWJsZXMgIikseWUoKSgpKCkpfWZ1bmN0aW9uIHVHZShjLGwpezEmYyYmKG1lKDAsImgz'@;
put 'IiwxNiksTmUoMSwiIFNVQk1JVCBRVUVVRSAiKSx5ZSgpKX1mdW5jdGlvbiBkR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxNyksTmUoMSwiIFlvdSBoYXZlICIpLG1lKDIsInNwYW4iKSxOZSgzKSx5ZSgpLE5lKDQsInN1Ym1pc3Npb25zIHdhaXRpbmcgdG8gYmUgYXBwcm92ZWQgIikseWUo'@;
put 'KSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLHByKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gaEdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMjApLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIGZHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUo'@;
put 'MiwiTG9hZGluZyBzdWJtaXR0ZWQgbGlzdCIpLHllKCkoKSl9ZnVuY3Rpb24gcEdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxOCksSmUoMSxoR2UsMiwwLCJzcGFuIiwxOSksSmUoMixmR2UsMywwLCJkaXYiLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIs'@;
put 'IWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gZ0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRnLXJvdyIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoNSkuZ29U'@;
put 'b0RldGFpbHMoZi50YWJsZUlkKSl9KSxtZSgxLCJjbHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpLG1lKDUsImNsci1kZy1jZWxsIiksTmUoNikseWUoKSxtZSg3LCJjbHItZGctY2VsbCIpKDgsImRpdiIsMzEpKDksImEiLDMyKSx4dCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDUpLmdvVG9TdGFnZShmLnRhYmxlSWQpKX0pLHF0KDEwLCJjbHItaWNvbiIsMzMpLG1lKDExLCJzcGFuIiwzNCksTmUoMTIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLHllKCkoKSgpKCksbWUo'@;
put 'MTMsImNsci1kZy1jZWxsIiwzNSkoMTQsImJ1dHRvbiIsMzYpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIFZlKDUpLmRvd25sb2FkKF8udGFibGVJZCksanQoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxxdCgxNSwiY2xyLWljb24iLDM3KSx5'@;
put 'ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5iYXNlKSxDZSgyKSxvcihhLnN1Ym1pdHRlZCksQ2UoMiksb3IoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBtR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdy'@;
put 'aWQiLDIyKSgyLCJjbHItZGctY29sdW1uIiksTmUoMywiQkFTRSBUQUJMRSIpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIsMjMpLE5lKDUsIlNVQk1JVFRFRCIpLHllKCksbWUoNiwiY2xyLWRnLWNvbHVtbiIsMjMpLE5lKDcsIlNVQk1JVCBSRUFTT04iKSx5ZSgpLG1lKDgsImNsci1kZy1j'@;
put 'b2x1bW4iLDEyKSxOZSg5LCJBQ1RJT04iKSx5ZSgpLG1lKDEwLCJjbHItZGctY29sdW1uIiwxMiksTmUoMTEsIkRPV05MT0FEIikseWUoKSxKZSgxMixnR2UsMTYsMywiY2xyLWRnLXJvdyIsMjQpLG1lKDEzLCJjbHItZGctZm9vdGVyIiwyNSkoMTQsInNwYW4iKSxOZSgxNSwiaXRlbXMgcGVy'@;
put 'IHBhZ2UiKSx5ZSgpLG1lKDE2LCJzZWxlY3QiLDI2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLml0ZW1zTnVtPWgpfSksbWUoMTcsIm9wdGlvbiIsMjcpLE5lKDE4LCIzIikseWUoKSxtZSgxOSwib3B0aW9uIiwyNyksTmUoMjAsIjUiKSx5'@;
put 'ZSgpLG1lKDIxLCJvcHRpb24iLDI3KSxOZSgyMiwiMTAiKSx5ZSgpLG1lKDIzLCJvcHRpb24iLDI3KSxOZSgyNCwiMTUiKSx5ZSgpKCksbWUoMjUsImNsci1kZy1wYWdpbmF0aW9uIiwyOCwyOSksTmUoMjcpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDI2KSxkPVZlKDQpO0NlKDQp'@;
put 'LFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxDZSg2KSxSZSgiY2xyRGdJdGVtc09mIixkLnN1Ym1pdHRlckxpc3QpLENlKDQpLFJlKCJuZ01vZGVsIixkLml0ZW1zTnVtKSxDZSgxKSxSZSgibmdWYWx1ZSIsMyksQ2Uo'@;
put 'MiksUmUoIm5nVmFsdWUiLDUpLENlKDIpLFJlKCJuZ1ZhbHVlIiwxMCksQ2UoMiksUmUoIm5nVmFsdWUiLDE1KSxDZSgyKSxSZSgiY2xyRGdQYWdlU2l6ZSIsZC5pdGVtc051bSksQ2UoMiksYjAoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRl'@;
put 'bXMsIiBzdWJtaXNzaW9ucyAiKX19ZnVuY3Rpb24gdkdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSksSmUoMSxtR2UsMjgsMTIsImRpdiIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLnN1Ym1pdHRlckxpc3QmJjAhPT1hLnJlbWFpbmVkKX19Y29u'@;
put 'c3QgX0dlPWZ1bmN0aW9uKGMpe3JldHVybntub0JvcmRlcjpjfX07ZnVuY3Rpb24gYkdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw1KSxKZSgxLGNHZSw1LDAsImRpdiIsNiksbWUoMiwiZGl2Iiw3KSxKZSgzLHVHZSwyLDAsImgzIiw4KSxKZSg0LGRHZSw1LDEsInAiLDkpLHllKCksSmUo'@;
put 'NSxwR2UsMywyLCJkaXYiLDEwKSxKZSg2LHZHZSwyLDEsImRpdiIsMTEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoNixfR2UsIWEubG9hZGVkKSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LDAhPT1hLnJlbWFpbmVkKSxDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJlbWFpbmVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiB5R2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDMpLEplKDEsYkdlLDcs'@;
put 'OCwiZGl2Iiw0KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEuc3ViUmVhZHkpfX1mdW5jdGlvbiB3R2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSxxdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIikseWUoKSl9bGV0IFFzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuc2FzU2VydmljZT1fLHRoaXMucmVtYWluZWQ9MCx0aGlzLmxvYWRlZD0hMSx0aGlzLnN1YlJlYWR5PSExLHRoaXMuZGV0YWlsc09w'@;
put 'ZW49ITF9Z29Ub1N0YWdlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvVG9EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkLyIrYSl9Z2V0RGV0YWlscyhhLGQpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91'@;
put 'dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmREZXRhaWxzKGEsZCx0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3Ry'@;
put 'eXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbihfKXty'@;
put 'ZXR1cm57dGFibGVJZDpfLlRBQkxFX0lELGJhc2U6Xy5CQVNFX1RBQkxFLHN1Ym1pdHRlZDpfLlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjpfLlNVQk1JVFRFRF9CWV9OTSxzdWJtaXRSZWFzb246Xy5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1'@;
put 'Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3QgXz1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KFQ9PlQudGFibGVJZD09PWQpO18+LTEmJmEuZ2V0RGV0YWlscyhhLnN1Ym1pdHRlckxpc3RbX10sXyl9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNh'@;
put 'dGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNh'@;
put 'c1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBw'@;
put 'TG9jLF89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK18rIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KHR0KGJkKSx0dCh2bCksdHQoRHMpLHR0KFdsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sxLCJ3LTEwMCJdLFsiY2xh'@;
put 'c3MiLCJjb250ZW50LWFyZWEiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwz'@;
put 'LCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNv'@;
put 'bnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwibm8tc3VibWl0dGVkLXRhYmxlcyIsImNhcmQtYmxvY2si'@;
put 'LCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVy'@;
put 'IiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRl'@;
put 'ciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGlj'@;
put 'ayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtc3RhcnQiXSxbMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdWYWx1ZSJdLFsxLCJjZW50ZXIiLDMsImNsckRnUGFnZVNpemUiXSxbInBhZ2luYXRpb24iLCIiXSxb'@;
put 'MSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJyb2xlIiwidG9vbHRpcCIsMSwicm93IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVl'@;
put 'IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCksSmUoMSx5R2UsMiwxLCJkaXYiLDEpLEplKDIsd0dlLDIsMCwiZGl2IiwyKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQuc3ViUmVhZHkpLENlKDEpLFJlKCJuZ0lmIixkLnN1YlJlYWR5KSl9LGRlcGVuZGVu'@;
put 'Y2llczpbdWMsWmksbDEsYzEsTTAsQnMsT3MsVzgsVHAsdGcsUEUsVTgsRkUsbmcscmcsaWcsJDgsb2csQjgsa3Asejgsa2EsSnNlXSxzdHlsZXM6WyIubm9Cb3JkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH0udG9v'@;
put 'bHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09N'@;
put 'UCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlw'@;
put 'LWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfS5uby1zdWJtaXR0ZWQtdGFibGVzW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pLGN9KSgpO2Z1bmN0aW9uIENHZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTIpLHF0KDEsImNsci1pY29uIiwxMyksbWUoMiwiaDMiLDE0KSxOZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSx5ZSgpKCkpfWZ1bmN0aW9u'@;
put 'IFNHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImEiLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGp0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTmUoMSkseWUoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLG9yKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBNR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJhIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGlj'@;
put 'aXQsZj1WZSgpO3JldHVybiBqdChmLmdldEJhc2VUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxOZSgyLCJWSUVXIikseWUoKSxtZSgzLCJzcGFuIiksTmUoNCwiIC8gIikseWUoKSxtZSg1LCJhIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGlj'@;
put 'aXQsZj1WZSgpO3JldHVybiBqdChmLmdldEVkaXRUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxOZSg2LCJFRElUIikseWUoKSgpfX1mdW5jdGlvbiB4R2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtD'@;
put 'ZSgxKSxvcihkLmFwcHJvdmVEYXRhW2FdKX19ZnVuY3Rpb24gRUdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsNiksTmUoMikseWUoKSxtZSgzLCJ0ZCIsNiksSmUoNCxTR2UsMiwxLCJhIiwxNSksSmUoNSxNR2UsNywwLCJkaXYiLDE2KSxKZSg2LHhHZSwyLDEsInNwYW4iLDE2'@;
put 'KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7Q2UoMiksb3IoYSksQ2UoMiksUmUoIm5nSWYiLGQ8MSksQ2UoMSksUmUoIm5nSWYiLGQ8MiYmZD49MSksQ2UoMSksUmUoIm5nSWYiLGQ+PTIpfX1mdW5jdGlvbiBrR2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwy'@;
put 'MCksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gQUdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIGhpc3RvcnkiKSx5ZSgpKCkpfWZ1bmN0aW9uIFRHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTgpLEplKDEsa0dlLDIsMCwic3Bh'@;
put 'biIsMTkpLEplKDIsQUdlLDMsMCwiZGl2IiwxNikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIERHZShjLGwpezEmYyYmKG1lKDAsImgzIiwyOCksTmUoMSwiSElTVE9SWSIpLHll'@;
put 'KCkpfWZ1bmN0aW9uIElHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDI5KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSkscHIoIiBUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQsIiByZWNvcmRzLCBjb250'@;
put 'YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fWNvbnN0IExHZT1mdW5jdGlvbihjLGwpe3JldHVybntyZWplY3RlZDpjLGFjY2VwdGVkOmx9fTtmdW5jdGlvbiBSR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctcm93IiwzMykseHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS5nZXRBcHBySW5kZXgoZikpfSksbWUoMSwiY2xyLWRnLWNlbGwiLDM0KSgyLCJhIiwzNSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS5nZXRC'@;
put 'YXNlVGFibGUoZi5iYXNldGFibGUpKX0pLE5lKDMpLHllKCkoKSxtZSg0LCJjbHItZGctY2VsbCIsMzYpLE5lKDUpLHllKCksbWUoNiwiY2xyLWRnLWNlbGwiLDM0KSxOZSg3KSx5ZSgpLG1lKDgsImNsci1kZy1jZWxsIiwzNCksTmUoOSkseWUoKSxtZSgxMCwiY2xyLWRnLWNlbGwiLDM0KSxO'@;
put 'ZSgxMSkseWUoKSxtZSgxMiwiY2xyLWRnLWNlbGwiLDM0KSxOZSgxMykseWUoKSxtZSgxNCwiY2xyLWRnLWNlbGwiLDM3KSgxNSwiYnV0dG9uIiwzOCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4gVmUoMykuZG93bmxvYWQoXy50YWJsZUlk'@;
put 'KSxqdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLHF0KDE2LCJjbHItaWNvbiIsMzkpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgzKSxvcihhLmJhc2V0YWJsZSksQ2UoMSksUmUoIm5nQ2xhc3MiLFEyKDcsTEdlLCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9W'@;
put 'RUQiPT09YS5zdGF0dXMpKSxDZSgxKSxvcihhLnN0YXR1cyksQ2UoMiksb3IoYS5zdWJtaXR0ZXIpLENlKDIpLG9yKGEuc3VibWl0dGVkUmVhc29uKSxDZSgyKSxvcihhLnN1Ym1pdHRlZCksQ2UoMiksb3IoYS5yZXZpZXdlZCl9fWZ1bmN0aW9uIE9HZShjLGwpe2lmKDEmYyYmKG1lKDAsImNs'@;
put 'ci1kYXRhZ3JpZCIsMzApKDEsImNsci1kZy1jb2x1bW4iLDMxKSxOZSgyLCJCQVNFX1RBQkxFIikseWUoKSxtZSgzLCJjbHItZGctY29sdW1uIiwzMSksTmUoNCwiU1RBVFVTIikseWUoKSxtZSg1LCJjbHItZGctY29sdW1uIiwzMSksTmUoNiwiU1VCTUlUVEVSIikseWUoKSxtZSg3LCJjbHIt'@;
put 'ZGctY29sdW1uIiwzMSksTmUoOCwiU1VCTUlUIFJFQVNPTiIpLHllKCksbWUoOSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDEwLCJTVUJNSVRURUQiKSx5ZSgpLG1lKDExLCJjbHItZGctY29sdW1uIiwzMSksTmUoMTIsIkFQUFJPVkVEIC8gUkVKRUNURUQiKSx5ZSgpLG1lKDEzLCJjbHItZGct'@;
put 'Y29sdW1uIiksTmUoMTQsIkRPV05MT0FEIikseWUoKSxKZSgxNSxSR2UsMTcsMTAsImNsci1kZy1yb3ciLDMyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoImNsckRnRmllbGQiLCJiYXNldGFibGUiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN0YXR1cyIpLENlKDIpLFJl'@;
put 'KCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWRSZWFzb24iKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwicmV2aWV3ZWQiKSxDZSg0KSxSZSgiY2xyRGdJdGVtc09mIixhLmhp'@;
put 'c3RvcnkpfX1mdW5jdGlvbiBQR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmxvYWREYXRhKCkpfSksTmUoMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7UmUoImNsckxv'@;
put 'YWRpbmciLGEubG9hZGluZ01vcmUpLENlKDEpLHByKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5jdGlvbiBGR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxKZSgyLERHZSwyLDAsImgzIiwyMyksSmUoMyxJR2UsMiwxLCJwIiwyNCks'@;
put 'eWUoKSxKZSg0LE9HZSwxNiw3LCJjbHItZGF0YWdyaWQiLDI1KSxtZSg1LCJkaXYiLDI2KSxKZSg2LFBHZSwyLDIsImJ1dHRvbiIsMjcpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFs'@;
put 'dWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDIpLFJlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZD09PWEuSW5maW5pdHkmJmEucm93c0xlZnRUb0xvYWQ+MCl9fWNvbnN0IEhH'@;
put 'ZT1be3BhdGg6ImFwcHJvdmUiLGNvbXBvbmVudDpsR2V9LHtwYXRoOiJhcHByb3ZlRGV0Lzp0YWJsZUlkIixjb21wb25lbnQ6SnNlfSx7cGF0aDoic3VibWl0dGVkIixjb21wb25lbnQ6UXNlfSx7cGF0aDoic3VibWl0dGVkLzp0YWJsZUlkIixjb21wb25lbnQ6UXNlfSx7cGF0aDoiaGlzdG9y'@;
put 'eSIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5zYXNTZXJ2aWNlPV8sdGhpcy5oaXN0b3J5PVtdLHRo'@;
put 'aXMudGFibGVUaXRsZXM9W10sdGhpcy5oaXN0b3J5QXJyPVtdLHRoaXMubG9hZGVkPSExLHRoaXMuaXRlbXNOdW09MTAsdGhpcy5vcGVuTW9kYWw9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5hcHByb3ZlRGF0YT17fSx0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLmhp'@;
put 'c3RQYXJhbXM9e0hJU1Q6MCxTVEFSVFJPVzoxLE5PQlM6LTF9LHRoaXMubG9hZGluZ01vcmU9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2Fz'@;
put 'anNDb25maWcoKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRCYXNlVGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdldEVkaXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv'@;
put 'ZWRpdG9yLyIrYSl9Z2V0QXBwckluZGV4KGEpe2NvbnN0IGQ9dGhpcy5oaXN0b3J5QXJyLmZpbmRJbmRleChoPT5oLlRBQkxFX0lEPT09YS50YWJsZUlkKTtkPi0xJiYodGhpcy5hcHByb3ZlRGF0YT10aGlzLmhpc3RvcnlBcnJbZF0sdGhpcy5vcGVuTW9kYWw9ITApfWdldCByb3dzTGVmdFRv'@;
put 'TG9hZCgpe2NvbnN0IGE9dGhpcy5oaXN0UGFyYW1zLk5PQlMtdGhpcy5oaXN0b3J5Lmxlbmd0aCxkPXRoaXMuaGlzdFBhcmFtcy5ISVNUO3JldHVybiBhPD0wPzA6YT5kP2Q6YX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJs'@;
put 'LGY9ZC5hcHBMb2MsXz10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKyImX2NvbnRleHRuYW1lPSIrdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0'@;
put 'TmFtZSl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZD17U1RBUlRST1c6YS5oaXN0UGFyYW1zLkhJU1QrYS5oaXN0UGFyYW1zLlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgZixoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhp'@;
put 'c3RvcnkoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5sb2FkaW5nTW9yZT0hMSxhLmhpc3RQYXJhbXM9aC5oaXN0cGFyYW1zWzBdO2NvbnN0IF89aC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lm'@;
put 'KF8ubGVuZ3RoPjApe2NvbnN0IFQ9XzthLmhpc3RvcnlBcnI9XyxmPU9iamVjdC5rZXlzKFRbMF0pLGEudGFibGVUaXRsZXM9ZjtsZXQgVz1fLm1hcChmdW5jdGlvbihpZSl7cmV0dXJue3RhYmxlSWQ6aWUuVEFCTEVfSUQsc3VibWl0dGVyOmllLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246'@;
put 'aWUuU1VCTUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOmllLlNVQk1JVFRFRCxzdGF0dXM6aWUuU1RBVFVTLHJldmlld1JlYXNvbjppZS5SRVZJRVdfUkVBU09OX1RYVCxyZXZpZXdlcjppZS5SRVZJRVdFUixyZXZpZXdlZDppZS5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczppZS5OVU1fT0Zf'@;
put 'QVBQUk9WQUxTX1JFUVVJUkVELGJhc2V0YWJsZTppZS5CQVNFX1RBQkxFfX0pO2EuaGlzdG9yeS5wdXNoKC4uLlcpLGEubG9hZGVkPSEwfWVsc2UgYS5sb2FkZWQ9ITAsMD09PWEuaGlzdG9yeS5sZW5ndGgmJihhLm5vRGF0YT0hMCl9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNw'@;
put 'b25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIsaCksYS5sb2FkaW5nTW9yZT0hMX19KSgpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5sb2FkRGF0YSgpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykodHQoQzApLHR0KGJkKSx0dCh2bCksdHQoRHMpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oaXN0b3J5Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVh'@;
put 'Il0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwiY2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxPcGVu'@;
put 'Q2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNz'@;
put 'IiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnkt'@;
put 'Y29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywi'@;
put 'Y2xpY2siLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5n'@;
put 'SWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYi'@;
put 'XSxbImNsYXNzIiwiZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJidG4gYnRuLXN1Y2Nl'@;
put 'c3MiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlzdG9yeSIsImRhdGFncmlk'@;
put 'LWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFszLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJtLTAiLDMsImNsaWNrIl0sWzEsInZlckNlbnRlciIs'@;
put 'MywibmdDbGFzcyJdLFsxLCJ2ZXJDZW50ZXIiLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNs'@;
put 'aWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSxKZSgxLENHZSw0LDAsImRpdiIsMSksbWUoMiwiY2xyLW1vZGFsIiwyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuTW9kYWw9Zn0pLG1lKDMsImg0IiwzKSxO'@;
put 'ZSg0LCJBcHByb3ZhbCBkZXRhaWxzIikseWUoKSxtZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLE5lKDEwLCJOYW1lIikseWUoKSxtZSgxMSwidGgiLDYpLE5lKDEyLCJWYWx1ZSIpLHllKCkoKSgpLG1lKDEzLCJ0Ym9keSIpLEplKDE0LEVH'@;
put 'ZSw3LDQsInRyIiw3KSx5ZSgpKCkoKSxtZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQub3Blbk1vZGFsPSExfSksTmUoMTcsIiBPSyAiKSx5ZSgpKCkoKSxKZSgxOCxUR2UsMywyLCJkaXYiLDEwKSxKZSgxOSxGR2UsNyw0LCJkaXYi'@;
put 'LDExKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5ub0RhdGEpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQub3Blbk1vZGFsKSgiY2xyTW9kYWxTaXplIiwieGwiKSxDZSgxMiksUmUoIm5nRm9yT2YiLGQudGFibGVUaXRsZXMpLENlKDQpLFJlKCJuZ0lmIiwhZC5sb2FkZWQpLENl'@;
put 'KDEpLFJlKCJuZ0lmIiwhZC5ub0RhdGEmJmQubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbdWMseHMsWmksVzgsVHAsdGcsVTgsbmcscmcsaWcsJDgsb2csQjgsa3Asejgsa2Esb3Usc3UsWnUsZGhdLHN0eWxlczpbIi5yZWplY3RlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y4MzEyNjtm'@;
put 'b250LXdlaWdodDo3MDB9LmFjY2VwdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojM2ZjNDI0O2ZvbnQtd2VpZ2h0OjcwMH0uaHNDZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnQ7anVzdGlmeS1j'@;
put 'b250ZW50OmNlbnRlciFpbXBvcnRhbnQ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudDtwYWRkaW5nOjdweH0uYnRDZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS52ZXJDZW50ZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d29yZC1icmVhazpicmVhay1hbGx9LmxvYWQtbW9yZVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6OTBweH0jbm9EYXRhQ29udGFpbmVyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pLGN9KSgpfV07bGV0IE5HZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRz'@;
put 'OltvbyxkYy5mb3JDaGlsZChIR2UpLGRjXX0pLGN9KSgpLFZHZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbywkbCxOR2UsX3Us'@;
put 'XzcuZm9yUm9vdCgpLEMyLFY3XX0pLGN9KSgpLEJHZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJl'@;
put 'dmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKTtmdW5jdGlvbiBqR2UoYyxsKXsxJmMmJiht'@;
put 'ZSgwLCJzcGFuIiw2KSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiB6R2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBVR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQp'@;
put 'LEplKDEsakdlLDIsMCwic3BhbiIsNSksSmUoMix6R2UsMywwLCJkaXYiLDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1jb25zdCBaR2U9ZnVuY3Rpb24oYyxsKXtyZXR1cm57cmVqZWN0ZWQ6'@;
put 'YyxhY2NlcHRlZDpsfX07ZnVuY3Rpb24gWUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiZGl2Iiw3KSgyLCJkaXYiLDgpKDMsImg0Iiw5KSxOZSg0LCJTdGFnZWQgRGF0YSIpLHllKCkoKSgpLG1lKDUsImRpdiIsMTApKDYsImRpdiIsMTEpKDcsImRpdiIsMTIp'@;
put 'KDgsImRpdiIsOCksTmUoOSwiQmFzaWMgU3VibWl0dGVkIERldGFpbHMiKSx5ZSgpKCksbWUoMTAsImRpdiIpKDExLCJzcGFuIiksTmUoMTIsIlRhYmxlIElkOiIpLHllKCksbWUoMTMsInN0cm9uZyIpKDE0LCJzcGFuIiksTmUoMTUpLHllKCkoKSgpLG1lKDE2LCJkaXYiKSgxNywic3BhbiIp'@;
put 'LE5lKDE4LCJCYXNlIFRhYmxlOiIpLHllKCksbWUoMTksImEiLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxOZSgyMCkseWUoKSgpLG1lKDIxLCJkaXYiKSgyMiwic3BhbiIpLE5lKDIzLCJTdWJtaXQgRGF0ZToi'@;
put 'KSx5ZSgpLG1lKDI0LCJzcGFuIiwxNCksTmUoMjUpLHllKCkoKSxtZSgyNiwiZGl2IikoMjcsInNwYW4iKSxOZSgyOCwiUmV2aWV3IFN0YXR1czoiKSx5ZSgpLG1lKDI5LCJzcGFuIiwxNSksTmUoMzApLHllKCkoKSgpLG1lKDMxLCJkaXYiLDE2KSgzMiwiZGl2IiwxMikoMzMsImRpdiIsOCks'@;
put 'TmUoMzQsIkFjdGlvbnMiKSx5ZSgpKCksbWUoMzUsImRpdiIsMTcpKDM2LCJkaXYiLDE4KSgzNywiYnV0dG9uIiwxOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTmUoMzgsIiBHbyB0byBiYXNlIHRhYmxlIHNjcmVl'@;
put 'biAiKSx5ZSgpLG1lKDM5LCJidXR0b24iLDIwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksTmUoNDAsIiBHbyB0byBhcHByb3ZhbHMgc2NyZWVuICIpLHllKCksbWUoNDEsImJ1dHRvbiIsMjEpLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5nb0JhY2soKSl9KSxOZSg0MiwiIEdvIGJhY2sgdG8gZWRpdG9yICIpLHllKCksbWUoNDMsImJ1dHRvbiIsMjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguZG93bmxvYWQobnVsbD09'@;
put 'aC50YWJsZURldGFpbHM/bnVsbDpoLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpfSkscXQoNDQsImNsci1pY29uIiwyMykseWUoKSgpKCkoKSgpLG1lKDQ1LCJkaXYiLDI0KSxxdCg0NiwiaG90LXRhYmxlIiwyNSkseWUoKSxxdCg0NywiZGl2IiwyNikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUo'@;
put 'KTtDZSgxNSkscHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiIpLENlKDUpLHByKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUsIiAiKSxDZSg1KSxwcigiICIsbnVsbD09YS50YWJs'@;
put 'ZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLENlKDQpLFJlKCJuZ0NsYXNzIixRMigxMyxaR2UsIlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpLCJBUFBST1ZFRCI9'@;
put 'PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkpLENlKDEpLHByKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQsIiAiKSxDZSg5KSxSZSgiZGlzYWJsZWQiLCJBUFBS'@;
put 'T1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSxDZSg3KSxSZSgiZGF0YSIsYS5ob3RU'@;
put 'YWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5z'@;
put 'ZUtleSkoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKX19Y29uc3QgV0dlPVt7cGF0aDoiOnRhYmxlSWQiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50'@;
put 'U2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj1fLHRoaXMuc2FzU2VydmljZT1ULHRoaXMubG9hZGVkPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5z'@;
put 'OltdLGhlaWdodDo1MDAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWR8fDEvMH19c3VibWl0dGVkVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMu'@;
put 'dGFibGVfaWQpfWFwcHJvdmVUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlRGV0LyIrdGhpcy50YWJsZV9pZCl9dmlld2VyVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIit0aGlzLnRhYmxlRGV0'@;
put 'YWlscy5CQVNFX1RBQkxFKX1nb0JhY2soKXtHbi54bG1hcHMuZmluZChkPT5kLnRhcmdldERTPT09dGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSk/dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9maWxlcy8iK3RoaXMuaG90VGFibGUuZGF0YVswXS5YTE1BUF9JRCk6dGhpcy5y'@;
put 'b3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLF89dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlv'@;
put 'blBhdGgoKTt3aW5kb3cub3BlbihoK18rIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihhLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5z'@;
put 'dWJzY3JpYmUoZD0+e2EuaG90VGFibGUubGljZW5zZUtleT1kfSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPCJ1Iil7YS50YWJsZV9pZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDt0cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0'@;
put 'Q2hhbmdlSW5mbyhhLnRhYmxlX2lkKTtpZighZHx8IWQuanNwYXJhbXMpdGhyb3cgbmV3IEVycm9yKCJqc3BhcmFtcyBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7YS50YWJsZURldGFpbHM9ZC5qc3BhcmFtc1swXX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0U/aD1k'@;
put 'OmguTUVTU0FHRT1kLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNoYW5nZWluZm8iLGgpfXRyeXtsZXQgZD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5vcGVuVGFibGUoYS50YWJsZV9pZCk7aWYoIWR8fCFkLnN0YWdldGFibGUpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJTdGFnZXRhYmxlIHByb3BlcnR5IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTtsZXQgaD1kLnN0YWdldGFibGVbMF0sZj1bXSxfPVtdO2ZvcihsZXQgVyBpbiBoKWgmJmYucHVzaChXKTtmb3IobGV0IFc9MDtXPGYubGVuZ3RoO1crKylfLnB1c2goe2RhdGE6ZltXXX0pO2xldCBUPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX07YS5ob3RUYWJsZS5kYXRhPWQuc3RhZ2V0YWJsZSxhLmhvdFRhYmxlLmNvbEhlYWRlcnM9ZixhLmhvdFRhYmxlLmNvbHVtbnM9XyxhLmhvdFRhYmxlLmNlbGxzPVQsYS5sb2FkZWQ9ITAsYS5zZXRGb2N1cygpfWNhdGNoKGQpe2xldCBoPXt9'@;
put 'O2QuTUVTU0FHRXx8KGguTUVTU0FHRT1kKSxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImF1ZGl0b3JzL2dldHN0YWdldGFibGUiLGgpLGEubG9hZGVkPSExfX19KSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50'@;
put 'QnlJZCgiYXBwcm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQoYmQpLHR0KHZsKSx0dChEcyksdHQoV2wpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRl'@;
put 'ciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJd'@;
put 'LFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiXSxbMSwiY2FyZC1o'@;
put 'ZWFkZXIiLCJweS01Il0sWzEsImJhc2VUYWJsZUxpbmsiLDMsImNsaWNrIl0sWzEsIm10LTEwIl0sWzEsIm10LTEwIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1jb2wtbWQtNiIsImNhcmQtYmxvY2siXSxbMSwibXQtMjAiXSxbMSwicm93Il0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5l'@;
put 'IiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiY2xpY2siXSxbImlkIiwiYXBwcm92YWwtYnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5m'@;
put 'by1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwibWluLXctMCIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQi'@;
put 'LCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJjZWxscyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1j'@;
put 'ZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksSmUoMixVR2UsMywyLCJkaXYiLDIpLEplKDMsWUdlLDQ4LDE2LCJkaXYiLDMpLHllKCkoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLCFkLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGQubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbdWMsWmksa2EseHldLHN0eWxlczpbIi5yZWplY3RlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9LmFjY2VwdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojM2ZjNDI0O2ZvbnQtd2VpZ2h0Ojcw'@;
put 'MH0uYmFzZVRhYmxlTGlua1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLXRvcDoxMHB4O2NvbG9yOiMwMDdjYmJ9Il19KSxjfSkoKX1dO2xldCBHR2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3UsZGMuZm9yQ2hpbGQoV0dlKSxfNy5mb3JSb290KCldfSksY30pKCk7ZnVuY3Rpb24gJEdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFZpZXdlciByb3dzIGxpbWl0OiAiKSxt'@;
put 'ZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBxR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIp'@;
put 'LG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEtHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBTdGFnZSByb3dzIGxpbWl0OiAi'@;
put 'KSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFhHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBIaXN0b3J5IHJvd3MgbGltaXQ6'@;
put 'ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBKR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgU3VibWl0IHJvd3MgbGlt'@;
put 'aXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBRR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgVGFibGVzIGluIGxpYnJh'@;
put 'cnkgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBlJGUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgVmll'@;
put 'd2JveGVzIGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQpfX1mdW5jdGlvbiB0JGUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgTGluZWFnZSBk'@;
put 'YWlseSBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gbiRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiwx'@;
put 'NyksTmUoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLG1lKDIsImJ1dHRvbiIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksTmUoMywiIFJFRlJFU0ggIikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgy'@;
put 'KTtDZSgyKSxSZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiByJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtWcigwKSxKZSgxLG4kZSw0LDEsImRpdiIsMTYpLG1lKDIsImRpdiIsMTcpLE5lKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxt'@;
put 'ZSg0LCJidXR0b24iLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksTmUoNSwiIFJFRlJFU0ggIikseWUoKSgpLG1lKDYsImRpdiIsMTcpLE5lKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLG1lKDgsImJ1'@;
put 'dHRvbiIsMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSxOZSg5LCIgRE9XTkxPQUQgIikseWUoKSgpLG1lKDEwLCJkaXYiLDE3KSxOZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxtZSgxMiwiYnV0dG9u'@;
put 'IiwyMCksTmUoMTMsIiBVUERBVEUgIikseWUoKSgpLGpyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLCJTQVM5Ij09PWEuc2VydmVyVHlwZSksQ2UoMyksUmUoImNsckxvYWRpbmciLGEucmVmcmVzaGluZ0RhdGFDYXRhbG9nKX19Y29uc3QgaSRlPVt7cGF0aDoiIixj'@;
put 'b21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNpb246IjQuMTAuMiIsYXBwVmVyc2lvbjoidjYuNi4xIi5yZXBsYWNl'@;
put 'KCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6SUcoKShwYXJzZUludCgiMTcwODM0OTkxMTI3MyIpKS5mb3JtYXQoIkRELU1NTS1ZWVlZIEhIOk1NIil9LHRoaXMuaHR0cD0iaHR0cDoiPT09bG9jYXRpb24ucHJvdG9jb2wsdGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITEsdGhpcy5yZWZyZXNo'@;
put 'aW5nRGF0YUxpbmVhZ2U9ITEsdGhpcy5yZXNwb25zZT0iTm8gcmVzcG9uc2UiLHRoaXMucmVzcG9uc2VNb2RhbD0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2'@;
put 'aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLmxpY2VuY2VJbmZvPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKSx0aGlzLmVudmlyb25tZW50SW5mbz10aGlzLmFwcFNlcnZpY2UuZ2V0RW52aXJvbm1lbnRJbmZvKCksdGhpcy5lbnZpcm9ubWVudEluZm8mJih0aGlzLmVu'@;
put 'dmlyb25tZW50SW5mby5BVVRPRVhFQz1kZWNvZGVVUklDb21wb25lbnQodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpKX1uZ09uSW5pdCgpe31kb3dubG9hZENvbmZpZ3VyYXRpb24oKXtsZXQgYT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxkPWEuc2VydmVyVXJsLGg9'@;
put 'YS5hcHBMb2MsZj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGQrZisiLz9fcHJvZ3JhbT0iK2grIi9zZXJ2aWNlcy9hZG1pbi9leHBvcnRjb25maWciKX1yZWZyZXNoRGF0YUNhdGFsb2coKXt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMCx0aGlz'@;
put 'LnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaGNhdGFsb2ciLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0'@;
put 'aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITF9KX1yZWZyZXNoRGF0YUxpbmVhZ2UoKXt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaHRhYmxlbGlu'@;
put 'ZWFnZSIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0'@;
put 'aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMX0pfXBhcnNlUmVzcG9uc2UoYSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFV4KSx0dChvYSksdHQoQzApKX0s'@;
put 'Yy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTMwLHZhcnM6MzQsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgt'@;
put 'Y29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8i'@;
put 'LCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsxLCJtLTAiXSxbMSwiZGFyayJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWNlbnRlciJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYi'@;
put 'XSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJd'@;
put 'LFsiY2xhc3MiLCJhZG1pbi1hY3Rpb24iLDQsIm5nSWYiXSxbMSwiYWRtaW4tYWN0aW9uIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIl0sWyJyb3V0ZXJMaW5rIiwiL2xp'@;
put 'Y2Vuc2luZy91cGRhdGUiLDEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImg0IiwyKSxOZSgzLCJTeXN0ZW0gaW5mb3JtYXRpb24iKSx5ZSgpLHF0KDQsImhyIiwzKSxtZSg1LCJkaXYi'@;
put 'LDQpKDYsImRpdiIsNSkoNywiZGl2IikoOCwiaDYiLDYpLE5lKDksIkVudmlyb25tZW50IERldGFpbHMgIikscXQoMTAsInNwYW4iLDcpLHllKCksbWUoMTEsInAiLDYpLE5lKDEyLCIgU1lTU0lURTogIiksbWUoMTMsInNwYW4iLDcpLE5lKDE0KSx5ZSgpKCksbWUoMTUsInAiLDYpLE5lKDE2'@;
put 'LCIgU1lTU0NQTDogIiksbWUoMTcsInNwYW4iLDcpLE5lKDE4KSx5ZSgpKCksbWUoMTksInAiLDYpLE5lKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksbWUoMjEsInNwYW4iLDcpLE5lKDIyKSx5ZSgpKCksbWUoMjMsInAiLDYpLE5lKDI0LCIgU1lTVkxPTkc6ICIpLG1lKDI1LCJzcGFuIiw3'@;
put 'KSxOZSgyNikseWUoKSgpLG1lKDI3LCJwIiw2KSxOZSgyOCwiIE1FTVNJWkU6ICIpLG1lKDI5LCJzcGFuIiw3KSxOZSgzMCkseWUoKSgpLG1lKDMxLCJwIiw2KSxOZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxtZSgzMywic3BhbiIsNyksTmUoMzQpLHllKCkoKSxtZSgzNSwicCIsNiksTmUo'@;
put 'MzYsIiBTWVNIT1NUTkFNRTogIiksbWUoMzcsInNwYW4iLDcpLE5lKDM4KSx5ZSgpKCksbWUoMzksInAiLDYpLE5lKDQwLCIgU1lTSE9TVElORk9MT05HOiAiKSxtZSg0MSwic3BhbiIsNyksTmUoNDIpLHllKCkoKSxtZSg0MywicCIsNiksTmUoNDQsIiBTWVNFTkNPRElORzogIiksbWUoNDUs'@;
put 'InNwYW4iLDcpLE5lKDQ2KSx5ZSgpKCksbWUoNDcsInAiLDYpLE5lKDQ4LCIgQVVUT0VYRUM6ICIpLG1lKDQ5LCJzcGFuIiw3KSxOZSg1MCkseWUoKSgpLG1lKDUxLCJwIiw2KSxOZSg1MiwiIERDIEFETUlOIEdST1VQOiAiKSxtZSg1Mywic3BhbiIsNyksTmUoNTQpLHllKCkoKSgpLG1lKDU1'@;
put 'LCJkaXYiLDgpKDU2LCJkaXYiKSg1NywiaDYiLDYpLE5lKDU4LCIgRGF0YSBDb250cm9sbGVyIERldGFpbHMgIikscXQoNTksInNwYW4iLDcpLHllKCksbWUoNjAsInAiLDYpLE5lKDYxLCIgQXBwbGljYXRpb24gdmVyc2lvbjogIiksbWUoNjIsInNwYW4iLDcpLE5lKDYzKSx5ZSgpKCksbWUo'@;
put 'NjQsInAiLDYpLE5lKDY1LCIgQnVpbGQgdGltZXN0YW1wOiAiKSxtZSg2Niwic3BhbiIsNyksTmUoNjcpLHllKCkoKSxtZSg2OCwicCIsNiksTmUoNjksIiBBZGFwdGVyIHZlcnNpb246ICIpLG1lKDcwLCJzcGFuIiw3KSxOZSg3MSkseWUoKSgpLG1lKDcyLCJwIiw2KSxOZSg3MywiIEhUVFA6'@;
put 'ICIpLG1lKDc0LCJzcGFuIiw3KSxOZSg3NSkseWUoKSgpKCkoKSxtZSg3NiwiZGl2IikoNzcsImg2Iiw2KSxOZSg3OCwiTGljZW5jZSBkZXRhaWxzICIpLHF0KDc5LCJzcGFuIiw3KSx5ZSgpLG1lKDgwLCJwIiw2KSxOZSg4MSwiIFZhbGlkIHVudGlsOiAiKSxtZSg4Miwic3BhbiIsNyksTmUo'@;
put 'ODMpLHllKCkoKSxtZSg4NCwicCIsNiksTmUoODUsIiBVc2VycyBhbGxvd2VkOiAiKSxtZSg4Niwic3BhbiIsNyksTmUoODcpLHllKCkoKSxtZSg4OCwicCIsNiksTmUoODksIiBTaXRlIElEczogIiksbWUoOTAsInNwYW4iLDcpLE5lKDkxKSx5ZSgpKCksbWUoOTIsInAiLDYpLE5lKDkzLCIg'@;
put 'RnJlZSBUaWVyOiAiKSxtZSg5NCwic3BhbiIsNyksTmUoOTUpLHllKCkoKSxKZSg5NiwkR2UsNCwxLCJwIiw5KSxKZSg5NyxxR2UsNCwxLCJwIiw5KSxKZSg5OCxLR2UsNCwxLCJwIiw5KSxKZSg5OSxYR2UsNCwxLCJwIiw5KSxKZSgxMDAsSkdlLDQsMSwicCIsOSksSmUoMTAxLFFHZSw0LDEs'@;
put 'InAiLDkpLEplKDEwMixlJGUsNCwxLCJwIiw5KSxKZSgxMDMsdCRlLDQsMSwicCIsOSksbWUoMTA0LCJwIiw2KSxOZSgxMDUsIiBWaWV3Ym94ZXM6ICIpLG1lKDEwNiwic3BhbiIsNyksTmUoMTA3KSx5ZSgpKCksbWUoMTA4LCJwIiw2KSxOZSgxMDksIiBGaWxlIFVwbG9hZDogIiksbWUoMTEw'@;
put 'LCJzcGFuIiw3KSxOZSgxMTEpLHllKCkoKSxtZSgxMTIsInAiLDYpLE5lKDExMywiIEVkaXQgcmVjb3JkOiAiKSxtZSgxMTQsInNwYW4iLDcpLE5lKDExNSkseWUoKSgpLG1lKDExNiwicCIsNiksTmUoMTE3LCIgQWRkIHJlY29yZDogIiksbWUoMTE4LCJzcGFuIiw3KSxOZSgxMTkpLHllKCko'@;
put 'KSgpKCkscXQoMTIwLCJociIsMyksSmUoMTIxLHIkZSwxNCwyLCJuZy1jb250YWluZXIiLDEwKSx5ZSgpKCkoKSxtZSgxMjIsImNsci1tb2RhbCIsMTEpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlc3BvbnNlTW9kYWw9Zn0pLG1lKDEyMywiaDMiLDEy'@;
put 'KSxOZSgxMjQsIlJlc3BvbnNlIikseWUoKSxtZSgxMjUsImRpdiIsMTMpLE5lKDEyNikseWUoKSxtZSgxMjcsImRpdiIsMTQpKDEyOCwiYnV0dG9uIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlc3BvbnNlTW9kYWw9ITF9KSxOZSgxMjksIiBPayAiKSx5ZSgpKCkoKSks'@;
put 'MiZhJiYoQ2UoMTQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50'@;
put 'SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudElu'@;
put 'Zm8uTUVNU0laRSksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksQ2UoNCksb3IobnVs'@;
put 'bD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNIT1NUSU5GT0xPTkcpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTRU5DT0RJTkcpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251'@;
put 'bGw6ZC5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uRENfQURNSU5fR1JPVVApLENlKDkpLG9yKGQuYXBwSW5mby5hcHBWZXJzaW9uKSxDZSg0KSxvcihkLmFwcEluZm8uYnVpbGRUaW1lc3Rh'@;
put 'bXApLENlKDQpLG9yKGQuYXBwSW5mby5hZGFwdGVyVmVyc2lvbiksQ2UoNCksb3IoZC5odHRwPyJZRVMiOiJOTyIpLENlKDgpLG9yKG51bGw9PWQubGljZW5jZUluZm8/bnVsbDpkLmxpY2VuY2VJbmZvLnZhbGlkX3VudGlsKSxDZSg0KSxvcihudWxsPT1kLmxpY2VuY2VJbmZvP251bGw6ZC5s'@;
put 'aWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxDZSg0KSxvcihudWxsPT1kLmxpY2VuY2VJbmZvP251bGw6ZC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxDZSg0KSxvcihudWxsIT1kLmxpY2VuY2VJbmZvJiZkLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksQ2UoMSksUmUoIm5n'@;
put 'SWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1'@;
put 'ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1k'@;
put 'LkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1kLkluZmluaXR5KSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lm'@;
put 'IixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8iWUVTIjoiTk8iKSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1ZS5maWxlVXBsb2FkPyJZRVMiOiJOTyIpLENlKDQp'@;
put 'LG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQ/IllFUyI6Ik5PIiksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUuYWRkUmVjb3JkPyJZRVMiOiJOTyIpLENlKDIpLFJlKCJuZ0lmIiwxPT09KG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudElu'@;
put 'Zm8uSVNBRE1JTikpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQucmVzcG9uc2VNb2RhbCksQ2UoNCkscHIoIiAiLGQucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbWmksQnUsb3Usc3UsWnUsZGhdLHN0eWxlczpbIi5jb250ZW50LWJveFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdp'@;
put 'ZHRoOjEyODlweH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGRpdltfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKDIpe21hcmdpbjowIDMwcHh9LmFkbWluLWFjdGlv'@;
put 'bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJnaW4tYm90dG9tOjVweH0uYWRt'@;
put 'aW4tYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMnB4fS5kYXJrW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfUBtZWRpYSAobWF4LXdpZHRoOiA5OTNweCl7LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IGRpdltfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKDIpe21hcmdpbjowfS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4IDB9fSJdfSksY30pKCl9XTtsZXQgbyRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKGkkZSksZGNdfSksY30pKCkscyRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLG8kZSxfdV19KSxjfSkoKTtmdW5jdGlvbiBhJGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gbCRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu'@;
put 'KCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixqdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gYyRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo'@;
put 'MCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZ3JvdXBTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZ3JvdXBMaXN0'@;
put 'T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsYSRlLDEsMCwiY2xyLWljb24iLDEwKSxKZSg1LGwkZSwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQuZ3JvdXBTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZh'@;
put 'bHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHUkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDty'@;
put 'ZXR1cm4ganQoVmUoKS5ncm91cE9uQ2xpY2soaCkpfSksbWUoMSwicCIsMTYpLHF0KDIsImNsci1pY29uIiwxNyksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInRhYmxlLWFjdGl2ZSIsYS5HUk9VUFVSST09PWQuZ3JvdXBVcmkpLENlKDMp'@;
put 'LHByKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBkJGUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLHUkZSw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxqcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGgkZShj'@;
put 'LGwpezEmYyYmKG1lKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIGYkZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSko'@;
put 'NiwicCIsMjYpKDcsImIiKSxOZSg4KSx5ZSgpKCkoKSgpLG1lKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxOZSgxMikseWUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLG9yKGEuZ3JvdXBOYW1lKSxDZSg0KSxvcihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0'@;
put 'aW9uIil9fWZ1bmN0aW9uIHAkZShjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTWVtYmVycyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gZyRlKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwidGQiLDMxKSgyLCJiIiksTmUoMywiTkFNRSIpLHllKCkoKSxtZSg0LCJ0ZCIsMzEpKDUsImIi'@;
put 'KSxOZSg2LCJFTUFJTCIpLHllKCkoKSxtZSg3LCJ0ZCIsMzEpKDgsImIiKSxOZSg5LCJDUkVBVEVEIikseWUoKSgpLG1lKDEwLCJ0ZCIsMzIpKDExLCJiIiksTmUoMTIsIlVQREFURUQiKSx5ZSgpKCksanIoKSl9ZnVuY3Rpb24gbSRlKGMsbCl7MSZjJiYoVnIoMCksbWUoMSwidGQiLDMxKSgy'@;
put 'LCJiIiksTmUoMywiSUQiKSx5ZSgpKCksbWUoNCwidGQiLDMxKSg1LCJiIiksTmUoNiwiRElTUExBWSBOQU1FIikseWUoKSgpLG1lKDcsInRkIiwzMSkoOCwiYiIpLE5lKDksIlVTRVIgTkFNRSIpLHllKCkoKSxqcigpKX1mdW5jdGlvbiB2JGUoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJ0'@;
put 'ZCIsMzIpLE5lKDIpLHllKCksbWUoMywidGQiLDMyKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwzMiksTmUoNikseWUoKSxtZSg3LCJ0ZCIsMzIpLE5lKDgpLHllKCksanIoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLG9yKGEuTUVNQkVSTkFNRSksQ2UoMiksb3IoYS5FTUFJ'@;
put 'TCksQ2UoMiksb3IoYS5NRU1CRVJDUkVBVEVEKSxDZSgyKSxvcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBfJGUoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJ0ZCIsMzIpLE5lKDIpLHllKCksbWUoMywidGQiLDMyKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwzMiksTmUoNikseWUoKSxq'@;
put 'cigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksb3IoYS5JRCksQ2UoMiksb3IoYS5ESVNQTEFZTkFNRSksQ2UoMiksb3IoYS5VU0VSTkFNRSl9fWZ1bmN0aW9uIGIkZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiwzMyksSmUoMSx2JGUsOSw0LCJuZy1jb250YWluZXIiLDUp'@;
put 'LEplKDIsXyRlLDcsMywibmctY29udGFpbmVyIiw1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSg0KTtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIisoYS5VUklNRU18fGEuSUQpKSxDZSgxKSxSZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2'@;
put 'ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzanMpfX1mdW5jdGlvbiB5JGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSxKZSgzLGckZSwxMywwLCJuZy1jb250YWluZXIiLDUpLEplKDQs'@;
put 'bSRlLDEwLDAsIm5nLWNvbnRhaW5lciIsNSkseWUoKSgpLG1lKDUsInRib2R5IiksSmUoNixiJGUsMywzLCJ0ciIsMzApLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEu'@;
put 'c2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksQ2UoMiksUmUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gdyRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLEplKDMscCRlLDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjcpLEpl'@;
put 'KDUseSRlLDcsMywidGFibGUiLDI4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxwcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS5ncm91cE1lbWJlckNvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5ncm91cE1lbWJl'@;
put 'ckNvdW50KX19ZnVuY3Rpb24gQyRlKGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBTJGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIsMzMpKDEsInRkIiwzMiksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj'@;
put 'aXQ7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrYS5NRU1CRVJJRCksQ2UoMiksb3IoYS5NRU1CRVJOQU1FKX19ZnVuY3Rpb24gTSRlKGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiKSg0LCJiIiksTmUoNSkseWUo'@;
put 'KSgpKCkoKSxtZSg2LCJ0Ym9keSIpLEplKDcsUyRlLDMsMiwidHIiLDMwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSg1KSxwcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiB4JGUo'@;
put 'YyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksSmUoMyxDJGUsMiwwLCJoNSIsNSksbWUoNCwiZGl2IiwyNyksSmUoNSxNJGUsOCwyLCJ0YWJsZSIsMjgpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLG9yKGEuZ3JvdXBOYW1lKSxDZSgxKSxSZSgi'@;
put 'bmdJZiIsMD09YS5ncm91cE1lbWJlckNvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24gRSRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSxmJGUsMTMsMiwiZGl2IiwyMCksbWUoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikoNCwiZGl2'@;
put 'IiwyMyksSmUoNSx3JGUsNiwzLCJkaXYiLDUpLEplKDYseCRlLDYsMywiZGl2Iiw1KSxxdCg3LCJiciIpLHllKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksQ2UoNCksUmUoIm5nSWYiLGEuc2Vy'@;
put 'dmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1sZXQgZWFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZp'@;
put 'Y2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPV8sdGhpcy5ncm91cFNlYXJjaD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMuZ3JvdXBVcmk9IiIsdGhpcy5ncm91cE5hbWU9IiIsdGhpcy5ncm91cERlc2M9IiIsdGhpcy5z'@;
put 'YXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5sb2FkaW5nPSExLHRoaXMuU2VydmVyVHlwZT1aYy5ELHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5n'@;
put 'ZXRTZXJ2ZXJUeXBlKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9ncm91cHMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFy'@;
put 'YW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxHbi51c2VybmF2Lmdyb3VwTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLmdyb3Vwcz1Hbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2Vh'@;
put 'cmNoPUduLnVzZXJuYXYuZ3JvdXBTZWFyY2gpOih2b2lkIDA9PT1Hbi51c2VybmF2Lmdyb3VwTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0Fj'@;
put 'Y2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtHUk9VUFVSSTpmLmlkLEdST1VQTkFNRTpmLm5hbWUsR1JPVVBERVNDOmYuZGVzY3JpcHRpb259KSk7dGhpcy5sb2FkaW5nPSExLHRo'@;
put 'aXMuZ3JvdXBzPWgsR24udXNlcm5hdi5ncm91cExpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Z3JvdXBzIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9YS5ncm91cHMsR24udXNlcm5hdi5ncm91cExpc3Q9YS5ncm91cHN9KSk6'@;
put 'KHRoaXMuZ3JvdXBzPUduLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9R24udXNlcm5hdi5ncm91cFNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQmJih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0'@;
put 'aWVzL2dyb3Vwcy8iK3RoaXMucGFyYW1VUkkrIi9tZW1iZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPUpTT04ucGFyc2UoYSk7dGhpcy5sb2FkaW5nPSExO2xldCBoPWQuaXRlbXMu'@;
put 'bWFwKGY9Pih7TUVNQkVSTkFNRTpmLm5hbWUsTUVNQkVSSUQ6Zi5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz1oLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1oLmxlbmd0aCx0aGlzLmdyb3VwVXJpPXRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSX0pOnRoaXMuc2FzU2Vy'@;
put 'dmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDp0aGlzLnBhcmFtVVJJfV19KS50aGVuKGQ9Pnt0aGlzLmdyb3VwTWVtYmVycz1kLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWQuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAw'@;
put 'IT09ZC5zYXNtZW1iZXJzWzBdJiYodGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9ZC5zYXNtZW1iZXJzWzBdLlVSSU1FTXx8dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT1kLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuc2FzbWVtYmVyc1swXS5HUk9V'@;
put 'UERFU0MsdGhpcy5ncm91cE5hbWV8fCh0aGlzLmdyb3VwTmFtZT10aGlzLnBhcmFtVVJJKSl9KSkpfWdyb3VwTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmdyb3Vwcyx0aGlzLmdyb3VwU2VhcmNoLCJHUk9VUE5BTUUiKSxHbi51c2VybmF2'@;
put 'Lmdyb3VwU2VhcmNoPXRoaXMuZ3JvdXBTZWFyY2h9Z3JvdXBPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2Vu'@;
put 'Y29kZVVSSShhLkdST1VQVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIithLkdST1VQVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0'@;
put 'OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWEuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9YS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9YS5HUk9VUERFU0M7'@;
put 'bGV0IF89Zi5pdGVtcy5tYXAoVD0+KHtNRU1CRVJOQU1FOlQubmFtZSxNRU1CRVJJRDpULmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPV8sdGhpcy5ncm91cE1lbWJlckNvdW50PV8ubGVuZ3RofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7'@;
put 'aXdhbnQ6W3tncm91cGlkOmEuR1JPVVBVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWEuR1JPVVBVUkksdGhpcy5ncm91cE5hbWU9YS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9YS5HUk9VUERFU0MsdGhpcy5ncm91cE1lbWJlcnM9Zi5zYXNtZW1iZXJz'@;
put 'LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1mLnNhc21lbWJlcnMubGVuZ3RofSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dChUYyksdHQoRHMpLHR0KEpkKSx0dChXbCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpb'@;
put 'WyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEi'@;
put 'XSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IEdyb3VwcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21w'@;
put 'bGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFw'@;
put 'ZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VycyJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0s'@;
put 'WyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsImdyb3VwLWRhdGEiXSxbMSwidGFibGUiLCJncm91cC1pbmZvIl0sWzEsImxlZnQiXSxbMSwiZ3JvdXAtaW5mby10ZXh0Il0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsi'@;
put 'Y2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApKDEsImNsci10cmVlIiksSmUoMixjJGUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxKZSgzLGQkZSwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUoKSgpLG1lKDQsImRpdiIsMyksSmUoNSxoJGUsMywwLCJkaXYiLDQpLEplKDYsRSRlLDgsMywiZGl2'@;
put 'Iiw1KSx5ZSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsZC5ncm91cHMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmdyb3VwcyksQ2UoMiksUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZ3JvdXBNZW1iZXJzJiYhZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeHMsWmks'@;
put 'QnUsV2EsQnMsT3MsZGQsZzEsa2EsZjEsbjNdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9Lmdyb3VwLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9Lmdyb3VwLWluZm9bX25n'@;
put 'Y29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30uZ3JvdXAtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17dGV4dC1hbGlnbjpjZW50ZXJ9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30uZ3JvdXAtZGF0YVtfbmdj'@;
put 'b250ZW50LSVDT01QJV17bWluLWhlaWdodDphdXRvfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ncm91'@;
put 'cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'dGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVd'@;
put 'e21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pLGN9KSgpO2Z1bmN0aW9uIGskZSgpe31mdW5jdGlvbiB5VShjKXtyZXR1cm4gbnVsbD09Yz9rJGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGMpfX1mdW5jdGlvbiB0YWUoYyl7cmV0dXJuIG51bGw9PWM/W106'@;
put 'QXJyYXkuaXNBcnJheShjKT9jOkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gVCRlKCl7cmV0dXJuW119ZnVuY3Rpb24gbmFlKGMpe3JldHVybiBudWxsPT1jP1QkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fWZ1bmN0aW9uIHJhZShjKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGMpfX1mdW5jdGlvbiBpYWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLm1hdGNoZXMoYyl9fXZhciBMJGU9QXJyYXkucHJvdG90eXBlLmZpbmQ7ZnVuY3Rpb24gTyRlKCl7cmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGR9dmFyIEYk'@;
put 'ZT1BcnJheS5wcm90b3R5cGUuZmlsdGVyO2Z1bmN0aW9uIEgkZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pfWZ1bmN0aW9uIG9hZShjKXtyZXR1cm4gbmV3IEFycmF5KGMubGVuZ3RoKX1mdW5jdGlvbiBvVChjLGwpe3RoaXMub3duZXJEb2N1bWVudD1jLm93bmVyRG9jdW1l'@;
put 'bnQsdGhpcy5uYW1lc3BhY2VVUkk9Yy5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1jLHRoaXMuX19kYXRhX189bH1mdW5jdGlvbiBVJGUoYyxsLGEsZCxoLGYpe2Zvcih2YXIgVCxfPTAsVz1sLmxlbmd0aCxpZT1mLmxlbmd0aDtfPGllOysrXykoVD1sW19dKT8o'@;
put 'VC5fX2RhdGFfXz1mW19dLGRbX109VCk6YVtfXT1uZXcgb1QoYyxmW19dKTtmb3IoO188VzsrK18pKFQ9bFtfXSkmJihoW19dPVQpfWZ1bmN0aW9uIFokZShjLGwsYSxkLGgsZixfKXt2YXIgVCxXLFplLGllPW5ldyBNYXAscGU9bC5sZW5ndGgsd2U9Zi5sZW5ndGgsRWU9bmV3IEFycmF5KHBl'@;
put 'KTtmb3IoVD0wO1Q8cGU7KytUKShXPWxbVF0pJiYoRWVbVF09WmU9Xy5jYWxsKFcsVy5fX2RhdGFfXyxULGwpKyIiLGllLmhhcyhaZSk/aFtUXT1XOmllLnNldChaZSxXKSk7Zm9yKFQ9MDtUPHdlOysrVClaZT1fLmNhbGwoYyxmW1RdLFQsZikrIiIsKFc9aWUuZ2V0KFplKSk/KGRbVF09VyxX'@;
put 'Ll9fZGF0YV9fPWZbVF0saWUuZGVsZXRlKFplKSk6YVtUXT1uZXcgb1QoYyxmW1RdKTtmb3IoVD0wO1Q8cGU7KytUKShXPWxbVF0pJiZpZS5nZXQoRWVbVF0pPT09VyYmKGhbVF09Vyl9ZnVuY3Rpb24gWSRlKGMpe3JldHVybiBjLl9fZGF0YV9ffWZ1bmN0aW9uIEckZShjKXtyZXR1cm4ib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGMmJiJsZW5ndGgiaW4gYz9jOkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gUSRlKGMsbCl7cmV0dXJuIGM8bD8tMTpjPmw/MTpjPj1sPzA6TmFOfW9ULnByb3RvdHlwZT17Y29uc3RydWN0b3I6b1QsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVu'@;
put 'dC5pbnNlcnRCZWZvcmUoYyx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyxsKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoYyl9LHF1ZXJ5'@;
put 'U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGMpfX07dmFyIHdVPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBzYWU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOndVLHhsaW5rOiJo'@;
put 'dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gc1QoYyl7dmFyIGw9Yys9IiIsYT1sLmluZGV4T2YoIjoiKTtyZXR1cm4gYT49'@;
put 'MCYmInhtbG5zIiE9PShsPWMuc2xpY2UoMCxhKSkmJihjPWMuc2xpY2UoYSsxKSksc2FlLmhhc093blByb3BlcnR5KGwpP3tzcGFjZTpzYWVbbF0sbG9jYWw6Y306Y31mdW5jdGlvbiBzcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIGFx'@;
put 'ZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIGxxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGMsbCl9fWZ1bmN0aW9uIGNxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXMu'@;
put 'c2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwpfX1mdW5jdGlvbiB1cWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpOnRoaXMuc2V0QXR0cmlidXRlKGMsYSl9fWZ1bmN0aW9u'@;
put 'IGRxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGEpfX1mdW5jdGlvbiBhYWUoYyl7cmV0'@;
put 'dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxjLmRvY3VtZW50JiZjfHxjLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpfX1mdW5jdGlvbiBwcWUoYyxsLGEpe3Jl'@;
put 'dHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLGEpfX1mdW5jdGlvbiBncWUoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBkPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWQ/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKTp0aGlzLnN0eWxlLnNl'@;
put 'dFByb3BlcnR5KGMsZCxhKX19ZnVuY3Rpb24gWTcoYyxsKXtyZXR1cm4gYy5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGwpfHxhYWUoYykuZ2V0Q29tcHV0ZWRTdHlsZShjLG51bGwpLmdldFByb3BlcnR5VmFsdWUobCl9ZnVuY3Rpb24gdnFlKGMpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0'@;
put 'aGlzW2NdfX1mdW5jdGlvbiBfcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2NdPWx9fWZ1bmN0aW9uIGJxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/ZGVsZXRlIHRoaXNbY106dGhpc1tjXT1hfX1mdW5jdGlvbiBs'@;
put 'YWUoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIENVKGMpe3JldHVybiBjLmNsYXNzTGlzdHx8bmV3IGNhZShjKX1mdW5jdGlvbiBjYWUoYyl7dGhpcy5fbm9kZT1jLHRoaXMuX25hbWVzPWxhZShjLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9u'@;
put 'IHVhZShjLGwpe2Zvcih2YXIgYT1DVShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEuYWRkKGxbZF0pfWZ1bmN0aW9uIGRhZShjLGwpe2Zvcih2YXIgYT1DVShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEucmVtb3ZlKGxbZF0pfWZ1bmN0aW9uIHdxZShjKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'KXt1YWUodGhpcyxjKX19ZnVuY3Rpb24gQ3FlKGMpe3JldHVybiBmdW5jdGlvbigpe2RhZSh0aGlzLGMpfX1mdW5jdGlvbiBTcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXsobC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/dWFlOmRhZSkodGhpcyxjKX19ZnVuY3Rpb24geHFlKCl7dGhpcy50ZXh0'@;
put 'Q29udGVudD0iIn1mdW5jdGlvbiBFcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1jfX1mdW5jdGlvbiBrcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19ZnVuY3Rpb24gVHFl'@;
put 'KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gRHFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWN9fWZ1bmN0aW9uIElxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1sPz8iIn19ZnVuY3Rp'@;
put 'b24gUnFlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIFBxZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0'@;
put 'aW9uIEhxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLm93bmVyRG9jdW1lbnQsYT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gYT09PXdVJiZsLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT13VT9sLmNyZWF0ZUVsZW1lbnQoYyk6bC5jcmVhdGVFbGVtZW50TlMoYSxj'@;
put 'KX19ZnVuY3Rpb24gTnFlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIGhhZShjKXt2YXIgbD1zVChjKTtyZXR1cm4obC5sb2NhbD9OcWU6SHFlKShsKX1mdW5jdGlvbiBCcWUo'@;
put 'KXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6cWUoKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7YyYmYy5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBacWUoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMSksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5l'@;
put 'eHRTaWJsaW5nKTpjfWZ1bmN0aW9uIFlxZSgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCEwKSxsPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gS3FlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMuX19v'@;
put 'bjtpZihsKXtmb3IodmFyIGYsYT0wLGQ9LTEsaD1sLmxlbmd0aDthPGg7KythKWY9bFthXSxjLnR5cGUmJmYudHlwZSE9PWMudHlwZXx8Zi5uYW1lIT09Yy5uYW1lP2xbKytkXT1mOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLnR5cGUsZi5saXN0ZW5lcixmLm9wdGlvbnMpOysrZD9sLmxl'@;
put 'bmd0aD1kOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBYcWUoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBoLGQ9dGhpcy5fX29uLGY9ZnVuY3Rpb24gJHFlKGMpe3JldHVybiBmdW5jdGlvbihsKXtjLmNhbGwodGhpcyxsLHRoaXMuX19kYXRhX18pfX0obCk7aWYoZClmb3IodmFy'@;
put 'IF89MCxUPWQubGVuZ3RoO188VDsrK18paWYoKGg9ZFtfXSkudHlwZT09PWMudHlwZSYmaC5uYW1lPT09Yy5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXIsaC5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVu'@;
put 'ZXI9ZixoLm9wdGlvbnM9YSksdm9pZChoLnZhbHVlPWwpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihjLnR5cGUsZixhKSxoPXt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSx2YWx1ZTpsLGxpc3RlbmVyOmYsb3B0aW9uczphfSxkP2QucHVzaChoKTp0aGlzLl9fb249W2hdfX1mdW5jdGlvbiBmYWUo'@;
put 'YyxsLGEpe3ZhciBkPWFhZShjKSxoPWQuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGg/aD1uZXcgaChsLGEpOihoPWQuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYT8oaC5pbml0RXZlbnQobCxhLmJ1YmJsZXMsYS5jYW5jZWxhYmxlKSxoLmRldGFpbD1hLmRldGFpbCk6'@;
put 'aC5pbml0RXZlbnQobCwhMSwhMSkpLGMuZGlzcGF0Y2hFdmVudChoKX1mdW5jdGlvbiBRcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZmFlKHRoaXMsYyxsKX19ZnVuY3Rpb24gZUtlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZhZSh0aGlzLGMsbC5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cykpfX1jYWUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYyl7dGhpcy5fbmFtZXMuaW5kZXhPZihjKTwwJiYodGhpcy5fbmFtZXMucHVzaChjKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24o'@;
put 'Yyl7dmFyIGw9dGhpcy5fbmFtZXMuaW5kZXhPZihjKTtsPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGwsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4'@;
put 'T2YoYyk+PTB9fTt2YXIgU1U9W251bGxdO2Z1bmN0aW9uIFh1KGMsbCl7dGhpcy5fZ3JvdXBzPWMsdGhpcy5fcGFyZW50cz1sfWZ1bmN0aW9uIHBhZSgpe3JldHVybiBuZXcgWHUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxTVSl9WHUucHJvdG90eXBlPXBhZS5wcm90b3R5cGU9e2Nv'@;
put 'bnN0cnVjdG9yOlh1LHNlbGVjdDpmdW5jdGlvbiBBJGUoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXlVKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBXLGllLGY9bFtoXSxfPWYubGVuZ3RoLFQ9ZFto'@;
put 'XT1uZXcgQXJyYXkoXykscGU9MDtwZTxfOysrcGUpKFc9ZltwZV0pJiYoaWU9Yy5jYWxsKFcsVy5fX2RhdGFfXyxwZSxmKSkmJigiX19kYXRhX18iaW4gVyYmKGllLl9fZGF0YV9fPVcuX19kYXRhX18pLFRbcGVdPWllKTtyZXR1cm4gbmV3IFh1KGQsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFs'@;
put 'bDpmdW5jdGlvbiBJJGUoYyl7Yz0iZnVuY3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiBEJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRhZShjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fShjKTpuYWUoYyk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9W10saD1b'@;
put 'XSxmPTA7ZjxhOysrZilmb3IodmFyIFcsXz1sW2ZdLFQ9Xy5sZW5ndGgsaWU9MDtpZTxUOysraWUpKFc9X1tpZV0pJiYoZC5wdXNoKGMuY2FsbChXLFcuX19kYXRhX18saWUsXykpLGgucHVzaChXKSk7cmV0dXJuIG5ldyBYdShkLGgpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbiBQJGUoYyl7cmV0'@;
put 'dXJuIHRoaXMuc2VsZWN0KG51bGw9PWM/TyRlOmZ1bmN0aW9uIFIkZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTCRlLmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6aWFlKGMpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uIFYkZShjKXtyZXR1'@;
put 'cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09Yz9IJGU6ZnVuY3Rpb24gTiRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGJGUuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzppYWUoYykpKX0sZmlsdGVyOmZ1bmN0aW9uIEIkZShjKXsiZnVuY3Rpb24i'@;
put 'IT10eXBlb2YgYyYmKGM9cmFlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBXLGY9bFtoXSxfPWYubGVuZ3RoLFQ9ZFtoXT1bXSxpZT0wO2llPF87KytpZSkoVz1mW2llXSkmJmMuY2FsbChXLFcuX19kYXRh'@;
put 'X18saWUsZikmJlQucHVzaChXKTtyZXR1cm4gbmV3IFh1KGQsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24gVyRlKGMsbCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEFycmF5LmZyb20odGhpcyxZJGUpO3ZhciBhPWw/WiRlOlUkZSxkPXRoaXMuX3BhcmVudHMsaD10aGlzLl9n'@;
put 'cm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWZ1bmN0aW9uIHokZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY319KGMpKTtmb3IodmFyIGY9aC5sZW5ndGgsXz1uZXcgQXJyYXkoZiksVD1uZXcgQXJyYXkoZiksVz1uZXcgQXJyYXkoZiksaWU9MDtpZTxmOysraWUpe3ZhciBw'@;
put 'ZT1kW2llXSx3ZT1oW2llXSxFZT13ZS5sZW5ndGgsWmU9RyRlKGMuY2FsbChwZSxwZSYmcGUuX19kYXRhX18saWUsZCkpLGl0PVplLmxlbmd0aCxldD1UW2llXT1uZXcgQXJyYXkoaXQpLHl0PV9baWVdPW5ldyBBcnJheShpdCk7YShwZSx3ZSxldCx5dCxXW2llXT1uZXcgQXJyYXkoRWUpLFpl'@;
put 'LGwpO2Zvcih2YXIgbm4sdm4sU3Q9MCxKdD0wO1N0PGl0OysrU3QpaWYobm49ZXRbU3RdKXtmb3IoU3Q+PUp0JiYoSnQ9U3QrMSk7ISh2bj15dFtKdF0pJiYrK0p0PGl0Oyk7bm4uX25leHQ9dm58fG51bGx9fXJldHVybihfPW5ldyBYdShfLGQpKS5fZW50ZXI9VCxfLl9leGl0PVcsX30sZW50'@;
put 'ZXI6ZnVuY3Rpb24gaiRlKCl7cmV0dXJuIG5ldyBYdSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChvYWUpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uICQkZSgpe3JldHVybiBuZXcgWHUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChvYWUpLHRoaXMuX3BhcmVudHMp'@;
put 'fSxqb2luOmZ1bmN0aW9uIHEkZShjLGwsYSl7dmFyIGQ9dGhpcy5lbnRlcigpLGg9dGhpcyxmPXRoaXMuZXhpdCgpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjPyhkPWMoZCkpJiYoZD1kLnNlbGVjdGlvbigpKTpkPWQuYXBwZW5kKGMrIiIpLG51bGwhPWwmJihoPWwoaCkpJiYoaD1oLnNl'@;
put 'bGVjdGlvbigpKSxudWxsPT1hP2YucmVtb3ZlKCk6YShmKSxkJiZoP2QubWVyZ2UoaCkub3JkZXIoKTpofSxtZXJnZTpmdW5jdGlvbiBLJGUoYyl7Zm9yKHZhciBsPWMuc2VsZWN0aW9uP2Muc2VsZWN0aW9uKCk6YyxhPXRoaXMuX2dyb3VwcyxkPWwuX2dyb3VwcyxoPWEubGVuZ3RoLF89TWF0'@;
put 'aC5taW4oaCxkLmxlbmd0aCksVD1uZXcgQXJyYXkoaCksVz0wO1c8XzsrK1cpZm9yKHZhciBaZSxpZT1hW1ddLHBlPWRbV10sd2U9aWUubGVuZ3RoLEVlPVRbV109bmV3IEFycmF5KHdlKSxpdD0wO2l0PHdlOysraXQpKFplPWllW2l0XXx8cGVbaXRdKSYmKEVlW2l0XT1aZSk7Zm9yKDtXPGg7'@;
put 'KytXKVRbV109YVtXXTtyZXR1cm4gbmV3IFh1KFQsdGhpcy5fcGFyZW50cyl9LHNlbGVjdGlvbjpmdW5jdGlvbiByS2UoKXtyZXR1cm4gdGhpc30sb3JkZXI6ZnVuY3Rpb24gWCRlKCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPS0xLGE9Yy5sZW5ndGg7KytsPGE7KWZvcih2YXIgXyxkPWNb'@;
put 'bF0saD1kLmxlbmd0aC0xLGY9ZFtoXTstLWg+PTA7KShfPWRbaF0pJiYoZiYmNF5fLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGYpJiZmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF8sZiksZj1fKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbiBKJGUoYyl7ZnVuY3Rpb24gbCh3ZSxFZSl7'@;
put 'cmV0dXJuIHdlJiZFZT9jKHdlLl9fZGF0YV9fLEVlLl9fZGF0YV9fKTohd2UtIUVlfWN8fChjPVEkZSk7Zm9yKHZhciBhPXRoaXMuX2dyb3VwcyxkPWEubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7KytmKXtmb3IodmFyIGllLF89YVtmXSxUPV8ubGVuZ3RoLFc9aFtmXT1uZXcgQXJy'@;
put 'YXkoVCkscGU9MDtwZTxUOysrcGUpKGllPV9bcGVdKSYmKFdbcGVdPWllKTtXLnNvcnQobCl9cmV0dXJuIG5ldyBYdShoLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24gZXFlKCl7dmFyIGM9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxjLmFwcGx5'@;
put 'KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbiB0cWUoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzKX0sbm9kZTpmdW5jdGlvbiBucWUoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciBkPWNbbF0saD0wLGY9ZC5sZW5ndGg7'@;
put 'aDxmOysraCl7dmFyIF89ZFtoXTtpZihfKXJldHVybiBffXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uIHJxZSgpe2xldCBjPTA7Zm9yKGNvbnN0IGwgb2YgdGhpcykrK2M7cmV0dXJuIGN9LGVtcHR5OmZ1bmN0aW9uIGlxZSgpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbiBv'@;
put 'cWUoYyl7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPTAsZD1sLmxlbmd0aDthPGQ7KythKWZvcih2YXIgVCxoPWxbYV0sZj0wLF89aC5sZW5ndGg7ZjxfOysrZikoVD1oW2ZdKSYmYy5jYWxsKFQsVC5fX2RhdGFfXyxmLGgpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uIGhxZShjLGwpe3Zh'@;
put 'ciBhPXNUKGMpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGQ9dGhpcy5ub2RlKCk7cmV0dXJuIGEubG9jYWw/ZC5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpOmQuZ2V0QXR0cmlidXRlKGEpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWw/YS5sb2NhbD9hcWU6c3FlOiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBsP2EubG9jYWw/ZHFlOnVxZTphLmxvY2FsP2NxZTpscWUpKGEsbCkpfSxzdHlsZTpmdW5jdGlvbiBtcWUoYyxsLGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1sP2ZxZToiZnVuY3Rpb24iPT10eXBlb2YgbD9ncWU6cHFlKShjLGws'@;
put 'YT8/IiIpKTpZNyh0aGlzLm5vZGUoKSxjKX0scHJvcGVydHk6ZnVuY3Rpb24geXFlKGMsbCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/dnFlOiJmdW5jdGlvbiI9PXR5cGVvZiBsP2JxZTpfcWUpKGMsbCkpOnRoaXMubm9kZSgpW2NdfSxjbGFzc2VkOmZ1'@;
put 'bmN0aW9uIE1xZShjLGwpe3ZhciBhPWxhZShjKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgZD1DVSh0aGlzLm5vZGUoKSksaD0tMSxmPWEubGVuZ3RoOysraDxmOylpZighZC5jb250YWlucyhhW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgbD9TcWU6bD93cWU6Q3FlKShhLGwpKX0sdGV4dDpmdW5jdGlvbiBBcWUoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/eHFlOigiZnVuY3Rpb24iPT10eXBlb2YgYz9rcWU6RXFlKShjKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9'@;
put 'LGh0bWw6ZnVuY3Rpb24gTHFlKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP1RxZTooImZ1bmN0aW9uIj09dHlwZW9mIGM/SXFlOkRxZSkoYykpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gT3FlKCl7cmV0dXJuIHRoaXMuZWFjaChS'@;
put 'cWUpfSxsb3dlcjpmdW5jdGlvbiBGcWUoKXtyZXR1cm4gdGhpcy5lYWNoKFBxZSl9LGFwcGVuZDpmdW5jdGlvbiBWcWUoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpoYWUoYyk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobC5h'@;
put 'cHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBqcWUoYyxsKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmhhZShjKSxkPW51bGw9PWw/QnFlOiJmdW5jdGlvbiI9PXR5cGVvZiBsP2w6eVUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuaW5zZXJ0QmVmb3JlKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24gVXFlKCl7cmV0dXJuIHRoaXMuZWFjaCh6cWUpfSxjbG9uZTpmdW5jdGlvbiBXcWUoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KGM/'@;
put 'WXFlOlpxZSl9LGRhdHVtOmZ1bmN0aW9uIEdxZShjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsYyk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIEpxZShjLGwsYSl7dmFyIGgsXyxkPWZ1bmN0aW9uIHFxZShjKXtyZXR1cm4gYy50'@;
put 'cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGwpe3ZhciBhPSIiLGQ9bC5pbmRleE9mKCIuIik7cmV0dXJuIGQ+PTAmJihhPWwuc2xpY2UoZCsxKSxsPWwuc2xpY2UoMCxkKSkse3R5cGU6bCxuYW1lOmF9fSl9KGMrIiIpLGY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3Ro'@;
put 'PDIpKXtmb3IoVD1sP1hxZTpLcWUsaD0wO2g8ZjsrK2gpdGhpcy5lYWNoKFQoZFtoXSxsLGEpKTtyZXR1cm4gdGhpc312YXIgVD10aGlzLm5vZGUoKS5fX29uO2lmKFQpZm9yKHZhciBwZSxXPTAsaWU9VC5sZW5ndGg7VzxpZTsrK1cpZm9yKGg9MCxwZT1UW1ddO2g8ZjsrK2gpaWYoKF89ZFto'@;
put 'XSkudHlwZT09PXBlLnR5cGUmJl8ubmFtZT09PXBlLm5hbWUpcmV0dXJuIHBlLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbiB0S2UoYyxsKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9lS2U6UXFlKShjLGwpKX0sW1N5bWJvbC5pdGVyYXRvcl06ZnVuY3Rpb24qbktl'@;
put 'KCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgXyxkPWNbbF0saD0wLGY9ZC5sZW5ndGg7aDxmOysraCkoXz1kW2hdKSYmKHlpZWxkIF8pfX07Y29uc3QgWWc9cGFlO2Z1bmN0aW9uIE1VKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9u'@;
put 'ZXcgWHUoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgWHUoW3RhZShjKV0sU1UpfWZ1bmN0aW9uIGtzKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgWHUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGMpXV0sW2Rv'@;
put 'Y3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBYdShbW2NdXSxTVSl9dmFyIGlLZT17dmFsdWU6KCk9Pnt9fTtmdW5jdGlvbiBnYWUoKXtmb3IodmFyIGQsYz0wLGw9YXJndW1lbnRzLmxlbmd0aCxhPXt9O2M8bDsrK2Mpe2lmKCEoZD1hcmd1bWVudHNbY10rIiIpfHxkIGluIGF8fC9bXHMu'@;
put 'XS8udGVzdChkKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIitkKTthW2RdPVtdfXJldHVybiBuZXcgYVQoYSl9ZnVuY3Rpb24gYVQoYyl7dGhpcy5fPWN9ZnVuY3Rpb24gc0tlKGMsbCl7Zm9yKHZhciBoLGE9MCxkPWMubGVuZ3RoO2E8ZDsrK2EpaWYoKGg9Y1thXSkubmFtZT09'@;
put 'PWwpcmV0dXJuIGgudmFsdWV9ZnVuY3Rpb24gbWFlKGMsbCxhKXtmb3IodmFyIGQ9MCxoPWMubGVuZ3RoO2Q8aDsrK2QpaWYoY1tkXS5uYW1lPT09bCl7Y1tkXT1pS2UsYz1jLnNsaWNlKDAsZCkuY29uY2F0KGMuc2xpY2UoZCsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWEmJmMucHVzaCh7bmFt'@;
put 'ZTpsLHZhbHVlOmF9KSxjfWFULnByb3RvdHlwZT1nYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphVCxvbjpmdW5jdGlvbihjLGwpe3ZhciBoLGE9dGhpcy5fLGQ9ZnVuY3Rpb24gb0tlKGMsbCl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihhKXt2YXIgZD0i'@;
put 'IixoPWEuaW5kZXhPZigiLiIpO2lmKGg+PTAmJihkPWEuc2xpY2UoaCsxKSxhPWEuc2xpY2UoMCxoKSksYSYmIWwuaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYSk7cmV0dXJue3R5cGU6YSxuYW1lOmR9fSl9KGMrIiIsYSksZj0tMSxfPWQubGVu'@;
put 'Z3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9bCYmImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2wpO2Zvcig7KytmPF87KWlmKGg9KGM9ZFtmXSkudHlwZSlhW2hdPW1hZShhW2hdLGMubmFtZSxsKTtlbHNlIGlm'@;
put 'KG51bGw9PWwpZm9yKGggaW4gYSlhW2hdPW1hZShhW2hdLGMubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrZjxfOylpZigoaD0oYz1kW2ZdKS50eXBlKSYmKGg9c0tlKGFbaF0sYy5uYW1lKSkpcmV0dXJuIGh9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgYz17fSxsPXRoaXMuXztmb3IodmFy'@;
put 'IGEgaW4gbCljW2FdPWxbYV0uc2xpY2UoKTtyZXR1cm4gbmV3IGFUKGMpfSxjYWxsOmZ1bmN0aW9uKGMsbCl7aWYoKGg9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgaCxmLGE9bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKWFbZF09YXJndW1lbnRzW2QrMl07aWYoIXRoaXMuXy5oYXNP'@;
put 'd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IoZD0wLGg9KGY9dGhpcy5fW2NdKS5sZW5ndGg7ZDxoOysrZClmW2RdLnZhbHVlLmFwcGx5KGwsYSl9LGFwcGx5OmZ1bmN0aW9uKGMsbCxhKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRo'@;
put 'cm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2Zvcih2YXIgZD10aGlzLl9bY10saD0wLGY9ZC5sZW5ndGg7aDxmOysraClkW2hdLnZhbHVlLmFwcGx5KGwsYSl9fTtjb25zdCB4VT1nYWU7dmFyIGxULGh3LFc3PTAsdXc9MCxkdz0wLHZhZT0xZTMsY1Q9MCxXZz0wLHVUPTAsZnc9'@;
put 'Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsX2FlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1'@;
put 'bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIEVVKCl7cmV0dXJuIFdnfHwoX2FlKGFLZSksV2c9Zncubm93KCkrdVQpfWZ1bmN0aW9uIGFLZSgpe1dnPTB9ZnVuY3Rpb24gZFQoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGJhZShj'@;
put 'LGwsYSl7dmFyIGQ9bmV3IGRUO3JldHVybiBkLnJlc3RhcnQoYyxsLGEpLGR9ZnVuY3Rpb24geWFlKCl7V2c9KGNUPWZ3Lm5vdygpKSt1VCxXNz11dz0wO3RyeXshZnVuY3Rpb24gbEtlKCl7RVUoKSwrK1c3O2Zvcih2YXIgbCxjPWxUO2M7KShsPVdnLWMuX3RpbWUpPj0wJiZjLl9jYWxsLmNh'@;
put 'bGwodm9pZCAwLGwpLGM9Yy5fbmV4dDstLVc3fSgpfWZpbmFsbHl7Vzc9MCxmdW5jdGlvbiB1S2UoKXtmb3IodmFyIGMsYSxsPWxULGQ9MS8wO2w7KWwuX2NhbGw/KGQ+bC5fdGltZSYmKGQ9bC5fdGltZSksYz1sLGw9bC5fbmV4dCk6KGE9bC5fbmV4dCxsLl9uZXh0PW51bGwsbD1jP2MuX25l'@;
put 'eHQ9YTpsVD1hKTtodz1jLGtVKGQpfSgpLFdnPTB9fWZ1bmN0aW9uIGNLZSgpe3ZhciBjPWZ3Lm5vdygpLGw9Yy1jVDtsPnZhZSYmKHVULT1sLGNUPWMpfWZ1bmN0aW9uIGtVKGMpe1c3fHwodXcmJih1dz1jbGVhclRpbWVvdXQodXcpKSxjLVdnPjI0PyhjPDEvMCYmKHV3PXNldFRpbWVvdXQo'@;
put 'eWFlLGMtZncubm93KCktdVQpKSxkdyYmKGR3PWNsZWFySW50ZXJ2YWwoZHcpKSk6KGR3fHwoY1Q9Zncubm93KCksZHc9c2V0SW50ZXJ2YWwoY0tlLHZhZSkpLFc3PTEsX2FlKHlhZSkpKX1mdW5jdGlvbiBoVChjLGwsYSl7dmFyIGQ9bmV3IGRUO3JldHVybiBkLnJlc3RhcnQoaD0+e2Quc3Rv'@;
put 'cCgpLGMoaCtsKX0sbD1udWxsPT1sPzA6K2wsYSksZH1kVC5wcm90b3R5cGU9YmFlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZFQscmVzdGFydDpmdW5jdGlvbihjLGwsYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVu'@;
put 'Y3Rpb24iKTthPShudWxsPT1hP0VVKCk6K2EpKyhudWxsPT1sPzA6K2wpLCF0aGlzLl9uZXh0JiZodyE9PXRoaXMmJihodz9ody5fbmV4dD10aGlzOmxUPXRoaXMsaHc9dGhpcyksdGhpcy5fY2FsbD1jLHRoaXMuX3RpbWU9YSxrVSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRo'@;
put 'aXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxrVSgpKX19O3ZhciBkS2U9eFUoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksaEtlPVtdLHdhZT0wLFRVPTIsZlQ9MyxEVT01LHBUPTY7ZnVuY3Rpb24gZ1QoYyxsLGEsZCxoLGYpe3ZhciBfPWMuX190cmFuc2l0aW9uO2lm'@;
put 'KF8pe2lmKGEgaW4gXylyZXR1cm59ZWxzZSBjLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24gZktlKGMsbCxhKXt2YXIgaCxkPWMuX190cmFuc2l0aW9uO2Z1bmN0aW9uIF8oaWUpe3ZhciBwZSx3ZSxFZSxaZTtpZigxIT09YS5zdGF0ZSlyZXR1cm4gVygpO2ZvcihwZSBpbiBkKWlmKChaZT1k'@;
put 'W3BlXSkubmFtZT09PWEubmFtZSl7aWYoWmUuc3RhdGU9PT1mVClyZXR1cm4gaFQoXyk7ND09PVplLnN0YXRlPyhaZS5zdGF0ZT1wVCxaZS50aW1lci5zdG9wKCksWmUub24uY2FsbCgiaW50ZXJydXB0IixjLGMuX19kYXRhX18sWmUuaW5kZXgsWmUuZ3JvdXApLGRlbGV0ZSBkW3BlXSk6K3Bl'@;
put 'PGwmJihaZS5zdGF0ZT1wVCxaZS50aW1lci5zdG9wKCksWmUub24uY2FsbCgiY2FuY2VsIixjLGMuX19kYXRhX18sWmUuaW5kZXgsWmUuZ3JvdXApLGRlbGV0ZSBkW3BlXSl9aWYoaFQoZnVuY3Rpb24oKXthLnN0YXRlPT09ZlQmJihhLnN0YXRlPTQsYS50aW1lci5yZXN0YXJ0KFQsYS5kZWxh'@;
put 'eSxhLnRpbWUpLFQoaWUpKX0pLGEuc3RhdGU9VFUsYS5vbi5jYWxsKCJzdGFydCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksYS5zdGF0ZT09PVRVKXtmb3IoYS5zdGF0ZT1mVCxoPW5ldyBBcnJheShFZT1hLnR3ZWVuLmxlbmd0aCkscGU9MCx3ZT0tMTtwZTxFZTsrK3BlKShaZT1h'@;
put 'LnR3ZWVuW3BlXS52YWx1ZS5jYWxsKGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApKSYmKGhbKyt3ZV09WmUpO2gubGVuZ3RoPXdlKzF9fWZ1bmN0aW9uIFQoaWUpe2Zvcih2YXIgcGU9aWU8YS5kdXJhdGlvbj9hLmVhc2UuY2FsbChudWxsLGllL2EuZHVyYXRpb24pOihhLnRpbWVyLnJl'@;
put 'c3RhcnQoVyksYS5zdGF0ZT1EVSwxKSx3ZT0tMSxFZT1oLmxlbmd0aDsrK3dlPEVlOyloW3dlXS5jYWxsKGMscGUpO2Euc3RhdGU9PT1EVSYmKGEub24uY2FsbCgiZW5kIixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxXKCkpfWZ1bmN0aW9uIFcoKXtmb3IodmFyIGllIGluIGEuc3Rh'@;
put 'dGU9cFQsYS50aW1lci5zdG9wKCksZGVsZXRlIGRbbF0sZClyZXR1cm47ZGVsZXRlIGMuX190cmFuc2l0aW9ufWRbbF09YSxhLnRpbWVyPWJhZShmdW5jdGlvbiBmKGllKXthLnN0YXRlPTEsYS50aW1lci5yZXN0YXJ0KF8sYS5kZWxheSxhLnRpbWUpLGEuZGVsYXk8PWllJiZfKGllLWEuZGVs'@;
put 'YXkpfSwwLGEudGltZSl9KGMsYSx7bmFtZTpsLGluZGV4OmQsZ3JvdXA6aCxvbjpkS2UsdHdlZW46aEtlLHRpbWU6Zi50aW1lLGRlbGF5OmYuZGVsYXksZHVyYXRpb246Zi5kdXJhdGlvbixlYXNlOmYuZWFzZSx0aW1lcjpudWxsLHN0YXRlOndhZX0pfWZ1bmN0aW9uIElVKGMsbCl7dmFyIGE9'@;
put 'UzIoYyxsKTtpZihhLnN0YXRlPndhZSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBhfWZ1bmN0aW9uIFRoKGMsbCl7dmFyIGE9UzIoYyxsKTtpZihhLnN0YXRlPmZUKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmlu'@;
put 'ZyIpO3JldHVybiBhfWZ1bmN0aW9uIFMyKGMsbCl7dmFyIGE9Yy5fX3RyYW5zaXRpb247aWYoIWF8fCEoYT1hW2xdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGF9ZnVuY3Rpb24gbVQoYyxsKXt2YXIgZCxoLF8sYT1jLl9fdHJhbnNpdGlvbixmPSEw'@;
put 'O2lmKGEpe2ZvcihfIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSkoZD1hW19dKS5uYW1lPT09bD8oaD1kLnN0YXRlPlRVJiZkLnN0YXRlPERVLGQuc3RhdGU9cFQsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKGg/ImludGVycnVwdCI6ImNhbmNlbCIsYyxjLl9fZGF0YV9fLGQuaW5kZXgsZC5n'@;
put 'cm91cCksZGVsZXRlIGFbX10pOmY9ITE7ZiYmZGVsZXRlIGMuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBEaChjLGwpe3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oYSl7cmV0dXJuIGMqKDEtYSkrbCphfX12YXIgdlQsU2FlPTE4MC9NYXRoLlBJLExVPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRl'@;
put 'WTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIE1hZShjLGwsYSxkLGgsZil7dmFyIF8sVCxXO3JldHVybihfPU1hdGguc3FydChjKmMrbCpsKSkmJihjLz1fLGwvPV8pLChXPWMqYStsKmQpJiYoYS09YypXLGQtPWwqVyksKFQ9TWF0aC5zcXJ0KGEqYStk'@;
put 'KmQpKSYmKGEvPVQsZC89VCxXLz1UKSxjKmQ8bCphJiYoYz0tYyxsPS1sLFc9LVcsXz0tXykse3RyYW5zbGF0ZVg6aCx0cmFuc2xhdGVZOmYscm90YXRlOk1hdGguYXRhbjIobCxjKSpTYWUsc2tld1g6TWF0aC5hdGFuKFcpKlNhZSxzY2FsZVg6XyxzY2FsZVk6VH19ZnVuY3Rpb24geGFlKGMs'@;
put 'bCxhLGQpe2Z1bmN0aW9uIGgoaWUpe3JldHVybiBpZS5sZW5ndGg/aWUucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihpZSxwZSl7dmFyIHdlPVtdLEVlPVtdO3JldHVybiBpZT1jKGllKSxwZT1jKHBlKSxmdW5jdGlvbiBmKGllLHBlLHdlLEVlLFplLGl0KXtpZihpZSE9PXdlfHxwZSE9'@;
put 'PUVlKXt2YXIgZXQ9WmUucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxsLG51bGwsYSk7aXQucHVzaCh7aTpldC00LHg6RGgoaWUsd2UpfSx7aTpldC0yLHg6RGgocGUsRWUpfSl9ZWxzZSh3ZXx8RWUpJiZaZS5wdXNoKCJ0cmFuc2xhdGUoIit3ZStsK0VlK2EpfShpZS50cmFuc2xhdGVYLGllLnRy'@;
put 'YW5zbGF0ZVkscGUudHJhbnNsYXRlWCxwZS50cmFuc2xhdGVZLHdlLEVlKSxmdW5jdGlvbiBfKGllLHBlLHdlLEVlKXtpZSE9PXBlPyhpZS1wZT4xODA/cGUrPTM2MDpwZS1pZT4xODAmJihpZSs9MzYwKSxFZS5wdXNoKHtpOndlLnB1c2goaCh3ZSkrInJvdGF0ZSgiLG51bGwsZCktMix4OkRo'@;
put 'KGllLHBlKX0pKTpwZSYmd2UucHVzaChoKHdlKSsicm90YXRlKCIrcGUrZCl9KGllLnJvdGF0ZSxwZS5yb3RhdGUsd2UsRWUpLGZ1bmN0aW9uIFQoaWUscGUsd2UsRWUpe2llIT09cGU/RWUucHVzaCh7aTp3ZS5wdXNoKGgod2UpKyJza2V3WCgiLG51bGwsZCktMix4OkRoKGllLHBlKX0pOnBl'@;
put 'JiZ3ZS5wdXNoKGgod2UpKyJza2V3WCgiK3BlK2QpfShpZS5za2V3WCxwZS5za2V3WCx3ZSxFZSksZnVuY3Rpb24gVyhpZSxwZSx3ZSxFZSxaZSxpdCl7aWYoaWUhPT13ZXx8cGUhPT1FZSl7dmFyIGV0PVplLnB1c2goaChaZSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2l0LnB1c2go'@;
put 'e2k6ZXQtNCx4OkRoKGllLHdlKX0se2k6ZXQtMix4OkRoKHBlLEVlKX0pfWVsc2UoMSE9PXdlfHwxIT09RWUpJiZaZS5wdXNoKGgoWmUpKyJzY2FsZSgiK3dlKyIsIitFZSsiKSIpfShpZS5zY2FsZVgsaWUuc2NhbGVZLHBlLnNjYWxlWCxwZS5zY2FsZVksd2UsRWUpLGllPXBlPW51bGwsZnVu'@;
put 'Y3Rpb24oWmUpe2Zvcih2YXIgeXQsaXQ9LTEsZXQ9RWUubGVuZ3RoOysraXQ8ZXQ7KXdlWyh5dD1FZVtpdF0pLmldPXl0LngoWmUpO3JldHVybiB3ZS5qb2luKCIiKX19fXZhciB2S2U9eGFlKGZ1bmN0aW9uIGdLZShjKXtjb25zdCBsPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgRE9NTWF0cml4'@;
put 'P0RPTU1hdHJpeDpXZWJLaXRDU1NNYXRyaXgpKGMrIiIpO3JldHVybiBsLmlzSWRlbnRpdHk/TFU6TWFlKGwuYSxsLmIsbC5jLGwuZCxsLmUsbC5mKX0sInB4LCAiLCJweCkiLCJkZWcpIiksRWFlPXhhZShmdW5jdGlvbiBtS2UoYyl7cmV0dXJuIG51bGwhPWMmJih2VHx8KHZUPWRvY3VtZW50'@;
put 'LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHZULnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixjKSxjPXZULnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP01hZSgoYz1jLm1hdHJpeCkuYSxjLmIsYy5jLGMuZCxjLmUsYy5mKTpMVX0s'@;
put 'IiwgIiwiKSIsIikiKTtmdW5jdGlvbiBfS2UoYyxsKXt2YXIgYSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPVRoKHRoaXMsYyksZj1oLnR3ZWVuO2lmKGYhPT1hKWZvcih2YXIgXz0wLFQ9KGQ9YT1mKS5sZW5ndGg7XzxUOysrXylpZihkW19dLm5hbWU9PT1sKXsoZD1kLnNsaWNlKCkpLnNw'@;
put 'bGljZShfLDEpO2JyZWFrfWgudHdlZW49ZH19ZnVuY3Rpb24gYktlKGMsbCxhKXt2YXIgZCxoO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1UaCh0aGlzLGMpLF89Zi50d2VlbjtpZihfIT09ZCl7aD0oZD1fKS5zbGljZSgp'@;
put 'O2Zvcih2YXIgVD17bmFtZTpsLHZhbHVlOmF9LFc9MCxpZT1oLmxlbmd0aDtXPGllOysrVylpZihoW1ddLm5hbWU9PT1sKXtoW1ddPVQ7YnJlYWt9Vz09PWllJiZoLnB1c2goVCl9Zi50d2Vlbj1ofX1mdW5jdGlvbiBSVShjLGwsYSl7dmFyIGQ9Yy5faWQ7cmV0dXJuIGMuZWFjaChmdW5jdGlv'@;
put 'bigpe3ZhciBoPVRoKHRoaXMsZCk7KGgudmFsdWV8fChoLnZhbHVlPXt9KSlbbF09YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihoKXtyZXR1cm4gUzIoaCxkKS52YWx1ZVtsXX19ZnVuY3Rpb24gT1UoYyxsLGEpe2MucHJvdG90eXBlPWwucHJvdG90eXBlPWEsYS5jb25zdHJ1'@;
put 'Y3Rvcj1jfWZ1bmN0aW9uIGthZShjLGwpe3ZhciBhPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO2Zvcih2YXIgZCBpbiBsKWFbZF09bFtkXTtyZXR1cm4gYX1mdW5jdGlvbiBwdygpe312YXIgX1Q9MS8uNyxHNz0iXFxzKihbKy1dP1xcZCspXFxzKiIsbXc9IlxccyooWystXT8oPzpcXGQq'@;
put 'XFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLEloPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsd0tlPS9eIyhbMC05YS1mXXszLDh9KSQvLENLZT1uZXcgUmVnRXhwKGBecmdiXFwoJHtHN30sJHtHN30sJHtHN31cXCkkYCksU0tl'@;
put 'PW5ldyBSZWdFeHAoYF5yZ2JcXCgke0lofSwke0lofSwke0lofVxcKSRgKSxNS2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke0c3fSwke0c3fSwke0c3fSwke213fVxcKSRgKSx4S2U9bmV3IFJlZ0V4cChgXnJnYmFcXCgke0lofSwke0lofSwke0lofSwke213fVxcKSRgKSxFS2U9bmV3IFJlZ0V4'@;
put 'cChgXmhzbFxcKCR7bXd9LCR7SWh9LCR7SWh9XFwpJGApLGtLZT1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7bXd9LCR7SWh9LCR7SWh9LCR7bXd9XFwpJGApLEFhZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxh'@;
put 'enVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1'@;
put 'c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5Mzks'@;
put 'ZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEw'@;
put 'OTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2'@;
put 'OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0'@;
put 'NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1'@;
put 'ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2'@;
put 'MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46'@;
put 'MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxt'@;
put 'YWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRp'@;
put 'dW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4'@;
put 'NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lz'@;
put 'ZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2'@;
put 'Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5Nyxz'@;
put 'aWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3Rs'@;
put 'ZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiBUYWUoKXty'@;
put 'ZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBEYWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBHZyhjKXt2YXIgbCxhO3JldHVybiBjPShjKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobD13S2UuZXhlYyhjKSk/KGE9bFsxXS5sZW5ndGgs'@;
put 'bD1wYXJzZUludChsWzFdLDE2KSw2PT09YT9JYWUobCk6Mz09PWE/bmV3IEgwKGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoMTUmbCk8PDR8MTUmbCwxKTo4PT09YT9iVChsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LCgyNTUmbCkvMjU1KTo0PT09YT9iVChsPj4xMiYxNXxs'@;
put 'Pj44JjI0MCxsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKCgxNSZsKTw8NHwxNSZsKS8yNTUpOm51bGwpOihsPUNLZS5leGVjKGMpKT9uZXcgSDAobFsxXSxsWzJdLGxbM10sMSk6KGw9U0tlLmV4ZWMoYykpP25ldyBIMCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNd'@;
put 'LzEwMCwxKToobD1NS2UuZXhlYyhjKSk/YlQobFsxXSxsWzJdLGxbM10sbFs0XSk6KGw9eEtlLmV4ZWMoYykpP2JUKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLGxbNF0pOihsPUVLZS5leGVjKGMpKT9PYWUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCwxKToobD1rS2Uu'@;
put 'ZXhlYyhjKSk/T2FlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsbFs0XSk6QWFlLmhhc093blByb3BlcnR5KGMpP0lhZShBYWVbY10pOiJ0cmFuc3BhcmVudCI9PT1jP25ldyBIMChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIElhZShjKXtyZXR1cm4gbmV3IEgwKGM+PjE2JjI1NSxjPj44'@;
put 'JjI1NSwyNTUmYywxKX1mdW5jdGlvbiBiVChjLGwsYSxkKXtyZXR1cm4gZDw9MCYmKGM9bD1hPU5hTiksbmV3IEgwKGMsbCxhLGQpfWZ1bmN0aW9uIHlUKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiBES2UoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBwd3x8'@;
put 'KGM9R2coYykpLGM/bmV3IEgwKChjPWMucmdiKCkpLnIsYy5nLGMuYixjLm9wYWNpdHkpOm5ldyBIMH0oYyk6bmV3IEgwKGMsbCxhLGQ/PzEpfWZ1bmN0aW9uIEgwKGMsbCxhLGQpe3RoaXMucj0rYyx0aGlzLmc9K2wsdGhpcy5iPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBMYWUoKXty'@;
put 'ZXR1cm5gIyR7cWcodGhpcy5yKX0ke3FnKHRoaXMuZyl9JHtxZyh0aGlzLmIpfWB9ZnVuY3Rpb24gUmFlKCl7Y29uc3QgYz13VCh0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJyZ2IoIjoicmdiYSgifSR7JGcodGhpcy5yKX0sICR7JGcodGhpcy5nKX0sICR7JGcodGhpcy5iKX0kezE9'@;
put 'PT1jPyIpIjpgLCAke2N9KWB9YH1mdW5jdGlvbiB3VChjKXtyZXR1cm4gaXNOYU4oYyk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsYykpfWZ1bmN0aW9uICRnKGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGMpfHwwKSl9ZnVuY3Rpb24gcWcoYyl7cmV0dXJu'@;
put 'KChjPSRnKGMpKTwxNj8iMCI6IiIpK2MudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE9hZShjLGwsYSxkKXtyZXR1cm4gZDw9MD9jPWw9YT1OYU46YTw9MHx8YT49MT9jPWw9TmFOOmw8PTAmJihjPU5hTiksbmV3IE0yKGMsbCxhLGQpfWZ1bmN0aW9uIFBhZShjKXtpZihjIGluc3RhbmNlb2YgTTIp'@;
put 'cmV0dXJuIG5ldyBNMihjLmgsYy5zLGMubCxjLm9wYWNpdHkpO2lmKGMgaW5zdGFuY2VvZiBwd3x8KGM9R2coYykpLCFjKXJldHVybiBuZXcgTTI7aWYoYyBpbnN0YW5jZW9mIE0yKXJldHVybiBjO3ZhciBsPShjPWMucmdiKCkpLnIvMjU1LGE9Yy5nLzI1NSxkPWMuYi8yNTUsaD1NYXRoLm1p'@;
put 'bihsLGEsZCksZj1NYXRoLm1heChsLGEsZCksXz1OYU4sVD1mLWgsVz0oZitoKS8yO3JldHVybiBUPyhfPWw9PT1mPyhhLWQpL1QrNiooYTxkKTphPT09Zj8oZC1sKS9UKzI6KGwtYSkvVCs0LFQvPVc8LjU/ZitoOjItZi1oLF8qPTYwKTpUPVc+MCYmVzwxPzA6XyxuZXcgTTIoXyxULFcsYy5v'@;
put 'cGFjaXR5KX1mdW5jdGlvbiBNMihjLGwsYSxkKXt0aGlzLmg9K2MsdGhpcy5zPStsLHRoaXMubD0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gRmFlKGMpe3JldHVybihjPShjfHwwKSUzNjApPDA/YyszNjA6Y31mdW5jdGlvbiBDVChjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigx'@;
put 'LGN8fDApKX1mdW5jdGlvbiBQVShjLGwsYSl7cmV0dXJuIDI1NSooYzw2MD9sKyhhLWwpKmMvNjA6YzwxODA/YTpjPDI0MD9sKyhhLWwpKigyNDAtYykvNjA6bCl9ZnVuY3Rpb24gSGFlKGMsbCxhLGQsaCl7dmFyIGY9YypjLF89ZipjO3JldHVybigoMS0zKmMrMypmLV8pKmwrKDQtNipmKzMq'@;
put 'XykqYSsoMSszKmMrMypmLTMqXykqZCtfKmgpLzZ9T1UocHcsR2cse2NvcHkoYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxjKX0sZGlzcGxheWFibGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6VGFlLGZvcm1hdEhleDpU'@;
put 'YWUsZm9ybWF0SGV4ODpmdW5jdGlvbiBBS2UoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXg4KCl9LGZvcm1hdEhzbDpmdW5jdGlvbiBUS2UoKXtyZXR1cm4gUGFlKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6RGFlLHRvU3RyaW5nOkRhZX0pLE9VKEgwLHlULGthZShwdyx7YnJp'@;
put 'Z2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9fVDpNYXRoLnBvdyhfVCxjKSxuZXcgSDAodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IEgwKHRoaXMucipjLHRoaXMuZypjLHRo'@;
put 'aXMuYipjLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcgSDAoJGcodGhpcy5yKSwkZyh0aGlzLmcpLCRnKHRoaXMuYiksd1QodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41'@;
put 'PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpMYWUsZm9ybWF0SGV4OkxhZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIElLZSgpe3JldHVybmAjJHtxZyh0aGlzLnIpfSR7cWcodGhpcy5n'@;
put 'KX0ke3FnKHRoaXMuYil9JHtxZygyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkpKX1gfSxmb3JtYXRSZ2I6UmFlLHRvU3RyaW5nOlJhZX0pKSxPVShNMixmdW5jdGlvbiBMS2UoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1BhZShjKTpuZXcgTTIo'@;
put 'YyxsLGEsZD8/MSl9LGthZShwdyx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9fVDpNYXRoLnBvdyhfVCxjKSxuZXcgTTIodGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgTTIo'@;
put 'dGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgYz10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGw9aXNOYU4oYyl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsYT10aGlzLmwsZD1hKyhhPC41P2E6MS1hKSpsLGg9MiphLWQ7cmV0dXJuIG5ldyBIMChQVShj'@;
put 'Pj0yNDA/Yy0yNDA6YysxMjAsaCxkKSxQVShjLGgsZCksUFUoYzwxMjA/YysyNDA6Yy0xMjAsaCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgTTIoRmFlKHRoaXMuaCksQ1QodGhpcy5zKSxDVCh0aGlzLmwpLHdUKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3Jl'@;
put 'dHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgYz13VCh0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJoc2woIjoiaHNsYSgi'@;
put 'fSR7RmFlKHRoaXMuaCl9LCAkezEwMCpDVCh0aGlzLnMpfSUsICR7MTAwKkNUKHRoaXMubCl9JSR7MT09PWM/IikiOmAsICR7Y30pYH1gfX0pKTtjb25zdCBGVT1jPT4oKT0+YztmdW5jdGlvbiBWYWUoYyxsKXt2YXIgYT1sLWM7cmV0dXJuIGE/ZnVuY3Rpb24gTmFlKGMsbCl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBjK2EqbH19KGMsYSk6RlUoaXNOYU4oYyk/bDpjKX1jb25zdCBTVD1mdW5jdGlvbiBjKGwpe3ZhciBhPWZ1bmN0aW9uIEZLZShjKXtyZXR1cm4gMT09KGM9K2MpP1ZhZTpmdW5jdGlvbihsLGEpe3JldHVybiBhLWw/ZnVuY3Rpb24gUEtlKGMsbCxhKXtyZXR1cm4g'@;
put 'Yz1NYXRoLnBvdyhjLGEpLGw9TWF0aC5wb3cobCxhKS1jLGE9MS9hLGZ1bmN0aW9uKGQpe3JldHVybiBNYXRoLnBvdyhjK2QqbCxhKX19KGwsYSxjKTpGVShpc05hTihsKT9hOmwpfX0obCk7ZnVuY3Rpb24gZChoLGYpe3ZhciBfPWEoKGg9eVQoaCkpLnIsKGY9eVQoZikpLnIpLFQ9YShoLmcs'@;
put 'Zi5nKSxXPWEoaC5iLGYuYiksaWU9VmFlKGgub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihwZSl7cmV0dXJuIGgucj1fKHBlKSxoLmc9VChwZSksaC5iPVcocGUpLGgub3BhY2l0eT1pZShwZSksaCsiIn19cmV0dXJuIGQuZ2FtbWE9YyxkfSgxKTtmdW5jdGlvbiBCYWUoYyl7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBfLFQsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPW5ldyBBcnJheShhKSxmPW5ldyBBcnJheShhKTtmb3IoXz0wO188YTsrK18pVD15VChsW19dKSxkW19dPVQucnx8MCxoW19dPVQuZ3x8MCxmW19dPVQuYnx8MDtyZXR1cm4gZD1jKGQpLGg9Yyho'@;
put 'KSxmPWMoZiksVC5vcGFjaXR5PTEsZnVuY3Rpb24oVyl7cmV0dXJuIFQucj1kKFcpLFQuZz1oKFcpLFQuYj1mKFcpLFQrIiJ9fX1CYWUoZnVuY3Rpb24gUktlKGMpe3ZhciBsPWMubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPWE8PTA/YT0wOmE+PTE/KGE9MSxsLTEpOk1hdGgu'@;
put 'Zmxvb3IoYSpsKSxoPWNbZF0sZj1jW2QrMV07cmV0dXJuIEhhZSgoYS1kL2wpKmwsZD4wP2NbZC0xXToyKmgtZixoLGYsZDxsLTE/Y1tkKzJdOjIqZi1oKX19KSxCYWUoZnVuY3Rpb24gT0tlKGMpe3ZhciBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1NYXRoLmZsb29yKCgo'@;
put 'YSU9MSk8MD8rK2E6YSkqbCk7cmV0dXJuIEhhZSgoYS1kL2wpKmwsY1soZCtsLTEpJWxdLGNbZCVsXSxjWyhkKzEpJWxdLGNbKGQrMiklbF0pfX0pO3ZhciBIVT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csTlU9bmV3IFJlZ0V4cChIVS5zb3VyY2UsImci'@;
put 'KTtmdW5jdGlvbiBqYWUoYyxsKXt2YXIgZCxoLGYsYT1IVS5sYXN0SW5kZXg9TlUubGFzdEluZGV4PTAsXz0tMSxUPVtdLFc9W107Zm9yKGMrPSIiLGwrPSIiOyhkPUhVLmV4ZWMoYykpJiYoaD1OVS5leGVjKGwpKTspKGY9aC5pbmRleCk+YSYmKGY9bC5zbGljZShhLGYpLFRbX10/VFtfXSs9'@;
put 'ZjpUWysrX109ZiksKGQ9ZFswXSk9PT0oaD1oWzBdKT9UW19dP1RbX10rPWg6VFsrK19dPWg6KFRbKytfXT1udWxsLFcucHVzaCh7aTpfLHg6RGgoZCxoKX0pKSxhPU5VLmxhc3RJbmRleDtyZXR1cm4gYTxsLmxlbmd0aCYmKGY9bC5zbGljZShhKSxUW19dP1RbX10rPWY6VFsrK19dPWYpLFQu'@;
put 'bGVuZ3RoPDI/V1swXT9mdW5jdGlvbiBOS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpKyIifX0oV1swXS54KTpmdW5jdGlvbiBIS2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShsKToobD1XLmxlbmd0aCxmdW5jdGlvbihpZSl7Zm9yKHZhciB3ZSxwZT0wO3Bl'@;
put 'PGw7KytwZSlUWyh3ZT1XW3BlXSkuaV09d2UueChpZSk7cmV0dXJuIFQuam9pbigiIil9KX1mdW5jdGlvbiB6YWUoYyxsKXt2YXIgYTtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBsP0RoOmwgaW5zdGFuY2VvZiBHZz9TVDooYT1HZyhsKSk/KGw9YSxTVCk6amFlKShjLGwpfWZ1bmN0aW9uIFZL'@;
put 'ZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gQktlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gaktlKGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oKXt2YXIgXz10aGlzLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gXz09PWg/bnVsbDpfPT09ZD9mOmY9bChkPV8sYSl9fWZ1bmN0aW9uIHpLZShjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMu'@;
put 'bG9jYWwpO3JldHVybiBfPT09aD9udWxsOl89PT1kP2Y6Zj1sKGQ9XyxhKX19ZnVuY3Rpb24gVUtlKGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF8sVyxUPWEodGhpcyk7cmV0dXJuIG51bGw9PVQ/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTooXz10aGlzLmdl'@;
put 'dEF0dHJpYnV0ZShjKSk9PT0oVz1UKyIiKT9udWxsOl89PT1kJiZXPT09aD9mOihoPVcsZj1sKGQ9XyxUKSl9fWZ1bmN0aW9uIFpLZShjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciBfLFcsVD1hKHRoaXMpO3JldHVybiBudWxsPT1UP3ZvaWQgdGhpcy5yZW1vdmVBdHRy'@;
put 'aWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpOihfPXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKSk9PT0oVz1UKyIiKT9udWxsOl89PT1kJiZXPT09aD9mOihoPVcsZj1sKGQ9XyxUKSl9fWZ1bmN0aW9uICRLZShjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIEdLZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVu'@;
put 'Y3Rpb24gcUtlKGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gV0tlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlKGMsbC5jYWxsKHRoaXMsYSkpfX0o'@;
put 'YyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uIFhLZShjLGwpe3JldHVybiBmdW5jdGlvbigpe0lVKHRoaXMsYykuZGVsYXk9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBKS2UoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe0lVKHRoaXMsYykuZGVsYXk9'@;
put 'bH19ZnVuY3Rpb24gZVhlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7VGgodGhpcyxjKS5kdXJhdGlvbj0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHRYZShjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7VGgodGhpcyxjKS5kdXJhdGlvbj1sfX12YXIgbVhlPVlnLnByb3Rv'@;
put 'dHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBVYWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19dmFyIE9YZT0wO2Z1bmN0aW9uIExoKGMsbCxhLGQpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bCx0aGlzLl9uYW1lPWEsdGhpcy5faWQ9'@;
put 'ZH1mdW5jdGlvbiBWVShjKXtyZXR1cm4gWWcoKS50cmFuc2l0aW9uKGMpfWZ1bmN0aW9uIFphZSgpe3JldHVybisrT1hlfXZhciByMz1ZZy5wcm90b3R5cGU7TGgucHJvdG90eXBlPVZVLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TGgsc2VsZWN0OmZ1bmN0aW9uIHBYZShjKXt2YXIgbD10aGlz'@;
put 'Ll9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXlVKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDsrK18pZm9yKHZhciBwZSx3ZSxUPWRbX10sVz1ULmxlbmd0aCxpZT1mW19dPW5ldyBBcnJheShXKSxF'@;
put 'ZT0wO0VlPFc7KytFZSkocGU9VFtFZV0pJiYod2U9Yy5jYWxsKHBlLHBlLl9fZGF0YV9fLEVlLFQpKSYmKCJfX2RhdGFfXyJpbiBwZSYmKHdlLl9fZGF0YV9fPXBlLl9fZGF0YV9fKSxpZVtFZV09d2UsZ1QoaWVbRWVdLGwsYSxFZSxpZSxTMihwZSxhKSkpO3JldHVybiBuZXcgTGgoZix0aGlz'@;
put 'Ll9wYXJlbnRzLGwsYSl9LHNlbGVjdEFsbDpmdW5jdGlvbiBnWGUoYyl7dmFyIGw9dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1uYWUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPVtdLF89W10sVD0wO1Q8aDsrK1QpZm9yKHZh'@;
put 'ciBwZSxXPWRbVF0saWU9Vy5sZW5ndGgsd2U9MDt3ZTxpZTsrK3dlKWlmKHBlPVdbd2VdKXtmb3IodmFyIFplLEVlPWMuY2FsbChwZSxwZS5fX2RhdGFfXyx3ZSxXKSxpdD1TMihwZSxhKSxldD0wLHl0PUVlLmxlbmd0aDtldDx5dDsrK2V0KShaZT1FZVtldF0pJiZnVChaZSxsLGEsZXQsRWUs'@;
put 'aXQpO2YucHVzaChFZSksXy5wdXNoKHBlKX1yZXR1cm4gbmV3IExoKGYsXyxsLGEpfSxzZWxlY3RDaGlsZDpyMy5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpyMy5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24gYVhlKGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1yYWUoYykp'@;
put 'O2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIFcsZj1sW2hdLF89Zi5sZW5ndGgsVD1kW2hdPVtdLGllPTA7aWU8XzsrK2llKShXPWZbaWVdKSYmYy5jYWxsKFcsVy5fX2RhdGFfXyxpZSxmKSYmVC5wdXNoKFcpO3Jl'@;
put 'dHVybiBuZXcgTGgoZCx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbiBsWGUoYyl7aWYoYy5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWMuX2dyb3VwcyxkPWwubGVuZ3RoLGY9TWF0aC5taW4o'@;
put 'ZCxhLmxlbmd0aCksXz1uZXcgQXJyYXkoZCksVD0wO1Q8ZjsrK1QpZm9yKHZhciBFZSxXPWxbVF0saWU9YVtUXSxwZT1XLmxlbmd0aCx3ZT1fW1RdPW5ldyBBcnJheShwZSksWmU9MDtaZTxwZTsrK1plKShFZT1XW1plXXx8aWVbWmVdKSYmKHdlW1plXT1FZSk7Zm9yKDtUPGQ7KytUKV9bVF09'@;
put 'bFtUXTtyZXR1cm4gbmV3IExoKF8sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIHZYZSgpe3JldHVybiBuZXcgbVhlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBMWGUoKXtmb3IodmFyIGM9dGhp'@;
put 'cy5fbmFtZSxsPXRoaXMuX2lkLGE9WmFlKCksZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIFcsXz1kW2ZdLFQ9Xy5sZW5ndGgsaWU9MDtpZTxUOysraWUpaWYoVz1fW2llXSl7dmFyIHBlPVMyKFcsbCk7Z1QoVyxjLGEsaWUsXyx7dGltZTpwZS50aW1lK3Bl'@;
put 'LmRlbGF5K3BlLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246cGUuZHVyYXRpb24sZWFzZTpwZS5lYXNlfSl9cmV0dXJuIG5ldyBMaChkLHRoaXMuX3BhcmVudHMsYyxhKX0sY2FsbDpyMy5jYWxsLG5vZGVzOnIzLm5vZGVzLG5vZGU6cjMubm9kZSxzaXplOnIzLnNpemUsZW1wdHk6cjMuZW1w'@;
put 'dHksZWFjaDpyMy5lYWNoLG9uOmZ1bmN0aW9uIGRYZShjLGwpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/UzIodGhpcy5ub2RlKCksYSkub24ub24oYyk6dGhpcy5lYWNoKGZ1bmN0aW9uIHVYZShjLGwsYSl7dmFyIGQsaCxmPWZ1bmN0aW9uIGNYZShjKXtyZXR1'@;
put 'cm4oYysiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGwpe3ZhciBhPWwuaW5kZXhPZigiLiIpO3JldHVybiBhPj0wJiYobD1sLnNsaWNlKDAsYSkpLCFsfHwic3RhcnQiPT09bH0pfShsKT9JVTpUaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1mKHRoaXMsYyksVD1f'@;
put 'Lm9uO1QhPT1kJiYoaD0oZD1UKS5jb3B5KCkpLm9uKGwsYSksXy5vbj1ofX0oYSxjLGwpKX0sYXR0cjpmdW5jdGlvbiBZS2UoYyxsKXt2YXIgYT1zVChjKSxkPSJ0cmFuc2Zvcm0iPT09YT9FYWU6emFlO3JldHVybiB0aGlzLmF0dHJUd2VlbihjLCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhLmxv'@;
put 'Y2FsP1pLZTpVS2UpKGEsZCxSVSh0aGlzLCJhdHRyLiIrYyxsKSk6bnVsbD09bD8oYS5sb2NhbD9CS2U6VktlKShhKTooYS5sb2NhbD96S2U6aktlKShhLGQsbCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24gS0tlKGMsbCl7dmFyIGE9ImF0dHIuIitjO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1'@;
put 'cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihhLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjt2YXIgZD1zVChjKTtyZXR1cm4gdGhpcy50d2VlbihhLChkLmxvY2FsPyRLZTpxS2UpKGQsbCkpfSxz'@;
put 'dHlsZTpmdW5jdGlvbiBDWGUoYyxsLGEpe3ZhciBkPSJ0cmFuc2Zvcm0iPT0oYys9IiIpP3ZLZTp6YWU7cmV0dXJuIG51bGw9PWw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gX1hlKGMsbCl7dmFyIGEsZCxoO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPVk3KHRoaXMsYyksXz0odGhpcy5z'@;
put 'dHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxZNyh0aGlzLGMpKTtyZXR1cm4gZj09PV8/bnVsbDpmPT09YSYmXz09PWQ/aDpoPWwoYT1mLGQ9Xyl9fShjLGQpKS5vbigiZW5kLnN0eWxlLiIrYyxVYWUoYykpOiJmdW5jdGlvbiI9PXR5cGVvZiBsP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIHlY'@;
put 'ZShjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPVk3KHRoaXMsYyksVD1hKHRoaXMpLFc9VCsiIjtyZXR1cm4gbnVsbD09VCYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksVz1UPVk3KHRoaXMsYykpLF89PT1XP251bGw6Xz09PWQmJlc9PT1oP2Y6KGg9Vyxm'@;
put 'PWwoZD1fLFQpKX19KGMsZCxSVSh0aGlzLCJzdHlsZS4iK2MsbCkpKS5lYWNoKGZ1bmN0aW9uIHdYZShjLGwpe3ZhciBhLGQsaCxULGY9InN0eWxlLiIrbCxfPSJlbmQuIitmO3JldHVybiBmdW5jdGlvbigpe3ZhciBXPVRoKHRoaXMsYyksaWU9Vy5vbixwZT1udWxsPT1XLnZhbHVlW2ZdP1R8'@;
put 'fChUPVVhZShsKSk6dm9pZCAwOyhpZSE9PWF8fGghPT1wZSkmJihkPShhPWllKS5jb3B5KCkpLm9uKF8saD1wZSksVy5vbj1kfX0odGhpcy5faWQsYykpOnRoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIGJYZShjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89'@;
put 'WTcodGhpcyxjKTtyZXR1cm4gXz09PWg/bnVsbDpfPT09ZD9mOmY9bChkPV8sYSl9fShjLGQsbCksYSkub24oImVuZC5zdHlsZS4iK2MsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24geFhlKGMsbCxhKXt2YXIgZD0ic3R5bGUuIisoYys9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1'@;
put 'cm4oZD10aGlzLnR3ZWVuKGQpKSYmZC5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihkLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihkLGZ1bmN0aW9uIE1YZShjLGwsYSl7dmFyIGQsaDtmdW5jdGlvbiBm'@;
put 'KCl7dmFyIF89bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIF8hPT1oJiYoZD0oaD1fKSYmZnVuY3Rpb24gU1hlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwuY2FsbCh0aGlzLGQpLGEpfX0oYyxfLGEpKSxkfXJldHVybiBmLl92YWx1'@;
put 'ZT1sLGZ9KGMsbCxhPz8iIikpfSx0ZXh0OmZ1bmN0aW9uIEFYZShjKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24ga1hlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWModGhpcyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19KFJVKHRo'@;
put 'aXMsInRleHQiLGMpKTpmdW5jdGlvbiBFWGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1jfX0obnVsbD09Yz8iIjpjKyIiKSl9LHRleHRUd2VlbjpmdW5jdGlvbiBJWGUoYyl7dmFyIGw9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4obD10aGlzLnR3'@;
put 'ZWVuKGwpKSYmbC5fdmFsdWU7aWYobnVsbD09YylyZXR1cm4gdGhpcy50d2VlbihsLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihsLGZ1bmN0aW9uIERYZShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoKXt2YXIgaD1jLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaCE9PWEmJihsPShhPWgpJiZmdW5jdGlvbiBUWGUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3RoaXMudGV4dENvbnRlbnQ9Yy5jYWxsKHRoaXMsbCl9fShoKSksbH1yZXR1cm4gZC5fdmFsdWU9YyxkfShjKSl9LHJlbW92ZTpmdW5jdGlvbiBmWGUoKXty'@;
put 'ZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24gaFhlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGEgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2EhPT1jKXJldHVybjtsJiZsLnJlbW92ZUNoaWxkKHRoaXMpfX0odGhpcy5faWQp'@;
put 'KX0sdHdlZW46ZnVuY3Rpb24geUtlKGMsbCl7dmFyIGE9dGhpcy5faWQ7aWYoYys9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIF8sZD1TMih0aGlzLm5vZGUoKSxhKS50d2VlbixoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWlmKChfPWRbaF0pLm5hbWU9PT1jKXJldHVybiBfLnZhbHVl'@;
put 'O3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWw/X0tlOmJLZSkoYSxjLGwpKX0sZGVsYXk6ZnVuY3Rpb24gUUtlKGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/WEtlOkpLZSkobCxjKSk6'@;
put 'UzIodGhpcy5ub2RlKCksbCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uIG5YZShjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2VYZTp0WGUpKGwsYykpOlMyKHRoaXMubm9kZSgpLGwpLmR1cmF0aW9ufSxl'@;
put 'YXNlOmZ1bmN0aW9uIGlYZShjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24gclhlKGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe1RoKHRoaXMsYykuZWFzZT1sfX0o'@;
put 'bCxjKSk6UzIodGhpcy5ub2RlKCksbCkuZWFzZX0sZWFzZVZhcnlpbmc6ZnVuY3Rpb24gc1hlKGMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uIG9YZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtUaCh0aGlzLGMpLmVhc2U9YX19KHRoaXMuX2lkLGMpKX0sZW5kOmZ1bmN0aW9uIFJYZSgpe3ZhciBjLGwsYT10aGlzLGQ9YS5faWQsaD1hLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVu'@;
put 'Y3Rpb24oZixfKXt2YXIgVD17dmFsdWU6X30sVz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWgmJmYoKX19O2EuZWFjaChmdW5jdGlvbigpe3ZhciBpZT1UaCh0aGlzLGQpLHBlPWllLm9uO3BlIT09YyYmKChsPShjPXBlKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goVCksbC5fLmludGVycnVwdC5w'@;
put 'dXNoKFQpLGwuXy5lbmQucHVzaChXKSksaWUub249bH0pLDA9PT1oJiZmKCl9KX0sW1N5bWJvbC5pdGVyYXRvcl06cjNbU3ltYm9sLml0ZXJhdG9yXX07dmFyIEZYZT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6ZnVuY3Rpb24gUFhlKGMpe3JldHVybigoYyo9Mik8PTE/'@;
put 'YypjKmM6KGMtPTIpKmMqYysyKS8yfX07ZnVuY3Rpb24gSFhlKGMsbCl7Zm9yKHZhciBhOyEoYT1jLl9fdHJhbnNpdGlvbil8fCEoYT1hW2xdKTspaWYoIShjPWMucGFyZW50Tm9kZSkpdGhyb3cgbmV3IEVycm9yKGB0cmFuc2l0aW9uICR7bH0gbm90IGZvdW5kYCk7cmV0dXJuIGF9WWcucHJv'@;
put 'dG90eXBlLmludGVycnVwdD1mdW5jdGlvbiBwS2UoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe21UKHRoaXMsYyl9KX0sWWcucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24gTlhlKGMpe3ZhciBsLGE7YyBpbnN0YW5jZW9mIExoPyhsPWMuX2lkLGM9Yy5fbmFtZSk6KGw9WmFl'@;
put 'KCksKGE9RlhlKS50aW1lPUVVKCksYz1udWxsPT1jP251bGw6YysiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgVyxfPWRbZl0sVD1fLmxlbmd0aCxpZT0wO2llPFQ7KytpZSkoVz1fW2llXSkmJmdUKFcsYyxsLGllLF8sYXx8SFhlKFcs'@;
put 'bCkpO3JldHVybiBuZXcgTGgoZCx0aGlzLl9wYXJlbnRzLGMsbCl9O3ZhciBWWGU9W251bGxdO2NvbnN0IEJVPXtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9O2Z1bmN0aW9uIGpVKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIFlhZShj'@;
put 'KXtyZXR1cm4oKGM9TWF0aC5leHAoYykpKzEvYykvMn1jb25zdCBXWGU9ZnVuY3Rpb24gYyhsLGEsZCl7ZnVuY3Rpb24gaChmLF8pe3ZhciB5dCxFdCxUPWZbMF0sVz1mWzFdLGllPWZbMl0sRWU9X1syXSxaZT1fWzBdLVQsaXQ9X1sxXS1XLGV0PVplKlplK2l0Kml0O2lmKGV0PDFlLTEyKUV0'@;
put 'PU1hdGgubG9nKEVlL2llKS9sLHl0PWZ1bmN0aW9uKGNyKXtyZXR1cm5bVCtjcipaZSxXK2NyKml0LGllKk1hdGguZXhwKGwqY3IqRXQpXX07ZWxzZXt2YXIgU3Q9TWF0aC5zcXJ0KGV0KSxKdD0oRWUqRWUtaWUqaWUrZCpldCkvKDIqaWUqYSpTdCksbm49KEVlKkVlLWllKmllLWQqZXQpLygy'@;
put 'KkVlKmEqU3QpLHZuPU1hdGgubG9nKE1hdGguc3FydChKdCpKdCsxKS1KdCksTm49TWF0aC5sb2coTWF0aC5zcXJ0KG5uKm5uKzEpLW5uKTtFdD0oTm4tdm4pL2wseXQ9ZnVuY3Rpb24oY3Ipe3ZhciBEcj1jcipFdCxfaT1ZYWUodm4pLGxpPWllLyhhKlN0KSooX2kqZnVuY3Rpb24gWVhlKGMp'@;
put 'e3JldHVybigoYz1NYXRoLmV4cCgyKmMpKS0xKS8oYysxKX0obCpEcit2biktZnVuY3Rpb24gWlhlKGMpe3JldHVybigoYz1NYXRoLmV4cChjKSktMS9jKS8yfSh2bikpO3JldHVybltUK2xpKlplLFcrbGkqaXQsaWUqX2kvWWFlKGwqRHIrdm4pXX19cmV0dXJuIHl0LmR1cmF0aW9uPTFlMypF'@;
put 'dCpsL01hdGguU1FSVDIseXR9cmV0dXJuIGgucmhvPWZ1bmN0aW9uKGYpe3ZhciBfPU1hdGgubWF4KC4wMDEsK2YpLFQ9XypfO3JldHVybiBjKF8sVCxUKlQpfSxofShNYXRoLlNRUlQyLDIsNCk7ZnVuY3Rpb24gS2coYyxsKXtpZihjPWZ1bmN0aW9uIEdYZShjKXtsZXQgbDtmb3IoO2w9Yy5z'@;
put 'b3VyY2VFdmVudDspYz1sO3JldHVybiBjfShjKSx2b2lkIDA9PT1sJiYobD1jLmN1cnJlbnRUYXJnZXQpLGwpe3ZhciBhPWwub3duZXJTVkdFbGVtZW50fHxsO2lmKGEuY3JlYXRlU1ZHUG9pbnQpe3ZhciBkPWEuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gZC54PWMuY2xpZW50WCxkLnk9Yy5j'@;
put 'bGllbnRZLFsoZD1kLm1hdHJpeFRyYW5zZm9ybShsLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsZC55XX1pZihsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dmFyIGg9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bYy5jbGllbnRYLWgubGVmdC1sLmNsaWVudExlZnQsYy5j'@;
put 'bGllbnRZLWgudG9wLWwuY2xpZW50VG9wXX19cmV0dXJuW2MucGFnZVgsYy5wYWdlWV19Y29uc3QgTVQ9Yz0+KCk9PmM7ZnVuY3Rpb24gJFhlKGMse3NvdXJjZUV2ZW50OmwsdGFyZ2V0OmEsdHJhbnNmb3JtOmQsZGlzcGF0Y2g6aH0pe09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3R5'@;
put 'cGU6e3ZhbHVlOmMsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNvdXJjZUV2ZW50Ont2YWx1ZTpsLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0YXJnZXQ6e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LHRyYW5zZm9ybTp7dmFsdWU6ZCxlbnVt'@;
put 'ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sXzp7dmFsdWU6aH19KX1mdW5jdGlvbiBpMyhjLGwsYSl7dGhpcy5rPWMsdGhpcy54PWwsdGhpcy55PWF9aTMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppMyxzY2FsZTpmdW5jdGlvbihjKXtyZXR1cm4gMT09PWM/dGhpczpuZXcgaTModGhpcy5r'@;
put 'KmMsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihjLGwpe3JldHVybiAwPT09YyYwPT09bD90aGlzOm5ldyBpMyh0aGlzLmssdGhpcy54K3RoaXMuaypjLHRoaXMueSt0aGlzLmsqbCl9LGFwcGx5OmZ1bmN0aW9uKGMpe3JldHVybltjWzBdKnRoaXMuayt0aGlzLngsY1sxXSp0'@;
put 'aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKGMpe3JldHVybiBjKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24oYyl7cmV0dXJuWyhjWzBdLXRoaXMueCkvdGhpcy5rLChjWzFdLXRoaXMueSkvdGhp'@;
put 'cy5rXX0saW52ZXJ0WDpmdW5jdGlvbihjKXtyZXR1cm4oYy10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihjKXtyZXR1cm4oYy10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0'@;
put 'WCx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSxyZXNjYWxlWTpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMu'@;
put 'eCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciB4VD1uZXcgaTMoMSwwLDApO2Z1bmN0aW9uIEVUKGMpe2Zvcig7IWMuX196b29tOylpZighKGM9Yy5wYXJlbnROb2RlKSlyZXR1cm4geFQ7cmV0dXJuIGMuX196b29tfWZ1bmN0aW9uIHpVKGMpe2Muc3RvcEltbWVkaWF0'@;
put 'ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdncoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcVhlKGMpe3JldHVybiEoYy5jdHJsS2V5JiYid2hlZWwiIT09Yy50eXBlfHxjLmJ1dHRvbil9ZnVuY3Rpb24gS1hlKCl7dmFyIGM9dGhp'@;
put 'cztyZXR1cm4gYyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KGM9Yy5vd25lclNWR0VsZW1lbnR8fGMpLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKGM9Yy52aWV3Qm94LmJhc2VWYWwpLngsYy55XSxbYy54K2Mud2lkdGgsYy55K2MuaGVpZ2h0XV06W1swLDBdLFtjLndpZHRoLmJhc2VWYWwu'@;
put 'dmFsdWUsYy5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dOltbMCwwXSxbYy5jbGllbnRXaWR0aCxjLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIFdhZSgpe3JldHVybiB0aGlzLl9fem9vbXx8eFR9ZnVuY3Rpb24gWFhlKGMpe3JldHVybi1jLmRlbHRhWSooMT09PWMuZGVsdGFNb2RlPy4wNTpjLmRl'@;
put 'bHRhTW9kZT8xOi4wMDIpKihjLmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gSlhlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIFFYZShjLGwsYSl7dmFyIGQ9Yy5pbnZlcnRYKGxbMF1bMF0pLWFbMF1bMF0saD1jLmludmVy'@;
put 'dFgobFsxXVswXSktYVsxXVswXSxmPWMuaW52ZXJ0WShsWzBdWzFdKS1hWzBdWzFdLF89Yy5pbnZlcnRZKGxbMV1bMV0pLWFbMV1bMV07cmV0dXJuIGMudHJhbnNsYXRlKGg+ZD8oZCtoKS8yOk1hdGgubWluKDAsZCl8fE1hdGgubWF4KDAsaCksXz5mPyhmK18pLzI6TWF0aC5taW4oMCxmKXx8'@;
put 'TWF0aC5tYXgoMCxfKSl9ZnVuY3Rpb24gR2FlKGMpe3ZhciBsPXt9LGE9Yy5ub2RlKCkubm9kZU5hbWU7bC50YWc9YSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsLmF0dHJpYnV0ZXM9e307dmFyIGQ9Yy5ub2RlKCkuYXR0'@;
put 'cmlidXRlcztpZihkKWZvcih2YXIgaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2wuYXR0cmlidXRlc1tmLm5hbWVdPWYudmFsdWV9dmFyIHBlLFc9Yy5ub2RlKCkudHJhbnNmb3JtO2lmKFcmJjAhPVcuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgaWU9Vy5iYXNlVmFsLmNvbnNv'@;
put 'bGlkYXRlKCkubWF0cml4O2wudHJhbnNsYXRpb249e3g6aWUuZSx5OmllLmZ9LGwuc2NhbGU9aWUuYX1pZigiZWxsaXBzZSI9PWEmJihsLmNlbnRlcj17eDpsLmF0dHJpYnV0ZXMuY3gseTpsLmF0dHJpYnV0ZXMuY3l9KSwicG9seWdvbiI9PWEpe3ZhciB3ZT0ocGU9Yy5hdHRyKCJwb2ludHMi'@;
put 'KS5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24oSnQpe3JldHVybiBKdC5zcGxpdCgiLCIpWzBdfSksRWU9cGUubWFwKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc3BsaXQoIiwiKVsxXX0pLFplPU1hdGgubWluLmFwcGx5KG51bGwsd2UpLGl0PU1hdGgubWF4LmFwcGx5KG51bGwsd2UpLGV0PU1h'@;
put 'dGgubWluLmFwcGx5KG51bGwsRWUpLHl0PU1hdGgubWF4LmFwcGx5KG51bGwsRWUpO2wuYmJveD17eDpaZSx5OmV0LHdpZHRoOml0LVplLGhlaWdodDp5dC1ldH0sbC5jZW50ZXI9e3g6KFplK2l0KS8yLHk6KGV0K3l0KS8yfX0icGF0aCI9PWEmJigocGU9Yy5hdHRyKCJkIikuc3BsaXQoL1tB'@;
put 'LVogXS8pKS5zaGlmdCgpLHdlPXBlLm1hcChmdW5jdGlvbihtcil7cmV0dXJuK21yLnNwbGl0KCIsIilbMF19KSxFZT1wZS5tYXAoZnVuY3Rpb24obXIpe3JldHVybittci5zcGxpdCgiLCIpWzFdfSksWmU9TWF0aC5taW4uYXBwbHkobnVsbCx3ZSksaXQ9TWF0aC5tYXguYXBwbHkobnVsbCx3'@;
put 'ZSksZXQ9TWF0aC5taW4uYXBwbHkobnVsbCxFZSkseXQ9TWF0aC5tYXguYXBwbHkobnVsbCxFZSksbC5iYm94PXt4OlplLHk6ZXQsd2lkdGg6aXQtWmUsaGVpZ2h0Onl0LWV0fSxsLmNlbnRlcj17eDooWmUraXQpLzIseTooZXQreXQpLzJ9LGwudG90YWxMZW5ndGg9Yy5ub2RlKCkuZ2V0VG90'@;
put 'YWxMZW5ndGgoKSk7cmV0dXJuInRleHQiPT1hJiYobC5jZW50ZXI9e3g6Yy5hdHRyKCJ4IikseTpjLmF0dHIoInkiKX0pLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGx9ZnVuY3Rpb24gWGcoYyl7dmFyIGw9R2FlKGMpO3Jl'@;
put 'dHVybiBsLmNoaWxkcmVuPVtdLE1VKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1YZyhrcyh0aGlzKSk7ZC5wYXJlbnQ9bCxsLmNoaWxkcmVuLnB1c2goZCl9KSxsfWZ1bmN0aW9uIFVVKGMpe3JldHVybiIjdGV4dCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZVRl'@;
put 'eHROb2RlKCIiKToiI2NvbW1lbnQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVDb21tZW50KGMuY29tbWVudCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYy50YWcpfWZ1bmN0aW9uIFpVKGMpe3ZhciBsPVVVKGMpLGE9a3MobCksZD1jLmF0'@;
put 'dHJpYnV0ZXM7Zm9yKHZhciBoIG9mIE9iamVjdC5rZXlzKGQpKWEuYXR0cihoLGRbaF0pO3JldHVybiBsfWZ1bmN0aW9uICRhZShjLGwpe3ZhciBhPWtzKGMubm9kZSgpLnBhcmVudE5vZGUpLGQ9WlUobCksaD1hLmluc2VydChmdW5jdGlvbigpe3JldHVybiBkfSxmdW5jdGlvbigpe3JldHVy'@;
put 'biBjLm5vZGUoKX0pO3JldHVybiBjLnJlbW92ZSgpLGh9ZnVuY3Rpb24gWVUoYyxsKXshZnVuY3Rpb24gdEplKGMsbCl7Yy5kYXR1bShsKSxjLmRhdGEoW2xdLGZ1bmN0aW9uKGEpe3JldHVybiBhLmtleX0pfShjLGwpLE1VKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oZCxo'@;
put 'KXtZVShrcyh0aGlzKSxsLmNoaWxkcmVuW2hdKX0pfWZ1bmN0aW9uIF93KGMsbD0wKXt2YXIgYT1rcyh0aGlzKSxoPWMuYXR0cmlidXRlcyxmPWEubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZilmb3IodmFyIF89MDtfPGYubGVuZ3RoO18rKyl7dmFyIFQ9ZltfXSxXPVQubmFtZTtpZigieG1sbnMi'@;
put 'IT1XLnNwbGl0KCI6IilbMF0mJlQubmFtZXNwYWNlVVJJKXt2YXIgaWU9VC5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtXPWllW2llLmxlbmd0aC0xXSsiOiIrV31XIGluIGh8fChoW1ddPW51bGwpfWZvcih2YXIgd2Ugb2YgT2JqZWN0LmtleXMoaCkpYS5hdHRyKHdlLGhbd2VdKTtjLnRleHQm'@;
put 'JmEudGV4dChjLnRleHQpLGZ1bmN0aW9uIG5KZShjLGwpe3ZhciBhPWMuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpLmNoaWxkTm9kZXN9KSxkPShhPWEuZGF0YShmdW5jdGlvbihfKXtyZXR1cm4gXy5jaGlsZHJlbn0sZnVuY3Rpb24oXyl7cmV0dXJuIF8udGFnKyItIits'@;
put 'fSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKF8pe3JldHVybiBVVShfKX0pLGg9YS5leGl0KCk7aD1oLnJlbW92ZSgpLGE9ZC5tZXJnZShhKTt2YXIgZj17fTthLmVhY2goZnVuY3Rpb24oXyl7dmFyIFQ9Xy50YWc7bnVsbD09ZltUXSYmKGZbVF09MCk7dmFyIFc9ZltUXSsrO193LmNhbGwo'@;
put 'dGhpcyxfLFcpfSl9KGEsbCl9ZnVuY3Rpb24gcWFlKGMsbCl7dmFyIF8sYT1sP2wubGVuZ3RoOjAsZD1jP01hdGgubWluKGEsYy5sZW5ndGgpOjAsaD1uZXcgQXJyYXkoZCksZj1uZXcgQXJyYXkoYSk7Zm9yKF89MDtfPGQ7KytfKWhbX109a1QoY1tfXSxsW19dKTtmb3IoO188YTsrK18pZltf'@;
put 'XT1sW19dO3JldHVybiBmdW5jdGlvbihUKXtmb3IoXz0wO188ZDsrK18pZltfXT1oW19dKFQpO3JldHVybiBmfX1mdW5jdGlvbiBySmUoYyxsKXt2YXIgYT1uZXcgRGF0ZTtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGQpe3JldHVybiBhLnNldFRpbWUoYyooMS1kKStsKmQpLGF9fWZ1bmN0'@;
put 'aW9uIGlKZShjLGwpe3ZhciBoLGE9e30sZD17fTtmb3IoaCBpbihudWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjKSYmKGM9e30pLChudWxsPT09bHx8Im9iamVjdCIhPXR5cGVvZiBsKSYmKGw9e30pLGwpaCBpbiBjP2FbaF09a1QoY1toXSxsW2hdKTpkW2hdPWxbaF07cmV0dXJuIGZ1bmN0'@;
put 'aW9uKGYpe2ZvcihoIGluIGEpZFtoXT1hW2hdKGYpO3JldHVybiBkfX1mdW5jdGlvbiBvSmUoYyxsKXtsfHwobD1bXSk7dmFyIGgsYT1jP01hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKTowLGQ9bC5zbGljZSgpO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaD0wO2g8YTsrK2gpZFtoXT1jW2hd'@;
put 'KigxLWYpK2xbaF0qZjtyZXR1cm4gZH19ZnVuY3Rpb24ga1QoYyxsKXt2YXIgZCxhPXR5cGVvZiBsO3JldHVybiBudWxsPT1sfHwiYm9vbGVhbiI9PT1hP0ZVKGwpOigibnVtYmVyIj09PWE/RGg6InN0cmluZyI9PT1hPyhkPUdnKGwpKT8obD1kLFNUKTpqYWU6bCBpbnN0YW5jZW9mIEdnP1NU'@;
put 'OmwgaW5zdGFuY2VvZiBEYXRlP3JKZTpmdW5jdGlvbiBzSmUoYyl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhjKSYmIShjIGluc3RhbmNlb2YgRGF0YVZpZXcpfShsKT9vSmU6QXJyYXkuaXNBcnJheShsKT9xYWU6ImZ1bmN0aW9uIiE9dHlwZW9mIGwudmFsdWVPZiYmImZ1bmN0aW9uIiE9'@;
put 'dHlwZW9mIGwudG9TdHJpbmd8fGlzTmFOKGwpP2lKZTpEaCkoYyxsKX1mdW5jdGlvbiBLYWUoKXt2YXIgYz10aGlzLGQ9a3ModGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJzdmciKSk7aWYoMD09ZC5zaXplKCkpcmV0dXJuIHRoaXM7dGhpcy5fem9vbVNlbGVjdGlvbj1k'@;
put 'O3ZhciBoPWZ1bmN0aW9uIGVKZSgpe3ZhciBwZSx3ZSxFZSxjPXFYZSxsPUtYZSxhPVFYZSxkPVhYZSxoPUpYZSxmPVswLDEvMF0sXz1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxUPTI1MCxXPVdYZSxpZT14VSgic3RhcnQiLCJ6b29tIiwiZW5kIiksWmU9NTAwLGl0PTE1MCxldD0wLHl0PTEw'@;
put 'O2Z1bmN0aW9uIEV0KEZuKXtGbi5wcm9wZXJ0eSgiX196b29tIixXYWUpLm9uKCJ3aGVlbC56b29tIixEcix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsX2kpLm9uKCJkYmxjbGljay56b29tIixsaSkuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLG1yKS5vbigidG91'@;
put 'Y2htb3ZlLnpvb20iLEVpKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixacikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBTdChGbixGcil7cmV0dXJuKEZyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsx'@;
put 'XSxGcikpKT09PUZuLms/Rm46bmV3IGkzKEZyLEZuLngsRm4ueSl9ZnVuY3Rpb24gSnQoRm4sRnIsUW4pe3ZhciBNcj1GclswXS1RblswXSpGbi5rLF9yPUZyWzFdLVFuWzFdKkZuLms7cmV0dXJuIE1yPT09Rm4ueCYmX3I9PT1Gbi55P0ZuOm5ldyBpMyhGbi5rLE1yLF9yKX1mdW5jdGlvbiBu'@;
put 'bihGbil7cmV0dXJuWygrRm5bMF1bMF0rICtGblsxXVswXSkvMiwoK0ZuWzBdWzFdKyArRm5bMV1bMV0pLzJdfWZ1bmN0aW9uIHZuKEZuLEZyLFFuLE1yKXtGbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtObih0aGlzLGFyZ3VtZW50cykuZXZlbnQoTXIpLnN0YXJ0KCl9KS5vbigiaW50'@;
put 'ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Tm4odGhpcyxhcmd1bWVudHMpLmV2ZW50KE1yKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciBfcj10aGlzLHZ0PWFyZ3VtZW50cyxPdD1Obihfcix2dCkuZXZlbnQoTXIpLGNuPWwuYXBwbHkoX3IsdnQpLEVuPW51'@;
put 'bGw9PVFuP25uKGNuKToiZnVuY3Rpb24iPT10eXBlb2YgUW4/UW4uYXBwbHkoX3IsdnQpOlFuLE9uPU1hdGgubWF4KGNuWzFdWzBdLWNuWzBdWzBdLGNuWzFdWzFdLWNuWzBdWzFdKSxKbj1fci5fX3pvb20sUHI9ImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KF9yLHZ0KTpGcixPcj1X'@;
put 'KEpuLmludmVydChFbikuY29uY2F0KE9uL0puLmspLFByLmludmVydChFbikuY29uY2F0KE9uL1ByLmspKTtyZXR1cm4gZnVuY3Rpb24oJHIpe2lmKDE9PT0kcikkcj1QcjtlbHNle3ZhciBZcj1PcigkciksTnI9T24vWXJbMl07JHI9bmV3IGkzKE5yLEVuWzBdLVlyWzBdKk5yLEVuWzFdLVly'@;
put 'WzFdKk5yKX1PdC56b29tKG51bGwsJHIpfX0pfWZ1bmN0aW9uIE5uKEZuLEZyLFFuKXtyZXR1cm4hUW4mJkZuLl9fem9vbWluZ3x8bmV3IGNyKEZuLEZyKX1mdW5jdGlvbiBjcihGbixGcil7dGhpcy50aGF0PUZuLHRoaXMuYXJncz1Gcix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9'@;
put 'bnVsbCx0aGlzLmV4dGVudD1sLmFwcGx5KEZuLEZyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBEcihGbiwuLi5Gcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBRbj1Obih0aGlzLEZyKS5ldmVudChGbiksTXI9dGhpcy5fX3pvb20sX3I9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihm'@;
put 'WzFdLE1yLmsqTWF0aC5wb3coMixkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSx2dD1LZyhGbik7aWYoUW4ud2hlZWwpKFFuLm1vdXNlWzBdWzBdIT09dnRbMF18fFFuLm1vdXNlWzBdWzFdIT09dnRbMV0pJiYoUW4ubW91c2VbMV09TXIuaW52ZXJ0KFFuLm1vdXNlWzBdPXZ0KSksY2xlYXJU'@;
put 'aW1lb3V0KFFuLndoZWVsKTtlbHNle2lmKE1yLms9PT1fcilyZXR1cm47UW4ubW91c2U9W3Z0LE1yLmludmVydCh2dCldLG1UKHRoaXMpLFFuLnN0YXJ0KCl9dncoRm4pLFFuLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gT3QoKXtRbi53aGVlbD1udWxsLFFuLmVuZCgpfSxpdCksUW4uem9v'@;
put 'bSgibW91c2UiLGEoSnQoU3QoTXIsX3IpLFFuLm1vdXNlWzBdLFFuLm1vdXNlWzFdKSxRbi5leHRlbnQsXykpfX1mdW5jdGlvbiBfaShGbiwuLi5Gcil7aWYoIUVlJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFFuPUZuLmN1cnJlbnRUYXJnZXQsTXI9Tm4odGhpcyxGciwhMCkuZXZl'@;
put 'bnQoRm4pLF9yPWtzKEZuLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24gRW4oSm4pe2lmKHZ3KEpuKSwhTXIubW92ZWQpe3ZhciBQcj1Kbi5jbGllbnRYLU90LE9yPUpuLmNsaWVudFktY247TXIubW92ZWQ9UHIqUHIrT3IqT3I+ZXR9TXIuZXZlbnQoSm4pLnpvb20oIm1vdXNl'@;
put 'IixhKEp0KE1yLnRoYXQuX196b29tLE1yLm1vdXNlWzBdPUtnKEpuLFFuKSxNci5tb3VzZVsxXSksTXIuZXh0ZW50LF8pKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uIE9uKEpuKXtfci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxmdW5jdGlvbiB6WGUo'@;
put 'YyxsKXt2YXIgYT1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxkPWtzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7bCYmKGQub24oImNsaWNrLmRyYWciLGpVLEJVKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFy'@;
put 'dCJpbiBhP2Qub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihhLnN0eWxlLk1velVzZXJTZWxlY3Q9YS5fX25vc2VsZWN0LGRlbGV0ZSBhLl9fbm9zZWxlY3QpfShKbi52aWV3LE1yLm1vdmVkKSx2dyhKbiksTXIuZXZlbnQoSm4pLmVuZCgpfSwhMCksdnQ9S2coRm4sUW4pLE90PUZuLmNs'@;
put 'aWVudFgsY249Rm4uY2xpZW50WTsoZnVuY3Rpb24galhlKGMpe3ZhciBsPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9a3MoYykub24oImRyYWdzdGFydC5kcmFnIixqVSxCVSk7Im9uc2VsZWN0c3RhcnQiaW4gbD9hLm9uKCJzZWxlY3RzdGFydC5kcmFnIixqVSxCVSk6KGwuX19ub3Nl'@;
put 'bGVjdD1sLnN0eWxlLk1velVzZXJTZWxlY3QsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShGbi52aWV3KSx6VShGbiksTXIubW91c2U9W3Z0LHRoaXMuX196b29tLmludmVydCh2dCldLG1UKHRoaXMpLE1yLnN0YXJ0KCl9fWZ1bmN0aW9uIGxpKEZuLC4uLkZyKXtpZihjLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKSl7dmFyIFFuPXRoaXMuX196b29tLE1yPUtnKEZuLmNoYW5nZWRUb3VjaGVzP0ZuLmNoYW5nZWRUb3VjaGVzWzBdOkZuLHRoaXMpLF9yPVFuLmludmVydChNciksT3Q9YShKdChTdChRbixRbi5rKihGbi5zaGlmdEtleT8uNToyKSksTXIsX3IpLGwuYXBwbHkodGhp'@;
put 'cyxGciksXyk7dncoRm4pLFQ+MD9rcyh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oVCkuY2FsbCh2bixPdCxNcixGbik6a3ModGhpcykuY2FsbChFdC50cmFuc2Zvcm0sT3QsTXIsRm4pfX1mdW5jdGlvbiBtcihGbiwuLi5Gcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB2'@;
put 'dCxPdCxjbixFbixRbj1Gbi50b3VjaGVzLE1yPVFuLmxlbmd0aCxfcj1Obih0aGlzLEZyLEZuLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PU1yKS5ldmVudChGbik7Zm9yKHpVKEZuKSxPdD0wO090PE1yOysrT3QpRW49W0VuPUtnKGNuPVFuW090XSx0aGlzKSx0aGlzLl9fem9vbS5pbnZlcnQo'@;
put 'RW4pLGNuLmlkZW50aWZpZXJdLF9yLnRvdWNoMD8hX3IudG91Y2gxJiZfci50b3VjaDBbMl0hPT1FblsyXSYmKF9yLnRvdWNoMT1Fbixfci50YXBzPTApOihfci50b3VjaDA9RW4sdnQ9ITAsX3IudGFwcz0xKyEhcGUpO3BlJiYocGU9Y2xlYXJUaW1lb3V0KHBlKSksdnQmJihfci50YXBzPDIm'@;
put 'Jih3ZT1FblswXSxwZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cGU9bnVsbH0sWmUpKSxtVCh0aGlzKSxfci5zdGFydCgpKX19ZnVuY3Rpb24gRWkoRm4sLi4uRnIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdnQsT3QsY24sRW4sUW49Tm4odGhpcyxGcikuZXZlbnQoRm4pLE1yPUZuLmNoYW5n'@;
put 'ZWRUb3VjaGVzLF9yPU1yLmxlbmd0aDtmb3IodncoRm4pLHZ0PTA7dnQ8X3I7Kyt2dCljbj1LZyhPdD1Nclt2dF0sdGhpcyksUW4udG91Y2gwJiZRbi50b3VjaDBbMl09PT1PdC5pZGVudGlmaWVyP1FuLnRvdWNoMFswXT1jbjpRbi50b3VjaDEmJlFuLnRvdWNoMVsyXT09PU90LmlkZW50aWZp'@;
put 'ZXImJihRbi50b3VjaDFbMF09Y24pO2lmKE90PVFuLnRoYXQuX196b29tLFFuLnRvdWNoMSl7dmFyIE9uPVFuLnRvdWNoMFswXSxKbj1Rbi50b3VjaDBbMV0sUHI9UW4udG91Y2gxWzBdLE9yPVFuLnRvdWNoMVsxXSwkcj0oJHI9UHJbMF0tT25bMF0pKiRyKygkcj1QclsxXS1PblsxXSkqJHIs'@;
put 'WXI9KFlyPU9yWzBdLUpuWzBdKSpZcisoWXI9T3JbMV0tSm5bMV0pKllyO090PVN0KE90LE1hdGguc3FydCgkci9ZcikpLGNuPVsoT25bMF0rUHJbMF0pLzIsKE9uWzFdK1ByWzFdKS8yXSxFbj1bKEpuWzBdK09yWzBdKS8yLChKblsxXStPclsxXSkvMl19ZWxzZXtpZighUW4udG91Y2gwKXJl'@;
put 'dHVybjtjbj1Rbi50b3VjaDBbMF0sRW49UW4udG91Y2gwWzFdfVFuLnpvb20oInRvdWNoIixhKEp0KE90LGNuLEVuKSxRbi5leHRlbnQsXykpfX1mdW5jdGlvbiBacihGbiwuLi5Gcil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB2dCxPdCxRbj1Obih0aGlzLEZyKS5ldmVudChGbiksTXI9Rm4u'@;
put 'Y2hhbmdlZFRvdWNoZXMsX3I9TXIubGVuZ3RoO2Zvcih6VShGbiksRWUmJmNsZWFyVGltZW91dChFZSksRWU9c2V0VGltZW91dChmdW5jdGlvbigpe0VlPW51bGx9LFplKSx2dD0wO3Z0PF9yOysrdnQpT3Q9TXJbdnRdLFFuLnRvdWNoMCYmUW4udG91Y2gwWzJdPT09T3QuaWRlbnRpZmllcj9k'@;
put 'ZWxldGUgUW4udG91Y2gwOlFuLnRvdWNoMSYmUW4udG91Y2gxWzJdPT09T3QuaWRlbnRpZmllciYmZGVsZXRlIFFuLnRvdWNoMTtpZihRbi50b3VjaDEmJiFRbi50b3VjaDAmJihRbi50b3VjaDA9UW4udG91Y2gxLGRlbGV0ZSBRbi50b3VjaDEpLFFuLnRvdWNoMClRbi50b3VjaDBbMV09dGhp'@;
put 'cy5fX3pvb20uaW52ZXJ0KFFuLnRvdWNoMFswXSk7ZWxzZSBpZihRbi5lbmQoKSwyPT09UW4udGFwcyYmKE90PUtnKE90LHRoaXMpLE1hdGguaHlwb3Qod2VbMF0tT3RbMF0sd2VbMV0tT3RbMV0pPHl0KSl7dmFyIGNuPWtzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7Y24mJmNuLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBFdC50cmFuc2Zvcm09ZnVuY3Rpb24oRm4sRnIsUW4sTXIpe3ZhciBfcj1Gbi5zZWxlY3Rpb24/Rm4uc2VsZWN0aW9uKCk6Rm47X3IucHJvcGVydHkoIl9fem9vbSIsV2FlKSxGbiE9PV9yP3ZuKEZuLEZyLFFuLE1yKTpfci5pbnRlcnJ1cHQoKS5l'@;
put 'YWNoKGZ1bmN0aW9uKCl7Tm4odGhpcyxhcmd1bWVudHMpLmV2ZW50KE1yKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkZyKS5lbmQoKX0pfSxFdC5zY2FsZUJ5PWZ1bmN0aW9uKEZuLEZyLFFuLE1yKXtFdC5zY2FsZVRv'@;
put 'KEZuLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBGcj9Gci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RnIpfSxRbixNcil9LEV0LnNjYWxlVG89ZnVuY3Rpb24oRm4sRnIsUW4sTXIpe0V0LnRyYW5zZm9ybShGbixmdW5jdGlvbigpe3ZhciBfcj1s'@;
put 'LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2dD10aGlzLl9fem9vbSxPdD1udWxsPT1Rbj9ubihfcik6ImZ1bmN0aW9uIj09dHlwZW9mIFFuP1FuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpRbixjbj12dC5pbnZlcnQoT3QpLEVuPSJmdW5jdGlvbiI9PXR5cGVvZiBGcj9Gci5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyk6RnI7cmV0dXJuIGEoSnQoU3QodnQsRW4pLE90LGNuKSxfcixfKX0sUW4sTXIpfSxFdC50cmFuc2xhdGVCeT1mdW5jdGlvbihGbixGcixRbixNcil7RXQudHJhbnNmb3JtKEZuLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBGcj9Gci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RnIsImZ1bmN0aW9uIj09dHlwZW9mIFFuP1FuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpRbiksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksXyl9LG51bGwsTXIpfSxFdC50cmFuc2xhdGVUbz1mdW5jdGlvbihGbixGcixRbixNcixfcil7'@;
put 'RXQudHJhbnNmb3JtKEZuLGZ1bmN0aW9uKCl7dmFyIHZ0PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLE90PXRoaXMuX196b29tLGNuPW51bGw9PU1yP25uKHZ0KToiZnVuY3Rpb24iPT10eXBlb2YgTXI/TXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOk1yO3JldHVybiBhKHhULnRyYW5zbGF0ZShj'@;
put 'blswXSxjblsxXSkuc2NhbGUoT3QuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBGcj8tRnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1GciwiZnVuY3Rpb24iPT10eXBlb2YgUW4/LVFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUW4pLHZ0LF8pfSxNcixfcil9LGNyLnByb3RvdHlw'@;
put 'ZT17ZXZlbnQ6ZnVuY3Rpb24oRm4pe3JldHVybiBGbiYmKHRoaXMuc291cmNlRXZlbnQ9Rm4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0'@;
put 'aW9uKEZuLEZyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PUZuJiYodGhpcy5tb3VzZVsxXT1Gci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09Rm4mJih0aGlzLnRvdWNoMFsxXT1Gci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNo'@;
put 'MSYmInRvdWNoIiE9PUZuJiYodGhpcy50b3VjaDFbMV09RnIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1Gcix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196'@;
put 'b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oRm4pe3ZhciBGcj1rcyh0aGlzLnRoYXQpLmRhdHVtKCk7aWUuY2FsbChGbix0aGlzLnRoYXQsbmV3ICRYZShGbix7c291cmNlRXZlbnQ6dGhpcy5zb3VyY2VFdmVudCx0YXJnZXQ6RXQsdHlwZTpGbix0cmFuc2Zv'@;
put 'cm06dGhpcy50aGF0Ll9fem9vbSxkaXNwYXRjaDppZX0pLEZyKX19LEV0LndoZWVsRGVsdGE9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiBGbj9GbjpNVCgrRm4pLEV0KTpkfSxFdC5maWx0ZXI9ZnVuY3Rpb24oRm4pe3JldHVybiBh'@;
put 'cmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBGbj9GbjpNVCghIUZuKSxFdCk6Y30sRXQudG91Y2hhYmxlPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgRm4/Rm46TVQoISFGbiksRXQpOmh9LEV0LmV4dGVudD1m'@;
put 'dW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIEZuP0ZuOk1UKFtbK0ZuWzBdWzBdLCtGblswXVsxXV0sWytGblsxXVswXSwrRm5bMV1bMV1dXSksRXQpOmx9LEV0LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRz'@;
put 'Lmxlbmd0aD8oZlswXT0rRm5bMF0sZlsxXT0rRm5bMV0sRXQpOltmWzBdLGZbMV1dfSxFdC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfWzBdWzBdPStGblswXVswXSxfWzFdWzBdPStGblsxXVswXSxfWzBdWzFdPStGblswXVsxXSxfWzFd'@;
put 'WzFdPStGblsxXVsxXSxFdCk6W1tfWzBdWzBdLF9bMF1bMV1dLFtfWzFdWzBdLF9bMV1bMV1dXX0sRXQuY29uc3RyYWluPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1GbixFdCk6YX0sRXQuZHVyYXRpb249ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVu'@;
put 'Z3RoPyhUPStGbixFdCk6VH0sRXQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhXPUZuLEV0KTpXfSxFdC5vbj1mdW5jdGlvbigpe3ZhciBGbj1pZS5vbi5hcHBseShpZSxhcmd1bWVudHMpO3JldHVybiBGbj09PWllP0V0OkZufSxFdC5jbGlja0Rp'@;
put 'c3RhbmNlPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZXQ9KEZuPStGbikqRm4sRXQpOk1hdGguc3FydChldCl9LEV0LnRhcERpc3RhbmNlPWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeXQ9K0ZuLEV0KTp5dH0sRXR9KCkuc2NhbGVFeHRlbnQo'@;
put 'dGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQpLnRyYW5zbGF0ZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQpLmludGVycG9sYXRlKGtUKS5vbigiem9vbSIsZnVuY3Rpb24gbChfKXtrcyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpLmF0dHIoInRyYW5z'@;
put 'Zm9ybSIsXy50cmFuc2Zvcm0pLGMuX2Rpc3BhdGNoLmNhbGwoInpvb20iLGMpfSk7dGhpcy5fem9vbUJlaGF2aW9yPWg7dmFyIGY9a3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKTtyZXR1cm4gZC5jYWxsKGgpLHRoaXMuX2FjdGl2ZXx8R1UuY2FsbCh0aGlzLGYpLHRoaXMuX29yaWdp'@;
put 'bmFsVHJhbnNmb3JtPUVUKGQubm9kZSgpKSx0aGlzfWZ1bmN0aW9uIFdVKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1FVCh0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJu'@;
put 'IGwmJihmPShmPWYuc2NhbGUoMS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2FsZShoKX1mdW5jdGlvbiBHVShjKXt0aGlzLl96b29tQmVoYXZpb3IudHJhbnNmb3JtKHRoaXMuX3pvb21TZWxlY3Rpb24sV1UuY2FsbCh0aGlzLGMpKSx0aGlz'@;
put 'Ll90cmFuc2xhdGlvbj1jLmRhdHVtKCkudHJhbnNsYXRpb24sdGhpcy5fc2NhbGU9Yy5kYXR1bSgpLnNjYWxlLHRoaXMuX29yaWdpbmFsVHJhbnNmb3JtPXhULnRyYW5zbGF0ZShjLmRhdHVtKCkudHJhbnNsYXRpb24ueCxjLmRhdHVtKCkudHJhbnNsYXRpb24ueSkuc2NhbGUoYy5kYXR1bSgp'@;
put 'LnNjYWxlKX1mdW5jdGlvbiBmSmUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBhPWMubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBrVChbZFswXVswXSxkWzBdWzFdXSxbZFsxXVswXSxkWzFdWzFdXSl9KTtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIGQ8MT8iTSIrYS5tYXAoZnVuY3Rp'@;
put 'b24oaCl7cmV0dXJuIGgoZCl9KS5qb2luKCJMIik6bH19fWZ1bmN0aW9uIFhhZShjKXtyZXR1cm4iZWRnZSI9PWMuYXR0cmlidXRlcy5jbGFzc3x8ImEiPT1jLnRhZyYmImciPT1jLnBhcmVudC50YWcmJiJlZGdlIj09Yy5wYXJlbnQucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3N9ZnVuY3Rpb24g'@;
put 'SmFlKGMpe3JldHVybiBjLnBhcmVudCYmWGFlKGMucGFyZW50KX1mdW5jdGlvbiBRYWUoYyl7dmFyIGw9dGhpcy5fdHJhbnNpdGlvbixhPXRoaXMuX29wdGlvbnMuZmFkZSYmbnVsbCE9bCxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXMsZj10'@;
put 'aGlzLl9vcHRpb25zLmNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnMsXz10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzJiZudWxsIT1sLFQ9dGhpcy5fYXR0cmlidXRlcixXPXRoaXM7dmFyIHdlPXRoaXMuX3NlbGVjdGlvbjtpZihudWxsIT1sKXt2YXIgRWU9dGhpcy5fam9icztpZihX'@;
put 'Ll9hY3RpdmUpcmV0dXJuIEVlLnB1c2gobnVsbCksdGhpczt3ZS50cmFuc2l0aW9uKGwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigiZW5kIixmdW5jdGlvbigpe1cuX2FjdGl2ZT0hMSwwIT1FZS5sZW5ndGgmJihFZS5zaGlmdCgpLFcucmVuZGVyKCkpfSksdGhpcy5fYWN0aXZlPSEw'@;
put 'fW51bGwhPWwmJndlLnRyYW5zaXRpb24obCkub24oInN0YXJ0IixmdW5jdGlvbigpe1cuX2Rpc3BhdGNoLmNhbGwoInRyYW5zaXRpb25TdGFydCIsVyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1cuX2Rpc3BhdGNoLmNhbGwoInRyYW5zaXRpb25FbmQiLFcpfSkudHJhbnNpdGlvbigpLmR1cmF0'@;
put 'aW9uKDApLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtXLl9kaXNwYXRjaC5jYWxsKCJyZXN0b3JlRW5kIixXKSxXLl9kaXNwYXRjaC5jYWxsKCJlbmQiLFcpLGMmJmMuY2FsbChXKX0pO3ZhciBaZT10aGlzLl9kYXRhLGl0PXdlLnNlbGVjdEFsbCgic3ZnIikuZGF0YShbWmVdLGZ1bmN0aW9uKGV0'@;
put 'KXtyZXR1cm4gZXQua2V5fSk7cmV0dXJuIGl0PWl0LmVudGVyKCkuYXBwZW5kKCJzdmciKS5tZXJnZShpdCksZnVuY3Rpb24gcGUoZXQpe3ZhciB5dD1rcyh0aGlzKTtpZigic3ZnIj09ZXQudGFnKXt2YXIgRXQ9Vy5fb3B0aW9ucztpZihudWxsIT1FdC53aWR0aHx8bnVsbCE9RXQuaGVpZ2h0'@;
put 'KXt2YXIgU3Q9RXQud2lkdGgsSnQ9RXQuaGVpZ2h0O251bGw9PVN0P1N0PTQqZXQuYXR0cmlidXRlcy53aWR0aC5yZXBsYWNlKCJwdCIsIiIpLzM6KHl0LmF0dHIoIndpZHRoIixTdCksZXQuYXR0cmlidXRlcy53aWR0aD1TdCksbnVsbD09SnQ/SnQ9NCpldC5hdHRyaWJ1dGVzLmhlaWdodC5y'@;
put 'ZXBsYWNlKCJwdCIsIiIpLzM6KHl0LmF0dHIoImhlaWdodCIsSnQpLGV0LmF0dHJpYnV0ZXMuaGVpZ2h0PUp0KSxFdC5maXR8fCh5dC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7MypTdC80L0V0LnNjYWxlfSAkezMqSnQvNC9FdC5zY2FsZX1gKSxldC5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAk'@;
put 'ezMqU3QvNC9FdC5zY2FsZX0gJHszKkp0LzQvRXQuc2NhbGV9YCl9MSE9RXQuc2NhbGUmJihFdC5maXR8fG51bGw9PUV0LndpZHRoJiZudWxsPT1FdC5oZWlnaHQpJiYoU3Q9ZXQuYXR0cmlidXRlcy52aWV3Qm94LnNwbGl0KCIgIilbMl0sSnQ9ZXQuYXR0cmlidXRlcy52aWV3Qm94LnNwbGl0'@;
put 'KCIgIilbM10seXQuYXR0cigidmlld0JveCIsYDAgMCAke1N0L0V0LnNjYWxlfSAke0p0L0V0LnNjYWxlfWApLGV0LmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7U3QvRXQuc2NhbGV9ICR7SnQvRXQuc2NhbGV9YCl9VCYmeXQuZWFjaChUKTt2YXIgbm49ZXQudGFnLHZuPWV0LmF0dHJpYnV0'@;
put 'ZXMsTm49eXQubm9kZSgpLmF0dHJpYnV0ZXM7aWYoTm4pZm9yKHZhciBjcj0wO2NyPE5uLmxlbmd0aDtjcisrKXt2YXIgRHI9Tm5bY3JdLF9pPURyLm5hbWU7aWYoInhtbG5zIiE9X2kuc3BsaXQoIjoiKVswXSYmRHIubmFtZXNwYWNlVVJJKXt2YXIgbGk9RHIubmFtZXNwYWNlVVJJLnNwbGl0'@;
put 'KCIvIik7X2k9bGlbbGkubGVuZ3RoLTFdKyI6IitfaX1faSBpbiB2bnx8KHZuW19pXT1udWxsKX12YXIgRWk9ITEsWnI9ITE7aWYoaCYmbCl7aWYoKCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZXx8ImVsbGlwc2UiPT10aGlzLm5vZGVOYW1lKSYmZXQuYWx0ZXJuYXRpdmVPbGQmJihacj0hMCks'@;
put 'KCJwb2x5Z29uIj09bm58fCJlbGxpcHNlIj09bm4pJiZldC5hbHRlcm5hdGl2ZU5ldyYmKEVpPSEwKSwicG9seWdvbiI9PXRoaXMubm9kZU5hbWUmJiJwb2x5Z29uIj09bm4mJmV0LmFsdGVybmF0aXZlT2xkKXt2YXIgRm49R2FlKHl0KTtpZighZil7dmFyIFFuPUZuLmF0dHJpYnV0ZXMucG9p'@;
put 'bnRzLnNwbGl0KCIgIikubGVuZ3RoOyhNcj1ldC5hdHRyaWJ1dGVzLnBvaW50cykuc3BsaXQoIiAiKS5sZW5ndGg9PVFuJiYoRWk9ITEsWnI9ITEpfX1pZihacil7dmFyIE90PSRhZSh5dCxldC5hbHRlcm5hdGl2ZU9sZCk7T3QuZGF0YShbZXRdLGZ1bmN0aW9uKCl7cmV0dXJuIGV0LmtleX0p'@;
put 'LHl0PU90fUVpJiYobm49InBhdGgiLHZuPWV0LmFsdGVybmF0aXZlTmV3LmF0dHJpYnV0ZXMpfXZhciBFbj15dDtpZihsJiYoRW49RW4udHJhbnNpdGlvbihsKSxhJiZFbi5maWx0ZXIoZnVuY3Rpb24oSWkpe3JldHVybiIjIj09SWkudGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5'@;
put 'IiwxKSxFbi5maWx0ZXIoZnVuY3Rpb24oSWkpe3JldHVybiIjIj09SWkudGFnWzBdP251bGw6dGhpc30pLm9uKCJlbmQiLGZ1bmN0aW9uKElpKXtrcyh0aGlzKS5hdHRyKCJzdHlsZSIsSWkmJklpLmF0dHJpYnV0ZXMmJklpLmF0dHJpYnV0ZXMuc3R5bGV8fG51bGwpfSkpLF8mJiJwYXRoIj09'@;
put 'bm4mJmV0Lm9mZnNldCl7dmFyIEpuPWV0LnRvdGFsTGVuZ3RoO3l0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLEpuKyIgIitKbikuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLEpuKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitldC5vZmZzZXQueCsiLCIrZXQub2Zmc2V0LnkrIiki'@;
put 'KSx2blsic3Ryb2tlLWRhc2hvZmZzZXQiXT0wLHZuLnRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiLEVuLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0Iix2blsic3Ryb2tlLWRhc2hvZmZzZXQiXSkuYXR0cigidHJhbnNmb3JtIix2bi50cmFuc2Zvcm0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtr'@;
put 'cyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe2tzKHRoaXMpLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixudWxsKS5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixudWxsKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpfSl9aWYoXyYmInBvbHlnb24iPT1u'@;
put 'biYmSmFlKGV0KSYmZXQub2Zmc2V0JiYicGF0aCI9PWV0LnBhcmVudC5jaGlsZHJlblszXS50YWcpe3ZhciBPcj1rcyh5dC5ub2RlKCkucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKCJwYXRoIikpLCRyPU9yLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKDApLFlyPU9yLm5vZGUoKS5nZXRQb2lu'@;
put 'dEF0TGVuZ3RoKGV0LnRvdGFsTGVuZ3RoKSxOcj1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aC0xKSxSaT0xODAqTWF0aC5hdGFuMihZci55LU5yLnksWXIueC1Oci54KS9NYXRoLlBJLFhvPSRyLngtWXIueCtldC5vZmZzZXQueCxHbz0kci55LVlyLnkrZXQub2Zm'@;
put 'c2V0Lnk7eXQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrWG8rIiwiK0dvKyIpIiksRW4uYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKElpKXt2YXIgUXM9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgqSWkpLGxh'@;
put 'PU9yLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGV0LnRvdGFsTGVuZ3RoKklpKzEpLEZzPTE4MCpNYXRoLmF0YW4yKGxhLnktUXMueSxsYS54LVFzLngpL01hdGguUEktUmk7cmV0dXJuInRyYW5zbGF0ZSgiKyhYbz1Rcy54LVlyLngrZXQub2Zmc2V0LngqKDEtSWkpKSsiLCIrKEdvPVFzLnkt'@;
put 'WXIueStldC5vZmZzZXQueSooMS1JaSkpKyIpIHJvdGF0ZSgiK0ZzKyIgIitZci54KyIgIitZci55KyIpIn19KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7a3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtrcyh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0i'@;
put 'LG51bGwpfSl9dmFyIEpzPWQmJmwmJiJwYXRoIj09bm4mJm51bGwhPXl0LmF0dHIoImQiKTtmb3IodmFyIGdhIG9mIE9iamVjdC5rZXlzKHZuKSl7dmFyIHVvPXZuW2dhXTtpZihKcyYmImQiPT1nYSl7dmFyIE1yOyhNcj0oZXQuYWx0ZXJuYXRpdmVPbGR8fGV0KS5wb2ludHMpJiZFbi5hdHRy'@;
put 'VHdlZW4oImQiLGZKZShNcix1bykpfWVsc2V7aWYoInRyYW5zZm9ybSI9PWdhJiZldC50cmFuc2xhdGlvbilpZihsKXt2YXIgQXQ9RW4ub24oImVuZCIpO0VuLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtXLl96b29tQmVoYXZpb3ImJkVuLnR3ZWVuKCJhdHRyLnRyYW5zZm9ybSIsZnVuY3Rpb24o'@;
put 'KXt2YXIgSWk9dGhpcztyZXR1cm4gZnVuY3Rpb24oUXMpe0lpLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixFYWUoRVQoVy5fem9vbVNlbGVjdGlvbi5ub2RlKCkpLnRvU3RyaW5nKCksV1UuY2FsbChXLHl0KS50b1N0cmluZygpKShRcykpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXtBdC5j'@;
put 'YWxsKHRoaXMpLFcuX3pvb21CZWhhdmlvciYmR1UuY2FsbChXLHl0KX0pfWVsc2UgVy5fem9vbUJlaGF2aW9yJiYoR1UuY2FsbChXLHl0KSx1bz1XVS5jYWxsKFcseXQpLnRvU3RyaW5nKCkpO0VuLmF0dHIoZ2EsdW8pfX1FaSYmRW4ub24oImVuZCIsZnVuY3Rpb24oSWksUXMsbGEpeyRhZShP'@;
put 'dD1rcyh0aGlzKSxJaSkuZGF0YShbSWldLGZ1bmN0aW9uKCl7cmV0dXJuIElpLmtleX0pfSksZXQudGV4dCYmRW4udGV4dChldC50ZXh0KSxmdW5jdGlvbiBpZShldCl7dmFyIHl0PWV0LnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBldC5ub2RlKCkuY2hpbGROb2Rlc30pLEV0PSh5dD15'@;
put 'dC5kYXRhKGZ1bmN0aW9uKG5uKXtyZXR1cm4gbm4uY2hpbGRyZW59LGZ1bmN0aW9uKG5uKXtyZXR1cm4gbm4ua2V5fSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKG5uKXt2YXIgdm49VVUobm4pO3JldHVybiIjdGV4dCI9PW5uLnRhZyYmYSYmKHZuLm5vZGVWYWx1ZT1ubi50ZXh0KSx2bn0p'@;
put 'OyhhfHxfJiZYYWUoZXQuZGF0dW0oKSkpJiZFdC5maWx0ZXIoZnVuY3Rpb24obm4pe3JldHVybiIjIj09bm4udGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24obm4pe3ZhciB2bj1rcyh0aGlzKTtmb3IodmFyIE5uIG9mIE9iamVjdC5rZXlzKG5uLmF0dHJpYnV0ZXMpKXZuLmF0dHIo'@;
put 'Tm4sbm4uYXR0cmlidXRlc1tObl0pfSkuZmlsdGVyKGZ1bmN0aW9uKG5uKXtyZXR1cm4ic3ZnIj09bm4udGFnfHwiZyI9PW5uLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIEp0PXl0LmV4aXQoKTtUJiZKdC5lYWNoKFQpLGwmJihKdD1KdC50cmFuc2l0aW9uKGwpLGEm'@;
put 'Jkp0LmZpbHRlcihmdW5jdGlvbihubil7cmV0dXJuIiMiPT1ubi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSxKdD1KdC5yZW1vdmUoKSwoeXQ9RXQubWVyZ2UoeXQpKS5lYWNoKHBlKX0oeXQpfS5jYWxsKGl0Lm5vZGUoKSxaZSksdGhpcy5fb3B0aW9ucy56b29tJiYh'@;
put 'dGhpcy5fem9vbUJlaGF2aW9yJiZLYWUuY2FsbCh0aGlzKSxXLl9kaXNwYXRjaC5jYWxsKCJyZW5kZXJFbmQiLFcpLG51bGw9PWwmJih0aGlzLl9kaXNwYXRjaC5jYWxsKCJlbmQiLHRoaXMpLGMmJmMuY2FsbCh0aGlzKSksdGhpc31FVC5wcm90b3R5cGU9aTMucHJvdG90eXBlO3ZhciB5SmU9'@;
put 'QXJyYXlCdWZmZXIsUWw9VWludDhBcnJheSxBVD1VaW50MTZBcnJheSx3SmU9SW50MTZBcnJheSxUVD1JbnQzMkFycmF5LCRVPWZ1bmN0aW9uKGMsbCxhKXtpZihRbC5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIFFsLnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDwwKSYm'@;
put 'KGw9MCksKG51bGw9PWF8fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IFFsKGEtbCk7cmV0dXJuIGQuc2V0KGMuc3ViYXJyYXkobCxhKSksZH0sYnc9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoUWwucHJvdG90eXBlLmZpbGwpcmV0dXJuIFFsLnByb3RvdHlwZS5maWxsLmNhbGwo'@;
put 'YyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KythKWNbYV09bDtyZXR1cm4gY30sQ0plPWZ1bmN0aW9uKGMsbCxhLGQpe2lmKFFsLnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBRbC5wcm90b3R5cGUu'@;
put 'Y29weVdpdGhpbi5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOyljW2wrK109Y1thKytdfSxTSmU9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQiki'@;
put 'LCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLG1jPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8U0plW2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0dXJl'@;
put 'U3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxtYyksIWEpdGhyb3cgZDtyZXR1cm4gZH0sZWxlPWZ1bmN0aW9uKGMsbCxhKXtmb3IodmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0sTUplPWZ1bmN0aW9uKGMsbCl7dmFyIGEsaD1jWzBd'@;
put 'fGNbMV08PDh8Y1syXTw8MTY7aWYoMzEyNjU2OD09aCYmMjUzPT1jWzNdKXt2YXIgZj1jWzRdLF89Zj4+NSYxLFQ9Zj4+MiYxLFc9MyZmLGllPWY+PjY7OCZmJiZtYygwKTt2YXIgcGU9Ni1fLHdlPTM9PVc/NDpXLEVlPWVsZShjLHBlLHdlKSxaZT1pZT8xPDxpZTpfLGl0PWVsZShjLHBlKz13'@;
put 'ZSxaZSkrKDE9PWllJiYyNTYpLGV0PWl0O2lmKCFfKXt2YXIgeXQ9MTw8MTArKGNbNV0+PjMpO2V0PXl0Kyh5dD4+MykqKDcmY1s1XSl9ZXQ+MjE0NTM4NjQ5NiYmbWMoMSk7dmFyIEV0PW5ldyBRbCgoMT09bD9pdHx8ZXQ6bD8wOmV0KSsxMik7cmV0dXJuIEV0WzBdPTEsRXRbNF09NCxFdFs4'@;
put 'XT04LHtiOnBlK1plLHk6MCxsOjAsZDpFZSx3OmwmJjEhPWw/bDpFdC5zdWJhcnJheSgxMiksZTpldCxvOm5ldyBUVChFdC5idWZmZXIsMCwzKSx1Oml0LGM6VCxtOk1hdGgubWluKDEzMTA3MixldCl9fWlmKDI1NDgxODkzPT0oaD4+NHxjWzNdPDwyMCkpcmV0dXJuIDgrKCgoYT1jKVs0XXxh'@;
put 'WzVdPDw4fGFbNl08PDE2fGFbN108PDI0KT4+PjApO21jKDApfSxKZz1mdW5jdGlvbihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0seXc9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7aD5hJiZtYygzKTtmb3IodmFyIGY9MTw8aCxf'@;
put 'PWYsVD0tMSxXPS0xLGllPS0xLHBlPWYsd2U9bmV3IHlKZSg1MTIrKGY8PDIpKSxFZT1uZXcgd0plKHdlLDAsMjU2KSxaZT1uZXcgQVQod2UsMCwyNTYpLGl0PW5ldyBBVCh3ZSw1MTIsZiksZXQ9NTEyKyhmPDwxKSx5dD1uZXcgUWwod2UsZXQsZiksRXQ9bmV3IFFsKHdlLGV0K2YpO1Q8MjU1'@;
put 'JiZfPjA7KXt2YXIgU3Q9SmcoXysxKSxKdD1kPj4zLG5uPSgxPDxTdCsxKS0xLHZuPShjW0p0XXxjW0p0KzFdPDw4fGNbSnQrMl08PDE2KT4+KDcmZCkmbm4sTm49KDE8PFN0KS0xLGNyPW5uLV8tMSxEcj12biZObjtpZihEcjxjcj8oZCs9U3Qsdm49RHIpOihkKz1TdCsxLHZuPk5uJiYodm4t'@;
put 'PWNyKSksRWVbKytUXT0tLXZuLC0xPT12bj8oXys9dm4seXRbLS1wZV09VCk6Xy09dm4sIXZuKWRve3ZhciBfaT1kPj4zO1c9KGNbX2ldfGNbX2krMV08PDgpPj4oNyZkKSYzLGQrPTIsVCs9V313aGlsZSgzPT1XKX0oVD4yNTV8fF8pJiZtYygwKTtmb3IodmFyIGxpPTAsbXI9KGY+PjEpKyhm'@;
put 'Pj4zKSszLEVpPWYtMSxacj0wO1pyPD1UOysrWnIpe3ZhciBGbj1FZVtacl07aWYoRm48MSlaZVtacl09LUZuO2Vsc2UgZm9yKGllPTA7aWU8Rm47KytpZSl7eXRbbGldPVpyO2Rve2xpPWxpK21yJkVpfXdoaWxlKGxpPj1wZSl9fWZvcihsaSYmbWMoMCksaWU9MDtpZTxmOysraWUpe3ZhciBG'@;
put 'cj1aZVt5dFtpZV1dKyssUW49RXRbaWVdPWgtSmcoRnIpO2l0W2llXT0oRnI8PFFuKS1mfXJldHVybltkKzc+PjMse2I6aCxzOnl0LG46RXQsdDppdH1dfSx4SmU9eXcobmV3IFFsKFs4MSwxNiw5OSwxNDAsNDksMTk4LDI0LDk5LDEyLDMzLDE5NiwyNCw5OSwxMDIsMTAyLDEzNCw3MCwxNDYs'@;
put 'NF0pLDAsNilbMV0sRUplPXl3KG5ldyBRbChbMzMsMjAsMTk2LDI0LDk5LDE0MCwzMywxMzIsMTYsNjYsOCwzMywxMzIsMTYsNjYsOCwzMyw2OCw2OCw2OCw2OCw2OCw2OCw2OCw2OCwzNiw5XSksMCw2KVsxXSxrSmU9eXcobmV3IFFsKFszMiwxMzIsMTYsNjYsMTAyLDcwLDY4LDY4LDY4LDY4'@;
put 'LDM2LDczLDJdKSwwLDUpWzFdLHRsZT1mdW5jdGlvbihjLGwpe2Zvcih2YXIgYT1jLmxlbmd0aCxkPW5ldyBUVChhKSxoPTA7aDxhOysraClkW2hdPWwsbCs9MTw8Y1toXTtyZXR1cm4gZH0scVU9bmV3IFFsKG5ldyBUVChbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAy'@;
put 'MDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxBSmU9dGxlKHFVLDApLEtVPW5ldyBRbChuZXcgVFQoWzAsMCwwLDAsMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMTc3NjkyMjAsMTg1MjA3MDQ4LDI1MjU3OTA4NCwxNl0pLmJ1ZmZlciwwLDUzKSxUSmU9dGxlKEtVLDMpLHd3PWZ1'@;
put 'bmN0aW9uKGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tkLTFdLF89KDE8PGEuYiktMSxUPS1hLmI7Znx8bWMoMCk7Zm9yKHZhciBXPTAsaWU9YS5iLHBlPShkPDwzKS04K0pnKGYpLWllLHdlPS0xO3BlPlQmJndlPGg7KXt2YXIgRWU9cGU+PjM7bFsrK3dlXT1hLnNbVz0o'@;
put 'Vzw8aWV8KGNbRWVdfGNbRWUrMV08PDh8Y1tFZSsyXTw8MTYpPj4oNyZwZSkpJl9dLHBlLT1pZT1hLm5bV119cGU9PVQmJndlKzE9PWh8fG1jKDApfSxESmU9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTYsaD1sLmxlbmd0aCszPj4yLGY9aDw8MSxfPWgrZjt3dyhjLnN1YmFycmF5KGQsZCs9Y1sw'@;
put 'XXxjWzFdPDw4KSxsLnN1YmFycmF5KDAsaCksYSksd3coYy5zdWJhcnJheShkLGQrPWNbMl18Y1szXTw8OCksbC5zdWJhcnJheShoLGYpLGEpLHd3KGMuc3ViYXJyYXkoZCxkKz1jWzRdfGNbNV08PDgpLGwuc3ViYXJyYXkoZixfKSxhKSx3dyhjLnN1YmFycmF5KGQpLGwuc3ViYXJyYXkoXyks'@;
put 'YSl9LElKZT1mdW5jdGlvbihjLGwsYSl7dmFyIGQsaD1sLmIsZj1jW2hdLF89Zj4+MSYzO2wubD0xJmY7dmFyIFQ9Zj4+M3xjW2grMV08PDV8Y1toKzJdPDwxMyxXPShoKz0zKStUO2lmKDE9PV8pcmV0dXJuIGg+PWMubGVuZ3RoP3ZvaWQgMDoobC5iPWgrMSxhPyhidyhhLGNbaF0sbC55LGwu'@;
put 'eSs9VCksYSk6YncobmV3IFFsKFQpLGNbaF0pKTtpZighKFc+Yy5sZW5ndGgpKXtpZigwPT1fKXJldHVybiBsLmI9VyxhPyhhLnNldChjLnN1YmFycmF5KGgsVyksbC55KSxsLnkrPVQsYSk6JFUoYyxoLFcpO2lmKDI9PV8pe3ZhciBpZT1jW2hdLHBlPTMmaWUsd2U9aWU+PjImMyxFZT1pZT4+'@;
put 'NCxaZT0wLGl0PTA7cGU8Mj8xJndlP0VlfD1jWysraF08PDR8KDImd2UmJmNbKytoXTw8MTIpOkVlPWllPj4zOihpdD13ZSx3ZTwyPyhFZXw9KDYzJmNbKytoXSk8PDQsWmU9Y1toXT4+NnxjWysraF08PDIpOjI9PXdlPyhFZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8PDEyLFplPWNbaF0+PjJ8'@;
put 'Y1srK2hdPDw2KTooRWV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsWmU9Y1toXT4+NnxjWysraF08PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgZXQ9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgUWwobC5tKSx5dD1ldC5sZW5ndGgtRWU7aWYoMD09cGUpZXQuc2V0KGMuc3ViYXJy'@;
put 'YXkoaCxoKz1FZSkseXQpO2Vsc2UgaWYoMT09cGUpYncoZXQsY1toKytdLHl0KTtlbHNle3ZhciBFdD1sLmg7aWYoMj09cGUpe3ZhciBTdD1mdW5jdGlvbihnYSx1byl7dmFyIEF0PTAsSWk9LTEsUXM9bmV3IFFsKDI5MiksbGE9Z2FbdW9dLEZzPVFzLnN1YmFycmF5KDAsMjU2KSxlYz1Rcy5z'@;
put 'dWJhcnJheSgyNTYsMjY4KSxDYT1uZXcgQVQoUXMuYnVmZmVyLDI2OCk7aWYobGE8MTI4KXt2YXIgUmg9eXcoZ2EsdW8rMSw2KSxEbD1SaFsxXSx4Mj1SaFswXTw8Myx1ND1nYVt1bys9bGFdO3U0fHxtYygwKTtmb3IodmFyIE9oPTAsQ2Q9MCwkYz1EbC5iLFNkPSRjLEp1PSgrK3VvPDwzKS04'@;
put 'K0pnKHU0KTshKChKdS09JGMpPHgyKTspe3ZhciBNMT1KdT4+MztpZihGc1srK0lpXT1EbC5zW09oKz0oZ2FbTTFdfGdhW00xKzFdPDw4KT4+KDcmSnUpJigxPDwkYyktMV0sKEp1LT1TZCk8eDIpYnJlYWs7Q2QrPShnYVtNMT1KdT4+M118Z2FbTTErMV08PDgpPj4oNyZKdSkmKDE8PFNkKS0x'@;
put 'LEZzWysrSWldPURsLnNbQ2RdLCRjPURsLm5bT2hdLE9oPURsLnRbT2hdLFNkPURsLm5bQ2RdLENkPURsLnRbQ2RdfSsrSWk+MjU1JiZtYygwKX1lbHNle2ZvcihJaT1sYS0xMjc7QXQ8SWk7QXQrPTIpe3ZhciBNdT1nYVsrK3VvXTtGc1tBdF09TXU+PjQsRnNbQXQrMV09MTUmTXV9Kyt1b312'@;
put 'YXIgYXU9MDtmb3IoQXQ9MDtBdDxJaTsrK0F0KShkND1Gc1tBdF0pPjExJiZtYygwKSxhdSs9ZDQmJjE8PGQ0LTE7dmFyIHgxPUpnKGF1KSsxLEUyPTE8PHgxLCQ3PUUyLWF1O2ZvcigkNyYkNy0xJiZtYygwKSxGc1tJaSsrXT1KZygkNykrMSxBdD0wO0F0PElpOysrQXQpe3ZhciBkND1Gc1tB'@;
put 'dF07KytlY1tGc1tBdF09ZDQmJngxKzEtZDRdfXZhciBTdz1uZXcgUWwoRTI8PDEpLGVtPVN3LnN1YmFycmF5KDAsRTIpLE13PVN3LnN1YmFycmF5KEUyKTtmb3IoQ2FbeDFdPTAsQXQ9eDE7QXQ+MDstLUF0KXt2YXIgeHc9Q2FbQXRdO2J3KE13LEF0LHh3LENhW0F0LTFdPXh3K2VjW0F0XSoo'@;
put 'MTw8eDEtQXQpKX1mb3IoQ2FbMF0hPUUyJiZtYygwKSxBdD0wO0F0PElpOysrQXQpe3ZhciB0bT1Gc1tBdF07aWYodG0pe3ZhciBFdz1DYVt0bV07YncoZW0sQXQsRXcsQ2FbdG1dPUV3KygxPDx4MS10bSkpfX1yZXR1cm5bdW8se246TXcsYjp4MSxzOmVtfV19KGMsaCk7WmUrPWgtKGg9U3Rb'@;
put 'MF0pLGwuaD1FdD1TdFsxXX1lbHNlIEV0fHxtYygwKTsoaXQ/REplOnd3KShjLnN1YmFycmF5KGgsaCs9WmUpLGV0LnN1YmFycmF5KHl0KSxFdCl9dmFyIEp0PWNbaCsrXTtpZihKdCl7MjU1PT1KdD9KdD0zMjUxMisoY1toKytdfGNbaCsrXTw8OCk6SnQ+MTI3JiYoSnQ9SnQtMTI4PDw4fGNb'@;
put 'aCsrXSk7dmFyIG5uPWNbaCsrXTszJm5uJiZtYygwKTtmb3IodmFyIHZuPVtFSmUsa0plLHhKZV0sTm49MjtObj4tMTstLU5uKXt2YXIgY3I9bm4+PjIrKE5uPDwxKSYzO2lmKDE9PWNyKXt2YXIgRHI9bmV3IFFsKFswLDAsY1toKytdXSk7dm5bTm5dPXtzOkRyLnN1YmFycmF5KDIsMyksbjpE'@;
put 'ci5zdWJhcnJheSgwLDEpLHQ6bmV3IEFUKERyLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT1jcj8oaD0oZD15dyhjLGgsOS0oMSZObikpKVswXSx2bltObl09ZFsxXSk6Mz09Y3ImJihsLnR8fG1jKDApLHZuW05uXT1sLnRbTm5dKX12YXIgX2k9bC50PXZuLGxpPV9pWzBdLG1yPV9pWzFdLEVp'@;
put 'PV9pWzJdLFpyPWNbVy0xXTtacnx8bWMoMCk7dmFyIEZuPShXPDwzKS04K0pnKFpyKS1FaS5iLEZyPUZuPj4zLFFuPTAsTXI9KGNbRnJdfGNbRnIrMV08PDgpPj4oNyZGbikmKDE8PEVpLmIpLTEsX3I9KGNbRnI9KEZuLT1tci5iKT4+M118Y1tGcisxXTw8OCk+Pig3JkZuKSYoMTw8bXIuYikt'@;
put 'MSx2dD0oY1tGcj0oRm4tPWxpLmIpPj4zXXxjW0ZyKzFdPDw4KT4+KDcmRm4pJigxPDxsaS5iKS0xO2ZvcigrK0p0Oy0tSnQ7KXt2YXIgT3Q9RWkuc1tNcl0sY249RWkubltNcl0sRW49bGkuc1t2dF0sT249bGkublt2dF0sSm49bXIuc1tfcl0sUHI9bXIubltfcl0sT3I9MTw8Sm4sJHI9T3Ir'@;
put 'KChjW0ZyPShGbi09Sm4pPj4zXXxjW0ZyKzFdPDw4fGNbRnIrMl08PDE2fGNbRnIrM108PDI0KT4+Pig3JkZuKSZPci0xKTtGcj0oRm4tPUtVW0VuXSk+PjM7dmFyIFlyPVRKZVtFbl0rKChjW0ZyXXxjW0ZyKzFdPDw4fGNbRnIrMl08PDE2KT4+KDcmRm4pJigxPDxLVVtFbl0pLTEpO0ZyPShG'@;
put 'bi09cVVbT3RdKT4+Mzt2YXIgTnI9QUplW090XSsoKGNbRnJdfGNbRnIrMV08PDh8Y1tGcisyXTw8MTYpPj4oNyZGbikmKDE8PHFVW090XSktMSk7aWYoRnI9KEZuLT1jbik+PjMsTXI9RWkudFtNcl0rKChjW0ZyXXxjW0ZyKzFdPDw4KT4+KDcmRm4pJigxPDxjbiktMSksRnI9KEZuLT1Pbik+'@;
put 'PjMsdnQ9bGkudFt2dF0rKChjW0ZyXXxjW0ZyKzFdPDw4KT4+KDcmRm4pJigxPDxPbiktMSksRnI9KEZuLT1Qcik+PjMsX3I9bXIudFtfcl0rKChjW0ZyXXxjW0ZyKzFdPDw4KT4+KDcmRm4pJigxPDxQciktMSksJHI+MylsLm9bMl09bC5vWzFdLGwub1sxXT1sLm9bMF0sbC5vWzBdPSRyLT0z'@;
put 'O2Vsc2V7dmFyIFJpPSRyLSgwIT1Ocik7Umk/KCRyPTM9PVJpP2wub1swXS0xOmwub1tSaV0sUmk+MSYmKGwub1syXT1sLm9bMV0pLGwub1sxXT1sLm9bMF0sbC5vWzBdPSRyKTokcj1sLm9bMF19Zm9yKE5uPTA7Tm48TnI7KytObilldFtRbitObl09ZXRbeXQrTm5dO3l0Kz1Ocjt2YXIgWG89'@;
put 'KFFuKz1OciktJHI7aWYoWG88MCl7dmFyIEdvPS1YbyxKcz1sLmUrWG87Zm9yKEdvPllyJiYoR289WXIpLE5uPTA7Tm48R287KytObilldFtRbitObl09bC53W0pzK05uXTtRbis9R28sWXItPUdvLFhvPTB9Zm9yKE5uPTA7Tm48WXI7KytObilldFtRbitObl09ZXRbWG8rTm5dO1FuKz1Zcn1p'@;
put 'ZihRbiE9eXQpZm9yKDt5dDxldC5sZW5ndGg7KWV0W1FuKytdPWV0W3l0KytdO2Vsc2UgUW49ZXQubGVuZ3RoO2E/bC55Kz1RbjpldD0kVShldCwwLFFuKX1lbHNlIGlmKGEpe2lmKGwueSs9RWUseXQpZm9yKE5uPTA7Tm48RWU7KytObilldFtObl09ZXRbeXQrTm5dfWVsc2UgeXQmJihldD0k'@;
put 'VShldCx5dCkpO3JldHVybiBsLmI9VyxldH1tYygyKX19O3ZhciBPSmU9KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJmRvY3VtZW50LGZ1bmN0aW9uKGMpe3ZhciBsLGEsZD12b2lkIDAhPT0oYz1jfHx7fSk/Yzp7fTtkLnJlYWR5PW5ldyBQcm9taXNlKGZ1'@;
put 'bmN0aW9uKHN0LGd0KXtsPXN0LGE9Z3R9KTt2YXIgaCxmPU9iamVjdC5hc3NpZ24oe30sZCksXz0iLi90aGlzLnByb2dyYW0iLFQ9KHN0LGd0KT0+e3Rocm93IGd0fSxXPWQucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksaWU9ZC5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQo'@;
put 'Y29uc29sZSk7T2JqZWN0LmFzc2lnbihkLGYpLGY9bnVsbCxkLnRoaXNQcm9ncmFtJiYoXz1kLnRoaXNQcm9ncmFtKSxkLnF1aXQmJihUPWQucXVpdCksZC53YXNtQmluYXJ5JiYoaD1kLndhc21CaW5hcnkpO3ZhciBwZSx3ZT1kLm5vRXhpdFJ1bnRpbWV8fCEwOyJvYmplY3QiIT10eXBlb2Yg'@;
put 'V2ViQXNzZW1ibHkmJkVuKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIEVlPSExO2Z1bmN0aW9uIFplKHN0LGd0KXtzdHx8RW4oZ3QpfXZhciBpdCxldCx5dCxFdCxTdCxKdCxubix2bj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIp'@;
put 'OnZvaWQgMDtmdW5jdGlvbiBObihzdCxndCxSdCl7Zm9yKHZhciB0bj1ndCtSdCx3bj1ndDtzdFt3bl0mJiEod24+PXRuKTspKyt3bjtpZih3bi1ndD4xNiYmc3QuYnVmZmVyJiZ2bilyZXR1cm4gdm4uZGVjb2RlKHN0LnN1YmFycmF5KGd0LHduKSk7Zm9yKHZhciBzcj0iIjtndDx3bjspe3Zh'@;
put 'ciBscj1zdFtndCsrXTtpZigxMjgmbHIpe3ZhciBScj02MyZzdFtndCsrXTtpZigxOTIhPSgyMjQmbHIpKXt2YXIgZ289NjMmc3RbZ3QrK107aWYoKGxyPTIyND09KDI0MCZscik/KDE1JmxyKTw8MTJ8UnI8PDZ8Z286KDcmbHIpPDwxOHxScjw8MTJ8Z288PDZ8NjMmc3RbZ3QrK10pPDY1NTM2'@;
put 'KXNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxyKTtlbHNle3ZhciBNbz1sci02NTUzNjtzcis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxNbz4+MTAsNTYzMjB8MTAyMyZNbyl9fWVsc2Ugc3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJmxyKTw8NnxScil9ZWxzZSBzcis9U3RyaW5nLmZy'@;
put 'b21DaGFyQ29kZShscil9cmV0dXJuIHNyfWZ1bmN0aW9uIGNyKHN0LGd0KXtyZXR1cm4gc3Q/Tm4oeXQsc3QsZ3QpOiIifWZ1bmN0aW9uIERyKHN0LGd0LFJ0LHRuKXtpZighKHRuPjApKXJldHVybiAwO2Zvcih2YXIgd249UnQsc3I9UnQrdG4tMSxscj0wO2xyPHN0Lmxlbmd0aDsrK2xyKXt2'@;
put 'YXIgUnI9c3QuY2hhckNvZGVBdChscik7aWYoUnI+PTU1Mjk2JiZScjw9NTczNDMmJihScj02NTUzNisoKDEwMjMmUnIpPDwxMCl8MTAyMyZzdC5jaGFyQ29kZUF0KCsrbHIpKSxScjw9MTI3KXtpZihSdD49c3IpYnJlYWs7Z3RbUnQrK109UnJ9ZWxzZSBpZihScjw9MjA0Nyl7aWYoUnQrMT49'@;
put 'c3IpYnJlYWs7Z3RbUnQrK109MTkyfFJyPj42LGd0W1J0KytdPTEyOHw2MyZScn1lbHNlIGlmKFJyPD02NTUzNSl7aWYoUnQrMj49c3IpYnJlYWs7Z3RbUnQrK109MjI0fFJyPj4xMixndFtSdCsrXT0xMjh8UnI+PjYmNjMsZ3RbUnQrK109MTI4fDYzJlJyfWVsc2V7aWYoUnQrMz49c3IpYnJl'@;
put 'YWs7Z3RbUnQrK109MjQwfFJyPj4xOCxndFtSdCsrXT0xMjh8UnI+PjEyJjYzLGd0W1J0KytdPTEyOHxScj4+NiY2MyxndFtSdCsrXT0xMjh8NjMmUnJ9fXJldHVybiBndFtSdF09MCxSdC13bn1mdW5jdGlvbiBfaShzdCl7Zm9yKHZhciBndD0wLFJ0PTA7UnQ8c3QubGVuZ3RoOysrUnQpe3Zh'@;
put 'ciB0bj1zdC5jaGFyQ29kZUF0KFJ0KTt0bjw9MTI3P2d0Kys6dG48PTIwNDc/Z3QrPTI6dG4+PTU1Mjk2JiZ0bjw9NTczNDM/KGd0Kz00LCsrUnQpOmd0Kz0zfXJldHVybiBndH1mdW5jdGlvbiBsaShzdCl7aXQ9c3QsZC5IRUFQOD1ldD1uZXcgSW50OEFycmF5KHN0KSxkLkhFQVAxNj1FdD1u'@;
put 'ZXcgSW50MTZBcnJheShzdCksZC5IRUFQMzI9U3Q9bmV3IEludDMyQXJyYXkoc3QpLGQuSEVBUFU4PXl0PW5ldyBVaW50OEFycmF5KHN0KSxkLkhFQVBVMTY9bmV3IFVpbnQxNkFycmF5KHN0KSxkLkhFQVBVMzI9SnQ9bmV3IFVpbnQzMkFycmF5KHN0KSxkLkhFQVBGMzI9bmV3IEZsb2F0MzJB'@;
put 'cnJheShzdCksZC5IRUFQRjY0PW5uPW5ldyBGbG9hdDY0QXJyYXkoc3QpfXZhciBtcixFaSxacixGbixGcj1bXSxRbj1bXSxNcj1bXSxfcj0wLHZ0PW51bGw7ZnVuY3Rpb24gT3Qoc3Qpe19yKyssZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoX3Ip'@;
put 'fWZ1bmN0aW9uIGNuKHN0KXtpZihfci0tLGQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKF9yKSwwPT1fciYmdnQpe3ZhciBndD12dDt2dD1udWxsLGd0KCl9fWZ1bmN0aW9uIEVuKHN0KXtkLm9uQWJvcnQmJmQub25BYm9ydChzdCksaWUoc3Q9IkFi'@;
put 'b3J0ZWQoIitzdCsiKSIpLEVlPSEwLHN0Kz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIGd0PW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Ioc3QpO3Rocm93IGEoZ3QpLGd0fWZ1bmN0aW9uIE9uKHN0KXtyZXR1cm4gc3Quc3RhcnRzV2l0aCgiZGF0'@;
put 'YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfU9uKG1yPSJncmFwaHZpemxpYi53YXNtIil8fChFaT1tcixtcj1kLmxvY2F0ZUZpbGU/ZC5sb2NhdGVGaWxlKEVpLCIiKToiIitFaSk7dmFyIE9yPXsxNzU2NjQ6KHN0LGd0KT0+e3ZhciBSdD1jcihzdCksdG49Y3IoZ3QpO0F0'@;
put 'LmNyZWF0ZVBhdGgoIi8iLFJpLmRpcm5hbWUoUnQpKSxBdC53cml0ZUZpbGUoUmkuam9pbigiLyIsUnQpLHRuKX19O2Z1bmN0aW9uICRyKHN0KXt0aGlzLm5hbWU9IkV4aXRTdGF0dXMiLHRoaXMubWVzc2FnZT0iUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgiK3N0KyIpIix0aGlzLnN0'@;
put 'YXR1cz1zdH1mdW5jdGlvbiBZcihzdCl7Zm9yKDtzdC5sZW5ndGg+MDspc3Quc2hpZnQoKShkKX1mdW5jdGlvbiBOcihzdCl7dGhpcy5leGNQdHI9c3QsdGhpcy5wdHI9c3QtMjQsdGhpcy5zZXRfdHlwZT1mdW5jdGlvbihndCl7SnRbdGhpcy5wdHIrND4+Ml09Z3R9LHRoaXMuZ2V0X3R5cGU9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gSnRbdGhpcy5wdHIrND4+Ml19LHRoaXMuc2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oZ3Qpe0p0W3RoaXMucHRyKzg+PjJdPWd0fSx0aGlzLmdldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIEp0W3RoaXMucHRyKzg+PjJdfSx0aGlzLnNldF9yZWZjb3Vu'@;
put 'dD1mdW5jdGlvbihndCl7U3RbdGhpcy5wdHI+PjJdPWd0fSx0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oZ3Qpe2V0W3RoaXMucHRyKzEyPj4wXT1ndD1ndD8xOjB9LHRoaXMuZ2V0X2NhdWdodD1mdW5jdGlvbigpe3JldHVybiAwIT1ldFt0aGlzLnB0cisxMj4+MF19LHRoaXMuc2V0X3JldGhy'@;
put 'b3duPWZ1bmN0aW9uKGd0KXtldFt0aGlzLnB0cisxMz4+MF09Z3Q9Z3Q/MTowfSx0aGlzLmdldF9yZXRocm93bj1mdW5jdGlvbigpe3JldHVybiAwIT1ldFt0aGlzLnB0cisxMz4+MF19LHRoaXMuaW5pdD1mdW5jdGlvbihndCxSdCl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0'@;
put 'X3R5cGUoZ3QpLHRoaXMuc2V0X2Rlc3RydWN0b3IoUnQpLHRoaXMuc2V0X3JlZmNvdW50KDApLHRoaXMuc2V0X2NhdWdodCghMSksdGhpcy5zZXRfcmV0aHJvd24oITEpfSx0aGlzLmFkZF9yZWY9ZnVuY3Rpb24oKXtTdFt0aGlzLnB0cj4+Ml09U3RbdGhpcy5wdHI+PjJdKzF9LHRoaXMucmVs'@;
put 'ZWFzZV9yZWY9ZnVuY3Rpb24oKXt2YXIgZ3Q9U3RbdGhpcy5wdHI+PjJdO3JldHVybiBTdFt0aGlzLnB0cj4+Ml09Z3QtMSwxPT09Z3R9LHRoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihndCl7SnRbdGhpcy5wdHIrMTY+PjJdPWd0fSx0aGlzLmdldF9hZGp1c3RlZF9wdHI9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gSnRbdGhpcy5wdHIrMTY+PjJdfSx0aGlzLmdldF9leGNlcHRpb25fcHRyPWZ1bmN0aW9uKCl7aWYodG0odGhpcy5nZXRfdHlwZSgpKSlyZXR1cm4gSnRbdGhpcy5leGNQdHI+PjJdO3ZhciBndD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gMCE9PWd0P2d0OnRo'@;
put 'aXMuZXhjUHRyfX12YXIgUmk9e2lzQWJzOnN0PT4iLyI9PT1zdC5jaGFyQXQoMCksc3BsaXRQYXRoOnN0PT4vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8uZXhlYyhzdCkuc2xpY2UoMSksbm9ybWFsaXplQXJyYXk6KHN0LGd0'@;
put 'KT0+e2Zvcih2YXIgUnQ9MCx0bj1zdC5sZW5ndGgtMTt0bj49MDt0bi0tKXt2YXIgd249c3RbdG5dOyIuIj09PXduP3N0LnNwbGljZSh0biwxKToiLi4iPT09d24/KHN0LnNwbGljZSh0biwxKSxSdCsrKTpSdCYmKHN0LnNwbGljZSh0biwxKSxSdC0tKX1pZihndClmb3IoO1J0O1J0LS0pc3Qu'@;
put 'dW5zaGlmdCgiLi4iKTtyZXR1cm4gc3R9LG5vcm1hbGl6ZTpzdD0+e3ZhciBndD1SaS5pc0FicyhzdCksUnQ9Ii8iPT09c3Quc3Vic3RyKC0xKTtyZXR1cm4oc3Q9Umkubm9ybWFsaXplQXJyYXkoc3Quc3BsaXQoIi8iKS5maWx0ZXIodG49PiEhdG4pLCFndCkuam9pbigiLyIpKXx8Z3R8fChz'@;
put 'dD0iLiIpLHN0JiZSdCYmKHN0Kz0iLyIpLChndD8iLyI6IiIpK3N0fSxkaXJuYW1lOnN0PT57dmFyIGd0PVJpLnNwbGl0UGF0aChzdCksUnQ9Z3RbMF0sdG49Z3RbMV07cmV0dXJuIFJ0fHx0bj8odG4mJih0bj10bi5zdWJzdHIoMCx0bi5sZW5ndGgtMSkpLFJ0K3RuKToiLiJ9LGJhc2VuYW1l'@;
put 'OnN0PT57aWYoIi8iPT09c3QpcmV0dXJuIi8iO3ZhciBndD0oc3Q9KHN0PVJpLm5vcm1hbGl6ZShzdCkpLnJlcGxhY2UoL1wvJC8sIiIpKS5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09Z3Q/c3Q6c3Quc3Vic3RyKGd0KzEpfSxqb2luOmZ1bmN0aW9uKCl7dmFyIHN0PUFycmF5LnByb3Rv'@;
put 'dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFJpLm5vcm1hbGl6ZShzdC5qb2luKCIvIikpfSxqb2luMjooc3QsZ3QpPT5SaS5ub3JtYWxpemUoc3QrIi8iK2d0KX0sWG89e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIHN0PSIiLGd0PSExLFJ0PWFyZ3VtZW50cy5sZW5ndGgt'@;
put 'MTtSdD49LTEmJiFndDtSdC0tKXt2YXIgdG49UnQ+PTA/YXJndW1lbnRzW1J0XTpBdC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIHRuKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIXRuKXJldHVybiIiO3N0PXRu'@;
put 'KyIvIitzdCxndD1SaS5pc0Ficyh0bil9cmV0dXJuKGd0PyIvIjoiIikrKHN0PVJpLm5vcm1hbGl6ZUFycmF5KHN0LnNwbGl0KCIvIikuZmlsdGVyKHduPT4hIXduKSwhZ3QpLmpvaW4oIi8iKSl8fCIuIn0scmVsYXRpdmU6KHN0LGd0KT0+e2Z1bmN0aW9uIFJ0KE1vKXtmb3IodmFyIGZvPTA7'@;
put 'Zm88TW8ubGVuZ3RoJiYiIj09PU1vW2ZvXTtmbysrKTtmb3IodmFyIEpvPU1vLmxlbmd0aC0xO0pvPj0wJiYiIj09PU1vW0pvXTtKby0tKTtyZXR1cm4gZm8+Sm8/W106TW8uc2xpY2UoZm8sSm8tZm8rMSl9c3Q9WG8ucmVzb2x2ZShzdCkuc3Vic3RyKDEpLGd0PVhvLnJlc29sdmUoZ3QpLnN1'@;
put 'YnN0cigxKTtmb3IodmFyIHRuPVJ0KHN0LnNwbGl0KCIvIikpLHduPVJ0KGd0LnNwbGl0KCIvIikpLHNyPU1hdGgubWluKHRuLmxlbmd0aCx3bi5sZW5ndGgpLGxyPXNyLFJyPTA7UnI8c3I7UnIrKylpZih0bltScl0hPT13bltScl0pe2xyPVJyO2JyZWFrfXZhciBnbz1bXTtmb3IoUnI9bHI7'@;
put 'UnI8dG4ubGVuZ3RoO1JyKyspZ28ucHVzaCgiLi4iKTtyZXR1cm4oZ289Z28uY29uY2F0KHduLnNsaWNlKGxyKSkpLmpvaW4oIi8iKX19O2Z1bmN0aW9uIEdvKHN0LGd0LFJ0KXt2YXIgdG49UnQ+MD9SdDpfaShzdCkrMSx3bj1uZXcgQXJyYXkodG4pLHNyPURyKHN0LHduLDAsd24ubGVuZ3Ro'@;
put 'KTtyZXR1cm4gZ3QmJih3bi5sZW5ndGg9c3IpLHdufXZhciBKcz17dHR5czpbXSxpbml0OmZ1bmN0aW9uKCl7fSxzaHV0ZG93bjpmdW5jdGlvbigpe30scmVnaXN0ZXI6ZnVuY3Rpb24oc3QsZ3Qpe0pzLnR0eXNbc3RdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOmd0fSxBdC5yZWdpc3RlckRl'@;
put 'dmljZShzdCxKcy5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbjpmdW5jdGlvbihzdCl7dmFyIGd0PUpzLnR0eXNbc3Qubm9kZS5yZGV2XTtpZighZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO3N0LnR0eT1ndCxzdC5zZWVrYWJsZT0hMX0sY2xvc2U6ZnVuY3Rpb24oc3Qpe3N0'@;
put 'LnR0eS5vcHMuZnN5bmMoc3QudHR5KX0sZnN5bmM6ZnVuY3Rpb24oc3Qpe3N0LnR0eS5vcHMuZnN5bmMoc3QudHR5KX0scmVhZDpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7aWYoIXN0LnR0eXx8IXN0LnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjApO2Zvcih2'@;
put 'YXIgc3I9MCxscj0wO2xyPHRuO2xyKyspe3ZhciBScjt0cnl7UnI9c3QudHR5Lm9wcy5nZXRfY2hhcihzdC50dHkpfWNhdGNoe3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1SciYmMD09PXNyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PVJyKWJy'@;
put 'ZWFrO3NyKyssZ3RbUnQrbHJdPVJyfXJldHVybiBzciYmKHN0Lm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHNyfSx3cml0ZTpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7aWYoIXN0LnR0eXx8IXN0LnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjApO3RyeXtm'@;
put 'b3IodmFyIHNyPTA7c3I8dG47c3IrKylzdC50dHkub3BzLnB1dF9jaGFyKHN0LnR0eSxndFtSdCtzcl0pfWNhdGNoe3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gdG4mJihzdC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxzcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2No'@;
put 'YXI6ZnVuY3Rpb24oc3Qpe2lmKCFzdC5pbnB1dC5sZW5ndGgpe3ZhciBndD1udWxsO2lmKHR5cGVvZiB3aW5kb3c8InUiJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LnByb21wdD9udWxsIT09KGd0PXdpbmRvdy5wcm9tcHQoIklucHV0OiAiKSkmJihndCs9IlxuIik6ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIHJlYWRsaW5lJiZudWxsIT09KGd0PXJlYWRsaW5lKCkpJiYoZ3QrPSJcbiIpLCFndClyZXR1cm4gbnVsbDtzdC5pbnB1dD1HbyhndCwhMCl9cmV0dXJuIHN0LmlucHV0LnNoaWZ0KCl9LHB1dF9jaGFyOmZ1bmN0aW9uKHN0LGd0KXtudWxsPT09Z3R8fDEwPT09Z3Q/KFcoTm4oc3Qu'@;
put 'b3V0cHV0LDApKSxzdC5vdXRwdXQ9W10pOjAhPWd0JiZzdC5vdXRwdXQucHVzaChndCl9LGZzeW5jOmZ1bmN0aW9uKHN0KXtzdC5vdXRwdXQmJnN0Lm91dHB1dC5sZW5ndGg+MCYmKFcoTm4oc3Qub3V0cHV0LDApKSxzdC5vdXRwdXQ9W10pfX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXI6'@;
put 'ZnVuY3Rpb24oc3QsZ3Qpe251bGw9PT1ndHx8MTA9PT1ndD8oaWUoTm4oc3Qub3V0cHV0LDApKSxzdC5vdXRwdXQ9W10pOjAhPWd0JiZzdC5vdXRwdXQucHVzaChndCl9LGZzeW5jOmZ1bmN0aW9uKHN0KXtzdC5vdXRwdXQmJnN0Lm91dHB1dC5sZW5ndGg+MCYmKGllKE5uKHN0Lm91dHB1dCww'@;
put 'KSksc3Qub3V0cHV0PVtdKX19fTtmdW5jdGlvbiBnYShzdCl7c3Q9NjU1MzYqTWF0aC5jZWlsKHN0LzY1NTM2KTt2YXIgUnQsZ3Q9eHcoNjU1MzYsc3QpO3JldHVybiBndD8oeXQuZmlsbCgwLFJ0PWd0LFJ0K3N0KSxSdCk6MH12YXIgdW89e29wc190YWJsZTpudWxsLG1vdW50OmZ1bmN0aW9u'@;
put 'KHN0KXtyZXR1cm4gdW8uY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKX0sY3JlYXRlTm9kZTpmdW5jdGlvbihzdCxndCxSdCx0bil7aWYoQXQuaXNCbGtkZXYoUnQpfHxBdC5pc0ZJRk8oUnQpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTt1by5vcHNfdGFibGV8fCh1by5vcHNfdGFi'@;
put 'bGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjp1by5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dW8ubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6dW8ubm9kZV9vcHMubG9va3VwLG1rbm9kOnVvLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTp1by5ub2RlX29wcy5yZW5hbWUsdW5saW5rOnVvLm5vZGVfb3Bz'@;
put 'LnVubGluayxybWRpcjp1by5ub2RlX29wcy5ybWRpcixyZWFkZGlyOnVvLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazp1by5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2Vlazp1by5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6dW8ubm9kZV9vcHMuZ2V0YXR0'@;
put 'cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOnVvLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6dW8uc3RyZWFtX29wcy5yZWFkLHdyaXRlOnVvLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6dW8uc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOnVvLnN0cmVhbV9v'@;
put 'cHMubW1hcCxtc3luYzp1by5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjp1by5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dW8ubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazp1by5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0'@;
put 'dHI6dW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOnVvLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpBdC5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIgd249QXQuY3JlYXRlTm9kZShzdCxndCxSdCx0bik7cmV0dXJuIEF0LmlzRGlyKHduLm1vZGUpPyh3bi5ub2RlX29wcz11by5vcHNfdGFi'@;
put 'bGUuZGlyLm5vZGUsd24uc3RyZWFtX29wcz11by5vcHNfdGFibGUuZGlyLnN0cmVhbSx3bi5jb250ZW50cz17fSk6QXQuaXNGaWxlKHduLm1vZGUpPyh3bi5ub2RlX29wcz11by5vcHNfdGFibGUuZmlsZS5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmZpbGUuc3RyZWFtLHduLnVz'@;
put 'ZWRCeXRlcz0wLHduLmNvbnRlbnRzPW51bGwpOkF0LmlzTGluayh3bi5tb2RlKT8od24ubm9kZV9vcHM9dW8ub3BzX3RhYmxlLmxpbmsubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5saW5rLnN0cmVhbSk6QXQuaXNDaHJkZXYod24ubW9kZSkmJih3bi5ub2RlX29wcz11by5vcHNf'@;
put 'dGFibGUuY2hyZGV2Lm5vZGUsd24uc3RyZWFtX29wcz11by5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksd24udGltZXN0YW1wPURhdGUubm93KCksc3QmJihzdC5jb250ZW50c1tndF09d24sc3QudGltZXN0YW1wPXduLnRpbWVzdGFtcCksd259LGdldEZpbGVEYXRhQXNUeXBlZEFycmF5OmZ1'@;
put 'bmN0aW9uKHN0KXtyZXR1cm4gc3QuY29udGVudHM/c3QuY29udGVudHMuc3ViYXJyYXk/c3QuY29udGVudHMuc3ViYXJyYXkoMCxzdC51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KHN0LmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKX0sZXhwYW5kRmlsZVN0b3JhZ2U6ZnVuY3Rpb24oc3Qs'@;
put 'Z3Qpe3ZhciBSdD1zdC5jb250ZW50cz9zdC5jb250ZW50cy5sZW5ndGg6MDtpZighKFJ0Pj1ndCkpe2d0PU1hdGgubWF4KGd0LFJ0KihSdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9UnQmJihndD1NYXRoLm1heChndCwyNTYpKTt2YXIgdG49c3QuY29udGVudHM7c3QuY29udGVudHM9bmV3'@;
put 'IFVpbnQ4QXJyYXkoZ3QpLHN0LnVzZWRCeXRlcz4wJiZzdC5jb250ZW50cy5zZXQodG4uc3ViYXJyYXkoMCxzdC51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2U6ZnVuY3Rpb24oc3QsZ3Qpe2lmKHN0LnVzZWRCeXRlcyE9Z3QpaWYoMD09Z3Qpc3QuY29udGVudHM9bnVsbCxzdC51'@;
put 'c2VkQnl0ZXM9MDtlbHNle3ZhciBSdD1zdC5jb250ZW50cztzdC5jb250ZW50cz1uZXcgVWludDhBcnJheShndCksUnQmJnN0LmNvbnRlbnRzLnNldChSdC5zdWJhcnJheSgwLE1hdGgubWluKGd0LHN0LnVzZWRCeXRlcykpKSxzdC51c2VkQnl0ZXM9Z3R9fSxub2RlX29wczp7Z2V0YXR0cjpm'@;
put 'dW5jdGlvbihzdCl7dmFyIGd0PXt9O3JldHVybiBndC5kZXY9QXQuaXNDaHJkZXYoc3QubW9kZSk/c3QuaWQ6MSxndC5pbm89c3QuaWQsZ3QubW9kZT1zdC5tb2RlLGd0Lm5saW5rPTEsZ3QudWlkPTAsZ3QuZ2lkPTAsZ3QucmRldj1zdC5yZGV2LGd0LnNpemU9QXQuaXNEaXIoc3QubW9kZSk/'@;
put 'NDA5NjpBdC5pc0ZpbGUoc3QubW9kZSk/c3QudXNlZEJ5dGVzOkF0LmlzTGluayhzdC5tb2RlKT9zdC5saW5rLmxlbmd0aDowLGd0LmF0aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCksZ3QubXRpbWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSxndC5jdGltZT1uZXcgRGF0ZShzdC50aW1lc3Rh'@;
put 'bXApLGd0LmJsa3NpemU9NDA5NixndC5ibG9ja3M9TWF0aC5jZWlsKGd0LnNpemUvZ3QuYmxrc2l6ZSksZ3R9LHNldGF0dHI6ZnVuY3Rpb24oc3QsZ3Qpe3ZvaWQgMCE9PWd0Lm1vZGUmJihzdC5tb2RlPWd0Lm1vZGUpLHZvaWQgMCE9PWd0LnRpbWVzdGFtcCYmKHN0LnRpbWVzdGFtcD1ndC50'@;
put 'aW1lc3RhbXApLHZvaWQgMCE9PWd0LnNpemUmJnVvLnJlc2l6ZUZpbGVTdG9yYWdlKHN0LGd0LnNpemUpfSxsb29rdXA6ZnVuY3Rpb24oc3QsZ3Qpe3Rocm93IEF0LmdlbmVyaWNFcnJvcnNbNDRdfSxta25vZDpmdW5jdGlvbihzdCxndCxSdCx0bil7cmV0dXJuIHVvLmNyZWF0ZU5vZGUoc3Qs'@;
put 'Z3QsUnQsdG4pfSxyZW5hbWU6ZnVuY3Rpb24oc3QsZ3QsUnQpe2lmKEF0LmlzRGlyKHN0Lm1vZGUpKXt2YXIgdG47dHJ5e3RuPUF0Lmxvb2t1cE5vZGUoZ3QsUnQpfWNhdGNoe31pZih0bilmb3IodmFyIHduIGluIHRuLmNvbnRlbnRzKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU1KX1kZWxl'@;
put 'dGUgc3QucGFyZW50LmNvbnRlbnRzW3N0Lm5hbWVdLHN0LnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxzdC5uYW1lPVJ0LGd0LmNvbnRlbnRzW1J0XT1zdCxndC50aW1lc3RhbXA9c3QucGFyZW50LnRpbWVzdGFtcCxzdC5wYXJlbnQ9Z3R9LHVubGluazpmdW5jdGlvbihzdCxndCl7ZGVs'@;
put 'ZXRlIHN0LmNvbnRlbnRzW2d0XSxzdC50aW1lc3RhbXA9RGF0ZS5ub3coKX0scm1kaXI6ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD1BdC5sb29rdXBOb2RlKHN0LGd0KTtmb3IodmFyIHRuIGluIFJ0LmNvbnRlbnRzKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU1KTtkZWxldGUgc3QuY29udGVu'@;
put 'dHNbZ3RdLHN0LnRpbWVzdGFtcD1EYXRlLm5vdygpfSxyZWFkZGlyOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9WyIuIiwiLi4iXTtmb3IodmFyIFJ0IGluIHN0LmNvbnRlbnRzKXN0LmNvbnRlbnRzLmhhc093blByb3BlcnR5KFJ0KSYmZ3QucHVzaChSdCk7cmV0dXJuIGd0fSxzeW1saW5rOmZ1bmN0'@;
put 'aW9uKHN0LGd0LFJ0KXt2YXIgdG49dW8uY3JlYXRlTm9kZShzdCxndCw0MTQ3MSwwKTtyZXR1cm4gdG4ubGluaz1SdCx0bn0scmVhZGxpbms6ZnVuY3Rpb24oc3Qpe2lmKCFBdC5pc0xpbmsoc3QubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3JldHVybiBzdC5saW5rfX0sc3Ry'@;
put 'ZWFtX29wczp7cmVhZDpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7dmFyIHNyPXN0Lm5vZGUuY29udGVudHM7aWYod24+PXN0Lm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBscj1NYXRoLm1pbihzdC5ub2RlLnVzZWRCeXRlcy13bix0bik7aWYobHI+OCYmc3Iuc3ViYXJyYXkpZ3Quc2V0'@;
put 'KHNyLnN1YmFycmF5KHduLHduK2xyKSxSdCk7ZWxzZSBmb3IodmFyIFJyPTA7UnI8bHI7UnIrKylndFtSdCtScl09c3Jbd24rUnJdO3JldHVybiBscn0sd3JpdGU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24sc3Ipe2lmKGd0LmJ1ZmZlcj09PWV0LmJ1ZmZlciYmKHNyPSExKSwhdG4pcmV0dXJu'@;
put 'IDA7dmFyIGxyPXN0Lm5vZGU7aWYobHIudGltZXN0YW1wPURhdGUubm93KCksZ3Quc3ViYXJyYXkmJighbHIuY29udGVudHN8fGxyLmNvbnRlbnRzLnN1YmFycmF5KSl7aWYoc3IpcmV0dXJuIGxyLmNvbnRlbnRzPWd0LnN1YmFycmF5KFJ0LFJ0K3RuKSxsci51c2VkQnl0ZXM9dG4sdG47aWYo'@;
put 'MD09PWxyLnVzZWRCeXRlcyYmMD09PXduKXJldHVybiBsci5jb250ZW50cz1ndC5zbGljZShSdCxSdCt0biksbHIudXNlZEJ5dGVzPXRuLHRuO2lmKHduK3RuPD1sci51c2VkQnl0ZXMpcmV0dXJuIGxyLmNvbnRlbnRzLnNldChndC5zdWJhcnJheShSdCxSdCt0biksd24pLHRufWlmKHVvLmV4'@;
put 'cGFuZEZpbGVTdG9yYWdlKGxyLHduK3RuKSxsci5jb250ZW50cy5zdWJhcnJheSYmZ3Quc3ViYXJyYXkpbHIuY29udGVudHMuc2V0KGd0LnN1YmFycmF5KFJ0LFJ0K3RuKSx3bik7ZWxzZSBmb3IodmFyIFJyPTA7UnI8dG47UnIrKylsci5jb250ZW50c1t3bitScl09Z3RbUnQrUnJdO3JldHVy'@;
put 'biBsci51c2VkQnl0ZXM9TWF0aC5tYXgobHIudXNlZEJ5dGVzLHduK3RuKSx0bn0sbGxzZWVrOmZ1bmN0aW9uKHN0LGd0LFJ0KXt2YXIgdG49Z3Q7aWYoMT09PVJ0P3RuKz1zdC5wb3NpdGlvbjoyPT09UnQmJkF0LmlzRmlsZShzdC5ub2RlLm1vZGUpJiYodG4rPXN0Lm5vZGUudXNlZEJ5dGVz'@;
put 'KSx0bjwwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gdG59LGFsbG9jYXRlOmZ1bmN0aW9uKHN0LGd0LFJ0KXt1by5leHBhbmRGaWxlU3RvcmFnZShzdC5ub2RlLGd0K1J0KSxzdC5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChzdC5ub2RlLnVzZWRCeXRlcyxndCtSdCl9LG1t'@;
put 'YXA6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe2lmKCFBdC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7dmFyIHNyLGxyLFJyPXN0Lm5vZGUuY29udGVudHM7aWYoMiZ3bnx8UnIuYnVmZmVyIT09aXQpe2lmKChSdD4wfHxSdCtndDxSci5sZW5ndGgp'@;
put 'JiYoUnI9UnIuc3ViYXJyYXk/UnIuc3ViYXJyYXkoUnQsUnQrZ3QpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFJyLFJ0LFJ0K2d0KSksbHI9ITAsIShzcj1nYShndCkpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ4KTtldC5zZXQoUnIsc3IpfWVsc2UgbHI9ITEsc3I9UnIuYnl0ZU9m'@;
put 'ZnNldDtyZXR1cm57cHRyOnNyLGFsbG9jYXRlZDpscn19LG1zeW5jOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtyZXR1cm4gdW8uc3RyZWFtX29wcy53cml0ZShzdCxndCwwLHRuLFJ0LCExKSwwfX19LEF0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0'@;
put 'SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpudWxsLGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLGxvb2t1cFBhdGg6KHN0LGd0PXt9KT0+'@;
put 'e2lmKCEoc3Q9WG8ucmVzb2x2ZShzdCkpKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07aWYoKGd0PU9iamVjdC5hc3NpZ24oe2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9LGd0KSkucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMyKTtmb3IodmFyIFJ0'@;
put 'PXN0LnNwbGl0KCIvIikuZmlsdGVyKE1vPT4hIU1vKSx0bj1BdC5yb290LHduPSIvIixzcj0wO3NyPFJ0Lmxlbmd0aDtzcisrKXt2YXIgbHI9c3I9PT1SdC5sZW5ndGgtMTtpZihsciYmZ3QucGFyZW50KWJyZWFrO2lmKHRuPUF0Lmxvb2t1cE5vZGUodG4sUnRbc3JdKSx3bj1SaS5qb2luMih3'@;
put 'bixSdFtzcl0pLEF0LmlzTW91bnRwb2ludCh0bikmJighbHJ8fGxyJiZndC5mb2xsb3dfbW91bnQpJiYodG49dG4ubW91bnRlZC5yb290KSwhbHJ8fGd0LmZvbGxvdylmb3IodmFyIFJyPTA7QXQuaXNMaW5rKHRuLm1vZGUpOyl7dmFyIGdvPUF0LnJlYWRsaW5rKHduKTtpZih3bj1Yby5yZXNv'@;
put 'bHZlKFJpLmRpcm5hbWUod24pLGdvKSx0bj1BdC5sb29rdXBQYXRoKHduLHtyZWN1cnNlX2NvdW50Omd0LnJlY3Vyc2VfY291bnQrMX0pLm5vZGUsUnIrKz40MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOnduLG5vZGU6dG59fSxnZXRQYXRoOnN0PT57Zm9yKHZh'@;
put 'ciBndDs7KXtpZihBdC5pc1Jvb3Qoc3QpKXt2YXIgUnQ9c3QubW91bnQubW91bnRwb2ludDtyZXR1cm4gZ3Q/Ii8iIT09UnRbUnQubGVuZ3RoLTFdP1J0KyIvIitndDpSdCtndDpSdH1ndD1ndD9zdC5uYW1lKyIvIitndDpzdC5uYW1lLHN0PXN0LnBhcmVudH19LGhhc2hOYW1lOihzdCxndCk9'@;
put 'Pntmb3IodmFyIFJ0PTAsdG49MDt0bjxndC5sZW5ndGg7dG4rKylSdD0oUnQ8PDUpLVJ0K2d0LmNoYXJDb2RlQXQodG4pfDA7cmV0dXJuKHN0K1J0Pj4+MCklQXQubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGU6c3Q9Pnt2YXIgZ3Q9QXQuaGFzaE5hbWUoc3QucGFyZW50LmlkLHN0Lm5h'@;
put 'bWUpO3N0Lm5hbWVfbmV4dD1BdC5uYW1lVGFibGVbZ3RdLEF0Lm5hbWVUYWJsZVtndF09c3R9LGhhc2hSZW1vdmVOb2RlOnN0PT57dmFyIGd0PUF0Lmhhc2hOYW1lKHN0LnBhcmVudC5pZCxzdC5uYW1lKTtpZihBdC5uYW1lVGFibGVbZ3RdPT09c3QpQXQubmFtZVRhYmxlW2d0XT1zdC5uYW1l'@;
put 'X25leHQ7ZWxzZSBmb3IodmFyIFJ0PUF0Lm5hbWVUYWJsZVtndF07UnQ7KXtpZihSdC5uYW1lX25leHQ9PT1zdCl7UnQubmFtZV9uZXh0PXN0Lm5hbWVfbmV4dDticmVha31SdD1SdC5uYW1lX25leHR9fSxsb29rdXBOb2RlOihzdCxndCk9Pnt2YXIgUnQ9QXQubWF5TG9va3VwKHN0KTtpZihS'@;
put 'dCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihSdCxzdCk7Zm9yKHZhciB0bj1BdC5oYXNoTmFtZShzdC5pZCxndCksd249QXQubmFtZVRhYmxlW3RuXTt3bjt3bj13bi5uYW1lX25leHQpaWYod24ucGFyZW50LmlkPT09c3QuaWQmJnduLm5hbWU9PT1ndClyZXR1cm4gd247cmV0dXJuIEF0Lmxv'@;
put 'b2t1cChzdCxndCl9LGNyZWF0ZU5vZGU6KHN0LGd0LFJ0LHRuKT0+e3ZhciB3bj1uZXcgQXQuRlNOb2RlKHN0LGd0LFJ0LHRuKTtyZXR1cm4gQXQuaGFzaEFkZE5vZGUod24pLHdufSxkZXN0cm95Tm9kZTpzdD0+e0F0Lmhhc2hSZW1vdmVOb2RlKHN0KX0saXNSb290OnN0PT5zdD09PXN0LnBh'@;
put 'cmVudCxpc01vdW50cG9pbnQ6c3Q9PiEhc3QubW91bnRlZCxpc0ZpbGU6c3Q9PjMyNzY4PT0oNjE0NDAmc3QpLGlzRGlyOnN0PT4xNjM4ND09KDYxNDQwJnN0KSxpc0xpbms6c3Q9PjQwOTYwPT0oNjE0NDAmc3QpLGlzQ2hyZGV2OnN0PT44MTkyPT0oNjE0NDAmc3QpLGlzQmxrZGV2OnN0PT4y'@;
put 'NDU3Nj09KDYxNDQwJnN0KSxpc0ZJRk86c3Q9PjQwOTY9PSg2MTQ0MCZzdCksaXNTb2NrZXQ6c3Q9PjQ5MTUyPT0oNDkxNTImc3QpLGZsYWdNb2Rlczp7cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfSxtb2RlU3RyaW5nVG9GbGFnczpzdD0+e3ZhciBndD1BdC5m'@;
put 'bGFnTW9kZXNbc3RdO2lmKHZvaWQgMD09PWd0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBmaWxlIG9wZW4gbW9kZTogIitzdCk7cmV0dXJuIGd0fSxmbGFnc1RvUGVybWlzc2lvblN0cmluZzpzdD0+e3ZhciBndD1bInIiLCJ3IiwicnciXVszJnN0XTtyZXR1cm4gNTEyJnN0JiYoZ3QrPSJ3'@;
put 'IiksZ3R9LG5vZGVQZXJtaXNzaW9uczooc3QsZ3QpPT5BdC5pZ25vcmVQZXJtaXNzaW9uc3x8KCFndC5pbmNsdWRlcygiciIpfHwyOTImc3QubW9kZSkmJighZ3QuaW5jbHVkZXMoInciKXx8MTQ2JnN0Lm1vZGUpJiYoIWd0LmluY2x1ZGVzKCJ4Iil8fDczJnN0Lm1vZGUpPzA6MixtYXlMb29r'@;
put 'dXA6c3Q9PkF0Lm5vZGVQZXJtaXNzaW9ucyhzdCwieCIpfHwoc3Qubm9kZV9vcHMubG9va3VwPzA6MiksbWF5Q3JlYXRlOihzdCxndCk9Pnt0cnl7cmV0dXJuIEF0Lmxvb2t1cE5vZGUoc3QsZ3QpLDIwfWNhdGNoe31yZXR1cm4gQXQubm9kZVBlcm1pc3Npb25zKHN0LCJ3eCIpfSxtYXlEZWxl'@;
put 'dGU6KHN0LGd0LFJ0KT0+e3ZhciB0bjt0cnl7dG49QXQubG9va3VwTm9kZShzdCxndCl9Y2F0Y2goc3Ipe3JldHVybiBzci5lcnJub312YXIgd249QXQubm9kZVBlcm1pc3Npb25zKHN0LCJ3eCIpO2lmKHduKXJldHVybiB3bjtpZihSdCl7aWYoIUF0LmlzRGlyKHRuLm1vZGUpKXJldHVybiA1'@;
put 'NDtpZihBdC5pc1Jvb3QodG4pfHxBdC5nZXRQYXRoKHRuKT09PUF0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKEF0LmlzRGlyKHRuLm1vZGUpKXJldHVybiAzMTtyZXR1cm4gMH0sbWF5T3Blbjooc3QsZ3QpPT5zdD9BdC5pc0xpbmsoc3QubW9kZSk/MzI6QXQuaXNEaXIoc3QubW9kZSkmJigi'@;
put 'ciIhPT1BdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhndCl8fDUxMiZndCk/MzE6QXQubm9kZVBlcm1pc3Npb25zKHN0LEF0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGd0KSk6NDQsTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkOihzdD0wLGd0PUF0Lk1BWF9PUEVOX0ZEUyk9Pntmb3IodmFy'@;
put 'IFJ0PXN0O1J0PD1ndDtSdCsrKWlmKCFBdC5zdHJlYW1zW1J0XSlyZXR1cm4gUnQ7dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzMpfSxnZXRTdHJlYW06c3Q9PkF0LnN0cmVhbXNbc3RdLGNyZWF0ZVN0cmVhbTooc3QsZ3QsUnQpPT57QXQuRlNTdHJlYW18fChBdC5GU1N0cmVhbT1mdW5jdGlv'@;
put 'bigpe3RoaXMuc2hhcmVkPXt9fSxBdC5GU1N0cmVhbS5wcm90b3R5cGU9e30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXQuRlNTdHJlYW0ucHJvdG90eXBlLHtvYmplY3Q6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LHNldDpmdW5jdGlvbih3bil7dGhpcy5ub2RlPXdufX0s'@;
put 'aXNSZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9fSxpc1dyaXRlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDIwOTcxNTUmdGhpcy5mbGFncyl9fSxpc0FwcGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDEwMjQmdGhpcy5mbGFnc319LGZs'@;
put 'YWdzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9LHNldDpmdW5jdGlvbih3bil7dGhpcy5zaGFyZWQuZmxhZ3M9d259fSxwb3NpdGlvbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcmVkLnBvc2l0aW9ufSxzZXQ6ZnVuY3Rpb24od24pe3RoaXMuc2hh'@;
put 'cmVkLnBvc2l0aW9uPXdufX19KSksc3Q9T2JqZWN0LmFzc2lnbihuZXcgQXQuRlNTdHJlYW0sc3QpO3ZhciB0bj1BdC5uZXh0ZmQoZ3QsUnQpO3JldHVybiBzdC5mZD10bixBdC5zdHJlYW1zW3RuXT1zdCxzdH0sY2xvc2VTdHJlYW06c3Q9PntBdC5zdHJlYW1zW3N0XT1udWxsfSxjaHJkZXZf'@;
put 'c3RyZWFtX29wczp7b3BlbjpzdD0+e3ZhciBndD1BdC5nZXREZXZpY2Uoc3Qubm9kZS5yZGV2KTtzdC5zdHJlYW1fb3BzPWd0LnN0cmVhbV9vcHMsc3Quc3RyZWFtX29wcy5vcGVuJiZzdC5zdHJlYW1fb3BzLm9wZW4oc3QpfSxsbHNlZWs6KCk9Pnt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig3'@;
put 'MCl9fSxtYWpvcjpzdD0+c3Q+PjgsbWlub3I6c3Q9PjI1NSZzdCxtYWtlZGV2OihzdCxndCk9PnN0PDw4fGd0LHJlZ2lzdGVyRGV2aWNlOihzdCxndCk9PntBdC5kZXZpY2VzW3N0XT17c3RyZWFtX29wczpndH19LGdldERldmljZTpzdD0+QXQuZGV2aWNlc1tzdF0sZ2V0TW91bnRzOnN0PT57'@;
put 'Zm9yKHZhciBndD1bXSxSdD1bc3RdO1J0Lmxlbmd0aDspe3ZhciB0bj1SdC5wb3AoKTtndC5wdXNoKHRuKSxSdC5wdXNoLmFwcGx5KFJ0LHRuLm1vdW50cyl9cmV0dXJuIGd0fSxzeW5jZnM6KHN0LGd0KT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBzdCYmKGd0PXN0LHN0PSExKSxBdC5zeW5jRlNS'@;
put 'ZXF1ZXN0cysrLEF0LnN5bmNGU1JlcXVlc3RzPjEmJmllKCJ3YXJuaW5nOiAiK0F0LnN5bmNGU1JlcXVlc3RzKyIgRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29yayIpO3ZhciBSdD1BdC5nZXRNb3VudHMoQXQucm9v'@;
put 'dC5tb3VudCksdG49MDtmdW5jdGlvbiB3bihscil7cmV0dXJuIEF0LnN5bmNGU1JlcXVlc3RzLS0sZ3QobHIpfWZ1bmN0aW9uIHNyKGxyKXtpZihscilyZXR1cm4gc3IuZXJyb3JlZD92b2lkIDA6KHNyLmVycm9yZWQ9ITAsd24obHIpKTsrK3RuPj1SdC5sZW5ndGgmJnduKG51bGwpfVJ0LmZv'@;
put 'ckVhY2gobHI9PntpZighbHIudHlwZS5zeW5jZnMpcmV0dXJuIHNyKG51bGwpO2xyLnR5cGUuc3luY2ZzKGxyLHN0LHNyKX0pfSxtb3VudDooc3QsZ3QsUnQpPT57dmFyIHRuLHduPSIvIj09PVJ0LHNyPSFSdDtpZih3biYmQXQucm9vdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigxMCk7aWYo'@;
put 'IXduJiYhc3Ipe3ZhciBscj1BdC5sb29rdXBQYXRoKFJ0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZihSdD1sci5wYXRoLEF0LmlzTW91bnRwb2ludCh0bj1sci5ub2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigxMCk7aWYoIUF0LmlzRGlyKHRuLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vy'@;
put 'cm9yKDU0KX12YXIgUnI9e3R5cGU6c3Qsb3B0czpndCxtb3VudHBvaW50OlJ0LG1vdW50czpbXX0sZ289c3QubW91bnQoUnIpO3JldHVybiBnby5tb3VudD1ScixSci5yb290PWdvLHduP0F0LnJvb3Q9Z286dG4mJih0bi5tb3VudGVkPVJyLHRuLm1vdW50JiZ0bi5tb3VudC5tb3VudHMucHVz'@;
put 'aChScikpLGdvfSx1bm1vdW50OnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvd19tb3VudDohMX0pO2lmKCFBdC5pc01vdW50cG9pbnQoZ3Qubm9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3ZhciBSdD1ndC5ub2RlLHRuPVJ0Lm1vdW50ZWQsd249QXQuZ2V0TW91'@;
put 'bnRzKHRuKTtPYmplY3Qua2V5cyhBdC5uYW1lVGFibGUpLmZvckVhY2gobHI9Pntmb3IodmFyIFJyPUF0Lm5hbWVUYWJsZVtscl07UnI7KXt2YXIgZ289UnIubmFtZV9uZXh0O3duLmluY2x1ZGVzKFJyLm1vdW50KSYmQXQuZGVzdHJveU5vZGUoUnIpLFJyPWdvfX0pLFJ0Lm1vdW50ZWQ9bnVs'@;
put 'bDt2YXIgc3I9UnQubW91bnQubW91bnRzLmluZGV4T2YodG4pO1J0Lm1vdW50Lm1vdW50cy5zcGxpY2Uoc3IsMSl9LGxvb2t1cDooc3QsZ3QpPT5zdC5ub2RlX29wcy5sb29rdXAoc3QsZ3QpLG1rbm9kOihzdCxndCxSdCk9Pnt2YXIgdG49QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSku'@;
put 'bm9kZSx3bj1SaS5iYXNlbmFtZShzdCk7aWYoIXdufHwiLiI9PT13bnx8Ii4uIj09PXduKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgc3I9QXQubWF5Q3JlYXRlKHRuLHduKTtpZihzcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihzcik7aWYoIXRuLm5vZGVfb3BzLm1rbm9kKXRo'@;
put 'cm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gdG4ubm9kZV9vcHMubWtub2QodG4sd24sZ3QsUnQpfSxjcmVhdGU6KHN0LGd0KT0+KGd0PXZvaWQgMCE9PWd0P2d0OjQzOCxndCY9NDA5NSxBdC5ta25vZChzdCxndHw9MzI3NjgsMCkpLG1rZGlyOihzdCxndCk9PihndD12b2lkIDAh'@;
put 'PT1ndD9ndDo1MTEsZ3QmPTEwMjMsQXQubWtub2Qoc3QsZ3R8PTE2Mzg0LDApKSxta2RpclRyZWU6KHN0LGd0KT0+e2Zvcih2YXIgUnQ9c3Quc3BsaXQoIi8iKSx0bj0iIix3bj0wO3duPFJ0Lmxlbmd0aDsrK3duKWlmKFJ0W3duXSl7dG4rPSIvIitSdFt3bl07dHJ5e0F0Lm1rZGlyKHRuLGd0'@;
put 'KX1jYXRjaChzcil7aWYoMjAhPXNyLmVycm5vKXRocm93IHNyfX19LG1rZGV2OihzdCxndCxSdCk9Pih2b2lkIDA9PT1SdCYmKFJ0PWd0LGd0PTQzOCksQXQubWtub2Qoc3QsZ3R8PTgxOTIsUnQpKSxzeW1saW5rOihzdCxndCk9PntpZighWG8ucmVzb2x2ZShzdCkpdGhyb3cgbmV3IEF0LkVy'@;
put 'cm5vRXJyb3IoNDQpO3ZhciBSdD1BdC5sb29rdXBQYXRoKGd0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7dmFyIHRuPVJpLmJhc2VuYW1lKGd0KSx3bj1BdC5tYXlDcmVhdGUoUnQsdG4pO2lmKHduKXRocm93IG5ldyBBdC5FcnJub0Vycm9y'@;
put 'KHduKTtpZighUnQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIFJ0Lm5vZGVfb3BzLnN5bWxpbmsoUnQsdG4sc3QpfSxyZW5hbWU6KHN0LGd0KT0+e3ZhciBSdCx0bix3bj1SaS5kaXJuYW1lKHN0KSxzcj1SaS5kaXJuYW1lKGd0KSxscj1SaS5i'@;
put 'YXNlbmFtZShzdCksUnI9UmkuYmFzZW5hbWUoZ3QpO2lmKFJ0PUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsdG49QXQubG9va3VwUGF0aChndCx7cGFyZW50OiEwfSkubm9kZSwhUnR8fCF0bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoUnQubW91bnQhPT10bi5t'@;
put 'b3VudCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig3NSk7dmFyIGdvLE1vPUF0Lmxvb2t1cE5vZGUoUnQsbHIpLGZvPVhvLnJlbGF0aXZlKHN0LHNyKTtpZigiLiIhPT1mby5jaGFyQXQoMCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO2lmKCIuIiE9PShmbz1Yby5yZWxhdGl2ZShndCx3'@;
put 'bikpLmNoYXJBdCgwKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NSk7dHJ5e2dvPUF0Lmxvb2t1cE5vZGUodG4sUnIpfWNhdGNoe31pZihNbyE9PWdvKXt2YXIgSm89QXQuaXNEaXIoTW8ubW9kZSksWWk9QXQubWF5RGVsZXRlKFJ0LGxyLEpvKTtpZihZaSl0aHJvdyBuZXcgQXQuRXJybm9F'@;
put 'cnJvcihZaSk7aWYoWWk9Z28/QXQubWF5RGVsZXRlKHRuLFJyLEpvKTpBdC5tYXlDcmVhdGUodG4sUnIpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFlpKTtpZighUnQubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtpZihBdC5pc01vdW50cG9pbnQoTW8pfHxn'@;
put 'byYmQXQuaXNNb3VudHBvaW50KGdvKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigxMCk7aWYodG4hPT1SdCYmKFlpPUF0Lm5vZGVQZXJtaXNzaW9ucyhSdCwidyIpKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihZaSk7QXQuaGFzaFJlbW92ZU5vZGUoTW8pO3RyeXtSdC5ub2RlX29wcy5yZW5h'@;
put 'bWUoTW8sdG4sUnIpfWNhdGNoKFlzKXt0aHJvdyBZc31maW5hbGx5e0F0Lmhhc2hBZGROb2RlKE1vKX19fSxybWRpcjpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLFJ0PVJpLmJhc2VuYW1lKHN0KSx0bj1BdC5sb29rdXBOb2RlKGd0LFJ0KSx3bj1BdC5t'@;
put 'YXlEZWxldGUoZ3QsUnQsITApO2lmKHduKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHduKTtpZighZ3Qubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzTW91bnRwb2ludCh0bikpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMTApO2d0Lm5vZGVfb3Bz'@;
put 'LnJtZGlyKGd0LFJ0KSxBdC5kZXN0cm95Tm9kZSh0bil9LHJlYWRkaXI6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSkubm9kZTtpZighZ3Qubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCk7cmV0dXJuIGd0Lm5vZGVfb3BzLnJlYWRk'@;
put 'aXIoZ3QpfSx1bmxpbms6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZTtpZighZ3QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3ZhciBSdD1SaS5iYXNlbmFtZShzdCksdG49QXQubG9va3VwTm9kZShndCxSdCksd249QXQubWF5RGVsZXRlKGd0LFJ0'@;
put 'LCExKTtpZih3bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih3bik7aWYoIWd0Lm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYoQXQuaXNNb3VudHBvaW50KHRuKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigxMCk7Z3Qubm9kZV9vcHMudW5saW5rKGd0LFJ0'@;
put 'KSxBdC5kZXN0cm95Tm9kZSh0bil9LHJlYWRsaW5rOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgoc3QpLm5vZGU7aWYoIWd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZighZ3Qubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3JldHVybiBYby5y'@;
put 'ZXNvbHZlKEF0LmdldFBhdGgoZ3QucGFyZW50KSxndC5ub2RlX29wcy5yZWFkbGluayhndCkpfSxzdGF0OihzdCxndCk9Pnt2YXIgUnQ9QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiFndH0pLm5vZGU7aWYoIVJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZighUnQubm9kZV9vcHMu'@;
put 'Z2V0YXR0cil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIFJ0Lm5vZGVfb3BzLmdldGF0dHIoUnQpfSxsc3RhdDpzdD0+QXQuc3RhdChzdCwhMCksY2htb2Q6KHN0LGd0LFJ0KT0+e3ZhciB0bjtpZighKHRuPSJzdHJpbmciPT10eXBlb2Ygc3Q/QXQubG9va3VwUGF0aChzdCx7'@;
put 'Zm9sbG93OiFSdH0pLm5vZGU6c3QpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3RuLm5vZGVfb3BzLnNldGF0dHIodG4se21vZGU6NDA5NSZndHwtNDA5NiZ0bi5tb2RlLHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZDooc3QsZ3QpPT57QXQuY2ht'@;
put 'b2Qoc3QsZ3QsITApfSxmY2htb2Q6KHN0LGd0KT0+e3ZhciBSdD1BdC5nZXRTdHJlYW0oc3QpO2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtBdC5jaG1vZChSdC5ub2RlLGd0KX0sY2hvd246KHN0LGd0LFJ0LHRuKT0+e3ZhciB3bjtpZighKHduPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'c3Q/QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiF0bn0pLm5vZGU6c3QpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3duLm5vZGVfb3BzLnNldGF0dHIod24se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bjooc3QsZ3QsUnQpPT57QXQuY2hvd24o'@;
put 'c3QsZ3QsUnQsITApfSxmY2hvd246KHN0LGd0LFJ0KT0+e3ZhciB0bj1BdC5nZXRTdHJlYW0oc3QpO2lmKCF0bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtBdC5jaG93bih0bi5ub2RlLGd0LFJ0KX0sdHJ1bmNhdGU6KHN0LGd0KT0+e2lmKGd0PDApdGhyb3cgbmV3IEF0LkVycm5vRXJy'@;
put 'b3IoMjgpO3ZhciBSdDtpZighKFJ0PSJzdHJpbmciPT10eXBlb2Ygc3Q/QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSkubm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYoQXQuaXNEaXIoUnQubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5v'@;
put 'RXJyb3IoMzEpO2lmKCFBdC5pc0ZpbGUoUnQubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3ZhciB0bj1BdC5ub2RlUGVybWlzc2lvbnMoUnQsInciKTtpZih0bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcih0bik7UnQubm9kZV9vcHMuc2V0YXR0cihSdCx7c2l6ZTpndCx0aW1l'@;
put 'c3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGU6KHN0LGd0KT0+e3ZhciBSdD1BdC5nZXRTdHJlYW0oc3QpO2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmUnQuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtBdC50cnVuY2F0ZShSdC5u'@;
put 'b2RlLGd0KX0sdXRpbWU6KHN0LGd0LFJ0KT0+e3ZhciB0bj1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KS5ub2RlO3RuLm5vZGVfb3BzLnNldGF0dHIodG4se3RpbWVzdGFtcDpNYXRoLm1heChndCxSdCl9KX0sb3Blbjooc3QsZ3QsUnQpPT57aWYoIiI9PT1zdCl0aHJvdyBuZXcgQXQu'@;
put 'RXJybm9FcnJvcig0NCk7dmFyIHRuO2lmKFJ0PXZvaWQgMD09PVJ0PzQzODpSdCxSdD02NCYoZ3Q9InN0cmluZyI9PXR5cGVvZiBndD9BdC5tb2RlU3RyaW5nVG9GbGFncyhndCk6Z3QpPzQwOTUmUnR8MzI3Njg6MCwib2JqZWN0Ij09dHlwZW9mIHN0KXRuPXN0O2Vsc2V7c3Q9Umkubm9ybWFs'@;
put 'aXplKHN0KTt0cnl7dG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEoMTMxMDcyJmd0KX0pLm5vZGV9Y2F0Y2h7fX12YXIgd249ITE7aWYoNjQmZ3QpaWYodG4pe2lmKDEyOCZndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyMCl9ZWxzZSB0bj1BdC5ta25vZChzdCxSdCwwKSx3bj0hMDtp'@;
put 'ZighdG4pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKEF0LmlzQ2hyZGV2KHRuLm1vZGUpJiYoZ3QmPS01MTMpLDY1NTM2Jmd0JiYhQXQuaXNEaXIodG4ubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpO2lmKCF3bil7dmFyIHNyPUF0Lm1heU9wZW4odG4sZ3QpO2lmKHNy'@;
put 'KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHNyKX01MTImZ3QmJiF3biYmQXQudHJ1bmNhdGUodG4sMCksZ3QmPS0xMzE3MTM7dmFyIGxyPUF0LmNyZWF0ZVN0cmVhbSh7bm9kZTp0bixwYXRoOkF0LmdldFBhdGgodG4pLGZsYWdzOmd0LHNlZWthYmxlOiEwLHBvc2l0aW9uOjAsc3RyZWFtX29w'@;
put 'czp0bi5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0dXJuIGxyLnN0cmVhbV9vcHMub3BlbiYmbHIuc3RyZWFtX29wcy5vcGVuKGxyKSwhZC5sb2dSZWFkRmlsZXN8fDEmZ3R8fChBdC5yZWFkRmlsZXN8fChBdC5yZWFkRmlsZXM9e30pLHN0IGluIEF0LnJlYWRGaWxlc3x8'@;
put 'KEF0LnJlYWRGaWxlc1tzdF09MSkpLGxyfSxjbG9zZTpzdD0+e2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtzdC5nZXRkZW50cyYmKHN0LmdldGRlbnRzPW51bGwpO3RyeXtzdC5zdHJlYW1fb3BzLmNsb3NlJiZzdC5zdHJlYW1fb3BzLmNsb3NlKHN0KX1j'@;
put 'YXRjaChndCl7dGhyb3cgZ3R9ZmluYWxseXtBdC5jbG9zZVN0cmVhbShzdC5mZCl9c3QuZmQ9bnVsbH0saXNDbG9zZWQ6c3Q9Pm51bGw9PT1zdC5mZCxsbHNlZWs6KHN0LGd0LFJ0KT0+e2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZighc3Quc2Vla2Fi'@;
put 'bGV8fCFzdC5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig3MCk7aWYoMCE9UnQmJjEhPVJ0JiYyIT1SdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIHN0LnBvc2l0aW9uPXN0LnN0cmVhbV9vcHMubGxzZWVrKHN0LGd0LFJ0KSxzdC51bmdvdHRl'@;
put 'bj1bXSxzdC5wb3NpdGlvbn0scmVhZDooc3QsZ3QsUnQsdG4sd24pPT57aWYodG48MHx8d248MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcg'@;
put 'QXQuRXJybm9FcnJvcig4KTtpZihBdC5pc0RpcihzdC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMxKTtpZighc3Quc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTt2YXIgc3I9dm9pZCAwIT09d247aWYoc3Ipe2lmKCFzdC5zZWVrYWJsZSl0'@;
put 'aHJvdyBuZXcgQXQuRXJybm9FcnJvcig3MCl9ZWxzZSB3bj1zdC5wb3NpdGlvbjt2YXIgbHI9c3Quc3RyZWFtX29wcy5yZWFkKHN0LGd0LFJ0LHRuLHduKTtyZXR1cm4gc3J8fChzdC5wb3NpdGlvbis9bHIpLGxyfSx3cml0ZTooc3QsZ3QsUnQsdG4sd24sc3IpPT57aWYodG48MHx8d248MCl0'@;
put 'aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoQXQuaXNEaXIoc3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJy'@;
put 'bm9FcnJvcigzMSk7aWYoIXN0LnN0cmVhbV9vcHMud3JpdGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3N0LnNlZWthYmxlJiYxMDI0JnN0LmZsYWdzJiZBdC5sbHNlZWsoc3QsMCwyKTt2YXIgbHI9dm9pZCAwIT09d247aWYobHIpe2lmKCFzdC5zZWVrYWJsZSl0aHJvdyBuZXcgQXQu'@;
put 'RXJybm9FcnJvcig3MCl9ZWxzZSB3bj1zdC5wb3NpdGlvbjt2YXIgUnI9c3Quc3RyZWFtX29wcy53cml0ZShzdCxndCxSdCx0bix3bixzcik7cmV0dXJuIGxyfHwoc3QucG9zaXRpb24rPVJyKSxScn0sYWxsb2NhdGU6KHN0LGd0LFJ0KT0+e2lmKEF0LmlzQ2xvc2VkKHN0KSl0aHJvdyBuZXcg'@;
put 'QXQuRXJybm9FcnJvcig4KTtpZihndDwwfHxSdDw9MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7aWYoISgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZighQXQuaXNGaWxlKHN0Lm5vZGUubW9kZSkmJiFBdC5pc0RpcihzdC5ub2RlLm1vZGUpKXRo'@;
put 'cm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtpZighc3Quc3RyZWFtX29wcy5hbGxvY2F0ZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigxMzgpO3N0LnN0cmVhbV9vcHMuYWxsb2NhdGUoc3QsZ3QsUnQpfSxtbWFwOihzdCxndCxSdCx0bix3bik9PntpZigyJnRuJiYhKDImd24pJiYyIT0oMjA5'@;
put 'NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDIpO2lmKCFzdC5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO3JldHVybiBzdC5zdHJlYW1fb3Bz'@;
put 'Lm1tYXAoc3QsZ3QsUnQsdG4sd24pfSxtc3luYzooc3QsZ3QsUnQsdG4sd24pPT5zdC5zdHJlYW1fb3BzLm1zeW5jP3N0LnN0cmVhbV9vcHMubXN5bmMoc3QsZ3QsUnQsdG4sd24pOjAsbXVubWFwOnN0PT4wLGlvY3RsOihzdCxndCxSdCk9PntpZighc3Quc3RyZWFtX29wcy5pb2N0bCl0aHJv'@;
put 'dyBuZXcgQXQuRXJybm9FcnJvcig1OSk7cmV0dXJuIHN0LnN0cmVhbV9vcHMuaW9jdGwoc3QsZ3QsUnQpfSxyZWFkRmlsZTooc3QsZ3Q9e30pPT57aWYoZ3QuZmxhZ3M9Z3QuZmxhZ3N8fDAsZ3QuZW5jb2Rpbmc9Z3QuZW5jb2Rpbmd8fCJiaW5hcnkiLCJ1dGY4IiE9PWd0LmVuY29kaW5nJiYi'@;
put 'YmluYXJ5IiE9PWd0LmVuY29kaW5nKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBlbmNvZGluZyB0eXBlICInK2d0LmVuY29kaW5nKyciJyk7dmFyIFJ0LHRuPUF0Lm9wZW4oc3QsZ3QuZmxhZ3MpLHduPUF0LnN0YXQoc3QpLnNpemUsc3I9bmV3IFVpbnQ4QXJyYXkod24pO3JldHVybiBBdC5y'@;
put 'ZWFkKHRuLHNyLDAsd24sMCksInV0ZjgiPT09Z3QuZW5jb2Rpbmc/UnQ9Tm4oc3IsMCk6ImJpbmFyeSI9PT1ndC5lbmNvZGluZyYmKFJ0PXNyKSxBdC5jbG9zZSh0biksUnR9LHdyaXRlRmlsZTooc3QsZ3QsUnQ9e30pPT57UnQuZmxhZ3M9UnQuZmxhZ3N8fDU3Nzt2YXIgdG49QXQub3Blbihz'@;
put 'dCxSdC5mbGFncyxSdC5tb2RlKTtpZigic3RyaW5nIj09dHlwZW9mIGd0KXt2YXIgd249bmV3IFVpbnQ4QXJyYXkoX2koZ3QpKzEpLHNyPURyKGd0LHduLDAsd24ubGVuZ3RoKTtBdC53cml0ZSh0bix3biwwLHNyLHZvaWQgMCxSdC5jYW5Pd24pfWVsc2V7aWYoIUFycmF5QnVmZmVyLmlzVmll'@;
put 'dyhndCkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBkYXRhIHR5cGUiKTtBdC53cml0ZSh0bixndCwwLGd0LmJ5dGVMZW5ndGgsdm9pZCAwLFJ0LmNhbk93bil9QXQuY2xvc2UodG4pfSxjd2Q6KCk9PkF0LmN1cnJlbnRQYXRoLGNoZGlyOnN0PT57dmFyIGd0PUF0Lmxvb2t1cFBhdGgo'@;
put 'c3Qse2ZvbGxvdzohMH0pO2lmKG51bGw9PT1ndC5ub2RlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZighQXQuaXNEaXIoZ3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCk7dmFyIFJ0PUF0Lm5vZGVQZXJtaXNzaW9ucyhndC5ub2RlLCJ4Iik7aWYoUnQpdGhy'@;
put 'b3cgbmV3IEF0LkVycm5vRXJyb3IoUnQpO0F0LmN1cnJlbnRQYXRoPWd0LnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3RvcmllczooKT0+e0F0Lm1rZGlyKCIvdG1wIiksQXQubWtkaXIoIi9ob21lIiksQXQubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzOigp'@;
put 'PT57QXQubWtkaXIoIi9kZXYiKSxBdC5yZWdpc3RlckRldmljZShBdC5tYWtlZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KGd0LFJ0LHRuLHduLHNyKT0+d259KSxBdC5ta2RldigiL2Rldi9udWxsIixBdC5tYWtlZGV2KDEsMykpLEpzLnJlZ2lzdGVyKEF0Lm1ha2VkZXYoNSwwKSxKcy5k'@;
put 'ZWZhdWx0X3R0eV9vcHMpLEpzLnJlZ2lzdGVyKEF0Lm1ha2VkZXYoNiwwKSxKcy5kZWZhdWx0X3R0eTFfb3BzKSxBdC5ta2RldigiL2Rldi90dHkiLEF0Lm1ha2VkZXYoNSwwKSksQXQubWtkZXYoIi9kZXYvdHR5MSIsQXQubWFrZWRldig2LDApKTt2YXIgc3Q9ZnVuY3Rpb24oKXtpZigib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe3ZhciBndD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4oKT0+KGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZ3QpLGd0WzBdKX1yZXR1cm4oKT0+RW4oInJhbmRvbURldmljZSIpfSgp'@;
put 'O0F0LmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsc3QpLEF0LmNyZWF0ZURldmljZSgiL2RldiIsInVyYW5kb20iLHN0KSxBdC5ta2RpcigiL2Rldi9zaG0iKSxBdC5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllczooKT0+e0F0Lm1rZGlyKCIvcHJv'@;
put 'YyIpO3ZhciBzdD1BdC5ta2RpcigiL3Byb2Mvc2VsZiIpO0F0Lm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksQXQubW91bnQoe21vdW50OigpPT57dmFyIGd0PUF0LmNyZWF0ZU5vZGUoc3QsImZkIiwxNjg5NSw3Myk7cmV0dXJuIGd0Lm5vZGVfb3BzPXtsb29rdXA6KFJ0LHRuKT0+e3ZhciBzcj1B'@;
put 'dC5nZXRTdHJlYW0oK3RuKTtpZighc3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7dmFyIGxyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+c3IucGF0aH19O3JldHVybiBsci5wYXJlbnQ9bHIsbHJ9fSxndH19LHt9LCIv'@;
put 'cHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtczooKT0+e2Quc3RkaW4/QXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLGQuc3RkaW4pOkF0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLGQuc3Rkb3V0P0F0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91'@;
put 'dCIsbnVsbCxkLnN0ZG91dCk6QXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZG91dCIpLGQuc3RkZXJyP0F0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxkLnN0ZGVycik6QXQuc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxBdC5vcGVuKCIvZGV2L3N0'@;
put 'ZGluIiwwKSxBdC5vcGVuKCIvZGV2L3N0ZG91dCIsMSksQXQub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxlbnN1cmVFcnJub0Vycm9yOigpPT57QXQuRXJybm9FcnJvcnx8KEF0LkVycm5vRXJyb3I9ZnVuY3Rpb24oc3QsZ3Qpe3RoaXMubm9kZT1ndCx0aGlzLnNldEVycm5vPWZ1bmN0aW9uKFJ0'@;
put 'KXt0aGlzLmVycm5vPVJ0fSx0aGlzLnNldEVycm5vKHN0KSx0aGlzLm1lc3NhZ2U9IkZTIGVycm9yIn0sQXQuRXJybm9FcnJvci5wcm90b3R5cGU9bmV3IEVycm9yLEF0LkVycm5vRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPUF0LkVycm5vRXJyb3IsWzQ0XS5mb3JFYWNoKHN0PT57QXQu'@;
put 'Z2VuZXJpY0Vycm9yc1tzdF09bmV3IEF0LkVycm5vRXJyb3Ioc3QpLEF0LmdlbmVyaWNFcnJvcnNbc3RdLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+In0pKX0sc3RhdGljSW5pdDooKT0+e0F0LmVuc3VyZUVycm5vRXJyb3IoKSxBdC5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYp'@;
put 'LEF0Lm1vdW50KHVvLHt9LCIvIiksQXQuY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksQXQuY3JlYXRlRGVmYXVsdERldmljZXMoKSxBdC5jcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKSxBdC5maWxlc3lzdGVtcz17TUVNRlM6dW99fSxpbml0OihzdCxndCxSdCk9PntBdC5pbml0LmluaXRp'@;
put 'YWxpemVkPSEwLEF0LmVuc3VyZUVycm5vRXJyb3IoKSxkLnN0ZGluPXN0fHxkLnN0ZGluLGQuc3Rkb3V0PWd0fHxkLnN0ZG91dCxkLnN0ZGVycj1SdHx8ZC5zdGRlcnIsQXQuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl9LHF1aXQ6KCk9PntBdC5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIg'@;
put 'c3Q9MDtzdDxBdC5zdHJlYW1zLmxlbmd0aDtzdCsrKXt2YXIgZ3Q9QXQuc3RyZWFtc1tzdF07Z3QmJkF0LmNsb3NlKGd0KX19LGdldE1vZGU6KHN0LGd0KT0+e3ZhciBSdD0wO3JldHVybiBzdCYmKFJ0fD0zNjUpLGd0JiYoUnR8PTE0NiksUnR9LGZpbmRPYmplY3Q6KHN0LGd0KT0+e3ZhciBS'@;
put 'dD1BdC5hbmFseXplUGF0aChzdCxndCk7cmV0dXJuIFJ0LmV4aXN0cz9SdC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGg6KHN0LGd0KT0+e3RyeXtzdD0odG49QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiFndH0pKS5wYXRofWNhdGNoe312YXIgUnQ9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJy'@;
put 'b3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgdG49QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSk7UnQucGFyZW50RXhpc3RzPSEwLFJ0LnBhcmVudFBhdGg9dG4u'@;
put 'cGF0aCxSdC5wYXJlbnRPYmplY3Q9dG4ubm9kZSxSdC5uYW1lPVJpLmJhc2VuYW1lKHN0KSx0bj1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IWd0fSksUnQuZXhpc3RzPSEwLFJ0LnBhdGg9dG4ucGF0aCxSdC5vYmplY3Q9dG4ubm9kZSxSdC5uYW1lPXRuLm5vZGUubmFtZSxSdC5pc1Jvb3Q9'@;
put 'Ii8iPT09dG4ucGF0aH1jYXRjaCh3bil7UnQuZXJyb3I9d24uZXJybm99cmV0dXJuIFJ0fSxjcmVhdGVQYXRoOihzdCxndCxSdCx0bik9PntzdD0ic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0LmdldFBhdGgoc3QpO2Zvcih2YXIgd249Z3Quc3BsaXQoIi8iKS5yZXZlcnNlKCk7d24ubGVuZ3Ro'@;
put 'Oyl7dmFyIHNyPXduLnBvcCgpO2lmKHNyKXt2YXIgbHI9Umkuam9pbjIoc3Qsc3IpO3RyeXtBdC5ta2Rpcihscil9Y2F0Y2h7fXN0PWxyfX1yZXR1cm4gbHJ9LGNyZWF0ZUZpbGU6KHN0LGd0LFJ0LHRuLHduKT0+e3ZhciBzcj1SaS5qb2luMigic3RyaW5nIj09dHlwZW9mIHN0P3N0OkF0Lmdl'@;
put 'dFBhdGgoc3QpLGd0KSxscj1BdC5nZXRNb2RlKHRuLHduKTtyZXR1cm4gQXQuY3JlYXRlKHNyLGxyKX0sY3JlYXRlRGF0YUZpbGU6KHN0LGd0LFJ0LHRuLHduLHNyKT0+e3ZhciBscj1ndDtzdCYmKHN0PSJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6QXQuZ2V0UGF0aChzdCksbHI9Z3Q/Umkuam9p'@;
put 'bjIoc3QsZ3QpOnN0KTt2YXIgUnI9QXQuZ2V0TW9kZSh0bix3biksZ289QXQuY3JlYXRlKGxyLFJyKTtpZihSdCl7aWYoInN0cmluZyI9PXR5cGVvZiBSdCl7Zm9yKHZhciBNbz1uZXcgQXJyYXkoUnQubGVuZ3RoKSxmbz0wLEpvPVJ0Lmxlbmd0aDtmbzxKbzsrK2ZvKU1vW2ZvXT1SdC5jaGFy'@;
put 'Q29kZUF0KGZvKTtSdD1Nb31BdC5jaG1vZChnbywxNDZ8UnIpO3ZhciBZaT1BdC5vcGVuKGdvLDU3Nyk7QXQud3JpdGUoWWksUnQsMCxSdC5sZW5ndGgsMCxzciksQXQuY2xvc2UoWWkpLEF0LmNobW9kKGdvLFJyKX1yZXR1cm4gZ299LGNyZWF0ZURldmljZTooc3QsZ3QsUnQsdG4pPT57dmFy'@;
put 'IHduPVJpLmpvaW4yKCJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6QXQuZ2V0UGF0aChzdCksZ3QpLHNyPUF0LmdldE1vZGUoISFSdCwhIXRuKTtBdC5jcmVhdGVEZXZpY2UubWFqb3J8fChBdC5jcmVhdGVEZXZpY2UubWFqb3I9NjQpO3ZhciBscj1BdC5tYWtlZGV2KEF0LmNyZWF0ZURldmljZS5t'@;
put 'YWpvcisrLDApO3JldHVybiBBdC5yZWdpc3RlckRldmljZShscix7b3BlbjpScj0+e1JyLnNlZWthYmxlPSExfSxjbG9zZTpScj0+e3RuJiZ0bi5idWZmZXImJnRuLmJ1ZmZlci5sZW5ndGgmJnRuKDEwKX0scmVhZDooUnIsZ28sTW8sZm8sSm8pPT57Zm9yKHZhciBZaT0wLFlzPTA7WXM8Zm87'@;
put 'WXMrKyl7dmFyIElsO3RyeXtJbD1SdCgpfWNhdGNoe3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1JbCYmMD09PVlpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PUlsKWJyZWFrO1lpKyssZ29bTW8rWXNdPUlsfXJldHVybiBZaSYmKFJyLm5vZGUu'@;
put 'dGltZXN0YW1wPURhdGUubm93KCkpLFlpfSx3cml0ZTooUnIsZ28sTW8sZm8sSm8pPT57Zm9yKHZhciBZaT0wO1lpPGZvO1lpKyspdHJ5e3RuKGdvW01vK1lpXSl9Y2F0Y2h7dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjkpfXJldHVybiBmbyYmKFJyLm5vZGUudGltZXN0YW1wPURhdGUubm93'@;
put 'KCkpLFlpfX0pLEF0Lm1rZGV2KHduLHNyLGxyKX0sZm9yY2VMb2FkRmlsZTpzdD0+e2lmKHN0LmlzRGV2aWNlfHxzdC5pc0ZvbGRlcnx8c3QubGlua3x8c3QuY29udGVudHMpcmV0dXJuITA7dGhyb3cgdHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Ij9uZXcgRXJyb3IoIkxhenkgbG9hZGluZyBz'@;
put 'aG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhl'@;
put 'IG1haW4gdGhyZWFkLiIpOm5ldyBFcnJvcigiQ2Fubm90IGxvYWQgd2l0aG91dCByZWFkKCkgb3IgWE1MSHR0cFJlcXVlc3QuIil9LGNyZWF0ZUxhenlGaWxlOihzdCxndCxSdCx0bix3bik9PntmdW5jdGlvbiBzcigpe3RoaXMubGVuZ3RoS25vd249ITEsdGhpcy5jaHVua3M9W119aWYoc3Iu'@;
put 'cHJvdG90eXBlLmdldD1mdW5jdGlvbihmbyl7aWYoIShmbz50aGlzLmxlbmd0aC0xfHxmbzwwKSl7dmFyIEpvPWZvJXRoaXMuY2h1bmtTaXplO3JldHVybiB0aGlzLmdldHRlcihmby90aGlzLmNodW5rU2l6ZXwwKVtKb119fSxzci5wcm90b3R5cGUuc2V0RGF0YUdldHRlcj1mdW5jdGlvbihm'@;
put 'byl7dGhpcy5nZXR0ZXI9Zm99LHNyLnByb3RvdHlwZS5jYWNoZUxlbmd0aD1mdW5jdGlvbigpe3ZhciBmbz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoZm8ub3BlbigiSEVBRCIsUnQsITEpLGZvLnNlbmQobnVsbCksIShmby5zdGF0dXM+PTIwMCYmZm8uc3RhdHVzPDMwMHx8MzA0PT09Zm8uc3Rh'@;
put 'dHVzKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIitSdCsiLiBTdGF0dXM6ICIrZm8uc3RhdHVzKTt2YXIgSm8sWWk9TnVtYmVyKGZvLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKSxZcz0oSm89Zm8uZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMi'@;
put 'KSkmJiJieXRlcyI9PT1KbyxJbD0oSm89Zm8uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciKSkmJiJnemlwIj09PUpvLE1sPTEwNDg1NzY7WXN8fChNbD1ZaSk7dmFyIFF1PXRoaXM7UXUuc2V0RGF0YUdldHRlcihjbD0+e3ZhciBBaT1jbCpNbCxqbz0oY2wrMSkqTWwtMTtp'@;
put 'Zihqbz1NYXRoLm1pbihqbyxZaS0xKSx2b2lkIDA9PT1RdS5jaHVua3NbY2xdJiYoUXUuY2h1bmtzW2NsXT0oKHFjLExsKT0+e2lmKHFjPkxsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCByYW5nZSAoIitxYysiLCAiK0xsKyIpIG9yIG5vIGJ5dGVzIHJlcXVlc3RlZCEiKTtpZihMbD5ZaS0x'@;
put 'KXRocm93IG5ldyBFcnJvcigib25seSAiK1lpKyIgYnl0ZXMgYXZhaWxhYmxlISBwcm9ncmFtbWVyIGVycm9yISIpO3ZhciB0Yz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYodGMub3BlbigiR0VUIixSdCwhMSksWWkhPT1NbCYmdGMuc2V0UmVxdWVzdEhlYWRlcigiUmFuZ2UiLCJieXRlcz0iK3Fj'@;
put 'KyItIitMbCksdGMucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsdGMub3ZlcnJpZGVNaW1lVHlwZSYmdGMub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLHRjLnNlbmQobnVsbCksISh0Yy5zdGF0dXM+PTIwMCYmdGMuc3RhdHVzPDMwMHx8'@;
put 'MzA0PT09dGMuc3RhdHVzKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGxvYWQgIitSdCsiLiBTdGF0dXM6ICIrdGMuc3RhdHVzKTtyZXR1cm4gdm9pZCAwIT09dGMucmVzcG9uc2U/bmV3IFVpbnQ4QXJyYXkodGMucmVzcG9uc2V8fFtdKTpHbyh0Yy5yZXNwb25zZVRleHR8fCIiLCEwKX0p'@;
put 'KEFpLGpvKSksdm9pZCAwPT09UXUuY2h1bmtzW2NsXSl0aHJvdyBuZXcgRXJyb3IoImRvWEhSIGZhaWxlZCEiKTtyZXR1cm4gUXUuY2h1bmtzW2NsXX0pLCFJbCYmWWl8fChNbD1ZaT0xLFlpPXRoaXMuZ2V0dGVyKDApLmxlbmd0aCxNbD1ZaSxXKCJMYXp5RmlsZXMgb24gZ3ppcCBmb3JjZXMg'@;
put 'ZG93bmxvYWQgb2YgdGhlIHdob2xlIGZpbGUgd2hlbiBsZW5ndGggaXMgYWNjZXNzZWQiKSksdGhpcy5fbGVuZ3RoPVlpLHRoaXMuX2NodW5rU2l6ZT1NbCx0aGlzLmxlbmd0aEtub3duPSEwfSx0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBi'@;
put 'aW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBscj17aXNEZXZpY2U6ITEsdXJsOlJ0fSxScj1BdC5jcmVhdGVGaWxlKHN0LGd0LGxyLHRuLHduKTtsci5jb250ZW50'@;
put 'cz9Sci5jb250ZW50cz1sci5jb250ZW50czpsci51cmwmJihSci5jb250ZW50cz1udWxsLFJyLnVybD1sci51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJyLHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIGdvPXt9O2Z1'@;
put 'bmN0aW9uIE1vKGZvLEpvLFlpLFlzLElsKXt2YXIgTWw9Zm8ubm9kZS5jb250ZW50cztpZihJbD49TWwubGVuZ3RoKXJldHVybiAwO3ZhciBRdT1NYXRoLm1pbihNbC5sZW5ndGgtSWwsWXMpO2lmKE1sLnNsaWNlKWZvcih2YXIgY2w9MDtjbDxRdTtjbCsrKUpvW1lpK2NsXT1NbFtJbCtjbF07'@;
put 'ZWxzZSBmb3IoY2w9MDtjbDxRdTtjbCsrKUpvW1lpK2NsXT1NbC5nZXQoSWwrY2wpO3JldHVybiBRdX1yZXR1cm4gT2JqZWN0LmtleXMoUnIuc3RyZWFtX29wcykuZm9yRWFjaChmbz0+e3ZhciBKbz1Sci5zdHJlYW1fb3BzW2ZvXTtnb1tmb109ZnVuY3Rpb24oKXtyZXR1cm4gQXQuZm9yY2VM'@;
put 'b2FkRmlsZShSciksSm8uYXBwbHkobnVsbCxhcmd1bWVudHMpfX0pLGdvLnJlYWQ9KGZvLEpvLFlpLFlzLElsKT0+KEF0LmZvcmNlTG9hZEZpbGUoUnIpLE1vKGZvLEpvLFlpLFlzLElsKSksZ28ubW1hcD0oZm8sSm8sWWksWXMsSWwpPT57QXQuZm9yY2VMb2FkRmlsZShScik7dmFyIE1sPWdh'@;
put 'KEpvKTtpZighTWwpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDgpO3JldHVybiBNbyhmbyxldCxNbCxKbyxZaSkse3B0cjpNbCxhbGxvY2F0ZWQ6ITB9fSxSci5zdHJlYW1fb3BzPWdvLFJyfSxjcmVhdGVQcmVsb2FkZWRGaWxlOihzdCxndCxSdCx0bix3bixzcixscixScixnbyxNbyk9Pnt2'@;
put 'YXIgWWksSWwsUXUsZm89Z3Q/WG8ucmVzb2x2ZShSaS5qb2luMihzdCxndCkpOnN0O2Z1bmN0aW9uIEpvKFlpKXtmdW5jdGlvbiBZcyhJbCl7TW8mJk1vKCksUnJ8fEF0LmNyZWF0ZURhdGFGaWxlKHN0LGd0LElsLHRuLHduLGdvKSxzciYmc3IoKSxjbigpfUJyb3dzZXIuaGFuZGxlZEJ5UHJl'@;
put 'bG9hZFBsdWdpbihZaSxmbyxZcywoKT0+e2xyJiZscigpLGNuKCl9KXx8WXMoWWkpfU90KCksInN0cmluZyI9PXR5cGVvZiBSdD8oSWw9bHIsUXU9ImFsICIrKFlpPVJ0KSwodm9pZCAwKShZaSxjbD0+e1plKGNsLCdMb2FkaW5nIGRhdGEgZmlsZSAiJytZaSsnIiBmYWlsZWQgKG5vIGFycmF5'@;
put 'QnVmZmVyKS4nKSwoWWk9PntKbyhZaSl9KShuZXcgVWludDhBcnJheShjbCkpLFF1JiZjbigpfSxjbD0+e2lmKCFJbCl0aHJvdydMb2FkaW5nIGRhdGEgZmlsZSAiJytZaSsnIiBmYWlsZWQuJztJbCgpfSksUXUmJk90KCkpOkpvKFJ0KX0saW5kZXhlZERCOigpPT53aW5kb3cuaW5kZXhlZERC'@;
put 'fHx3aW5kb3cubW96SW5kZXhlZERCfHx3aW5kb3cud2Via2l0SW5kZXhlZERCfHx3aW5kb3cubXNJbmRleGVkREIsREJfTkFNRTooKT0+IkVNX0ZTXyIrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLERCX1ZFUlNJT046MjAsREJfU1RPUkVfTkFNRToiRklMRV9EQVRBIixzYXZlRmlsZXNUb0RC'@;
put 'OihzdCxndCxSdCk9PntndD1ndHx8KCgpPT57fSksUnQ9UnR8fCgoKT0+e30pO3ZhciB0bj1BdC5pbmRleGVkREIoKTt0cnl7dmFyIHduPXRuLm9wZW4oQXQuREJfTkFNRSgpLEF0LkRCX1ZFUlNJT04pfWNhdGNoKHNyKXtyZXR1cm4gUnQoc3IpfXduLm9udXBncmFkZW5lZWRlZD0oKT0+e1co'@;
put 'ImNyZWF0aW5nIGRiIiksd24ucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEF0LkRCX1NUT1JFX05BTUUpfSx3bi5vbnN1Y2Nlc3M9KCk9Pnt2YXIgc3I9d24ucmVzdWx0LnRyYW5zYWN0aW9uKFtBdC5EQl9TVE9SRV9OQU1FXSwicmVhZHdyaXRlIiksbHI9c3Iub2JqZWN0U3RvcmUoQXQuREJf'@;
put 'U1RPUkVfTkFNRSksUnI9MCxnbz0wLE1vPXN0Lmxlbmd0aDtmdW5jdGlvbiBmbygpezA9PWdvP2d0KCk6UnQoKX1zdC5mb3JFYWNoKEpvPT57dmFyIFlpPWxyLnB1dChBdC5hbmFseXplUGF0aChKbykub2JqZWN0LmNvbnRlbnRzLEpvKTtZaS5vbnN1Y2Nlc3M9KCk9PnsrK1JyK2dvPT1NbyYm'@;
put 'Zm8oKX0sWWkub25lcnJvcj0oKT0+e2dvKyssUnIrZ289PU1vJiZmbygpfX0pLHNyLm9uZXJyb3I9UnR9LHduLm9uZXJyb3I9UnR9LGxvYWRGaWxlc0Zyb21EQjooc3QsZ3QsUnQpPT57Z3Q9Z3R8fCgoKT0+e30pLFJ0PVJ0fHwoKCk9Pnt9KTt2YXIgdG49QXQuaW5kZXhlZERCKCk7dHJ5e3Zh'@;
put 'ciB3bj10bi5vcGVuKEF0LkRCX05BTUUoKSxBdC5EQl9WRVJTSU9OKX1jYXRjaChzcil7cmV0dXJuIFJ0KHNyKX13bi5vbnVwZ3JhZGVuZWVkZWQ9UnQsd24ub25zdWNjZXNzPSgpPT57dmFyIHNyPXduLnJlc3VsdDt0cnl7dmFyIGxyPXNyLnRyYW5zYWN0aW9uKFtBdC5EQl9TVE9SRV9OQU1F'@;
put 'XSwicmVhZG9ubHkiKX1jYXRjaChZaSl7cmV0dXJuIHZvaWQgUnQoWWkpfXZhciBScj1sci5vYmplY3RTdG9yZShBdC5EQl9TVE9SRV9OQU1FKSxnbz0wLE1vPTAsZm89c3QubGVuZ3RoO2Z1bmN0aW9uIEpvKCl7MD09TW8/Z3QoKTpSdCgpfXN0LmZvckVhY2goWWk9Pnt2YXIgWXM9UnIuZ2V0'@;
put 'KFlpKTtZcy5vbnN1Y2Nlc3M9KCk9PntBdC5hbmFseXplUGF0aChZaSkuZXhpc3RzJiZBdC51bmxpbmsoWWkpLEF0LmNyZWF0ZURhdGFGaWxlKFJpLmRpcm5hbWUoWWkpLFJpLmJhc2VuYW1lKFlpKSxZcy5yZXN1bHQsITAsITAsITApLCsrZ28rTW89PWZvJiZKbygpfSxZcy5vbmVycm9yPSgp'@;
put 'PT57TW8rKyxnbytNbz09Zm8mJkpvKCl9fSksbHIub25lcnJvcj1SdH0sd24ub25lcnJvcj1SdH19LElpPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQ6ZnVuY3Rpb24oc3QsZ3QsUnQpe2lmKFJpLmlzQWJzKGd0KSlyZXR1cm4gZ3Q7dmFyIHRuO2lmKHRuPS0xMDA9PT1zdD9BdC5j'@;
put 'd2QoKTpJaS5nZXRTdHJlYW1Gcm9tRkQoc3QpLnBhdGgsMD09Z3QubGVuZ3RoKXtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO3JldHVybiB0bn1yZXR1cm4gUmkuam9pbjIodG4sZ3QpfSxkb1N0YXQ6ZnVuY3Rpb24oc3QsZ3QsUnQpe3RyeXt2YXIgdG49c3QoZ3QpfWNhdGNo'@;
put 'KFJyKXtpZihSciYmUnIubm9kZSYmUmkubm9ybWFsaXplKGd0KSE9PVJpLm5vcm1hbGl6ZShBdC5nZXRQYXRoKFJyLm5vZGUpKSlyZXR1cm4tNTQ7dGhyb3cgUnJ9U3RbUnQ+PjJdPXRuLmRldixTdFtSdCs4Pj4yXT10bi5pbm8sU3RbUnQrMTI+PjJdPXRuLm1vZGUsSnRbUnQrMTY+PjJdPXRu'@;
put 'Lm5saW5rLFN0W1J0KzIwPj4yXT10bi51aWQsU3RbUnQrMjQ+PjJdPXRuLmdpZCxTdFtSdCsyOD4+Ml09dG4ucmRldixGbj1bdG4uc2l6ZT4+PjAsKFpyPXRuLnNpemUsK01hdGguYWJzKFpyKT49MT9acj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpLDQyOTQ5Njcy'@;
put 'OTUpKT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCs0MD4+Ml09Rm5bMF0sU3RbUnQrNDQ+PjJdPUZuWzFdLFN0W1J0KzQ4Pj4yXT00MDk2LFN0W1J0KzUyPj4yXT10bi5ibG9ja3M7dmFyIHduPXRuLmF0aW1lLmdldFRpbWUoKSxz'@;
put 'cj10bi5tdGltZS5nZXRUaW1lKCksbHI9dG4uY3RpbWUuZ2V0VGltZSgpO3JldHVybiBGbj1bTWF0aC5mbG9vcih3bi8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcih3bi8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KSw0Mjk0'@;
put 'OTY3Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrNTY+PjJdPUZuWzBdLFN0W1J0KzYwPj4yXT1GblsxXSxKdFtSdCs2ND4+Ml09d24lMWUzKjFlMyxGbj1bTWF0aC5mbG9vcihzci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9v'@;
put 'cihzci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrNzI+PjJdPUZuWzBdLFN0W1J0Kzc2'@;
put 'Pj4yXT1GblsxXSxKdFtSdCs4MD4+Ml09c3IlMWUzKjFlMyxGbj1bTWF0aC5mbG9vcihsci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihsci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+'@;
put 'K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrODg+PjJdPUZuWzBdLFN0W1J0KzkyPj4yXT1GblsxXSxKdFtSdCs5Nj4+Ml09bHIlMWUzKjFlMyxGbj1bdG4uaW5vPj4+MCwoWnI9dG4uaW5vLCtNYXRoLmFicyhacik+PTE/WnI+MD8oMHxNYXRo'@;
put 'Lm1pbigrTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3RbUnQrMTA0Pj4yXT1GblswXSxTdFtSdCsxMDg+PjJdPUZuWzFdLDB9LGRvTXN5bmM6ZnVuY3Rpb24oc3QsZ3Qs'@;
put 'UnQsdG4sd24pe2lmKCFBdC5pc0ZpbGUoZ3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7aWYoMiZ0bilyZXR1cm4gMDt2YXIgc3I9eXQuc2xpY2Uoc3Qsc3QrUnQpO0F0Lm1zeW5jKGd0LHNyLHduLFJ0LHRuKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIElpLnZhcmFyZ3MrPTQsU3RbSWkudmFyYXJncy00Pj4yXX0sZ2V0U3RyOmZ1bmN0aW9uKHN0KXtyZXR1cm4gY3Ioc3QpfSxnZXRTdHJlYW1Gcm9tRkQ6ZnVuY3Rpb24oc3Qpe3ZhciBndD1BdC5nZXRTdHJlYW0oc3QpO2lmKCFndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTty'@;
put 'ZXR1cm4gZ3R9fSxRcz1bXTtmdW5jdGlvbiBGcyhzdCl7dHJ5e3JldHVybiBwZS5ncm93KHN0LWl0LmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksbGkocGUuYnVmZmVyKSwxfWNhdGNoe319dmFyIGVjPXt9O2Z1bmN0aW9uIENhKCl7aWYoIUNhLnN0cmluZ3Mpe3ZhciBzdD17VVNFUjoid2ViX3Vz'@;
put 'ZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIu'@;
put 'VVRGLTgiLF86X3x8Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZhciBndCBpbiBlYyl2b2lkIDA9PT1lY1tndF0/ZGVsZXRlIHN0W2d0XTpzdFtndF09ZWNbZ3RdO3ZhciBSdD1bXTtmb3IodmFyIGd0IGluIHN0KVJ0LnB1c2goZ3QrIj0iK3N0W2d0XSk7Q2Euc3RyaW5ncz1SdH1yZXR1cm4gQ2Eu'@;
put 'c3RyaW5nc31mdW5jdGlvbiBEbChzdCl7cmV0dXJuIHN0JTQ9PTAmJihzdCUxMDAhPTB8fHN0JTQwMD09MCl9dmFyIHgyPVszMSwyOSwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sdTQ9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxDZD1mdW5jdGlvbihzdCxn'@;
put 'dCxSdCx0bil7c3R8fChzdD10aGlzKSx0aGlzLnBhcmVudD1zdCx0aGlzLm1vdW50PXN0Lm1vdW50LHRoaXMubW91bnRlZD1udWxsLHRoaXMuaWQ9QXQubmV4dElub2RlKyssdGhpcy5uYW1lPWd0LHRoaXMubW9kZT1SdCx0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlz'@;
put 'LnJkZXY9dG59O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENkLnByb3RvdHlwZSx7cmVhZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDM2NT09KDM2NSZ0aGlzLm1vZGUpfSxzZXQ6ZnVuY3Rpb24oc3Qpe3N0P3RoaXMubW9kZXw9MzY1OnRoaXMubW9kZSY9LTM2Nn19LHdyaXRlOntnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gMTQ2PT0oMTQ2JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihzdCl7c3Q/dGhpcy5tb2RlfD0xNDY6dGhpcy5tb2RlJj0tMTQ3fX0saXNGb2xkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBBdC5pc0Rpcih0aGlzLm1vZGUpfX0saXNEZXZpY2U6e2dldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiBBdC5pc0NocmRldih0aGlzLm1vZGUpfX19KSxBdC5GU05vZGU9Q2QsQXQuc3RhdGljSW5pdCgpO3ZhciBKdT17YjpmdW5jdGlvbihzdCxndCxSdCl7dGhyb3cgbmV3IE5yKHN0KS5pbml0KGd0LFJ0KSxzdH0sbDpmdW5jdGlvbihzdCxndCxSdCx0bil7dHJ5e2lmKGd0PUlp'@;
put 'LmdldFN0cihndCksZ3Q9SWkuY2FsY3VsYXRlQXQoc3QsZ3QpLC04JlJ0KXJldHVybi0yODt2YXIgd249QXQubG9va3VwUGF0aChndCx7Zm9sbG93OiEwfSkubm9kZTtpZighd24pcmV0dXJuLTQ0O3ZhciBzcj0iIjtyZXR1cm4gNCZSdCYmKHNyKz0iciIpLDImUnQmJihzcis9InciKSwxJlJ0'@;
put 'JiYoc3IrPSJ4Iiksc3ImJkF0Lm5vZGVQZXJtaXNzaW9ucyh3bixzcik/LTI6MH1jYXRjaChscil7aWYodm9pZCAwPT09QXR8fCEobHIgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBscjtyZXR1cm4tbHIuZXJybm99fSxpOmZ1bmN0aW9uKHN0LGd0LFJ0KXtJaS52YXJhcmdzPVJ0'@;
put 'O3RyeXt2YXIgdG49SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtzd2l0Y2goZ3Qpe2Nhc2UgMDpyZXR1cm4od249SWkuZ2V0KCkpPDA/LTI4OkF0LmNyZWF0ZVN0cmVhbSh0bix3bikuZmQ7Y2FzZSAxOmNhc2UgMjpjYXNlIDY6Y2FzZSA3OnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gdG4uZmxhZ3M7'@;
put 'Y2FzZSA0OnZhciB3bj1JaS5nZXQoKTtyZXR1cm4gdG4uZmxhZ3N8PXduLDA7Y2FzZSA1OnJldHVybiB3bj1JaS5nZXQoKSxFdFt3biswPj4xXT0yLDA7Y2FzZSAxNjpjYXNlIDg6ZGVmYXVsdDpyZXR1cm4tMjg7Y2FzZSA5OnJldHVybiBTdFtNdygpPj4yXT0yOCwtMX19Y2F0Y2gobHIpe2lm'@;
put 'KHZvaWQgMD09PUF0fHwhKGxyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0sdzpmdW5jdGlvbihzdCxndCl7dHJ5e3ZhciBSdD1JaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3JldHVybiBJaS5kb1N0YXQoQXQuc3RhdCxSdC5wYXRoLGd0KX1jYXRj'@;
put 'aCh0bil7aWYodm9pZCAwPT09QXR8fCEodG4gaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyB0bjtyZXR1cm4tdG4uZXJybm99fSx4OmZ1bmN0aW9uKHN0LGd0LFJ0KXtJaS52YXJhcmdzPVJ0O3RyeXt2YXIgdG49SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtzd2l0Y2goZ3Qpe2Nhc2Ug'@;
put 'MjE1MDk6Y2FzZSAyMTUwNTpjYXNlIDIxNTEwOmNhc2UgMjE1MTE6Y2FzZSAyMTUxMjpjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODpjYXNlIDIxNTIzOmNhc2UgMjE1MjQ6cmV0dXJuIHRuLnR0eT8wOi01OTtjYXNlIDIxNTE5OmlmKCF0bi50dHkpcmV0dXJuLTU5O3ZhciB3bj1J'@;
put 'aS5nZXQoKTtyZXR1cm4gU3Rbd24+PjJdPTAsMDtjYXNlIDIxNTIwOnJldHVybiB0bi50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnJldHVybiB3bj1JaS5nZXQoKSxBdC5pb2N0bCh0bixndCx3bik7ZGVmYXVsdDpyZXR1cm4tMjh9fWNhdGNoKHNyKXtpZih2b2lkIDA9PT1BdHx8IShzciBpbnN0'@;
put 'YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHNyO3JldHVybi1zci5lcnJub319LHU6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4pe3RyeXtndD1JaS5nZXRTdHIoZ3QpO3ZhciB3bj0yNTYmdG4sc3I9NDA5NiZ0bjtyZXR1cm4gdG4mPS02NDAxLGd0PUlpLmNhbGN1bGF0ZUF0KHN0LGd0LHNyKSxJ'@;
put 'aS5kb1N0YXQod24/QXQubHN0YXQ6QXQuc3RhdCxndCxSdCl9Y2F0Y2gobHIpe2lmKHZvaWQgMD09PUF0fHwhKGxyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgbHI7cmV0dXJuLWxyLmVycm5vfX0sZDpmdW5jdGlvbihzdCxndCxSdCx0bil7SWkudmFyYXJncz10bjt0cnl7Z3Q9'@;
put 'SWkuZ2V0U3RyKGd0KSxndD1JaS5jYWxjdWxhdGVBdChzdCxndCk7dmFyIHduPXRuP0lpLmdldCgpOjA7cmV0dXJuIEF0Lm9wZW4oZ3QsUnQsd24pLmZkfWNhdGNoKHNyKXtpZih2b2lkIDA9PT1BdHx8IShzciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHNyO3JldHVybi1zci5l'@;
put 'cnJub319LHY6ZnVuY3Rpb24oc3QsZ3Qpe3RyeXtyZXR1cm4gc3Q9SWkuZ2V0U3RyKHN0KSxJaS5kb1N0YXQoQXQuc3RhdCxzdCxndCl9Y2F0Y2goUnQpe2lmKHZvaWQgMD09PUF0fHwhKFJ0IGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgUnQ7cmV0dXJuLVJ0LmVycm5vfX0scDpm'@;
put 'dW5jdGlvbihzdCxndCxSdCl7dHJ5e3JldHVybiBndD1JaS5nZXRTdHIoZ3QpLGd0PUlpLmNhbGN1bGF0ZUF0KHN0LGd0KSwwPT09UnQ/QXQudW5saW5rKGd0KTo1MTI9PT1SdD9BdC5ybWRpcihndCk6RW4oIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0IiksMH1jYXRjaCh0bil7'@;
put 'aWYodm9pZCAwPT09QXR8fCEodG4gaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyB0bjtyZXR1cm4tdG4uZXJybm99fSxqOmZ1bmN0aW9uKCl7cmV0dXJuITB9LHE6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24sc3IsbHIpe3RyeXt2YXIgUnI9SWkuZ2V0U3RyZWFtRnJvbUZEKHRuKSxn'@;
put 'bz1BdC5tbWFwKFJyLHN0LHduLGd0LFJ0KSxNbz1nby5wdHI7cmV0dXJuIFN0W3NyPj4yXT1nby5hbGxvY2F0ZWQsSnRbbHI+PjJdPU1vLDB9Y2F0Y2goZm8pe2lmKHZvaWQgMD09PUF0fHwhKGZvIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgZm87cmV0dXJuLWZvLmVycm5vfX0s'@;
put 'cjpmdW5jdGlvbihzdCxndCxSdCx0bix3bixzcil7dHJ5e3ZhciBscj1JaS5nZXRTdHJlYW1Gcm9tRkQod24pOzImUnQmJklpLmRvTXN5bmMoc3QsbHIsZ3QsdG4sc3IpLEF0Lm11bm1hcChscil9Y2F0Y2goUnIpe2lmKHZvaWQgMD09PUF0fHwhKFJyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJv'@;
put 'cikpdGhyb3cgUnI7cmV0dXJuLVJyLmVycm5vfX0sYTpmdW5jdGlvbigpe0VuKCIiKX0seTpmdW5jdGlvbihzdCxndCxSdCl7cmV0dXJuIGZ1bmN0aW9uIGxhKHN0LGd0LFJ0KXt2YXIgdG49ZnVuY3Rpb24od24sc3Ipe3ZhciBscjtmb3IoUXMubGVuZ3RoPTAsc3I+Pj0yO2xyPXl0W3duKytd'@;
put 'Oylzcis9MTA1IT1sciZzcixRcy5wdXNoKDEwNT09bHI/U3Rbc3JdOm5uW3NyKys+PjFdKSwrK3NyO3JldHVybiBRc30oZ3QsUnQpO3JldHVybiBPcltzdF0uYXBwbHkobnVsbCx0bil9KHN0LGd0LFJ0KX0sZTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxrOmZ1bmN0aW9uKHN0LGd0'@;
put 'LFJ0KXt5dC5jb3B5V2l0aGluKHN0LGd0LGd0K1J0KX0sbzpmdW5jdGlvbihzdCl7dmFyIGd0LHRuPXl0Lmxlbmd0aCx3bj0yMTQ3NDgzNjQ4O2lmKChzdD4+Pj0wKT53bilyZXR1cm4hMTtmb3IodmFyIHNyPTE7c3I8PTQ7c3IqPTIpe3ZhciBscj10biooMSsuMi9zcik7aWYobHI9TWF0aC5t'@;
put 'aW4obHIsc3QrMTAwNjYzMjk2KSxGcyhNYXRoLm1pbih3biwoZ3Q9TWF0aC5tYXgoc3QsbHIpKSsoNjU1MzYtZ3QlNjU1MzYpJTY1NTM2KSkpcmV0dXJuITB9cmV0dXJuITF9LHM6ZnVuY3Rpb24oc3QsZ3Qpe3ZhciBSdD0wO3JldHVybiBDYSgpLmZvckVhY2goZnVuY3Rpb24odG4sd24pe3Zh'@;
put 'ciBzcj1ndCtSdDtKdFtzdCs0KnduPj4yXT1zcixmdW5jdGlvbihscixScixnbyl7Zm9yKHZhciBNbz0wO01vPGxyLmxlbmd0aDsrK01vKWV0W1JyKys+PjBdPWxyLmNoYXJDb2RlQXQoTW8pO2V0W1JyPj4wXT0wfSh0bixzciksUnQrPXRuLmxlbmd0aCsxfSksMH0sdDpmdW5jdGlvbihzdCxn'@;
put 'dCl7dmFyIFJ0PUNhKCk7SnRbc3Q+PjJdPVJ0Lmxlbmd0aDt2YXIgdG49MDtyZXR1cm4gUnQuZm9yRWFjaChmdW5jdGlvbih3bil7dG4rPXduLmxlbmd0aCsxfSksSnRbZ3Q+PjJdPXRuLDB9LGY6ZnVuY3Rpb24oc3QsZ3QpeyFmdW5jdGlvbiBSaChzdCl7d2V8fChkLm9uRXhpdCYmZC5vbkV4'@;
put 'aXQoc3QpLEVlPSEwKSxUKHN0LG5ldyAkcihzdCkpfShzdCl9LGM6ZnVuY3Rpb24oc3Qpe3RyeXt2YXIgZ3Q9SWkuZ2V0U3RyZWFtRnJvbUZEKHN0KTtyZXR1cm4gQXQuY2xvc2UoZ3QpLDB9Y2F0Y2goUnQpe2lmKHZvaWQgMD09PUF0fHwhKFJ0IGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikp'@;
put 'dGhyb3cgUnQ7cmV0dXJuIFJ0LmVycm5vfX0sZzpmdW5jdGlvbihzdCxndCxSdCx0bil7dHJ5e3ZhciB3bj1mdW5jdGlvbihzcixscixScixnbyl7Zm9yKHZhciBNbz0wLGZvPTA7Zm88UnI7Zm8rKyl7dmFyIEpvPUp0W2xyPj4yXSxZaT1KdFtscis0Pj4yXTtscis9ODt2YXIgWXM9QXQucmVh'@;
put 'ZChzcixldCxKbyxZaSx2b2lkIDApO2lmKFlzPDApcmV0dXJuLTE7aWYoTW8rPVlzLFlzPFlpKWJyZWFrfXJldHVybiBNb30oSWkuZ2V0U3RyZWFtRnJvbUZEKHN0KSxndCxSdCk7cmV0dXJuIEp0W3RuPj4yXT13biwwfWNhdGNoKHNyKXtpZih2b2lkIDA9PT1BdHx8IShzciBpbnN0YW5jZW9m'@;
put 'IEF0LkVycm5vRXJyb3IpKXRocm93IHNyO3JldHVybiBzci5lcnJub319LG06ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3RyeXt2YXIgc3I9KGdvPVJ0KSsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhKFJyPWd0KT8oUnI+Pj4wKSs0Mjk0OTY3Mjk2KmdvOk5hTjtpZihpc05hTihzcikpcmV0dXJu'@;
put 'IDYxO3ZhciBscj1JaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3JldHVybiBBdC5sbHNlZWsobHIsc3IsdG4pLEZuPVtsci5wb3NpdGlvbj4+PjAsKFpyPWxyLnBvc2l0aW9uLCtNYXRoLmFicyhacik+PTE/WnI+MD8oMHxNYXRoLm1pbigrTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KSw0Mjk0OTY3'@;
put 'Mjk1KSk+Pj4wOn5+K01hdGguY2VpbCgoWnItKyh+flpyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sU3Rbd24+PjJdPUZuWzBdLFN0W3duKzQ+PjJdPUZuWzFdLGxyLmdldGRlbnRzJiYwPT09c3ImJjA9PT10biYmKGxyLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goTW8pe2lmKHZvaWQgMD09'@;
put 'PUF0fHwhKE1vIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgTW87cmV0dXJuIE1vLmVycm5vfXZhciBScixnb30saDpmdW5jdGlvbihzdCxndCxSdCx0bil7dHJ5e3ZhciB3bj1mdW5jdGlvbihzcixscixScixnbyl7Zm9yKHZhciBNbz0wLGZvPTA7Zm88UnI7Zm8rKyl7dmFyIEpv'@;
put 'PUp0W2xyPj4yXSxZaT1KdFtscis0Pj4yXTtscis9ODt2YXIgWXM9QXQud3JpdGUoc3IsZXQsSm8sWWksdm9pZCAwKTtpZihZczwwKXJldHVybi0xO01vKz1Zc31yZXR1cm4gTW99KElpLmdldFN0cmVhbUZyb21GRChzdCksZ3QsUnQpO3JldHVybiBKdFt0bj4+Ml09d24sMH1jYXRjaChzcil7'@;
put 'aWYodm9pZCAwPT09QXR8fCEoc3IgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBzcjtyZXR1cm4gc3IuZXJybm99fSxuOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtyZXR1cm4gZnVuY3Rpb24gT2goc3QsZ3QsUnQsdG4pe3ZhciB3bj1TdFt0bis0MD4+Ml0sc3I9e3RtX3NlYzpT'@;
put 'dFt0bj4+Ml0sdG1fbWluOlN0W3RuKzQ+PjJdLHRtX2hvdXI6U3RbdG4rOD4+Ml0sdG1fbWRheTpTdFt0bisxMj4+Ml0sdG1fbW9uOlN0W3RuKzE2Pj4yXSx0bV95ZWFyOlN0W3RuKzIwPj4yXSx0bV93ZGF5OlN0W3RuKzI0Pj4yXSx0bV95ZGF5OlN0W3RuKzI4Pj4yXSx0bV9pc2RzdDpTdFt0'@;
put 'biszMj4+Ml0sdG1fZ210b2ZmOlN0W3RuKzM2Pj4yXSx0bV96b25lOnduP2NyKHduKToiIn0sbHI9Y3IoUnQpLFJyPXsiJWMiOiIlYSAlYiAlZCAlSDolTTolUyAlWSIsIiVEIjoiJW0vJWQvJXkiLCIlRiI6IiVZLSVtLSVkIiwiJWgiOiIlYiIsIiVyIjoiJUk6JU06JVMgJXAiLCIlUiI6IiVI'@;
put 'OiVNIiwiJVQiOiIlSDolTTolUyIsIiV4IjoiJW0vJWQvJXkiLCIlWCI6IiVIOiVNOiVTIiwiJUVjIjoiJWMiLCIlRUMiOiIlQyIsIiVFeCI6IiVtLyVkLyV5IiwiJUVYIjoiJUg6JU06JVMiLCIlRXkiOiIleSIsIiVFWSI6IiVZIiwiJU9kIjoiJWQiLCIlT2UiOiIlZSIsIiVPSCI6IiVIIiwi'@;
put 'JU9JIjoiJUkiLCIlT20iOiIlbSIsIiVPTSI6IiVNIiwiJU9TIjoiJVMiLCIlT3UiOiIldSIsIiVPVSI6IiVVIiwiJU9WIjoiJVYiLCIlT3ciOiIldyIsIiVPVyI6IiVXIiwiJU95IjoiJXkifTtmb3IodmFyIGdvIGluIFJyKWxyPWxyLnJlcGxhY2UobmV3IFJlZ0V4cChnbywiZyIpLFJyW2dv'@;
put 'XSk7dmFyIE1vPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxmbz1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIs'@;
put 'Ik9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl07ZnVuY3Rpb24gSm8oQWksam8scWMpe2Zvcih2YXIgTGw9Im51bWJlciI9PXR5cGVvZiBBaT9BaS50b1N0cmluZygpOkFpfHwiIjtMbC5sZW5ndGg8am87KUxsPXFjWzBdK0xsO3JldHVybiBMbH1mdW5jdGlvbiBZaShBaSxqbyl7cmV0'@;
put 'dXJuIEpvKEFpLGpvLCIwIil9ZnVuY3Rpb24gWXMoQWksam8pe2Z1bmN0aW9uIHFjKHRjKXtyZXR1cm4gdGM8MD8tMTp0Yz4wPzE6MH12YXIgTGw7cmV0dXJuIDA9PT0oTGw9cWMoQWkuZ2V0RnVsbFllYXIoKS1qby5nZXRGdWxsWWVhcigpKSkmJjA9PT0oTGw9cWMoQWkuZ2V0TW9udGgoKS1q'@;
put 'by5nZXRNb250aCgpKSkmJihMbD1xYyhBaS5nZXREYXRlKCktam8uZ2V0RGF0ZSgpKSksTGx9ZnVuY3Rpb24gSWwoQWkpe3N3aXRjaChBaS5nZXREYXkoKSl7Y2FzZSAwOnJldHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigpLTEsMTEsMjkpO2Nhc2UgMTpyZXR1cm4gQWk7Y2FzZSAyOnJl'@;
put 'dHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigpLDAsMyk7Y2FzZSAzOnJldHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigpLDAsMik7Y2FzZSA0OnJldHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigp'@;
put 'LTEsMTEsMzEpO2Nhc2UgNjpyZXR1cm4gbmV3IERhdGUoQWkuZ2V0RnVsbFllYXIoKS0xLDExLDMwKX19ZnVuY3Rpb24gTWwoQWkpe3ZhciBqbz1mdW5jdGlvbihMcnQsVlQpe2Zvcih2YXIgRTE9bmV3IERhdGUoTHJ0LmdldFRpbWUoKSk7VlQ+MDspe3ZhciBScnQ9RGwoRTEuZ2V0RnVsbFll'@;
put 'YXIoKSksYVo9RTEuZ2V0TW9udGgoKSxTbGU9KFJydD94Mjp1NClbYVpdO2lmKCEoVlQ+U2xlLUUxLmdldERhdGUoKSkpcmV0dXJuIEUxLnNldERhdGUoRTEuZ2V0RGF0ZSgpK1ZUKSxFMTtWVC09U2xlLUUxLmdldERhdGUoKSsxLEUxLnNldERhdGUoMSksYVo8MTE/RTEuc2V0TW9udGgoYVor'@;
put 'MSk6KEUxLnNldE1vbnRoKDApLEUxLnNldEZ1bGxZZWFyKEUxLmdldEZ1bGxZZWFyKCkrMSkpfXJldHVybiBFMX0obmV3IERhdGUoQWkudG1feWVhcisxOTAwLDAsMSksQWkudG1feWRheSkscWM9bmV3IERhdGUoam8uZ2V0RnVsbFllYXIoKSwwLDQpLExsPW5ldyBEYXRlKGpvLmdldEZ1bGxZ'@;
put 'ZWFyKCkrMSwwLDQpLHRjPUlsKHFjKSxJcnQ9SWwoTGwpO3JldHVybiBZcyh0Yyxqbyk8PTA/WXMoSXJ0LGpvKTw9MD9qby5nZXRGdWxsWWVhcigpKzE6am8uZ2V0RnVsbFllYXIoKTpqby5nZXRGdWxsWWVhcigpLTF9dmFyIFF1PXsiJWEiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gTW9bQWkudG1f'@;
put 'd2RheV0uc3Vic3RyaW5nKDAsMyl9LCIlQSI6ZnVuY3Rpb24oQWkpe3JldHVybiBNb1tBaS50bV93ZGF5XX0sIiViIjpmdW5jdGlvbihBaSl7cmV0dXJuIGZvW0FpLnRtX21vbl0uc3Vic3RyaW5nKDAsMyl9LCIlQiI6ZnVuY3Rpb24oQWkpe3JldHVybiBmb1tBaS50bV9tb25dfSwiJUMiOmZ1'@;
put 'bmN0aW9uKEFpKXtyZXR1cm4gWWkoKEFpLnRtX3llYXIrMTkwMCkvMTAwfDAsMil9LCIlZCI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShBaS50bV9tZGF5LDIpfSwiJWUiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gSm8oQWkudG1fbWRheSwyLCIgIil9LCIlZyI6ZnVuY3Rpb24oQWkpe3JldHVybiBN'@;
put 'bChBaSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlRyI6ZnVuY3Rpb24oQWkpe3JldHVybiBNbChBaSl9LCIlSCI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShBaS50bV9ob3VyLDIpfSwiJUkiOmZ1bmN0aW9uKEFpKXt2YXIgam89QWkudG1faG91cjtyZXR1cm4gMD09am8/am89MTI6am8+'@;
put 'MTImJihqby09MTIpLFlpKGpvLDIpfSwiJWoiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWkudG1fbWRheStmdW5jdGlvbihqbyxxYyl7Zm9yKHZhciBMbD0wLHRjPTA7dGM8PXFjO0xsKz1qb1t0YysrXSk7cmV0dXJuIExsfShEbChBaS50bV95ZWFyKzE5MDApP3gyOnU0LEFpLnRtX21vbi0x'@;
put 'KSwzKX0sIiVtIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKEFpLnRtX21vbisxLDIpfSwiJU0iOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWkudG1fbWluLDIpfSwiJW4iOmZ1bmN0aW9uKCl7cmV0dXJuIlxuIn0sIiVwIjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX2hvdXI+PTAmJkFpLnRt'@;
put 'X2hvdXI8MTI/IkFNIjoiUE0ifSwiJVMiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWkudG1fc2VjLDIpfSwiJXQiOmZ1bmN0aW9uKCl7cmV0dXJuIlx0In0sIiV1IjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX3dkYXl8fDd9LCIlVSI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShNYXRoLmZs'@;
put 'b29yKChBaS50bV95ZGF5KzctQWkudG1fd2RheSkvNyksMil9LCIlViI6ZnVuY3Rpb24oQWkpe3ZhciBqbz1NYXRoLmZsb29yKChBaS50bV95ZGF5KzctKEFpLnRtX3dkYXkrNiklNykvNyk7aWYoKEFpLnRtX3dkYXkrMzcxLUFpLnRtX3lkYXktMiklNzw9MiYmam8rKyxqbyl7aWYoNTM9PWpv'@;
put 'KXt2YXIgcWM9KEFpLnRtX3dkYXkrMzcxLUFpLnRtX3lkYXkpJTc7ND09cWN8fDM9PXFjJiZEbChBaS50bV95ZWFyKXx8KGpvPTEpfX1lbHNle2pvPTUyO3ZhciBMbD0oQWkudG1fd2RheSs3LUFpLnRtX3lkYXktMSklNzsoND09TGx8fDU9PUxsJiZEbChBaS50bV95ZWFyJTQwMC0xKSkmJmpv'@;
put 'Kyt9cmV0dXJuIFlpKGpvLDIpfSwiJXciOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1fd2RheX0sIiVXIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKE1hdGguZmxvb3IoKEFpLnRtX3lkYXkrNy0oQWkudG1fd2RheSs2KSU3KS83KSwyKX0sIiV5IjpmdW5jdGlvbihBaSl7cmV0dXJuKEFpLnRt'@;
put 'X3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMil9LCIlWSI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV95ZWFyKzE5MDB9LCIleiI6ZnVuY3Rpb24oQWkpe3ZhciBqbz1BaS50bV9nbXRvZmY7cmV0dXJuKGpvPj0wPyIrIjoiLSIpKygiMDAwMCIrKGpvPShqbz1NYXRoLmFicyhq'@;
put 'bykvNjApLzYwKjEwMCtqbyU2MCkpLnNsaWNlKC00KX0sIiVaIjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX3pvbmV9LCIlJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fTtmb3IodmFyIGdvIGluIGxyPWxyLnJlcGxhY2UoLyUlL2csIlwwXDAiKSxRdSlsci5pbmNsdWRlcyhnbykmJihscj1s'@;
put 'ci5yZXBsYWNlKG5ldyBSZWdFeHAoZ28sImciKSxRdVtnb10oc3IpKSk7dmFyIGNsPUdvKGxyPWxyLnJlcGxhY2UoL1wwXDAvZywiJSIpLCExKTtyZXR1cm4gY2wubGVuZ3RoPmd0PzA6KGV0LnNldChjbCxzdCksY2wubGVuZ3RoLTEpfShzdCxndCxSdCx0bil9fTsoZnVuY3Rpb24oKXt2YXIg'@;
put 'c3Q9e2E6SnV9O2Z1bmN0aW9uIGd0KHduLHNyKXtkLmFzbT13bi5leHBvcnRzLGxpKChwZT1kLmFzbS56KS5idWZmZXIpLFFuLnVuc2hpZnQoZC5hc20uQSksY24oKX1mdW5jdGlvbiBSdCh3bil7Z3Qod24uaW5zdGFuY2UpfWZ1bmN0aW9uIHRuKHduKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZl'@;
put 'KCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBQcihzdCl7dHJ5e2lmKHN0PT1tciYmaClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaCk7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKGd0KXtFbihndCl9fShtcil9KS50'@;
put 'aGVuKGZ1bmN0aW9uKHNyKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoc3Isc3QpfSkudGhlbihmdW5jdGlvbihzcil7cmV0dXJuIHNyfSkudGhlbih3bixmdW5jdGlvbihzcil7aWUoImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrc3IpLEVuKHNyKX0p'@;
put 'fWlmKE90KCksZC5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBkLmluc3RhbnRpYXRlV2FzbShzdCxndCl9Y2F0Y2god24pe2llKCJNb2R1bGUuaW5zdGFudGlhdGVXYXNtIGNhbGxiYWNrIGZhaWxlZCB3aXRoIGVycm9yOiAiK3duKSxhKHduKX0oaHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdl'@;
put 'YkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHxPbihtcil8fGZ1bmN0aW9uIEpuKHN0KXtyZXR1cm4gc3Quc3RhcnRzV2l0aCgiZmlsZTovLyIpfShtcil8fCJmdW5jdGlvbiIhPXR5cGVvZiBmZXRjaD90bihSdCk6ZmV0Y2gobXIse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50'@;
put 'aGVuKGZ1bmN0aW9uKHduKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcod24sc3QpLnRoZW4oUnQsZnVuY3Rpb24oc3Ipe3JldHVybiBpZSgid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrc3IpLGllKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIg'@;
put 'aW5zdGFudGlhdGlvbiIpLHRuKFJ0KX0pfSkpLmNhdGNoKGEpfSkoKSxkLl9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybihkLl9fX3dhc21fY2FsbF9jdG9ycz1kLmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBNMT1kLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0'@;
put 'cl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE0xPWQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9ZC5hc20uQikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNdT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2aXpfMj1mdW5jdGlvbigpe3Jl'@;
put 'dHVybihNdT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2aXpfMj1kLmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGF1PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9ZnVuY3Rpb24oKXtyZXR1cm4oYXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBo'@;
put 'dml6X3ZlcnNpb25fMD1kLmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHgxPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0RXJyb3JfMD1mdW5jdGlvbigpe3JldHVybih4MT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9ZC5hc20uRSkuYXBwbHko'@;
put 'bnVsbCxhcmd1bWVudHMpfSxFMj1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKEUyPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9ZC5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkNz1kLl9lbXNj'@;
put 'cmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdFJlc3VsdF8wPWZ1bmN0aW9uKCl7cmV0dXJuKCQ3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0UmVzdWx0XzA9ZC5hc20uRykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxkND1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGF5b3V0'@;
put 'XzM9ZnVuY3Rpb24oKXtyZXR1cm4oZDQ9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPWQuYXNtLkgpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sU3c9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oU3c9ZC5fZW1z'@;
put 'Y3JpcHRlbl9iaW5kX0dyYXBodml6X19fZGVzdHJveV9fXzA9ZC5hc20uSSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtkLl9mcmVlPWZ1bmN0aW9uKCl7cmV0dXJuKGQuX2ZyZWU9ZC5hc20uSykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxkLl9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oZC5f'@;
put 'bWFsbG9jPWQuYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIGVtLE13PWQuX19fZXJybm9fbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4oTXc9ZC5fX19lcnJub19sb2NhdGlvbj1kLmFzbS5NKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHh3PWQuX2Vtc2NyaXB0ZW5fYnVpbHRp'@;
put 'bl9tZW1hbGlnbj1mdW5jdGlvbigpe3JldHVybih4dz1kLl9lbXNjcmlwdGVuX2J1aWx0aW5fbWVtYWxpZ249ZC5hc20uTikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0bT1kLl9fX2N4YV9pc19wb2ludGVyX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4odG09ZC5fX19jeGFfaXNfcG9pbnRlcl90'@;
put 'eXBlPWQuYXNtLk8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX07ZnVuY3Rpb24gRXcoc3Qpe2Z1bmN0aW9uIGd0KCl7ZW18fChlbT0hMCxkLmNhbGxlZFJ1bj0hMCxFZXx8KGQubm9GU0luaXR8fEF0LmluaXQuaW5pdGlhbGl6ZWR8fEF0LmluaXQoKSxBdC5pZ25vcmVQZXJtaXNzaW9ucz0hMSxZ'@;
put 'cihRbiksbChkKSxkLm9uUnVudGltZUluaXRpYWxpemVkJiZkLm9uUnVudGltZUluaXRpYWxpemVkKCksZnVuY3Rpb24oKXtpZihkLnBvc3RSdW4pZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnBvc3RSdW4mJihkLnBvc3RSdW49W2QucG9zdFJ1bl0pO2QucG9zdFJ1bi5sZW5ndGg7KVJ0PWQu'@;
put 'cG9zdFJ1bi5zaGlmdCgpLE1yLnVuc2hpZnQoUnQpO3ZhciBSdDtZcihNcil9KCkpKX1fcj4wfHwoZnVuY3Rpb24oKXtpZihkLnByZVJ1bilmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucHJlUnVuJiYoZC5wcmVSdW49W2QucHJlUnVuXSk7ZC5wcmVSdW4ubGVuZ3RoOylSdD1kLnByZVJ1bi5z'@;
put 'aGlmdCgpLEZyLnVuc2hpZnQoUnQpO3ZhciBSdDtZcihGcil9KCksX3I+MHx8KGQuc2V0U3RhdHVzPyhkLnNldFN0YXR1cygiUnVubmluZy4uLiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5zZXRTdGF0dXMoIiIpfSwxKSxndCgpfSwxKSk6Z3QoKSkp'@;
put 'fWlmKGQuX19fc3RhcnRfZW1fanM9MTc1ODI4LGQuX19fc3RvcF9lbV9qcz0xNzU5MjYsdnQ9ZnVuY3Rpb24gc3QoKXtlbXx8RXcoKSxlbXx8KHZ0PXN0KX0sZC5wcmVJbml0KWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wcmVJbml0JiYoZC5wcmVJbml0PVtkLnByZUluaXRdKTtkLnByZUlu'@;
put 'aXQubGVuZ3RoPjA7KWQucHJlSW5pdC5wb3AoKSgpO2Z1bmN0aW9uIE1kKCl7fWZ1bmN0aW9uIE5UKHN0KXtyZXR1cm4oc3R8fE1kKS5fX2NhY2hlX199ZnVuY3Rpb24gc1ooc3QsZ3Qpe3ZhciBSdD1OVChndCksdG49UnRbc3RdO3JldHVybiB0bnx8KCh0bj1PYmplY3QuY3JlYXRlKChndHx8'@;
put 'TWQpLnByb3RvdHlwZSkpLnB0cj1zdCxSdFtzdF09dG4pfUV3KCksKE1kLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPU1kLE1kLnByb3RvdHlwZS5fX2NsYXNzX189TWQsTWQuX19jYWNoZV9fPXt9LGQuV3JhcHBlck9iamVjdD1NZCxkLmdldENh'@;
put 'Y2hlPU5ULGQud3JhcFBvaW50ZXI9c1osZC5jYXN0T2JqZWN0PWZ1bmN0aW9uKHN0LGd0KXtyZXR1cm4gc1ooc3QucHRyLGd0KX0sZC5OVUxMPXNaKDApLGQuZGVzdHJveT1mdW5jdGlvbihzdCl7aWYoIXN0Ll9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3QgZGVzdHJveSBvYmplY3Qu'@;
put 'IChEaWQgeW91IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjtzdC5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBOVChzdC5fX2NsYXNzX18pW3N0LnB0cl19LGQuY29tcGFyZT1mdW5jdGlvbihzdCxndCl7cmV0dXJuIHN0LnB0cj09PWd0LnB0cn0sZC5nZXRQb2ludGVyPWZ1bmN0aW9uKHN0KXtyZXR1cm4g'@;
put 'c3QucHRyfSxkLmdldENsYXNzPWZ1bmN0aW9uKHN0KXtyZXR1cm4gc3QuX19jbGFzc19ffTt2YXIgT2E9e2J1ZmZlcjowLHNpemU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlOmZ1bmN0aW9uKCl7aWYoT2EubmVlZGVkKXtmb3IodmFyIHN0PTA7c3Q8T2EudGVtcHMubGVuZ3Ro'@;
put 'O3N0KyspZC5fZnJlZShPYS50ZW1wc1tzdF0pO09hLnRlbXBzLmxlbmd0aD0wLGQuX2ZyZWUoT2EuYnVmZmVyKSxPYS5idWZmZXI9MCxPYS5zaXplKz1PYS5uZWVkZWQsT2EubmVlZGVkPTB9T2EuYnVmZmVyfHwoT2Euc2l6ZSs9MTI4LE9hLmJ1ZmZlcj1kLl9tYWxsb2MoT2Euc2l6ZSksWmUo'@;
put 'T2EuYnVmZmVyKSksT2EucG9zPTB9LGFsbG9jOmZ1bmN0aW9uKHN0LGd0KXtaZShPYS5idWZmZXIpO3ZhciBSdCx3bj1zdC5sZW5ndGgqZ3QuQllURVNfUEVSX0VMRU1FTlQ7cmV0dXJuIE9hLnBvcysod249d24rNyYtOCk+PU9hLnNpemU/KFplKHduPjApLE9hLm5lZWRlZCs9d24sUnQ9ZC5f'@;
put 'bWFsbG9jKHduKSxPYS50ZW1wcy5wdXNoKFJ0KSk6KFJ0PU9hLmJ1ZmZlcitPYS5wb3MsT2EucG9zKz13biksUnR9LGNvcHk6ZnVuY3Rpb24oc3QsZ3QsUnQpe3N3aXRjaChSdD4+Pj0wLGd0LkJZVEVTX1BFUl9FTEVNRU5UKXtjYXNlIDI6UnQ+Pj49MTticmVhaztjYXNlIDQ6UnQ+Pj49Mjti'@;
put 'cmVhaztjYXNlIDg6UnQ+Pj49M31mb3IodmFyIHRuPTA7dG48c3QubGVuZ3RoO3RuKyspZ3RbUnQrdG5dPXN0W3RuXX19O2Z1bmN0aW9uIGt3KHN0KXtpZigic3RyaW5nIj09dHlwZW9mIHN0KXt2YXIgZ3Q9R28oc3QpLFJ0PU9hLmFsbG9jKGd0LGV0KTtyZXR1cm4gT2EuY29weShndCxldCxS'@;
put 'dCksUnR9cmV0dXJuIHN0fWZ1bmN0aW9uIG8zKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFZvaWRQdHIsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gdmMoc3QsZ3Qpe3N0JiYib2JqZWN0Ij09dHlwZW9mIHN0JiYoc3Q9c3QucHRyKSxndCYmIm9iamVjdCI9PXR5cGVvZiBn'@;
put 'dCYmKGd0PWd0LnB0ciksdGhpcy5wdHI9TXUoc3QsZ3QpLE5UKHZjKVt0aGlzLnB0cl09dGhpc31yZXR1cm4obzMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTWQucHJvdG90eXBlKSkuY29uc3RydWN0b3I9bzMsbzMucHJvdG90eXBlLl9fY2xhc3NfXz1vMyxvMy5fX2NhY2hlX189e30sZC5W'@;
put 'b2lkUHRyPW8zLG8zLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1vMy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtNMSh0aGlzLnB0cil9LCh2Yy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShNZC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj12Yyx2Yy5wcm90b3R5cGUuX19jbGFzc19f'@;
put 'PXZjLHZjLl9fY2FjaGVfXz17fSxkLkdyYXBodml6PXZjLHZjLnByb3RvdHlwZS52ZXJzaW9uPXZjLnByb3RvdHlwZS52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNyKGF1KHRoaXMucHRyKSl9LHZjLnByb3RvdHlwZS5sYXN0RXJyb3I9dmMucHJvdG90eXBlLmxhc3RFcnJvcj1mdW5jdGlv'@;
put 'bigpe3JldHVybiBjcih4MSh0aGlzLnB0cikpfSx2Yy5wcm90b3R5cGUuY3JlYXRlRmlsZT12Yy5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihzdCxndCl7dmFyIFJ0PXRoaXMucHRyO09hLnByZXBhcmUoKSxzdD1zdCYmIm9iamVjdCI9PXR5cGVvZiBzdD9zdC5wdHI6a3coc3QpLGd0'@;
put 'PWd0JiYib2JqZWN0Ij09dHlwZW9mIGd0P2d0LnB0cjprdyhndCksRTIoUnQsc3QsZ3QpfSx2Yy5wcm90b3R5cGUubGFzdFJlc3VsdD12Yy5wcm90b3R5cGUubGFzdFJlc3VsdD1mdW5jdGlvbigpe3JldHVybiBjcigkNyh0aGlzLnB0cikpfSx2Yy5wcm90b3R5cGUubGF5b3V0PXZjLnByb3Rv'@;
put 'dHlwZS5sYXlvdXQ9ZnVuY3Rpb24oc3QsZ3QsUnQpe3ZhciB0bj10aGlzLnB0cjtyZXR1cm4gT2EucHJlcGFyZSgpLHN0PXN0JiYib2JqZWN0Ij09dHlwZW9mIHN0P3N0LnB0cjprdyhzdCksZ3Q9Z3QmJiJvYmplY3QiPT10eXBlb2YgZ3Q/Z3QucHRyOmt3KGd0KSxSdD1SdCYmIm9iamVjdCI9'@;
put 'PXR5cGVvZiBSdD9SdC5wdHI6a3coUnQpLGNyKGQ0KHRuLHN0LGd0LFJ0KSl9LHZjLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz12Yy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtTdyh0aGlzLnB0cil9LGMucmVhZHl9KTtsZXQgQ3csWFU7ZnVuY3Rpb24gUEplKGMpe3JldHVybntw'@;
put 'YXRoOmMucGF0aCxkYXRhOmA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzEx'@;
put 'LmR0ZCI+XG48c3ZnIHdpZHRoPSIke2Mud2lkdGh9IiBoZWlnaHQ9IiR7Yy5oZWlnaHR9Ij48L3N2Zz5gfX1jbGFzcyBEVHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9tb2R1bGU9bH1zdGF0aWMgbG9hZCgpe3JldHVybihYVXx8KFhVPWZ1bmN0aW9uIFJKZShjKXtyZXR1cm4gZnVuY3Rpb24gTEpl'@;
put 'KGMsbCl7Zm9yKHZhciBhPTAsZD1bXSxoPSshbCxmPTA7Yy5sZW5ndGg7KXt2YXIgXz1NSmUoYyxofHxsKTtpZigib2JqZWN0Ij09dHlwZW9mIF8pe2ZvcihoPyhsPW51bGwsXy53Lmxlbmd0aD09Xy51JiYoZC5wdXNoKGw9Xy53KSxmKz1fLnUpKTooZC5wdXNoKGwpLF8uZT0wKTshXy5sOyl7'@;
put 'dmFyIFQ9SUplKGMsXyxsKTtUfHxtYyg1KSxsP18uZT1fLnk6KGQucHVzaChUKSxmKz1ULmxlbmd0aCxDSmUoXy53LDAsVC5sZW5ndGgpLF8udy5zZXQoVCxfLncubGVuZ3RoLVQubGVuZ3RoKSl9YT1fLmIrNCpfLmN9ZWxzZSBhPV87Yz1jLnN1YmFycmF5KGEpfXJldHVybiBmdW5jdGlvbihX'@;
put 'LGllKXtpZigxPT1XLmxlbmd0aClyZXR1cm4gV1swXTtmb3IodmFyIHBlPW5ldyBRbChpZSksd2U9MCxFZT0wO3dlPFcubGVuZ3RoOysrd2Upe3ZhciBaZT1XW3dlXTtwZS5zZXQoWmUsRWUpLEVlKz1aZS5sZW5ndGh9cmV0dXJuIHBlfShkLGYpfShmdW5jdGlvbihhKXtjb25zdCBkPWEubGVu'@;
put 'Z3RoLGg9W107bGV0IGY9MCxfPTAsVD0tMTtmb3IobGV0IFc9MDtXPGQ7VysrKXtjb25zdCBpZT0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihhW1ddKTtp'@;
put 'ZigtMSE9PWllKWlmKFQ8MClUPWllO2Vsc2V7VCs9OTEqaWUsZnw9VDw8XyxfKz0oODE5MSZUKT44OD8xMzoxNDtkb3toLnB1c2goMjU1JmYpLGY+Pj04LF8tPTh9d2hpbGUoXz43KTtUPS0xfX1yZXR1cm4gVD4tMSYmaC5wdXNoKDI1NSYoZnxUPDxfKSksbmV3IFVpbnQ4QXJyYXkoaCl9KGMp'@;
put 'KX0oJ3Y3I2FTWGo6XUNbOTA+eUttYTpLYDJodHo4ey9bLiVZK05BRT5pclUvP19KaF5NaX1WIn5meXpTISgxeTYlU11icWhGaHc+fn5ydUBeUGFjN35ONG45QmtPamNaPUY4TiR3QiJzXWluXSVUR149SkQ0TGJnTixXKzZgVTcqKXBqJDIuR108cDB9QDZ3MVg8aXsuZzw3MnZ1XTIrVS9Eey9j'@;
put 'fnZDc3Q9emNRcm9wXjdJNmI5ZE16fFtrWiFzIkFHeVRFJXkzPDREW0A/Znx8JFNiZnUmS25VWFA5IUZnNT1gWispQUpjWjwreGgvYjxMRHdbWHJkTCFZWih+YzJDZnh6cUclX3grS3o/RkRePThFZXpHd2g/XWw4OEtzQ1MmOlYoLzJudyooYV1VO1p5d2UjVVJ8VHU5NSxCb18iZVdxQ0FRYiRe'@;
put 'TUNUNiQqYmQ1Z1ZndVhPXThSaXVlQGllIWw8RmFrOyFbLHBqRmN9OGd7e2hZLFtMNHExK3lOQ2UoaWQwKVJ0VkQhW0Q+QnxYVykyUz8wckg9RnhVQVdKd2lFInp1WmYwKVJCfjJLYmU/UktGQmUzeDs3TFJPfWY7NTlncS9ZVylIUGdWYXRrb0NnUllCXXF5QlA0NH5vP21DQEJaciVNTFlUOD51'@;
put 'Q1FgUXklbT1OODNKeFcyVFhAIl1haF50cyFNZjUvPDliRU1Ba1lyLCNAP3hIW2FNOSptTTxNTyojXkdnbWB2V1d5dEQzdDxReVJ1eHxJZVcpOldNdF93b204dkdQUFJUY3ptR3YmezN2bHt6V219PVhvPUk5Tz1Vaj9se21+PFVtLlJHXlFnZUxXPDlGRkZtOlVVKWt0WEtLIWVGWUlnXStWVXNz'@;
put 'IllIVFZncDhzLGRLbjhyeTglbzhieTglUWh0ZzNsTHg3OEpYT0lQc303dF5+XnR2IXt6YEA3Y3tdUC9ufnZUVEI2ZWs4cEkjJk0qZFIjbTNOVFVkZT0qITJsLlI1S1dmSDEyVkZMYiRheTpqRElwPGdvYjxLQGBXZnRkdDtbLnI1N0gxRnM1NzslOUxvZXdDJEcvUCVOXkhsdnV0OXI4TSI0fEB1'@;
put 'amtVdDZCLF56Ii80az9sJmdWS2AjQXhgWmg4dk5Hb0x4W2FjdTQmOkVXVTkuSnhJVEEqZ0M/YzgySktqRExoWEZVMUNVVyoydjNsQWFmOSZrT31zIT5MfTEhRX5yK1pfZ101T1BpL0l4QEY7ZWM8VFoscn4iZH40SWJNPDssNVFpPXpRQmxzLzUmZV4oY1tVO21VZVA0Z0lSSnEmcHlUb0JUZyQy'@;
put 'cXB+dipGZUZvcmdaKzR2TE9vcG90TStsM2lrKCUqRER5a0szMC9hK1pbLnxrIy9mTDgwUy5eQVpUIThlMXUuWGV9VyM2ZnImUU91LEJ4YkAoeW8qMylAZ2BfKyUvP2lQelJGXiN4WWJWTHtASDxIKUxERTJXKi47TTF0RSFqbmMuS0BlX0YuS1peUChpb2dJITZUPlJ+N34zVn1MMHxCSD4jTGlK'@;
put 'Y2FRTmoqWThVYl40b3FwXSY/c187ayo+Ti8zeG1WaHA4fEMxc1pPb1o4VW84d3A5bHg/SiQsIW0+QiQvKUI5NEpIMzAvYmYucHI8PG5bWz92cmJaczYrSiVgT2pSTUd2eWZAOixJZVFyWUh5SDNGQTJdRi9MS3V9Qy9JUWMlRiJJaStBa0FTZVBpO1p7WWhUK3ttWn08LFB8WTRsPkEyZF8sJlNf'@;
put 'dDlsPzJDUSNZcGNTZU1BUEE4SGhaMTteYWc/UklOJktYSmpJeEhQZG13WUtwdSgvfWJaXywmeF1Kais5fSZ7REF1SHI4RWJFeDprPUE4JWEhZiJiNj40Ol9+NWRlYEV0X3tLeX1JSnxJPFhwW30hOSg5YTdiX0JnfiZ7PGI2cmtQPGxKaXgjTSx4VEdaPiYxdS9qXTB3MGs1QmJ2WUlOSmlfTyFC'@;
put 'O3gpKFo5NzsqO3M+fGs+MTNXW2QmOTIuOXhyVCszJCR2KnJGOEFlYEBCO005aF1QRmkrLjhTRlVnWGlUJFZRa3BOIUY8Qi5MUm15PEB9cC5DTyM1VkYsZzNHUzp7dzp1LGpwViREUSxdZCEjXXlzPGk3Z0wzdTFvYlJpYyNhW11gJXUwLktAaGVCODImQ2UjXSs7VTdGI3B7cSQ7JTZ+XWBzMnd8'@;
put 'ajdHcEVWOT1TeHFeRnpFOXZWeGpGcmAzWWdYfHFmcEVnOipyNDVwWyUuQihsV3RzT21la3EvZXhCVitiRCpPfE4pSTIrWU9ESClMeVF1bFN5MmxwQFY+VSZ6ZjhsaXwmIW8uUyZ9MC9xdzU7bjlVeU45Xz1AUyN4Iy9JLzVxcTVUbTdkb2g0MFBheTVGP3VKRzpKVFFyeEpmWD93dEQjTiFZSEx7'@;
put 'UkpwPkczaHhKaTVAdFdYX1J4O30sKkUjLzEwaU1DbzNdM04lcm9QMGJ4QldyeyhANz9dYDkvWTlsbXp6YHszRzlncHc6OU1FWyxYKll0eGtwT11xJFY7P3p6YGtKeVVHMkNePF8yVlosXTwxXyFgekNwOzc0LE4qIlVybCJHVDJmNTo3RUVmZHslbCY7MDNTSHl2KVtnI3ptRzcmTktbQTdnWnxp'@;
put 'OmZTdEJxRE8pTVcuTXpaYyJsOS42IWJTQU9IKllVXUZTS3tZJFVEIzR+OklBSF0yazVJbEQ1TXF3Q1RZITkrbFg9c3wzUy9XQm1+eDwhbE1KTnw5VlJfWS82W28oOGBLa3Y/a2VGaT0lLjdwVCN4MkhUSHZmYD01OkddKkBbZy5PNkB0IkBlPDlKZ0huLnpCdHhtTWxTQjt6eSEpXmBzbnNfYXt6'@;
put 'UF8qKypAKXE5KkhgVzdMa1Z9NzVQbmZCW3omP0NeS2tSci5iKGIlUERBOFYrQUkuNjojIURANjh9X0ZqayZwaFdzVEkyQ15YYDc7PUV5OSlgfE5RW3IkVGZGVypUbG9CPUleNl1La0wkKD4yIz4kITlfeUMmPyZMfipnJiVofXZ4ezgySXJlOzclQypiOCVuZHdlc1RFOFJVTTVRIzJQcDclL0Bl'@;
put 'TWROdzUpbDdIcHk5SHAoNmE8fD00U2BZKlJgMSh0YiVtJl9qZiRYXmBGK2JzVCRPNj1+bXIoVTc8YXVDaS9uS0BlaWJDU29FQlc8aVo+VyNSfEtzeTs5aTtwRE9dXUpUOyZ2KTZkWl9BMGQ+eDJKOFg4XzFWLmcwTThWIyhSRTNNMzAvVF9LT34jJmBdYCkkNGx4Pys4K0lVQ0xLM31qVnZAeTVU'@;
put 'MVZPLF1xbGx4X3J+ck8kLnRMcnc1NmJwcENKOkwsJUptPGpwMiJARipNeWJoOU0pbTFCdGNPRG5ZVD0mOlFZVlpiSDVJQEpYbGNhcjNHSEJKd0NkP1NiVXMvKXkqOU0mSFZlVSZST2VdajJjMm8wRnpDZm0rQWtBU1hvZDkvR0l7Yz1GSVk3Yl5IfU5neXghKVR5Sm9SQ3guZFRLY3ZUaGQudGtz'@;
put 'WVYyIzlYX0NgNl4sPGN4MXE7cG98eyZUWWlvU09NeVkibjs9RkdMPTtxRGVSd0NdN1VuVzFZJnBHM0ZHck9MSFZdMDRNVyM1TUtfZDhsKGNGLjleJEZfL3MjMntwIzpjS3ZpRjJfIkBwUj98TG8vMjVZa0c8O3czbTtGKk98OmZlcX52aGhhemEsNjRJcSFtL31GSWZNO1hlKF89eSZnRjkkIzoj'@;
put 'MiNtM09dUUtfKnBEVjZeJE57QElxK3E7NSQvZyp6Jiw2c2NEWShrV1loXyRILkpybFkxPkxiPmV+VTtNT3tVMzxNSERKYXJVVEs+c3dAMjU/Ni5BXjspJm54b2FqVjZRaDxTOGxgTFlxejJUI3lEe316PCJlWzVzYzhvU2srVDhgZ099I15xfCRraGJzdFkiKUZTTD1nZHRZcltCMm12VXMibVZ5'@;
put 'a0lvUiRWeEt5c2JvWz81TV0xIkRWZXo4V1tSbXkzNEhFfEw0cy9+fUA6PXFrTjVFaGlWXWd2JDxLI1s7ITBTbGsobjxHcTRmai48ZFVEWCVnJjIzK2o1emd9NnA5JUhKayNULmo8Siw9fGliPDVhO3ckSm4lTntAdXlwK3Z8aEtpfT8sUikhQzgzYCx2PjddbT0seXMzUWxxNFcrNT1YPS8xKC5K'@;
put 'ZmA2MXJIVDs2MWopTCkocmJ3REhnMW09LjkuKn5IOUNrdEBPPmE+XTZlazJhQjUxenk7M2NYJUY0RG4jYE5IZEFuZXFMdnlbVy42dUQ3LyY6OXFQdnRKOSYiWXlmR3VGVntTeTF6fWRFW1M5c1s6W25POHN0eDV1aDc4OTcoQnM1L1g7Lzl5JDk0JnlvJDJ3PmIpISJGJTNdJWRmP15LQVB7WFd9'@;
put 'SixYL0pUTmcwVSo5NSFJXj1gU1pbSGoyYSV0aXcoNEJyI2h8Wj4kcDhsOENnN3NxNXZ4Tzg4RnI8PGZxOENjfE8+RFcxL0VPaz49LzVyUWtLW3RLcX0kYDUwI11Ua1Y8fkJNYFZ9dz4kTFZrd1pWWlRmPXt0Sz48JGdQMmAsWXJ7QHd1VFR0TFJEL117KDRad0N4Oi9HJnd6SyJVRnsvKW9gcG5G'@;
put 'RG9eaDlXT1Q0QW8qOllTQHA/I2lKajwoTnFDVjtkTiVNMjtSeEtvYXZpPXhnQnpTNEoxcVoicEhdJjs6TTVlS1ElZ2NmKjkqUz5kT0kmKncjYzovR1QyT31VMEc5b1lwaG1CMUQscnx3ay9OK0ppUC4rP0YhcGVsRDFbR2omWHY5OW5nLjIjNWU6YjJGJHt7VT4xU2pYVmlKWyJyclRUfT1vYHFa'@;
put 'USNgaD89Mm5SQzQ5OT5yfV9AOHMpNixETlZJckhzKCNZcn40Q247cT0kTkE/dVpiS2BJeT1CO2xvK099Jjp2dDpPfW9wOVgoWyZjKSpTOyhdanN2e0tXfU8+YipeLDU9T3w1YDZ5YFdsdD82LDIwfWJJTzVJOWU6N0lWLCtpZC9+fERPKU1QWyZWIU0yckBVKWJydGpiSyE0L0JMOT9QOnNjZkBE'@;
put 'Tz9MNSM2S0F4K2VhandCVVl2eyt2Il1WK0BIWzxSdD8uLEZJcTxMWTd2eFZwV1kodSU3d0ZBbShGWSlFRzZGOkdvNHYya01DbTtGTW1zQ0NtOHlhYnZvfX5vb1UxTSFfUDptPjFQazptdCtGMSQ3U01TLkA2UFZMOHxDcDBfMisvWShZKjljL0VQK189L3xNOS97SzhDNUkyQHx3ViQ2YSsrKkp7'@;
put 'eyhZKnsockBxezMoUGc1Wn55e0tSRHIzVVcxJF9VX25oYSVeL2YmN0NCInk5K3xNa2QoWk0zWmYkOSVXNT1rZXV0NHMqV2VdTmlnTUA7Ymg1VUdIMlNTYGh4cElhb2wmTDQhKSgjaiIzPD1VZWgmMzs/Z1glSTF5cVZuIyE/N0lKVClqaExCTGBBYyk7di9ScSwseVk+ZDdtcC5JQUhbeC5bMUYo'@;
put 'JipiSiNfeCZVN0lASmxJclpRM3k9JDl7N0k5Y0duMDl3IlZzOzc6NjAkNzAzJDoofjNpO15gfX0meTJjX2N9Wl5YQnp9OylfYjpFRj5WKiZrVCNeSn1AVFtGN309fCwlVTp7WlJfL1FKIjxNVXZtbihpez18KntxbEgsfFZLVn1iIkdBPTwrQTVoPy9DJEJyc2w9S1ExeH56Ul9PIz5OPDxpRm5E'@;
put 'fThQQUt+Vy9vZ118RmNrRmx7S3lOaTt6Ry4uKjpfVCs1TlJ8S1E8aW19Zy48ZV8rUD52eV9pclVZKlQmeXNlbmYqTFE+YktlLEkifGZsdWw+bnZdZCFDODMxdEhEOGpwdltzd2dhR1o8TEFmfnhvWT43bk9FN01EOHBWUCtjSWZuZW13QzNdLn5yTSZDRisjckBDZWhHOS5CS0ZAa0Y2Tmo8LzN0'@;
put 'KzJAQ2EwaGcsQV1gOlUwdmxRYGVVNSY9eVBldz18UHFeSm52Kk9gaStMRXFqMX1mO2c6UEMhcn5AMiZAUERJUTAjZHZjbTghOXVEWFs2cH1iLklET252aFdrOHsqMzVaYkoobDdnPmpqbHJKOVNeKi44aEc/R3IjMnNUdyxyaCMmNGp4bj9seWA2P2cubSFOX3ZrZTppXzFwOlVDOWRRR3k5K09S'@;
put 'bERpX1Y8R3FXK35hNzZnMFhyQ11LcGhKVl1xTFU+Kip2fDd2b2JlN2EpV1deXUtwejkmdjdJREApQkcqRjdsV3pLXkttIy5dPTs6IzU0Y1EjeDQvc3dgM1c7PXo6O244SjNSXzY/S2dhMztxcyZXLG9jQjk+YkshYmh7PSlzKTZzbUJQb0cyWFR2TEdvK3RJO0NHJWQ1QyloNWN0JVk2IiVZOSIl'@;
put 'WTxpX1F+fClheD81WU8pTmg+K1pkSiw1WUxKaEU+SShDUWYkdzpoVDlZZXVJbEV4SC9aZTVZR29HUipWSGx6V1g7IiVZLClAbyN6UV5mN15oIy8qSS52WWo+eX0oNV88PkZpb3QodSlEVyl2cEg8WGlCQz1SKTAoYWg1JTV+ZVBNZllzVTpTaE1wUm0wVSw9W2h4IXVvO2Y3cVolTHwiWEhFUDZl'@;
put 'IStYeDJ1VjA5L0ZSSUdPbzZZe2lxTyhmZDxmWipXSUNIUmx4VVhIQjJuc0xLQjBQWWs5WmgrLldgRF9QayQhRzJKUW96cWdaOldLRTdLO0tBTEZ6eFhTRUxLL3QvSVpYc00oVFtwbU8mTW1MUkN3Wj1XbUVRTDoiLklxdVBOZlAlajNESm8meU51Kk1vTHdCbE1mRCtEK2s2S2ZHPmhUOWE0N3VP'@;
put 'Qy5GZEhudDBHNkl1SENlQ3FzdWV1eTZmRDQwLypFOE04TSY6TCtLVUBeUWMjZi9UZiJoe3RSUzI6cHVoQnQ3V1MyMF5WPHIrLmNjL0YoRm5qZVNRMGJ4ZnYydThjKUlEeW87OS9xeEUrbW0yKzFJS0ZRaVQ5NlluKTVkMispeSFYIUheL1ZYO2kiT19kZTVWaXZQUTBheF9ZPFU8a3pJRkV1SCE6'@;
put 'YXhIdkEoT0dOUnlJIjRSek5SJklDTVdYVylMbjlkYnhYdjUuT0dMRHF4PlVlT31DMnhddFB6RlIiSUJHZE1OaXdNUTAhWWQpcWFmN3hJIXgpM09HSlJOSDNSZzU/NFtEVzowMCZNeis3TF5CIjBjPGhaYFchRUtOOVJKbyI5OUJJVDg0QCR3UCNMVFo7eDpLZk9LYUpvRmYiaHwidkg/T2VlKjBy'@;
put 'TF1CY2RKKlJqdEwiQm9UayRHZXExLnlFdWtJXiguSWpaRVhpRWhqLHI1ISt5NlhHS1A/SVlTanhMZkN9VDBAd2cjTVIhcnQjSGRVRj1gW2paW0xwQy5UIWlRanpMMnZHS1pbXWEkeWF1bUtHazg4NSFXdGFPUTY5NXx5XUFgYyh6ZVoxIlJKJWQ5eXxCKWZyI2laNCJVUXQlZVo2ImtRej9vNyhN'@;
put 'fnlHQ3VoVTA5eTtCNmQ9NTh5OnUiTyhmZVp1IlBQaGxlWnciY0l9b2laeSI4STxNOXlgQnRVUEQreU1DPVU5WmJqX0w3Q0xiYGsreWZCL3JlR3dMLENtIjxjIVddSVREITVpdH5Sc1UjTWp0UU1maiF5YUNHWlBEZ0w1RVo3VTAheTVCezBlRyVXLkdRb2ZaUXU+UyJxZlpTdUtPPE0jeTtCfjdJ'@;
put 'WSN5P0JqOTxjKVdgSGMpZlpVdUVRSiojeUdDJSg8YytXNklBfWZaSUJZam43LHksQiE4PGM6V1NJInEkNXp0flJ9byR5cUM5a21Pa0w5RWQqZ3p6TCVFYSEhNSZMR0Y+PGZ6L1dVS3UmL0l3TC5Ec25QNyl5MENSb19rcytsQlJeUXc+JGtZOE8rcDxjfHlRREJ+QThSUUE/dEhTKmBbUzBRU202'@;
put 'Omd1TzRXJVhVUFl3TE8vdz1mdnpYY09FdiVFNnc0PEk2dUhhR1hqU3Y3TU9gd15WImhDOitGT0VPZSN6MVY0fGtASGFjNV9RMT9EYUVkOklDfkM2MTRaUlRgRGFnNXJMdVN3OEEhfVdDbGAlWXdNYS90TkwrRy83QlhfRm4zMnhWL3ZCKllidmgjW1doR1AoWERSMHhCR2xsNT1QVy81QnZhTnhG'@;
put 'VF9fN2ZzNDREODY8OFgvYEJXSUAhfDdbPis0fUQjJUkuWS9JQ0chSGJaL1NDUW5UUGRTR1hJSkkpMUVhL2NDbWxFOE04MmspWEZLeDtlbSZrVHVNTyVsIzxuLyhCYG9mcmRTPzRCRU4zSGIlaz10M05EI2QjMy8kWXZTa1UjPC9rV3VgVFU4UjIwNEdGP1tJLiZrYnUiVVJ+aiN2Yz1GOkIjWnRj'@;
put 'RXc8dTVkKjU9dmNZIk8jZl9YdHRlZTY6PXZCQldodC8+RkxDYipEbilGVENQZyJDViZBWEJKNm19TEY/QkVfOn00KExgSGdtQXprTEtJKD18TDpXa1F2P1k3RE03Y1NGTjVULFB0LnUzcFtgfVg2dHNVIkN8dk52PFV0Wnx2ZEJ6NmlTflghdFtWQXd8dmpCU3RzY25MXUlSRH40P1d+Um9VIkxA'@;
put 'V1FNWGo/dmJ2RloiQyZGNUVZN00wP3Y1QmAwfkZxTC5HTW9gWFBCOk9qI35YQHRHbXRCQHZsdjBjVnAiWGxYflVTMi83N0EpRGJmfjRJRyREXmRZTH1XUFBAb0B2YEIsISJ5dEwjSihwJDx1OE53Q0M/VVtkWUxyQVhKZV1gWERCRGYqWylGVkUudX1MSkdkRTN4fUxGWHpUOk97WExCZDk6V2VT'@;
put 'TTBbdnJ2aGxXT352Z0NOPHQvRnd4dlFvNjpbdm1DK1sqWytGYEViKn40W0xFS31nRTBbdndDV0l2L2k9fVhiQmpULk05WStSZEhDODFaJlkjaThJLk1ZeHQqVFBJdyN5SUovdzxmUHpBUk9FLHQ1WSZpRVFVMlVYI2l4SjlkWXh9dVhIUntQSCFZUilybiY6UkB5K2Z0R3ZNSS8leXEsJHArajBh'@;
put 'WXZPKlpPMGVZNmRbNUcwRzYiTzt0RGFYNUVRJCFEYVo1W0orOkhhJk98NkdLWzVIMDZZeVZYRE9PcXg0dXZ6Zk95eEN3QmRkY1lHTWFjUz4odEhidDtQVi9VQ0xFdGdhQzZrSHVSUDc9TThgdjBDQF4qW2s1eXhiKjVkLzVYeG4qaVNJd2d4a3VOPHlxVkAlV08wVzA2XX12eTtmQ0d0eD9OTTEw'@;
put 'fXRPd3cjOFM3bHpOSSh9d3ldQ3dKaz5vMDg8T0h6LCNFWGVqciF4dzJIV1pLI1YzLE94cFhIQEkwMDVYSSNEOGZyPHJ1OFNHJj8uZy5Ja2JpUlYmbEsrLiM5PUhHaWBFOE5lSXRkdipzSzopKWV2fUs4QSF1OHg3NzkwMWB3b2YhYWUxe2RPLCk4VTEqI2oqJVBpO01MaFdsZlJmYWZCKWdlUjg1'@;
put 'ajshQS5Re0BAfjpyL14sL2pFIjM+Uyh3LHNkbEFLXkF8NypNUiZreURVan4pb1gsdT5nc1FJU2MleERhTmdjbDVqWCx1UEosU2dYJE1YWF9ue1BbIUZsaGVjLHB8YCM0eDQmT25iX1YpKm9pYG5SMElDWGh0PGlMKEt8WDU6Z2NRL0YkbUFSSEM+Rm4ldCpqKlQxeyRXNkRtQjh3T0E4ZlIwSXYq'@;
put 'YWlPIUk5fihGZiwjOks9JUptQiZodE1ld1B8dEFoXm1vLG9lQlBEfVZldl06amt7VW1hcH0sfThMUElQPmlBSWZMfkJJT3UuZSZ6blRNXUNUWTJMW08sRFVlPzAlTVVYfT57SVshUy9Lc1IlekY0V2tZcUxIck5pKnZ0QXhkbT1tPWx8QUw8LEdzU2ZLMTo3PWxUZSY4aDtpL09QeShga245Qzs4'@;
put 'cVlBIUt1UT8wUjhvZSZQMDEjJm5mYFR8cCt0eW5CZS95VVspT2R1R2V4OE02PCRFe1VYQzguQ0IyZGlwK1tkO0sibTIkaCJtWmA+LCYhTChsYXA1RjAiZ1guaU50TFQucSxLOWwwQmlGYkQ9WjxDbUZybzQzQ2VtNHo4RFdRX1hdWGwpREM4SlBMV2U9JV1YZU10NEdzODg4bkEhdXxRfUN4I0BQ'@;
put 'LyZIRHRIW1dkY00/QyJiPkBKWTQuJnI0MV8lWUB9SUk4bUF2OWF8WXtdblNfUz9beHI7UChmWGVUX3t0OyR4KExBQjhBQWs2UGdCODpnUjc6d3w6WE5YdDpIMGVLUmxndl0vITFKe218NkYhcip4Z19QRVdndH0kOGlHdlBSLGpQNyt2WzxlPW8sUlhfXipMUHY1WW5MOyxifTYhSyEqI0Y0Y3tN'@;
put 'Q29mOiRhYThjeDBrIWBQZGciNmAlRmYkTDQpfWRXPmpSRHYjRX5wd0ZnKzE6aTR4KX4pRFguJEJpJEM/V0BCSDp3bj97WGVZKXlhIiIvbFs8XiF8dGNjP188U0V0I0hAfElBRXtKbyVQLyF7PXglb3xHPXN4TTs1a0dCR0J9JE02I3Q9K3siVlJ1YTxDKyMqV2F4PkxuZlF2IUQ9KX43SFpEcEZX'@;
put 'NnVVWHxEO0REImk7QXYjRHpIVVF8ajlyMSVNOUFlbFB7NnRYJmc0MU4uSWVLZGY7cW18OnlJK2FESHB1TGk5YWowaCQuISI6aWptSjtIZyYzJG9zcExlPSxpU2ZzdENmMVtvQkUwSF1KdXd1LE9OdlorPyhUcz9BbEJ4T0JQUnI9YXtQNCkpRkJXaExbIXNhck8rUytoQUlDdGJBZyZ3a3JpQj5+'@;
put 'RD04MjkqQF1STzY7PV1CN3VCOH43VylxZ1dsNEhzSFcpJUxmdHNMWEltSyk8UDYlKHlyTCEsaTFaYCU6KzwpQiheOFJAXUJEKWp7NCFuZkVFUHtoa1l8fDNQXnVQLjdPVV45M0w8TU5wSml8NihTY0QwYVVfJF4uJmpGb3VlUiFXUXRydFdde2ZlLFhCUDt1JDcqRndVKVF2cit3Z0ZlSDo8JmhS'@;
put 'YTxHQTt2YkIkZGliMjsjWnVJWWE+aEAjdkZIbUVeI3F+V2cjR11GQ3k3NnU+WlE7ZlJEZVY4TFd9I15GVChGJF8lZl5XSTMpeVpBUEo3Z3UrVyw7fHQ0SWhwdigsX3V5MD9kTWo5ajh4cnF9PFkqVkVzTllZVkZgXTp1X01yXkhANW1MOmFAQzF+SGJzJjdITGo0NDZAQUdkRlY/Y11nQlcxMyhC'@;
put 'eWlJUV98O1kyVWVodng5LiZnJmw3R0k/KTFMYyZ4KWgiZkVuQlJEZkxPQ0ZjISV7OHt1VEpKcyFpRCUhPGY3KWomWzpgJVBZe1RhMFZAZm5RLERAJkFlfEtJc1FCO0hsJS5GWDE4UkgqLDEuMTRMN3IuRnQsNDR8Nk98QCkqd0s/aHVqRXtyeyEjQzU0VlBbdjMpVF9YZWM4VCxPeyVGSF44XUpX'@;
put 'RjtQY0xpNE9peXAscyYkVi5lVVhdKXJgS2lRfSwxQFg4LCQ5YmB5ciQ5cDc6SDZZVzVlRSlEbj5jPVtPWT95IVNXeDF6e1tGPWJtaENlR3NIfTo4WmFOfTFMVmVCYjpQODlqKns3Oz1MKkJsOEtTYltOPCJxTDAzK1NHZU1Eakpqdjdiakp4bE4zOUxvdU04QV46QlAyNyMvKCw1emV+ZXlzJmFk'@;
put 'QiNFJmU4dGZDclJERitTOyN7YWpKR1c3RyNFWFBuQ2pKTWshRStTTXN3O1VFS3I9Iko7eS9wUWpdY0RoLz5CYUI9bz48c2F4NTxsNmRyVXxaUlFrWHNYRUg9XyRXfHVJTywvTHlXTmUwImNjY3pqOk5MT2ROUU9edElPeWE9ZjBjcDBvdUlPXSJdZyk6YGZfOjxZSTVMNng1KWRzVURiclVrZnhh'@;
put 'Nk9IektAJlplZGUzN0dJSCI1Qk47Wlc4Sk9pY3ZEOEdQYXJVXSJJTywval1kd200L04sOjcuNUdrPHM0U3slRDpafkRkND5PKiRyN0owRmR4YVAjYk4xZl1bWjFaZDtQNS5JNlZLPCh4YyI1NmFnYypCaTRgZGR3e29QI0k1LC96XWkhJlpiezRHbFF6Njk3JDh4YyxhWGFSUXo2NmE+PGE+K2s/'@;
put 'JXI3Xk9LaDtGMkdaZTYlPyhnNDFrfW8rSktJQzBvb2xQdjJOKm5hUW9zYylGXl1AZ3xEc3NLSnQrWChMflhaZjBvQks4fENhOHZOZVNweFVPLnk5ZzZHODZ7bGIkVG0uTyhtc109WFBuSHhRXUZ6P2JBNUleJipneyZXKGtEPV5mVW1JL0pvR2AmWCYmRiV9XSZBP2M4MnRzUEs9OmlGIVlXLCZ0'@;
put 'R0JVcm9sNjp2bmtFWzlUUEh6NlYqOHdqJWw7Ul0mT2h3Y0kwPThPNVQvNCJFVGQ0OVNVST5Pd3NhbDtIJlgqZHo1L1hXLyxOQ3A8RT49LEJQXzxFaFAjeW47Iih3JixOaXBoRjRfejxZKjlLUGxDPUIqT3d3LDgmNEomVSp1OlAlZVEzeXR5NHgrLE9zbFZHWjxgZzZOVzFYL3MkYS9QODFJPV1C'@;
put 'ci5nOHdjazJEMi5vQC5zWztpYDg5KHhpNXFEdVtUSClTWnUkbm8hJWRiV1YpSFsybjxgKktQNyg7Mz08PCt9MjJ+PjB7fWhqbW94cXtVN2hrImJSKFU7Mm97VlNWOTksTnZpP29SeGhGQlVPI04yMFVCbVRJOkw/PWAjclUlO2hwV1pQVGo8SEZ7cEo3JFhGLnspLmUiI1c9NG1AYEw9ZWtoM0c9'@;
put 'ZWtfcWteS1VUNGN7KzN2TitxfT9ePE5wIX1TJDA0ciV1WUFsW0dLbV4xRC4/Mm1tcFNbZyF3K0A3I2hFb1oyWipiNEosJTleSHw7Zi4wVWFnZDtsPERtUk1ab0R+NzQhS25ba2g3VkR4PCh5em4iNypbcD4xXmVleSkiZGNmViQzdEE4UF5tZDdVYjNxUVd5NUo4a05CXTJGUlJDaEBNU2U7X2Mw'@;
put 'MU9uY3hFPHltJEx7TmY9RjkkJVtdKXh3aix8QG4rSkU2Vms3WTddOyk+PSVZZHgkcVRHVn1XOzlkU15Hc3tAUCxRYHgzJHFkP2xTUzQxMSJ6bWg7QG94SWNtcnYxQyhKUSxVVUF5bCZqZlg8Kmc8TmJXIypGR2ddQEo/Rip2TnJWVlNBV3xaTH0mR1haaXZBLC5va0w6R2xEYUpfZWAhOUwrU0wi'@;
put 'VSRjcjFscnp+PGRGSmdAMCxyPEBYa1JhLH1JZ0AwaixzJUR9WnN9TV5OMkhHYHJWOHtxU01qYWV6KmsuYW12d0RbVzFqaD06P0k3Ym5DY2s2VVNnMTFOaHsjPDNqOW1gZ21zZiM1Xm9HazY/dSUiS0N4I0c9clAjVmB1U01qYWVtQH1qUU50aj07Q3NXb3ozUz5+cUdRb2FmcnFrY1ZqOiNZa1lv'@;
put 'WCsreyxBNkI0RktbTnlUU2ZVVX4jTntrJDdaRTE/dmpwOF9MNHJjfTd7PndqPFlmNG5YRS54STY5fGZBaE48Nk5UcmhxP0pzQ15IfT8lW2NeRXVZUWo9SUcqflRoJkxJOUl0IkcuXSZ3JEk0cVg3MTNRdFsyIkZoRmoiNmJlXXpRLkxAO1VWMnUmWEZzTU18SD02aTh4Lzl5RyZBODNSdUhXX2BV'@;
put 'Yz4zMixaeUlmI3syNl0oPldTZX4meFFDbUxzWXJSL0s9SF9ZTDh2KkxyRGZgSklQdW4oZ0JFQER1NUB0aGlEZjZ4bl1wT0swbGcjZShxVk87JFZIRWc6XjwsWiReb3AsTVY4L31HLnJZdXBoR2J6biFAdF9QVnh1TkYyIT92eUkzK0UhdzVdXnxSSz5EY188aWJdVj9kK112aV1ta1gobW9STiNR'@;
put 'RnQ0Wi4rV2coUClecVFPZiZ5cW5YYDYyKF48Z0VXWWZXbV9URD1YcG0rdTg3JExyTVpfZkRzYzY9YVhbbWg4TE1qaipQVVtNMz1JZU5ReyFKRlRDIWdyZ2JTQEkmSHVDYCpkcWlZdDlLd31Mcng8OV07cy87aj50MipsRnxyRyE5MzF5dCRJa3Ziaml6IVRkfThJM3BMdTZ9YUd0b08zKXBZT2hU'@;
put 'QmVAQUY1MD9fQ3YyNG1qY1hCdjJHdWJ2dEc4T2d2LlJwciRmI19tUDVOeXhJKCs/MEU2UDY2WF46eC57fXluZ29VZDhRcCVmSVVTNCpuT3M3cFpLUFNZNT5NcCVCS1o4UERuNWE6bXZLUzpDTVQmWTtZbTxXT1N9T2YsVH4xPm91cEt5X2RyfU09W2VoR0taMit8ViZDTXo9ZSRGTEcoZS5leV8l'@;
put 'ZndobTMpW1QxZGRsRlF8KUlWOENrO2dNUGc4NSFncjtvU1pEWztia104Z3N8ZGtzQCMhMi5Gfj9ONWk5by5NI1lYWCFKVjs3UyR3OlNQMjE8fVN0QD03Tl08ZyVhRWw5IUo6MTw4Ikk6MTxGXTspITlpSl0wdVUkbEN+SjlOM0xEZWR4fTQ/ZWY3a1J8P0NoRVtoREt4W3xqTiIzJE1NblhRfENs'@;
put 'Mn1hWisuMn40WUMpQUlwc0xqWUxXdHhnMEwhazZNZnY0QmxKXVFCbGYvMTxhaVQvYUlTe0RLbjVdaWVkP3l2PXk1dEBrO3N8PjJjNFYpQkhZbGxHKz5Ydj97dnUoRjkkWiQjbnB5dyxDMXY4d0ZaODlmSVp0QjV3Tk4oTWM1ZjcieSVMK1JyYTJzITdJekFsMHcoOixPZW07O2BBT01xNXQrT3Q9'@;
put 'OEBCTCxxNXxBJTdKTyU/PW9nY1M9c0U9Z2JMalRSdmBeNkYjSnQ1TG9JaDdYcTlEdylDZl9hMXs9MWhgNkt3TVswcGo+Nj9VT3NUblBgRlBnVGgwQlFYUXtfd0AyKi5XdXhuP3l2bX54Nk1EeWxIKTpPc3BiUUAybnBpUHthPHhnPFgocnJLP1piQnNzfiJBX0B0OSglWC51NigoW1A7dkIvW2Fa'@;
put 'OFViMXB3Q285QChlJiNNTk1DdTRwSyZmKygweV9ZS1p1dVBlVlIiRWZKKFdLUUh9ak9CJVYlUUxQTW51RTwoVFVkOj4mTkJyQmw/KEFdPWUqOX4oVCRQMV44b2kzWXsiRUBba09+WSguOUB5djNeQjtJJjFQS00mdnNKZWMmTDRnWi9VZnFZeXJuNUU1Jkw2b1JMKmhuZltHVmUqUFtUIUZdSCxg'@;
put 'OzFAakNOalREKT5ORixZVjAwSio3QEEzdCxJKkFTOzAuZkMiO1AxdUxtUUZ1OSVeZGU9KnMhMHwjQjhCSFdyPTpwbk9ISy9XNyVCSSpxTTlOIWxoK1k1MHckOGd8bylHbXdRYztlNCpTRXp+O3tvT3MwUjNCZFtjM0pGSC82JXljbjJdZm9fITQkSTZpZV5ARUx0ci9uMktZY0hJKGlIVEsuKW1s'@;
put 'eiRubVJ+fUVxNTouITRJPSxCNENFUTFEYyZXIXc6KUY9Nk5FOF1AeE5oTGZObHdoK0wyJUU+Tl9XWj86VW13dUY3ZEs9N1dbbThfTm5xLnFLSFckOXdqUCJTVTNUVmN0RT4sQjJ3YU8iU1s2Oi5JYUV1OFUhNlY5VTdVMXxdaGI1MWNkPz4hflRsdyMqJDREMXEqaTYmbHZYcFNGTmdhSWI7OTxS'@;
put 'Kip5Qjs+dC9kVmEmInFjPTlIU0M8RDZ0eHVwaUVESmRDPG8mS251Yi9NKmsxIyQrWlZ0RU9kNG1xXTNaVVpsWk99fSY1d2NlWV43JDkzdCppUmJWdzRPZiplSD1aKytPfD1aTHIxbEtsPGMzPHVCPjxTRmgvfH0kd2I0LnFvR356aGw7VTZpazI6QVR1bFBie05jTTYuSUtPdWkmWC9kY3NSQ09f'@;
put 'X0FGK0JWOUkpPUd+SnZdZz1JfndIREpyelcyR2R4SlRhbCwiLnsid053WFQmfSU7R1lvWFZaKXNTfV1XLzdXKUJ0LDNnVH5oc0ZYQ11WKGQ6SnVXbHJQcG5ZbyFATEJlbTk8YyFOYzpiL0o2OSlUcDk2cyNfdTZjJj46anNoTnNHcSIuYyFuU2Q5PVg/a0wzRWo6RyQ0ZXJ9Tip4VlUuc1N2PmBH'@;
put 'ajBwS21ve1NTV158SSlzWiY3cHluWD0hfWBTRG9veHAjUmpIWFFbMm5YfUQjRiZ1RWVkLE5aXmUkUlAoNDFLZ2N9a21IS1pZfUdgLntBOjBHNVE+dGVZO2BWYio1ZEsxO0lOTyMpPGgqPEsyND1nPEZ5YFZrPGt6MmMua2VweHAjeGpocCFPNUk5RElyeUoiWUZlKEdrVlYhNF13I0dvKnleLCNd'@;
put 'NzQrKkVRbjh2PGRFQHY2MTl2bW1pV2xVXUZpSlJjbHl5VGpGT31kYWV4bSFLQzUkSTVdRU1IPW5hXkZdTCxJIzNVWnpUPX5aM21SYms8W115Q1E+KXY8QzolXVc7cmElVWVYKjVOYnwiIW9YKDlwRyFZTz0kdVpWQTxLWGwoXys/SVBDIzRacDk3Tm5ndjBNT2s8V2l9aiMyfGBfbXpbfXI1U1ha'@;
put 'O2RQSyMhRSJ8fk1wN2ZATShIUSJ4eHg6bl08OkZoQFNHRU5mMF9pY1EzSnliaHZJVlEwQDdSfEVhZmEqY3RsKXR5M0k/QkxxZlFSV3w5KXJARlZ8Q1Ztdz9PKmpxSk4kOjFLJS9WS0ciYjQuSFpOPWBsbX1yMTk7Vlg+dkBuN1AmMHNzX1hzPjduOUZLbSJDfFcqImByNkBCNGRYV0NWPF00ZFIj'@;
put 'U3ptNFZHaz8vUnBEbnwjYjUqLylmLjQoVEhaIV5TMEJPOUxLXVV6S119Ki9GSyMjI0I2O0lyfWhMLDFvI0tafVh6Rjc6TX59RjBfN1IoT0dBUExlIk9YVyk8SmdXajQlUVgvdFU7YnljPDdtW295LyQlZWMmTDZFYiZ6PGtyV05XcGB+fXZwcil0bjI4OmJ1M1YuRW1kI1V6O3ZLImwiPDcva1VX'@;
put 'VFRvJjp8KSRxZz9YdWIvcWgpcnpMS2Q8TFs2bDhrLGUzTmhxWkZldl1gMG16NjBIMVA2UG9sKGUwUXEjOVtQM30lPnhRRF8wS3ksPlg8cWxWWDNYUTp8SUAldnN9ME1dP3pheXwoeSRyZTYyZyN9OyUjSVB0MyxBcEMxRk0pUmxbaHdBLDomW1pfTlZxLjFBT2daOSw1Tm0ySUs4by9TUVUqfl9G'@;
put 'ayY/KD53TmhgaFV6MHAwcWx3YmkpS3EscWQxZlszNi5RKzxiTW4xTSVdMCwyVnYmQFBGbzJnY3gze2s4UyRGcEM2QXBYaEl7UXoqLyY8MUpxNUZZVVhJRVUhcUd9enZ7LDE7M0MhQzdkMWRyP1J5YEt1bG9DNEMhcTl7TTx6cHlXYGltYVZfTGY2Km0uS0ozTj4seCk1Rnt+Pn0+YTE+IV42KTVf'@;
put 'Vj1qbzw+KXF9dnJ8P2BrY3wuQEB0YyJNaHxaKmlrPkduMGZ2KmsuUHRhW3tbRm9IWylGUD9sPk1dc2JUZjslWkZaJnN9fW9HaytybGB6IUhDOlYoLyIrNSUhNkx3IitMcjJKfE53cHVNenM0W29VRVtlS29dOTUkLzE8V0thazA7Vz02PTA5W0dDVy4hdDJSaiYjaG1EPnk7W0tBO3ZsdXd5Zls8'@;
put 'TWUrOShKMHF1PEhrLyNiITZ5Jk59RWFHU0B8RHBCRiFAMT9eMXExPG0zaWgoVT9vO21ocGdaInBbImxjTHNnbkJHRztAXXUmaCFEOG04OCZQX2x2SjghWmI+WS5wNSZlc1QmPT5FayQpVld4WzY8ITtkdSUvI1MkJXxzdVQmVyFUKilGciR8bFd2VlVRbno5dlYkcSMvTl5+QEw5andsMjgrP0lf'@;
put 'YjhleDxyeyh5SF5acC48WSRQaSE/ZzMiOSQlPyUmKnpMb3E9VWJiUFNEV0pedmY5W1kkcDg+PU4vaEMiJk1tJFtWJGMyPmBONChuX0t4OztdeD5nM1lhV3JNJHxpNVYyfU1nQyFGTUJWRkY9cTosPmA2NUhpSzx2IyssZlNpSlozNX1wZ3tWW0BFZXAyNC5CQkkjRHZHJmI1U0JseEE+VjhjLyow'@;
put 'WmozJUVfQ0hoaHBAbHIpVHtdKClxci4saHddQzl5eFovOVU8YkxHQClHN31+PitrVz84M0ZwLDc5KTA4Jk9re05JO3pjYjZVLEhEOnk7a0pwUFI/UDxITFc/MHVdNS8uWWIjaFhVbTt2LD1JZnFIeS9mRFNNZFA2bWR2aTlkbFooKihiaFJQUCJoaWxwb3ByUXZIUypQMjE7LjgxLywjcVBEa1pW'@;
put 'NF9UaGwkUn09dmx6PDxMfSwiQnByM0xlU1UpWGZLbTJqYHxfQHpCTU96XXsoY0siYDwsLCtTS0Q+Un4wQ3JLXXs4S1N7L31KRV17TjlaQGlrODFeOGVHUEVVYSw1RjdLZ1BhN3I0b0plbzd9dF5IeC4iRVkpQV1KcXYySGJdUGxMPmxaJTg2K2xZaCFWXnY8dj5MMH54fGpaKV9EaHdIYGJzSS4h'@;
put 'Tmtla1NCZl1hKWFLZio1X3w5X1VSdntgaVo9RnFZMkRjZjw0clQuJCZLRUdvWmtqYDc2Wm9tbEU5MDZkYFtuNyo5eD5GUlVod2dYKTw/ais/XXlySyN6fXNKbjh9XmdYRTgscDE5dTttZktqZHthXyZwYXpkPmt7Y19LbFA8YGFZczlWPlhHKCFfKHY4L0NXUyp9XmdMe3srWztLWl4oQkp8cjJz'@;
put 'WUp7VEM9bFIhP0lFbFUkTU5eXSMua3ttITJWPk9Ee2A7bzdMOzhbZTZqUixFPTx5SShXa2lkaFQ+LktAZEomYD49ZytgLl0jdGR7emB6Snp8fEZfeSRmNGxVa3crUl1zYnI8enY3TF5qWU0sLEdXZVNdNldYWCksYnR1TU9IRTFFZTVgRz5WfXh1d0RlUiFgKFd1Y3ZYZEtgb3tqK3MrO2V3cFAy'@;
put 'bTtMI2k1enl+MVY7QUVeYjslVXlOJUZbSjomKVVYKFE7V3h2V1tIVj1XLklFO2UiXip3IT5MTk1bYzM8V3AvRzI4XzdJXmorJT57ZHp8JUVmNTcvISsvSnNHbX0/dnMqUWpfTyxuWEN9b0dQZ3w8a2Fab0s1OXt1eU1Mc2hPSyFNSGx7TGtEIzRbTXIpJCFfbXpFVjZeL3UpLilNLF5SU3wyUV98'@;
put 'fEZJSFl5O1NNU3N5aDZwJTg6TksoaSQ5czBRUEw0XkpmXjwzdToiaipLNTpFRG93aDBELG1CWGB6d1YrbGNCdks8ZWR7XlQqI009RT5Cc0FsfT9+IzpOMzR9UFpiVTxgeXplcWQiSGBEV2hKcCwsLDdNViE2eTU9ZUpaVSVJWStfR1ZLUzNoITl8V0x8VT42X098Kkp7QD5leX0+ZX0/Vz9yQC88'@;
put 'LEtbNmBHKyNbUjpPUF5uTFpfJWpNciRZb1pfdzgrWE19Syw6LHdiQzRVPylnRmhxcmReNiZmV2Bra0AwfDc+NXJTY1k+VWclIzVgTyVMR2Rxbjlrd1RZYipJTmtBYWxrR0xQcTZFU2lAYz90R017OVEzRG5jeWY6a0hwITUubC9iLypRc1ViUXdJY14/eFFWLy9GQ1ddR1NrNUZdMU1TZWh9PEUo'@;
put 'X2FhfXg5Yl9bX3plciZfdjcsfDVmTC44VnIoN0tuVmledCZCLHhsZisuSSMjUG8kXXFaLmZVKy88WiRBRzBmbiNhKD1vUSskWXdsKiI0e1hLXzZ5eHljcz8xUHx5RmA8M3dWa1thclFHTFdUXzVARnFvX2hLbjgpM0pAeTg2Q3AjZzlpe3A/YkteTz42RFdoOjpIaHE+KWNWcih5M0pAPSZQXSZU'@;
put 'TjYkdmdGR3IjTlY+W3NjVlc1cTc2Pl96cW4pQyxWQjdBXiIrdFNoQko2RUBQU3FaeU5hdXdEPV94cFIjbEtoWyJWR3BkN3ozQjNBZDlvaVdDUnpqRlQlPSJ8PmlZLD9bUWwxKCNEbXU3V2ZjSXdgeT52fE9FNm5POjwlLk1tbCU9VEQ9WipkeTNJNl1xWjx6PWNCTzBNZClpXXV7NExwOihpanRq'@;
put 'IVtLcVZHMDYjNE1kYiNbcnN5bUFkYD9NZ0xASjN0cywvU0kjIyYxJk1ySD95RXVyTTxSSTc3V1Z5OFg6byEkOX5YfEg3fWBKamZAVyZfanQxeTplNCxBMkZjdExXZl9fZmI0ayVsfHtfVm9NWTgxIWlUdSJaa3djXj1OUCNITkliZyE0Imw7YyIoOkFeTVEmdzVbYFBrWmt3czRlSkU3b2hjNEQ3'@;
put 'K055SWYvTC54eHc6T1tMRnkqb0tecVEkTmlFJUhdKWtETnhASCtPRSVFIS9yX10zNXJCVyoqNGNTYUBFPGl3RV13TysxeUcmQkRVPVk1VEBPfFBnb0soXV5oQ1hKMTVnb0RgNysjJUNmaXM5VUcmZC5eNmRgW0tlXX14MV1KUUd4Y2MqQUZhSjhiRTJPLkkyMyspITMiY0FRfF8kKWQ4TSJmTU9m'@;
put 'bS9gbjhOayxQRERLfkhSI0ooWjpiQCI3bnRWfERoTHl7QWw9fSlfN21JOGBzKmkkUmF4U2JXTCZ4WT9jZi9XLjUlOzxsK2w5bTJzOTgmc1VVKHBGS31ATH4vfFY8aW02RmhWTlg7bC5AWEdxW0BMZF9BZ1VwT3Q9eHA3MyZwVWldXUdNfEx8V3dWJTQkZClQTF02Jk58QH1fTzdvZThPLkNvNSNz'@;
put 'MVJSO306MHUrQllBclYrVT5dMWorNEZ5UW5xKyZLYSohKypYQmpGWjhrb1pvPyoyLl0sWEU0eVIzZGhaVHRoT3RvJndBbWo7dT9nR1NFa0skKXIuZDx2e0YmZ1BPbSYxOCo3dDN2ciF9UnhZbTs5TSFETHFbY3dSS0Z3OGgrcGZrSmxJNTk7L1R+UkBsd25wc3N+PChXRGwjVSZXalFIJGoyIkBT'@;
put 'MitXaEwrV3M5USxtWFN9ZyFqcHsqbVgzUlpxIXV4QmJxIUYvR0VqIzJCJFZqZ1pramw7Yl86U3tAKFZCZzh0QCk7JVM/c3toRW5DSjs+MXlyT3JlRTIzZ0dFVlJGS3gjNntsKyNmXWBEYG5FOUhgUkVwUVtHaD5sMitTYyl0dWdaZkxxd1JeMVZocyNVZjNaPEF5aEc2RX53Oj4xRFdVLlFjKXAy'@;
put 'bl45TVRZQFhkWytFZi9zX1ZtMnVsS1BGfT9ATDpqUXxKZkBWaHtoK30jYmUiKT14I00rNyZoOSNBWlordEBJen1KaVVzVElKcWR+bmdAKk91QXByRURZIXlzb3Rvb0hNWVpmN10vSzs1VFV+cDd4YUwoazZ6WiYxYGlGRkJEaGs6bXZ1SnwkeThhRGwsXU5pdWUmOnJjLE1MfEsyOmJfNSRPfWda'@;
put 'R3Z1OWcxWFU8IkZjTEp9XixnQHZsemZoSGJWVkA+NVNtPTNQSVtEYX5IdyhJRjJpTS9zaj0qTGBgTD0uenVdIUk5JFF0PGs1S3Z2UGFfe0tzem1NdiV+R1YlTV5yWUJxUyxfPER5MkFQS31vdS9dKXlFMV9QZCJIXnFaIzt4PnRaPCNfM31GSyxERGY6JUk6dHkzMWYjXyM8P0FkLmdhX0tDSTk0'@;
put 'I1lrSHEhJUltUWF4R0NXcCQ2Q1hHc3ZZMCwqeWZbRXVMckVJeGNwaCVkKWglZCxJUHQ3TmB2R0NXcGsmaHR3VTBRbHNKcSs5W3lLa0V+WFdgTF09dWhaT3g+dERXd0g5eUQrXnRfSF5yc3g7QHBPSGcheTxoKjdObyZxSDRKcD9jTzhpRFR0ZDwjNX04TjlZOkdDbmRhOnVWLDguSXd8O0BWWStt'@;
put 'RyR8Y2tAOk1IPW41K19gUXp7cVo1a3hnNDMsXXpKVnNGcnN3YCROamp4OiVJI1d5YlkrbUdFbyJvQk4+fEhKQkc+Mjd0MkVOalRESks7JXNOJldDe1ZXKi5EVnNzSCZIK3A2VjcybVkyN3RWfDVhengpYS5tRjpdL0BLZmNhLnB0MzwreGRbcFNeR1tjODI0Yihtb1I0dVpaeSxORlReYzVLYSto'@;
put 'R3x6TjlJNk59WjNVaykrKVIrSEgvPFFMJFp+YCM3Sk9nX1gyIz9ESm5dRCxRYSEvL1BFZDgyNyxQT2hkLm04VlJhIS8+XmpIZjwqVjhteCZuN2NtaXopIWwpLl1PISRCRilxMG4sRjdXTUJOQ1hsZm5jbVFgXSVNbjVAU012LCp7R3BtIU5keDg3UzJhX1VsQ3BONGswNWQjX2NPMz5VWlMwJktg'@;
put 'ISM2bERmOnx9YixWY0c1QmhHNTh3KD46MWxAY3p+dXVZSWpidFdESy9XN3JiJTRdfHp5VkhIT3J3T2NgemNTaX1MNDZrSzRWNipFMFl9NWJUN058NH5jIyNtM3IiVlc4TmF4Y3MqZH5Fc0RvcUI+US5zaG51S3xSSUVvdns0KWh5QTBtaHVqVyteW3xYYFd3PmI2WCt2KmovWVlTY0pCM3hJJnhn'@;
put 'cT1TT28hQTdmU11ydFhRfiZGQyouLyw7fllPJHRxVFosei5ZdktZZXdsU282eEVTRUdle3EkS1NHY21iLEx6V05bR2NDPjsqQ0o/TUNlM1VSTzI3VitrTVFDTFVUNC4oTlhqTm0wUX45KWIpUl97Yl16cTd5Y1BrOS5WQiFKXyo+a2htRUB1K3VMdT9hSU5WQTwpRlFxT2JpUVt0Jlc9Y2U8ODBG'@;
put 'XU9PS2ErI0kkNzR5S0xnQyZIVCFAPTdqd10iXjgyI0o8MkpvOnJee3doWnkjWlV9WTspVS4kVEFPKzJQXiVkRlN7PFJqUz4oNlN5V30jRGBiSjkzc001QDMhMkU9bEpBSHVdMmk/a1czaWc7SmR6elprfmpbTkQvS31YLEJ+XU9GemN3JGhIQT00bTdVRUlybWNnXllidTlYaF5xZ2R4XWVjP2Ip'@;
put 'KHxmIVp2a3NZU0FtMEImPUclKVtyWlRlUnZ7dURicFokeVZTT19yKHpHLyUyJk4rUnVwaDQxMkZQPyJHey41K1FscEV5VnAmZlNsK1VES0krRiRyJGRNejA1U3MlMDh0Zm1EdGZjNFVTZSsjZGtlZEZvKmR2dz5MSTIwOkcuUzIqSlcwe2B7JXdEIXBmI1RrN09gZEo3VHA7Qi58SmgqWzlzRU5M'@;
put 'I1QmdC9ZKldQNyM7bT9jWzpDRUZAYkA/JFVVJmhFZzxnITU+ZiNlNzhAdT5TVi4zIU9FcT4kdjZGPjxXVUBPKXBde3wrY2EpTnwrMFMiYnRKTnRRcVFhdStfRi5zN2tncChNIm5uN0k6Y3h4K1o4QnYiI3BVWEdSfGArImwrKCtTfkhQP19GWndbRTAsKUZiLG5aaCZ0Y1dmbjk2WiVlajs/KyZw'@;
put 'b3huWkVwIiV6O0NNS30qL2g1PmNtO1RifkguVXxbO054VGhaWG5NMEdDV3A3YjNddVo1TlpQWkl7OmRLTjAwWW5ecTBXdCRsZFdIPjdeaGxvZCkvSnNsdz1mVjhRdHBieVJlS21SRTUkRigmMi5MO3ElQ3g3VWskaXkzKj1jQk9wdFMmPCg8dipgIUlyakZGV30oUHQ8ZitwZkloIlBSRF9YKFc3'@;
put 'OTIhaHcwWFQ9Q2cxKkpvMzxkS088eyxXfSIhK3JUO3pjVGhAUlRAPURgOkoqTUxtPCRiNT5BfmRLbFhoRks7Iik0SnVZVHRkU3xZbVl7MjF4d31oST0iJmtHLm57TDR8fUxEX116SDFwRE49WWF7eGx5ckZGQSFOS3M0c1siTktXfnI5bjcjJWNNbi9Teyg1fWVubVdbQHV7b10kKG1ibSs/T3Fy'@;
put 'Rz9FSVgha1pqQCFLblU1ITF5OHtkNHZMNV9rM0srMStsSVR3SiQwNH19WUdKZzBwR3shK3Ihfj5EMiI7dkEqSyp1OmtNPHgvaHhwQkZFOmBHd2V5PHpWeSlNNWdGNSUhZVJJISoiUzI7bkMsSlgpW1Y8KmRoU2ZNODU8eFI4a1U7a3lPUSpHSEUsQCFiNjkhVWNqLzlTUlRVJHFoITB4VUU6Wzx2'@;
put 'KzI/dmI6eXxEYTV4MjJzUHg8ISh2YD1KPUZsWVloUmk8MDkuUGtTe2tASkowbyxkbFRDa3l8d3ZqSGJ2V0J0ZiF5Q3csdzorSHZNJlVIYDUma1hpd3lLPn5bJFlyLHFMcVJGbVt0Y1F0d3cyI3A2V2c1em8sJWo/ITgrJWpWJVdXTmpjdToqKUtVeTRmcnhOSSZsN2FlN3ltOkJtLzlHdlpwR2Z5'@;
put 'aWZrWClbLnteSyx1cSEwb3JhZUlDMTNZMllAJiEhYUcrSGFyW2Bta3AhT1Y5emIrYEtTST8ueSRiI0pnRzo/IVA2YmZWdnwwVlZhaVRLNGl1ImNdTy96L3lEZ3I/N35ZLHxKP0lMOXs2TH4sTDVYdHxOKkp6fDwsY0ZUOktZUyslRyUpekJwNWpgWWhudjR7bTQ1UEZHU0Z5WSs/Ok9PWDlBRTdi'@;
put 'RXJvSV1nRE0zZHFBazAuVFc8I2JXOXohKkhEOSYyezloMnFTU213XXBATFUqQHApLC5DYlYzMSlCYEs5JjA0Vy9sRjhRUVVULyU8ZS5WbityUHYzaWA0YVR3JVM/cCxwb3oycyltQUNxVFVKfEk0RG5jTWZCQEBDQUBRfSwjQztHMktNRzk3MTRvQlJUdD51dlNGYHUoT19NfF5eQCl9aHxqeUc9'@;
put 'cyFRLC9wSUBAaVokI0s9e2xxeDpuP34xSGlSK3opXkBeZ2Z1OSFDVW9yeTJsaVA9UGw6Xj1QW1Bbbnp5fVA3Z2tvYzxVTVpeR1E4YX1Rfn04az4sbmAiO3haa1FIQ3tRXz1pTCwpOlVJS3UsPiNNZ3xXRXs2S0JJbDZLSm9gK21MeU4kdEJraSQ8bVV7Mml3am5mZHVqS0B2akAoO2omQHM5NG1A'@;
put 'VkI8dTxrLFE6R3J7ayk1WjxePGUvYi9nRWUvTl5Naz47LjswdVUrKHkqPEQjPjMjemZ6flArQGVocytoaDslT1lJWTdJdyUrbHFRWUZrVllWeURtLHx1P3pCVFY8e0NIfHVlUzRFNzJ6XU1xUVo8VW0yWWZFSCtzbUkhO2tRekpdKE1WMV9XV2YiX05bPVBIRWYwKzk4Um9CJWpyITMqSXV5eyxz'@;
put 'ejE9SFtoXlJwdmBSZGMucG1oMHBiPEE4fDEqWj0oL3R8WCN5MFp5fGJAYWohSzV1Jns3THI4KTJCYXQlZ3dYT2pDRVlLUjBwKVVxdSNJTmc6WiY8V1tVPVBsZ0BAflErYzxxOiokbCtUPTwpTFdxP3BpJEMvR3JnYSYvdG1JaEkoXW5qISs2b3U3YXVDRWdjMUJKVktAaTppXUlBdihHclhBT08u'@;
put 'KVA9SEpUdzEkIzxndXlQJS9ZYUdQLFcib3UkeVFvSVRLNV1CKHNxMDNGJTptNmUiT3txSTh7Kj0wRzJpKyVwRzZifSRyPW86cSNDeGZtVnc6eyx+M2lWa3NsfXYyR0RMbFNjbENtVio5YGp5OjddbC9+SC42ZjZkUXpiMmZqREFnUk1CWzZDVTA7bVt7aDVBbEwuPlVUOUBLKjs/SS41JTJIYEBX'@;
put 'QEtCMCFbbFslYFZATS5NRyxYNU5+dE49e1dPOGIvM05jaGplPFt3ViY7byxBRkw5U0Z3OGE5I1FpRTx6O1N2QCIlMnZIaXxsL0d4aHxQIn1eI2BTenk9Jigqc0B8IUhYMD4hbCZgWk07OUleViR0QW1WUER+WzMhOHZodXVLaHE0TWYuKH1OWmomQVdQIXo7MWpRNit2WHNIalNXZTZjfGhmInNb'@;
put 'KnRYTXsybXhYdWppLk1ocVVkSkVjOUpeLENXUCE1cGo6YDIwRkUxLDU2aEZ1TWVMW1JAOm4uWEpyZXVSQnZhc3JFY3ZUMXNMViVUYSRHMTBiVEJua21YL3wsdkVbYFBdYEZtUmI/L2Z5YW1IPUw8Omd4ZVJFel0qP2s8Ij1qKjJgW2p2ak5RYHttPF9tMmZbPmV5QixTKzI1e2owdnh5Z3lVYnd5'@;
put 'Ymh4Ozg0amtzTnNvWWguVWBebFB9QDFWWVV0VWRxREQ7SSJOTX47bForbm9iPFEiVkZtNz9bLktFbFs4YG51TDx4W29LRloyZCRdN217TFgrO2A6VFpyN0p+NUZdLFYhQkVNM1FbOHIqYGd+ZSMmKy5ddDxkNyMlaGtvPTRtenVickZWVmh6R3dtcCtBa3U8SHZyc3lTSk84OSo5TGhQWFhGYmd1'@;
put 'UV1yQyQzbGokcTV5cSl1ezFlKnRzWGJOW1lMdWpnIk0hJDs4QTFuI2QsXWQzaVRbKSE9ZXl4ZytSQGxXVTYuXzYiNm1eaFExL0prPSxEOXoyMDEqU194el54O2EuRmdPbW9mYHc+KWRMXXIreyssNVVMPGt1ZSUpbzBGLjZtYGIkMUw7KTpHdX4mei4xKyNVKnB+Sio6UWFiZUl5JWpyNlg2VU0k'@;
put 'PyxPaGNhO0M/QEQqfSNucGReZGJXLm18bjJJdDpHdG9zZlt4eFc3bDxFcm8+SCNmdTlROVY7YzhwaW45X2JWcmZNZXAuWy8hQ2NabEsqKGUhdEZWSDNmWFk2Tz9pc3RxNWQlMjdJPys3O1EqbHdBLCxmW2VJcGt1ImEseV88bThNYGV1SUp5VmJFXVZiXkg5TWwvOShKL05HNXwmMD1peVczMn5j'@;
put 'dSZ2Qjw1RjhtPUE/YzdKQElIXzMpIjkrLmo8Jk1xSTRLKiw4NjkkbzM2XSNJSiVofFJudEQ/NEowcUcwSX5DIkU8Jml3V2VXMUcqMXZObTFFa2RtUyo0M0c5KU96YUM6cjZpJE04Wn1PI2VASGJlM0ZZL359b1dHIUI/PmBUeCsvbls2NjdLRW9eXVNzIU12PmVkUStKQEUzPHpzam9+S3glLyJQ'@;
put 'NzZbSWFibn5qQ2o1ImY3NllEMixoMTlZS19yXjBzfkk1aCMjSFU6fUN4NDxuPj5wbDgvLjtRNi97Q1FeVUZeVUljV1FycSVWVWZHej9JfXBsOFsudWpmMz1iZDtgcX1LKmNUfT85R2czdlhNTzhHZ0pbX3ZYZ1AuVC4zMVJYXk5tMz9VTDNwa3hYV2cjL245RUxseyhQcStXaUNDIXIlXzcrY1k/'@;
put 'YCRISGAxKzYvbUV8M3ZMRUpIRShPdWdgcjAzNDZ3fXlwUztWejssfj9lQFpMKyhFO3lXTCs8ayttWiF5TEhuQk9CRjM7Pjs7ZSFiRldlZjBiRHl5KnJ2ZlUpeEpiVEU5N2sqWSUvaSJOVWo4e1hxTDNuNHZpU1JRWF4lPGI7dzFzSkNPI3FzNXB+dnVGT1NGKEh1MGZtN0l+cC53NzF1UHRGRDc4'@;
put 'VH1TRXdoPVdhaixvMUtHYFtjWCVYPjtvajU+RG81blNZY2MmVGF1Xk54dUtDMTYmSy5lSHQlJWVbO1ZyWyZHK2cuJDw0bV9gQjFLWnlOTD1VS1BrOSlYT0tqNDAuIz9xSkIxUi9qLFh3NUMheXdqYDYyQHV4cHcjN0gxPE1wdTR1c3heVllpWmhhPSY7ZD5GeU5pNHh1d3tXbS9HbVhadSFbXihs'@;
put 'Xkp1KS9lKS9uVW0/KT5XIVgjXXgpdzRvPGFFKXlVRj9pPVAoTlBrQTJvLHVZOlpWJVcrOz08bzpfKD98PU02ISNgMTArcyE9TUtOeCNWZF5aeTEpKjxvd29mRDo/Qzxuam45MnViejdRZHYjZDxUKmU2LzgrT0VbcFRafixuZ0RCODFiPEtWI3Y5MiFBRUEwWU99RHh2Vz9WbkJrRV5UbzBWQ1kl'@;
put 'cVV4Mn4vNF0oPyEjaztpTDZMSXhgV09LYzxjOktVcStNanQ9TTZKdW4sM3RnQzJaeyw5SCFjUlA9MUhGRGxeUCVeRiNiIS5pQzM7eX1GXTI1RkFBWExvaTxHNUxvRlBYdXVBazpVWlpbaGFNVVF6UkFKe1t6S1hpWndJVXZaPkgqIkBnS2t+KEIuRmBbYmxjXTpKVmd8fGkyImEzLF10SmJndipX'@;
put 'NmpvJS8+ITBQbVlSQ1VsVU0uUTdYKUQjZUhDSDo3dnFsK3Q1WTIzLiohP3hxQ1dZVStZVis9aV1bXUMyTU0hNGV8eXFqQks0Q1E1V2pjPG9oL3hzL0VYOUh7RDUvZl8jMVlEPjxxeVhNcSw1QiwyVytqfTNKZSojK1JRRlBiKXp2Qys7azcvIyswMy8jK2I5an1PQkNNVjs/Xm9beU13WT54OHhC'@;
put 'cDV9IXF5dCkvbWMpL21jKSw0PTw0Q01KLlRpVG9aTl5acF9wTzs8PzhFdCEoSjt8eF5DQEd3I3AmSz5CWS9VeUM7ZGpEIjFeTml7d0VmUFQlKVVmKnd6MGBYWFJEV0krKXdgIUZgRCs4TWAmOz82W2dAaiw7SX1PZ1NiaC4vRDZXZXQzWjJaa2s/M1BSalpfQHgqUFgpNGsmVzJsOSMmLFs8U2ho'@;
put 'enZjW0xDYGQjIndHIldJRUtVbEpGN05Nb11MdiFCV31ManE8KWlSdVVERkRdZy5dcWJUUXV8ZCpHRUtDWGcqcjwyIjxBNGM8VFJYW0clQmk5PDJZV3pLSkEybE17NlN7KH5BeX1hXlddWilrNGdAN0goT3Z2KHBPNlJrKk15ZnZfUEopXjo8WXA7ZX1td3k5Skw9cDQ0OEF8dnUoRkkuRjtXJmwo'@;
put 'PEU3aD4jZ1E/IyVtVnk9IXw4Tmd4IjlmdFlxS0VLWDVrSk9xJXt+PjJCbztGWlkqSXJ8eys1STJnQF5IQUhZKjtfNVEkOm5lYFs2Rm00PlN+NWd1NHk6PVo0Qzt9ZVhXK3BrVzxUYDQ4VnkkR1ZFcFB5Q11yeU96UHwuSVhJUUFCPlUxeDNRWHRibnxWM3s7fmMzYW9SYVg7dT9fRj0qZzt1NC8k'@;
put 'eFA3NF86b0s9ZmFzaGc4elpMeFdZbTM0M3JwVm1OW2UxMV5nTz84OkdCcHdveHhycFs4YExAQ2xEMFdYYkldRXA7bmVhYVh3QzVpZSR9dHkqczdZWDU9USM8cl51XzcvKjpbZTNjRC87WzxdRV5wSm9BRFVDPjA/Q0FIXWpwSURtIzVUcVIjZXYrZVkpLzw5SkFGO3olREh4bW59clFXQW8yOU5e'@;
put 'Q2EhSlNuOkc/VDBDfTUzWGFqTCspKCtSfXV4MElYWmteRG8mX19DbW97fXBTKmxCb1p8Rz1xaCksSG1HRk0qdDZdOEZWJUB1JXAlJn5yRD5dd3JwO0pxJkFEKktdcXRsZW1NOTRbYFY2RCJ2cHAlSGN1RXJTNWkze0JVKitYWH1vSk91Pmh4K3UySH4kPmkvOzEmUVVDQmErSjkjYjYraSIqbUF5'@;
put 'aCMuTEZeWl9CTXpKcz45eF9YN2U5YDZ9RVZpSiEoVU1GXlopKjtyekt5QDxIJmk7KTUhSykmMD0jI1puQkRNJVNLRVlMIjRZWExJTXpzL3xHPnROMDN6QWk1OnYvenA+YVhEInZrQ1tlP0V1WSJyVTpYYlQhTHs1ZiJmPWYudX5nTGBjKW86bzlmaEshPVVzenYzcnB+fHchPV11MmN9RUtscCo5'@;
put 'OCpURHI6JWIpWEJAKmZudXZZIy9+fC8kdGsuRWtiO35WdnY0PHhKaEw0SkRPU2hiQSRpemVmPHc4L2EqbFVHNnV2XVtnQCNiJSE6PTQ1fG8lOEBtYUZESytWfXcuczM1UmFoUyg8VFA8ZHFVPElLYWhTZTsqSjAuPVgsKXtgOjYqMyphJl0zRGdNJDZnKT94b3ZUYW8kUDkuZTldMCFAdkwpbF5+'@;
put 'SlBqTGZGRHptaCFDVyFtJWJ9YiU1YjQ3IXtGOnwuKjd4OTVLSD1YPnIscSlbYVZBWU9BOj1gTlk/Lkl4O3NdJWZfWEw1Xj82ckRGMXwlT117fC9YV3g9d0xtUkBDPml1VTs1V007e0VYT0dQUmA0ZkVrNnZmWUB6UngxQVcpSHlkUz4lWUtMeVRBKll5aUVYeGdRc1ZZV3wkK0MyI1ApeW5KeG5z'@;
put 'K0NEQFRJcm8wJjcqVVppTzBFUFlAQ3FYKlM5LmF1Wk8odWJ1X0FKc2ZSMUxIXmp2PFFaOUB5aXVLcEAuPmdEXztMSCVFdj1iOGUpcllAfkB5WUJXRyFPN1ZLOzlKP3VVdzxVUXJtTmcrWStWZGUkK2B6V3EvO0d7PipFNVlsYGAwL2NJeFIrRTR3Oy9fLjNXeEJvNkVYZ3xMQylZXnZkckI5ekxf'@;
put 'QmE5XUAqakZGNk9KXWhkZD5tSHJsejJDOmNkdFovWi5rcntbJnlYIXclcCFvOGlEUndDMTpAZlpSOXI6SlN9fDlNV0tVdTNMe3sjcCM/eGJ4ISlDZDY5K0VnSHt8RDNbMWJoWlU/R2lPdlNFbzpTMH1JZkA2MWVfb2opTkFTeyhjUF1eNG9PJl1EMjp5bExqKSJKcUpvbGozbjshNG1kLkxJXktl'@;
put 'N04kYk42O2U0YiZYOk0mWElRP3lLNXcpYHk9eXAvcit3LC9uaHozcUxvIi9zdz5MUUZ3TnB2cTJOYGBYQllrJkZVSEM+SiFNYzdjPEgsPW95NW5sNyw+TCtxKCJHek0zenNRVmImIV9taGtyeUFAODRqYWNjdUx8c3pXN2cjTV9rQGNUR05xckpiZnJBaGhnbjt8R0ZGKXFrYV0kSi5jUDtMMiNy'@;
put 'KXtgW0dDaDU9RFp4OjZjP2UiO3NQZUMoKTEmezRCbz5geTtOZnN0ZGRdLCRpTF8sJkJfcHVSPTA+Z3hYJUM6bU8sXXohNVhSdWN0ZDlYWkkyci9HaE8/QmUsInhyOSpfWTkkektrMmhAWSohS0ZzRyliQn5YZyxkQX5+NU5Jb0l0fnNWJStzOjNtcDQ/ZHZERWw6WXclT0N1bl0yZ0VFbSRGJEFJ'@;
put 'O0E3Km8iN0phKS53WWJHPiNpYkR9fTdnbiFHInkzQlR5eC40IVZXZEtLX05JQzowYHlVbDM2YFB6Qm0scit1RjpbZC9UM1hYaW8/Y1dYQTVBY0l9NWM/QkUkaCtKRnchT3Y0cWhCTlg4VjszXjcqQ3ghO0tCMEhlZFFYdClSclMwMCRpTH1sJig0XmhreS5kd0EvcipKPHcwe19pc0k3eWtCWjMh'@;
put 'fn19VmM8WCpkM2o7VXZHL1UzPCt4LDEwK2t7bUs6UjRZPzVGWVZFPUomWyY1R0EiZDNrV1dgQDJGQ1U0Jjc8Xl54VihvQDJQXkZZdzRAOEU9KDovXXhgKkw6bStidCUvMmV0R3F0XnosNjlBRztUTmh6O0p3MEQ4RGZme2BNOW58Kzh7ZyI4L00lZE9JI0pxNTo3MlVkdjZLRHIoX1UjcyVMQW8+'@;
put 'bjBRQHFwKykuSXRZQFs3NFN4clo3fEYjTk40ZzdPQXZAWyZELktaaXtRXltveFMwWGpOfllDJXRvQzo0aGBMKnc+VituLis0PGAlZXkhOXBpOUlNeXQ+c3RwTHphNTE8L28oOzhPOnZLPCJHemg5ZW89MWZ6OG0kK1dCOE1BYWpXLHw0I2t0RGtwYy8+SSJOT3FxIi9ncXs2WWhMJVFdZ3tvQT5v'@;
put 'NXdxRVgzRnE+ZGwhTC5xWURrS1ckQX4sMWoiP3pBPDwyfChjfi8pMUI+U3l2KzJ+MDtZblhLWFJyVDcueSJjem05WkpfPlpHWU99OTZ8L0VSS3wsOGBMM3xKa0h+KnpVVU1ndm5bM2gwWzRne3FmPXlyWn0jc04mbW8sdEh+Z2soUm4sdF97R0JoX2dMPjcmTXF3biZDaGhAJGZdZUN8MTkuOXI/'@;
put 'KFVxPnVFLnZdTUt3USRROiY7SHFaSUNEem1+QHUpMlNhOFBHOH46YmZMdzhyaUc5ZkVUaENMQ2tUaGhoYXpxKGc7ST5fRnJ1eCNsQEpucXd7S1ZEOWNoT05rYHIsWFUmNlcocjR6RylwVXFFNy9YWj8obF52dUU8QU0xSTVNY3IhdGB0KG45K3QyZ01TdFF+d0ozfDhja0ZmUCVSYWs5RXMzP3RR'@;
put 'Ull6Xm1JI2Z2NX44IXVFaEUvO1VEVXNHMV95NTZ+PnJwI0cuTyhIKTR7eXRISU9YQDQoQDJqSC53PWNvWDRnISFfQ1UlJWQ/eUx0JVteIXl0XW1qTD1BfVEhSFhiYzxiNmBfRiNuZnk9QENQXylNUERfckpLPXEmcjN0LEheKng6NG92S1ckKTJdSkY/MjJGW3RrZ1ooM3R2UGw9UzhnNEF9fVJC'@;
put 'TDZQalExe0BicjhnMk1wclEkdUZde1dYd0tsNiV0fFMpbml2VkZPNSFCdFM1STBhNGdgeXAoej80d1dLQjt5VzZCaixXUlJycCwzT0xBLyRnREN1eXRjZXkrPGgieGA1fEo2WmNLfiExZCVHZjcpMnhjaF9iaTViZmldPFR0ZmdGbncyJEkmKXRqcW1rMFNjJV85Z2pWLFVTZmQ5ODYpUkI3NlVd'@;
put 'LHApMyhGLCR0a0JnTmFTJERqVyNYan1VKVliSU1mMzpYZSMrQGhHLHNrYjclRjcqZjt3NkxmITBeM0NsM31vc0xlXTJFYG5EXnV8cDdqLlFlWjkpJTE7aE1Kc3B7XlA4XSg4KSVoREhtWD1gej08S2d6P0gvcnNRNm0qUXdCY2x5cV4yVzxSalMpXShGPT8sTUVJeSk0OD95XUkjQ1pMY1hTRSgm'@;
put 'JUhLYHBaQFdbdmtzeHA4OWRCTHNXZ2RtMDNLeV87YnlVO2B0OzQxSV5yfjtkbkhSdXFGQCVZTm1rPX16WD5QW1ZxNDMhOlRjOEtlLG94JlVHZFM+KUx5MSJeJFV4fSlkcXh0QjVlPUwxcG0yc0JmSFR5KURVIW57c3MqVTU5aSR7Sk9jeSEjTz9CTDwubyk0YktkZH1kYlRSRk4zXmQpPC9gdFpi'@;
put 'JUNVXkc8OjAsKUZSWGtkPFFifDZOOU9AdTAySitUcFZiaElvVVdtWUA/QzBbRXhYKXtFN1RDLmU2WWcqJHNyW2tdfVA7PltUfl8me1JIdkpYKCRbUW9JQytxdjdEWEtVKUFpMChESD1CaD9DPHBKUHArLFFJZVkqeXVjdEpWdTxUbTRCUX54QSkyMUg+NEkkKTdFPGQ2cHEyfVZ4Z2doR2k6Pmti'@;
put 'S2l5NyZ9aHZWLyhXPEVOQz9bNC4rQ2FMSjx7UDpZcHVeIX4oTWh4RVVSUHRpe2BJYGRCR2wxVU9ZQCFgWiIhPDxhKzl4Xz9gSHh6NEtiZig8Kzx1WztqbzovNnlqPntebyVRJD4uW0Uzez02K0poXiFiMTlENXQyK1VoN0x9MzUyMnA0aV5Ie2dtY3BHQ29EV3c3OTA9T0dFUUV0bCklIjY1KUI3'@;
put 'dS9YN3EmdG8jdC5UWDFwP1dtUGY8fE9GIk9jIyFNPTlgSSspRl8ucz5mJj8oS3NBNWleO0sicj1lVUpFVn1IKGFWMG8jI09JYjI2SUNSSVczTil1cGduSH5QeUkmOyoueSNsaiVbQFhiPm5jezxOaj8vI1lGYS8xXmcubEo+JGRLeW1CTylNWXtoWEk7c1goNkEpcWdwPVsmPSEwQyRMblApW2Ql'@;
put 'U2p3ZjVGMiEweWpyZnU6R3lWTkMyX2dYVFIldD9nPDdYWnBsM0JfTEw+PUl7aDR3Tjx0aG80PSNNVzkjaUAsRld+TUZAWWNCTmZ3cy50aTJEa2JaJWRvW2ZxRGhDI10oPTpsIXUra3gsX1p5ZzlMbzhwY103WG0/Mjp5ZEZWOCplISI4WmUoSGVtKypURGlGVUVPJVdWQFF2OWg/SWRGfEJIL0Jp'@;
put 'Vy5YYFdKWmk0Z3w5SkVEQlRVNGswdH4pRV0iaVsjS3ZXfVdKQFBLPGk/eU1xUng0ZSR5eyhUWShlRTVnSEtHOlF5TFMjeHtmK2hVMlkuJnR1MFJdc0RRL1VgZ1pMNDp0TUwrZ2o6I10oOGMmbFMwblNzb3hXYnpaKHtrMHJpKz8sYE0sLlYkTX0lKSFvYlhnLmxISUlMW1ZjXTlnZ2NFLztyRHJ0'@;
put 'QGZBJXgyMjpwVy9XdFgidDN3dyY6LF5CM3Rxe1NQLztqRFN7Y083I3hmVTxfZ11XKHkwKWhlWWRnbnJnTGB4RUklQm1FazIrRVUyM1tESUJ3PmBKMy9fa2IsUC94YDA5QlJQentQIXVVV2wsRkIlK0p1Pms+UUtaL25KdCxgITxSajg5YGZWMyN6K11fWklubis0XmRFMlVWNixfOn1NUnl1Ymg0'@;
put 'bDVsZDMmfF9pYH1oLFt2NWJPSi47cDtWRDFtWUo9QkFIPzMiTmNFJV9xfCJtQ3hrW0xHPWlmSEJDYnxZJFRmSElnfjBePjNqTGhLVWdLbmhDWz1rQ14qfT81PWsoUl9IYiJvOHgxNFJJOGVZdmlISyN0Mktqc3FAOmkjfjxPJGBAKG1jPzE2X1gxS19DRUtPI1RwLj1uNmteajlAOkc5X0chaHUh'@;
put 'Imk6KiMvdTJgfnlFUV1kUVVec3FUdUs1QlQ5USslNlFyNCxuWGIwaWZZYWp6fTNxdGlScDN2WGpVYD5rZSRGZDs2O3B1dlZiI1E5ckdWTltmPF9OPkt4e1tYJF0/NkEmVU0pcVRPYHF7QmJxXjIucmx1OWkifGkrOUdWX1h6P1hrJjZnVjsqfnJCdU0uZUNefkBoXyEyUUU3VjJUVVFAPWA4cD96'@;
put 'aVFrLGU5JipGY1FPZ3BvKGU5MmNWMTh0UEVYQzRBR0lgSFU1Jm9gMVJANkoqTDM8Q3FYKUIqKSJXUWAxJmZHdHZqWWA2QCJ9US9CRTxMREBlU3ojWTV0ZWlPVl8/ejFJd30sXltVI1Ivd0FDLiJhWmxnfmovODl9eDJ8KCMoW1tdTkpWRTlbfFEvQkU8bFtwNG9sd2pRI15VRXoiOWYhckkpYEZd'@;
put 'X3RLTUFePEI3TzxfbD06WC5YXjF4dVE3clorTjRsMilAY2k1PTJvP1c7Xmo2ZCFyUF1tMChLOHtNfS9RLmE/PTs5d2JpNVtTcWRIdUBFcm9gODVQWzNZNzIhLiFLdGQmUjZiRHxyYUtHSkk9UD8+KFVVezxpSU9fOld1OHRESXlzdHdERjpxV3N7OTNGW24uJk4sfCx9PHgzPEg/TT5DPHsoby9p'@;
put 'XSRuTXZIN1k0akNJb1dIUnI0UXA3X0BEZjBbZlpIJnFKOysmdVlnY2ljWCs0QXdweXRxVFtkJiF9QkQ5Lkh4Xzg1eGh2XmQ2eXl+U0M9XzZAIVtySDk1aHo9MWk7YlBrRUNvR3E4fWZMJFdBPjRTOkc8SmdUPmsvcUYrdyZATGVjXSY3LjR6S3BbVyFFQWxMM3hYdFJOXz10VF1UJmlvenx6PGd4'@;
put 'cnwkK3QxMkh1JTRdP3p+USRsW3ZXd2hMJVFPTSZoY1k+OFpFNypXWGhlblhIRG9VbHEmcF1URVtKO3UyUSk+JCElWmI7S3BNbWhRckt4ZHlnKz5sOkBxTjMsVFNrLzVpSVEuYTxnMyg0VGkrUm5RRCRIQEYlZG9YKVtzSVNZaF5XK3V4KHk7S2E3fSY/VztgY1EpUk9SIk5uRWthRVhgLHh3Qkgu'@;
put 'a1hkNSFSbWg5aFdWJXQqPFNaTTZOYkg8YCovcyQ6LyExQiFAMVZWQU9pXnckJjZBMCFwY2R1akE4JUxsYCh6RE9wTn5iaTxiLlZibHBRSU1ILGdObDlDUC9ZMzFQbkpVLCUlT1VhS0RPPkt1cC49O01nQDtzWGJiUHhGYWslckJLVjhTRHJALlU9TThtTDl5Y1VGO2VGeWFXc3VNKV88Xzc3Omh7'@;
put 'MDt2S2s2bCtFSjpMY0tEeF9ZbjJTbmtFTUxfPkRUenFzUnJ6VVVfRzxpOzFuN2Q+UD5WX1B5PFUjfTc0e1ZVTmZSXyt8MllrUkslTS5qIVoxITNBLklHeSY6ODllT3F2TTRheTk5Q11ZJE9ZM3FMd1VVRSh1NGxVN0k6P2Q9WH5vb0U/NC5OJVEwe3hCbVFPRFIrVDVOLGkzfSZGd2BKJCM8N25V'@;
put 'VXM7YFcjbkp3eGpmbSg4dnpfSV1EUV04RD4qNjRWfkh2OXhWQ3Fyb0ZLamJGVkgha0JHaCZqc25COi5PYypIdUdVLlVxfW0pNjR1bEJNRmxaZmhTKik8ZnFWRFtwbG0zRURWSXtdcmNgNypXV1Rbekk6bUxMNlFzfTYxejxqYUJUcCQ7WTAjUV8jazRKVyNSX3B5Rm1FJnxWVFJEcytpbUh9UV1Q'@;
put 'QzJwRV5dIXFbUGooMHBUS2ZVOE99Jm1iMHpaW1JtL3VRM3lvIU1xVU8kYEtsdkJUY2JhUndHZGRgSmtDW0pxcl5rVElPXm88cERTMXhNRytnaWk1VDdBe1lbU3ZYRXR1ImlaPiRaVSlRaWUoImpwY0dpXVRHWWIyKEpER2NySHVFcm4pTElRYilATTVuQzF5Q3ghcS9ILGRgMWQzSVR2bS47b2o+'@;
put 'Uko/c1BAdm1sMFkuIT5rfHFkYl9GJHA5LmJyKzovbSVRQlI1cVYxNnZAIyptRl5gVzYrNFRUMjxlfW1Uem5PSjhdamI6Ny9FbSxnOFhnbVdgI1paUTBAMSRgPW56MCxOOktZRVZGMSxOVkc2WkVRW3J3bUwrMFFkbiMjVTdndnd7TVJAPDN2dFlrZE1zejFPdklQS0BKSVl3Tl5CITo9ZUhsRGFe'@;
put 'OyMvfER2a1dVIUJ9WFE1TlZJSjhgWV1yYUdrcmJvQTxHck1rdGxnajJsTDdWVXh8PyVieUU9KE5ObXsoLF9BamJZfUYqLCVAfnRvb1g/NmA2NkkycTxyPitHeE0yc310RFtgUCxCcSFLdkFUfjxlSXYxMEZXXz4sTVJqcHZnRUVFK0ArJT9XM31mRj1vRmtELjZwOWlYJnpVM2c7eyhma0BLSSxu'@;
put 'KjFSflFHeikyO19POnBtZWsuaSlCSyNxdFp2TTRmVCNbcFpZIi5mXUBzVWJLbTw2VjVYeTI8W2Yydz1oNHQlJntlYk0jZ347cFkkSTJwNV9KOS5gYGArOXZ2Kk57Z29KUU5Pci9QbForLE4lVkMuOWs5IyNLUDxUMllUL0h7XylnPyV8Mn5EWGIrcjRaOnF7SG9vKWc/JTNHRFo9WGIkJFpzWC97'@;
put 'a1pMMy9FI21fKDVaJixyYzF+a3UsLEB0YlV1NVsxU012aXlqLzRHIWVyVU1IOVMrfVBlPkZ6KTJXR0hmJHkiXmVKK3FCViZKYS9FLHZHV01nZGBNSyEvJnBHYDZtek4sITx3MHpWVE4ja0NeQjE2X21HXWsmKiM8UV4uaiZdRldYZWZmaF02aGM5eVplKUt7amZCQ0tLbyRvYWc9Y0lCWVpobT4s'@;
put 'aFZhI1V7bXBARSlXeV1DeEU1U3tjImA4bT5rM3V5NClCI2dhPGVmKlpVVTg4SyxJcnRCdEhAL0BnJlAofU5wcCF1dX5NZ1Y9akh0NVt7NGRxTWBkPGIvbWBjOnxFSC93JkspIWsmSz8pK0xja31+THExUTJ7bmliJFU7WkleRHpNWj40aixXJlVfaFRLcy9kNywsOmBRJF4oOldQRn1GeTx2XUtl'@;
put 'eExQaVo+cUdtaT02dVg8YGEwVH52O0Zvbzt7an57NllrRkAvYCFtZCw0al17JVMrdnYwM0YoSCRbLCRmX0J2TXxpVmlHfV4odyY7byFGfW84T3hxUF0iNFNabDdJNTY+TyNUKUJuTXJhYk86TjNlSnR6LGJzMk5zbztBPTJ1dGxAa3FwUGRhJmlNPlUrSFBaLkVAdEA4Q2lDfnpEcD1uVCxeNVVn'@;
put 'QExzaHZyaG83dndFPV9rdWlSPHlCKSM7ZXR7cUxZT3RfSms0TnYkWjNWQlF7Mk4uYS8xPHczR10sWjd9IWA5N1VESlVOSWk9OXYuTlIyW1BGcUB5KlZxc3NXYFF9Lyk7S2Q6I1k4QFYjNF1LazExPG9sRldgNFV5ITdLU11DXk9CP2ArczhWSWIsSTEwQUxGbGsuIWdxd3pDKGokTEZMaWA8aDlW'@;
put 'Sio5dzRpKSM+VWB8JFpPU3RUajx0e2Z6SDxIKzt7ZkJPUkFPKzJidzVtWkB3WytWZmpRcytZPm4rT00pLyguN1FzX1lQXzhWQi89a1FfcEloNTZWN1duT1gqOFdoNU9+XU5pWDclRkpMbXREaFsxWlhFW0l+bFEyaylwPU4vTU93cXpCVVJhU2VmRHVeXmc5OG9rV3IpfDhPL1kqOD9wTEB0MGlj'@;
put 'ND42bFNpfWVQaXhRVm4/ankzSyp1QF5EJk1XUSlTOXFDRWptXnBPS35MeDQvQiw+OHdGaHEiZ1p4YmhCVztRNzhRc3J2eDZWPnA0Y1ZfP2NxQzQzUGR0WktnbHVXdURhd1IweDQ1V2RNKilEUmpnJS5hRzVCeVYzblc4PV11cHRjcXZnRTZ1N1AhVWZ4KEtvcGZsOCVkXm1lOW0ocTBKZX5ESW97'@;
put 'cmoyXjd0cnAhTTElTjxicTElW2wiYnAzNnA0NlA8SFYka1tHaGhPaTByT2lLNWNLaVV1Xm9fP3RTO1E/WytnejtVK2Z0SkNDNVNCeEchPCpqcDM9clAjJXlXaVAqJCJ9Rj1tUk84JGZ0bTxwdl5naztVOyRFRGUycWxlY24ubkxKW0gpaCpYTXZeOWZyYmE6RkI0V24rfTooYkhUX101dSkuMDlF'@;
put 'dz5CZm0hU2ZoSXZEXVA7cU0pOilCRSp4K2pKV2h1Kkl3dWAwLi5bKWVOaGMwIXdRRiNyVW5rYEZyWHJkLlU8QjI5KiheLF45TVJ2dzJgcG5SMURpMW1HU2F8KWBRPThLYmp5bVk3cmZQW1coSi5YNUNTXjgvfiRja11xVnowK15GUGUlKiNMP2B2O0dwcHErTzNdMk12ZiFMaj08X1YrTjg/a1pX'@;
put 'SCVLd0s2UHJ0R1I9YUl4O3pEVWc2WDUsXTRvZCovU0s+XUZeP3hUR3deM3hve3JlMH5HQShmWVZXclFpbTQqbU5dfj44UEpAPzF2bFFgbiVmWnA9SSI9Wn00PFJseHBPJTsmeDIhPVhedCtTWFksJXp4c1JQP2kvZ3ZdJj43bmQ/VCtlIWUiI3Y+IzE7KTwyNDd2PV5iU3NsLmlKO3RQSFF1S0dR'@;
put 'JkZbbFI9P2k4RD84Y1hVVV1yTH0+bC9beWVEOTUqaCVmQ3ZUO0R0Plt3N0NuJmJWSUFZM3FnP1dhVDt5YS80VUV0aElBZkpHXjw4fUwhfmFZYXRVPDMzL2xiWCM/KmtbNmBTZzs1MkVNKVI2Y2VNTntbTiQzYGBPfE1FZGlzdVVVZCRBaGNecEghNVVkOSlkZWgwbXAzNW9dXixiUDNdTVF7RTgi'@;
put 'NWVEZEo4QXExWWgveTt5eC9LbD4uJld+PlhBQCs8RSZzRTcmc1ZeNCJjOE8oVEZaaGErIyxUKFRqQlk5QzIiKlFmeTVoXVRmQChsVXVFanNBT15KdTVgK0xwPThwTTNdSTtrQmx9eD5YdkZdV2BPeHY0ZWJySShweV5vdiEleX1vQFM2XlkiU001bXsiYz8hbHc1O0M+WjgqcURNWDNRfipFMnFW'@;
put 'LFNrOmQwXT9jQUlSSjkqPygvcEkleTU9NU9ZOHp1dSgmOFtpK3VXZls0SXl9XSZBbW8+MjxBIX5RcEpbVik3PjZgcWQ9M14jL2lWVWB0YDcvYDxgPHM1fiJ+KHZMYT1uPS5FbD9peW9RMk1vQjZ2dUQiPCNCMF4ydi9TclVPJnp2PHNaVF1rPFpBYSMjZk1bRSY6NjhjLjAxRXxZaGckSmU9alpU'@;
put 'XmJmRmg8VCFCYUUoNy8lPDVIOkw7NUNkN2ZbOyMxZzxLWlp2T1p6WVRgaDVeT3UvaC5hb0NEMW1zTF98JkZCSmUrU1I9YFIzWF8+NkxvRnx3L1ZqMD5hUyNXRXY0NjMySjtXQ2ZAMV9ARUR4XktWam1nWSg/dURDJDwmPGxgdGBTODU4aSsxLmFVXW9HZy4sL3dsMz5kVXU1fnZ1LGVhN0VTKW9Y'@;
put 'QjhpO1cuX09FdlBdOSxdPVJsRExnWF8qeSp2MG1BaUIzRUlwVV15OG41RUZxJjVDez55U250RC5UeXA4RWw1JnZtWCtZX0ghfjF3bytyd15EcXhVNjNqUlptMDI1VSx2M2B1JllDVl1JVGVMdSU3ViFNWGNXZFo0OE9QeitRIWR4QT4iTmhoTHxrdD1XaXV7NEgpSSh0SF17LjN5TXd5IkZiaEcx'@;
put 'PEZOcyt5Yiw7U0JlZ3piOHRIIyNtZlNVMz4pMi5HTEZePXBTPnF6MW1YZ3QlMXNGTEd4cUc7TjYieTssY05adW03VGs4e3IwKVteNyt2LCpaXjNWKmEpW29tZDh9dnZLMmwqdllDeFhxbWo+OGMqOVA0UDtUfl5pZGQyVGBGQUxXTSV8QVQzMn05R01KezNCYE05UnB5QG86L3tgLE18d3BKJXhU'@;
put 'eCxIW2NpVHRLPWZlamZPZWY1aD5pdStgYixfL0s2ITNFUGFFenlpL0lQOj5bNWJzeVFeN2Z8RCo0ZyNBSSI0UWB3Y3MsXlN2UjM4V2hzVEwuWF4hSChkRyh0SGw8SWgkQEZgR2x1LGtUNi53SmhxKUAmT3RRJiw/IW1bWmt3cnw/anlaK3ZffW84K1orX1JNak5WRmBqeUMzZDFHNH15STY6QFld'@;
put 'YiZaJihHVyw8c0pqYnlhPGdpXUloMWdpXUl+e1liNWp3UV9afGFObUFlIzYsSjBHOm1FW3l3Vk1fYEpPb1o8SCxjaWlsZ1k5YXVuNylSaXdJWENwejh3KnhkQ0lRLyZHZyZkMV0wVy9aZ2ZYYSE9dCEkbU59MHkvTiNNUTFHZy9zUkliUWkvQD0uaERaXjsjXkdpR05kUzxOX2pvdiYqKzokcSts'@;
put 'SldhPE5VRkleZkxsOm4xVik7KUNQIzUoMlFYbn1XbURKbTM8QUZvYSZzQ1Zzb05pWlUxJUxLalhNbSN5MndtOFB4O3YsS0UueTVDKG1SUVFlJDE0dH50K2k1ZiZtI2xTUHtXN0prUVBQW1daKF10QCkuN2BXcS5XYyY6NmtLOCQ1bUl6THNSJHBRY2BDQ0haaUVUbkhlO15zKWlgby9SVEsiQjJu'@;
put 'V25hfFpxZ1pGSiJMTig9Mi5MRm4sZEl7fklWXT5gcU5+RERdXltuRSQ7bDRWTnE+V0BeL0NzYG59eiJscG84Y3ZfRUA1ZzROL3BBcTpiYHl3Vm5DS3Y6IVBPbSsia0BOdyMyRUhYJGYxeC46SCVieDB1bXgme3lrOFkrMCtScWs2PnFMbXB8SGU1VG02fTNSQ0U3LzN9VUslK2p7PGZfd1tIdlh2'@;
put 'X000X1UidzgvY3p7XjxNTz0/Zj5QX3VAeWl3QSxtOnZ3Uzw8SHk1bCRRNDgrQXA3Z2ZHRnMpcS9UQjdfL05MSlFYS3Q7NWxpe312RU9QdD84Jlg7dHVqY1BMbW8rMW05ZFNDUV54LyRRS3N7PVU4aVlRNkEwZUo4SHNnRHFvaW5YPSM8ZEc4LDVOOyx5WmYxOmVKYHhpIU55c1hNYTc4UzlhYWU7'@;
put 'W2RTfWM6QCssMCxAc2ZseDwhRX0jdjAkXmpMU2QselF5UlhjKF0keGJeYnlBTCxkOTBbLDdsNWh+ZFE2TGU2dSw1cVoycTE1Yy5sendWWDFGe1VtVnpGYEclUndleXNOdX12O3dKS1QsMXIyOiZFO19kX0Y2JW04YUReWn5VSio6LHNgSnElJXZScTpdN11Hay5xPXheKTV6T2g/YVghbTJTdlJQ'@;
put 'a3UydCJZVCI7PHdhbXVERi4hYCFZbVVHZ34+Jm5TUj4zPHNscERKS31Gck9WaV1Bdj9rcFA8ez9jUDZTYnoyeio+W0I9dVUieCk/byNaYlV6WStXaUBQJD5pVF5dcWZTeVckWixlTVdEai95QiZ+Z1FqRE0zS0Z9XlpzJFZJIWc7T1B9eSJjan5ZcmguMyhtVzk5czF4bWMzO0tfenA0REt+X0hV'@;
put 'YD90dXUyPU06RzN9WGsqS0o8KF56IWtKKjsmS1hpKVJnPmh3e0NBTz5Qa1E0aVlpbX1OPSRkVCludF54MltKJDlzTCxfMmc/P2YhaiMyMVlGTDhWTVMpfVBoc0BQajF6PnVSTntDZylsREQ7fjpSUDBYdUdxdW50cnVQaT1oVXFVY291Uk4+aT9XODI5dTB7P1c4Mjd1MHt1SGhwYnttUmRjN1VE'@;
put 'akZNLCwhNVUpOld9fUd5SGMyXT94PC9RU1UvVC5vU2EvNmU7bjYzZ1hNckBdbnVnWHFGX1NtUDl3SGdoSHg+QlRLZHNUdSZ3ZS9qcnwmOSkyOEkzOVR+eXkwUEBlS0JIQj5XRU91T05AZk0xekErJk90RGl9fDJ9IWRkTj11amE2TDNjLjMoKE5sN3lBQH00a19qY2Aidjosayt7TCI8LmEqR09U'@;
put 'aEdIYChNYUosODN1Z0peKjF1NiRqMlNASXVeME07Sll5JlVXKU08NnN7MEpzRSlMNU4lYDhPNG5sK2lQfE5oVj83WUxmbTBVa0BybCsvVng8dztoNmVMMSx8MzNwWnJAV05XQU9CdXVqQV5EMHRkL0tvbXdAMXFUNTtZbjB3JnNGPDdiUjZNfkkyWGI0I3xgVCs9OEU4Jjo0K1hjV11JMCxbVCI+'@;
put 'TCpESVgvNG00UHpET01FUEQqKHchPGtTaFt5UHJUK0FlRnc9VWxuPGkqO2UvKnJIO3w+cTkpZm9tZ3VLOCRYUV9FfjpFRVRLeGl0WDcxbncqfSRzcXYwb19GZShkT019UHUvSVhRVClyNzJ7Tk9gVTtXSCZsOSNoY0o1bElMPSQ/eG1zPDlYVE4/LzF2T0Y8JXZDS2VIO1gjNCZ7OGZLbWJaKjBw'@;
put 'NXFlPFdQNztvK1JTZGJgMj12WXJYN0BxZ0I4WUZ6SCZTP2kwO1BwWkNfWnB3XzRgWzwxKkNGaj8yUVdvLDdkUVNnW2NbaGZxTF47b300RS9WJWErbUEsXWVCIVdFRzB4eTprZnFKc2x9Q2NfZXdyJFl9cUBSX1ZUXmI9YmAyU0BtRjRlRzxQUFFZdjkvRns4eUt7Uil3ZSRUTlduTEwwOE5EeWpW'@;
put 'SGd5KHQ0PzIsVFBlemJ8MmozZWl7QT9fdH1aLCxGQC5UeCludDlUe1QscmtGODZDWDUjKCl3JCxsL3suUi9nXztrKltMP2VTd304PDosTTpxcW91V01gWDBFcyVtLFhBdUBbdld7Lj08fTVGamJ2PHtlbnt8OmwzeVlhIVI2Pm9oUEYoZjh6bmkzTzY+aS9weXJmdzA+bGc7NmxtJDVJcyp4aCVk'@;
put 'JVprS1R8Vl1bXlU7anpAMSpMKmc+WSlNb1M1SjluOlkmNV92VipZKTI5dlZxVkdJIURGLng8JStgS0hVK3JjQ0NbIjh6QTBQckloakl0VjR1TDc+bTx0IURqajU1TGA9OVpxTGxpPGpQal43MSZZSWc4UklFK3hzcmBfR301I1gvW3hrclg1WnNZUXNwX01BS31oI3ImSWBuNTJOTG1+WixfWiRe'@;
put 'W3ssfXBSSSIybjpJWDRFcUhwZlhZPmNLSnEvLzQlNlo3em4yMkIsdDU6RyVOMGZ0W1p+V3lEWjNHYXlFIXJhMXtDUkNQZToqRCwpRipSdWJbaklLZUoqTy85X3FmI0lGS2FWbWkrfWlpVVVnSzZlZGEweVRDREB4dDJzTCsoeHFxJDw8TmVlfSh1MHwzSFhHdFkuPVsoeEl1QGFIUmNQMz9DfX1H'@;
put 'aGJ4eDl6RkdSYyk9THlYRzpjQGAxcm03IWY6fEc2LmdNSmY1TXBnZXpCcDNwdjVJKU5pKVs4e3p7KGVVQnE+NltzTDFiaHhZQ3taayZiJTl6YnJzZn5bI3oucSNscXBzan1UIS55Ikc8LiFMKnQkVGwra1hac1dLUno/b0c5UmpYTEprd0kzJikiZkxlQEg3SzU3REBhbl9ifm5fYXN2WkJjPkc8'@;
put 'PDR3aVBOMGUhNF1sKV1mYF5IN2d8YFA2RXR+LHZHTX19eUZ8YSU0UHRdWW5jIzdJbisofTU0WVYwKTc8PHJUVT9iXkYhdjYyISt0fnA3PmtSb0xMQ3V4RXZLYFdaWD0sYGh6RzdzSmd6akM+NFI0eT1zdEA8fjRuNUg9ciNRd1J3XmUydF52ayshOW9MfU5TQGZOdHIlXkNybmFTWipibHEpYWN3'@;
put 'ZWMhTUBrN25iLClGZ0svUy9aS3c/aF4vRGUrbDY6PFN8WmtwT2lLOSNVKS93JUg6T3kuNkZWWyR2YixJMTBKcU18MXxVUzEsW1ArVl5MQ3BNTk5VSXtReiVMfnJUXzFZOy9VfX5mM2oyWS4mPjtBfkddKExOUCRkWzN3aT50dDoiZSpmZE1sOHtbQU1YP0s2aExsNT15WER6WmEwaDM/NV1JOjV6'@;
put 'RzR7JCshTCJkfVgoQmRxPVhOUzlNO3QmeTRvaywhbDE/WmRhd1s4JnVQKyNZN2pzfUhEcXhAaXFFIl5PNjApWnZQMEhmMUcmWGdpR0MoU24sYkl7Ojg4ZSZuN1ZqOyl4Ji5JIU18UDNFRjM+dT8pJC9VSiFKZWQ1UWkpPiskY1tjdWpUNWNReWUlUiVQPzBkWTN7bUkjb1hXWnIhZUgjeHtpJWhv'@;
put 'RG9vRW1kdiQuMnk2QD1YWlh6KlJReHwjIy4pIVF8eD5wUTQ+IS5aKGJ3PkxCNUhuOGtJWTFVSVhQLmB5eCt0WklqK3Y6VUd6cS93dDslRltLeGliK1NlelRea3o7dT1iakQ2Z2REcUxETjt0cndIRUImYC98Zi58fWs5IVJ1M3BSI2MqdGpPWUtNNm9wWGBLWiFMMU9fcFo8VCRSY0NeL0ZeVXZr'@;
put 'alE3WER6LzMzfEQoWVdpKVArZDJkW0g/T1lVJkQwSXxremZPd2Y/SCMkLjdwaEJrPmMma3hULDpaP1dNSyV3VXohbDlAVXZrNXh8JlMwNz5bVyYzWjhxQ0olRUFgX2kyOVBWcn58eGwyOXFmaTx8I1VKaiRgRVNzeTtAbz94XjAhejZ+cUtXKXVObXohejZQVl11YXw9dH5xdVNbRFomYVtZKjBk'@;
put 'dFh8MFEhNntXK1A3X2NpTlZ3IStrPD1EYUprZTNwO1UzPHdyOi9YPjNVTGwqL248JS54bjNuKmxCZGVJTXxEeCpmMTVLYjpZSVZmQCtOKnM8WktZJU1ybC5RPVU5I2hUUiNsS04zdEJMYWhoY2pmQFoyWF1KLldKWSxaLDdwZj8jO15IWGp7PyRtWDJxeSZkayxNZHxaJSs1PiswNWJkWCY1VjZt'@;
put 'OntpSndHOmhvOlkiM0c9Xz9mTVNNbk0zQERNYH1RVGBiZHJoLj5WXWNPVnpSTlAoZ30zazQlRDZFIlhIbEA0JS43cD0qcnMsYCQrbVB4Zk82fnAoQixra2E4dXVCUUR5O1dPQXo+TDE/P0NgNko2JStie35galFlcjJNUjpEej9JPkBdezQpTC5Ne19vSFtHbUJVXT98Qzt5d1RlU0h1S253LjMz'@;
put 'MkdfKFMyMkdnZjdxL2J9OlMqYGF7PSxHJSFzWH5RNyZFYU9ZXWA2dT9QaHlFcCYwVDs3dkpfaEAqRSlmRnJmaXBAaUYkM11PbjJ6TkdycjM1cSZvIzkoNTgzfXk6TUxiOzFXXT5beyxhK2heLiRjXmhbcTwlLj90Z0BqcDxqKV5Pek4rM3VbQ1lFSis/Lm90fF1ZR1guRkc3TFBKOW5iWF0ye1Qq'@;
put 'VUEsTX11akh+dFFNYCVJbDxJLnY9OCQ8VWRmVjhldVpxV2U2NHRKcEcyTG8uNG95fmUkNEBReiRjVTt8Njs/dG1paHkzO31dfkprJXZrVGRQKDlXUS9TUiVHXVdUenhGTEQlIWF0cXQlR3JrbyZAam0pZzdKLlBZNXtUTjgkRzpATWphZWdLbl4kMlQ8UGpdLH15YyFAMVVWZHJVMnhqOzxmbU0p'@;
put 'UiNtMyhbYSQlK21waDw0Ok1hJHRIMWlSfi9zeTsvZExodUEsLyVyKjlaPTk0SnltK3BpJDgjUXpePTAzPWN8PEoodWsydWROJlhtQGorfUNscX40SmhFcjZ1YyZnT2d6bDIxTFIuQGJIPSJMK3F1PCVuRDAxc10rJC9zJSNdJjgkZCJSS1VRfXlSVEsvWFhVeF1SRkVXZXBFYX4paSl9dmZYaEM1'@;
put 'QTw4RiU1P2cjRHtHd1JBLEZpRng0dnlFdEd3WE47bixyTC55ZFhALDhpJCZmWlJJSmRaci85ZnQrP3ZGW1V2M20yPi4xWGI7cyZ0OGtmelRAKjtkW313eytmVWgpbF45PmFyZz1LKTpaS0smSC5yY2giVk9aO1A8Uz9jeTtbS2YkQnphMH12WWU+W11UTFVmKWhmXUhQP3J6Kk1gNj9JVzRrfWoj'@;
put 'P2UsXlFCNzpSLndsTWYiVlF6dFp6bVk0KF1eX0ZRUHBFfmxibSsjby9XZSNLODBMc3lPYmZqIzhpQ0t+JSh5MzZkMnJscX5fUXovbjB7O3N6OSFZdWVOZ0YuK1ltKy9mSGE1QjtOKWQ3V3t8NlozbDxnZnF0Jl0jSURaSnVjckFNN2kvZiM6eT9SW0IyVj1lZk09flojMkpEbVgoZSFnU18xRCY9'@;
put 'cXBBe1E6fVIwImhHQkA0TXRvYTRUUnJCSUYufj9BSmtZV1BkY0pXJjtoOUlMW2lZJjVJNVJqeUdyWEZbS1BfYj44bCojfmJgPmw+Vyx3VnckWzNUMU9GZ047KjFnO1MuMVtWPltePH0+ZkdjKyZUNlZnVj5bN1V6LCVYMywjRXZndGojVm9ldV5vb0ooPXQ6Y1Y7Lm8mW2M+VU4obHZ4S3w5empi'@;
put 'JEkuMWBOWCZ8PDM1MzNTPjk0LihLS2w9NzNqQH1oL2ZiJVE1JC9CSDJ2KzkhNERTXWcuMSUpbipXNFVrKGZlU1Y6STd3Mn5aYTtleXhnI3dRdis5KEpoZUAwbHBhKCxsUGBzRWBWd2lXZE9TfG19P2phfXoycCJOeyxbaHpiV1UjV3V0dTY8VkBqcUwqV306V112RylSVEZCYlhdJml6bzVkbWUh'@;
put 'K3FILnl8Z0BKanp7Wm0kQW8haCVaVXg8fS41bCg0d2FNYEtRbHZZRTMwSG44JktLbGpjcFYjWiVbZCorKkRQKF8hL2w1PGZEJX1tYU0xd3A5LzUvPCJJe3lzS0xXRkxKTGBvZ3IxPUNvSDBPaFRJYlZmL1tnN0p3MzBZcTR6b2JiZ3hbVlcuIXJJWVN3NDBUe09PZk5mTlJ2P2Z8aD88Q211Uko1'@;
put 'Wjo3WkJ0bjBHNmNJTEIwajNWSzxHbigmJnkpKjNWNVhTPTMhdEVLIWlySEcwJFk8MU5iI08rbDUvWVhpQTtSNkx6KiIxdGZCNEVAWzpLMXVpIzR6NDBgKUY2XzhiYlMrKFBYblIreU1jLlcvclU5N3cjZ3JQI1o5R0siQl1yOFB0WXFZX2l6NixtNCN6WjE8VVA3IV93Oys8aTRLP2N5M21lTmg4'@;
put 'dC9Sd2w/d3lxMDtgZ1MrZTZaK1NgOHZbP2kvS3hkeFZ6bUdkWip7TDVkU0p1TiRLIlNoc0U+bTZlVk4vfSJLOW9yVlJaJWRQWHhpNzdHeXtqNzBIJE9oTGtxK3ViUlRdWDg6YVZEOSxOTCksMX5ASGxpKT1WNik6LENdQmBJTDteMWZBdUN4ZmFdSCJyX3dEYjdwRTEjIyJ1akRMS0grKFpxVnJC'@;
put 'Yi5deX5bJFkpWldIKzFHK1E6X21kNlZoOkI7TVZRc0tESmJjR0c+eUk6XnFSeCVbT3pPeiNxbXhzJlZIWjxfbTJCcm8zWCIuVFAsKTRnbUc/YDgrKzw5Wl89XlpJKjN0ZmolLzZraitQPSFxWVFTSG5TOjEkcGRkfnFjT1hJT0kvciUhZ2xSIT0oQEtMd1BUP2xNZFU7ZHAmLlVkQGkrNF9WUF5i'@;
put 'Ym1GdzMwMSRbN2AvJEhhR3hGa2FHVUkiYElLV1U0YixbdiYsazYpUEJTRkAlQmgocDxYVXhERFdVSFNgUz99YE5hJF50L1tWPHgvbWBnZUlZcUJgSG8lOlRPTixPfXpTZEt9NkclY3E0MlhYZCUvRUEjKFJOQyJ7RTFQN25GYCpCVTl2c1VBbyJbaGchOXR0TC9hL0k9aWNFUUFBQUFBQUFnQUFB'@;
put 'XlU0LD53Szo1SExNTHQySSkyYDF0akx7aXZVZihhRFksYiI0ZC8peU5uMih6R29oWGRIK20iSTF+cmtXSmJJMzpTQERqYFkzQzRzX0s3WztMJHpvMFswMSZAaCkyfihYenUhW0Mzekh0RSxwKmJeV0tTTFk2Km5gZSp6MndKaHNCRnc0NkkhVCE+fUtFNFRlaDMmbEMuMTxMJl53NHo3aFk1RSx5'@;
put 'WDE8fG1wfURDOHAwey85a2lyaTdBPEA4QDFeJTZWezF2NnteaDNJfCNoMHtGIVJqK2A4JGkmYlU/QC9DYnZgOCNTWVQlXkFrXTVgXVpRNUs4VGB7aVgvMTIlTGwkMmpKXXRKYHM+RWxAI1pGNmVuZkUsTFhnQ3hmZilva1ElK3dVISZTRVVYPG1Ne2Y4XixaNGhRSFRUazBnZEIldjpzd31LUStr'@;
put 'N2pEQyY5bHAoRWcrRkVmQFFEY1hpOWpEeXppVC90fXdXdDVtbyZ6eSMmMiVOVCImciU5diNXOnRTZXhbfDpNY1pMY28wbzR3aFE6NyFBRmcqTFhrNmxDNFNZQ0ZXVlJYI0s7JUxjVW8hcXRPa2RNZEZDXSRdRTZzNVtNWlNmNTFQSlptPzUqMHRSOTxbRjEqQDxEcm01VXFmNXFzdDUsZF1yaGM/'@;
put 'Qmhsa05qWHt6MTx9KWVCNiF+L2F3fXZeeV1KbG5+SDJzWjVOUFI7a2YqZjZvU1Q8eTJ7e0VvYDwmWyRFNEpQP1c2LkxbREdOfEYzPUA5LzB0KkMleipiKU4wRTspSXk9amlfSiRCdTBLaXYoRGJwNTdkPTxCRFFXeTdhVSZnKmVIeCJYUiNZQ1ppI2xCMjI1RSN8SipTJTs3LDF8SiwsOnNQeCJq'@;
put 'fkVFazpSPDA7czBvcXFZeF0wamdoTnViIVIqTkhpQDF6azMlb0JCS0JlSz9iLDJUV24xdWNgQiF+JUYoY09dZV5nejgjNnFlMVBERCpXJGhWUHl0N3wwfUNpLyt1Ol9BfnopPCZrNyYjT1QqUzU6QGYwNjdvWTUpM0ZxXUlQLkI7M15dbl1BczU7dDBwTFB5ZmUlZyE9NkksKWF5aFp5U3V+cTk5'@;
put 'eGAmO1RyU1laOzVZUn0yZ1VEVDUvZlN6KnhSazovcm5oUjg8WCFAPCVscFR4ckt0WVc/WHJbLGR9ZX41MkBFVWFYOX5gWGt9UkdZV3A0M01lL0F5KF8maUNFTi5xMSxrcHJFajYzOX5lblRxOVRgV2lvfDE7aiJeWUl+X2swMms3KDJNaUpXaW1NXkNGMEtybkRAWCoha3ZjbWhhO0d8c3gqcGtv'@;
put 'LHZheF4jWzRjckZMVlNXTzQ3Yz5iY2IyXyZ3V1A6RiNjIm03WGR6SzllSy83dVAkR0VOUFhAOlFJcChXVWxCOGchOlNhdCtiUHs0OG1HaldDbEI4MGVASUc8dTNIeDkwT182Xjw6TTorKlExMFZfUUBKZ3s3Slg3Zng1flRDW0xGJTpJdyhnT2VPJDEoSklFfmFjdGYoNDc6TUhXTDVAYjBbZCpe'@;
put 'al8sZm0yUkRdWSwpWF81SVFBeDRATnt+QyY2SShDbCM0eWk2WlIhIiE8TEQ2KDdYOWY9a0tGO3UvZHsyPTlgIiUqOVhqXmp6MW4vbixzPXwlZTY2OypoMF0rK3d1TSNrdD1MJEVOSktaWTZrVC9ubC93IUFvcH1bOCRMenJhNmUvSFV0cmAmSHcvRUosUT95IUtgSHs3W3toVV9BQUQ7dTVhW0xF'@;
put 'NTgsNEQmRU9OYF9RJjd3Ii5kOj4qYWFlZnZVKDVsJSgxayp7UnIsQitaV3ZDbC9COiN0UnBVfk1PSishaGk0XmVgJiFtUWg9P0hUdERhdEVTbCF1RjpreGk1cmJXUUdKRmQ3OyxpOUxnSGs6elZ5fHtQUiF4S1I6YXdZeytYSj9NRDhhPF4jfV5GOlIhfTJbaDBpSD9zZnY9K0g/VnVaKElKVko/'@;
put 'QiNKLClPe2FQb1hPU08pYipKTWFDPzd2dE9PQGZiTH0pdHN3QjEvR3VVc0llfHx2T1pGKGB+eWA6PzBQYUg+WSZwPF1aRUlxcmhbczV4VjwwfWh7KltBT1kybHdXdF9kOTNeVFR4MSM0TXoqcWtxZEllRGlwaV59NzghZWpWUmBWaHlQWVE7WmZBdztbR0N1ZE8qa2guL1ZdRjxxQ0I1cGtKKGg9'@;
put 'XkorNVcjaUY/LyUkPkJQLmF6TXtMSF58LHt7fFB1c00vaiY2SnpZbyx8LHd9JEIxYUl5PF1INWF6NGgxJVlHZSt6YGp3OCY3QEVwT3YrRGwqIzUsPWcxPGA9TXYsKC9QUkVoPCFCRVE9N0B4d0tsPzJZNHBOI2U1O216dnkkQXVlUTFdcS9Zb2AqOlY0bilbXlJaJTlOciY0WFhwcFY3KUUhODxu'@;
put 'aGxfIkhScFQkU1JgR0tQW0psZyp9bShXWC4hKSZYVC43dm1SRUxoYEdYNWpSMmN2SUNteW5STEd5PyNjZk1FbVR9LnM7YyNwXXNGI3dhd3wkIlooS3QjNEQqSihOPV53cyVWRzZyNlpwVWQ/U004XT5oR1dLbFdgeHFfPVgvPj5tZ1QhJmB2JT1+QnxdZipMOyNXTERGej8qcVpZKyZNe1laJi5s'@;
put 'X1hQemNDKUlia3pMUlZHW0QsbllvY14jPyswejxbI1h6blFYQ0YpKG9QVU1JaUY9O0pOLDpuenFzPXx3NUVITC5XMnAkSUttZSppOU5ZY0VeciF5YCk3Tlljbj1FaSlhTCx9Q1BOOS5takN9R0MjNVhwdn5tO2ZLOi8yLENaXiJBVk1hNWZHZ2tVLHlMRihQQUFARyJaWyVsNUxPPFdZV3hnIlZ5'@;
put 'eEgmfSoiP3AzWkFpN3xpaWFxX1klSFEjVCJ3K3xPK1NyVjZZU1RVRTVPVTE9IyM7PnZFd0JPIWRLb2Q9cFU3YD14I0o+M21hVyUsSCxfPDszVUY2Q1tRWiE5Sjl0NTxRYCM3W3U2c14mTS40Q3t4M0o2V3lpI1cyVWFRIkdiYmo/WlBUKDx+UFt+RU9AImwzU0MvOEV+bEhtMyNtIVdTIiRkWHVF'@;
put 'KngrNTVrUTJASX0mJTVORHhubVFFRFZ7c1NlcnxVOyYhV0xHbj1obW16RVNFckZ2bnl2K3NLW0BZNGEoSiRicj8lZ19DVykwX1tGVi5MT2cqXXZlWFJBOD82MUZ0dlB3dz89UDtVcU8qVFRdfDxkMk5bYjkkXyxOV2tnZ1EwbjYiRTluIUoiWEpHPk9Hc3NmPitzekhedTIrMkx9cGdTTy5ZQH4+'@;
put 'RnlGcENWOiN7KVddJV08KHsrNVpfMk4jL0FvcGB9IWw+eVo3OD89UDl4fWMkbUE2KHEzbHJZaismT0MlWE18KkZxUnFmIX13U2o7fSNZTEg2JUghbkZZSXcsRTZHNUZgYno7LyFpIU10aUBmL3Y5ez5vRSQrSzVZekdvQStpRD8vMFl8R0cyYF5me2RYXzQ6U2xldUNvcG04TUk7STBCLnJEOEt+'@;
put 'ZTR9aDFMflV8ZEglaE5ge1VfKVYzcjgxbHxvZzplPFcyb2FCJGFLcyY4dDtYPSVEO0suW2UuJGQmZ1prX0ZoT2k7S3BMLHAjfnJ8P0JfI3IlPnUxIjRNQnJVYD53ZE1JWiJadmlTPlhCITw9c1NpPEZ3JmwkMkZQSVlfWUw8JkdgeS5HMT0hMSI0KENuazp1QGk+P3FaNk5CbV9AbSl3WTA4bjtC'@;
put 'Kmk4OzhyPHx5JURRQD10cCQzdTNFVFs4YF9eWXt5WnUvbjNne0wmZnp4czlvcClqOT5pbl52Mzd2P0dnYSx5ez4mciwzVF1RUVY3emI+ITRjbWByO29CPyVZYEVBa2pYMHtoLG15KlA8KjljcX1PL11BN31FUWZsM05xbzx7WGVheGVGL0kkUkhVJGs/eEpgcDMxJFg5OV8kKnxWbzQsPiRLSDxY'@;
put 'UE9jP0V4fW9UeDFKM1c1aDgvZntOUS94dDhKUCEjITldPlE7Mz5UIzswPn1Hc0szNEgvZWwuT1Y0cWZgI3hGbiVgXjF4XVopc01CaiQjTFlPeEV8bjk5biUoOXp7RTwmJWJzVEYhLiovZi9IellhYy9oKDA/UXZNUSwlbChjODFSRWh6ciEsYnRPPVR5dkhOMCNJaVk0JTJ3OlU0ITMvVSxXTHQr'@;
put 'TUBHfUgrfVpxTGs1MTwza0w2Q2t8fVd2SXo6bS8oNnBxY2NRcF5lbml6anUkY0VCRj9wNGNvXyhhfn1nVnJuVzVLNyE5cChqPyhnW1tiSS4iMEV1M0N7PyN+RmJLeH1ZOTJmRnl0Y0U/fGQoYSRFTTFyXV5GVyZleStxaWh9e2l8KXQ+amNKVH05fX1XWXJ9aTA2R2gqfHZSSXgsYiJfRn0uU0tN'@;
put 'Xyx3LENyOjFEcCo8TCZVbGwveDw2N0cvXVAsb0N5e2VCRz5vPilnVih2aEFjS0RwOENUTz99MCpyMF5tNjsxSjNJRCVSNEBXWnJjQ3ooeHk+Lm4yN3JgWmdNKU1aYHIvNno6ZFszOjo+T0o0VDNFJV5Da0Fda2wmXzE/MWMxVl5ld05IfXlLSEl2L0ZrVCpXKE8pJiRxXlJeWVJ2T2NsJWVFKDJm'@;
put 'OzZ+RmhFbXEzXzVWSHJsaGwkd3B+QCs0LERnWWxPSSVRKUg4cnJUdjlJMmZtaWErfGk/ZF8sdEklaiVqPyFEcTc6LHpfXTM8VTJAWz1yUUFHTU8zISU9bWwjQkZDTkdWMH5BQDl9Kks8RkE0VTJhbzM8JWVQdGFFVXxBPHdnc2Z4M0JHbjskX0VlVDErUk0xNUprQ2wkRDtBNzImMGU+T1shcGop'@;
put 'bDt9JXY3VypaYVhAPmNbfm5pc25PKk9TM3FjVyQ/I3ZpRjF2WExwJnB0bX1hLCNKKzQwSDp4ZVUpZWZZdXJ7amx6OHokfGxRakUiPFA5fDtsZW9BcGIjT14oZXgleUVlVGhXbWxUKV01NUZzPlIwKiYvMWpqR3hSM2JtY25iVURZWEZvKTZLfWdVWHBTRDpdWkM8OSVeJSx9IVhUMCFTVXxZTzJN'@;
put 'UiVyRUc/UzlKL0t9dUJ0XTVrbH5bPUN5RyNnRjZvQkE6IXZga3g7NXA4XjFkUUloVEdVPUxaai5tJFRhXz9PW1JFZDxqeDhJNyV4WSpBeUg3QXlofjJCSTIjcXBXUTJwUDo3T3RzTFM1ZlE+NkYuQkN5PDdyPkpRJS5lX2IrIm9uSkRERj11d2E3RlVhMk4zYDU4QDJmSmlsO2wqZ29VcSN0K1tV'@;
put 'ZUA+PGhxcDlrTEEsQ000blZnZiZbTF1aLlZPaW1BQ08iNHZTVzgscCs9OEdte116UFlCakUvLiFyIjFoKSFYeHs1S2cwYn1POmdydDFOZUlvMF9aZCwmd2o2fmc9WSV8JTFxSyshT0tyR0xrIT9edEFFZGc7X3A7dXwiZnVYLGRAISRhYkR+TFE0fm56ekgwYDZ7IV9RXjhjVm1KKlBUKV8/WXx1'@;
put 'QFgrNjBVP2s1WEphWXZROkZYM3NfW3BvNm5VYipwN3VRNFFkPVV0Im1KayJ4Vm1NNytSMDVSSFBTfWptLnxdRUNaUD41L3w4ST1mRTY9bEJOYT5iRV9hNlooWU1bcjwkcDFSXkVfa2U2VnJpMSs1cCx0UiZ8JU01TSYxW25EQ3AmJD9Mb3wvJjExUz1ISEckbTM+WnFlRDVLeEQjS1M8bT1ickJ4'@;
put 'Ilc8NXwvaHRHLyImQEVoT3p+YDRERGtadldmel5eUz1kXit7SUVEUkk9PXJEeyxoXXkue3lhI0Vfaj06Q35nSEE/bmc/V3BTdm57QGw8fXRMe2IxZkhrNE9dfVZSfDdqMGsuZippQm80XzI3anlyTGNfLjV0OW5TclU0MStJfXhWS3c1RmhNJHA5fVZUQGlbaEZGd2FdQDNQSi5aZGtVNjQ0dD90'@;
put 'WGxralI4P28qZEJQNktIOCZDcG5kKEhMamtqNm9OR1hZYzZtJWxfaDk5c1UiK2NHRDpARjF1MChiMWhWezhDOFs5VlpPYUVkYmFzLkIpdmdMJGEvOj4zXlQjSDQwenxlLzI0a3k4ZiMpSU9RMXhsPjMkNDlKZ14sNSEyQCltaGZwTCtnYTttRyVOcl0jdyJHemFKZDsqQEp2ODU3WCR2YiZJZzZY'@;
put 'T2dVK3diSztSM0lsXWlEZCEkJVBFNCpJZ3hZbkhnT0AhUGk9fHpCUCR3QEd8ZmA4a31YIWIyKmZ2bHc3SXQ7W0Eha0ghczZkP3VJdEdEREhmXXNUbTBxbzZ2cTtKOVhtd0ZROjR0UW91e1orTFY2QyxTTjVPaVF3YiszbyNjcDVlWyZnJTZMKjZMbzR2bWZzKCshRXA6PSE1R3lOeykpYV1WUXZI'@;
put 'QGdwTWJdTXV5eVhCcWR8bj10e09OPnpnZ2YjIlc2ZmkuakdSIXtbJCQwVTNkaktfc3puYn5HUkcmW1JLL3R8KkJrQzZGfCpVIUMjeEsoP1NDWzZJJUolXSJ4dFppQ1dgRyEhOElOUnZ2VHxCRC8wa2ZgKkBhSSk1cS9MTEBeeHAxWFVfQmRaaTdmbzQ2N3giXTZbR2djQERFWjNmQz97UyRRRDUz'@;
put 'Wjw1Zm5mRGcuI0pHMmwpTW5AXj4jdTkpRl5iY117IncrS2kkNV9lXXRfNSxgfnpaQDthb0o1cWdeQDAlTDd5Z3pnYyxbSnIrZzlvT1RCWGlGel00cDFONnpMI1p3ZD4/NzwkQktpL35QYjc/dS5bOG5xTz4sPEs5QiwpMT5HZnFtOy4vO3JiS30mdm51RjtuQFpyLzJMKk9aeF5qenZUSSpxcURE'@;
put 'Z0xyIk5LJSkyYEIyZVRhJEBPS151al13LHtOOG5yKEB7L1Q0XVE6XW88eW10dlF2bDlIUzc/RWhXKTIrLnE2PV1aYjtEel1mRDdKR1t4NGg/MTdEMC5DQSRxLlQqaXsobS9nMkJ0Zm5KMlVNPH59V1pEKCtqMj54YVkvUXVzZTljImpVMihmXj8ldU9jOHwyLG0ra1U8UWhKVktdT1ZlRDd1ezlI'@;
put 'Qk1DOyZ8Z2EsWmhZQWF4aHdEOHRaTmVsLGtNbC83ImdYQ1NSX3Q0eV1MZH1sc3o/SXdoLzpJOSl7VGxZcyFGKSxRO0psVVFKSmJOd30hMmtpLi8weSIlazMrcnVgSDsydzo6bEN9XllILHwyczRieT1aYHMkW0RzXlZJQWl0fW1BNTo1VGJIUzhGOGYmPEZtfVdEazIqQ2prWVVYc1lGeEZVUFcs'@;
put 'MkYuZFZQaWNZUjV7WS5LbiImalEmQTMpa2B3K2tEQld7SzNyMkUoOkJoWHFpYEo+eiJLYUVVSDI/InksTFJgeWZ7PzpbWXNZTltAN3ZBZHgwTFgidUgoX0pDYnkhMGBaeEo6YFFLan1RK2d1eEV0UnovOkk1dWBPSThvOVVFQyxSQHFkWyJLcllIPXNCdWpDfSJBbUwscD5IflYibFFoYlB9NCEj'@;
put 'fDE2PXFQdFM/ezI9JVhNUG4pWFUoY09TSV02b2h9RixNbEpdKj8jPSx0W3dKY29gMXV9NSxhW3BYV2pEb21yRkpRNjFuZD86X0A6XjJkaVsoPitqcHF8LzM5XmxpZFQsWSRJJD9LYFdvLnxGPj14S1RnWVY0Z3FHJXxwIWBvWFZ5ISJBeyMyZXl+ZE10KH1sY1ZaNkojJUM1Jm1zMjh9QDQ3Qkpd'@;
put 'UmlMdjwkZktqYTBYPjh9MmVUbF06SSkwdVZRZzwwSndXSUhxcSNKI34/T2lmNFkyMHhoT3NFPTk1azRUZXc3KTY1V0AjIyVbcS9kV01JaENLZmFpT1c2LkVYZDZxMnRqWWdhN1NjS2MsT1pTV2RCQCksOGYuTCg8RjEwayo2eCxURyQ/NjdifUNMJn1Rd3ovPCNaOkBtU0IsfFFdWkZ5X2M/Tz1k'@;
put 'ZjY+W1NLMG9BQU5FIj5wMSZ3Mn0ibCptKDBhc1pFV2g2XT9yUnQlNE9OIVt8cSlsQk1lSjQuKywmTTw7d0QkeCJFKk8vNSs8UWxhRkFkbTA/WVJddCgxd1l4d3wud2J7b3w8Wz50TlFYdyM2P0IiSV0mSzo2a3tSUkFMWCFaKGlIbn1QYU5sMlcjWEBuK3hKOEMqTUVPPjRnN2IpXTZ7ZjR3S3w4'@;
put 'QGA0JHksJEM3IVtaIzhuIjlXdFZQRFM8TlNTajAjcXVPTSFMSUBWYHlIclskTEt6WFFMflY1MiZMMzYvN31QKkdQXkU6bCV+Zy4uI0UvSGM6a2BbMEB3UlJCNE5sOTFvVD57TEdYTEBJN3hpblQ7Y1sjIjNUPkp4ZkZsSGlTSi9gW15MOSJXYkBKa01WTTg2eHNgNjEhWVptXz9+djxrI3Z9VkZi'@;
put 'b0EwdWtKYFFlbENTeC9TLF1vYlRRZFVmKjAyWz1mV1BZV2U0YE5adDhSS0hYKGo3MXY+UEcyaHVvbXk8cENJMyt6bUw9Qz9PS01oVUoxdyhLfHFQeXlffDFRakdPWjJhKnF9W2xfdEUwZGtMNTdeVzlkZlk0TntWdnBINm5WPiZdQG4yIykvTVprWi5YKz40Jkg+WCxDX0BVTkhvUltlXWgjazcy'@;
put 'QWQwJGY2PSg5fl0uTGB7IUg4Izx7b2paUFtXOTw7LjYoV29yPnVfSmh0c0Y8VnRmVWpYbWRFclkkdy5fazF8eHdCeGw6UkdWV15YZFkqbDVjYX56LnZwT3J8Tyt7TnIiWCpMVTtuI1pENy8vbmZzR0ZSaFZgc31oUjNHRnpCSiFMYStGaUF1QT5wLjxHO2MkSTNsV1B2bH4qQCNQKnokMi55MlNu'@;
put 'NE14WWREdzEkQDZEQnpLS0EyKWF7SDN3WitlamIwZlJAJCkzXWpVJnNiQmtyY2dyNn02Km9FMT9BIzdiUy5HdD9zMUxZaj96KS9aQXN9YDsqZEdfUz9yIyVxaXA5N2BqUmJQQkNMNTpmQ0drbSRqSj9nVUk1ZHZtUStuOjhHfXFkKiMremRSd0swbSlmN2IpKjB4flZWIWV7US4hWHl+eVoyJiFi'@;
put 'cUtla1FESXsrUFdAW2U/OiZ5MEZeLCV6Nk9hb204LGBlfnxyd05QJUZ1L0t2YjFKN0ddMVI4I0E7WTB3aExYPXZjS3doPWNzQj5FTylOUU4oX15OcDpLTURhSTdSYCt3OD9jO0d3RSpvRTddNHduMXhXMWVrZmAkNDV3PiFBQ2V1bV9uTWRzRy9faVB3VGY4NypaMlBtIn42YWh8KSNlTHRdSlsv'@;
put 'Il5dUGtyVyRpbm5rX0N0ay89RGRfR1siW3hsM0l4SzE6a2dII3A1QHdZZ3pFPUowRT48X0U2XyxfL2o4Zk5TfG1KaFFUbGJYR3ZFSEdPZXlgPjBIL1o0NjRvSDY0aUBJL3ksJEdubk1OSDxVOmE2Y2FVemkqST5LLiohSX00SC89SHc+WkYidCZ1PVNQRE9uMThQRj0vYDVPa1ZNO3ZQRyl3aH5q'@;
put 'IV9IQHNfNjFPfFtITEt2fkR2JjIiXyJjUXF8OVdIfUR+VkhjeXwwW05VUWN1MlsiWT5ASll4Qj9sRj4ucG5ZSSZ6e3w/RSF4e0B4Z202UzFgMWIiNUNFcUdoYWQlKFdrNWtWV3ZOSm56VXJfNz0wWE5bMTJpIj9qP34qWGNPS3lWdyQofCRNTVtRSWdFUyR2MHtoXkAuTEBhR0V1cjo5MipmOT0p'@;
put 'cXQ4UyZjd051eDMie1F4YWZGYCtWNCJZTFAzaXxXLk5PKXouUGt4TkVrT1FTNFRLTDdeNWM6OyFgL3FIZEtsd3k1Ij5SMT5FNShvK3F4NXlAdnt5NjFCUGhNQXViNkA+ciFaKWJJdEdFMHpVdjlRSilRS3txVmxnYl4yJiEpbUEhVFZ3SEowWX0hfUMkPlUyN3BVd1hjK2RFVUNrRGU5V0w/QFI/'@;
put 'dG4+KFgkLmxGTk8se3NrZTUiay9GNWwkdSZHbkIxalR2cV84MiVFXzphREhLKzwhP1ZDe2pYM0AhPGJYaFY4cmZBen43fkMqX3Z4JW14OmdEejUiZlFzQmVkaWteUSwzXU0wYTZUY0dFJXNTa203SHhHLzlbVU1+NXJQNSR4dWVNRUQ8OildWnYzOl53YGgvRTAvaDdBT28kYzQ1SHlpa3EwYXla'@;
put 'KkJfUVA5XnF5ODcrTVVZa0BNK0IxVX54XVdRbFheT3pwVHwsdHlwNlpTY2NBU3NSUD8qLjsyPnEiWHJsUk9CSXVEfE5fTSw4XS8zVlQ1SC82bmp7LDc5OWxDWDB2d0lPOkdRS1E7KVJbNV1GXkswUFc4eTRWZW1GUT4xenZKZUptZ3s6bDlCVD5FdEJmcn0oeUBQQiVZZGxVKWIvTDszWj1ALnQ9'@;
put 'LDZ0SzB2b34sSypnMWRNPF9dP09eK0Izd0JQKlskIkN0NXIpd2NnTGlabEBsSkhrYC9mYDQsST8sZUEqJXo6N1RCT2tvSVZCJXBKVXAud2JvRjphdFhma1AuO290NUc8eXpdJSJbRkM+dXRacFd2TCxRQVYrJj54Sz1XRkR7SSI9RHxlfSJaQ10iMG5dXVsmQjUqfitTUGVvRHdoL3hvbTZ3JW9M'@;
put 'NjtebyYieFpEKmQ+SUg0ZmhOa14ifFRybnJKaTAkVih6WlE3aV53ZUZXSmcwW2teN21QNVR9dTZOYXluWFMpNmRzO1R6JH5oTVlrKWx1cmhRKyU5IVE3Yz8wZ1QpZ3xkMUN3c0Z2IkRnR0xBSzE+SUxtMS4pIj9xRGtTWDo2VzEhN04vYy9eYyF9e1o0VXQ5OWR3N0RuTjdIJVEmQX5SUz5bU3U5'@;
put 'WkoxcFI1ekZiUDtAe3t5Slc4W2poSj42en1mMW5BSyY8dyRWYUVqLG9pPGdtMDA+Sl93OkcoMl99S1BLKHxjKXQ/SSQvbG1mK3t8RSo7eCJ1WXZgI299YXE5VEJeeGFFTXxxailHRDJUXnkhWSpNLFVZVzVxIXo8a0siby9GOGpnUEYhJndAOXslL2FQPnNbY0opO140TkxgNj5IcllwdmlHbGcr'@;
put 'RztFfio7V3gxPjBUI1ZuaSk7e0x6dkwheU9lJGooMCNeKit6QVp+UV8zK0xPeTU5XnVsUHYsbzpPckluP2RsPGljWnpSX1tQTiVIZHdAKk1DMlRNOX1dYk9mT1VUQC4mL243Y21WMHpXO3l9WlpxbjgrZGV1TH45Nzg/RC4jUTRdP0lNMTwzKUZfKigyOWdFciUsJGZda2BhO0lNTSJXX2Ijcm9y'@;
put 'XypKW0thS0ZKe0pRTDxCeXVKe0YqRT4oYENFdypnYHFKUEdKQ2NyfC4sX3A/c0grXVAqZnpmUjAuJSFVOz5jJUc1fGgseDZUIXBKaFdLJjRhamdyY1t4Yi92cHM/PX56YWwwSEdJPE5rUD1LT29CXkJ7U2x3ez5bL0h2dm5wJC5OaiYsU29nZmlvL1hGOW9aQ0tMR2xPbFsqbzl2bWJ6cXAubSxU'@;
put 'RzNLa0ZOX3xrQ3p1V2dlX0w0YjFJMTEmd3NwT1dwOilZYWlvPkFneUV3NmJdQWU1XVljOG5UOC5yeVZvRUlWW3A8SUxqNS9deXJXS0xAWDA3TVJSaD97NTIlfnpTfUV2REhkSyFRKlpHfTY9L3UwKiUpIjtUT2tdNX5tSWx9YW9gV25eY007XldqUGR4R2BhI0ErISU3XXx9MWFZamAhTll2ezNR'@;
put 'Lm0rYT9iZH5eZEhdUTp5InxzQD1IfClxcyshZGJYOH5jUH44Yjcoc1NhSGJzZmErbCw+fktER0I+MVU8Rk51eHc+LCw0SyxzclNsLzkxdWBOdjdtMEE7QVp6M19wRnp5UV9VQjd9SlkrRSltPkRAQHVBaW9DWWp1QHF5RytdXzR4YDZOPUJMYUZbbURFPFhDI0poZSMuWkcvVSRRTCsickZRNU9O'@;
put 'PzU3Uit7fjJAQjlNX0VlXkk1OkIiUGYmYk5pe0kwPn1OYzA3S0IkTXZ1NzZ8VE9HM0Uyfj1mRT5IN19eeFtOL2xGIVZwOUtERj88YChrTUtEJGd0WFZjTldaNTFZUUM8UXI8TzEsT106RiJuNHA4W2BxNiJqVDhJIXhFNGdNcUdQV0dSc1VNeDtJJEZRc2lqJFA7WXlkZCV9SXs4dn1qTHdsSkhn'@;
put 'Pmx9emQpYEx5YWhaMiRNcGlsOjRzcU5uVy4odDBNezk5T29RNHB0e1IlKz86aEclQl5FaWZ8RTA6LyooY0V1aHcmVkU1TF13eDd5YihobUxCVTlUUE1RRmN4OHM+PSpSbHdYLmF9N2NMYjdnTSE1UW1uc1BsaDo7QisjO0d+eEE8ai5hNXVBYzY5LEw5enlidiY3d3ViLy57Rno/VDhXd089VkFQ'@;
put 'T1Y6RVRqYmtAIWU/SVhgdSEibylANjpdIU9yPGNUWTg+PE8qNX17UWk+SzNYPksuMihTVk1dIXopOHA8LDlhLlFJKGVMP2dDKFtpPVVGOztQd0JBPiE9YUtWaHp9Zzw3JW1ZPnhsWExGOGd8KFdlN090WCI/Rko3RTQjIUM5bnVmVnJCLz1kYTVlQmlwUEpNLDBpRVI3MT00d0xOXi9rOl1daWxI'@;
put 'UXJ1KWhoKFFCeDVJUy5ufH17enYiSmJpWk0mZGs6QSN4QEtQcmBrNVJKNlNOS3IsSF47T3dmS2hKflYsJHVdbnE8bT54SSJLTj1FMz1pWjR9MjM1OWEwOW1ldz4+VW5mYyxPUkkyMEtbV35ac0ZnQEg2a3ouImo7XU9YWExmWC9XOWU/YkdwKiU4L1BiP0ZYNktqITszMTVZI1tXYmpmMCgwVGNm'@;
put 'IkJAX25rYXFqZCR9V0J5ZEszUiMvOlRpVkREZlc5PiVLW1ZFWXtuaC9Welh0VEA/XWkiJFA5dTNAYjRrJDBeSjJaOWhnZSIuYyJAKy9mTG80Ln4uLEZGTjJ7YjJpKl1xdi9pIWRFSD9fXyViSWdAPlEsXnVSNSMqXnFkWX1xWSw6LiYwViNNeE82eEReXilfNSFNZl1wa3JAWVBUWn0/cFN8eiVq'@;
put 'Yj09bzJCcyQqTmdLWVFoNjg7WG1kbjEiamIoYmxjKHhMaENBL2N2Sl95aHRCKk92PXxtJWphK0pdMy9zYGN6Z2I6TDlHfUZhRH5AVChQcU5ZaShqXyt3dCZrSy9EIjkzXS52Uj1dfCEkX3orYTU/enpbSFAva1dHR3tWa2BmdkIoVHZhNXtuWCkoeUdgOXlrdkUuNlJbVmcham12UiNmNT12O25w'@;
put 'N0pUUT0vP0xKNFZacmc5Rm8zMjZZPlRYMXd+aVtKejJHK31pSXcpV211RFhmYSRmR1hRJT0uKmppW3VtbGpAdSZ8O2I3eE9YLGdic0s8ZmVeUVJ0bXpXZDkxUmRWNEMkR2xiRnNVI00wQUooS3dsZ1pAfltVMFgucm1pKjp0KVlVd2xUMmptaWpwbih7VmtGeD1RZVE5YllNTHhBeT08TCxOQ2xC'@;
put 'VkVIOFghaFNjUzp0Z1N4STksM0JuLi5DSVp6IyNiTix1b3VQXVdYQml5Q1t1VmV1OnhnTlsxJls4dT9ubGN+UjVSLDcpIyhmfipPRE5yaH5vd2ttLl9LPDtVREhSSHV+K2s8I3ZMbC8ybnEoYEMpNUApP095UjtqPT5AbDN0ZUEudGxgMCM6ITJfUGREa0RiNUwqPEhQRHFnOSZyN3l0XjRbRmlQ'@;
put 'cUleZihUcSpgbyRZbG8wJmJ9U0h2L0ZIIVdCYlE4RWJxPVs6S0JYUlB8OXhBSj5PIlYsZGY4MEpDTk1pck0kNW5UNExReSJJKncsUiFkJG5SdSI3Zkk9KjJNWXohWUNUbV9GYkwxUVp0aWFjYipQb2VKM2VKMT1vZkVnSjBtV0NOXiFKUDJKTGN0eFgmYiRUWiVKXlVZNnIyIixKYCZKPXpVVlNB'@;
put 'X1VRcTFSc2t0Rmw+fStzbjgySmxFPEl7bi5gei4rbFpkOWNjWktrakdre2NAVD9sZjlHV0AhVURRcFZMbld1IT57S2ZHUiUjPUU1flUmWUx7cVRHZzk7L0U5WnFlWk9eVGM4a0toJUxJUG94MlQsVF9jZEJmZUlyd2BEcil3X2Job35LPG5bKGZSMnR1STdtWUMlZCV2RCghaHZaZ35RZ1A+ODgx'@;
put 'e05hOyRfK1YhPF1oSmdQdVlHekslNkAhO0Nmb0BHVSViTFQ2OEx9JGtnbHFLdkhfZWQ5YS96RzhqNywkLiJpSn4hOCpnd345Jkl3TCRpfUY8P2BqT3xDUzB6M29TflswOylCe1ZQVz5KMnA5dyQwJGJ4JGtuTHBON0BLODY+SWZmQiNZITZPJFdDOGlIe0BMR0AqN2BOP35eT3xhZ1tjUkh5WSEi'@;
put 'dFk7SkdPTmAkbm86JlVeM3woL2dfW2xlNlltWFVrcCFCUi5VYnxWNHNqQUU2Mm5Abz88N3l4digpMUc6WmkqOE9oVllsVUtSR2F5UUhPUDcjZUpBdCw+dit8LkVddmhQOix8RVRvQGNHcyI7KDVueyg3cVQycjNfUSw9P1ZCVmZoQjMuXXgjOkQ/I0FpczpIT2t4dVtUY1ErLmBsZnpXMUFGZ3s3'@;
put 'b1RYfEpEQFRvZFg3WylFJGwzJXA2bHciRVVWP354VTJgRDhUI2szSyhLWlJJU3R8JkVsNmpza2E5MEZVcHxnXW1FPS5HVmVLVSJBKVszW3s2cXlhbjc+SU5kPWVGZWt6cUtrek9LaXZtTEhqXjpuYmQ8d2Fbe24jM205M3t0PXZXZUJYa1VXa3loPCFOTmp9ZnYkJFMxX2lEYUxMfFNSMip+TE4m'@;
put 'eEJ+RSJWVWJqOV5jcHYyMypIT3pLSyRVcj1sO29mNmRAMXw9MWlhISp9ME9QZnNtQFpnRXJRaD81VzR9WG9BPXAsOGBWUU1iV35KcGNoYD5XYiU2dT1rbClBJShzX05uST1LbzE3Rn5hbigqKHd0eH1XUFdxW2BGT0x0XjFiTXBNR3RAdSo5TSowM1tAcnsvYCZ8JktJcjV+dU96RiYiM2JUYC4w'@;
put 'VFMza3JJTDdhfE11LCx6LmJGUjFOMFJ5UzNVKVM1dGNwcjYvR3IiXXJwS3wxV0Y6VD1hWjYySGdtYyEpd0w9ND0zcGg7NVozPFJ6Pz5qW35dcXZAJFEuYFZLMXpRbDc1PWwlLHA5eUMpenIifmNWZkRpVGhjL2A/RC4iP1h0a0Racjw3XUk6TSxwKiNZTDRUNWFPXzZmLmRqfUhPdXxdTkFQeF1Q'@;
put 'YHduMm95Zy5oVikzMns0P2NMQzZjbjt+Lj5zaUUwcVtJakBAX3l1emJ0UXg3Z018czl0R0dZZ2ZDRUZkSFJ9MTc7dUliP0l0b0hnUzdBLk1nO0MxaG4kUnwuQmAvLz5rVXdBU3lLOzcwOikoTD1WY2ZZOE5tdlIjeDs1U2RfYmI1djAqYXRtfHNhN1lWQjRHXi5tIT9wWiorQUJSbUVqNngvPnBY'@;
put 'd2I4Q3VSRiVJXmhIOi8jVyJWPXwod0MwLDR0ciQ6R0cocio8PEkkQ31MTklmUyVoZXRSM1BJWDtCUVVwYippPlZPRC49YXNRIXohbkpKKCYlTlA5V29oI0hdNEtgN2ppRWpuTjxnOW49W2BPSllMISxUTip+STVNd3svM3VpOUc9dFg+Wj04ISx0eVE8Nzl+IXdJbWhyenchMi88KShmM0tdXjRK'@;
put 'e2UrVyhCK1dqdGdeWFoqenhLSFZNNlY+Nk9eTlNMVT5nRlpvfkw7SGA1R0Mja10la11jZ3h8VjhyKl1idU8veyMmQ3tKa011THZTNDgsZjZDdEYuNjFlVGNqbGlYfmVtalg+eS9PL044cmA1d2NIXnc1dHpqeDxrTFdSZ0RVfTN1ITQhTlZNUkcjYSZNendAP0VxUG1NNFtZb1MzWDU1KVl7W2lr'@;
put 'O2phQz1yJDQ9Kz1gJXh9UnNNbXhwT01hJTcyUiReSjV8TUVlMUZZb1ZRQUYmQlA7VCgpKVJuQVRmNHt4L1JyS3VjfURyJFBuTWtwT3lkbmdBP1tsXjRVSjhhUzpYayRZNG9WJGw7NWRkKCxQejIzSF9OKCRCMn5LOWtmSk11N1YrMm1ITjJ2M29iWCZIc3tBdkdLYTcjanRGLmQ3eUpWSyhMe09r'@;
put 'Qm5RdE0uOTEjSjRmT0FIV24+RE1WanY7JSJHVTlrW1l4eCNFdEFqd29majxUdHFZKzdGKUA6eT1fcHZPSWBTaUMvcGxJNnV3XUFIK2xia2xwfjYkc1U7I25GR1dGb0k3YkF+PihoTGJWQDJiejoqS1c+MHVPeG1pRTxyfj1tc192SHRDWnxMamtRLEtsa2FeRmIuMS51RntIfkdMSThBR0Fqd3tD'@;
put 'K0BUKEhLbz5Eb254e0hKSE5iNClwIXtnXzI0LG4mIzYyOUs6elNBJCtsWio4SH5TbHQwM316Sj1kbTE5V3s6dTU5anA0Sl41KHxhMCtLZkUyUUZmN2VSQmY+MlV+LzFGIyZGNVdJNzlPNmwzKG9OSU9QMUVAZi9QZDNxLH1jWnl8K1A5ZXU5YEFKbC9PeyhYTzQvZllBS2VWYVlrYzxDWE1YZzZb'@;
put 'Wmw4WlRaPmh8OjV7NVQ6S0Boa0U8OnNUMHVyUSFsKVFuPTYsRGtePW8wKGJ8KWlHfi53L3lPPnxdXlBiT0okViJqNVckcXVCckR8dEREPkhyNHtzWltYOC5hbj8jeig4YnYmKkg0QT4pWThgN1lndyt2T3A7bklqRm5eZ3dlPCVgLEFbZShnJiQldWJ7d2hSTXdgYmAhX1dhc181UX5bdk9RVUJf'@;
put 'TWwoOHxkSyZZXyZ9WzkmdEJIU1dMcHc8bm12Z0xOa24lS3IuczhzXlR4Lnk7UFpgTnpVfHJyb0w2OSNJMCRmamp2LlM6MXFtbVM3cElyYF51TVlhfFQobDpDWEF0KEJ0Pz48MXVUV0dZV1FvUGwlZ1VvVXRid29DbGgsSHNFU3sjJEQ0MHpMdGlvTlJVIV92YEcjVFhyaFlWN11KNkxzTVFZQnsx'@;
put 'MkB6SX1MQyV8dCk3REshRHV+Z3xeZSpOJE5RJT93Uy9VT0RaN048OVgjRmNJV2pOaklSSjhGYC92Yk4xcSU2RHRfemxOYkl6NX5vL0JyYWAxSCVxZT5rdXF5a242UXFBU0RRWk55Rjtxe3xTcGN8QCsheCJifmtoSkwxNlBHQ0N8aVAsfHk7UE9HYFVEZH54I048L1k7PmdDVl1iQkdwM08/TWp1'@;
put 'a3xZRlFIbXk1RVFVKS5xISZsQSR+aENMSHpPPk4pclZydHUqdj8uYnJ+NE5kS2RlemQlKC4sWG9EXls0VEU8NT9UXlUvWHVkTiF7WCtYQE83Q2A1OElDUlZ4ZVlAMS5wUTE1Plk9L0JUfUM4djliO0QoVG4kIj0kTFpyYzk+K3Z+P2I9bCZ0XlFxeTdOb3QzfW4iLlk6V0F3Jk9fXjVCbm1tYVI/'@;
put 'I1RPVXY3YipbUW5OL2dIO0V+XlZJfCs0Plp0d2M1fk89d0VHS1ZrTXhte1lSYD5eZWo9QHNCdWRhVGduQUp7VzhaNzk+QHVnRHkpd3prWjovLCw+SjgoLyFLJTM6bCU0QHtRVVgwN19UYztvITUjMTlMQmlCZCVEMSV6VnhdR05zWXlvP0w+QlB0SnwvOHc6X1JAckdlKEpwdiFwLnJfMnpiN050'@;
put 'aGRpenJGa0V5YnJSZSkuYVNFOkpdW1ZANF1QPDMxTHlHKGhQSj15NHI7fDpmfTNwJEF9I1FUUCQ9UlhiMFNbOEZUT3tjJnR4QUpqTkd8c11xdmd3VlNnZG02bXl2UD1wYU5ubSpuajRweXwsbFJuPzNSI1ksbWxUdls4d0AwcGZVaUZfST85ZVcmJEhAdCt3JUByMVJkMVdiM0heYT8kKUkpdWNh'@;
put 'fi5CKyExcThSIihqZj9QcWt7ZG9CdVdNLmYvIXU5Z3o4bXNTNCE1e3d5V0EyZD5dVTFLS0h6QEkpXVQvfmlHelRjISRJeFc0OTZzcVomOGYycm48dVAlVUArRDRQX2g3TF5IWmo0eE12NlZ+LmF8JFN6akhEayg2X2QwRS4uTW9+YVhQKkBhQElKKFQoczIjUlpRJXJ2b1ErWm5LQHMwP2JiNTBV'@;
put 'fHNAcSwlKDMvekBCQ01DOmUzVi5oTEpQdUYhcXNWSHk9eEB1Pm03R1Moam5FaFl4fCJmPn5DPy5OVD5QWXN+cVdBNmBXbVUrWmslc2E1cmxCfGhAL2Z8Sy59Zm5LR1YqOTZNfCNtYmhATXAvTUgqIkZ2PnZHKj1bNDRXPjhwN1lgd1AwPWJzTyMvdihFWCwpTyt1Z24+O3p5MStkYTNKY1BpYHhn'@;
put 'OmhfezhrIj4qMXNhPHhAIy9pUUJkNihPb3I+Xz9DdDtjPDRTL1YuTEZSc0pra0pxbTpCe1YkaWRPYG5YPDZOPFp+a1pUaysjS3RRU2h2Vn5BZmt4O19QP094NEhQbm59P3Yma3lqTiN5dyI1WFZIbnA3TkpJbmQwb0EpKUhQU2NSdlJ5UW5MTkhTOFVzRGVqXkQ9OkpzV2NoTlFVISRoUFRhRCl7'@;
put 'b2dWKWRbSUllemYjIUB2bGZfWkBaPGJwImdaYHAzcEFINjRlZk9Qa0ZURV1BPzReQkcueytqPlo2WGdKOHhHdlo9ZXtVMFhRUGlOOkJQQz92dXxEeHIkaGZkOSlWOiVWIUtRbTIrRnFiVzsxOVZuWjx1eEVRKW1sLjsmfj1WeVopJTI3WTJdfWosajA3SngmRUhmWUtefDh9Ljd8YmxGW0JeSUIv'@;
put 'Klo9UW46UiVba2I0eWdQLlBILihpL1AqNX15VVtsJXVjU2YlZyo1Y0lwOmkxLj1FXUU8NWVlMFRJST9EPzhLXXU8VFRwNkJ+RFt9Q0dGWXYuOyRpNXhlRkZbQHZ8endWS1s+JXZbWll9OmxOXU43JF9tOEQvOFohdVFqI0ZSeD1zcyxjaXJgYUdyT14qaklHfDNjOG1NN20xZFMxWiohTyxeLnZ0'@;
put 'QWtudnRaND80dWJiTiIpXmppan1aP1pMaWl0byQ/N0xbaV1NQzNhP2UqN05xcD0hKHgvN2w8Om1yaihEIlYjc1VQZH1dNzdDL3BlT010eik2Oyp4XnIvIXhZUTtjQTtoV1Q1VmhFTnh1TV0uRl9odVlNSm5fUEdxTDVJaVo1KHFUYVYvdztHQ2M7O2p4OjJAR2RXYmBQamc/YGkjckN6SEBpaFhj'@;
put 'Z2A5YEZnMWBlflNNOXNtJkR+WlJLSUk+NXovXi8qNiNiUF8vOHthVD1yOm1bWSNnJHJzQXxBTH48SEJ4YX44SD00Qjp1eSpYOztETjdoQCFPUUI8WUVKQEFOO0Y0QzA8cCl8Zjw5cCs+XTc/bjIwJXcrakElUlJTdDJecXRIW21MMlE8eDUuXzdyfVEzam52RTQrTDYyJEpHZWJYaDtaNyFmekEm'@;
put 'ZHJ9OXlAbUVjdT1sdVVbJjNjbzgqK1toSHFZN2RNZ2NLZjdkXmJra0ZbNzlOK3lefUx6fHkxTWRLQE44fnoldDE/Q0t9Uzo+SXchMTVWaVpJej04VGNMT3R7XjIkX3cyWU9dRENBeHVIbyQ0YFZTPTxCVj93NXBZejtrRW1iNkswe3Zvam5OKGJSdiw3XS9SVGM/eSQ1Km1MTVclM1AwVEFPdUo9'@;
put 'YkM9b25PdXBUKiU1US5jWGk3SjI9fHVKL3AsXXloQjo8Ri5tdyI7aEd3PTlQNGQhRnZQKSgrW3ReQlApPllldikpZTZreHY3ezB4TmJ+NiRMOlReVHRkSHsoU2lIbD4yZ0FtSG1OJmk/cCtYSChCPStUQGIoI3c1OTxzdERtaGI5XWZRV2c5T3hlb1s3OExBcDR1Wm8jMXUrPW9WZSU0PitvWTA4'@;
put 'fSRgXnR4fHF1WDRYWUY6TTlQPTh6ZzRiaUguI1BeTGBpIz1XPFtHKV9SYW95RHxUeSlGSDJmcys5PW41fDc6QVBAciU0ZVI9XU1NbUFdIW9zZHU8IkUpMGspXj0iWFg1V19FJVZUQ3dOcVtpX3coNV1LS3krYVVWcmVPdFE3MDB0andvakgyJXxMIlltbTgkaTZUNSpea0Y4SD9PLHdQZl5pXmYj'@;
put 'YV9qblFFdyQ7LGJxKSltZnVFJiUoM1l9dDp8MVA+O3lQIlNaUFVBSSpeKWdYZDQidDY2VyNZM0dmPEIlNVtlK3RIOXQzRXs0Xk9WVi5oZT9YWXUzVjxucjJkQ3BUcl13RD9LQFhQU21WaWwjQl9vKTRIXTB3cmcuVGYkJCIlSWAwbGBvLHR6fjZ1P2x0WzBFUVlsdSZCQG4oPVBKQiIwJH19Tzgv'@;
put 'fWxsblNIeHRVaCoraTI1dixDUThdKHdreHdnc1dSRXRXVSo1SiN2RSExaGhnMHlQTDVJXyYwLys0Sn1xaj5NUH1tdmVmaHRsJDdUckVpfT5ILk5oX1hNaWAmM21Jdm9dak5hJHpOX29+dWY9eGM5V35kZS9tLnxTdS5Wcls1JDosSTB4OW4ucEpvRkkyKmp1a1VUR1ZOLnx9RjJdMm03fXlxV3Zo'@;
put 'cnU8djB1fD1PMCsxX0Q5LHtbPTQuTUMiNXZOWFt4Z0l9dSoyLklrP0NBUlpVXX1iI1k+Snt+P1F4YzIsM1lyVVVJa1BzKntfYHwsKm0sL2l+a0RePyQrfmNjMWNkI096cH1PfCR6dDBlNyRzUGghSW9SOXdINDxob0B3SiMkLkZUeHFjMj84anRiMH13V1MlPVU0SEM1YGBqeE5SdlMlKjx4MiQk'@;
put 'OmEwMkRQLCtEWEQ6QGFZPEoqVChhYk8kO1Rhe3p+ZXBWdHgpLEVmVFZIPFA/KltgQylqeXtBXXhBRCNYMHp6JCZSQnczYnN3bXA9e1h7cGY7PEx5OkZLVmUpLyNQImhvMEZvN3V5Rj0uJihnKU1HYG8xI0wyQCFgPGtXeDw7aDNqK0I1XShGd2FKOyJYOzpjOn0iVEB8TjdnMlFPVD5MOD5IUj5i'@;
put 'JVBzSlY2YnpYMU9PdEl3VVBfUWBMYmszQU55b3NYXVJhZVMkIVZpLFtWN0JzMWdLNkFyeSVRKiE1Pl5bc01ERkdLPnZyQjZtOzJEZ3V5SFMxYkhQZFt2eEl6IVJoalhqcS5oMFUmZy5CJm1aW2djOVJNUDcvZnFkO1cqV2dWZ2BxeVtIK2p2cnwhMz58U0ZOdnhZSCVzKk5uUngpZE9Fa3toXXBz'@;
put 'SnZeRWJ4YzpUK11vPHQiSTlOMTxgeiE4c05PNT18fCRTL3JrQGdZTmNTIl9VbSw8ZyZuREpuKj19PnNiSSojMzk6IXwwP2FBKX1Db0Q2U3R1ZGdDX2AlVWJrdCE1MyE0I2wlbjN8fGJmdGZqfmgxZVNwIywqOSxSV3VyXzd5TH1TaDBWWWtDTkZILEM8L35YKGxCamY9YF9KM2ptLztJLkNLRGVu'@;
put 'KEl3LCRhJjNjMD8zMGRtVkJ3T087YGM0VSxZZDZ1NjBXPWBVMiVoNUJIVTJrcTEyPTxOd1hmXip0WlduamI0YkpaV0I6I2k/b05MRCJQbyJSTi9nSHhgPnNhfiQoSmYmRHY4Qll7RzV0RGxhTWVTLk5RKjd0QT49UzhzKExAeldaKD1rdVV3Ik5NdyIxeCNBaHY8VmpMJj59MF4mNVVrJjxhLHJj'@;
put 'N2o+OSI0cGVxXTNIRX0/dSU9Vj9nWyNba3ledXNdVGRPVi5ldFMyWVMkbmw3SkR5Ni5eUCRBI3V0OUFTQG5ZQztSd2Erc19DdUJtMFkmcF07R3YmeGZANFZmYDdUKlcucWlnalh1c25RTytofDclSyNxeEdKWWVeKzM0ejw5bEYmaXM7KVpMQksuMCR2RHRmSCs+P3pMSX1FK1Q0QnRgaHhPPz1s'@;
put 'QUtvJGIzPypMaitRdEUpODtPdHpSTkY7akBbIVh6dUx1K11Vb1VCfUxHZn51dztac3Ffe25JUEBvRCxMI25JS3pOR25FXW9xUFRsaTRzbEU2Iy5hOSshfUwyTzohTkVPOF91S1NjOEcuT09AWyg1Y19RSkB4TWZ7dXB1YiU/PlkhJjNUR0hHYm5bdjd8eGlvWTd5e0lKMzNraVh2REs+Zy41a2gw'@;
put 'Z1o3UFp4RmhFWHVnbjQoemUhUVt3SHdHfTIqPTdMQDZbeFpldHFxRzN7cDMqK0xDYTkxUntxaEwpL1ZpPmJITUtIbSNXcVB5fDkvYiZhO0ZYdywoMDNsREU6QkJ1P3B3fiV8aG00Ml58WkYkQ2BzaDtTWnAzS3BlRFNDKyFmaFomU0Y8ImVCITtMdDh9XykkJGBtQlg0SSlxY1dHc19afEtfRkdf'@;
put 'M1ZPLGlBY0pVdlouUlIwdk9Eel85PndlfXt0bkBIcmBaVFJKezhePFlXTzZGfldfXjk/VXZ6KzpDTUNPbHRqZGNdJXxgXiphPW1MdHY3eldHTnJiQ1ckbVh2Z0szVnlxZkkrLDtjJm4uQFVRMl43fSR6Z2cxXkJ8OyRrdGIyIyxCM3A1bUVGcCI2fXc9YnBLRW5OXT8pWUxGbHFIJEVGUGk1Y1Vm'@;
put 'Zl0rdy5ISnxJMDF9RUFBMCxFTjFkczQuRDZNcU9rbkxEKENYc1RkdiRXLnorUkRFImxnaTN3OU8vKGU8OVJaMSgycz5iOzh8ZWZJSHsmbksjSnhEe19UaT9eVy97MWghfX4rIX1QbE5SajhAMkh4d3cyRHoveG5nTV5uNVdFYSRkMDRjeCtSbHNHLyt8O18xLGgqTFliNiNzTU50VVo8UmU5Jilw'@;
put 'PUh1JVpUW2pxKTFdSiw9LDJ0YmlYM2V3d0YmXTB4e2pPdSNZI3d4LEVieCJOfDZNUixmSSsyOGtMbl4+U2pdTksqJndCXU9AMHp1c31NIVFKNndmJVVfW3p6IkdzXnkqbmQqZktjem9gZ0NNYFkwc0cvXWVxbXJGW3E8R0gxT1lJJCh7UHMwdHR+elZZW0h9YktjTEsyXU8jbjduOUwyPSMxaGpM'@;
put 'ZkB1QkNCXWRzQUkxUi9MXltHS3plRzQhOj9RPyJHXVJNXVpFQWMzLmV1PWtVPGE6SWdZY3VuYG4icTJ0ZFlQPHZzOEk3UFV4PUhkbEJSPyF+QDFkUyx8ZCl+XzNlbU58NGRmVEd7IWxDPStrVE5wRitnNEUranJ2YiYmMTt5TjI7YSJCTHczentbfFFMND5iXysoWWVjRmdkNko1Zmw9PEp7QWdg'@;
put 'K2hBWG9idExEXW0uaVZ0LilbUyI8aUBTdy5zPnk8Zjh7bkVeYS5SRHN7NWh6RE9jT257UUVZU1QvfD06RHtnOyVZRUt5KEI+azExeFA9IVl+eDtFRXcsYDFiPiosTl9sMXFfU3dMIj5YTmhya0s2UWMoKys3MjtlPWB7N0l9ZUJQfWQ4fGplI0g4KyF1bTNBQDQzUiZ1Q3EjLEtJTyZjOzdDbSN5'@;
put 'SEVHfTd3MT1XQnd8SzhqPFQybnQzXSUvQmImXjBNVyo7ImJENnZUNUlSbGNgLCErYFhUNXJ0a2FXJEY+SlQjOmxJdkQ9R2lLQjFJJmNsMDNtUiZ7X2s/PT4hWzZnWjovQHJLRztuRU9TRzZJT11KMCJqVFN8Ky9uQUM/NVVOVE9WXW15VTsmakJSQmE1MCY/VihuV0J3S3lweEAiclE4PyZXKTgy'@;
put 'NFF6QioiJCVNMzduIz5DYylGUlR0SExnMng4bFk/TFFmJFpUI0RgXlYhd2xqL2AkZW0sbjxQXkddNjVAQTwiJiQ4Ol8/fjtpcUFHeVNbaixePmhge34sazEuSjQ7LCp6dW5jdyVEUSsmL3k5ViFSdiF8fGk4R3tFdT07V1p2WXliNDFiOlBPbEVKKSZrQzQ3YVpRaUIuNT9yKVNZY3tFVV9MLCVy'@;
put 'SVNCWX0uXnAwL3NAZVByV0E3YW9TYWp6fk5mKTg5QFtIKU97UUdSIUpOPHR2T0FTZlNQdnUkbzgxLlQyQ2BqWFkhVSt8OjhTPVZqSz9MMVRbUFQueVtYZENRKXdhVXNFUTtvamQ2ZF9AJXYyOiRbK3xtSGU/UzBOOFQ+a3t3ekpgLDxAa2xQa2kscl1pKU5yJT5kSit1O0NNVWhNRS5JOnVAJGBI'@;
put 'JVVDWiN4Im4uZ2RUUyNiOz46aDZEW1t4QzM8XS9dOW5UTEMiOlZ3Y0ouTXpaaXl2TkMvKjBaY11IL25gOVFMTH00RmgyRWpKLGZmPzVNYVFNW2x7NmB0TTBHSkJFak5rbjE3NUtFUjZRclEhOEJMQkJHOURDekdNdDo1bDlVcG47KHcxa1dzSyszeW92QTQvMl96M0BhZ1U1czloeHclQi40e3px'@;
put 'UXgiPlFkJW9wekU7KmNiOGpaX3hibklbWUYkXihISHVoOkVNLzFRemMjbGBEPmxeP0o8Zz03QismLmReMUQhVmZ2QCYiIVQoflVZUkg+LkJiWj9aanMkVTRKKFV8XyVeMXM5LiVUUWpiRWtzWGRvb3F4QyZHI0d6RiRgKGglMWFDI1dxOClzXS93ZUp4KzBsYTxFeHxALm0+cXRrZCZiczQqKDkv'@;
put 'RCJVfFMidUQ6MCtfUF13eXxxdnltW3hCKnlzWzl3JC8sO3RjaV1FUE17WGhMSk5VPitzc2BBSkdvKnMyW3dYKFEwLHhEZUJjUEJnQWVUSyU+eGlQSHRXRyVrcyhVTSVqNjw+amdDTWhHeGpJeSlyRCJdLGgvUDpLbkBfMF9tczdSbl12LDFePXhKczQ8LEZOMkdhJHVqZ2EsKjkrVkVHQF1FY31F'@;
put 'O3wwYj9iPz1dIV1IWXxIP0JGcylxVChNXV1eI1paK3VTTzZNVipnRGBbJmozSjROKk9dU3U1RjU+SUJMNFhpNCI4MDV4amE1KjN9QklbTHcuQCxtfC4mZGt3TkVqMTkydTAoLFJqb15mUDZFdC8qayFPaTp8XyVxTm0oWDJqblp6Nklka3V8Lyp3PXZNbks2O1VXbUh4fldiY3QxPn47fHFjIVlD'@;
put 'QShxLy9AaWFvUyJ4Y0IyMShDU1ApQld5ayhyW3h8VEtqLFdaeEViajI+VDomZF8uNFtePil0JiszcWx9b3owQSUzWnBhb2VMR3p5dkhbQjpvMVJ8P2YrVGpDQGJFQCtnb3xybE9bbyVCMk4icyE1ekRsXmArb24hbSQiU1A8bGY8TkxGNCpqRSF5QypsS2hje2J0PihrJmpwWGxPNTJQKVttR2Uw'@;
put 'PnA9d1s6Yzs8RDNOVCt0aVZ6YXVVSHUkY00qNEU7RElQRz4mbk1hUWJAPFA/S2FLcl5uRi9yJXB5SmhCdnpxNENVRz9oPEEwa0VBRCNbLHE/I0ciQzVieDkqTF5+Ykloa31+Kj5wKS5EdyEzPFJOVVtZTWNiK0U9SFBNKTEwPDhbJUd2cCpsQjBvMVNjMWA0SkB0T1J4L346Q3BndTNrRjYzdH09'@;
put 'Ki9QIkV1T1BjdDloTiI5MVlRQ3cjI3xpQHlbaUpyQ0Z6YDpAWUt6fmdrekV0TnwxZ2phazUrR15GblJpckN+eW11eCVWJi5eTU5PeXZXTCMuZy5jbiJ3M3MiVHl3LGFLXTpmeD1OcVcsSmoxV2V5b1E/SG9yc2s7dWU1VXMvOHs7RSpWfEtvUWpyTjZSWFJEOntAQm80KDt+XkUwL2pWSDl3cj5O'@;
put 'Yy9OMHtgNmJqMiZrWmpkdT9SNUlhaFdRQWJfR3p5Zl5nVlExY0VTRyYxeHVLY2J0TVByKG1wRSl3aD4pJVBYKGklTHdhTzRGa0ZiTFNqPDMwYWNYU1pAWilwSjpUZk5XNWgqW2oyeEg5Wmt+fDVGKDd7SmA1fSEyTEd9aFFvWGtzTXorUmMhQkdKXShTdzZAQWImQkJlbWpLZ1heTnBuSTJqP0xV'@;
put 'ak53TUZ5LGc0MHg9aG14YFdESikxQiN6UEhyZ1smWl1yRGF7dSx1U09yOyJoKkhyPz9AXSJRVGk8elIkRUJweFlFbmtmMHZhUGtYXS5tLDwxckkjR09JWW9zNjo+Znx9eDREOiR7V3I+Wip8KEJSP3w0Ik9vIWlvKVY+ZDQ5WjJKU3FSR3ZJN2sxP0Q9ITA6UW5ka1pyIltSPSFPd3xhLzc6dXhi'@;
put 'SVNAcUQyITldRkJ9ZSoxVysxVmo8WmFCbCZUcU54MCo6K3tzNnEodVU5OVAmNihSQTg5aE5AYCNhRSlQVTJILkYkSWQ0YFpmW1d1JEBleFVNZ2Y9eDYicz0pJFBIKU0+fV07PWgvTT9bKVNbaDMmPk5ndlNRLjMqXThec0JJQC49TzM4JH1ULz1VVFdtSyV6VF82NWlMWntGVnddKCZySiw2R0x5'@;
put 'VTQyNChmQ0BjXmE2ekBfN1d4XmdVO3ZQKWBvKWFvSitudHljOVRCR1dOPU8uKVReLylILFU/eFBYWk5gKHtiZkx4flc7OkpxRWI0dX5aZFl1JEYydywyWyUzMERLcCZoKGtZZEhpZX4wMHM5ODpaX1s5I01AImRzWEZvd09OTkpiND5ZQGgobDVvZE4+Wz4+QkRrfXVCWlNkOndmfDosZXJyMkou'@;
put 'PlksKykwNmpMJixZVShLSCNxKEFoeWgjdUFwJGwrbG0sL1ZFZlgxWzIyM3F+UUhZW05ldTJ+NTFMUyElR15xQko8Zyl6XWIpU0VILltocFRHbyNWb2Q2WClZIj9tXlQ2SiQ1bGQ+Jns2Vm9iSVk6Mn1OcXcqRlR9VHA7KjhHbzJfXklrb0ojM2B2dmJGQDtecCZjaWVEOWQ1KHwzaGUvbjpuQC9F'@;
put 'KCw2Yko1UVFXbzNgInhFd3xoSH1gQ3tuRD0qbilDbVhbKD10WTxFJmBzI3E7ekp0Pi8oTDB3PEAlSk5rPyo2eDdgXyh0XmpxZlQ1I2Uifj5WZzxGckR0R1ZLNEN1Ojo1IiZje0kpeWx1Jn5AUGNTdlM+YysrU05xO0dXMExkI2V0RDIxdmAxQjVqQEpsNzZlLkZkMCEzaDY/NlJhKiR5WVRQLill'@;
put 'SnxKeXdQImVCMGJhOyRBOXcxMEcmIjY3OTplP1cuPmRxPXNoQjtmJFk+d31gVkQsO05yZHsuS2B0KXI1IUR3SG9WYlJsRGt2L3BiVGZvTHk6aTclZUNfdzdqS3Rtc2JMTlR2Qz5bOCQ7fnBMVF0oLztKP0Q4aD47QkwoaXl3cC5ATEVCIjs/Q0NdQjhFYS5yTVB9NzA4TXh8KDAmfWhjOzBhWSNL'@;
put 'RmgoakE5KlU9eGpSfVh1c3NNIzJKPyZOdlpyMS8pSX1VQmpFVC5lLEJXX2xoIkNWOk5KXShseitTZ3ZzPzlpXzopJj84VmVYTjloTTJ1WylVfng+dThleTdZSEk8N0thO0NxPD1pLE0maUAodHBRWm9KaT5HOSlreFddYklaWnBuW3RTTSRKVX5aX2VmbGU1SEVFRlkvS051VGxORyh2YkJXIXhV'@;
put 'P19MeiE1TXd1P1RXKjxyOEtddn1LJipaU3QuX2ZRcHcqSTQuPSV6blVfc3ZIQEN4USlKciZ2e1RRXVdtQzBCR2oqL1hfRE0+dEhuaWllUTl5PmJ8XnBiYywydnt5NEF3bHlnViQrfClCZnY9ZlVnd2dtI2svTlQ1aWxCb10/bFJpYDUmP1hWVyZbMUgrRzE8I3peIy83b15fM2VXbihdaS9ePTV3'@;
put 'alZeeVJlZUl2e3wpQE5OSVFhYTNtbWdXUjtzcnVtOi5Fam9VVlNyVXBuPHFhaHVKMU00JHlZc2JYV0tnYDBZOTRKIjlNPSxeeTF6blREJmZQSiFzPUV7UzxEXi9kZEhoTzlKYWh2bmh3a0E4SjdLNThwcG47ciFrRVJrL0RZPjphcm9UU2hQZk8zeFteYzZ2KjpCNDg1NCU0Xm1dOT4qaCh5SWkz'@;
put 'SFVIJmM7TTt4UEExOERDWmllJFJ6czp+OlI7RmhpfEopazhvUiU0IyluRGBBW0EyQnQ5UUQrQCZ8PXpeS0ZYW2xzKn0vPHpaT1JDaEgrSUQ+ITdnSXkxb20je1tVOVdrIXw6eHcua0I+VDchYzQ2bU5YWCZPe0M4N1gsP3JpYUpZZXIyWEYkPS5GeFp8JnljK0k/PzNtc3U4R2VvKU9WOjwmUGRd'@;
put 'UDtbNH1LL1ldUT54WEZbbz5xWnd5Y0RmVEZ2WCk3ZHc7UnxiZmdOMXA7dD8/NmhFKzB7PDIiJCJhXjdlTTVhZShETy5DXXNeRXNZTEolb2RqXSloRTxtPnhufm90OFFbWz9YZls8UFNeKTEvM1A+bD40fD8vJlV3VV5tYWQ7QWR1XUxEbiNedn46RlRPMD0hNktOczNBRWlUK2NYQFtiR1VIOzR+'@;
put 'JiZKTyt6RF12YTc2Ozs8QzhOQUdrQlo4aXUibkEvWl0vM2t9bklSUSkoTl4qK2dAcFc4VFhtRFVOQSw2RGdscUlARzRJYytdUGBeeGl9cUVRJGdQPWt6blNTW3JefjpHJVRKbTlkcEhIJWx1TGEzWjh3dkJZazE6QCxnWHpSZTY7K0tZMi5LOmZnP3tkOCJVRk0rc0VqSi9jbnV8SSN2Km1iTj5J'@;
put 'cDEucHRpN3V+UHd2X3N6Llhla2NSQT5nUjh7XSsmaSRTVEN9YyRQQDc3TnU2fEVyT3hqPjw4fnNsbGtWPmpGdihDa35SajgmTG91Q1Q5bjNPdy5YQE9OXkt5SFR+a1glVGtaOGhUfmMpRmwzKD83fkx3eDJ2bygiSXUiKU58KHdZQkl9bz9Tc2RPLnMmYSFHbXtkbF9SJGJFYGBfOnJPbmlDfmY4'@;
put 'M2JoK2tmS05mMCMyd29CXkg7cHZUNk81JEl2Nih8TVg0X1lyVDYrRClaNHQ3P3twRGxMIX5sTWFtNmFqSFJbaik7OmU6W2NKdDNpRlUmLzJdcFA5YH43Pl0hJCRUb01tPnN8VDBMaVJHcTR4PHguSF1bWEBqbiJ2N3RjWiJQd0FDfFRMLk8xeFl1MW84NFdrbSQzPz9eX01YZC58dk9BTUVfY0BH'@;
put 'PUFHSW5ba2pWaWAvfU5yJUhYT1BtPyNDV1p+elJUPmo/WFdVVyU6UF9QW2ddTDZ8QCxfdXQ6M2N+VzhPUyNDLDE8IWBraVlFekZqYzQ+Y18sYWUsISJ1ZDheJDNxTnA6aX53UGZGLG5OUTR2bzEpL2BKcHNNTnpwdGNfUG1GKDZ2WThKSDMueVFvQkpRIiRWfjM3YGEwPll1Ny9beSk9WXdWJlpD'@;
put 'amZgZjchfTBBWCleUFAoYSgvNV4xJVtNTU4zKy5TIV8wWUFocGE6R3c2PzxaNzVMPExpXSQ8dUVJX2EpckMiZXl2JW1xXzIpVS8sPSpXWkc4dmE7fmYubSNJQjdialBFLmk6QlVzX3tvbTIpbHZtZzV5aEZMITlffS5+VT9HXX1WMkdfTSEjI1taYlZsbl5NP05VezV5ZkE2a3k3Pj1deFpkfl46'@;
put 'dGo+Y3xGaio1Ny9zSlhRMjI3Q2woaExBIShHakZZP31Gb2FdMWBNb0MiKnlNOWdINjlAe0BZQU1nJnFLM3pKW3RmL11wZi9NfFckIzR6S0d6cGpLYF06TEJ4YlZIdDFDWTFzOGljIzxtLFk+dDRiRXlRNiFBd2l2dUBmWWBGdXIjfmg+ezh+NisoNF5ROC5zVF85eElQU3dAM318ZX5UWyVdTDoy'@;
put 'T01aMzJuU1s1KlFFZjJ8fXBfKSVXKUVecWFwZVZiV3p8ZGQoRjd0e1V8citZdFMhVU05TFl3KChuaTU9a3R7MEVgSzpMPWtuUWMwdllVSGQ0QC5mQVN+MD5FMVprYG5CUGdlVTswMl1EbUd3YnAmSU5iK29icl14Pl47R3tHbnphTUZAfEc7JjBmfGE4TXkrJWtAVjFJIlV7Iyx0WGRgKlYkU3dG'@;
put 'K0c2LH5DRD50OCU1Rzk6SVslUHBrZTsxQ3RaPD1oXkJuPjFeWV0rLnR6RURiLiJEajFLYWdhZzA/bEIxY15RQWkwRHReTFhFaipzdFA9OUFjeiVIelFVJkViQVhbQXJBeDthSS5YW0dvXllLX0EoWGd+NGUkVThbNi5IcT5dIUgkeT1PT1JNa0IvfmIhRyE0MDE9fn00THMqOE1NdlVAMjJFajh1'@;
put 'R0lpe21NMCtJVWdWYEEwN3IzYUhDc1N2b1FgfSh3IS53fF49PkQlWjIoMUxnalFFMzdGMUZVTnhaXk94PF5iNVdMTT4oNnhSKCZqVXBoW2ErMzhxbjNgWkNGXjRXJXRDbURXPipJSzw9R317QExjODV6OCg/PVd1RGtJL3txLGxQK3tqdHArSmNyPD1ELkpXTH5tIyIwXVpORy99fFMjfVRSWHwj'@;
put 'K1VWZHYkRS9tRVRleHF3V00hUjt0XTZBU2Y9Z0ApPjMhanJebEBHbVJwRDZKTEtOISFuRmBVb2FIQmAvUllmISFkYVFXVl4mVVlNeSRkR1tDI2N0LnlHOlMwZ1Rffmp2WjBuNjNUIl8zUyEiPk9mKnJgbG1PKCFPaGFvQENeREFDQThfc3o5QUBifTxPMiYvQXQlY2oyYT5PV1tlaWY4X0N2VVhw'@;
put 'RyUwXiQ8ckY9e0NCNkljJTUuSyNGYU58XzYhVjciV1VlZSpje2lyYzw5Wnc+fXBGMUBwdjEkUCtQQTNXcSZpZWB2U1FUQGZEKT8hY3srLkl3S1F0KGV9Q31MNyYyNWRzJkR4eSU8cVkqRFZ7RnBaZ0NEREZkLyhJbTJTJk4wOVcleWh2JjwzKHFhaTxlNjZjcVZeaUA1QVRfZDcqNk9GPi9VSyJG'@;
put 'W1V0azhafWJpLHgmRkhxQl5EKWFKTz5PWUozX29ZUXFbLDA6a2F+aXxRVERvelhNYVV3clpoW2x0dzYzNmUrNWtUYWNyVj9jW1ZCOm9vZ2JPVHlidiUjc3xmcl43Z10uKWN2N2k/N1ZFdGFKQjtqflJPRVtrcU5TSmlqL2pYeGVETGRpQ14+WiV8YzJwWnR9SVshXXQ5NkZkWWloVmJiRENsYHla'@;
put 'T3pscktRbmZZam1VKF0/RT1fQD56eWpAdE8wRlByfFJbYTxrUlNNX29KJCpkPyksLnwqdW5yOjo2RDs9Oyw0MixUcnNOTTdfT3glYnAjYHIjWlp6d2pITF4xLkMxcUs3Y1ohOUErRSk8ejwmcGltJClsUF42T21nbEQwVC9sUzZUQiUzdFJOdktkd1I9OXczXmFPWWNBP0ZPcyZIKjUqWjd5PXJT'@;
put 'dWd4Pm95RUFNVk83I3pQSTEjbWdbVkJXKVd1ODdKUk1fKnsmMTxzez1+djtLZEYiZkJARChtKm15JmJxVm5UcmlLL1BebjB0TkZYWFgiPDsoXVFrPlBQZEQsSFZseC9nVCRIWC9mN3lIKmRDTTUua0A4KytsMS8kb0xuZjMuIUd7TSw4Y3k7JEZXMHI4JCFZfER7KnIjPz8hPXtpJDRrLzlRenQ6'@;
put 'b3wsWlFNZGB9S3hJcl5CNCRmLnFZW340I1IxJWplcWZjYmlzcDhQemsqJkxpNFRWWTRuPls6KHhXSWNmUDNARHphYT1YPzkpb0B+WTE5OylrUj9KekYiXSZCeCUyOm1UMGIlM0l8NUlLWXE/WHZEalBwa3NxLyooezY8KDFkYytVMX0+KVFZO2lWIjV5JSpnKHdYQGZffVdkPTgxQDQzMWh0Pj9R'@;
put 'UlZzb0M+UD55UD5FPj1eMENJWVgja3QpVypyMk0xSj1Qa14zIUR6fHc3Q110RWlJWE00YkIiUT4kRFBXXyFPNmdEYD5WNTcscV9fZSg4MVFfcGJXeSskVzI7TyM2KjsoO25RTjBsdi4qZWQrY0VBUCQhdj9vZlNqNyZQbGUxTk5ZdmBzazM+L2RAUD1WdztUNHM3MUs1YFQxJk52IlA+USJ1cmcr'@;
put 'IXBsUDpDflZfeltadmJyZkQjQDRxZzRvNkpvV3dTO0t7SGdfUDteNSJuTVhLZVVqWVdRel91VnJ4SV9XLGNDRGQqY3UzUj9kXW5EZW9vXSZZPkc2MCF8cnRYMmZYJTNYI09uR2V9ME8oPCQ/bV9MP3VJY3JSOzF9ZilJOlBlOzclTjJLWHx5KiZSaG4paWR5JFEkRnxYRiFaJT1sNEBXezFhSFE5'@;
put 'PFhEL3t1cyt4SCQvVkwydTlLNFpbKk1KQHBULE5dbWNEaTd2fUlCez1vY2NSdHkyP1JHSkw0Ins+NSVkWEojeFk6MmFINTBoTGV7bEsvOnxZYERdfCs8RTJoOEhPZmQoKFJeMDN1ZXZ7Vjp0PWhLLGhWQUUpRzJ7Jlo5aVF4TDhROCQyUigkXVIlcj4lUyhJb2BqO0RgeVNpOW4kfiZHclFlI3Bh'@;
put 'KW1RezhjT1hNMlErc3QzJGI0TEQ+Smg1Yn5gKV86YXN9KTBeQmBBQ2NzKkR0PTVfIk4lW0lkaF9CT3dhazx3MEh5b3g0YkFTQ19OJkMjN19+ZCxrUV1IPGRCPT8+KGErWG9MUDp3bldbXztPTUxWRUYvWGg9ZiF4JVZQaW5CblspT3BUNXg+JFQ3VHF1NVtsWylUIihKUFNCZDpfTVsmYkxbYzBn'@;
put 'X25kcmQyNUwqIStLNUVoel81fT5GQlA5Wk05Lzp0aX5RckM8YCJOdWc+Qzs/VVZgal5ie0VWbFZLYHAua0tBdUIrVmhxRzg6RGoxRSRsYXlQN2QzXmJwTTpfP00jSHBFS2ZsYFlVPj97dkYqPTxYbjR3Rl9+JV52fT9vIXtdUzomJUBsMyUqJCVSZ0g9Y3N2aC97MH1bVWtRNzosbGdtXS9sWEtQ'@;
put 'OlZPZi9kezNBKDozXiFQUDxWcDZidStjayRhPCxRb182KjRYPlRJMTV3T0I3dz57U19FcEsmUl5+diRycU5bQTV+IzNNXXZaOmdoX1Y5dlt4S0QlRjFBeUM0N15UQjFpenZOP1N2dytjRTF0K2VgKUE9cWorKiRwSzBzTD5oUFQuKmZbOU9aO2lDb0BBN1lpdzNBOGdlMkhaQVUrb0hCVUVCJXZN'@;
put 'aGpQbjNfW3V8Y3ExI0JdUzp8R2diUl5FUzBdTiE/MXVtL3Y/fXdDNHNMYjkoNTdgJEk1UHJaRmxgZituMFJnQUQyZTVrLHRNXVtTZyUwfUl7cypeWyw7ZSNhKztlYHkrYH1fRjl1OmF4V30lOmwpQHk8OlFPfFRrQjJncThFdC97cGg2TFZgdHZzQ05oUDBwaDIzNSY2TTVDOm9McDl+RmlaZ2NN'@;
put 'ZGtxOWBIdC9DJnFKVHxjcFppJGkjcVdTNWN+ckxaNkxjakhbPGRMdi52VHxnW1hfLz1LNFRRXXEjVittajk2XmBOeDNjTzYodGZzLEcpb1IjWml4NFlsN156dTVKTmtHJXdnQiMlZmZHNDxmRU0zUVtPKm0iXkBOV2xgJjM+R2Z3UCZUKUIyfWgzZGlAVEAqZ05jW0Zgc0QvZzZURCwzYz1JOi5W'@;
put 'aWNra29FIXhnYGB+MWdaWzE1KCpfLD1lNT9KSStdUHNNOnlQLGZOZG9dMDN6IjJMOilpcjBpfnE1ejs3W24pNyV6bTxzTj9lemVefkdta3w0YjVxeUlCcnc5TVp8RkwkeHBSdUVPYGMockdVNXp+QT1LXiRKM3ZBPShsWVQoPiIlZGBienllYUwkcm9Ucj1nR0FPaUxgZnV6dXArOGhlTVlqIUtB'@;
put 'anNqbGElU3p9WX5OUCghZTB8b3BqTGZqfVVIOGt9KyZ4UTl4KmtmcHwxKDlnUUxwWHhjbl5WLD9JUExebSp5NHgofUouQHd+WkxUaEd7OktrSCxxQmh4U2FAZjkucWkrSmI6LDRYQGdqXU5GeXZUSHFfemFHOGA+az9KSXM3LnNjTFg3OGpKREo8fTI0ITJgMjFuK0B+Iyh1PmYxOVRNcElHOn1Y'@;
put 'JGRbeXJ5b3gqVkFnQFNDdSJPMlovOSpbRGFqTWgsL24vW2J+KSJsOXw4e1VAcmE2YyN6Qm9+OFs9Z14yRiVub2h5N2dAR1J5W05JQSk3ZE5+TnVCdjBxQHxJOjwjJTcxL0EpKF54aVMybUcxI3NlVTt5N1AhLHxubDUpeHNOUkpIdUkwQnNJXm5FbipNbExdRGZ6WnZMSFV3aUhDYWsqYkRyeC4j'@;
put 'eytXdThpb0U1JWpnTGt5eDhFK2ttWV1CRGRKcT9UcFUhW308JXxNez9HT01MMz1bNi4lTkxiMFlDUDFMI113T2cuaiVwbyNCcyE4V1lWPWwrTkk0NSRDdmYrMUM+eU4sIXFxU210VG52IzNNWndrRzp9JiVvUE9uRlRUajM/QWtzOVEuUSYkVWs2QlVnQWYhJDZFJE1UcEdYSFZtZnhOSzI4T211'@;
put 'WjVDP2JCTzFURUZWOWxEPE1NNXQ5Z3NZKj8/RltKNUYjXnBIKERldztOdyFsJWpuNSR4KlA0c2cyZzAjOkV1UnJMUEtMPHg5Q3h2e35hY2l7L3YuU25FVnw2O19rXldhbTcuZUBGVW91V3hPRmtDKz10KWM5c3pqXzNoTFpCbCw4LiYuJDJNYjhJOClhZnZxTE1EMClNaDF4K3RyLHoxZT8xaixY'@;
put 'aEovNSkmfEpqQT1HWzk/KWxwRUJRLyxiVlg1Vj9EQTNkdCptb3RJazc6PU0mezJVMyh2VFRkVG0+YFdzcis2NmArPzdOb249QyN9TyReUV4pKmxBaTpTQ0dTSXZqOHBTenQkQXtPOzY0UzRHd191Ti40Ly5iXkUkaCYpOTMsX3x8NTxwa18uTG53X2puTUxPaFglOyo5Q0JuJVd3eE5vSlI0d2hp'@;
put 'd2pbIn5PY3t2OEs2NEw8bjZUL1FCSXtGRUFMKE9RK091LGpaMzV4V15RZkRwfkhLY2wmZSxAUnAuVyhfVXhRW25DckttJGElPEoqLyNBcW5oVEA3dj9APypAfHUuK1k0MGd3NDZKJGgvL2o7dU4oNiVsTmAiKnA4W1QpWTplVG94Ki5UZSheO10+NiVWUlVfOGVhdzw7I2oxbz1HZEA4Q04mfGdq'@;
put 'KEFUJUxNeyU5JjlHXlNjSnVCb2BWLllOQWEya3EjKEJpI3E8cnZZbzR9Tmxyd1gzciFWM2dDfVJiYjF6ey5yQDE/KHBuR3VJQkpYQHRudUMveGMrOCNIS3ZnRilfZU52YFdGWDtyOyE7MiYuck5KNlF9Y2x8QDxIbk1dWDtdOWBidjRddTZBYit6OCY1UkFQVFosRWxzMjxyUnslaTd+ZiU9QyFl'@;
put 'WiRKKl8ucjNAZ2swdFgvWlpCLlBfWElnV2ZxQU5ITWF2RVI9NCRWcmhnVUgha1FsWStkT2QkUU5OKHRFI18iLz1nei9kdiV7YzZGRURsdDkxQnhNKFZ9YTAoSyl2NW8iRnQuKEZDa15NIn4vWkl7ITBUUHk5Wl4scW19bjZge1BDJDRuSW1FNz1EdHB6KnRHU3xXX0N5SnFtQmZueT1VKzxiOHtQ'@;
put 'fVNqX35LM2osZXFLZHhiJVpeUj8kNmpKcShYIkQ0aV0ucUhNKFsmb25iR1ZmWVtqdlB0SGwoW10kYGhXbi5JYi8kdXJfNGwpaWBtIy5UVHY4M0lpSUkzdiJTUEQ+YDReWHBtWig8YnxRKG5nbW9eejRrNTYvLiF9Z2VATkU1e3ZiRHczLFhqTC8jWE1EfHBpZj42VSM9MXViNklJWDtgMElvR3BT'@;
put 'b0QkI2N9JTVebEpfdkpEW1NwdmoqKylMQyNRMFkwUCFbK1Q4PyUxT0hSOFtdPkBKW1defnxNdFYjUmNDTnhFZXBUYiR1SGhLbSFpeEV5X19eKl8zOWhsdGVLZ1JCZk5aQ3FRMSlYUHVhNTRRYyFQWXpDajIiJmpFVHR2XjFkPD1Me0cye2RGc0RZS15kTTZ1UEZkSEVLIUNXdSp9M05Gb3FOZjpP'@;
put 'NiVUO2QpaXtuUUsxfCwmeUI/NWM6Ki4rbUZCNltYUS54bT5dalN8e0lnNiYkT1tWTXBmMC8vKnF4dypdN1piaFNqaEwqamgwVnJUSltMTz8walZ3MyJ5Y1phdSMiaGAqRnRHemJBUyZLaVVWQS5BY2l6VC9WdWRWWSJedHtuMVBSMW57cll2bVZiRUFsdWNaaWEoKHwqODYiUF5NSEtqWkM/emFq'@;
put 'aVFKbnlOMX4seDU9cDpdayU+WEddU0hqbSZ4Z1U8LlM0TTEzdElHQ3o9Zkdqd2UsPVEjfSN7OzFMJEtKNTJ+WGtlOEptSi5fWSlNVFFxQW5QbjV+fGheZ09nVUxgVzxDayRmejd1d1gzMWgkMGlHaEgrbSJLMEwpcyUlLEY9eUxNKVZkUUwscDtLNnRRTWZOVF1wczc1Wkhmbj5RYGtNfkpDbUwv'@;
put 'N35USXtFXiQ2PkoxQ1ZUJjc3IXNYP2YvZVtlYCp4L00hNWBiQl4+flguLl5CJW4rNzc5XWx3IUxZeU1NZWVLZElFKSpMQGpoQWhxP01oUyRRWnYxXTU5JD9Za192WX5lMVJpO3N9WDluKzZbflYkXWlGbyg4TGd+d1VFfX56QUBqJDxJUGdsfD1OTlI5YDBPQ1kxZDBrQTJiQEl+Yn5eczg4TGdI'@;
put 'SlF9KyU0VmFXfntOezhyL2hYN3BYUCN1TigvZjEqXmZWMGJjRlJPO21yKlZoLl5xZ01INGNAODh2WDNqdShgcjE+VDVHUn1pflZrNGAjQCheOUlmP3J3WyZGKmgiZ2Y8SFBPbEJVTms2NkQzRjNvOUpGcld1cVZ8YmY8N2F7KzclZylMVT47Inh6XUgkO3wwQ10rOktpXjVDa0tCZF4sdn51X0V5'@;
put 'VXlxNC8vI2FhQ1JfY005SUp1KUU/NWZaTzRuTGZqVUViKSxsa2JQKXYoRj9pejVhUWw5WFRlcVVgUko3Um1+MTlpdkd4JGlMYSlZYSskXUZzNDNlOl8lcWJvW0lqY0hRPjMqdF1NTHRMUj11KnFrYjk1NFZSbXN7N0hAdz5jNHIoWVtVRkIxNig2Li8seEtFVisqL2t2RlVqIzxMYDpfdFVVbSIs'@;
put 'PipJOWNlfSYzVD1bRzNpblpod097aFtMbTdCdHkmc2VEX1ZuektNSV4veUFZT3BEKkhFaXpsPmNRPWo5Q1VFM2ddMD57TTcmSSJAZkFFRlc3eXxrYXJ6czFaaHQ/aG09c3l9cGROVS9+UCRKPSNDU0pjb0FfIXJGaWpnX0RbaT8/WT5uX3t8NHo5U3t1N2YmI2JkeWdVNillLz9KYkV5TlJzSjx4'@;
put 'KGdQWFp2USZkVkFqLFM+Li4hRWp0ck4vdFU9TFUzLjZ+cTswUWRAc3t4YUwkYGs3cWk1aDo2TE9IV0YjSnRhK21OYmVhVWxIRU9WKmFEby9NM2JZKkx5dExtTldGfGR+L2I7byY+Nml8W3tqYFZtOj0iflRfOjRoOWpgJFNkcWUuVl1EO0BeVVo/NUd4K15OUEx5SXozTVUjU21pZVJJKHd7PHU8'@;
put 'L10zVTkiQjsuImw9bWp6d3R4LjVeZix2MiJLK047emxnQU47Ny83XVBlZD0vc2RbcHo3YF1NJjJVMnIzKyt1fFtEaXhzN31jb0tTdmpKd3x8bnw0bkcjPHRTfn4zWWMkeXZ8UDRgZ1swTFpsaH4lK1lIJjpLcnMoJitWTCpXRyt3VjBPd2k/QEZwQFpeNCRTd2ZPak9OaUdYMjJSXkNKZ05OYn0v'@;
put 'JWw9e1BANWszemJUQzFabis+PGBhQipPUVhFcjImZCFBI1JxSUNFRW1OSEMkIVgwdHB3MyVhV1QiXyQ/MTRtOmpqSE1eQFN1aW9dOF5aOW5zSzlfMG43IyRROEFOW1d4WGU+MjhYJlU+KHptdCU4QVlGLyY6U2R+NFd8MFgxciwmIWhrMj1sJkI8fGtQajwjSUllKnJydF9JSVpxU3pDfWVYI01b'@;
put 'VjxCfGtHblRVSXpJVjQqUHRRIkRIM3xHZDpeQDNwfXFrM3g2c01IMDBSJktZcnkmTD9+dChaYmR8QTQ7UX5KfkhBYmErOTd6OVZVOExYfFFIKyJsdV9EKFgrcShUcSt+PD0vS2k0RndsTEtMQWVnXXU7L3VSXj9qWFojRGlMQjFJSSZOPVtmXllCSXdvQ25xdXY4PV42bFFQKVpmTWg/UjIrY3c0'@;
put 'b3c3SnRUOXRdSXNOZlt7ciw9dWpLJk47XUR7UEguT29hYn5vNWhOIm02UzleYGYhU0ZqIXFPUlp1Uy9+R1BDNVRWXywwP1JqPnFXWm5+Zj4sfXZPfH4oLlo+OjFlU3hOeEEpfXQoPl8ha3U+MG1tUzd1cFBlckVAQn1zZ1JrL31sI0JJe3RCJVVmTGNOTXJeT21yS1gqWmlKQnprdEkhSSFJO3Vh'@;
put 'MyJVWDxQQyo3aGJUSz0lcEQ6dF5QMld6X21PcStzPD5uOWl+JXxITHJITDk4TU5gMX5EZTpxPShIUHVVcDszZyNBaW0xQ2pAJHE2a0V4NTZWO3h9alE/eGBoQyN7MlUmRnZMT0JEJE94NVBbNip1VTh4aH0ueCk5WkpbYiFOajUxdHg7MTUufT9IMWhSb1l4Ul9wfEZJJj1gVXVqTXdXQn17VShI'@;
put 'eEU/SExLSXI4UUUoRC9dTzR0RGRVaFMhamtyPGoxfXU3I3o+SERVakFXNmBDKnFJaWwsO1dxS3AsKWZiaHh5aWgxP1RweGF2SDN5XktLYlIzaDZAK01GTjsoWTdAOj4/PldGdDFqJHJoKV9dbDVNSXxGVnBEWix2WHBmVG4rZ2FvTlRtVWc/e09HciFEcmM0a3wkOGpUVkxSKl9kUyRkfkYjb2Il'@;
put 'MWRAMEglWjx9UUxrY3l8MXwwI016JlsoSnJmRXBKR1VnWjNSITc/b0gzankmNX11LCgzU1RLQlFtR3RZanRwUGk5UDgkPShlR3JzMCJeM1g9XzIpalhOZz9nLERYQFssKjJCWHYzLjI6dCJIb3IlOHppUmtYY3EpMlc+Q0lrQjl+MF9HPiZMNmJiY3h8JnVuKzlGQk1eeGciUShwQmM4ZFNaXjhp'@;
put 'Q3l8SVRbXm5SQDtzQnsjd2RZdUwrYzBfKDohK1hMPFFMTiJRQns5eWI3NSlbTUZhX1RAJDk1IiVzISYlY0JnRHt2eSgmIjQxJnQsdVVqbkRNSFdbVmtwd1tRSXlXVWtlZCV8PXl8OWxkbmxlNmZVLlk2azE2QC5IV0xfWGBlbSFZInh6QlNPeipxNDN9Y3hOQW9hV0Vze0dZaUc1VGAkITpbSkZQ'@;
put 'KytnQktgYHNyPFdwYmw7LHg4alklX3MzIV18Vjw5OTA3NDZfY0Q/NWxxL0Y5OWdIREpaPjdaIXhLIy50cUNgdH4vfU9uRXpUWzM9JCQ0aHhiKylsNko0djhuVmh+QW9SayJ4STNRYzx+VnRQNHlLbj1kU3Voa007Q0dKRXp+anppNFp2bWYjPGx4eyl9cG94QUlqPn0hYmk5Q2skVEdfQDAxXzF+'@;
put 'fC5WLn1RXnFRNSlNOlltU2dJW3JfK3RgRVYuOmtofTE/MlBvbjwhbXhNfkYmTXR4RD1daylUQ3pbejdrbTlRe2VIQyRkWCVKQjx5aCErXjc7JG9PdH1zQlpSb0ZrQixbbDBVVE83I1BKP1JWIitFL3hHWDs6VjRfUkU4TmE4T3dnXlQ6cVo9S0IiUm5ZaVNNZkh9QGEhcSlYdlFSQDUiP2pLYXEh'@;
put 'Y2tCQl1kIWllZnFJOX0kUSJ3RCQkW2xLd2M8T1pyZXw/Xn44KmM6eVBzNi9YNm54ei9pdnVGPEtUek92aX5SX0g2cCI2Q314YEwyVXd9ZVc4byMscSx6PUJ1TClrYUMzIWdXfDRAdF5vX0ZHYkQlamopOngyd2ZRKXtUcj1iUDRISGExdEVbcjQ2SGlrPnooVX5jMTEsOGFeWTIjfUZEVyEjVWRs'@;
put 'YngySEBSSnwzZUpbaTNASCVyVCIkdHJnS0ZLK3BnQ2lSdGAmS29UTFBBQWR6TVdbSj8xWTgwTSpKejZJMElVVUdubEdEKUlSYj5TRmt5M0wlJntjMG1oSGl9RSw3bkk5UWVlW2J7R1pya0JGWWRwfGFfeG9CMDErTmFbSTtZQTFwcj8wLGYvbEFDYlNyNyE9R1JrUSt7O35xMHJmWHddbypafXUl'@;
put 'OH5QYm9eWkllPShSP1lKd3tIQmQ6Ijk5M1JoPXcpSWdWO1cra3B8QT9yMGY1czEjMlYmPWpwRTo/bjY3U310MyVLMiFnJlN0QnBPWUBKYkBIMnB8UGBVb3d6dCIzV1J9NEdOcVt1ZH59c101dXNkZ2k6fFosb0g9Kn0xK1hXO11gaDQ8OU9sJnpZRURofkI4enwiPChiYz12SEdQWmBISnhNYCtn'@;
put 'aTw/b1tMcVB2SUI8MW4rKXssI1BVWUcuYnkjSzNLPnNHTnVIcSlJbnRmeWlKUlo7Z0V+IlZrJERTe1I3IVkmS2N3dkpiKytiPH56KiQsdXNyMSheQn1UOGtTM1hRUGhxTUN6UXl3LktJPGB4bVFBcUlOX1ZMW2p4b1o4fE9NK0hNXll7LjxPWT4kYWc2UG81YnpAcHwwVW82SFY2dn0zWGFVX2A3'@;
put 'QkYlZV5rJClEImEuV3osRXRXbE1KXiNLenN2MCw3T0QjRk5NZ288JXl5fURRcWAkX0VaXVgqbTIvbGwrXStqWWFwSGRfQl1lUDEpeip7LChNUWtqS1tJSjQxRDpYKSlZb1QiUEs0RmQjVGpGI2piPj12OE1+Q2xGYWY/dTMicG4xSmpacWp8L146Vkk6Qng/NSUqNTJQO3xkMSxwOC49TzNbZEtK'@;
put 'bFlVdT14a3JpQXV+bTdAWlJHeGNUT1A3YmJfIyJRT08sYys4dDk4XT5YSi9ndlEuMHVoM3RAYUlvTnlKSEJ3TC98KC5oemF5LnFtJGZVWFIqKiNMbDowQG9YbEJdSUM2Kio1Pi9UKmMoejElPXR1cVlIZ11tbCMzOUQvITlfPGx0Y2xMa349Mm1hfk1IaVhUXm1IMklaYy53bHlhOEg2RytZcnh1'@;
put 'al0lfEsyTF5OOzd7WzQlfEZLeFI8eDkpZ1Fpe15hX1hKVWBzWlt5QGxHOSh0cntdWmpvW3kiKF14fHwjLn50OSRzRSVHZjBQb1I7WXI0KiRPbUdpPVh7OWdeXS8+MXRsciVYQiJCImQmZmhlO2YjXkZTbXJuZk46bmFbI34hYyJAYik9Ql9hYCh5W3pwQ31ldlU3PFR+cXpPeGN4MVNafkt+e19g'@;
put 'ZlhvImdSOG9SdlNjN08hL2NdZVVySz8xKk4saD5uYTM2eDBaaEViPnI9Y0dEVC5gT1pCKUIrRzZEOVVITEN2dGAsU0NVKXc+JlAldy9GLlpqMGRPb1EyakY3VTNOSnxJTWZpSlJvZUhpR2Q6YVN8eDxCKj1JPGFVMGpOSVU8dntsSWJhKz0sSiVNVXdVe0AsZFc8Knh8YjI8PWdgZCphSE59XUZv'@;
put 'SEo2dThuMWdiTV9BND0wezJvYH1hIy8kUTtIdDwrdEtgSip6Y0ZSWmZEakA7W2x9MGhKJnw3amM7MHxRRE9nQ1pAQi9dKztqYk8wLkVUV1cxRzdCNk1ZL3orSTxtJTFqZH15PjdpRmNFVk4sNjR9VW1nOSpwLFJZXklpQVFpY2g1WzdQNUtYO1lVeEFtUS5PTXdyO1s5R2YmJW5EZWtabWdDRHJ+'@;
put 'Qzl5THZYJHlIdTI9cWNXJl5YfjdBeCEwamhvaEEiR11jaHpebDlyYkpnUFQsOmp2dWc4cUhVfDQiZTI/ViltREkmcEJ9YHA0RFN+aHRJVXlbV3RzM2pnUmMhMnJXWUoheFdjbSRjUXsmK3dSJFFNPVNqe3hBTiZPPT5tcS4xYEJKP2JIX1dfKytpSEwpQkFlMSg2Tmw+fHhBYXZpaCM4VlY+a05K'@;
put 'PVJ1ZiVsN3Elfl9OIX1eN0QlJXM/IVlKbXNiSn4jdGhxaFt8K194ZGRwOmlabjBie0MvJkFVIyxNQzh1W3BobzFzNXcoZjJQaikyd1speU9aQXV7b2hmOmtVJUE1fkdhOShiQCphOkRgbnhhKGhtQCFWPEl8I3IrX059Nl14VV4rayNjZiFZKixlTzM6P1U+Qls4U2dKLmlOUmZFKjA2aUF9VWQl'@;
put 'fUNMbGU2SVZiRzZ5UC99RTkkTyhFIyp2enU5XjtRZy5sSjh6SGBVYzwuKV9HNlBPKzs6NFVYeTd+cXAmR2IoOGFUNEI+JiUqQEdycyFeUlM+Z1YzKCowX1pATmNLJHguMkRTYj8sNFQ6Ky4mMVBpfS9aUSVUVyZFcSE0X2pfSHF+c1tWM15+R09OfGlVT257LkclIUlaOTEjTTFYND5HM3VAMVFO'@;
put 'ZzA7eDJROGYodzFYbmR7RUM0TjcjLiJWYSJQcixoelU/QXE9aXYhbmwxTW4rWyRLIlZvMXBmZSosV0J4Yl1eJmdOSkUqVHZMNXM7SWxJY0BLVSorI2B4YSR+UCplKFJqRmVHbW8/VkpyQCtaSDczbkosVUohUDs8bWhSNiUuempOfDs5Q2NLLyk7KmV1dVFRazRDanpXMVh4W3Z+SEtzPmNkenNQ'@;
put 'KjM9UTxGbVY+aGt8I303UkBZKHAsN3ZwUk59XTIxW3dJTlRMcVd4OiZpR3tTWDc9NX5RNVpEZGR0dFVNXXdlNmwhVD93Pnh+eDlrZkZeLEJ1WXt6dDUyTzAjTlk6ZmdxPGNLW25faUxhL3B1ZSIyPG5yZSxZdzZROn4uI3ckTkt7Km9NL3hGbDhLLGA5LmtwejJTe35IbEMjaCh+V2Z1OU16Rlcx'@;
put 'WSF5T1ErYUVYeDpfL3loUX1+S1RAWWgjOGRZNUw0N3lyUnVaPWB2MCZvNW5hZmJJZDF7V3BoNWReTHooLHVEQT98bmlzKSp3NzsrV04pdHklaCN+V00kSjFeW286STBUWD1NSFg2ZztUKCM0MTpBcDNVYX0sblJiUlhJVXtbaz1dUyUkKmhSV3VAXilHYj9ZPXQxaSx5dWRBQmFTMCN6W19FcTRI'@;
put 'dkdSVkM8NlE7JVEoPE02KDpTMlllNH1iN153fnoqfVBdNm4kTTFwcEA4KE5lOUNWO3IyZUZ6aWU4bkpAKSZsRkU5O0V1JnBedCtYSlU4WjdSPz09ekxFe18uYmdJVm9mbEtxJndIbSpAW35WKy9tXi5NcCpAQzVhZXtFJTpofmBoTHQ1YHVpcGRCYlZRLC9Ha309YF8rSz16MVt0OnlSQ2AjZShF'@;
put 'KlpSN2RtQX5UKlltNiFrXyZhJjN9ZXRNNCEzNTddK3lPL0xSUV9gUXokb2VzPyg8cy8+YTx7M0guUWgmLCQvU2V6bDU7TyxAU15GSDxVSGUkKGNdal0ldWJUJG1LXjl7PHF4Lz9JJklqQDNIQFE/flhVRXcyV0p6OGNdQ2lLY0wlQ3N+P0FwK2lbbVM1eCNdRGVEKTxhVyo8VVl0R2JYPWhgSSos'@;
put 'T0VRR09EflY6WzFDOUA1NVFGcjVSY1UpY1Z3eS5qREd+LGNBcF8qRk1McV9IL1VGNHp8b2tWL0lwSXEydjo+Q0RJSHNVLjJkWzAzOlFEK0ZlNk15eVYiJnNKQFZnU3FWUnxhYnpyPXN4P0w2MU88P2htQCFJRHEkRTA6enApKGdwOFBCYDE9K3dMZ1dAbnJYU0koKHtTR0xwPDA9L0lqS014MEFS'@;
put 'JmV1c2FCTik2PVA6OjpoNFdZanhoa2glVmIlJXIuSEJNYEg3e28/aVhidyxQTDN6TFNIdnA1OGJQdjR4XT8pKFJLJU0+JTAkZ0lLcWpIJiJMRDdkQFVKcUVfMmh2WnwiSm92ZTsxKVJMMVNJVERwe3guJnVJbDlZS1lbaVNeKE0+bD47Qm5LWWlaVHpNSnIkRENYOWl+Pig8eWlbTFZAO3Q7b09U'@;
put 'OFJjez5+LmQiYnZTLDY8XUhHKXomJipoczheSkxrQUFDIy9rYDw8bndCbyRKVUghclc3YmhhVHlVbmo9dFcuJkxMe0clI3RELnR9Wk0wNmB2YmxsNnxwbF4yaVFubywrQmh+d25BMnRFNUU/P09sfCRlVEN6R3Z0aEcxSU06RmhSbHJlRTozPiNffGZ0Y3IvfCtCUEJwL18hcmxJPHsiWGx4R0gu'@;
put 'Q157JD8+NUpVQyMkTm9DdWxMNn1zPHcmZ3VXYWM7fHEzTyl+WCkhRH1RQjNodFU6WzpWRiVGRj41SXpXR1pQa21jamI0cHxtfDorTXghNk9XJiQ6fWtXfEJaZ0JVPjBKO1d7e2UwT3kiTXBISWlPaGU4KTN2Sl4mQCpqZ34jRERHe3F0ZG89RllAS2J3UTU+TVgyO2BpWSVXVkFzdlImNEV3O0RP'@;
put 'VXVpajNxLiZ+Ol50NiwoIzBGP01bXyFaTy85aCReVXNnREhGa3RKYzJLRUlASTR3XyNCKzVWP0ZTOXZ0cnZaLzJofTRnaVc2L2pJVGtBVFFvYGxvZ0VWPjpAe3xpcnhOeWp3RksqM1M2elcvfTRicVh9IiJVNyMqdi5PNyJEOkUqamVDS3xRU0xkSCxHR3pEX0NTYCoxJHx4dHJ6ISY0MlZQdV5n'@;
put 'dTBSRXlvKSFVdG9gKndGbT1VVjM+WGg0YzVLS14jOSQ0QTlmIWFUTTZNMS9oJnVCa054NV9qP308P0Z3LCF1W0t6TD9OaCR2QkwsYjcrW3pEU3lkRTpkKCQhZ29Kb0E1I31QMHZ8dGNtZygpbU4/dEM+S0d7X0IjSn1FWzgmYndzZkR4KUV7SU1MJGwsNC8xWFd+aDhGNXBMMV9sImNTWEZWZ2RI'@;
put 'WVYlaD1TVCs2UjRrKmZ1RGtRXTNtQ3t3SzxIRk1yVGdfbTdwcEJOREl9MHFtZ1EvYHVAOnRTaHZBU1ZSUDVKaCV1YDsodz81Z0l6YSwpWWBFY1VEMFNVcylyVTIoUlVJfE4weF9qQ008PC5pQl4wez8yOjRGWCRASXEhVkJXant+R3d4L29OaHhQIU9ob0FnRU58PSQ4WWtJPyRudDRAeSl3fiY1'@;
put 'fSglZSpQflBhfkhddmUvUTwsMD9IXzFFdT9wWUNdalopb3NzfGFsOUooYzN5KW5UNXo0Ti49RyRmSGguWkJxMHY8ZypIKTVgemQwXz83UnhVUkArIisudFJkOEl1MTZuVigxa2QlVCRydlZiRmQyIzI3NF0jI2gyQjhPQiw7eixZN0V0TEJhQVRDYmJjdTl8cUA8YEBjbU1LSUEuOGQ0fj96LnRj'@;
put 'OiVwT2tJLmB5biswMH01QV5+OWsqZ0QwUjVXRmFUUGp2NlhIS1RrLFR1WVcmWVIqOnduO1s8MTJMdSZYQDxDLHlPOn10K3gqJHdbYldTTktZP3RePWBraTJJVU11KztoQXUyKndgbTFBa1hRIkUwdHV2fWEuZW94Zl5vX0dUM31DRDRIS2kmdHtEemZ4bVMsXXp6dDMqc3hrUURndypwSyw6Lzx9'@;
put 'fEcqTlh6WX5hSzVbPWhDcnQvNTRCaCFuZXhLP1FwMiYjIipxQ1dQbWVZZSVGS2AidUgwOEZ2c1RYbD8obSZ8UklJKVhfUWJkW3lEd0M4QGZgMD05LlAzYTI/WURTQyUmZSVLdkpVXlEqWnBhXlZnaD1PIUtjNjhwYjV+M30qe1YyNFFFZHBGQj9nUyxmYn4pRm48WWAya0B+QjFuQWIzNVM6bDhb'@;
put 'YSZfRW1fR2pyZDkkMV9TanV4ISwvY11MKUouYDU/QUQ2JWd3Jn4vOjRpLCh1e1ozeV5FUGs7cmBnR044ZEEsMTJCSXtlO1pgUWZvJSx3VSNHPClfJUNJZD9zLFlAIVYyVThFUGtxaipxOXRkOWNwfDg5SzZrUXgjdWpQKVVSZT5weSZfbUk3bTFGR3xpW0tbbFYrcU0jTzVQYHhUMC4/IWdqTVtN'@;
put 'QCk/STZYbktSemx8eSVmdW5qanBlPjNebzUqfT8/bVA1UmpXQ1VQfH5LSS5MUWhxalFUPiVmUGx1TDhJeVQ5NnZVTDslOVJZbk1HeXNTKCQwIjtAODgpZHBWbHBUVEc0eyJaK3hWVDJGJFQwXzRHSTBJc2w7RC5hSU1fJkFRJHB7e1Awcm4sZG5YPzxvL21uIUBbckl4KXJsMEI0fltsaXsseHJU'@;
put 'LipLKSM0IVdEXjZnV2R8Xl1WXnlnK05aWHclJlddMnl1QixhS1UoZzRsS0o1LHFGK1UkW3pRM1UkQSFFIjA3a29DMTJbKHlCUF5lQ1NFNXRRUDtCMkVQMC4pPU05W052QiZITVAoV0t2KGNLLHI5L21HWVk4e1FGbjg+cFtPMXJEc31qPlBnUyNfNlAzcnk1KltSN3FnbFJ+aENGKUYvMGNrTkdr'@;
put 'KDU5PUR+fmZsVGo8RlZYMnszPWNpdUh+ODhrSGFPejEuWVtYNUMlSzx8SDxEQFtscHlHRHskX2U8YlROWS58fXYyZVgrJFUlbDdKTTpTaFdLJEtjW1lJTCs1OXRodzgyWUVvdF5uYDZRY3lSOltAdm1xXmI1Y2x+bzRBLzlYNWghdEMsN3haKz5DcGxwMS8qcj1PcWxnSz56NU5CdFpEbV1TYUdL'@;
put 'RV0wNSxbVHA4bzRWS2dAeF1TVk48YShwQmR4ditQO2IhcGU2SWhmMk1aWjB3TFM1WGhMTnMmU2hpMkorXXRYeko2ZGhRdStVK2c5I11sVnBqNzBNUltjKkIlczpFI2oqJnAhdkNKSyFaUSN9WWV5L15pLndMTnZVemhnbCozNXwrNE9iRWVWM3Nlb2ZQIzcuM2k8KHNqUE0xZERgVl9PNypyMnlR'@;
put 'TSUkIVBHTmR0Ll46XngoMyxkMlZNUitWTFkhQnNbJnIyUisld3VsODJKKyE/ZjJSK08oZSNRR1Y2SVoiZGhscF5wZERgbTBxTSNsbjEuT1NULHwoJT5dZHhbamlZKz1zPl42N2RucGdfKGRGbUxWYmNpdDV0UUZtTSNsd0tUVH5CKTh5Vn1FIWEyNkMlaz8qPDo4P1tNS3IvcVVtbTgyLm5CVD1H'@;
put 'PTQ6TypIXnRxZyhOTjUsR3hjd3FVN21sKVNmLkA1UDcjX15QZ0REJTRfJlN9ISUjfmRVNkhtU2g2ZGdKdko7ZEwhZ3p6PHk2Pi5xKGx+SUZuLiFsfjhvOV4hZ1MyZHwmUDNHV1sxMkFnRHljdGM6Mm4vT2RoXnRSYEpNTjg5XWxzMnt2UnNOTyRdeDdJRUJRO050aEx9S2goZUROSUd6IVRIajFR'@;
put 'OlFjSH5RV3dWRzZjNSZvVDM/VER1YXtKfiVnImc9M3tmOFtyNXIldTo0MTMhZV9OaEcqVEtXNml2USt0WUtsaDIzQld3diVCM1JWczJRWzszN0M3Rz9UZGh+cjdGRDxTMzNENFc0bS46JktzQ29wZTIobmFpNGhuKFB9L0pfbH4+UzB1ISxVQyhuS1BPQWoiSF9qYlVYISlkQztVVHRlcVE+ITo7'@;
put 'YUVxW2M+RmlPWEBsL09DcmUpVkZOXXojZD1ZOnouI1BKeH1LOixVRVtyR3AjS35LSVsrRVdYS0xZaEJsUGZjRWYhdzVeV18hQTtxMTE3UGkyWmg1VitgcF16fHl0VEdeJmFqQlI/KllOIilQZ0JMJUpTKUNWYE9+Tn06cz9iSEBiaz9+bEt0XWxyZ2soOWRFQWRVbHwmYlJDYUJXRFNUTXZqU0w6'@;
put 'M2N7e2BEMjBLU1Q2a0pJQFlYL0MzUXREPUxIYipuU0ssbCl9aDdYaTQ4U01LOzJLSSRjI1d6O1J2R11RMC91JS9oN3JSeHhEWkdiOE1lQzFvS2s9Qj9pcW8+eGpyIyFNVWIxPGJ2VVUhXnNpYC8qRGt5RGVIIlBfVV07N1Jedns5VmBQQENxXzQqcmpzN1Z0Kz5oN3tDbSVyJiQoQDEvd3E8aDZO'@;
put 'bmZLIT1fLmVgWVsrTTosYWNXVTBXYTkuJnArWGs7NE9mXWBGZUh5dlAqKVpyQjVTNExgP3lROmc7QlRJOyVbNHxgWyR8eWh2WjcoRDlyPFl2RnxsdUEzOTxJST5HYSJoNiF5bmJ7e2A+bE1VI2dRZmZxbV19VXkvcmFuU2leWmIiRmY3cz11MmkkfTIwbiJiO1VgN2NGQEJnL1kuYzN9QkBkTFZu'@;
put 'RVRYbDpqSGA3VmEhdSNZbHkhMm81JTE5Z19ZWyZGJklRfi50fUBVLClzOnldMTM0K2ZKWVQ0YVgrS3hOWyV3WSVfSVBxJF9vXWBAO0l8PzNQRyg3X2dWWXwhXTNQRWMiNmsmWCZsS1llUFMmP0YlNS5rKTpua3BSSFldbCRzVVosUC5Qdi9VNCU3el8mbSQlJFl4dFl5Yz1wI2pZYCpKYVZCK2c/'@;
put 'bl5BQFlmdlV4RGZtPDRvXnQ1YD8+enxZXilaL3s/OWgmJk5kekBDX209LnxeM1VJeVFkRlRhP1F4Mk1bNE99SEp3TDpKQHBpZGQ4ZCgseHoie3VWUVB7ZG0wODIuZEhAOzc3YWh5TVtWJSZbSDBHNShVTDU3PVAxT1grNVFwKW4yMFl3ZGRFWHJqOTJhY2hecGRBdG5jbTA/ZFNoMWEkNkNUT1hJ'@;
put 'NXZMKFIxZnp3cz9hNjpVJGt4XV4hQl03LDlwWWZYY2x4XmVFOyxhQ1IiLE1SOWdXOi5qKmZpUXpHSChbPUR0VjRpdiQzdTpgaTFBcnpCYlZtRXkuQmphUm8lcCEhekRzLnI3OCFOVT14WUNyQEZLNG57NmM7SXc1eithdHNrSnIpbU02V0xJZ1MxQmY/d18ySFFdb1hfSW9HQTYuMVdqL2M2Pm92'@;
put 'YEAmbCRbMyRyU2VffD9yYGNhIzpzczZYU1JZSl98ak9bLF1AP249UEsyOlZWKUdNUzhya1p8XkQzOH1MNj5WQ1JmczE3djZSN2BQZUMqYXt2Ln46eTZaRnsmKSVTZS8pUnhqNmE2XkB6eCs0LC51KVshcHc3TTZyOENzPjEmfCE4bF9IKjc1e0NtdyRqcmUkRGpyejlxRWFuKmFxSnV7N111ezc6'@;
put 'OFhiIjBSZFNGayxSYm1sUXVLdzIxPjMhUmJbR3lsLD9MLHM/V0xSKTAoLFUyNjdqLk44WE9kOUY6dE1vQHR8YGo3ZUBqYzg7UDVoTFJSMjMuMmt4YCV3RT9OU18zNDchPndST31HM21KPzw7Njh+ajNhKkZTbkgybndfJmcuKy4keUJnaWVkKXxQNV9pX2A/KUFtZTAlNE5QZ2Bqalk6dTxuIW0h'@;
put 'I15icn47eWpHYV41PmtKaEh6VTF1MlYqdD9fdz12bXxdbnpmKEZjUn5HezJ8emBUaHg+dDwzI143diNWSXFZT3V6SStrPGE8NixzWXViO0NmYmtHb09Pd0JYdFRIPEdxTT4+W1B9ZUFzPj58X0RVKjBwQzxpK2haND1nIzIsPj85JkZtVWhIZ1B7QHYxRXF8KmssKSpRSkQ+SD9LbSk/XzopK1Fw'@;
put 'cVE/XyVGbi9hbXc8WGBWRyZiMXN6flBWWjdfLFlJQWhXRHJfSGthVj98cXc3azA8T1NBRV1URzNsODgkeSM5NGRRfXhCfkhsRG44Qjd7QHRTIzNaMCl9PTttU09xPylubyR8YV9HYG9oQX5EO0lnTCY+WSwiczJzSkNMUTxMREByQEZZdHo5T2pPI3JEKil0MS9GezJqTXppOGBla088YW0odUxg'@;
put 'M3l3dXRzSHU2P3suQnI6Y0BibXdzN3dJKUxJJjtWcUY8TjIzZmtmQ3JoYnNvKzdtbSRHQS8/XTUxd094KF05S3RrKnttPD9fKVU8ZV81NTdXaDN8TCtTNncpKyVlSWdyVTJoNztbLDU1alF4Jk1iQDkmazxhZFd5cUpERytEOjA1TSI8I2NnbSJoNiFJKlI/S1opT0g5bzVmTzZkZzIobkI7eC5l'@;
put 'O0pHcTg9Tzt6Xkc8IyZxPyt6Q1U9eCQ3WlkuNGolXzFpSV8oa1hiKnc4VS8mflE/Vy8sVTY2PWMyTyVZYj08a2gka2ZSQnksaHtAb1kqfHsmSncmMWMwQipqSVtxUHFsYzh8R19YJU48ZFJzWF1pLF1IUllWKHF1TFsxb0g4MWV5LHUkKVhIdnxPYSMhT0g0OHhOeEQwayZXM1hqdmg0Ylh4eGg/'@;
put 'JlRaSSl1LFdhZXU2dytAPi5nYEo5JVFkSF5NUitTfjlURCNfNkl6TXY7YWRXJXxhey5UPyohUD1sS0Z3NztKZXNnSmcqLlNlK2pXeTssbUljNCNFeztqLm57KyMlR1Vzfmc4bW0vSVA/e0tKe1ElfHFrMTgqIkNlbnRkUTJXUH1kSSFlb05Ofks4OHVmI2tCVmlLeD8qKCNqL0EveXNeciMjUCpI'@;
put 'SiFwbnRzXmgqW1dGXVJPeG9uUkp6UVkzN15AWkRCWHkzKnpkMmZPbEBGSTNyKDtAZEV+dk8wRzVvRipHPixVP2xhX3Q/aVBde0tfM1pYNSg6Yk5MR2hLbG83MmtsKXp2SW4hbDw4Wm5LXSplM0dOOjRwWShscEosaUhnYzZhLGZEQTkuPmJwbnxiTn4hLGBbclt3TyNgO34pRHVPZWtBcShZSkds'@;
put 'I04qQyl1cyFRUFdiVDghZiRUTG4iP1JeZk5wYilQciE+WVBWOFhKXjIwZlppdCxbbl96SFlAaTghODlnZFs5NG88LCR8by8jcGUmeClzbU8xNz8yc3NdeEleLCpBaVd9OEljemojUzpYWmpXVTBEJjJ5SV5CajpdTDk+MHNJInIjZjV3TUhvPD43ZWpkTEdKN0JaNGpaaEZYIVk0QSZZKVY9V2BS'@;
put 'K0YpWnAuRHpuSFdXODN2PmJCLlFxZnRmdVYxKnd3U1JXW05vRWVzZkdBQyVXKXg3PlReVzNWJShFXixNW0VsNlpecXpxSH5IQyt7cXtkUyVeK2h2cCFTVUB+dUQlOHk8U0szPitoeVdobjJgaSMzcXRnXS5OWVZCW05gZVg4XX1JW2xieFV9L09gXyNpOUldMTM4Kndle0RQREJdQFpiXU9KUVoh'@;
put 'O0Uve2VfdTEsaW59eWhYYmZHNnciTnM+VEkrWjVPYT1NU1U2cEB+dGN8QVkvXmpvPHRPOVNzfF4wTlUhbng5cEFOQi5CQFZufDBXeFVbOHojTm1QSncjLjo4TU8kaDFfY2t0ZXJvY2czQ1duKmNHTj5AUGssMX1tTzNCLkJAK1Ircjg/aXk/M19yYFViQkVEY0BnRGM/Uk8pR2Y2KywoO2Y5c0N3'@;
put 'WEIlNml3aTZkQFg1VnVYfEZYYVh7JmdTdnorUHh0NWxOaVlfVj1adV1BNWRZKXEyOypoLFZZPDJ2Nj9hQW0kYnAvWClALkcxdyIsaDJpKjAsbWVKKWlldD4+ek5fa1giVG1IJUk0NUp1P3x9JndlVm0ibz1rL2pmJG41WGBWJDs9d0BpeVJHcSsjbSxhcW8xJlkvJGhvJFc7JG8kJWk3TG06OEt6'@;
put 'P19CK2N7VDE5d15lMCppcnFbTCteY0RpWW4/LFZlWnBvNXBaZTpfK2cvcGgmWDlqNzFTVUNbM2F3Jl8zXjVHcTBzOkpQbDZ6cmd1OEdIUmVgLHNnInhgU3gsQjJ0Li4kaENCUWcuP3BBPFZtPmtESTZMLEh9MXphc10+UkxafnxlMTJNeWw8ZUI4NGF4MShVfWVbZyFnTmUxNUtpa28uWWYzRXhT'@;
put 'ejNDUnUjWCUpTCViemF6Tmd6Lj1oZkUrSEhldiY5e0V7NCw6Z155NClMJTRNb0dyQHFJLCw1PCxUOFdudk1+XzYvd0ZWJCZ2Rzgxa1FEaE4pNDxSfm1MQXpaTjV4UkZ+QVd0ZWVOWHVxKHJEKixCMzRzSlteV1UuUV04ZDZvZ1FxYWY+cjlSSUdWS1YsRS4oZVY1OH1wTCN7eGh9ISJleHU3aCxA'@;
put 'OV1qJT5AXjVqMURENXY5R1Y2dEgvJDIzXllOUz1nMF17cFVGMW08cFghSDp8PjNGYVczTE5TIlJeMSpxJiU/JWwyWmt0VjlldG8/MUhJR19EIVdodkgvcnI2Qk1pSURHQV47UUdNNTtQdzJZR1p6VlR4TXlBdzglaXBKZU9QTDtleXF2UThfJU95bW9DTV1taVE4ejg7OSxmWm1yVSlrbSJEaFNq'@;
put 'eHZSaFhgM358dC5rNVJibDZ4KT8/azZyKntfRD9TVDp3IjVFST9pUi9FMXJHL3s/YE9lW1olbDo/Kn5sSEJXdkJPPXJpXVRveXlBPT44K3soOT1XV1ZGPSxOa2I3Tmtfd0UrY1R0ZEIzSS86bj5rUTJlbn5OTjNpYkEwJGR4b09iYi9rY2kuY3ZDNXxiYyokZGc1WGIsSyx1I3d1Ryp1QHRvXiZV'@;
put 'dXdrb0k7cHZJfjUuQktZQVlbIjdyNXRmeVdEanReYyRHPEg5OEd7Oz5LQUhxVG8uSnRHK2ZuSj1pXnY1d0hNO3U8TmI3YH16aHpiJDZgM0dBVVZtK25BYUFtR0VqTSEjNSxqJmAlXnRkdD5wPkJyPFBkPis1b28zYTJpXmAvfnwmY0k5JU9ZYjtZZyVvbC9SSThreX0kOjxROzRjTypOYjQlWWJH'@;
put 'aTdadzVjdVdabjNaSnh2MU07MkJUYEBmP2hCUjJoVkJQXmE2M21nTWYuNH05PGlEajsyYUk9VEVzX0tPKkR+R0NCNnl+QEVEK0UydSQzZWM0Y2NYODpmQUA8VW55QTB6SnxWMF00SGxsLGlnMUowNjZHbjQlO0NmOFRhS2lUJHpMckNEbTUkckNsJGMuMEciMz80O1pHVCFuPXNubWxlcnAwXmJ7'@;
put 'eFRRTTovKXwhSVg6eXdWenghZjYkNm52bnsvRCxYU2tqWWpdSD9wVCg8dG91ZVUsSEYhUUltQzNLZj4sNWAuYkFUajY4dWBkTi5IQFdVSUBWYDo7MmJhVT5zdWciclRHbFlfL1NpI3hXOHxKP1lyS2orRTdefEoufGdoVW8kZnVoRGhpXlhMfWYqJDp0T2tjTCUhRF1FfkticD1sVj00eCspblRq'@;
put 'aW0sRHZIPW8vfTZHc2hBKXJjRmMyQFtiSkMvX0YpSWU5TypsXkI8M3wmUDh1WHNQZDJzWiU4SyZJKC51W312QS9rbDhgVktgWUwrUUpEQXFpSklFajQ1JEdwcV4kdWNYITVgMTgkZFFDWzp3SixIdXdPaHRpfWJbSn5lIjZsSiZHek1WeVomPSRbKFgpQlQpRF5xQktHMk9lVmdGUmNwMiFCODN1'@;
put 'WGJzOXl+NUYuM35gOUx0cXkySFlGQDtXfGIvdG5dQzk9UEZ3LmY5YTchQCNyfVs4KWpLPElTKkhUIXZDcjU4UTx0JlJ5eEs/Ikd3Uk0rW2xKQSMjQ1BGd041bXh0XikuYD07bl5UQjtLSypjcFAsL110MDZJZn5OLzxFNUk4clc7fH13bVI7X1BvKTgmVChfMiszT2AyaXx4Un5Oanhudz9Mbz1B'@;
put 'QXxWMWkxMTNsPz8pS1c9Sk9+ZjQreGZWJmljJTU+M0hTaGNiYVR3Z0Zeck5sYTF9KmNLMjQueD0pR1RwSFhsJm5HUVNoUjNdJjRBUGw4cFBqRiFleDljOG19Vk1AR1RQITthYlVXU0E/eixrdiVtZXg6XTRnSSJyNnJsbG8heEdvRzh5KCkrRS5SdyZyKSkoQyhNNDRaTGxTc2UiTSxUWFk2K3p5'@;
put 'fHkwZHFHMiF3diJiNCwpXzs2V1Y1YFh7Ti4kWyxOJGFzYjY2OFQvVkB2c3o3PHw7M3xXIVNgXmFEbX1tLm9ySTA9dncwSG5LUCNzZj9vMC5HVlcpVnE9W2dZPihFb2dCL2VQeSxVUClqS25PUUdfPkhEPm90X2VbUjF1MilnME96TUVONjY7QDQ5PDB1Mj5pem52XXtOMD0qfHs3Yi5OWyFxaEZJ'@;
put 'cGo/azh1MFlhPkA1d0lweyZ8JixSJSpjUWB1bmdxIzUsZF5nLzkyLltmIy9nbFE/d01JJFZ0JjYkbmREOUopRmBtW1dbS2JtWiZ4bmdqcU0pVnQqYTFFZ0o7OyYufXgyVzJWOnJ6bHJFQjZKa15pak8sa1JKWSpHPSNubm9VPDV4SkcwPjF2bEVmMDVre2EqVGFRSDArKj01TDw+ZTopKXY5cVRq'@;
put 'KDx8a0t8YVU2YDFIPX06VnJoNyMwOC9fTCFofSZ3dUtPI0p3Sy5+dG4vanY/XnFWRyJ7VjVgJmA/MlY+ODguY3BvSTdCTWVKN1tASEU2TGtqckpQdzd2Snd4T0xfdWBPRGckSTpJcHE+SXRkMiZ9InYofVI3NVFoRzswM2RHeXBla292Nj9zcHZ3Y3B6W1NNWTU+VFYhIWBJSEMqaXxUcEpZN0hJ'@;
put 'TGEoKmpMJFt4dj1URktZRWdxJXNBT2VpLz4sbH0/ak9bUG4xdzcsRH0qVnAmc1tiSXVoOEl3bWtobkIiM0U4SmhRPD9kP30kMlhXQ0VjNTBRQTw2K21IWFlZLk4wKHl+OTU8ZyZvRVkqTnVoKXw7c1ltSFN4dzIyfERtTyQ9aUN3UlJYIzpSYDM/KDREdm1YdSxkLl8pLlRlXVsxLFY4OTJzMV5j'@;
put 'UD1pXkI4M29bWDdzPHdjOHQmYkZyKzVbWipzcDYxSCtSTHJtU0oka25QaS4iZFE7OFUrY1lNXnI9N2Jqayp7eUQ3N0Z0ZEQ4Yip3JjI7TXRYYkBOIlowd1lKdmUiVnBIVGkkNi5afXomRWtJI1ZYKXRCQjk2QG81QVAhOWY5QWVHODhRLHQ3dS5MO3xiO11XeTJ2KDQzXnU1aWt0cm47L0hGNnIw'@;
put 'NmFsOlZQNmZsMFFGUEtHfFZRZzYrVStOdzp8S3F9NH09LFR5fD9yKmMiViV0Nj9tci9CQlR2YTtWPUtER0k4TDlyTkchMzJ1eWIva0hmWkJ0S0xkeiUycC9WcUt5IShxViVSRCJKP19FMys7PzthNXBsVixYaGxaZHJTbEtmMD9uR3lwOi9FLk84WSJQbVRVUjFtaj9+bVA5Zj01LHxKRkxdK0h5'@;
put 'bW55Jio4KFBBLjtKOjRudS88d3VaS3ZNP3tVaHA2IzloJiRkK2NRVS51P1lDSDltTD9+PnxnPWpqWUM9XUpKSk8zNm5kek9bKlYpLFRgbk5KTGU/ajcxYWRlJnhjNngpWUghXj9fX2RLaVQkRVtXS1ZRIXA9bUh8UnpNeGBsPSV0T2pga2ljMUdKdlpVKS49WThwY11XOj4sNVZeYmBOUX1FOyI3'@;
put 'ckw7IWRtJC9JL0xpUCokSCVbTyF1QzhtInkoIyljWiZVP1o8Yzo0NHgrKTdIQ1ZReFt9I30kb3JHZTpOcjZGe114fi5JY144UlFNMjZmOm8kOnQ3fnR2KFRhcGtGMzkxXVJmVFJJXn45SGZ+LHcoXnpdJVt0N3E3LCViYTM7Q2BvVFRSbyQyTkwyXy4zeEZVb15ATDFyR2thIV1eTixwTSxWOnlt'@;
put 'KntnTG1QP2U4NytMfVhzOXxVSCErPz5ATWVPSEY2KGlpal9xaU9JIlhMXnY3cF0zSEw0ak5yLjhpejg7VG8rXyQ5aERNfXw4aEQsRFsoOTk9UD1rZUxdKGReUFNCTCtTPz4uI2Q9aFJlfnlyek5dLCEiTW52UnR2XkpfWGV7XzMyeCJiSiFQOX1LWyJiOV1aR3MkQldnTmU8fD4iWVF+UXsyMDgk'@;
put 'U08mW0xeTXdsZ2UodW93MW4sSXxgOjtuczopZ0VJdiV+Y3BEImNnQXovMit9V0s1NCYxNVZDYXFgTnw2QE5jdTExaC5AUzwlWlMoZ0RMOERTbTdzfSIvOkYufndEeE1iWGsjcG9CPnAsa3FxSWlDL05BRWJ2Rl4+TCo3a2VlalU5WyFuZks6eiNOXl09NGZIK25HfiQyWTJoY3Q+cU5CdHY/LmhM'@;
put 'NT9wPihXVVlvJnR0b3coaSQrQD53NnZ5Sno1PXxsNi9QeXJlZTtZJVNKRiQ0QD9VQk4obmA2TlszM1IhMFgofEdDWVpiejU9YkpGOmFoJWpFKGI/KCw9T2ZqNXBVaEVAKVZFXTxoU31tSWlCYyF9dF5yMDA+ZzZ6USQ+QGl1UFY4VzghZWMlW1QxO2s+JSsvU2RXanQ4VD1YYWouRUhMRjhYfXQ7'@;
put 'KkU2KjRqdEQ9ezB8OV1pR0t9WEA3NWNSSChCJmo/IWZScV1fOjsqLms/NzZ4QWxleDNbLHEpeSIxakNsSyN3aEhQbXdFOE9fRjslfU57Yi90YCgmX2ImPGViMHc8SHM2clRPMiolcHZdaSY7I3FgbTgrMXl+aj9WJU5BT3U7cDtlJGQzTE1NRyFkcmRzWGh6THpeY2pWQHtZb3lKYCN6MjtCWFd0'@;
put 'fGI6WXUyOUw+JFc4cERCO3lIRTwoRG1IP0JPZzN3JC90QDlpN1VBO2VodHhTfEo0eUw+cnR2WklDPEFNZzx9SVtSWHZFP0cpNSl3XyVLTSFZalhiT3FlalolWCpdLEtmNU5NRSIxJVsvVmBKW1ZWaVcsXjNAfSJMb0tDSF07IlJ7aHJsZGVMZUhmYFkvXnspMEw2Mj1waCxqPyRLUmZBXkV8XkJV'@;
put 'K2UzbylHNXFbP1Bnc24pLGcrcjRGJmo/dkkvMTF0c3RZJDZYYmVwbVF+S0IjP1RDRGhmJURCXVNQdTowK2VIUGwsVnBAbXNCVHtWVHpLSlRHSDhNK1o1OlZ1cDtPY1l8Y25PVmY8ZVZFbDoyODRFeEk2Tm0jTiZoakomRm5RVml0TSkqTD9UZHthaDg1fi51Pm5xOSJUT0YoOXF9dCwmRlgkISI+'@;
put 'RzM9QlU9YzVATS5NWHAobnxYcTErP0RJPUtkKGhpcyJ2T3UyKHxORXpdcU5yay9hfmpeTGVWRClnKnN6RHU5MHFpdnBKcWFfaTsvLEsrUmZAXUpgKWs4bzFsaVlpem42VUk5UHB5SmlKbDl9VShnRHs9bThmUkppOHpnNEIxZiRVO3BgeWMlbDhwOV9MNlkhXX0mdzFsYDtAPl9xXUIkNHRlbUcy'@;
put 'PCVjJS5qJiIhUzQuSERQfjI/aCxWb0NJM1I1RjVQOClEWHxIJShvZ0dLYWhJVUZUNk11PCl9ZmJZTE5rW2kwQmg0LFFpcDk0ZnFwczRoZjxSbTJOYDRKTGIhSEZ8O05zLlJYTUlwMX5+SkZHIVMxcUddVD5AdkJ3MX1JQktAdD50YVhucCVwQTkqNmRWI2RxRys+YyVARTYvZTlUUWYkbmMyL3hR'@;
put 'X3lyIWgrWkJDdVFeXlgzYFk5dF9OeCg1dm5gWGl5XmAzR2BXJUtEY1U3dHgqY21SJlBpLnJZKCtldSUjWVt6YWw8Vl9XZ1taZWtpSzN3dSgqTGdxeTZ5TXJPZi5Lfi9VQ0BDYHh6PTl2PFAybUgzOTdKTE5nX2JjVCEkO3lYbnV5JWY5PENRXTs5MTQxeXN7OFdbO3FEdWg1Q3x8VVMuZFZ3YDBP'@;
put 'RX5paiZjOG9vWF59fT9qbCRqemtLN2NCd29vbHlsb2B+TTNqQmhXMG5LcUFVUlJXYWBUQ3E+IURsdlhbTXZrQXxte1U2OEosYyJWSDhNZk93PThPdXJxfjgwcnJMKz1ERy52fER7YlY4akhXKiFAPnBXQE50cVZ6SElCJVtTOVtGRHxxYGw/MVpMLj95UVZTRT1xWGZlRndPL1VWcjFqTGdhZCpR'@;
put 'e0VJRllGPDpZJixUITY6V1Awci5pVF9Id3Z3T3c/NmBBbzpxS3kjZFtbNXR9U3BveGV5YEgjdTwrY1pWenZyLEpmYmxCbV9qQ2VoXj8pR2lWRCRCQWQ/YyZkMGwrMG9pfHhCUV1XP2RHZCN0OzpKQDw3ME8kPFpJRSh5c2deLGMzWSNgczBiYFhxRS5nNTlDMWVOdzRWSm0sJWVpT0g+N30sbUU7'@;
put 'eylbJkM4Rlo5K2FEeStDJEJeRXxqLlpFL11YMVdwQlVjKFZ1V110NXRYd05EJEJoSyVYTyp8aH1od1p4QFAoJEUyX05SQWFLX3JgL1F2QEVLQE5ic3YkJSVdNXlWNittJVpWJWklI0BNfUZlUnNsX2oqYkxafmReKmJ2MWYmSlhnLzhISmlJKFAldV9kMDJUUV9uSncibyslfCpmREZlRDsySGNw'@;
put 'WnxsLGxefDMvZFFTfFhrRVdDRER5ZCJ1UVJLPj84QUVeSWAsKS5POypoblpVNW8ye3U0KVBtVTBORzgzeDVDYXt2N3N4cF5EOThsLEtvPjlWSF01V21VfC9LdXtXeDVNbmB5MXYifkNsX3BXY3NRKnJYcyFJKlFgSWdJdHN8bEkkdTE3cSQxJH1kTEdYZlI6L2NITExIdk9zN15kYz5DRz8qSDVn'@;
put 'SUI4QU0yOHJHLEl6fHE+LGMiVm5ZRDdaMSpSfU02XVk4NlU0QjVvTH12Sl97cUc7YjRXP3IiLG5FQDhRaHJRYk1MKy5dPGFYPm03bkRVfXQ/cy5edVpqZjViUmoqKG5pWSwrTDVNaVI8Xm9kZyZCLkdzP0ZNL2hJYkFDKDQoRngoInl3MGdZRFBpOFc4e3YkSmxEJDIhR2oqUGdxPlI4XzFvZXxE'@;
put 'OVRYbEFwO0NnJndpRk9yU2tLMUtvaCouT1cyN1I/WEFlTTR2ZTFxWEhZITNdX1RfZGYwLyRlJV9rWlZzUFg9PypLaXNuUHF9bSRULj9qdmY/LEExKzQqOCJNLlZXTXUyXilwc15EUWl5dSE7M3FZZkRvQFZ8QiF2WWZlIU8+OG54MjhzV3h3TFo/U0pRZjxJPntVaGRJRzp3Z2FhSEVFXXlwWlE2'@;
put 'WSZ8UytQJjRRN19NaVY9KmZHR3gyWHpfN0I7VWpUQDwhajZKeFJeM097WzthOExOd2dIV3UkTDhbMld8L1FvUjJlelhXPjwuJH58W1ZzZklHUWcyOn1KME5YbCRKcz4vKWJbVTM1Ql4obFI1RzNwcz8qamt2RFQ8Nzk1RDQzdDtpZFAkMis/YWJxei88eVNZYjlxV2hSKTxAX2ojLDUpL1I6R0Jr'@;
put 'emJpRDdJanlaeENsW0BxUn4oU2VtPzt8YDZkMF1POjl3bSQpXSEzMjBfU2BsUEtpbXxfU0h4YCZ9YjE3aktxU1g5byspRHNJKn06ViYqLHdoYz8scEB1IXgyZ15sbFdJa1NMMVJMMzYwNDw3RGReY1BvNTdIb2ljQ0d5c3hST3I+K2ZPR3kvJV9ESUp4ezldJVpKaX52JjhvL2M+MzJaVlA8MV5U'@;
put 'VWp+eGlQTlleYmExI3Y9RTtJVE1EXjh0ciRuOGcyOUlpKkRZdnZ2JDFhMUU4SlswWllOKF5yYFcxbUt7JiYlPmc6M11WeDIyJnssczNtJHQlajJOOjtaIWZwekJVfCYqNl1scWFHNTA5bXB7U0lGTGRKISVvYlRKeUxZa2xFNkJ7NWJ8WlpWLGNYMlpWK2NjUjZLPnIpUTtiV3Apbiw/aCg1NXYs'@;
put 'RD4mU0ZaOGZWPWMmSlkyZG8lZlNOKSpAJXdAcU9QIjFbIVQ1RVVZKkA8ZylAPCoqcCwlZDdvblMhd000YWtOM2dZaXpKVW9vfU9JdzE8I2hQLHdESWE3di9MKXRDTUsmLyZnUy9SaldqbTJGOTc7OVhofV1wOHRyMSlmLD1rUDwpQCY/Pk9NdSl1M3g3dnxWLnRMfD0/JnJHZmtydGQvaTc2UD0m'@;
put 'ajFZXWJqSTszYjpMbHx2VTtAP2syLntyVk05LlM7SkFuM0NHSnExPTw5Kmgwbzc4MypSRjtMT3VwciR2MjJpIzgqOnwhLiY3cjBuOnRjWVRZUTZ4bDldbXdIZS8kajlePCo4dTBQclFrJVUwOD5nVXp5N3xbTnw2JXVISjo2JU1sOGYxMnAzRSRuK204QkJTbGAzZXsiXmVkb3VUVE9mZVAxQ0ZL'@;
put 'dWA+bEhqTjdeeCl8VmZEOG5qNHdMdS5FNiN0aXprNWt4eDtKQm05SHlPfmUpWUpKdTpVMnYrdyZhSGVIaE1sQGJsakhJKi5KeWd9dz5rQDt3KSVrWlE8WWJzRF0lUCk5akNIRUhdWFFudngjQUshWVUlQztDbklfTFdeO299Xm8uSk1SPUd9cX5iKmVBOEw/OC9SeXYpQTNtQkJ5RyVWRXFyWGgv'@;
put 'eTx0RnUsbT5lQEZQfGRNdUo5UHxiN0JlSCJQWlJEfGd1LnJiQEZ2Yithd3wxKG5gNT5VOjJ1QUZWODk3NSh3JD15YVZWMkpmb18/Y0Z7el9yfj5vU3dIR24wWlNEfDsyaGBicjNIZjZVVWprb0EhfVV5XXghYytOd3x3bVMzLzphKjBNZV4pT05pS3s/UXYzdEcmIXlMKlheU01GXnchSDg7NyV8'@;
put 'QUc2JT5sTllvOVlEPGx+O1FOM3tIPDUmWWpXO3c4OCVkMn5kR2B6aSRITDhFODpAS1l3UmAuYytIT2sjZXJnL05eJGQxO3Y6JE12eltWbGJPPlM0L2hmNjxJYjFTWVRtTllCTTNwYntMTlUmNiUwdzshWU9aZUVYbSYpK0o/W3lnZFI7L0diWWtATkBXaE1VfmJCJXtQRnBhTiMxVXlsKi85UWhB'@;
put 'dSxZRTtea0tIemwxKGhtaDBicUY5fl4oPFV+azVXaSE/KDxGWk11RDlzPENoVD5Hc3s9XSE6PThPW2szeXBlTCJOfSQvXUYzRUB4MFlYUURNc2VzS2VLT3hZRytkJmlVZSg/PWt7Lz1QUD4sWlNNLnJKY1NQMC43VXN4PnhBJncrKjkoVjBtIS9dJUg9ZCREXW4oNz8mIS9bSFEpYkRJInIocC91'@;
put 'TnNXemUvRmtFQCgjP2tfbzgkKEpteFkmJHJlY1B9LH18ZFd6dUwqd0Bqejg0bElOZD9IaTR9KmdWaTA+YjpzaTY+bGkkZC9uJjFoMFNDRVZ6T3k+JWJPSGRkeDVNT1o8Lno1O3ZOVitdL2g4YXdaSispPSVEXX5FY2NkLDdwa2VPPDdiWWo5bnNVYF40USRKYmBIZXtlIjt3P2ZMKHpIc046MEpg'@;
put 'VlhtNj9DOz9JcnpEVkRkPkBbOURZeDRAdE18aCx+QGVIWF9jZ0BSTVA/RHsmeVhsVF1jbzRaaj8kQCttaWVzIWpyRmZNVUl1Zkh8aVpQaGVoKEBCaT5qfD5mLmRNIX5wRiMwUn53Zn5RdjdecT9eMWYuRm45WnJ0VTxTdmk+W0VhTTI/fWQlTTplbjtTeGBEZ2E/WH0zPD1sbWBPUWdDTzltd3ds'@;
put 'Nntddy8xMUg6S3YoLE52Ym9MUDVnY0NMRUJSZm5iYlBAYypkV3QqMFcwaCpBQio1N1hmQk9VVXFpS2lZVWNRczlYekJGWDAoYHhKSSZDKjV2N3RjeykkQUhVIkZGdDR3fjc5UCkiXVZ7R34obUxQNWZ2ISs0K21FcHAmTkBjO0x6TENDUm5sSlFHa0hVNi5odHVCTWhealNYS0ZPWWYqZzVkKzps'@;
put 'aUNkNFJvbkBjKzovRmVaZmRiZUE8fkxIYXIrN18sR3pCK25NdDR3ZkowSzRvb09iRCxCInlFNldAcV93dzxFMm5JQlVIcisuW3BWeFgkSFBkKmRiT1hlLERKRz9pT0cqNXY3WkR4V2MpOih7UnxMUDVBOCFDYm9wbnA0M2M2RjFjQWVaQilMUkNeSHB2fldjWUdkMFFZQHJVUT9fWDd+fmY0MDYm'@;
put 'RmQsOSRtaG19RSV3cDxNeUE1d1ByT1RUQVBAIU8oJmFCMWohY3laR2trY2NtSEhBL0pgaUwkRUBPZDpBOjd2e2l6SWVnYjNML0o1N0V3XmBPMF5GP0JyblB2e3VaNDhGMWNkWF8wMlIvRkdDX2g5Rkl6bzQlPFZSe0NLTVRqIkN8fUU2c3V7UWBYTzB1MHlXU091eGVPYVN8TGpHZ202YWN2NChd'@;
put 'TlkpRkdzd1FXI2Z0QjUyOiZDUFV3fU9feXtHLCZBWVNKKToyWSJkWEdRQUR0WEw6Q2VHb08zLyZfL2t4N1J3eVElcVhtOVMieUU2aipNaGtTSXU7YV9YK01qelNLRXV4KE4mcUZ0WjlYRkJJQ2I/eigpSElCVUhAdkQpI1tHQil1JTRfdjomZ1lvWVVfLkRGOFBWXnNJOEVdLCxmPDBlQkhSPzh9'@;
put 'Ml9idlZmY0k0Qy5DKEF4Nm9IaG99O1EhLG5hS3RhNyE2WD1dITh2UyloKHY0OnxmJEdVPX58YH0zcWRdOzQqKTZKVVIpfEJCNjQ4P35XelpfNHhkTzxrSVd4XXFOOkMzW2N3QzFjZDBgUDY2d2JZYkEvV2NOZnNhKVY0Xj1PN00+XnEjXSZtQ2p8b3lHSiYqWzx8SWZ7XWZIayMvcVhiRD4lNHZf'@;
put 'Y0ppUFJUczF1XX5sRml8Wk5AL0VXIlklczs9WkRaQCx1O2YxO3R1YDhRc1UrajhzYXtmcCVSeSFifW50JHI4fCVlJmxvem17X2g4dip5aT45VGByPiVISmM/bE9eTGtyOTFmSlcocEhvdz9HOWs1Y11wOGx7YDtpTElwRm05eEZJVFojOSNjZ15iW0dzM3cqRXBvJiRsSy9iVzwqW29ZXmlYe3ND'@;
put 'c3UiJWAoPFpGUndJTjhufSN9SlhQcmdMJkgzbzRnXk13SWJLdzw5Mj1Td21iLE8zVUxMK2wuNHowQzVyMlgxNFl7OlpHITE7UT9bQ0cjUG09XVFbMG85aCluOmZfeVkke3kuP31jN1IvLkkpMH1ISztEb1B9OXVzK2kwS35AJW4jWVs/TXBWJSssK0RLQj0xcHlieiomTSFJZFJuPXwofHJaZ1pJ'@;
put 'YjtGOTp8MzEuJUh1Rj15alpnUE1OKGhLInVzP1dDezpkPU9eKF04NDEsZWdFZnFPeVBENksmO08odWlteXxtWDZbSzpCbi80SV4zL2QjI3Z0MHJ4Mm1GJGBkdUgkKDxvKE1tPDVZWUdIPD5RY19ba2ZJYmpGczZfViRHJlh7STRiNzM1LkpLTzU/WmQ1VDFUVXljdmlbRmdpRTwkQDlCbTxpU08x'@;
put 'VWBVRyRIJXw2OkQrcUdyYHAkUTElUFF0JXN7V09EJEVgaWYpQG4+P0ZDeH1tSz8mM1cpRXksYyZ1QHJSWzt6Ti8kKG0rNHRpfEM6KDJPYHF7I2RRUTxXdFZUamNXPzhRInJMcmRFZ1FLZTZjcSZTMFhQLlImSDJILFE7O2J2WW5rQkgkNldXeWdWPC5vJDdqfFYzOUNfQkVXOSYmSSRuZkc7V1ds'@;
put 'UzAkOl5jTj9nJj8mLzhwJFtWSS57P1BibF1AVkt9S0BeQihfez9KVzZENDtlUz5UezokNE1NOiIlQnB8IiZVMjJqd3RRWGFyP004fFU7XihrW0xlan58MWlVaSxaP1R7YnZJZ2QkNWAqbG06cEM2cGBnbipmRTVYKGZCeyZkVChVcHJXODxhNCRTMkokREdtYzNrVkpvIX5eVzFdOjJpZmk/fGgq'@;
put 'dyhJbjVSek9QPXVtTnF4W05bKlZEaGJOISRZIXM1bzcoW3ZDRlNkaVIjKF1idmYuaSljXkAkJUJtSmNkUCxuK0NeTDklOyVqO2srWk56KG4yMCR1I10vaytTcz9ickVqVzZeKHh8WnBaYlZ5cTUkZDVOLGBBbWR2XiE9dE0pQTJ9RGFiPl8uSl17I0Y/cnl2NmxGOSkwLjZHUkdjUUpWLDs6YnY/'@;
put 'ZnQxUmssQU18fU5fVShYWn4xdzMsb2E1PmhVXzNSM0gsSDBTP2BHdXNlXnlmInpKNn4pI1F2MV10NDM3dl9ZRmkhZmVDflRlZilZeDQqOCNRfk4idklUR2wvW0VjMklmdm5gTEAkeCJWRDIxaEdDK1Z7LGRPP1QjUUVUR2A+SFQqcl4xfTF2N0tXNWR5IXNOci55cyZwTCtHfSU+YG5CRDI8USJD'@;
put 'QkVmO0lrLzdQV0kuLEhoTWNkK3xBdTA3Ui5pdUZ8eTI5JnVbeCEyLzw5PmtdKUNTMVR2UTxWZjpMbklmPHgzckRta11qMXVHWlYvZzZoX0FjV0wpc09nVDY2Ukw+ZCg/PXc+bjNLaHFKJil9e0hZVnlheGlVO3ZZeXgpSjEwXnUzUHJvL3UhISN6TWp7TCM8VkF4PFZBVm5hamI8S35wMWw+NV5O'@;
put 'U1tTfj9QUiExWDZAO2RNdVU3KildJUpRSH4heTtVVHFFZio/LGJfISxbQHw9ZEpbP3pdYFdoI15ENV13Y0VLUCwoZSVRdDFiQWxTNXluI2JTVUMkQlshOEIkSkdHUUI4diFfMlBgJlliaDA6NmJpO2lAK1FCIUphPHBAUEIoMkMlKksrcl5MbmFQK0o+IS9CUyhCQDZoXXd7YVNZLHoyJHd0P3Bm'@;
put 'QnA5KmAofStfdHhAd2UqY1sqLih0UFR+UzVEfHQ4U09DKUtXMk1QbSlhUGEqZkxyRmQuRFJmRCZ0UEtCJWxoPClkLFBsUWVIekM0QU9Eb29ZdlgveChAMCElYlEjJkhrNyVpT2Y7QSYzMzwpIlMrTz8hciY6biVePXNZYCxCRCRpeDh1bD09K3FhOC9leXM/QEBIUm8zRkYyLFRGVHBuRWNqIjdM'@;
put 'TlVdRDQpfHElSF0mYTYpYi9fI2A9UlJrMnlSKVFWPXJxPSwpSilFdWlZOnpgfFtrc2AwSipCUE0maiI9e2hNWTBUZUksbTtoNSRKdl1YO1BlYGhjTkM8IjthKFsxdGlqQX1tJnArdzF4K1dnMk5JPG88YCpYaF5yVVo4QnxOTytrO1d2MC9fP1NhZnxVI3BXeWk1OmBCdmY9RS45elR5YD15N1Fv'@;
put 'WUd2MUhkfXZUR1FsNzVnUTY4M1IwNmNybFJ5WXB2LldsZTRdOHA6dCtTfXNeW1VoJDk5enE8MHQwU31zOlU2an47PGtLLzdPTzZ8KUVEcy9UfVFaMWRDMVEmPUl2WW1NSDtLJF1jbzQ8dFBZaj04KVNuVmI9Yz0/Wj4+JTpqVih8Z0tfPnM4MCxodTh3OXt8W2Nda1MxckdzRlZoK0Z0U2RGSmBW'@;
put 'VSMqYzVDS2RNflJ8QVNCMT40LGMmakI8Qyh6JU5iKz1NPFZffFFRYT8hWUR2RTM3OCp5OEhtSVRRcXVwRyt8UmdiaixzIjZqPk9SdHJoJlVhKXlrVVdYYXw5c3cqNVt7aGpLQU8/eDdTXUYmTDFrc3U5KD1PUSIpbEIxcDx2fntKT2NxcVtDcmhwTHR1bEFTQkpYQFZ8N0g0RSR2QkJYXmRZSDd0'@;
put 'XTlXWD0sOGpyUkNIRj5ZT1ojck1uWmszISF+aTZbeGwmVDUuWDcxYlg7WzdYLFVtVDovbSRrN1gyYTQmeCRGZ1k2TSp4LHRMNlZWaFVKKVUlNUhEYV90dmdTYU9WZiUoQ3V5eyg6cG5RMipfI2RxRz4oY2E8cnpYOEAlXyV5Zz5WJUlfUkcyMXhsZTw/cjZ2ImBpeVJKPWNvNnFgWDZCUjV3O3ps'@;
put 'bDhtNTU/L3EsYyE6NUxEcmh7TD1NbDZxeGFVJDQieSVbTkphQyR3QV9MJE1qW0B3UHglWmxLSDhgUmc1PmM5ZzRJRXtsP2VgQDlLNV1OSTksTlJVfjlAWD1lXyJvLCkwfU1TJV5COzNkS0dtV1A/P05PXixxeygzLChjUm4jOT0sKEtkR3ZDdTBOfkNKczxPPSVsWikzWV5nQWEiMVkjNFNqS25x'@;
put 'eXsja0paXU5hL2llfT02bCFkcSEqRUBFc2Ise2oqcls8I2pySzgre1NlLGUvMCY6fmh4ZypoPCFIW05hKGZ7WmEsT2hoOHNANWRBZFNiJk46R3ksdENtZj4scDhCaVlCKGF7NCFXQ21EQD0sXnJkdlhCcjFvWXdJKUxsP1JMaTJQVXxHRmxQZkR4SUZeMW9PKm1ERlg1IysiSTl8KlBlTGQoJVMz'@;
put 'VVhAP1RYYiljekludDQ0aC88YDdRPU10ZC84Zjh0SWlDKEJ8TTMmbi9EM09PZDsycV5ON2lOb0w2c1k2ZThCcWp6U1dkNEBmKmlqYmVQTmQ7cjVrWylefFRBKSxSWD1ASjFeUlE3JDk4IjAydzt1e2lnMWdmYnZQXlRaOkdhPGcobDImJDFLfW4/aEVSInYpNnI/YlBvdFFYb247VW1NKShKP3Rj'@;
put 'bzBbYkp+cmFmSHIzQlVAOTgoJV87fE9YbiROPnE3I15OWn5rPylBbVtAIjQjWmh5ZzByKT92KU5yKzsiMmxgaSlNQWwrbFQ3QjZuRCI2Ikg8d35PQ2x+NyhlUVl8SmEqaCl4Oz96e31UaDhtRHo9dH5aI3UxUCI7ciwyXlpVcjc6ayEheTZaN3EwdGw6QERiLnZJRmRIQzRJYmEqXiJzMkZ1MDRq'@;
put 'LiIxPU1UV15CcTVmLml6UihPZUV3KnUldyZqOnl1cURiUkhPe3o8RS4uVyw1fXVmSHBINUg2S2o5P0Q2MHpUTzMiVj11Yi8iVjVwLFBwczRFNDpqLzVsaCQkVDVbN3JiViZudV8hUkNFKS9+MEVyJDh9bFFJQ2J4bkkqbi91JSF7fCE2ckhbeGkoS0VRZU90ZEBQYVVrKVAuc0YqdSN3a0g3M3g3'@;
put 'cXQoN2FZNVc/ZFsifFc3Wk8uTS4vcCl6RFRJIz5VUzFSPmpyISl4eHF7YlUkYlNAe1tuIWR6fDJoKWMpRU16Q0xZVmFDbXtRJEY3ZGpTKnVrMSkqaEw5R1ttZTI1YklZV0tXRCJZLFV9TDhRZFl2L1gxTHYuQ0RPVVUmTn4xLmRMTnVFWE4qfEZ5eVEiM2dmVE41N2UhQTtTZFBZRTx1XTI3JXRf'@;
put 'NzNsI1V9dyZNXm8oN1hoVGx9dyIpSW1oSDBiV0hYTiswO29BU1I8Qmk4RS84THZFZkgrJi99PFJ1KnFRSjRHT0ZvR31FWD1ONVhSZ1sqTEtFY3o6fk9DdFMzXy58Z0A3OCQqayZDaVZ2Lzx5UTlzZWVFKXhwLzo7NUJ2X14mTTptdn1SJEJuMXlmYjhtamJsaXBFMiNaPC9tMiU8UXNZd3dnVjl6'@;
put 'eERvKG5YWUwjTHhxQVVzc25gfT9Gfl1sQVUpZ0lPQUA+c2kxNVs2aHJ0czJwZytzXWtxLCJnPURvfTtfZi8lTVghR3lqN0RYeDdqVkBWLngjd3NpUDZ9T3RMTXlhd1l2dFQ7ZCpGPy5tJT00P010RF1APlh8Vkc4Q1s8OV10OjR3P0xWJjw9QEVVI2QheVA8O0d9UFFmIW0pfGJ2QEwsTnJiXy47'@;
put 'cG4ySC4lYCMxXy9NZ3smZT1BYHlgSygyQmFmOiNvb2VTK2M5cjI4bFg9W05nZC5iYn5TLGQpaWdCSC5ALHh5VTNlI0BHK2tZSH1FWlNLZSZXJF8hWDBWYCl+STNfYmdgZ2cwVVcocEkzLHw7I04mSFtmb2crRktXKH1HNzNOM0tQaExEa3FzWUhkRmVbSjo1cm91KWlEbVc+NDp4VGZQbCpqfCYq'@;
put 'fHpqUktbIWZyUzAkVWRaJChQJGouMEdbJCpDZUc1dTRwWWw2aVM5IzkqPElJbUxvRildazJYWTw9N0AoY157PmY4ZylSaW8sJWorcD42bEg6S0ApNUMsU3s5YXw/TV5QNVtSYnlgcFE+clFSWyU+IWZzVkh+IVpwbittI05dSD1DXiZ9OS5mdkRgQiVYVk1oaDJGe24vV1M3RXtWXXp0JW1sTTZR'@;
put 'WylnJXlJTl1bPVpjUjsqVXsiL2pdJCpuL2cySS5EQFtaZzJNeW0veHpOW1klbWxrUzx4UzBEIzk3WVV8UEYsWzlmZDVTcWVtL358ZWRlO15DTyVjNStuWHdmeEhGPTNrSDUhTStjd3dTbl06OmdLI2AlcDRzN0dgOiVqdnR4NS9heD5md0d6Q215WUlKNX0lY3pHbERmYDJPLyY3OyRISGJJVTF4'@;
put 'WW02PjlFc3RhVX0uN0tRdG46MDE7UVd1ZnE4anRKRD4lbihXKEVSdTY2PlIveDlqdTFmakB3NEk1eFlFa2JuJXAsRUQ3d1BWay9nUmpgUkUrVjlmeSRsfEFSY0k5az9MO0IsSl5GVjxQMmRZWmVXIS5rMCE3U1c3ViFmO2krcWVTV0F4RXl9cS9Sdn1lZihNW3FQSyUjWH0vRSxxNWM6O0JpS0tZ'@;
put 'NDF3XztVRltQIjBleEdAMHtrV0BnPDIvYzs6cmF4aGFXOkt8YVElJHFfXndDPD1WUmRDMlBsbDN3TXBKbG9YRGlScitpQXVwWG1TdT93YWFQTkVAWm9KUDUlRUh6Ny8+WWUmVWRbbmhDJDhzUHtZTGc/Y0xkb0pEOkFQUDlYY1haWDs5P3BZZDZDOzk/UDAzOW5Pe1Y/Y28ydTwhKntZKk19OHhg'@;
put 'dksmY2hXLnsoTFFBcm95KkAqdm9YUzMkU3VMcURQQit6IzB1V35gOjpRX29HJWVoeWlUJGM0W0hLOzQvTyJHOShNcHJnSlNTbSRoS11MU1s6Jjkjang4Q0k6ZWF5V1ZnYGcwbUd2YWE9PXBeX2dTJnY1IU9nWXBlSzEpKjZKdkNrKlFUPHFCfSZRIjM0bDdufH1TN2M5dX5dQ2VIMHguQ0U8bXE/'@;
put 'KGYqQWQzR0d2UCooOHFYZWckSEpXPVBWVTRHdTtMTihuMCZvTmtIWSNjWU86e15mOC4hX0dpZXVUbXA+VUBqOUZwY3tUKkQuIWA9KUl+fTk1Y1AvMn43WjIobnBCKE5mPS9GZmVuKz84Iylyb1A2dn1GfCRvNzhGS1phQl4mTlA8bTMoY2l0Ki9gKVQmcVUjZlFTaW1xK0w3bTNqOzBVM1UmX3Np'@;
put 'c3Q0IUVVOCg2R1t1Sz53JSsvMWlsMSNbST98JUR2cTBYOkxsOUVwWTI/ZypOWXpsQWUydXF4ellbdU05YUQ2S1cxUVZ7UWc8XzNbRnV0JE4mL18oVzUuQSopLmM8ZWh6M11RRCt7anJGbVAkJFlKSzhdNkBLSV99SHhCIXdPJVV9YSFyN0Z1dzVHMHp1SmBvY1FVMTRCQkB0Zmh1SE1YU0doJXk4'@;
put 'MEVFKWI2S3VbbCU7P2olRzI/UHZObSg5Sm9yI0hMJX1tN2g8bXQxbUg9KU0wMWEzQ1A4flE1LE8qTmR2b2RLXk5gQHhCS2o/PSFaTmhnW1B4Uz5lWj0mPXlRJkd5a2FZJiVMenFLRlh7cnQ5RWAwbCNRczQsWTVqbU16ZT4lU3hKfDpAN2psU0lpOVc4K3dqL3h6Kls4ZCxiSmB6alI4JV8iNDYh'@;
put 'My9dZ2RmOHlkZXhjKG1uMFdhbDVmZkBNODRDVEtodVM+LGFpXno/dks3PFZbQFM2Km5McTRRaS9nRTBvKkp1MmxwVHBMP2pAYShLeT53REYzezM0SEpyJT9UZWZ0OT1QeHNwbE54VDVsSlRSPUdtWVt1dGhfQTNgZmllRzNXSWk4cC5RXU55cWdLO0pqR15McHpDZWdKPVA9az8lR00hI2JkZG8s'@;
put 'PVQ6RCskd0s1RWZLYmM3MT9hQms5enZxYVFiVHJqRzd2ZEc3Mz4wbEx2TiwsfikhMXNGbV1eOUgyaT5TPFYqNnhVTDtZUiZQJFFgQXZKYDZLYClCWSJTY1JNYikkaXFkR2hrTm5WZyVhPzYrM35Ve1QoZztIM1FsPn5yYGtMUy9qaTw4NGgxZnhhSjkuenl3cS4scWwhTG0xfWBCJlgjOil2Uj1P'@;
put 'cyIxLmxdV0twKT5pYjB8O11FMSNvNUByQzI8OjFCdE1qTSZaODdJQCRvdTZVeyspQEBSeWdHWlZ6JjBZSTQ7QXxHNGgxRzg3fHpYMVh9VXRfNDo5W30weUpgdE5hTWI2MkAxLH41fG87KDAsfjVYNSMrfkxCby8oL0JpfGtTZmZaPSNrfD5lSVdNQUdNdlpHNX4uYjwlaHBbQD0iYEAoZ1lqZ2h9'@;
put 'd09Ndi9peWkxXylTTn1SVjElUHMqe2BKZW1VZDZYIzE1MHhzbUg4TT0wbURJMW1aMShZQyxVM21aO1UpWSUrNGciU2o8PyksTkRvdnpRSSJZS1VIel8pP0c0N1lEamliZF5HQSs7PVAlYjZkWW1xSktMaH1AbGJMVlhXVnB5e2VsQi9bUldVOmt8W152NWw+X0k0NyFaKTc4NXo9eUlqcHZORW1p'@;
put 'd3liZGl3V1pVeF8sNFFATWtjOFc4UDhkfVgicnQ/bUdtTn5YUnp1L3wscm8uSXZlLCw8WWowSWprZVRkYlJxaT1EUzg0bHMkPT1YWjZPWyg7QEklMlNIIiVmLkciWWUzSjhAXlVVJGx1XyVxWFZCeX5NIT9oeVo8b0xmMkxWR3lCK05eR000NlFXUitZPClCO2JHeXBve1t4bG41ZEhaWiIsXT1W'@;
put 'MzxQMSwzWXJhbHQ/cjxXUGBycGVmIS9jaDp9IkRhJU5DZ2wiUSIsQkBtSCx1MzZtb0xLZ2xuNSUxJUtGdn52TUgzWTtrPEl3L24ieytnSzNkZkxmOVd2XTBROER3UWJTaG03UjciZldVW2QsXXgjRUMwb0x+V0JaO3ZsTDxAa0lFb1k+WE88OGdub2V6W0UmdV5uVjdTZEUmU25dM2RKRiZ8eixG'@;
put 'dUMzfGpYeXFWLGFNWVI/Z2NHUXhMdGw4fGRxT0JsWVhTW083KnJdOT9xajVzW1lSbSpkRS5EOXs9IT9VSCEpJTxPN2MoUzRnXjpEdTsxSzVBKkcvXXpoQU8vVTp6MjZjX28zQjZgO3xyRG13YGVQZTR1ND9sPE1scVJZLmkqRndNSW5bQWpKfnFgL0VjbGNRSzowLFVAY04wK1FpT35hTXtmIVFb'@;
put 'Ol4zKFZKKXxkd2RGNltsJX0wIUN3Lk5pKX06S3xFe0EsMWxfM2Z2TSFbLn4yc1J6eythZSVqT3ZQX1MvUyF1QUZbQSVEWFhYKUYudj1sb197NVhTbW87WHY2L2ROWikjPD5iQUpFNkQyfGU8d3I1aHtEYl4ocn5pSnZRIl4zdjo2PjlAQzdoY1BNTCouU2VqLjh7KmpMJFt4OWpFYjNtTW9AcUJb'@;
put 'TGpZZj5TekFNYit8UHZDbEJsMSIkZjhtNil0U3l4OT8/YEVTMjMkY24hVWFvWlF4MFgwPjV7S3AxMXMmZG1dOj5JT3ZnT29DXU01OXwpWk1Ra01pey5DTzt9Q1N7Imxjcml4SmZqJEU+aU90O2YlKm4vamBjbG9rL3tPQyJXa29ZNUMqQTBGXmxFe3ZbXjE8X1ZmYXt2RzljUHJtaXhvOz8qTyFN'@;
put 'dTgzeGtxQEhmfHpadk9WYWRbUSsrWiVFdWgvX0E2ayFpIkdUcDRnSFgja0w6cUVMOiFqPDBtbzojQyNxK1JURGFpY05fYUcrWC5ZPVttKjQ2UW9RISozfVc6I3FDOSkhay9bS0p9dUYpcGdLXXFVQ0UpL1dQRUVxfjMxYGw5KWBvWzByekI9UitpSn1ZNCtiUlJLXVg7bnYobFJRYH4pZTdeLDpY'@;
put 'eyFkbnd1OGVnZG8yT1J1VlUzeWkiRyNWfHh5dyI1fT55eilJTls1JVBjQm1SIVZEOTcsNVRubis3LD9ofHRbUnBSZks+QElHQGglP0NQNVhzYFQyOjFVOyxFUSMjNF5neSRlKmJaYjA2L1UxTjw2L3YmZjE7eWYkJWpgb3pHVn0pa11GWT8waGt8Ok9RZV1gZyM8fnNtXSMqTn5YN3dNTV92YHM7'@;
put 'clAwJGQlQiNCWCU2VygvVWBQZCxoMXk0a1ZLfl1WJUBpIXlJKCxddTksUlY4fjlQfVlENyQ1Jmh7UyN7LEkhOkFUfmgsLih3aHE5encqUy8+Sn1Qc0JQYjtSMXBwMShQY3MpbTx+QFQ1L0YjWy5HRFokV1dFajVkaVkofS9KNWNAXXg4dUBAd2kqdFJeJF4ld2ZNTWglaXFzLHY2TyMqTCxZKVVw'@;
put 'd3x4aThgLzlLTXtkU1pNU2R5V2s7aXt1NXJ8V3shYV5xIT1gTC5wQEAvTG1CeixfUVl1dUpNVTpOPFFLVXxzYE1ERHoyTWh0RVBZRWRnKFJ8KWtJcXU7Snpgcnc8RmVfZ2R8XnMkdklpTGB8JV95d1R0c09kXT8oMGVjNT46bmkiRisuWkc+M0hRezVfeW91NSU4bXoxI2I9YCZqY1BXdCZbdmh8'@;
put 'P0lmbWxjITcvXjB1MXIlWChgNnxiMWdLU21pQ1g2Zj5aI0ZpZEdYeTNfdFEpLnVJdFkpRH5dOnp+SE54MS5PIjQlR354d1BfQTskUH0+SFMwP3Y5XUFmMlJuUihDQlQhJSUzXjV9fUY3Mjk3VywxNDosS0R1QSlAIl5MKyoxcEg+WChoZXZNS21mcEJIQkhNRztJY1kvJmJmNWg2UT5WK2RKaExu'@;
put 'ZS9sUXBtM2lFU1liLjokSWRuV042W0dqelg/YyhnSnppdnNyP2BPRUo4SmpZL358a3JrKHB0KDdoKkZqaC9iZjdCQGRKemp2PHByJlhYOCVFJC93cmBWZyJXNXJ4N2ojY0l3JS9qMV49eVljVXF+bnQmRnZKYDRNRXloWFhmfFlFWFhmbiEyTSVyWkQxcj1gU0UzXXlncCxkdko4aVl9QDMkZlV4'@;
put 'ei8wMityNUYqZHhoKXwxcDwrYSw8c3NWTSFbKTs4alVvZmpeRGc1TyJmbVtyTzVnU2wqb21ofEt1YS9rW0liMnZpVyhFayw3UCxDRU45W1NQRUU0UFZyUiljJFtCQW06MTF6X25NRSgmUWJCa0VJeClaWEFhQk4idTdIWzBpITMxZysmcipGMDgrNzEsTGAkNTUqT3Muc2RweF0kIUZAWXpja1go'@;
put 'byZ1PjdgTDpqdEomYmpNP2t7JXkmUT07clp5Ql1FWGpfW2pqIylaYS9MakQ1NGN6fXUrQ0RkRU5DJD9xfk1iMEA8MVFHPGdSOHdaMyEuT0JfYDBhL0xfY0taKG1UKjJPYXdfZ1NnT01FfD9HPE46VTFTODF8NGc1bUwsdnxEQGR+MG0kMHt4X29ydWkiOG50biU8OCRMUFdNdjZzc1JOSzcrYHk2'@;
put 'Riskcml0SWFDOyt0YEksWS9NbE1fV2RhfmJjRnVoLzQ1XjUjcjRdaHFPTiF1QDshOWY/NHxxWipUaCVialg+SUIiR31Ra2hCSlg1TVJ8YFp2WC9ZWmtzJWQydU9tUkZAdU5pKlMsb0xDcTQ6QkpFbixEcFksJE01YzBkJk47TDprKkp0Tj8xTURpMkMuIlFESEhrdEl5Q0Mle3J1KXtgfCE/N2wj'@;
put 'XSZHP0JyVWMlPz1FW0lUdV1WK2luKWN8S09nLnNvdV9MNixEQ21RLjk/SSx5JV1QfCZQSGs2RlI4IytxWTJJMUFpcXBZRH5rL1hSYnJsTTtddD5bfSlvN1A0US5KYkkmOnxYbEo3e1poYj1rNS8+Nkhrcmg7VWVVIU01QnJrbGV9WDY8VFlrMkh7eC9QOXQjJVp7Z0FhT3NlMzd6VThHUFg5bitG'@;
put 'dmo/Pk1wZTg/XVAyKkliWkQuP19NLF54VW4mKTR9cWBNOSNJX0ohdF97UDF4Pn0wfUttUEQwWTNHNXxjOTg3b2orTG8jMiF3R30oZkxsSDA4JmkqZkoka3tMZ0JMQHk1SSJrKEs/ezBGa1dpe0RJTktie1lmIUY5OXpfb08sQCRKdTpUdH5abHNuKytNeXEkIVQlYkxSYUxbOTROW1hENzN3PlR8'@;
put 'SHwvLDhUfC8pbnt3Y31CTT87ezNgMDdCMVMhSD1wTEViQCQ2JnJNeSg4fWV1dUohXk5nJTAhNy5xXnBkRGA8cV5MKTFpNV5gKHAzNyt9I1daZmgleHxaSj1lSEk7Pk5ad0RiXSJlT1dWRG9JaGNLdnNdWGJCb0J0PENmME0xa0hCVEQrJlhmPHtLVk1mMD1dZSExQkNOQStvb1FWdy4uUjspLlg0'@;
put 'Vyg3X3IvNiIqKVU+M0YzVF8wOWVBb3VNe01GO0pyUDcle3JGKkl1eEZqZnZGQHFkJUtFQSRLcHVpSzEhIilfXyh9eCosZ2E+YSZfPjZtcCxhJW4lbk9pNXZlckFFOyV8XkMmMjN8eXQxOHROOHlEN1MvWHxoOXZDUHYyblksLCs+bD9gNEgsL087TClzejNYWT88XUIoZ3E2Ik1CLnY2OD1LVS5d'@;
put 'K2ZrZ2RNWyQuJjBVRFplQGxwfk5gLldCXzM3VjYzOVNwMXI/aGJeSjRRUWk3JWdxTi9yLndwO1ArKiY7N0BpT054VXskNzshWTVeIVR9RHFdNCYudmdJWHgzMkY/OT4ofXQqfGJZXlhrNmdxPyR0RjNVeWslVHImeHNnUTFKRjkjdFY4ZFgvZXdGO2R6RHBMZj9qUnJvR1tvP285KV9kfTBzM2Ms'@;
put 'O21MOmhJRUByTF9KSVBhNShKRkpDLyxoUllGcl40XXZdOjNiY3YzPFd+K1Q7fmsxOX5XPGklNWhbcSFDZV40R04lLlRAPXF3ZyVpOjpLLj43P2pLLz85YjpGYGgjQUttRUtYYjh1Z1UvdmgyNlRpLllOb100UGguQX5xXUJkdGtwLE83bXZiNTouWik4e2csdHxmTVBsNWVNfTEiYjkkUiF0VVI7'@;
put 'TSNyMiVlXTh8QFolVmxhayRLUC5NLkddQzJbVFVPW0ozXzRROHc7WCE8a2lvJFt5YFdLWURmfUxOVUViPWRqLiRfZkdJMHhWL3lMcm50NmJkaXN5YFdvPHhncClocTNLSlV8dVNdal0oRGU0OHdkfW8kVVhicm4jKC4wfXIvfEolUGp9M0MoeUhKaSt+KTQjYn16TnxteS8rKEVTYGZMTks+OiU7'@;
put 'ZSh0fEJzPyI0QjxhLDlwR3RPZ3FCKGVWI2J3bzhhcnN4fTlWMSh8cWZYQyRpKW5MUG86UCwsQndyVCVxMlNdU01obGhNMmlvPzJWOCVKbFNSRWlIbiRIcnxsUTM/XiNRaVZaZ1JCQHdHe0s9UEFvSzksZWxsQnl+cSNHVihtMEdSQkBURjxsQnltSHFgXW5BXj5bOU86VUFVdkcsQz9IY1FIdUxD'@;
put 'ezBDU3BveEl+V0M+aXUzam51KCxvM3BfQV40Iz0pLmA8a3NZKnVlbW0lMntKaWFYQXUpXzJMTz5bQEg7WFd9SEx7dF1ZdCUuY3VmXl86aDZyT1h7QWV3UztTW2hQOWFpJExGZCNgInleNG9ecFtiYEoweUt9Ni9EKm5aXWJgOmh8eXR3Q3dvOSpMblh8aXkxbFFSKyxeQHpsRVllYXdqbHJAbENa'@;
put 'IVIqZEQ+dC5EKEJQPD50el1kaCtaKiR7Y1pzWkVLO3RVSUd4MkF9JGtTVmBwKXNJQHl1MVNvPTUkWXU5dUYoUjIyRVtgWDAhbywuJmBQS29lVClBXXRSLkd9NWokLGAoYGV7RW1NeVklSFpYXmc6RGB3NlF5dn1vOzVvR3kjRVM4ZjhQbXtFL2o5aT5nYF0sNWAkZjxVZSthay96O3pZTXl2TVhi'@;
put 'I2NSY0srZXJxeDNbZTE2ImR9PjIrez9QdXBHYm13W35eM0g5cD5AWztIMTkyXTw0V01AQ2JHVGdpOGkrL1ZmWGZpI3lGNVU1czxXbCFwNSQzO2hkNjpIbGpKa1grdn1eZGBrTkIsVShfM1dTImd9XVI1NnhmTk5zXmVzTCQuaCwkT3hHOTksMXVVbHU/JWBGLzVYPjJ3dXpWRXFRLyJTZntRd31b'@;
put 'YDpJR1h0bWw9MWxyTTJ8cXNVfSt1PnR+VmllKkUzRXN1NCRfVnxWUGc9RktlXnZ5RDVCN0NVLCxoRExsUTF1PEg2IU9eZjw9PiJ0ZH1bKn0sdCFreCpMTiVDWXd5REw1TFJNUlY8RkFpTz4iVz9UMXZTW3lGRkg7dER2KHZqWCZGRlFySHM/cz9rKSxoUFpzRUtJbTBBZnd5SlpEQ01NM3JifWV7'@;
put 'c2MidDJ7XywvanY5UV5fOSZZWTRTWDRiL3k0NGpkOUJQY3oqK3Y2XXV7NU5gOUdUdkhVWlluPktMKFQhc19NUG80SlYmKGxCck1WdjQ6Sm85KVFPWkZ9RWNFOXREUk5GUjt6SDdkKkdxOWNtbSN6WldOVDwyRXVocEprJTx1ay9Ob2leZlNVQVdCSWRVUUFFVUxwVnwoMTk4Qn5kYXA4L19tcCk3'@;
put 'ZjlIJDE6WWJpcVVxKilHJiliTldTXl1vVnloPmt5e3dJe0NxRmxVaHNtT2JNa3NBREdsWlFJNlg2Tyo9SHg0JXIxRXp7JiF0JkhSXzBJJno6a01xYGouR0woKCVifTo/UHwmZyYka1NgVVhMdVtSOGs8Ni9DRGxvJmVlKFY3Y3g3RWx2dDBqUCNAc3ZyYjVAOiJ9PX49fjZDUWIsQ1ElWGhoIVho'@;
put 'UzMrbXYmKzdSLER7Z0N9fDBZRjooN2BMUkR5ZnMpK3lmYT14SFRCRmdzUHh3R1hCWkltW2lHWEJSUSJ1bSMuTDVxWU9VTGI1RmRMNmBmMXRjMDNGaUhFXX42O1s1OnJWaGw8NldNJW5iU3lZS29vN3pEXzYjNWQ3XkFXQldCZjJ1MGpWXkJdeSJfREdNdSlMfU9wQmkxb0d7Uj5PPGtkc21PY01S'@;
put 'VllRZGxpTFMyVVVLRzI6TkhkIz5DTnApbiluK0s0a2lGYV1zP3M/IjpNXms9XXQmdGB2SWxvNFZYVi9NXms9OExhdFEveyYyUy5SZTpRaG1vWDJNSEJrdzFsMlAuQGtQZEBKfUU8P08xJU1dQ31EQk5SVnsycG8oWWNzR0wzej1tV3x1S3lWd052Xih3a3JlNjZGZi9VbVJBcz9QeUd1Ky81Jnk7'@;
put 'YklPUlJzOmU1Y3wxN1AqQ1paZDdJTWhqKzl0cmhLbG9EJHYsRXsoZl1bZz5nKT5tXkVzYzQ2WCE4elhkK1R2JTQmb0JrTCwvRCY5bFtCY0MldDE7O3M7YHAoY0B9Jk1xOzwsQ15sPklIJlRdInFsXmNnK10vYVV7cWtAZmEvckghZS9lI0U/cD1lPlIhYj1QNTttKHZgT3I1fW8mZmFiWCNVZTpR'@;
put 'U0FeMDtkPnJsSnEkP2pQKzJxPlk6XVhyMHdOWS57XTpDWSp0fUJebzl1N2hRcCtjLzIqTGF2aXZLYG0lfVVEd2UkZ2cpMDlISDBCUW5lOlFocWxkT1k6UWhEaDBdJnxRaCRLbUt5c2FOM1Bzejs5S2xmbmpNJjglckBVYlIpIUh8QGQ/fXw4bjUqJU9xR2N6SUliVFM5YzpLKUVHPDNrQF5tKEpb'@;
put 'OikzY31xX2x5WlspO1Y1cDkmJG5qTGBxUDFfM0BPRnxMdXlkYj1gelR+IlZBKXljVVI4aDlKVVN7TDJifSojUWRJWENLYGRmLmJdWzxhQmZGMjJpNy9fL0U1Qn5mQ2h3djt5Ul55fFJPfnAlM01BVzVwVV00djwiXW8kO18zOD4qTFpWR1gscltlNWZvTH4leiZwOiNNIUhVNFFJdHZbTy4kJj9s'@;
put 'RVNmRG9JWE5+KHg/b0BDLmVeZ2xpQWEqJl5AOjRpaEltKWE0OD9CPCxUU2ltXkBnWX55X2lMQnMxbDYpIXxXX2VkNkNZckxaXXlMKjk+LEY6a2NIayJvTGd5NlQyciRsNVFUaTZ4UEdhM1lRVCRjcTJ6MmVpVmtMTGhFXmNaMH4pPkI/VWxIKUw/dHRKYXdPNG1zWixJWEI5eX4yPlgwRiUjSEs6'@;
put 'KHw6d0ppWHlodVhyYWtPVXFgR0RLLD5VJG9HZF91Qzh7OjsuJV88WyZTQ3dePFV2b0IiVHwxcz9Fb2M3fT5vb0tgYEpCYDQ0diZyZDRIblAoeS5CNWdYYV8pWmVLcy5GQT5eRngkMUlveUNsU3FMMkVbKEUvTzg0S3E8NVdILElNOmI7NjdvR2FmWCs7JltEdE1IdU19RSxpVlE/RTVRe1VZeD1X'@;
put 'cmI1bEgpTHJaeVg2K1BYTkR3OS5fKW9LYDFMZFYyRDl2UkR7Mi9zaj5HNWNUfjk1JjRkNndOSH5SU11BNWxnMC4wLzdiN2NaVl52dmpSfD89a2FfJWxsez5NbiUsOlpSaCV+NHxya24zXkx2Z3ppI3hYVEMoQSlPLiNuKH5EYi84cikqZnpQYHVEe0I0Y1Z1Um9hbm8rKGZTcDNRdjUvWEtqK0FK'@;
put 'MyNNSTszaTlGTGtQc1lNcEleUkpwaHxWUm9ndWJ6Y1sheFYpRFgzSC47UU55JkZybClgKDp6UT1TVlJIJXFNWVhHWkZHZlpfVE1uIyNIZTVbeWZZS2BuNy5lfXdrPjFgUlFXaiosbWVRMl15a15eTjpWL0AlfGNRWylFLiMrQ0s2PkZbY1EyLHlxS0c+NUt7LEJmdSVwO1NWLyg9QW09LCQvbX1g'@;
put 'dH5OSEppKzNnYHpvdXBIMFFVXURzenFiSiZKP0NJSF8rZ2VHKl5abm9Ob0ViRTY0NSVOZU44MSU3YXhpQ3Z7PCFDLzglKkZYNT80JkM1QWZ7MEQxU3B1TWEhcGojWyUyJXFsZDdPITo6VzZhL3ZmWmNOX0JrK3N4ZmlpeCRGKFckKCV4al13YFdqLylFKSQxRUlwXVUmd3E0Qz13dndYXmBmMXos'@;
put 'TTMhb0xSclV7RDhgNklDZEtgbjd7dj1dJnR1bGpPdHlOclJFdzV+OEZoMUJ0MG5bOUZ9ZEtVO1IzZUBoU31ZWlgwQXYiPSk7fWEqfVslMk5IUkE3cil+MSthKDtMOzNjWF5QPSY8X0R3RnxgeiQ9WWw1SGUwT3oiJWZYNSQhazVUU08oQEpSNmM1cmYvKUVBcVhrJXh+amIoQy5TaU5YM1crKCQz'@;
put 'ITYkazxHKnBwYShxOGl9VDxOOlgob0lVNDtCPTc9ck13TEg1THNwbk8oYT1QfnhacDZSZTpZYTMrL1ZxY3oqekQ/Lyw0VTIkTl1lTmB4cj8vVlE8KSYodDFOLks6TF5MdGRhKy5NTSghWipXe11dd2xDWVopaHwsczl3V2E6UTQyYC5KTVQoL1dKLHp2LmZpVSJoSSs5W3c+dkJaLFhiSThZUkBp'@;
put 'ITFbTGRaI2laO212NWlXNDU4eD1tSDY1ZHlrKiF5R1VlSDlxZ0Q7YlFveXU7I0tecmBWb3l1VSlOYm14JkFCVGNQSWkzaEg+R1RPM1pXSXBGODRlRlJmTVVAYVh1b1NHayZab3F1OlJlYit8dzYlUTJZN3g2SGM1MzIiNy4mZkd7MzRtYiRmWWQzVWhZOjhrSV90eGxSZEVQSnh9VGBWaWU6JnJi'@;
put 'JDEuayojVjojPj5CZUR2OWN4PShNMV0yP3s8L0U2Iyl0RFJidUVmN3k5SG43YSNoJmUucWcuY1M9fWFKclA9QCtYWVQ2O1RKaTpSTWZ6ZWEhW0gvSUhmfCxOPDY2aDt6bXlNcGtSOEhUOTdJV1teXT1DLks4cn4mOnFqMiY0dVdYTjlKaUpMRF81akBobUN8XVZgRiN6am1STiZAaW1pQDBjclh2'@;
put 'bElbaz5DIVpaVnBRcnBKOTBLc2U5NTNGdmxfO0xgPEB6TDh9WTtCS3N4eWs4PjQ9fmUzeUV9NiomOzopV1g5aGpXIyN8PndxfWMrVUZeLDVUTnI6aGpQJlZWRnNwKWc1VWA0R2orfHlTfVM3SE1IWWY8XyR8SGBbOGtbOzFRUkwuNXNSWGdraEc+NV5ALFFhISFvQFtzSUFGfTJNfUh1ZGF6USFG'@;
put 'fFU7IkspS3pyQXB7M2t7KTVOKGE7MX5fOEV2PlJyM2V4T29ObVZ3UyMpdH5JUGUsLj9TKFh0eDxyUHJYRS9rMzNhL25RaiQ2Z1QpZ2EkJTMqcT5PRTpVMyVEVklwVmd7TDc+TGBzPVUxJWNbZjd5QGUzeWsoaWo8VkFYW04uRUErW3lKVWQ4PXxHdkpNJl9NMlFReDFRVyRpczslRytaaUQ9bXQx'@;
put 'PX4/ITFfXmspZ0J4cGB3WGlifm9RXVZvay9rLykwR10xSSFZYjhlSSYhJTE2VjBkcnlJWGgpUTBacEJiK1NYJFtGNWNrcX0kJnhsczthJmVbNztQPWhiZiJDTEUzT3JEYXRRIiRBW1hBPDYscH1zMHxEQHpSRWlkUEtyYmdVR01gTTllTTs6PExzOG9BJUxORSgoOC9fQiQ9Vnh5dTEuTHlMcyVb'@;
put 'W2FvQ3QoQ0BuYyRJR0AhMCZxfFA/V2d3fCYlPSVrO3JwMSMid0xAY0VeTj9DTz8zNGsocVFHR0l1dkw8LnIvU0BPUXdQTkQjMSVdfD1EVkszSjJGQ0doT3pUU2JwcG17aUNUL01YR3ZtSlFLXnV+RWF3Mj03IzZRaGAqIitJWFldb289K1I6bGZnKUtpZChYWHN7SixWaXFhPyhtXmJjTVFFJi5f'@;
put 'M01ZKWlmJiJCNXxiZXBJVE8wXjM8aTNTNXJBZWJVa18+LDspVihgV3NDOWE3X1sjWkIxKCwkIUFtTE9zVTdRUWVfbENFYTZDU0F7SnhOblhIIU51eWR5U10/OXlnYU1NV2FEYTwsVT9fPS8wJjR0WWZKXyNFeiI8WGhnNDc0W3NtOnEpV3pJPy4sN1MzSF97Py8xNzRibjdkZk5lImU2ZHVCeHEr'@;
put 'W0w5IU58bXhjQndjeXJlVmVVVHkqMjdoMHNHKHViMkNRNGduTm5QS3F5YnchUnJvTyI2UUY/cGEkIWVpWGBAVFU/OWVFX3tAV28sJWpOfWJ+PF9MLiNqfFI+flp6bGJaSSJgWGExUTY2VGkiN208WCptPG0mdUQzS0NkWnBGe1Q0ZTdGZTxpR15SeTYlPFlXMTJsMz1BaDYsKiFpck99MnxLKz8/'@;
put 'cHsoO1plKnUmcWduaSt+ciYla1B4IzdSaWE9Ilpsfkdidyk4cHYhdGJIKjc3LmJJdjM/ZUc9aDIqbWxyJCt0Sjt6PDtMcTRmPiJrJTtxP0l1Ojt4QyE6VjEpWypFPzlpeTJZQzZfImR9U0xqO3ldeUMyeC9XQzxjWWVIK00/KCpESGcrQElNdUB0ZE16LmQ1OlYmdEx5IkhqSmNsekpkVzhFeXMk'@;
put 'ejJpQiR2U21hWysjbEo8L1BsOHBQSjwvUFUjR2tPOCNFUVFOOmxAUG1ObUBlRn1mcGMoPSVQTCx7dTYwKj9VaDkqejpnWWZaY2soTUdRZypqaCRbeCNGVi9fXl5AWTZSc0BMWTtbcWk1TGVgKFFlQTszOl5temVRISk3YThScnF8UHF3JXZKZFd8UFZ6RTdraWhDU2chTSIvX15nfmhQIl9dKX1w'@;
put 'Zj5RdFshKz02WzZaTk5nc2RdbSphaTNhVnJVfmU6YF5QOEh4SCkmej1ZJj99ZUY5W1dEaCVIPThtPk42RzpwU2pkdlg7Y2tzYVhtL1ROMXEzfTQxRGtUeGNvZ1NeTG84WXs3PiFYQzQqI2dNW3FWaForRV1LbixzMmx4NilSIkNaejo0YVNXNltPL0x1OyZyWz1EPDNxMkhFJV8oQ1VHJXA3WStC'@;
put 'PU5odlMzb3dRT2Y1KXxkPHdwcCQlYiZSMUlyPUU8fHNrOGBtPkFRK2xSPklnRDNLKkdqOFdXXWJmfl03ZTs3TWVbKS4iQUI8a3BtVDduPnZUd2V5ODhtXz42a1RPXW9yI3NwNjF+OHpbJnhjZTJCXXMpVVp7Mn5DJlJNT1o2NjVOKjQ2UXl3Z2N3JUpoXi9Jc0ppSG1pU28+WnR2cTtoWSVGXXxK'@;
put 'Vi9nWVA/anB9RFZYfERAIUNlOCR1UkdjSUgwd1N8RDtZKzpmT3Ioak5vd2lxXkhVRjdVUzNrOVpVQDAiYElaQyRXIWNRRGlQRThSKH0sV1dOfUF2XjM+Ril3JWkmOHI9bT09ZEdlT31PZmJlbzksJHB3ai4xOGFVeW44YG9tNDhZMTNhT0hrMXVIOGYxZi8pazhsdkZrYEgzSD1pM0hvZnQ7MUgz'@;
put 'Y2cuPCwlaj8hdzBiVT1zUEBGKndoalchMT4mVVY1UVZjYj4wYlphJGt1aH0qV3ltdVd5SF5xJHtXXzBRelJHRnBlL0E4amsvd09vWEdQK2Y3eXM0KklEeCV6Ri9nLEtPW2F1TzN9d2F6a2Vjfnd6LldTbkA8WGZdPCFlNG44YDVIQ2VbPGt5V0piK0JMbDg3SHgkO3EqKlpKeVtxeGZOfEhnez9u'@;
put 'Omx0MV14R3IvSnc3aCtPZjVicF1KYDUqLmxmNDhoWS53O20rRClxa3ppYnMvJGFmQmZmajR4WmptSjhlRj0+YDJvOFV7JlUiPWBmPV5RTGs9Qjd0Y3FAQG54PTRaQ3F0XkBlSTExQ3QjVjx0MnRsZjssdlRVMDxkPis7aVRBVTAxLHFGek1ydWdTImVhI2c/JXdPbW04OURpZTpHMiZkKjkqYlJu'@;
put 'TGBoenc+PVNScUJAOzVVZUhRRDU5cEAqNHo7Vm1eWXFdJjV6ZVdhb2UpMVFbVW1sNks8YkxOS21ZJHZHJnZIX1l8LmIwLGlebzhiN3hKXksqKG43fikpejJHfEVxayFGdj9PYT5sJmNDTn45YXc/I0pyKXd9dl8kS2gxVyRkSlBPVW90JGc1Q3YoJnlzckVIUlpMOVdPRUVddi5MX2lKRHFnWnI3'@;
put 'SndQPl5LbE5rW1pEMCNvZy5LeFFydVleY2htYF1WSikzK0VqNF9TNSk4NkBGUig0QShkXm5Rd2R+PCQ9PDhgejF7djhuSz5weHAoSiRdRVIpJilnVXExcU1eIXgmNSprfGI7MzVuW3kucjRHNXx4fV59cSZwVk18Sm18RlIoQ3pdOzM3P3JoNi41TGpRTy4uNkNhZ01DZCNTQDl7fC5UV2ouYClS'@;
put 'dltwO0BuVFAxJUcyX2ZBNk1zOCs/XiplK2ZzRG4zKEslN0pbJV9ZRSV5V3xGYyFCWjFAbU10Nl83YkVkMEMuLHpBQTApU0FLQ15KZWNpIXMpUCs9MT9eSXRFIiRNe0gqIz01QHYuTFNqfHZ0QkFBQUFBQUFBQUFNY35hRWdbLyVnaVdCSkd5JiZqRlguW2QmaltJfW9wM2BSbFpHa2RjbjxiWHhG'@;
put 'L0haWWdra0dILEEwTGNUMz0sN15+cXc7alUsWXReLkRnIU88WHg5cEF0NDlWNj92R2l4KFhZdV5BKVQ0UVE1O1MoVWg8SjRua2I1Tlk1WUNGTColJHg6an5pOE80c2hFUm09TE1lXmJ1fVllaTVmYntpdCZeeHVfeiVCYkYxIkEqfSQzJVIvOHFhPSp4L3IoNSNsM3xAKH5UI1llenleVChvSnpH'@;
put 'KUhTSlFHZFhFaFlpPyVWIixTem1fOHk4PDlvRVBkPFAjJkEmUmB3RS8kbGkvK35oeFZWXTFSfXYobSx1TWllaTdVJmpQSyZEaUJAbj9pPGU1MGAzcGsiSzwsNz9BSWg3Kz1rIkR9RC5JeiVxPTAza3FQQV8hKUlgQUVWTC9eTk1kL102SGV4TUVyb0NIRXZWdF52YzlfKEgqPShFc206KVIkSjlQ'@;
put 'PUhMVFt9XS9obDVHSmNWXzkpeD5wKEMkWztgQnEsa3k/ZkFxMjEmUjZ0LE0+IzlEIXJ9VS9XfCEsVW9Jcil9Q3dVXyghdkApWSMkZlNUdm5WViY0fT4jSCtuVys0dT0uIWleTE5HQjJBbFhqTURIV3p2dHRVIntIfHA6c0RdOCN6JFReNl5EMmJ0TUpZQmJ8OFlJWSNudWxgZUhnPCReaj1hNXY0'@;
put 'K1BfeiMyLDwveTR9UXNuSHxWZ3I8eEJHS3VHJT4yK3lYQWBzc0A+ImQlWm8/UlpXcjxDPHB3WFY1cFprc0JSV3V+MVdKdXEuKl4uIVBhKU0+bFQ2c0c8Lm1OY1RkJklmZjlzN35LfVplZTRrfnRWbEIqQl1CRjNwdlBGJFZ6NyNfNTRlRDoxMlR0NEhYQ2dpXlhQd1pwNk8mVWBEW3tOSClAJkJl'@;
put 'e2JdRUFnJSl1UWQ4PzVlNDhAfEcvPlY7WEJbdDFteVkjUyFxQUdkNjZ9JHVqczc+Y0hxQzYpfSR4O3whKCtXPVJ0TiV7a2BeSSw8RmF1RDFFRCM1KiYhRjEvdX0zeigsJnhbSld6ekU3czpOS04lVX5yK1d5XiRKM15iYiJ4b1pkcV9DMCpPSj02Z3ImTC9UVTF0UHt2LlUoLip6WDlzRi90OSFm'@;
put 'UXBXeUUpJDsmNVg+a3tQanF0PF88JHRjLj18QExlNV0/a2F1M2VnIiR2WFNjTDBTWShUXUo6JkNQZEx1PG1idGcldHhHKmRPXnUoLl5zdDdXVU8/Qj1MUmxoNzBuNjZtc05Fd1VmPVlaV0JUPzMvVCIvKTJFIW91M2R7IkYyamtocWp7XzxqfX5gK1dpc3p+X1VzZWNPKTdiW1MiRUsyRnRfSCtS'@;
put 'Zkh9LFU6I15KSmZiYFQhQlFSeHN3M1ZSfVpxdDs4ZlJ2bEU1NV1VYjhZKHV3VSxKfDBPJjI7OVtuNUwoWXMySSNVIX5UOTFFK2hQSm5JNUQ6dmVhdCx8Wis2SnQ9ekBNWXdCRWdqdjJ8aCZzRjpWUEl8fmUjSVssU1p+Oj15ZHR6TyRWQ1A2T1FjfE9LPmt7O3xwSUtzWWxzfF9vezpfRytmYVJ3'@;
put 'QCMpSD5gKT07aWV+KkNKQnc+T2teQ3VIKDBSSnpYMn5gSDA6ZUdSIjAlUFEzKyFMfT9RdDtOJlJ4YklCYGZ2PCk+OzdSeFdOWT4hUyxINUUldHBEajdjWFBoIlc1ISI/TUx3cipZRUh0NnQ1dFF2Uig1OWN4W0s+Om4hJnEoN2g1T2x1YHFTMVpsbClDUGIyR1d4NWdAXUNJSUZfMmdUQ1QzbVFC'@;
put 'OmJSNS4jQz9CXztHQlN9TEdMOXxQPXx5aCYwQnJ8JVVjRT1oYzRCMUFFR0s2V2NSRnhbSDFyK208NWJLalNsUn0mOlFWa2lLaH5nNiZkSU8rJG5wYWxrUmEpQThJWHAyKHlfZUAwTGkyWi9+Vyh5JjFVIiRfRWh6WD42STRDeVFHPlguc3QoRFt7dEp4KkJhKmptKG4rST9QZmpMWC52M089aWw0'@;
put 'YUR2UlsqSmoxR1RqKEpqQFNsOnFWQ3tuYFF2d05odCpmbTlaJT4oXk9wPkJmL348MkE4WkB3MHp1L05lfFhwQTJydFd3JTdmMHE9Rio3fHUoeylwbE93djx8L2lidEkiWnZAQGprZWA0W2hLJnhHNGVTR1hpOFZwd0pGMXU7TEZUS1puY1BqR2ROKz5qclgsdG1uUF12Kk4wfXwrWVpIbj9rRSY+'@;
put 'WH1qT0o2cjUsP3p9UEJeRSw0UWZBUGRrdmFZUkRHKF9OZExOfGU3YEM9fV1qYV1pITt8eHVEPGdOaDJaKDxHJEw5bSF0N0VSLFFFUlRiSTFRNiReWEdjP1thOCo2VyFqN242NzZNVXprYnx1U2xZIyRsWWtvODcoaUl+eytweDhGKjhJb1NiXypGbjg9UT81SV5fcTshVjgxSCg5cHJ3dSJqTkFy'@;
put 'KjkjZkVpX3J3QzN7L0hbd3BjQHVwVjZ9Xit5ODdnMER+ZXhEN3t4OnslWnYxbDRdcV5ibmpXXVdfLmspQnRre0QoUzwpaUJdIlZhVDBNT1RodzpnVCY1TTZXaEglTHFrQklZZTg1P19SM05DeVh1MmNzPFBhJU09T2lPVmk+aD8wIUtNRiM2OzxwUExMZTs4JnE/fWB6JlBHfXZ9SzVPW2sxaElR'@;
put 'K2QzTXh5RCFpW2EmekAsRDEmZFMieUIzMnclSzhpNik2RXNkPn5SMTB8XUQldFt2VGUzcnMxKzVbU2tIdjc7aCs1fj9WazgiTEdiVTIkSjdkfDl5ejYhWDZORlQ2QHZBZDVuW1Q/cjFDYk1zeVArfFgjYEhJS2xZV0w4YUB6Wj07Sm1mfUMlVkBXVn4uZ3FuX3NtRzBJL3pWTy9We0M7LkhDc3t7'@;
put 'YlI1TjdPJmxOeGphaX54MCUxcUlmclUzOH0rKCtaIXsyPj1QI1B7KXEiSSM4NSxBL35tSF0pVyUqQm5iaUNDXTV0K0JqelQpO0hGO1B2SUp4VF8sNlpONEhNPDAhZ0JCSzJBMihqRlQ2blZTUjZ5fUchOjdCKWhNdT8sKSVTNSp7a05IPStIJm1VT2pSZGgyW11rKGA2SWE/WmUsO1llVUxTXiQ+'@;
put 'flZsMGQsOEtvVEJHWDhmV0cldD9LUyZwTDgrUzA6eUsqT3toNkJsUFAlT3d+bzA9RlV1S3ouKUlLYHFsZCRDZTRAdClMTXN6NUBMR1VhRlBaMzkwO1pBSTNiR2ZXUTNiJjI/R1lrWmUoQlpHTytlRjBCaE9MbUVLQ11tSWFOekppaWBxaDo6RXJOIiRHcn1hSCpVWk9MQHJPQ05pb1ltKF9Ubkx6'@;
put 'NSZbPWojaDQkO28vJjVmNG9EbTUmSCxLfTMxM0ROQFt8enteOGo6UXFqMEAufXp1OSFzOFAxOnUsQVtSfHU3ejFMfls4UXVWc0skW2pbbnxneDlNeykxUGk2QWpwZWA5cDJOalp9OjRTW2QxTUchRz9xeU5uTFFPKU9vfXVRMj9fczFuP1Y4KHNdIU0jbmlXIVJpOHNLaGlTfW5ULFIhWkVCIU15'@;
put 'L1hwdjhodlg+aFRDKDRUZGMwNHp7ZDA8NUVDZHF6TlpkdEVUaCNnVSNkZ3hMI2Zleyw1YF9bbVJ6ezBhKmo+NCtAQVldbT1KLER7MShXL2xqelJEciRdX2YvY204M0peMkJZSmxPOGFjTUQvNEtkTG57LG8lW3J2VWs+KkViKmZbV30/VGZoYTt7RDxtJVB2WXdAM3QqZTI6cVZuOD1fa2FvMDUq'@;
put 'THRGRU53R3RdSFkiNlE1VEptVCt3akVeTVVFOy49S3NRP21Ebj8ja0wwPip1MTRwR0FHcV0oLFUyNkVjK1tgNnRbQiQzRWZXdEB4O2BrREtIfT4/R34rMkxHKCNZUHxgYFVGXTV0Wj94W24zK1phTkdiZUc9aV8qMzl6VkFAdUN0b0NZIz51Q0Z7PkZYW14+SnxlJmMyNXVxQjBLSk5IRmcpbjkz'@;
put 'Z0ROMCRkeSVgO05vI0N7WkNdNEhkXk1HWnp3bFtqSSNEUCVtZl1LRyZGNCZ5dTY6aSQsRVQ4S2gqRjtSYGo8PGQ1Ll5Vd1UrOXZ6ck4lRVc1RkJfREJVYit2PVR7JD0zOzBZT1UsWVo6VVUiNi9TOVRScylBJG0zU111UUhOaWh3UUJPLnslOm9tY3NXcmtIW0xaMDxJOlIxOXhXXTtBdE0yLEQ9'@;
put 'OmBUN0h9a3RgNi95cCU1cUpPb1lBSi45KjVqcS91byM2Uis1az9OL3BrZVYhJFBUPiU5UT45IzlvNylMeF1ZRTdAdl9VR0pudjFOdGVvcDQ8ViN0eyFSfjd2WnhCZFJiQ15FSUZvd2dtfHkwQzJuXyNpVHYjPmVGWTAxQnR+akZqZDlAKy8xWEJdLC8zJVU3TltvNGROaFokJklXQERVeWEkKUk8'@;
put 'TVNecUp6a1JeOXNvSytFOUxUWmtIekVbOEBxbl5UaTNJdWNjM3ZZdFBnbGZjKU01I3VSdHo+cVtgKSNTSjxPRUwlY19UfEAlSmNMQDVdfERYZkAsV3R1TWM7X3peTW9EaVomUTc6YVgwU1lgIjU/XSJ9Q0FxcXxJbEU6Yy5veXhrczFQYHZzdmxwL21CeHFBR3hVO01pUXN4SVldWTNlYTZtM0hJ'@;
put 'PVk7SmwjRTVQZ0psTy9fZEs4ZUx3XVM2Oj17OHU0a3w3fjMpTkBPbGQqWExHPVIzP0A8TGV5eiRFMXcoKkVrbkwlZnNsKSp+eSRFSWFIdy47RzZ1bTptcV9WREteS0g+azx4cTJkaGoiYCUjdnlQUmRzMz4xaDt3UFZqaHAoT2AqJj4oWmc4Oz0le21dRHYpMTFLZ2NiWlt1NHlmQnVZTCs6OzFo'@;
put 'SUxPTlVPPygoZUIkSCF4Ji5gcGh6JmQqeXE4dj9PdXNqNFM+Ik89KFpeUl1XUDZiMHZAO1BrLHMkSGlhQW98SHZIO2hfa1ZGMmNRL2g8MywlUzhOTnZBcV9CJTJjWVZATGE4dHhxU1h7e01ZU0BmeXIlZUxPM0B1b2xaams4dTc9WEEvTzY8ZlBAVF9UQkZNb241SzorO3ZjfnNGQCViP0U3QWtY'@;
put 'cH55ZEFJKF5KKX1PLi5rNl49QmMwajZHdmFQWT9OfDN8IVswcS9RL2lVb0A2VyMmakZBeWp3VnpJdkQjcVReWGp4PmxtfG4jPmJAV25pX0AhaX49QjZCSHliVGVCR1J1Sik8THYiYl5YZj5SJHN3ZzJzSVhNN2JCL0whbmg6fHwlWENpRzEvQ1dZPSRCclVCblssWUV+I3lXLCxWVy9PKWwvTE1w'@;
put 'ZGVKSytSfVllOkg0LFUjdm08eGNtZW1EMDdndWp0d1Q6cW4/JUNTNjhEMDU5bUQrMilmLFo0I0JAbDBXbTRJcGtCQ2wsaT5nUn5PcCJhWiJafmt3SmwhTHpRJSE/X0UwQHBvdXQ3IyFLZkEmW10lJD1ha0lVdWxqNn5lc016bTZ5IUp1MC5xcSRoR2tedFgsP2FgOl11U2AhPmIwQl81XjwwIUsj'@;
put 'VzQpcWwhNiR5VlMhSGQuY008JkBmI1hmP3ooNENaQW5CXytQJTcmXWNAfVhPa0BLd15CVUAlS1BaVmRJPiNDIWNHIWJteENiNC9UdTs7KTJ3b1t9NX5MZGFpKCgycFlhbUxKej4ja2dXVktjO0xFOXBoKTFxJDNVb2NPNlg/R0pZMzU+OTBSeyZ9byhINWZAS21xPGl6L2huaG90YU99OW4rJWcw'@;
put 'KHRicGM2cEUjdlE6RX5jdUQ5O2w5R0FONDFAKkRFRUpodHhabSVGMEk5PHFWODJMcEFBbHZ2UkkwYV45RTM+ZSsjbFp8XlpqSEh3ci9ZZXRPJCY5JEpdYTA5cl5oS2QjJF4iNypVeXlrYnl6MSN7SFFwJVZLUjF3TD9uaHtCfU1RVnxAWmh9X0F6dVdYOyNJaD53QHcyMGlDNyZCQEd4en1obnZ2'@;
put 'U1o5fFtlRnJYbG52MjUjZn1nTTxQY1tOJGVSIyU5SVJfJWs2MCRUNlZDSzU4WDNNJD8jVXMzQWFZcXhseC9LUF4rJkwiMGU4M1k2aW0/NWg4cENtVXNsZkREantHTlZOcTFMSU5OdnxNayNmbmNRM2ByeTk7Ul5JZmJhc0QvcXZ7e1puey5mUW9QL0VaTy4mRjI2bypLZDoiYjNpcH0wPXh7KSU1'@;
put 'PVl7JHpkPlsjbTNfZVRDdyheQVIiMCNfQzYqUUA9SFo0LlhiWV5aTCNrPSVoZVFGUEhhJjV2VE5sVUdVMlcmRjNTRWZjT1BSWCV8aj5EVFksISVpRXIje2JgODUmTHFQdHMqRyYoV1lxNXIyRl1peVZVSGcmXlJrSSIyNG1uSlNIaj9TRmtpQCgoK3UwSGJhRi90dUNrUyVoKUJvUD1KckwkMX5+'@;
put 'eWs8ZSNaa153cytNY3drMSVyc1QkS2QsQVNtMF5Icip5cSUjWSt4M35FJkg3fDJ9Z0khMUxScEN6fUNReyoiRnZnXWlXYnkhSHZsNk8iKShLMTkpOXwrYmZJeWxmN2hLVG9Jdl8oTGBkS08/NFhJL1VZPXlULC5GOkZPV15SZ0ZCcns7YEd2PHl1eVBZOVVMWix9ZSVAMGNzakJpazdrMFNRMXUw'@;
put 'emo6eVlRdGFgOHd4Wk5UW0suMVRsTVlPdWtmX1g7TDdNMHguXk58biFvL087d2ZJRip8fk9pdl5JWWYvIXJTSjhyVDtZcjpFe2BMWjI1a2c+PVVhOj96dGwhSko6QXRZXmc+STh5JnEyPTFeSTErRCIlXV1qX1t2RkN2Uzt4d31TXlsqPDRlYn4lW0RSW0pYOmBSfHRJOUNDPEAyIipFSChIKylS'@;
put 'OXFdVDdTd3BkcDB6JCM2bkJxXUZpfWZoayUzS3M/TX17amkxXTxSOGhxemteOF9LM0hLbnwrPGh7NGJsaHUhYVQ8c1srVSElQyYmK0psLEAsJEJBPVIyfC9iNVFoeiIpOXRIR28ifi9ET2dROGo2YChlLiQ4WV1RdzxPUFZzeCNkXzNpeUJIQmIwN3lyNDZJfUo8Nj52dmNkRT9SfStnOUZ8Mk18'@;
put 'OClCUmtLZEtkZF1GPFA+P3YrantLdSokWXd6bkpNLyN2R1E0Viw5Omd3ak8zbFsyYiY1RWQqQkkpZ2VCUnMyODM6Ol9HQmQ/MDQ4dnBVeyMiPjNgPVVrP1sxU3Q/MzRMYEBdOTteZnliMndoI25XQjQxKkk2Ljh0dEAhZihvaXpPIllRfkQhZihLX3BzNkhzR25XMTVCcFs9UE1TUylNeF0hbzI6'@;
put 'fVpoZ3xjRDVZOVEjS295QHdUcGpXTUxWZSxyZm1lRWBCVn5TVHpgVUVYPmJlPyQ0W3NIc2JpVTY0ZHVRRC9hXkFbb2tEK3BVfiFgLyZ2V1hOZXJlb0V3QXtVQktkQm0jYCJ5OjpzeG9JWUVfOzBocEFLY3xJNmklVTZpVUk7akF4P0UqOmRSbGdmJDJpRUB5UnA3RUd9c3E/VjVkIVlhU25jSD0o'@;
put 'T3Z9eTFYX3RrXnYmUDlnVm5mUFE8TFAmKlgvVTolaVliWj9mfXp7XztrMiMjZGFsXi9zNihSfTArYXB7TTcrd3hGeHJqNC8qOlBoYm0hTWZmUmZ+KXlJOjJSdCRsSEJafmRxIz5sdEwuKUU7bERBTD40NlZjVSw+VyNjPWQmZkVOKFF1R0J4VEIleCNFL3B2NVtBX11jQ0RodmtmeGY1Ul86bUxJ'@;
put 'O2MyKiorYUdZaVNTKnBYNzxuOmdPeUhWQXFeIU9lbyR7QVExYWAzTXNoOnFRTWV0PnlrYTJHOVQqMWRJdEJhbV1JMXJEVmo5KCt7SW9VPkpnVXdPQSM4KCNtZjUoJTxHenNge2xhfGhlfmN0dFRZOm4mNTNoZmRrM105MGtBKXNwbH0jLCo0US9bOyh9MEw9cjM0S2NlTV1ZXVp2dVYyVHp0flIs'@;
put 'OUNiI01YW1N1MSpdT1BOeDE5XW9oWmxBR10lXy95PnNSbTh1X3BBPldhJTAicFs9R2lPTEdhWW91JmRfMXA5W00oTCl4YTosVyI+eCpSPWFUe1N7cyJSZlgpcWUycEZ2QTUzWSVyUiQydVZba2g5UGdacVVAWWIhampqTTZfWHFKNTApS3BMeV5wVyl6QzgzfS8ubG1UViU3KyxfbWYsOnwsRkRo'@;
put 'MEtIWEtCNTxGMUxbX25qT2NVPEx4NGU7LGE6cj9CMiVEVlFbVWJWfnR+QVs2WF8rayhrWTI5JDhNZTsyYXszLj1MR25NVWY8MWpxcWdhKDd0fGc+WGIqLl1PZHFBXyFIPWxCeTZUPTFlam83T3RaY3hNNWRVRUk9PWheVEslcHhhLlFkUTgoIj5tdEpQZ1ZiXjduWHk+YG0qbUpfdSRtd0glTUtE'@;
put 'a34mYllRVzgmcElaZjZDQyprMSNqLzw9PWxGWkskPyxYJGMubVosYlckVmdmT1s7YUJta2QxNWxfOG46OShbJHBCL3dGUmssWktmW3p6OE4+QmEyKnwvdnxuSUdgdyVWfTxLdGtRL21eUXpjWER9JksvRChHXjsyeTpPWyZnaWRrSTlMTmksUlJJQnxxMGAmWFt8K09EQFFBImpoPSpmMk5PO3ht'@;
put 'ez1OM1B9TCw4eVl2enxkSnN0blIzJmF6WkRCMEY/I09PY3tLcmBNTHQpSyF+YF4/KHV1TmtdSWhCNSVeTXtPZEQhPzJEbGhxLFtESE05en5yRnhWd0RCekhxRyF8ajNfXy9kTE1bKixQK0V8aHloLyhddEBQVFV7UXc5NCt3d2ZVQnVuRiRXW1Nncip6XVljMzZhTSZMQyQ0cnh+ZCZTRzc5NVZm'@;
put 'UV5ifmU8SUlTRmA6N2hPMjJRYT56KmA3YGpSJDo6P2FySTFHITdXOXFHaXZ1Xm93fC9CZlduZXlIPSQ4PnU1WDduQ3x8aGlydVpRUzgraWREKlQ/NFpkOk5gVnVhIUIpKiFSS249bC5aMCU1ImlqTTY6PEs0SzZVIWFQdU1+eW1IQUw2LEAkQFdAKypOWGBdWCVSJUU6WUNJeWl3UX1Ucik7cC48'@;
put 'YSxJUSx9fU9UZFJaQ0psSFVCOCVAZzMzQ05GKz43VC9Md2FiXzA8IjcySTM4aClkJWtsaSRndT1GXXVjRF5TY19gUj1Qd2MqVXg3fWNTVlF4YjJRYC9eX24qMEwsaHN+YVA9OlUidypXdXlKdFh7c0wwbVlgSFU3dUc7XmxGTWo8M045aV5hcD9JSz1naV8mb1s2I1p+MjIhb1J9Rio0RTV+RE1k'@;
put 'LEUwWCJHdy9mKjEzVlElIV9HZEJCNGhYQiMjSSV0clQjMil2OipgcnBVfjQ4NmFqOiNkYkAvUTQhVVRublU5Skk+YXdpdX1RUm5qJEwjQENINCJ0QmlmPjA9Y2I5dD97YX53QEd7JCE+Z1RgPX1PTm06KGNlUGwpN0ljWHZWPVJyZS5TTC5uUF9mcnx1VUtRNDVXLl1EK2hGenVmM1MkaUFtKGNd'@;
put 'YTphcTJYMj92ISVzWDAsVTx9YltmRzM+PTwxQzh6VUhsUXN5JXM2NFRjfG5qPk9kSkl6Xmw9ZihuflFZfk5YYFtbSUVuTn1AfDhVOSsjUG88VT8lZHVjPDJXVDxwb1RkU01IfjRWc2c+a21fblM8UjA3T1osMU4xe1NrcWMmb3A+N1VdUj42KClRWnorYmhDT3Y5Q1pnYWtoOnApRj9YInxWWnY/'@;
put 'VTkwaWJBXTRTaj5FfU1IYU9II0dQYE5GWlFiZDdBbEVdXTFwTW95e34yTzlgYyNiWG13bEdgSy58dFBydDRBK3RKbiwvLnVeJk5yTk5JWnc3RVcoYyVGXkBVVHp6MnFoPD83VGlodWlPNFY7N1Jed1RoPiUsdXs+VFJ1MmpLQDFxVk9DfVNALnFJeF92VyMvJllyJlsrJXZ9c2A7d25HZ0VQYnJ0'@;
put 'MF5nTlckeTojZ0ZpdDY2STs4bjZ9YX51JWcmYHZbaSJZNC4yc3AjO1d7SjBPNy5OTFcpdz9GTz04YDIobT5fdHdIIU8zSUkpeTlaRTI/YlkkJVVlLmBGSHpGeV9mbktnQC4sdD8+UCU3WV1lej49JS91eTdgPyJ9QStQaVNVXmhbeXZROEsuMFdNbVQ4cSt8ZlpRRip8fSFsQVt5YUsjIXZ4Wj14'@;
put 'anQ4XnpFaC5sYFM4YlEzRHppfVYwPS59NyZnMUs4dSNhJm5KKnAqTjsxSWMwQl0va0VMLmFeYkIxVi8vWlVDIXx0ezBWSjhbPGx7IWNgQXVRelk4bV9ZL1dLIXBuTDV1Vn5YMlg5KWouIVpCUntGbldGQFQ8RWtbRUw5OiVncGo2Ol5bPCk9VWVCO1FvY3QmQVU0aDRCKV1PclkuOCs+ZDJZYy4y'@;
put 'KmpBVUYsUiw6KSMzNnpmPnw5enZLQDFBaj1kN0AwU1pRYyFaXVI7YDd7eEhDLjslNWR4PnBXU1R9Kk1FYzYxJSYzZlQxZ149MXozfndQPTFNSzRXMUVHRHQsb19yWDdAdjhPdmU9LyEwQDpHeFQ1TXw9SlFYbU5qfUk2eXU0SGVRZjJmN3lHVVp7RlhGZWUoeGNWNH41JlFyQEdtQUxIcHdHKkhv'@;
put 'RyZhTyx8ImJ9IyEhQTJqbEp9Vz00d0N2IS4ie2w7V0xle2xHX0xCWUZ5UixgMm5eeixmIilveXNdVi4we1dXQkpJczhtYX57MkguWVYwKGJ3Pl5rfiVJK2JTWDFTNlAoa2MqbnxMN2JMIyNXJEh0UHApfGhoZ3Z+ZmM5YWJwWTxmX2dmcWwxe2diJXlHcGR7MGp+ZTJ6fWQocEpkfjd8eW84eWx3'@;
put 'ZzwoKkR6MGxdU3wkfDFROEM5QnpZVnVOMEs4VW0wekZjKj1pNGljKU9VVHh7VSlvSDplSDdoMmZIMU9TfHtjKUIvQmB9Pzg2angidnY0W19lMiwpTClJIm5NbkNuYDtYZjM1fVN+fCpUenlART9RcTxiJi5XZERKOzpeaUopfHM7aCNlMFBkOyxVVlN7O15GR0BPQ2NsQ2Z3Qk08WVMoMypUeEVq'@;
put 'aEJGLiQ3L3VgUVY/RFNza2I5X05BQD4kIiVPSExqR241ZTVrNGAqfj5afiR9TyxKMHxEKEAvPG1kX3lUYnlFbilFcyhNU34wRkosZHU6el1uemBQREJaW0hBdEohOiQvdT85KlRLb0N8IUIlcHZOTGBjT0pdWSluSnI6PXA7RCNzMGpzZUhQayJ4QnsjblJkI3RKO141JjQjVlo6YVl1XntKbXU+'@;
put 'Ii5vaXdXbzkpb1dwdUZQcWJBISxoLDExelBvdDc8WnEvNSFlXlZkVllUUWI1OTlxKmwlVHMxNkBnNHJjTklnZitZPlljLm4yQ0ViJThGTXJdRz9Mfm96clI8WSxRLDwvZE40UWo1PWRRWm8iPmBRVEMhVC8heHEmUWB5XW1fQDZ9VF4qemcofGBqczBeaj10aVA5YiR4blYlVmNWcjk6Q1NPXjYx'@;
put 'VTsqRkg7JSVzQTx6T1BBO1BvUmdFVktDN2p2RVEjVmsxcE1gWXZYWz58I3omdXVyOFFCQlBZI1hGQn1oNGxaVSw1R1hNW3thdVV1W2s0aWl1bGY8QUIlelk6ZlpXNHV5TToyPE5xZyl3WEIvQnNrPmR0S2FIbGU4aDxiYil5YU9JS3xvWEtrO2VhZnc2VVhjWSw7MG5obSJ5REtPeTp9K1VeaHx7'@;
put 'XWw8TTczJXQ5fCYrRTlWQj17WVZpJiNHS3I5YUVeNXtlO2Qrayl8Z29+US4pendHLDQwdUM8dz50M2s6b3t7R0VQKlVKcGYycHxpREZIKCtdT1MpcFB4XnY0NHdRaV5AUS5LPTh2RjJvJjJZJUVLN1ZsYEcyRjRGQS9dcnhAcCNuRzFsWGhialozeiNWeU9TRSpjYzhOSDNmdU09RGtSKGEkeFhx'@;
put 'cj1PRn1aLz5ZNWB3KGZXfTxPU3NqVi4/MXgpMnlxL0VkKlsuelQxfHB9Pn5SXzMvQEZaM1UyIndGPFtfOW5sY3gmMSJxP0FtWWlbfVBjbnouTz5lZGJkWitzIkFWMS4yTl06ZGB9XSNeJWEsKyM5MGUlOyxzUmNbZn1VOStdPmxbZS9TXVFHVWNjZ0Uhb25QKHtyNXcpNl87R1Y3WjE0VDFxKnZV'@;
put 'fThDSUJ8OXlib2ZiMD42Ljp5VHJQZH44OypuMSpxXzU+cU1lU2JBOk9IUn06T3leXSs2PGJRSmEhOVtbbkp6QUprc0ZKZDlxdFV6ZkZ3YUQsTVptLlZnaUYjYSZ0NDMoNy9nT3NjWiFQRzk0UjtYPVRITDlgRjptKDRCTkpLYF5kfkFGVWh5X2x3Sm1nW1RFdTk/cXg3fC5RRk8+V0ZJeHtzeFJ2'@;
put 'aWlWIjdRL01JcktodGxyc1NPd3t7ZSVNWyNFQEp3X2QzTTZKckxLQ2g+NytgS3h6SkBlL2drdFBtXm45S0JtW3soQ14hYzM2OnN+NXxbTCl3YVZoXkdOcX5+SX49Nk5ZflZnZXNwfChwW1Z9IjskbDNwOiVLNjdEbm0/fDNIaVJCTjc/PlVBK3dNcEhBcnZze14uNC5ocGNKYDQ7O3N7eEtOfnFk'@;
put 'Rm9nOThfNnw2TDYqY2I5eDd5aHs4VnxWTFkxbFBZWFBrMmVXMCp7OFZOZHkqRCIifFlRfDx0cj8hbzsuWEMkcHNhdm9ZJUQ0V2koVmdBcShpRE52WWhqMyxueFk9Z2YxJT1DTXVAIShpVTBTSy5VNVI0QjNCTDslYG5XdyU6OW8xaX1oLDJleDUoTEU5T1V9TlRZMC46R0QpIUpIUEVTZzNTUUl1'@;
put 'KmxmV1NrIiVKNG9WbXdlKFpkcEY+WWxxcm9oKiZIPFZNQFFtcF9FN2woNixEVSNLZiZiZUlXW1AkXitnJDtUXjJQLHp7SkhvbWlYMXxEI0JfNixdTlFIa3p7JUV6ZE51SWkrIWxLaFJjfXw+bzZ3WT45KGV4PU9JWn5AeiZiMiEiREluciZ+OVBvRC4xRCJpVyVHMisjYCg3WWJKWXJzVjk8N3RH'@;
put 'Jl40UVV5ZyJDXWY5WWNEIUJNIldCOy47MTEhPG5GT0gmQFtYVihTWVNQL1ooLCg8MDp5YnkqbHlLb0hUOyxrU1FVJlNfPkBHc0pANVI7b35lY09OSCMsPSMlNzpIa246SFJWb3kwRz9gNlk1YHp1RmZyW3hxOnZCQGJmWV5semtYb2Y6dzQ5fm8vMkhtfUhQdEIwOiF1QkExIUcpRSN6YzBmJWxw'@;
put 'LzFsaixeM0p1enF2O3ddN0djK0didF58YWw2W284YHc/fEQ+TzEzXSpHaVRNQlZyRHMrZnhLNGQkMVQvbSxjMksxUVRrT1lkMWRWd3dvOSF5S0tqWGV3NmkqMzxvV0xnNXZPfjhkfEd2dCQ1NHo2Y2NYa1olV1VUbSVXR2whfkJVQzI0KlRCYzszRjpXQ2g0NG84RTFCXnYvTUZyPnBbR0dEdVcr'@;
put 'TkdJV0YleGcpW0JsTkJCWkMidz0je1U1LDopMF4mVUdlRiRHeE5lbENwRCthNnV5VyEpRjE4MmUlWHwhM3hdREVLenV4X0ZnI05hYz4/Jj5mJlJkOXk4QiooMF1BUD0/LjZUXStRLkcqRlp+OnxdSHc5XWYxYVQkJmZnbG1tfSRlIzcySyY9PS5RVD0lZ1dVZmh9a0cmU29CW343W35sRmlJR304'@;
put 'LEJtY3VOJEsuSlVjKyZKdH5vXzJoV2dZTUpLQl9rRnhtNF9HYk5bJTZrN3ByXih8Zk9pSXdzJCpmXmVmaGMmIWN4MUlDTHQyVUtidEpmTyl+eyYqLkgmajc1PW5tLDEvQEBQfnlPUDJOOlE6akVKUyg1Z0cwfDNIbkdXQDZUXndeM3VHaHo1QyxJKGh0UD8mQW5MTDFGL2NuL0tCZl49RVlMV1pt'@;
put 'JmJ8OXdWSXFRYkpsYH48Q3tabVgvbV07RiExQHFtTmdlbWVPQXIpY2Z8OjtPQmNyWTE3Yyl5Wj08WWNKX11jJEdUfl8ycSM1OCRpTiwjQ3N6RDRQN2RqPVVKZGFVNT59UmlkKGE9UiNGJHxWcDJ8JUQkWm9EWDt5NERCdDVHSDlSSC9NMnEvI3UhI3JhYXxlLlRmXU9JfCxAYG5eOUt4djZucHQk'@;
put 'KTRaW1YsSF0qVHZ4MiV2SCpQOHY/ZSYlamY6ZSY4Lyo1OGE0JTYrUCxoLyttRDEjZnddPUBbRHIyLi4rKSZneEI6SnJyMEJLMVJLIUxSKXFSNypsZk8hTzJUdkdPSE1SbzY6PXM1fFNwbjhMSCFabzJAJCxqRkx6alFpWVpIImx9bXp5VypCTiVYbT9edDEyfUVlLHYoVmh8YEM8TF88VVlqISku'@;
put 'XTs7XXlzaFFsQ05jQVgxdiliQ2ghTSFxUzdjJn1ZZkVmNlApbHxgMEZzPylkOUt5YngzNWJUYmAyJXcmfW0ieShfT25uRE84S01PQyNQKVNNZF14R1YvQHFqfD0pKTB0Oz1wWXtIaElRbDVOZSRGbU8xMGkoTyIjb1I7Xi9+LDN0QTYsMmFrVnt9QG1MYUl6QTlQM15Ldls/Z2l8My5ON0xOdE54'@;
put 'Y2VOJTVTUnNabU9ZWT0rSmtEUk11V3xEekp+WVdWOkIiRG01cUk2JD5IK2QzWyEyQW9tYHROblBoUCJ4W0h5MHxAfXQrVnJodUIpVXIhYHdteV9HdCRRWGxxUTxpZW15YTM1eXgrJG0hWTV6UC5kOEFhfVJ6Q2tGa2VZVWZLWTciayElbCpaOzA/WihRNlswUW8xekliTVF8KilYaVRFL1IzS0dB'@;
put 'Wy9UQEVpUXkpQjBEdXkvQXJNVUF8W2V7SldmSWJaakFqWkVoPmNoMiZsWz1qdXRYVU1iOituNjtuMT1+L1dgMCYkLmp5PTxpYzl1Lm8wfm1TQ3I8bkN0Kn01QSFEWDh5entbIlQ+Llp7UVQ8dUQ7UE82YD4vfDRIUWk4KzhEU0dbOVlfOT1yITMpdmt7cmRtLH1KdXwrNyxEe3NkcnZpc2B+eXM6'@;
put 'YHZQaXdQTW1FKlZPfj1AVGZEd04zKlouM0I9bVVTZDMiezAzY2lmfC46dzVVeT5+eGNibzRpXnVWNyJWdzlDRjRCcVdMZzElUVBpP3t8STxBajFDIzMhNDs2YCJwVlhMJSkkPjFOcVN2UnRFamxWVjg3c3xPayZkdzpxcjFpXylNTkQrSG9kZkhnKTxeOTsyeE4+QXlUYVJQezc8ZipzL082dF1T'@;
put 'LikoTj5XYVVtJVtOWy8iLGg1Tip1bihXeDNyZjUwJF4kKWJdLmBufDlCTik0fjFfRWUsWHNvR1Y9bGE2cHpmK1MpYGJvQnhrX3ZZT21kRV8rL0dyWXpOSkcvJWl8eHMzUHIvKEtAVl0yeGhEUUAyQGcrVXJ8RV5LaS9oOk5ablhEcF17cHU0WS9lQ3MhOyxlblRhW0pDLkdOT09sa3NgOCNrPC5O'@;
put 'S2w1Iil4biFkcVZRJmZzY3VPRyFFKUFvdls/YVo1IjkwTVdpOlslZGAqKEtacDpOR1cyc25jYnk4fDE2R1ZMR0dgaXsyK01GUjQ5N2xpeVtvcShCK0N9Z15WVzA+K05gIzFZTXFnblVlU0NrZDltKUQ4fWRJJnomSm0lTUdrdC93MkRuKDMwXjZ5STlHdGc7YCs6dXsoTipzO1JPSjciQz5WTClK'@;
put 'UTZmV0kudVY+ZCV6fC9tXUFUZ2dDN2pEemppciNZPkZuP35WX0lXWDR0TU4/anFmdkJjbmpkVGZIMm5WWHY/RllRXWldSkFGMl1dXitQLDcrI244YXUsSEcxVnR6dzdRdUNiaSgoODk4fVhYRGxiRCRkN0BTQyFJNS57KzZPd3R4WD9UOm4lOklYPj93Mm58UiJ6TF0hUVdVVSFdSUledEpwMl5j'@;
put 'VmBBOS86eFRLWVFTS2YpKUImLDs0dU9ybU5CTFBdZkJicmlvdHFZWzpvXzMyWlZIMy5JdnlkTyRhN1BrInRDej5TOndVey9pTUJpeD9ZLGw5Pn18VCxFXz1Zdz92WnZANGM5MXVjR3gvezE9Nk5iQ1BpOUlAVVpQXk1eVlYwXWhDNXRHa1FTcG9jSi5kdU5ZVU5yYEchZihFanwxRSlMM2dWSHYw'@;
put 'Km9VdjNifiVrdjJCKlVMbGNaZCtCckxFeV8iKm0iQm41Qi9wPS9TNz9Jd3VWNGs5dDtkMkg1UD5uakgvX21CUm8jS3ttXU5SSmBuaylAIy5udVRBOj1MTlh2M1pHclZITTgrInN4QipFT1BsM3hzTzNlZVkmViE8TXBeWG9lWXAmK3YiV1U4PyhXWGQmZ1hzJWRjcnh1PnojeFpbPTt5ZEoxUj5L'@;
put 'RTtmWG5tYlFCaylTUXBIWXVnImtkaFl9Kk19Qz1SJEp8QzFvKTk4TllNL3FkPCY0T2Q9d2c6ZEgjdSsqTk8/P3ZxMnc2RGIhNzI8JUMkJXUwRVhxODJtZ2lpflhVKEExUz1MTzRzcVRZbF1oLjU3ODl3TioodCg2UzpnJFM0ZWdHSl5FQDozQGNhIyFQdylnYlhnVHgwW2RvM2E8OlZwYFM5cE4o'@;
put 'R2EiVEtiTCI6MmlFe0tRRWh9YkRfK14pWWE4ZG0qUUtAaDJtJnVkJGJROXNGLmw3XXJea3NQL052W05HTkVEdUBfOEljXTNPfD9fTEVhLF5COitZKV9KPV01aFs+V0o4VXxyTDd4IUY5d2coW3I/X0J5TmlXVlZ0SiJzV3RKYEFdWD9KNS9DVkhCKl9TPntHfjJ4TH4qUjVMeUNUdGJ1bT0hRVRf'@;
put 'ImQ9eFt0RFUsR0l6JWEsckc8MV17WnJGfXltWn5VTVMwRmNwQyI4Yzx1MV8kaHs7QnF5Jn4rL1hxazVVTiJ2Rl02N0BTczNTVWthOThsU3UifCkrc3R6WzIpfkgrXiU5eyklP2Y/Kj8zVVBDUi9hdXomdHJKQzhhPVN2ey42NEFZPUU1e3BQKFBWaTlHdjlJezt8T0pydVpoWGBaTWJOSXE9YlJS'@;
put 'UTRQMVkyMn19aTduZn02UGtYI1h1LkkvPF5ka2hsdSMzJShBNFNAX3IiZlprUFhwTGl9cSYqdFZhTUJvd3NbQDoqLzt4LCgpWSRacSlhUmdSJVZDKH18NEtlfjVbZ0UhPGVEZzk4WFFUY1NAaCJdWVYrMERaaEUuRiNlRyt2WCk2KzZbYzEwYDJRVTArWmVuNHplKWd0NmFfeVRxMlE4dzV7bCw7'@;
put 'e1FQeXQpInl4SXVKYDdudyt0ZS5CWEQ0JlBTIkJMKj5nJCooUFpKMD84Q0VXanFAPntKZ289VXo7QD9LKWlKN1p2PDdLalpCSEh9YW1VYVBMTURaJjNXR11gMVEpfWhxZzhPRyZrKCNiO0x1QHN4bkRxZHFCdy9vK2ZsTC5tIyEmNSVRVnNtbm53QUprKUN1RilwdmdXI1hAJjM9UHZxRVc8fGZP'@;
put 'YV5pIW4uLFF1ISJkUmRAZjxVOXVKNTh+QXBVP3R7dWFCWzwwPV0sMHk5THshW1owT3AzZ1tqRUsyRHZJTF9Xb2J4KkBxeUxHY3JoPiYhfGcrcFMpK29KYkhXciM1Z29QKTRVVGNlazhOdjk3b1V0ZDZ9KW5IRmFhO0tQKDssO2RXISZoV2whamt6Ol8+Zk10fFQ5JCtUb0toS3RqVVlnaC4jUzFG'@;
put 'QWxUPXkkZGRTeF9GUi92ai98I3dzSTdzbCQ5KU8wJUBibE9iSFA8fnosfChmNkprO3ZWT3VeMFIyYzsqfGl+aSx6bTE9KjJdW1h7b1puWVVaKEs8eV8sd0ohe0VjOy9aWkZXWm52fko9Pi8zS3c+I2AsM1glTzVhUnBMKnRgXTRELGtVLmVdZlpXb15oYHF4ciVobDpQOy8xMVJYKDwrLCUyPUZp'@;
put 'TH5kPzc+O116Yzl2NVBmeEJGNy5VWGN2R1RuQyMkNTtHLkBjaXI0cWxSblF2JGFYa0YyOURdZTBdZXtsdEVyWSFqMlAwXmJMUDd3NnY5IyUue2N0W295Zm5mNVMpXlM4TFA2LilCIigoOzVHfWNvMmwkZW54ZlkjImM6bHFebjhiak9gQmkqIWxjeShWWFRBY3p0d1FAJlt3OFsmK19QOEl3K141'@;
put 'SmIlNXFSIm9iREJtPHZjQ0hdIWUjaVVzQ0t1R1UiPGg+MkllfDt0cTAxYVkjJjBoZ3lrVi4rZU9zVkR1IT0xKHxXLCFXV0hDQl42KFo0elAoOURNLzljL0BucmEsais7KGIoV2dTdUxzcUFmPE98cmVhUTQ9OGJ4W14oLHkhYDZdNXspOUxYd3VYSD5lfVt8Mmt2TDEoMztqKTdYPl09fnAjRFUl'@;
put 'Rl9xWitvV0M9WH5dV0R3S2tjY0VbKiRxPEVXRXNUQlNIa19ibkBbTD1FSlA3PTJiRWA8IyFaQiNSckBQQklNPXUlM2pJRlFrKEcua2kue19oP25TVWNZRWNZLnZjZmw1RzhSOiEidStqOn4kSiIoekJNZlRFQnlKSiQya1NqY3lpSCNSXXFucWFgfXpIcVMuOWB2OyJKY0psWEVMeS8kUXdDbGxV'@;
put 'U3dJdjEpSVdTTnpSb0V0aXFONzBDSiJgTGchPUJtQmMwO2NHU1ldby9UIXNyPXp6fksoLH1xSkRnZyZtdCp2VjxaMD9eY3NHez9CRUhDM0hGKWpie342YiF8Zl58ezhLY2Vbb0tNQHg5IjtwR1NDZ2FpVWI1WXA0PT9WNXRCUGAhVnloSk9CfEh4WEY9YH1qYSI9KzZ7W2hLS3pkPUkjZGUwbnZ6'@;
put 'cCteQW50VjY+Vn1EQXBYOy5oZVBpI1olSj19XndFd3ZwOk1OUyV+dUooPzluNnNsTkMoRnhLeEghOUhPUXNGc2l1djVSVFdVaUUyPEgvNjxsKVciSWNTQEUzbyI6N2heL0NaIjVwKVA6bEAvT19uKE9LaEpyQjdgNVR2cng5W2BsNmdjekRnWCQ+Rj9neUgxdGltVnc3RT8maUM9Lip4dXBkIUN5'@;
put 'WD4mMi85KkNoOTJjKmRpIUdfP184M3ljKiZ6Jm9qSjk/KEJUMkVrfk9lTiM+WW4hc28mW3NDdlc0Xj8+WEEjZkxHRVVKdXA5KUFYUzVlXlpkX0whfHg3bi9WbCkxTSR7Om8zT1Isci80cjVZUWwoO2p0aDFZX29OMEpLQFo6YDtodVpVcmZgaFhoLl5XT2wwSEl7YT9WO0AsQWYuQVZRV0dOUnBb'@;
put 'Q140LlRQM1Nua2xKQF9qRmtneHZ2aGwoelVGamNnRyZaVTt+PUlXeWA8NUYmOmNAKTJnVTMiQUhQKzVYVitbeml3dSUzRHFnPHBMcHpMOVNzckNtYHkoLyVkT3BbWF5AWD40dk1bb0hZPFNQenl9Qix6XURmUTFSdExlPkssamlsYTRYPDJTMDJfUH1sSy4vTH4lL3JILysrMT1uUilFVTRfSU5Y'@;
put 'al94NExZaztoa1g9Kj5+KzIuPm86cSF4Ljhiezc0eFs+SVNMI3ltPUVlIytsOnhzfk1lJSo2Tn0iSTVgeEtnMU1HdkorbnBrXk8zXkMvVlhpYHBiREg2fDlFUzVvJW8wTjxddz9CXjh3bmBZSDhxMGM4YHZlbV1dLyEzdWJnSkYoVl19XVhNWTB5ciJ2e0h0dU18S2Bqe3tMVDNgaTdAeUYzZ1tU'@;
put 'L1tyLzo5R3pDX3ApTV5sL2htZ0M8TFlrc3ltNXI5RTtNdnRSIkFGMHZjLEUzeH5veE9VI2RCOE9OVnl5TnlkcCNgZFttdW85Vn4jaylsQyNHWH5HOFo5L0J2RUZVcDh4X05ZXlFmXT96KVgiNjlaVCN5JU1OOC82K0RnPGRRWGxAOEtie0U3OkBAeDxlMzxZbiRkKWxrTC5PPyVdOEl8dk0vayE2'@;
put 'fHZLckR4Zzx6aSgyQyF3WyhidiVIXkplWGtbTiIiTz9JYms0R1BkPS89NF1TUDBxIWFiKmxIRmtVLlshOE1uOypSd0kvZlFFditCNT12fUt+elprQTxKKmYxT3NdUW04MjI7TXc3NyZxMn5PI1R4Y2E0Q3dxcGt8cDkuW3JvUzdiaVdZUHl3dUN5Xjt+ODJ4P1Q/Mix1KUc3Z2hQLit2dTRGJSp5'@;
put 'NXR4PiskNEljezdDQmddMWBAUHxSMjF5dC5nPix+eyp2cT9uPG57OCw5P3swdz89Sm0rTnYrTS8yNUpCdWU0VGhgTERjY2J6Yy80K2dzMiJSO2BvNEh8PlkwQCwjZmNJY2I5dF96SEo3elsmTmQhL3o2bHQ3Z1J8NXR8dWYrT2l6MzE7TUxvW31YanBkaUVxJjlPRmRUdWNaYTNaMXxJMkYodGde'@;
put 'NTFEfjtnTU82MnUlTXdWc19DWWJZXnVCQ3BBZiMhX252ZjB9NlA4dypwK0ZWMSswLGJ4Z0RqI0VsUjB7ZTxFISJyaF54bSxnTkhETlA/ZEQ4e2AhbHBYSkYyPjk0MWouYy8zJW9tW2glLz1XIXY4ZUhPYXx8Qzt8fUs3JVs+aUFKakc3citZMlAzR1h3NylRfHZnYldPVUxNOj5XZ3VUels6OSZp'@;
put 'YTFQU1VWMEZVIWAvXndPbHY+Y1g7SFZYRCl1ZWslJlI/U2B7bnpdL0oyUlVvOVsiTndDTDN9MVo4T2NsfGVXdzQqezgyOz5GbVZydFduSGR9dzQ6cVpzZzBiQGBPa1V7SD55QXhWI2dTYUZpVEc5ST1PbT82Vms2PX03L3Q0Vjw5dS9gUm08eFtMUiF3aWleTTBoRF9GQkcoRTZZUz8rfihmJlQl'@;
put 'R3hlRTFUeDlkS3I9MDxtdmQzYm5QTyI5K2k5LzByKCUxK2Z0Mis8XVVrLGQhPGNrZ3s2WjdDWHAjYnUzemtjYl9jKiE/OU47ISJOMX18ZUU/cCRFSDpEaDBlST09ckYhbHYwbXlRTklaM15DY3U9Q21ZdmIpY2ZeX0UsRXhMNSkhPTE0fHVPP2E6UCRbSGpwZ0ExYkVMWnJsXmw6NUQuTkt9czsq'@;
put 'TzVgXzBNVHdGdXZBJUJ8LmJ1SzltOlN1S2s1a31KQjZZZUc+dj5xdUNebC4oV2VHXXdKI1o8bDxzOkxgYilEZStwdi8kMXJaKTFTcz0jVkN9dXlXLGlkdk1MKXVxSlJLc3syLH56elNSTHBBQyk0STZATEUvVnVpITEqX1hGeT1MPiRpKX1MIVp0SjlSVip+V3FbTWR5O2IyNFJEQiJSeng8NWFg'@;
put 'eWQ4YXJMajN1RE84Q1JULktTQ2dtPEpFPEswcXM0YiZ2TGBuR2xQPks/UC8lcSldYFYoMmpmYU47Z11HViFzWlRqT2NTYWRiVyYlN2lWZ3tSWVlbJV5vIWZAQHRzUkN6UVIvNlVmd1A9cWZ8cThUYjhhXjxkZWRKeCw4VnNOdzRiPGZ+bF5bPGx7ZmYxPjpAV1lQXjtmPyFSR3RpMlUqXi5wP1ss'@;
put 'VkchOk8lZCVOcDoueXwlRU5wXVcwfEhrc29nfXJiUTxhVFM0bGNvO2Rxb3w3NDBSc2FqM1d5bG5mQXVqZ0QwIzk0QGk/UmdvfC4yKF43ZTg9TltTUEAhK3w8VT03YWVvQDxJJlttdlJtaFZ4YD9id2AvWW5vWWE4eTdycEgzMlpVfmx1XT8mbTAoZ1V9a2lpVnYkPyxiRWkmOXk0SiQ1KkJZKU9t'@;
put 'b2x6cFspW15pen5kPSFvYzYuSWJVYXgmY1chfmtuTGA9TEQldWZsYjxRM2w/KmduKzpmWVozYz40OmVoXlBeJTBZTHJtOXExXXl1ckI4bSheRVVQVFZhMklCXn46IiM2az0wa2Y+MTRKdl4kdWtlS01De3ZdOzN4c21LV3NrJndFP2MrLDl5RDtTTjBZaX5sKnowcjgwdjpaQWwlZzNiKDVIfEEo'@;
put 'KiFVa1oqQkFgY09RKngkbm5vKnw0SDtNKCVhO145TTpUfU0/e2h+ekMvSUU7WzQ9ejIhVlhVMGJQUn1bPUpMNkw5UFVde3cwTnJRb1hnIWkvbD9oQFQ+PWVHMV5zaUQoIkQ/YmRwcUB8bE1ASzZwYClTMjs9VHRzaGFIQGkpeF1pQyhqM2tUVHAlalB8Tk0wa1YudygqKWAkTSxFJihSc196QFRg'@;
put 'ZnNWdHo/YWVdeX04dXFZQyMrd1tKWXdjN2ZJRTU4TFAjdXNNK3V0NjdDLyE+TkJ9P2xyMHxkPD5zdzleWj5wYCgvQ3lbMnd9XV8lMDNeW2YodlpJOD4kTkFRIlclaj9hdUhBaGRlI2lzKiFZaXFhXXVjZ2lra2tTe1pUO2JbIU5TVkdUfXxgaTtwcTBMI15lWW47MSxEKiN2bkUwPVs5JHovQ3Fp'@;
put 'TV8pKVEpKGFDWGhoWCZ3NjFMbmc7UF53aXIvTkhPcGdUR1dUaUU4N2ovKmxjVVlubXo5Jj19S0hCJntEI2oqbilvYkNgIlY9cmEld2lDLCUmdS5WQmQ6Lz1HXWApciNmaCNNJUYybSZARUxsa1hCJCtxSTVXJkBvdDo5PE9qQlBdSWxuWCwlMkRIMFZaNEl8bkkjZFYsRj5rdUZCTiNmVkh2XUpd'@;
put 'Ui5WWDBIIz48JjFFJF1PZD03Sj1mYnUyUD1RSGUzZGUxalVmbTc9VW1ZTFJpcmd6OzUhd0ImJkBSREwkcEdIW2B0VDVBQVFnW2YhblEjZD1HQmVsLmwpfEA7Y2NFWGV1c250cUZ7RWk6WW0/ODEwWGY3U35wSHpyIllvSDlSIyZ2REtxOFshe2t8WWdrZCRGaktSeTprXTY0N3F6PTIiTkxzcVNO'@;
put 'eig5NT5edj5JfGRSI2ByTCRkW19QS2E5NC5oXzslK2k1K1RIRzNMPHZlO11sTndyTW09Y2JIZGspbkdWT1cydkp4YiNxT3w6Y3FpRFd7biheLzZ6LkFgSERSRGxvaTQpekkmbTRiUkc0JXllYFlLbTRLRE5UZVE6Q2JrNj9Genpxe0JvMz0uZjdyRDRmVk4kK0chSkR2VG95LH4+V2NUNlskeiR0'@;
put 'Py5YOysybzlXNHRadnAmYW4zWz9xKzdSaHpPSzQlSl4lWWJ4TikzQywoL2pYVV5ddXFJMmhDJTNxTnBMQXZZRVVYPz1AOSRbeXNYZU0iY1lST0E1PDxwOilSRlc3KSxLWE4yK3lJJVhIb2V4Pj1UISZjcDZhU3A6VlU/TFRSI3IsKiV6eGQkLjpKS3p8cm1hOUglOCRAUDZaeV5wUXRsRWU+PS5Q'@;
put 'Y1dhbW99akUsXkNxbn1+a0tBdDt9c0IxKFRRWjQvP3ZlcS4xamZCWzszREQqfCZdWzgwSyFMWylldmxBQ2szYF4ha2FDWWw+PjlvOXVkPUFpImNfMyFha2J4PEZTO3khdygzVFJielM+ZjAkR1hjOz4xOE5FdGRZZygjVE11bGBaMHt5dVdtKGxseyEvWSJSM14ybXVnIyxsbnsrVlomSlNPc0Bw'@;
put 'bXJZYWA5UktXSE9TaXxhUEx+T1o5O0VUU1k3Qyx8el4zL3dVR2coVkNPKCspPSN0TCssZ1gxcVpKUXV9cm1gLyZMQyo0PypJbWghbmFma1IiXXZANXhgfVt2JWYxQUlTUSgvSkFYeSI5U1dQSWN5WEpQe0J7YSkweGJFVFY0eiwpWClKbllMVDtVbiFMQCNNfjF1TT9fa1VIbiY9RlhKPmVRKylY'@;
put 'fVBmUEJ8NjgjcUJmcUFtI3tpNCxWX3h6MCZpS2E9elJSeEtBZi5IQWdKcSllW2I5JlNueWQ1PTd1IXw8S1RKNWxQcVRhI143RHltNTE7ZTxvV3pONnxadkZhMnpRPVlpRTxjcW8raUhSaSUzOlc3QHp4KmYrNHNfXlI9cFJyKUU1OEhIKWQpdFdXfG9gVTpxTHRAQHhhZ3xqdE01Rmo0VG4pNSEw'@;
put 'Nno4WD1BSD0+VHQ/Iih5ayE8IWw9ZGZ2Rks3KCJ0Mz12Qiw9dzdFKUY6blNGdXs4TlB7TXcwOV14PVs8ZyNiRyI0O2BQOmAwaFlAcDFBSSJEWCwhdUZfbWRASlMxOVJlZmZ4LG19JmtVRGtlRSE8N3YoVipqPThNKU9ES0tOMCRiXURtdHt5eE1NNWl6VCJdbDlXKSw5OUJyPG1IXUwvZ0FLVTd0'@;
put 'NlteNHg7M2x6PjE+ZWp8RiQwVCl3eDZqU0J2ODoyWjJ5QW1hOFZYdi5WJiFWc0U+VHxJMFhIZjgyN2suRnU/VT1eI0EqQ3QwWkFBYnh7ajc0REIybSk3PVJJRiJCd0BpeUJHR2g3QkdDfFlueDFTd1EsS0cxWTR8PGhmcVhUSGdyYlh7S0osb3ZnWnxoeWddRDwkK095Z011U3AvRUU4a05jcm9F'@;
put 'W3BiMHI7fDFOWlZeTWsxbjM7PCYhUGw7JX5fTlp6VFYsZlsxYEYhOj1XZz42KDYoejlsZ2FzW1t5TjxITyl6KzRtZHFecEt+fGVGfldXK35mfnokbUQ9VjRUL1M2Wm5hMGQscng1SXVhWU15VkB+Sl9JQyhuYixNTHtGSXVEd2VfNGc6d0VSWmgqMjZ3NiZKLz5LbHo7ZCRmcTpTdClKcTM7KDQk'@;
put 'bHBnUSpMPWNtI114U345eiZseS5YREgxVEhNQiNIRygqSihwYSVkRzZlb3IzMDt4T1JINlZiIUNUaXhpQUlkJDwqVjFJeXhWWVUkTSIpMFVnJXgqVWZ5ZFBuRiNFT2B5Xy4qUDYoK3xCNFA9RyFgRT0+RV5APnBqY3lxYF5weT0sU3hYeSFUW0dPanFFPClITXY8d3BQRkB7cXBMU2hwPXpvSl1a'@;
put 'ajRDKyFgVks/YFdKbTEldXRtcCRfQH0/WTE2fjg5KzJHRmBWKmxaJVRJPTR1TmhdZnxUWz44PkYiWnx1d0Ihb0Q3Z3tHaylqQV9aP2BrXU86bCR5VHI2OlI4el1NYSR5Q2wsREt4TWF7dz1oPH5aWC8ucFUySUFDUzZROmIsV1ZeIT92SSkqXlJVPmJjO3d0dl1wZVsoWy4+TH5RT1hSQCNLOXcq'@;
put 'XW94K1AqWStReT5fNmA5bF9EZ3ojR2xtKU5pazRdNFdQM3xQZi4lfmtdcCtyNU87bXczLmRjc29HQVFkd2tCIiFmRWZfe29kcUZSOSVxJSljcDZnVjooIjYwVmxXdiV+fCNbbVtecXt3TFZ1T3dZSExVQGRXeyxnNEhOU1c3Rkl5Nkt5S1NGJGVTZ1dPdDNxfCFFTjVeYF5RWnF7TiJFZmQ5Uy5u'@;
put 'XmY6K2FIYnthfD1KcF0sbyU5M2luSGdJRWZoKkMmczRvLGRnJnxxYj1PfFBxdW1CTk5dW0JibkRzW1hISG0+VVc5QTJDXXYqRTx6STVfMGYhajo1SVYqJXE5QGRtT10uOXdaVTpnNWdqU2w1YD4zUGZ6Y2ZFJUUoKiVDMCg1KWtjfEsvUlIqJU9bOm9Va2ZCS3tLLn0jaSo9VyZYYyMsXW9RI0ZI'@;
put 'Ni9KRWc/SXczakdyTixUUSNONyQjQlBOLFhaI35wQ0NzZEVfSFgiZTJ+YEd3KCVfLGlOendHb35aSmZGSksqUl8pRkE1Tk9saHZ6MTdrVi5aNnhfQ1NDTVJbcns1fjZyNkNiT34iSjJddE5jSkBlO11RRU8oSFd7bDQ1KVNxIURwXlNKY008Tit+T3EyV3x3Z19oaTw6cl9nSiolMDJ5O3BTQ3No'@;
put 'MH10NHB6MytHaEVlOWY3bz98bGM+bkRfYl4+TmBlWXFdU2V4XXIuY1tLSjM6KFk2KzE/UWNtYjM9ViwhTXgvflpiM3pCdDxPJm1bOVA0IVtmSCFKTSZ3UW1OOjB6YS51JWNGSShQOGNATz16P20sVGg9UGBzKDBNYGJgbDR9LFN1MU92WlU3MVp1ZkFXR35SYDREfERSM2hxTGw0d2A4T0xCKXE2'@;
put 'I1lUOzFELilFdzY7JGxdPn5OMV1EaHx4OnZndWwmYjJDV1Q2TXFfYGhNPXU9P2c8dktCO1BNeEx0LDtRS0REQHRdVzhCMDtmNUR1PWRVI3Jle3ArPk1mYUMzMjoxZG4/IlJlbm1APVVGRHtvQEtZeEhGWGFoTnR8W1RmdGt8QnRnfF1yT2QlWDdeSiQ5aG0uLi9TWW1ZXVdDTShaYTVBKCRWTGVw'@;
put 'c2RQXypJbmopRCRuTVVJN0k9eSNKUWUoVXhLb2JGbHVARngoaX1WMiFkQyZpeDc3KHghJjUyRy5CMFgxPW5gazVMMWA6S1BTaiU2YSQ1QSRFY35kVUAsYmsufl9kKnl2KWQ8W3pfWVEhLytTRVZtMDE6OCpQM303IzkwRUBKXyhbbWZSaDIyUmFzbTcpaVFdeStoXWFhT0UwSWJdPnYsPUchQnRQ'@;
put 'RnB8ZVghJXpATVlaKG5gTVpYNG5eTXIpP1VXKH5LR0dvW3A2fStea3ViI294VmFXNF98VHpPQ0tldm8iUkYhN35AJDNFM1s0OVk4VnxZeWosPj9ReChgWFRUV0Y7NXczJlF+bF9ONHElYXxsYGEjd200VVB2SjZnfG4pYjQpcz5vLC9sRW9zPlhzcSV3bW1kJClBSlcjRGRFNHdpYGE5dDU+aTh1'@;
put 'NiEpKT5MQlJbdTxTNS9aazMlIjJGQXk3entJVz87MzExaDBmPH0wNigzbnBBbkgsZ01uXzFQWE9DNUVlO2FhNDpMS2k9QDdOfGg0Yz5tKWlfckRaZyFQazhbIkteYWdrPG8vOEUzTWhqYDZbcm9HQl89IWhDRSFoUVRpYUZHTEMkYjBSbTo9ZXM/LmhmYWpOO3Fyb1V6KTQ6V0pBd01iSy9oSlJ4'@;
put 'SDxfT2pqd3lDZSlsOUxIIXEyPXp4QzJ0KyRlfUksT2Y0eDx9OEU5JW9tMyRWdXhoaW9CdSpKKDolcjVOO2tMND5TUiM9LDZlfEFrTyoqaCJXMyZzcyp2TFU5Wi5lUXcmYmd+VmYjRjxkOk43USI2eDNVRzR9TXc+QXovIUtDMUsvRDxzKko1Xj1ydj4zIVtTYXI+O2RtZE5mcThGQXdfPW5wLzUj'@;
put 'OUdjblh1PF1RZFdEUTk8bjR1YlJbeHh2ZGptVT05SGZbQlEoYTpzZFAwKmNvZUl0Wlo+UzUmN3laVUd2ImVyXyJyMl80eWptdn1wRzJZaWl9Q2RjbzlmWWgrTFdZR3k3aEsqX01+XU0oU2RmZHpuYWUlcGdhPEB1X11iXmE2Xn0yV05zRk5Pfm0sVGI0JSImKGp1JCR7NTEiZXNIbn0xOlMraEJL'@;
put 'ViVOJGdpMTF+dis8VCxrY3k2IVMhI1g0PXBbOnJEaVdtQGE4MXhnXXN+VFpfTGhKMjQ7IilPejYhbllTRmRsPXl3OFApWlhQUSlna2l3fmclaCtzV1pdaUVYSipoZChuanRuejd3X3xdKTprQF9mIVNmUXd8RiE4d0E9Nz47Xkd6OWBQdVBNbVF5NldPMiVHXSYiKEVERWAwcVZULjVjI2ImaWF8'@;
put 'R1hWUTojPShPfndiZz1PPEFzLH4lOjcsRVBbX09UWyh5U119LHlgJFd4VFlZNSR8PDM7UjgvJXBBOEcqdVkvPF0xZnhOJVZHMGg+Pk00RS9lbys8KCMzfEYjYGtCa3gjbUQsSHV4bEhHdUcqSVFGdyJYPVFjO202fjhCP2FaU2VMIyZIVFhtXzBGKVBeVlMrLko8WVhnK35hQG9tbXIlNiI1a2BQ'@;
put 'e1pOLixOcWQmPDF3Oy9uK1szZ0Z9PTIsTVRrcGVVT01yaUd3Lmcrei82Kng7QE5YTE0yeENyMi9zVHMxQDNDTSsrLy51ez9qV1AmV0dvIVlSfS9jX3trPiEwV3R5eU87ZzcxSEAke2pyRmgyOE1NYE51ZDFlQFs4PyIjbnNqMVFeI1oydTVSSHQmXVZfQDh0ckhsO25VOXZOOFklMD9NOm4hXklI'@;
put 'YU1rb1EybF4mVH5aPWhiUy5mVH41S2ckQ3RNemAyVGkyTTVZRSxhMiZxUCR2STwocDtpVlNuaG03I0FVbE5CbzoyXWAyO15KLExmIXp0XVh4PjE+Q3xFdkw8UDtrZUcpTlRjJkAoOj5QZjlzcEdNYVhAX016aHpGSXNMOVEuIz5LI1g0JEtKO2h8ZmYhb3JeUk4lKSg/TXJveTA3ajBDLnBWUkho'@;
put 'dXJIcFhpZkZiU3RoMGkwOHp6enJQV3RlbF9tPHlOPUFZTmBKN09eIj5hI0BucWwsWTB9JktdUG46Izh8dHxnZ1g9VGUjdHRwN0xUWE8wZTlzUFBWej5MT1lqX34yVUcjanM5eSIjcHI2Jk88b0pOY3dpZUh6JDQmTCo0NVgqaz1lREZ1TVU1OTFgP2J4TWR5MltWXjFWbDRRalp4TVY4KDRFVkMx'@;
put 'UnY4fUxML2dFK2Vzd21WQjN7IjNoPVNOXm0hL2VmfFhKQmxgYStGYSo3KUllSXBUZFRDaTMpMnZDYzJxW0RmT1ZzYj9LRzFkQiZHd0woTER6fUZNbXJKLlVkcTNdLkt1X1FYc0kkXjZaMGs4XiJaMVpvUEdEU0A7bClWKjxhVzpLVU0sWGVpTEE2My9Ae2htZ0ZNZU1oM31RKipvZSwpIkZfOTE6'@;
put 'TVFUMmhyVDdKIjpSaHElV3lQXTRQTCQuXz5OXlUkUXlHJHBtWj1tbSEufjpOYklubEhaQWtLfXksUUZMK0ooU2heNFRdZkVlOHRsU15IP2U+Ty9ZQF58Qnx6TDh8SU94Jm5Se1Q2VSswO243XUpuSFF2alAoclIkN04yKzl2bGZ9OD5tYERpfjBTQnBmRVBTRzJOdmNXdCtCQWVFUTUmd1g1XV5Z'@;
put 'TE5MOmlFXmVpfGJoUC88QkouVmUwQFhGalY+c3VMZXM7ZD0lSlNdTX5SLjs7dlpkQThaRVteMDAxJF1LTzVDJD5xQm1RZjcobH5HeUd7ZyZNUXdsMD9gYi88XVR4cC9CbEI4LnM8VGB1fFQ9STZ7XX4qS34rY2U+PCMkWUZzQVVCM0IzT0xCPFhWX2tEJVVgSTsqJDRXKTEpYkAkfDwlPk5+JEV6'@;
put 'SU5TIk59Z09CejIyPGFxZUo8KmsjR3ErZDVjKn5oPTFhLH11JmkrZylsRDRbaCZodW9vMmdWSWxJQll2RHw0PyNSUHNHTnF+NndvUys+bmlfdlVLR0tRKlFDJVQ/JX5YdCtMPjZNUy9PZzQ0dFcqaU5vYU9EQ05ddzBzUmlZKFFyVTFvJipdUCJualhZNyE2TTczeSQ2b3xIPTRYaVElQGBrRjE8'@;
put 'RUxkYk87anB0NiVqJmcvfSklOGtiWksyLn00Mj55JEUlbWtqNnNTaV9bOjRdOHUuLGIiRE9jKndsWiJgYUY9akVKSTh4djk4Syw9cktYJjFHeSxoemdXd0d9TkBiXWV1bX1odUJ6TFEyT3dzak5Eb0tpQEU3L3JefCVOPyZ7R28iSHtfZ3BhMnNiUjU3flh9dU1yRD8qVnJrYF9JWnddTG5USmVK'@;
put 'b0h2RU1sWEZieDx8V0svRiFDYGMoIWNhJGU4eURSNCxyX0cmV3l1bHFWT3RoPF9fIzBpKVYweXcrKz1IVCp2aGBSXURTUG08LDROWGVfeFI4XXY9cVcjLnBUb0RMcVFkLF97PnBheFojVFkqfjEjVFFuLElGZVZ2Xik/bX5+OnhtIilpM3pQVFVtM3MvSCVyQVkzLjM6NS87PW58UEBDM34yNys0'@;
put 'MzI0S34jVSY9ej86dDFyU2E6UGBjZTg4PFtoXTgmOl1MWWZMQix5UiFiWTtFIU9laVJjfCElJGZfaUlFPSQoQi52dE1OWDppYEd6KnZDSS8/JjNyYChARHQ2VTs6OTlNMVBGbkZGZ3dGajNYT0B9WGVEcG5zcj1yNHE1PlJ+QDMjQklFaWZtdihZLCJeZkwhMCJqd2ZnKGNJVHd6PzV7SyJyJXtK'@;
put 'UVlZTWEwaXtRMWspaGBpKnlmaU19IUg0RkZ+fCRZVEk2YSZTSnJkYyVXOV5AbiVOXUN6UCRiUjpecio7Ong/MWhBUml+XmguMEBoLHwhancqXVRiXkFSPTkuR1hVOWc5ejgwcVN4QkEhaEtBRjEuOFllQGNJXXxTKDU0fjIjKUolIlFfMjVfZHcoVUpWTXtiN0t1TGQuNjVkLnIvTVFIb2BeYmNC'@;
put 'dSJSJEAueEwrZUdsSmRIMV1qMGNSWF5MXUJfZSJpS1Y7LCN6eSxjWCFpfE9iTztaIko4IyJTfkA7c0NdJUJdbXxQVXFJP3ZEZz9HZGtTI3hhNG5KeF1vYFNaenBJNTF8M1BgfFQyN01FQ05bXSFqbl4vaH5NTyYzWSlRYnA+eHkxbWBXZyQ9W1c8UigwXWpkVik0Yj1TYFVqXn1Wfl9oTHZhO3dA'@;
put 'SEtlTXsrMV87WkAhey9KXmM1SiJGWTFPV05yMiF6XS9sdFoyeig2bjU1dkJqbCxMdXRRZ00qcSN5dks0X1E/NjRXZlN1Zk8ldHhbI1gkPm9ebkIpPmd5LnpEJCxIQmAwUzUleFMwSGRGWT8jXUxXLi56dTl0b2F8OCU4dz45Km9sP1IuQXNXKlt4VFQ+dENFMGNgR0xpNnx3ZDNjTXFWW2FMY2M/'@;
put 'JFlgS3QpXyRyY3l0XWB6LzBhPjtgNkIlUTBjaDZiZUdCY2RdMTpydCpOOGdfVkpIdV57RUx6UCNNODZYL3EqRkJDQCFoOj9hcyUjMGlpaF9aTio5bCE8P35ZQyRKWXs5UzBKdmNsS0hkc08/d0I1Oy9jeVNXNFEkakQlcnZ8VUZ0RDZHPHNuLkolQjh8fStXYy9td1FEeVRYczZkKG1LbSUoJlM9'@;
put 'P3dheEFBdEs4VkpEJVBjVzgqZThkSWJOW3pQdG92Q19WSGBBT3pYak1lNW42WU9pTDFVW2hPU0tyUkZMMCorW2FxaTIqe005SyoxeVU5d05sMyMlX3V1TH5+Ymk9RnVNIlQ+MDwxWC9LLjxXZ1UpIyM/IyxRTXZ5O15McjNEe0FlfH59Q3pPKExmP2ZaV1IoOGVbZFheenFNc3koTSFzS0oyVmZa'@;
put 'UEhzI08/WUdpMEREKzw3dUlpKkJlV34/SGQ/eGIuQzozWVV6bTFjQG4uL2AlflEoOjVEdCtmSU4vXlpPI1NxZkF7cHR5VUpWNCoycHIkTE8wRTM4eVo0VShUb1A3OngwbC9zU0I4fGdnOTo/LzBUUiVTeHluWnVVKVIkZXQhOTB+NFRXT0lBVys5UUBsVyZjMVBpI0UlMDR1JC8vZkdEJmNxVEw4'@;
put 'Y3N+NEBTPVBdVT5KbDpDMUxjUmVPcDViMlBtfFA9PUVdP2t3Jl5yeztpMltFWyRWbjp2fFZKT3x7RE93czJtRWBHWyp0JjlhYj9QUnt1JCRqXTRiOHVqJlZhUEExPEdHJUlOeUt3SkM7M3ZhXzImb3VvJSFEbmU4RUkwZix4QnJpQGZyfj83ciJKI1Q3KkBtWEEwZHwrcD1CZkhfdkMmY0ZMZmAm'@;
put 'cHQ2Ry5PdkoofUNkbkg6KWEoekxufm5pUklkbzNsR31EQEk7Z3MwMDpAXnBvVldmODE1NWZJMUB1MXM0KCxwOzt1XzlLNCp5dzd7ek9zNSp1WEh2WzNhYnM2RTJWIXRMaztMTHtpeVo1LEQqbyE2XkdHanw3bnNXPGYuOE5sQHt1RzBeWCRNa0AhUEU+Tk83NmxtPnFhYVdBa0hwRjViKmVIOFt9'@;
put 'MTFsLmZ4JCZYKnciQnFCPCNyOG16TC5GYXRuYyRYPjdEe3dxW25LJSU3UWo3T0JpcW9bTVtddUUyQTpAMTNrI20vVEBrVVE7YWJRSTk9QlQmezE2WDF0fXgjJSZXbSp0RTY4RSV8bGw4Ujk0b3FuWVF+ejNmTTxER2RvPEh7WFFgOkJTSH5yOTBRcThFZzVfU3FeKEUjbD1GVDc/MypodGZ4aEky'@;
put 'ZzN5b01jeztGfEcpb2QqUF9yKE4mNj4lO2w6P3diMWVdJlp6S0BLWUR2bmtbbm4kbHZhImExYTJIWjxCTFhXZHJaVV9SeXs5IzpHZnpTKHV4SCtIezJnQkVVLHIuR0tTRztYcksiV2czQn5UTnleOz4vcUJRNjoqSFI7JXF6ZmQqe3cmbFZdfHs+T1hLbE5qO0daI05mTjhCLiRtR1BQKTwkRHd9'@;
put 'SUVrSyojZDBvXkg1LykzelQ4L2AqNGh6Q1MkUyg5T2gseitJQlJQREhLJV5XYih9UWt4UCtfIzZsczl2TyE3Lm41IU8hOlA3bjxMSGZTT15uVVYoZGpQRCNIOjpob2Rjb048WDM2Kyg0V2VgKyhbRno0SEwjPXpDeDNGMU5VTSZ3QH5JMXdhfTt1ZCsvbCk6LixJUGtMRjFUeDF2akUjeyZ7Q3J7'@;
put 'aCxCN3FRZGEzLHZ+MTB5TjcqKnhRW0ZIdHh7PVF9XmczUmxqQiZtcS5ycHU/SU5qNWUveThMUVdSXXhFXmQsPEQsaWxOZD15LmNGUz0ueUs8biM+O3YieyZANURtN0dNN2N8QmU/QEBUWDJKOyYkblVfdzIreSxrPmhRMlQwVDx9R2BoVSNLUGt+JTksez1AdD02VGUvNUBlKV9rTTIiSnd3fHJ4'@;
put 'Yl5WSnU0flZiRSQvMCg5KnNMLC5OZEllIitAbTJHaSI6PUwpKyJHWyxGaWZPKTMsY1gvbS49R2ZNWHRNK2ZFNUxHQl1VY0J6WWs0N0h4UDxGJn1nZj5+cGJMdFB1cmo/QkhyYGJnankuMXhTYDldeyJndVlFek8+TkImJUlhP0IoV0RAMHVWZU8oeV0uVDdPeitqRVl9Jm82VGk8WnBWbjcuYzVQ'@;
put 'S0RZZklPXnV8UXM2c0NsdTpVRkBxSjlwR0YhTzYkPUpOX3UobVRPfnVCNjZoKCFZUitWTCghKmh7M095eiZjXjhUKEhzdnRWd0VmLD9EZV5ebGcsTXV5OCFPOXxXWmIkckhDJks3cUc9R1BNcVpgPUYxOmEzYEZINnchNS5Zc3NBUjtyRT5wYHBdSGh3d1VDLm4sP2lec3tQLnxbNTk9QnBqMjAs'@;
put 'VWo2RilYW2xFdVE7Ql5KLnRlL0wzMmxXfE5IdVtmZ3dUdHxuWCN+XlRMfF0mMDZQTyNKQXtvTj5EOGZ9Q0BoOENZRWVYfHkvKileOFg5LzEjI2wvUl5ZIVsyOTxoPVd7RiVObUk7eCVjOXh3ZXJpOkZVOmRZUlZQP1pEOGNWMmUzITU6PGQ0UTlHbF9iRUYoPDx5Mj1lezRQPnFBS11Sayl7PU82'@;
put 'W1dZdHh2YGh+L358QGN2NHA3Pk9gWTsveUpAaEEjN3xRb1hfZ187b21CWSohUkFdPCo3OTwjfS9kX1lQKWpaNEN1UCV2Kkp2IX1wNHhXNENYQHA6T3osU3djUGxHO1VfbG1Ucnpoe0hJSCM4UEAjR3V7YThBcEk+aiwmdFc6ZXRzKDkvcmUuRn5HZ0RRYWwpJFJidEE9LE9HfTBJcTgjIUJzNjQ3'@;
put 'T11EUWVBNX1kfiFXa1dGdWl0O1RjJT4mUiQ9Z1UubmcoP0JxUyY2WHlQaVk2b3EyayswcDYzQ0hubUkkXWR+dzUmXWVmOihvJlVvO1hUUzpveShNd21LaGdYUj9pSXB4M2ZSfjUvfURxPmdBbl9PR20yWH53cyt8T2xJYz1ZTnpaTy48aD0zd182YlJVRT1pTm05bXgwbiVLWTQ8ITZwWHxtTyNU'@;
put 'KHVwRDVtJGhORS5rZDVWY1U7JnU2d2p4ck5RcGN7cW9ZJitxaWYzW0RlOTBfI2s7b2VGOiJdZUg4fUU9bX14dSwjVj1nfixPbC50MyF2Oz42O1t1L2lOXk8iRms5dEFSa10/VE4iRnBicyVYMz9xdGxoOFNQKCxqfFR0PlVTd0hbTXpkP1JxI18pQnchd0ZtRi5aWWJTVGMvWlJedy4yUkNHZVMs'@;
put 'NzBwIit9SERGM1NrRGdQUUdbd0lzU3tCSFJ7RiV0N2BOPkNwakpmc1NzSGBZdFtIbi40X3VANjZFZyU9cSFUJWY6Mk14Ilchd2hZMVBWL0xbWnRbfj5OWDJ9KT5vQ3lUdW4leXBnNCFiJE9KT0M4WjA2IVsrXWU1RmE4K0VrMHdnV11SVG90QyhBOUtUMmVwRVVCOXVAamBOKTNHREVCX35PWXtg'@;
put 'ezpNXjRBdThrNF1QSDs5dXdgbj96SXk1SShbbiVyeG58MXtvZ0g2QSZ1VlBPdj9HLld5IStbaUIrY15kQ1I+SVY9OXAiVVt1W005LCFFazw+QHdXJDhRbF1GWF5tZiJwJXdCPyg9ZiRONiFZV1E8bWY1USp7Wyk3M1dHcmRlXnlMYV9ZdDRrfXU/LE4hIjEkckciX0o0TlpXTG1YbmpDWmNDR2Uh'@;
put 'KjomYFFiPixGdkI8Mn4pT29VazFhQH1aOW9VXmMoSU9YOixbNU9WYUJkNTlmRDlRVFB9PEwlfkxWJE5gbUFYR2A8YEp3NTY5LiouSDJBIlYrd0J9XmZIX2lIenRIdDglPVNTLjIyb1p1OioqTiN8b01EZVUsMSYudWlhPDQrN1MjPiU2OHNjVVkhQiNNJXtrcDRRSjxdZFk5T0RUc0lOY19gIWVa'@;
put 'aiVbP1NBMWdtbU14TFN7JUFUaTwrcEFlVmZ5S3I5SzVeJVRlQVFMbkZUTS9DYW0sTS5yI2ZKY1dKeG5ZNiRyS3MzdnhWKy8vVUVXfFdaWW0/TlZkYF55ZFVJaHBgJmljMl9HaUhERysxJE1oWHsiLHYzQUYkckZoYmg7RG40PT46WXg/QWkhcDp6IikidmBITkNLbU5wVCYkZ1BeI2ZCNyRoLEp4'@;
put 'Kzo3YktLVjAkQFs6SlB7MzQrTlBEVGF1LihOTUxNJmFoYXYxSW5MPWglYDNlaWlOKlVhbDZtKzRwPX45S1hve1lxVy5+Zn4uUUhqekdlXit1cDFuQlUpXl9AdGhhLkkyTDUiK2Y7Vj8+Wj9YKH1sL3YrMG4zLjZRVns0MHMwLkwzO0o8K1dSMig6SCpwR0lzI3R3NHw1VHd+NyxRIjhnIlFoLkw8'@;
put 'UFIhSkxwMFV7ZSg7O0hzZkUmU05XNE1YI3lWblJTdndoMHNIMmA4am1WQmU8cEUsZVFRd3hrPDhRVjV+bVd4Vy8pMi93aDJ4RVhbRFE3Mjg8KVR2S01FJC5manRWbG18bWhaPFYmdXQwaSp4UT5vbFR4ayQrdE1veGh7dUcrX3JPMFh0YDprPktsRi4hfE9bJVh8UWQuQms9d051fjU3ZztRUFlK'@;
put 'IUJ4Kl8vPkU3cUcsa09fO09XTnAyei9FXihVbHBDLGd6cFM+cjNvdF58XUpUQFlHVEx6VjB7MWl0KENjZzQ2bm94V0ZrcCZVY3t1fF9VPHpTPnZZdTx3RlNIckF1VEBzN1l5MlV6UCNHQzNHUXwlK2RgM1NbMFZFWTteJjBPYVQjS34+S0p2NSNFPlhgP0M5VyRHbls/REZWI012Ont+QU8qUklT'@;
put 'KVJFUEloUzszOiJsdiRqKSU2aXM8bGFhT3MpVj4sK0BScE1LcytfWEBLI2FDSVNRekdeOT0vJUQvanZUU2FjdD5HOk50akEmKEtMUmxXTkE2IXt6MXdYOERHPip2WEd1UC8qRTNSPnAqPG04dXBMeXp4Nlg2QHJHUiU3dXdpMyovN3JxLnRDSDdVUGhIQShicmgxPV5Uflp4XzdfLEhVcCJmKE43'@;
put 'fT9uYXhDbTVSLkAyaHBOUSF8TiZDck9eSWlwaSF3UkV3cj8uayVvdXB6WnlVb28rMXVIYF8iKzF+ITpJcEkxRUcoQ3hUUjl+WkE2P1spdSN7aSMiJlc4KXo6S1dtLzUuamhGX1pAUDFFNy49PlUzIVBFOlV6YFJDdnU4czQ4bDcpVFluXSE2KmcrPDg4Jnd0MzxETiViTWpnKSElUlJbSGpFOGE6'@;
put 'I3s7PmNXMW9LJjh8WE46YCREMmZkLi4pSjteYUEwU3ZGQmNtUkY/OUJwTiRWW2ZBeWQwPE58cjMoWSs7VnIrNV5gemtqNFElMCMvYkoiPGhDVlJ6cWRdY2NkWTUoYCskaHA9KjZRdW5lfV1GWS9RLGZSVj5QV1hEWzk6Xm1IMSlKTlUpZSpMfGl8X3leJVgxUnx4WnElcTltdyNgVCtzMGhZJmtA'@;
put 'S3JxNWFUai42UDV2SW5Jbkx1YUQ6L3okb2YyaWdGKVQkNV8mMGZ8Ql8oJUh4M3QvO25YXyxBbSR0Qj0hIld4JGJTMXlHP2wrVl5fSztEfWM0cTxpZV0+fnwwSi98RWFRbWJMVSw7dzQ3Wzloelh+OnBEUnlVVGFIZFtOWD9CQFk8ckJ0ajJ+Uz4vcV55R3gzP21xa1lRYVNvbjcqMyR5LFQuJTV+'@;
put 'ZSM7fjY7R29XJmlpc10qWXRtVlVCIWN8T3VaKno/cW4vKm1PVTwuISRoPWlBPmArPHIjfT1JWkNZfjlGcnVKbHBuekAyIzZ9KlVQSl4zKzxGTG4oQEtEUHZ4Kyk8JDA3SW1BTGc6Omx8M2JWLit+QDglc0JdNUFwbSxxXVRAYipbL1tTcVJMTzFOfCloSXlgbEQjdXNhRy5dX1YrImBnYT4obFQ6'@;
put 'WUU3ImgqdnZWeDZvc1tpTXVWYyRQaUlWJX5EZmtHWHlPRTgjM0N9SWZxelhHaXVQPlpaKlJpei9JP10mckhgdkhDRXAydUohdU5wJik4bCtNW1QkJmJ1O3sxVCtkNVpxdFkzS2F9Zlt6S29RNEdaOUtRSzJqRkNDbmoyb2lDVU5YNnB6LjB0UnVtayNHS0lpUUsufUNgOCVQQmkkb2krLzJ1Uy9E'@;
put 'VndMVkkjYXB3I0dITytzWlkpX0J7aGx5Wj4/YnQxUDJVdD5jfFljL2UuPkEhc29sajRRNFImVWY+XkJCXTBpRGEvZlFOXmJ3PnsuUEhJMmhAN3M2JHZ3eltLXXR2fTlYVF4qOlFsNl5tflRPJmp6anI5Kn1ody89a0prTVFEW29SZ0NyRV5Gd01tOkwqJDN4PEZEbypCMm5lLDNta241REswKV1d'@;
put 'WFNHa0ltPj1YQXpiPUpPaUZ+ZUo1KkRqdyxMWHImLi5SYkVoeW9oKXptfUxLSGUqUnV+Yn06JUh8PkJLTSk0fTY/d2lKOy9VUUFEUDs/L2VHMyJIIW9RRVZEKW96PT9NRlhgaGtHQEt3fjc5L2swQ1UhKEtOb29OXzNNcHZ9JD52NkZMbTpDYyZscXd+YzswVFZuXjI7MHRCWUhlTl0sK30vOzwp'@;
put 'eDQveCpSL0M1KlBLYUl0Ui5oXnNNbTUoeWt0UUNFR0ZLTi5efGBqfjNVbisoPm9qMVcre3F1TSRpJGMzZWdMRy90KDxfNyZSMUZ0SlJMIzlmPkFPT1ozMWFNXmp8MWslZjVZOCFDcn05SCpsV2JZJVl6NE9lbFp6Rmx4LjJSOTVCPnRRUz1WNTpyeU4/WjVvR2wud3lkJkNMP31sfHRiZnx4SzE4'@;
put 'UmtZUk56R3JkZytuTDAuLDV0I0NydnVOZm1XQz9De1NLIix4OV5zLEF9NWMyQjcvJl91ZVc+MmBFX119UEFZLi5FNm5OfFRhZDxpe1tYX2osayU6dWJPODdPTGp5eFB+UHAxZlgleDlgR3EwTE9DUyVQclYhd3dfdG5FXnp2PUo3TCZnK1l9TEdCRWk8Zn1wVTlQIkQzdjN0bytNd2UxLGBqPVBp'@;
put 'cTBAKmg4UHJnR0VqbTpAclsqejdiL1kjPXJrL2ppTUo+IS5wSyI+T3BYMS4wQ3khTV1AQ1lUISFwbylDUzxlUzxLTndwLyYxJmBATTlNLGYhPnlGVTwqWlU2L2wlYVlLVH5BQy5BV2A5TV18ZyVWfDJqJClUd1dwXjxfKW9TdDF3Nm8wQTZrM0NLLCpnOGc1N2s6fXNLfUtCbXdoRVkkP14xPj1y'@;
put 'Zl47a2RqcHlfaDhURThDXSgmV35gWjV6JjZeVTojNi81YTcuJDVqLHhfWj5wLHk0UE0pXi9fa2R+VlhRXkQ4IXJmQGAsJiJ1Yk1aZmMkWntVQV5AUVkpVFpBSG0uTHU5dDxGXXc8SEs0P1Y3YFk0JXkrdyhhXSlVPmNESEheUSkqfSUmMnBye0xEJn43Yz83R2dkVHtSUFArNy5SYWdbd0tNd1Zi'@;
put 'RX5iU0BsYE9XbVd8ODJTaWZYQnlOcDttc0J2aVA1cSwlXV5ONGF7T0M9WzpxNEA0bl43YGQ7YE8mZUtqfl09OHpva2NVcmpWdmdKdm1EY1s2W1ZGZCl4QktNQHwwSjJJTCFtTyhqdSs5V25tYERaOn0pV3xvSFhePng5ci9ITERLPX58S1I3V1olKGd9MXFgPX1AUj8wMW8xfTBHbiVlMCx2blFM'@;
put 'b3klKS4kYyJbY0l+QkRCNXg8IT0/aVFBbWFBPnNzcSkvQ0AqK1IwNl1WWy9RMkl4YS9ZaDBpXiRpZCM1Iz1SZll+O30mS1E0dE0vcUlIOHxTfF5mUlouNFdfKTl5YX5SZjNYZ2liYzZfMz95KjJTbTU9Pl0kZ0lmKltkZlljJTExSG4zdFdBSEJuLjxVUjEkczd4QUZRY1skQkNyZlklajsjS0hW'@;
put 'X2djLjYlRDh2fWd2LF9eaG9EKzMsbnQpWylzWXBtdFo+PUBiNHtiM3toWDkiMj4sTzhmdiJjTW9QLCMkcywkclVqVDB9MikkTkA+TEtPOFR9YUJpMHMybS5kezwpa1B0Oz5eeUo0NG9rdkhyN2RKUC9mYSpKeEhmUEgyfXEzdjFnOiYxNkgscipYT15QQmZQMW9WUnM1amx7ZjcoTU50NDVLVUQw'@;
put 'ZkE1X0JmfTdzM1Q5b25+Pm8vRXZ+QjBXYSFWMzR3TFpwOWNxXXBwKVM5Q1F3Pl05L1t6RCUxR1AzZXQ4JnxOdz9MTTVoNVFuZj15fnV7WUp0bFh+ZXZXeC5sOTZoLDk9JHN9Z2FtWHgueURRd1hzcHRobDZZem9oYGNOWTlXOis5dTouODBkdT4lKklJSWhqP2I8LyFobUw7UXJNMk55P3Q1KUJ7'@;
put 'JGQ5QlJ1VHFtLCxPbVluPzRxNUp7RCsiZE5tYTZwPDFzNXZWbzFIN1g/RElYfHUxUyZddFBNO3l1cUBuXjElWV1qNGN9N2klPmhfUVhhZU9TK1RWOWN9QGo3YyRfXk5UOzN9N0IxPmM1X2NQI141Mj5gWHNlXkl+I3VTZ2g/WEBUJG1fU1gjdmk4P2c+KCZBakBhST0oMGgwNzBrbiN4Q0Q0JVM/'@;
put 'eWxVQURpY1tDanYwQyVic2dWYDddeVBqW0h1YzQlNixfRnNfRkEhOHRoVTEoc2I6IVRSY0pUKDllKn5aZCw8V25wMDJCSSVjaDJiOV4zR18ra2NTX3xuVEkoR1M9Mz1AS2t2QHYqUk4kLFc3Q3ZMeFljJUt9bGBUbDNZZGchQ0tsaEJqTzBOaStjUVZ4OWZzTks8VTw7OjB0OWtmQlE9fmghM1g9'@;
put 'TX1+VzV+en1ecCYrQmBeanVVOGUpTzB2PyQuZz45VjYubVQkSG4qYFkmZDJXcm5uSy8uamkySjZaYC9FaWB7fXp3UDR+PS9PdFJeP2h+c3ZMc1NXT2V0cy5kaFNfKjxGMlMmUUJienQybUZmJWQ7SjM/elp6b0lzTVEqUF83V2A+InZ6WzVpRHx4OygsKF1wdVk/NDdLZ1EzNkQkJE9hK2FnPmZm'@;
put 'cDBCOi96K0wkfCglPTU3e1N9NWU9U15ObklLb2t3fUsrKWEwJnxbQzN6T3xvcE54Wmh5c3xFUXRHOXhBIkQiI3UkKixiMk00V1JkODkyWTpBTjZIPzBeYmhsbE5qazwxPzt8fCxUTk1gRHlwPz9zdzpbKyZTZnAjenZyQ3s3KV14SW86MXd3LDp7MmplO1QsPU5KfnJNflsxciVsQiFQSWpARz0+'@;
put 'dmBKfUJld0NePiE+UGg3NG12bzRQX2QvVkZ5InxfcW5lYCEiQ1tecU9hT3UiKVBwP2AxYzwvS1F5ZHdZSX49T0ZvKl5DfWc/O0pfb2xQdmVmMGspaCkzbXB5UV5dLEoqPDJwc2NtKkw4YXZsazR+elpwOD1sdEMvIUZMQixzVEFDRChxNGpIM3UmIl5qaFZRSypXOnM4RjorbD5naTB7eWopd2Vf'@;
put 'N3QjUXRVSG5lNzpGaio6ezsvNHZidnZyUkpWdUJBfmdVP0Yva3o8R293WUA+M3coZEhYPExhZjw6ZDIudz48JiM9Pykmd18od2FaOiQqNUwkZDlsVnUqWWJIUXBzOjIvcV1SQXpBQ2g2YCg1UlN7SU5ET1VBVVt5O2V7WjZNJlh1SDZOYHx9R3pJJGwzQjc+RSNQS0kzIzlzSSNIbW91N2JhcVZS'@;
put 'M0pYXUFHfEZ0KDE+VVJvQ0JZaXdCYnZjcSlOeHl3NX14bEp+U0UzWS8zOWtpcTB7bnpxP1ltfFNNaSpGPlpeZGIlTUdadC8kfnk4WHw/MldvV0F+L11DLCtUXyN8WUUuKF1ifSh3Z1RIWHF4MUJuQ05MYmxUcVZ5PFt8L3p7KEBgNkpUWTJUcC98cyRKRF5ba18xV24mbSFlQiRuOEgpajcodEYy'@;
put 'MG5XQzAkbWFuZilXWnw2LlFRWmpuVSM/O0grUUkhZTo4e3hrY1lRPVBZLkYmMGZXdnRIe25NNkgxJl46XT1WPnhXS1hvKyN8TXw7IXZmJlAyS0o8YTI9ViNabGl1XzovYSg0UHJ3XjosRz54OjdmSyZMZVEpL2Nfd0slY3hWemlQSkFjXVclJFlkPWVNekoxLmBnOFh6KjArUmciSDpmMzFnU3BQ'@;
put 'L3NXJiQwezVuaSEzX3N9S1g1WFBKNSQlclE5RCt3R0R3cnZYTGZoZTN6eTdlUlR+WCxXTzEzLGIhQm05bE5oKy4hMzovWjc+YGN+VFRDRHVgUGteXUxCQktOZmYjN0RKNGI5VW02PU5keFg4K2dERC9pUn43aD5+QGg7NSx2Qkc/XT85PTYpLngqb3FKbSI1PGRXUiI6fU1sYnpxaEU9anZsWFIv'@;
put 'SFZ0e0khUHYldWVRYiZga3FJNypqfldeJEBFImpAR2IjWGA5cWBfWWRuPjZmVEJ1JCpKanpqYF1nX1lvRT9pam4kYUFXJHkrTV4+WXdWc1R3IVd7VyEoWUM2TWIuWltzSnUwM0tLaS8xYmVFeEtaMmtXRlgmSTJMPVR1V24wdD1KV3NCLj5WMihkbTxgTl4/IypvL3FofC9bLCk4eHpye183aXh1'@;
put 'OUg/NFF2bC9hbHxKcVF+UzttJUV1SWxtQXYhZT1DNSF7WyhbdzBnPFVkMzB5ZzEjNVU4fD8mNCkkYUt0Py8/STgoJU5MJSJbZF52UlhAcSFUMGphdVAmVkVTOns0d2MvcSl0d0R0QGNpOWQwTG47dT1JWnY+TWZMZkVedVVvejtfOWZLdWAoZlYiR3tkamZ2dEBgMTlRXWhoYXkseFI8PG5AJXtg'@;
put 'L1lIPGw9WCpzOj9ReVh4QTZNaWxsKjRUblhYNEg7R0Q9SzRSMXAqXnRNOT46KTk2OipXeU5IQHZYOHF5dG8wI1BTS0E8cmUib3NVXjZETj5KZFlvUXJIUSNKN2xEaCg2b1JNW2YvfCo0LDFCaWxFLzlGZENEeE9bQTEsTlhKdjZSLncqI3VgdCZKJmBCfUouempDSzA8Zn01TV5wZS87TmNUUWFK'@;
put 'SENtPDVGMnRyKn1gUCxpOUAzJndxWlRJUGl7MGg9Xywhblh5cjFhM31gc0N2Nzc9XjEoY30pLF4jNG5EVmxSTDUrLyMzajYxYk88JWNJdypgMEhPNy5xdDxXOUNiNnMoWDpgfmx7S3xufSkrYXx8eSgqTjZsRVdTSENbWDQ4O3VOWUpne1BbND55SDIjY2MrekM8aGUwb0VMW1JfW0J2KHZ+JE5A'@;
put 'Y0R3QChBST9GVG9jMyQyQ0RBYjExUjAxbU5DNVdGYCJTZHVnciE3LnY9Wk5MXk1BdEwzPUB+RTpVfl47TDx4dk9UaFFSUWF7PjxYeFlgQTMwanVZQjtiZ0E4RVZhIVZWQ3pUaXZCX1F8Ymo5WX1xTTI6eyJwOz5ATDBIQ0Y8anBjeypON2JSSE5oTHdRSGxLLlF2Y10iZltpS15fbUZ2ayhYSzBl'@;
put 'NiVuNTR9azZKRDYuIlpUdTtJRX5kODQyaXpAMCh4V0lQUlBfc2R8dXQ7bVZIMT0sWVhGbGghWllkNUtVeyFaTWZ2eDNkZ0RgbTQpan1PM2gzU0VtOH5oMz5FVkQ7JXldWHlXKVBve0NEMDckMXR4P3dTRipoMSVgWzFAOn1UdTB8TSNvXUpzQnxxZk9fK1MvYHtVTXcrKE1ia0tjdTI9I3NCSEMj'@;
put 'fSk1WklXJiJ3QGV7L0gkQjRhb1VAXzw7eiF5U3VlMFFaNyRkczcwOyxmTEJhQTZvSSk+WDp5Kz9UUjUsR08kP0pmTVVSdmhLUHU0eHUub3dVTzFCfF1fKGhgPzE5JDpDdUdPX2BDNUxBdVBBfmFhdVcxVWU8Iy9XPlU6VHxQP1I3SXxlX0Ypaz1ZIWtma3whMSpgPTJQQDxqK3pNNjxpM11aZWVd'@;
put 'JWliazFlRzhuOEBXfitMPVsuQV5BclRkQihiSEgxJFo1aE1HflRsTz16Y3VWWkFSX1A5LiYzOz4zfTgycXxRYWM7JWRkWk0qfVcmI2BbS2xlVSNGT081KjBGM3hKPHhiTjd3c3FxNHNNdi8oS0w0UnB3SVhwQ35xUytZb3g6OSkoQkxNXzt3aDpMejx5dmFAVCM4RSQ2en4qczduOn1JcVNCOXEy'@;
put 'fTJWW0ZkKTEoTmRYOCt3RlF6ZipWbmsvfXgjIn46ezBZYG5lZzhPTFNvPF5BOGlKNktNZWo2UyJ6KXhoW2dRIjc+IU5kaGhmSSIwKVJNW0B4SlgsKD46bTMvemZqdXxzPHpQZDhBfU1YOyV0X3E7LGhON2JyKzUoWVd8Qn1KbDQ9JGFZY3QlQ0JAaCV4VXM+ZExmP1Z4MEQ7N3lvWFRIZ29iWzE9'@;
put 'cTJbLGV7eVYxbFhDZSNgIjxJT1lxIXl6QndWQ2VJME00U2lCZl8+R3l8W2JCeltFaTpkfnN8TFFfLm9iOyNLO0cvbHpfZHh+ek1OPClwKDZ5KVptb15FPnU2WjtKaEE6OFZBdj9ecl1sajJlVGxfQlsoOEw1RX5ONEVaUHhJSy8lY29tdSg7Lnt8a0p6Z3dPLlNhTCRHTXV7WG9EKFtxalgsJjE9'@;
put 'PGJ2OzxyPUNablZrVit7YGNoTTJqQVNJK2dXTldHU1Z3N3N+LEl0WjAmS3lDfEhYRVExRUdHT2l8LyV9KmhkZDlXU0lfMy5COjFyXTBxSzZROiQ7ZkpvRiUhMmQ5REopPEVnNXs6OCN4YWo4PDI0cy58TSVyd2RbKGx1RXJ6W2xTRWllNHV+PXl8O3w0X1NNKV57c1AyP25rdD5+PihxKSxFey9q'@;
put 'N1J5d2lpT1ZpaG1bMDp5OUolPls6RV5GJFBjLF4kOGRyKm9RPExdZ2BWK085KF5pYEA6Ung3SyYsWTs+MFtHNHFRL15mOFZuI3xvUnxbMGhROTZVVH0oYHMwK29UPCJDfW95T3RDKjs2XUhHbCIrPyNpZShPWEFoK2BQR187PkJ2TSwmcytbNHlbLl5UJHVhTlt9IkErJFZwcUZiTyZrS0Z9K151'@;
put 'PT0oQUsoWihpaTBSY1RNSWV8RXNeUkA/NWE9RnR4KUx0fWNQVEo/KDN7Qnl3Ij5qcyQ4UGY+a0Vvb3ZLVnFpTGVPbiViImwmNFJpfH1bQ09+emNtemxyTklYVmVmImpYUChbKEwyWkZzbntoVVhDY3hNNHI9Qn0qW0UhKTRIfHZyMVU3TkFDQHo0XUR2Vz5gXk5FZkd1JEl1M1EuKiMsMCghdG1b'@;
put 'RyJ4V2dJLiRMT3NkKjQvJWpXX14/KiJhME0iNzojeENuYjR3OSFDSUFXN2hyX0IuQGlfWHlHWyU+PzI9eHBKZVIvQlhiRVRaLjk0X20ien1sUmY1Jls9XWVJbXFncS5geF9EQUtVN0xVVW9hJFcoRnc9PT9lQz5zQkhbWCt9fVsxaTlHOFZSdTg0SSQoQlUle1t9dTtIYC9ZTlFHVVRKOXp2VVRo'@;
put 'dExPaDYoP1dLb0RWVloyXTUuLjpLSD1kVVN+YzZoSThAPmBodG56PWRaN1dNV1krTGYjVFplL1NyaC5ybXBYbUB9JTdTQCp+TjxFPW9gPUpgOFNgU0YzUDhlMyF4aU5YK3Y9W0hkWzJbZz9yYEckSTlLd0NPUktbS0VeSHN5YlM+N3lpRkFAcmwyQ3lFa31XM0ZjKytwNyQoJSwoMWh7OUAjSkhP'@;
put 'cU10MUptM1FfVGAqOEwxKUFoZHVuWnYlc31lfX0leF4rPkdsLmhXMFNzUTxFTFclTnxsfTt4ZD9aSU81a002Vz0ybl9+c19ia1pTIWFdcGJiNjtuREF7KnY7REVQVEQkUEJ0fjdKN2hfMmZ1TnZLcS9mMFJBPU83PDJFWTo1eFdwTiJ+PHU+Zlp4eSZaNU9TQV02ejd+QipHWj1QPmg7dWo6PEol'@;
put 'eEZUdkUlZCJPLHJxU3F0eV1NdD9mU2piXU94ZjI8MWE0fCZDXkcqMzRaNVZqfTZiZ0hpd1ZUY0p4cyM9ZD06aG5hbnxsWisscipFSUFyPUpyPiUqcCgkOmheMGFDZmRyKzRGYShOQHBlJEovPSNyS0hjOVh2N1BLPT8vR0QrRFNLejhgK0pXZjVlKSJwZWIpLHplPXk+TDcqJklAdmxfT35UdWZN'@;
put 'b0pXeVBfLzpuaFlkbmshSEw7IyhtYXkpSHFYTDFwNSREVHQlSkpAS21WL1ZMK1ZfRkYmdnVUK1V+MEBjMXhWMEBlMD1oJnh0VSI8Jl1RPUtSMEpdUlBEPC9FRlB1ei9sJHE4U08zeTVjZX4pKl9LIlVhKUd8M1YpKGtSQmNjMWJkcmNKY0BxWFcyZ09+Vjlee31pSiNoYz0+SDwqbGU7ZzBjRndR'@;
put 'XnBnQ2orT246TEA9dj5bMWxiTH5ASzAoTW5ldlRMZiRfZUxOIWRaLDp3LEB9NHBtem1LQUNLSD9lbysybjM6ODA0fj9EWE4oMHAuQ2NAYH0pQEVKKHE3Jn5aQ1lQZ198XU86V0Z1S3YhVjlaeTZrakRyc0k3OCY2WTJCRCk0S3BjKEVmNTgxNU0+bXZDMnUhdExYX3JMdU1VX0xFbDYvYS5FQHBJ'@;
put 'JlhNZiRJPHooMSksNldLU0oqWHFTcGlZLzMweSQpZmZENzFKZ0V6UypgV2Z6TTRTNzdjLHZRe3JhSz9CUEpgQDUoZ1UpSUhCQD4oNT89TXFNVUBkcixKfD9QUGZONDZDXW9jRCIse2hJfj1gPzhBMkpiMypDWU1ucEB9SiZVcTc+PnRNRH4pSHZaYzcqJVRyMl0ucFc6YGJYPF5KVjBEfUVQRGAs'@;
put 'YDE2ZHBDYyomeVc8Q2VKeURLOD0lKU5NIXNPLE4+Kk1QZTJiMiYyc3FJZHZ0OVRCIjpfU0decDM6flomOkVycWtgPGpfWkp8Nm5TUCwoRUlxZ2VKRCNoNyZORHl+dklqa3BSbEtCIykxVC9LeF10bixEOmt6W3dqaWsycjc1OT9kNGAzNV59aCJxPSl2V3x7cV9pKUlGM0MsbXlMKFJiO216V1Z2'@;
put 'LFBMLEt9d0xHJEciOnh9IngvL2VvaTMxPWElfkcsTSp6QyJYfDpIZzFeKyQvbllPaFdTOjh6L1dtRHFTQmAkUzQlMlBTZz1RQCl5PnMlWyp5OSZGbzldR28sRXxRemJPfjYiNjQiYnM9dDtBOVF9MFRLI2M1YkZTOGRdOl05NVlqVFs9bksvVilQZT9DUitPeGlTaUEkMkBZLzArSSRybiI7JkFM'@;
put 'R1JIemR4RzMwcHpLNXlaX052YVN+PDo6LF0pL3hPNEdFRmtOSktJKE41fGtYSURoZSZFPlNMR3g8NGBpREhoL292NU1LeUV2KDg2ME45aSFCIj5PLmcuZzwmaF1iRFVraEUsJkFsIUBFdzhYe2ZwZiUsWWdGfGoyPF9FLy9nLlFsLFB0KnVHdltfXjlMZixkZCRyNypUeENSZD9GcT57XiptdmtY'@;
put 'UEBraCYrMjBhMC9DXjVtQTBEXiZUMl4xUCw0Qi5+RzJ9ezY5OX5JUW5fUzw9eHohSjJBPDkxK3pwN3dKK2VHN0RZMH5FUzJgMzgkX2l6Q015Ljc3eCpGTmhMfHNgOExTODUuYU8/LzVkYj8rKz0rdTBbYlkvQjZRfGFGNms3L3NfTVBCXz1Nfilxb1tGIUl0I0svdVd0e14jUS59e0Z2Wit0Vm1k'@;
put 'OnE0LmslYUwuRTBTczg3R0BVK3VySyhZTGF9dGA9QyopNmhyRjs3Okc4W2RJNiRxN2N1aU0mb1I6eG5TY3wvayx0O2ZzSVUsTlhtTnY+OVAwZyJQNilMQklqJHN0dUQlTGI+VThfKnhXdVh3SnYjJUp7YSg/dT51IUw2ISpQdEMwZDxuVHgqVkN8Y0Mre2E9T0BdTjw2XixERUFdIks4MixTXUw6'@;
put 'UGozX0FPVXdDa0YvZkAmXkZMVDAjJDFmXlc9Q3xVW3Rpc3AuRl1UKGI2a2AsRCJeZG9FamUyWzh+eHRmfjlxJWckOG85ZFQ7Jn1NPD5XJlola1gvRXlERUBBa3pscFY/VCwzKkYsMmZuWz4kY0oiWHlARDJkKiJmZ1NMUmxqKk5eJGc7Xzw3YDlXK1g2c0J6IWY9LCF8QDdNbVtpJSlWPDBQPVIk'@;
put 'WVQhJTlWWz5ESWpUQ3dDKEcsOGptU3RLP3NgKXozcGglRDZrdkxVUXx9UGRANXZNOHR6QlZyMCxeYStGd0ghcSkkXXFCeTZqZE9ha3J9ZWZsPFFnOihVK0VILj10WHZ5b19faX5BRmZEL19QQzpfPF9nZXM8Z15MSUArPF1CVlZNfHx9PjVZRjVCfW9sdH44cVNWSmY9WjMxfFpKbEdpPGliSkgp'@;
put 'fXE4fXJaaU4wJHN4WVN1UVcyMGdVNjBSejs5VSR5fUIvJmh3MTUpN2dCY3BDZiI8VilsU31uTzU6WC9YfipBblYoUioiKFd4I28mKlNJKGZJPUM+aU5Bck9QK00kJiM2ImV9N3NZRCtrXSJke2p2eTtDfns9Ym5dTWBsZW5iLywufW1WRFV1Xk5pezB2QC9NaHtvfnZGaUtlRFJifCJYKzpJOHI9'@;
put 'eHcsI0pNfXk1TmlsTXYkVkx2QGl6PjUqLD1SRFc7O3RMMnA9WEZEJSNIfiFdRlVXYzJJPHgxPGJlbmBoPSV8YUczUkZCLkBxbGxVVC93dmB5dXY0diEzR3JvK3dMTyNXJnVvS1tDdG4+NyN3THxeO2UkUnV7YV9lKEZOcWF7bC8+SGBEaE59RHxIKDdiP0x9YSU8end4TENpK3BYJlRAL3N8O10y'@;
put 'TjZDeFR8OnY4KUdDXkdaJWlPcllBTC80NlhodC4vU1Ewd1U6VSlZM3Q+eF51MSh9e3EvW0ImP0R9QnptU1FreT4/aUFVentuR18uU1JgdjNncFB5KztdU1lxUDhSeDU5XjAiVmdMdTs0d3dRRGMjemtyUD9WOChgNmBPUFIpRXJySyM3fTl4ZFR3MjR2fEBNZCxPWi5VXzdeRz1AY1hOakdzeHM4'@;
put 'OW1SQlM3N0Q0O2Aqd3RaK1cvPUteMF5ieU8sZX1nKGBYWTxgWi44JVY5TH1fPloqSXFseV92L2lQXUNNYjM8RSZyLGMsKiQ6M3liajFuTnowdnJnUGFBUUBBbWlGczVZQjJhYkthZ2pjcXwrczJnM25LOnJtLjVQOTs3e2kxM2ZXcyUvSS9oTGhQKSYpNEN2OUslKHsmTE5fZFo2fT42YTlBQWVv'@;
put 'Myw5TFdbdi97cHBRM2x9OktnQEtTOVpQYHshRTx5KmJsU15sb3ZFRU17dXMmPjpzL3h2K1kobFpyMHZUTXRyW1Y2ISg8ZDRla0hbQzJ7cC44RzslMVhOaGFCcCNHRmhBYFQmZlhWVjokSiJzflkkTWRHUWFRYWYocmssSTtpZixDaF4sbzFGRWY1eGR3NC8oemhnUFpoXW5WNjhtLzhzdzVDXURT'@;
put 'QFRkSFRKO2NBW1smKE4vPkx1OVlpQSJMYnU3PVljbWZDcHR1JXguUSh4az1HU1lYTWRBMl5ALlZpREs/Q3UkWikrZE88SjRVTStYbmIiUz9ZOCpoUXVJM2ZbTFI3aW0wQyxra054ekdrRnIuMiN9aFU0R1lIISVSRHxWIXVYbn1lSE9vSzZwcGxRfihkRFQ3MXlGPCNhQEd2L1BvMiIzRUcjMT5e'@;
put 'PiMsZ29uI2IpRShTOFo0Mz1HKXhFUmIiPkYwPDhgYF09Mj4zaig6bTFgfm5RaW44UnI8SzMhfjhbP3c0WFMxdS99V3Y5UW5deXpLdCxHRzZRTE8pb0dLWTRpZTRuSXddMD1OT3NIUEg3UmxoaHNERXovR1tDJGosIn0iTmMlWUJld15jdl8rS2klUXxANmVBRk91RipBRCE+KG1QQ19CXn0yKzh5'@;
put 'KF9pQl43KzkrJkUoekZSTjs5OG9BYWpJLzBpZlQjIWNwVWFsSm4jNCxkazM2OiR5RWx2KlgkdD9tYmRQdV59eClNbntyeUhRP0BGOHhLYV13SWddNDlHPFBzaFd2dUwyWzo+fEkoUF1NRl00I2luW19MRW1MR2t8Z3c4YFJCUVJefDt4SjIreV0xbFJOXXFWM2xGfCZaQjUhOWxnMSxOJntNLFEy'@;
put 'QSw3YG9qWG1CWUheNl4hS2FheTxjNGJtJWJpbDQ+d2Y0blE4ckEiUlRkODg6THU7LDtGVih2PUhgT05IdTkjRz5fSjJBfEdsPkF+T25LUm8iPCQwd3w4VU0oKV85fGsqeFRFRWI+Lj5kdzYxZ3RwSDFIfDpsb2c+b1U6bkxLdlc1X1Mwa0Ngc2pCdDRofHg2b0w+bC5UM1ReIS9MQV1zbyFHUW02'@;
put 'WjN3OkgjO2AqP0lRO0RYUmFoMiRRY0YsUj0kQzl1IXsvXWUlJV05aSozTyVvUk1DTChaWkZGQUAwfWR9clBremNjWW9qXlhNLyNTdDYvNS9ueVhRNDlAd2dCcWZPP2I1TX4rPF5DOF1GXUdBcUF+NSRSMDMmZzdRW0BdfHZVVT52MUV9LHliP0BRTXh7JXdkUmBpSS4heFJGL2E7MjdPdmFZa055'@;
put 'Z3MlU2BLbWsjYWA0d1s6UiJ3KGZ2NTs4Ti9mTDQ0dHZtenteKEhPVGdoSCFlLDN5QVNKMF53Y2NjZiElZnwsZGd8Yy4kcDVqLjFpOWR4bTl0JkJxQmZNIUMuQm5YT0NSUyg5ZEh6RW00MmskIXMiTWwxbzpMM2Vqa0FOYSRvQ1VEVDs/SDozTkhteDkrW2ZmRHReUnVCIU87UTpXbVZzNjRRUnE7'@;
put 'XmU2XTVsXnpMbytzZHl0NGl7U00vUCtfSW9AVlgxNF9eJDF7LzFMS11hd3ZNKUM/SF09MlMoflpPQlpsQEQ3OWRuUH4qaVkqdk0iUmd1XVt8THRHXWUwZVt1YE04MjFoaU1jYTFrMDZYaGhNNH5xbXdQSCEkOHIwUHkiNFJZZVdZZSZ7MnlsIjEpPWBiYl1ObSpOZ0BASSpeW1hOPV5hV11HJEhU'@;
put 'Z05CY2Y+UVZNRFB5Z2Ywakw7O0kqNCo2KFFtV0JRNnVJUUpMOmFmeEFfamJBIUNYYFo8VXpKaHNONCI/bHtIPTB1Tzx4Rnw9eGJ2PGx2fkE8Vl9XTHVvaDord1JeKjFSWm1zUmwvdkd2WWxKe2FwdE5paWxVKVRKYlVBK0NAclA8JkFgc3lHT2omLyNpTUJ+L3RNT0BPd3BaOSQ+eD0iVU1ecWx8'@;
put 'VFhMT3FMOWx0OSYsQ2xSPUxBRDlGdyJ8OG05fDxvSUNvbDlSVHMuNH4sSFNyQUBXb0tpIy99Nmp0a0ZydWd9MHZYNTxpaHF6dSFybGRkQXs5QUAzeiJlUSg7OnBjUXdZTTs+ZTs6SVNSUCsvZXsra2o7cXtsa28sZ1lgW1Ehc0pkV2t3NXRvN3o8USEpIm8jME4wVVYyVTpWXXZVcU1pQWVfS3gk'@;
put 'V1ZAeFErVSxeR1ZQe15QMSV3SVYhSlduMnh6OkFBQEt7K0J1VCZXOlkydEB+YzJNeH04Vz9wfVArcDBCVFR8TSw0Yksoe0lhQzgsSmFoWEkoN3lKdEJ+P0pTOnohS0t+dEd3WCF0TXdHV012Z3FeI11XYFR5P3UhYix9SzN6ZVV3M3Yxa3dPeUJ9NGoxd2w7RUN4LzJaOFhNcVU2N3NkbCE2KHkk'@;
put 'W0w2Xng7NHd0KTVUQmd2d2tKa18+eyFgZGQ/elZMTXAvbS9nJDE7JnZwYjo1NDB2KV5XfFRfV0pZWDhraDthSzthVFVyLz5hei5acSs9TDRaYSglK251bkcvX0ZaVD1vRjRfc3J8V3ErWm97UW13P3teUTAzU1EpS0FvYURpSCssW3hMS1RwKlZPPm9QU3UiU0QmSVQ2Tl9LJktpO0c3W18sRmlC'@;
put 'd21kJTRDSFg5UkQ+YmplczkhdDlZTHFJTShwTF5SY1ZbIWspfDFEQmtCamQ0bGBpLjpZbnRwajJrP1NdOGheU0gzfS4icEx7eGZNPntddDpDOl1GcVJmXSomXiVTN0FlPDp+OzxrITU7fEg+PHE5aU0lOG0lYTxGcXd0SGg1dDRjUixba3g5NHRJRFZ4MzZkLHREeD1UdiY+JCJVfHlaOTx4KUJ+'@;
put 'aypBNStzL25QWFVYWnAjQ2NqPmgkQURFQzd0PVV5NVQsODNbVjRlPm15bUJ2JEZpU2ZQdnMlOjYmcHojeUVuRDVpPz01NnptbGNRbFt1UTl0alpUO217JT9xOWlDfmV1MjZlJSEhTC5ecF1qIWFXMDI5X1MjZ187L0VvI2Z3d3B4YzBaaT9vfVNNRjd7cHFGdz5xZS9xRipGUl59UVNxfW19WEJD'@;
put 'MWQ2QnVkPkNzQmNdZlohNEdqTzQ2LGwvR3VJOiNneDRHOTdIbmJpP0plZGRmQDw5a1pMbGczflFrckJCZXxdWkp7c2VSYVB1NzFiPEIzPncwUG4qYkIhUExMXjY6QSRVcTRhOVh2LGorSDozVE5IdlM1bndnQiVXQltHbkRIXjdUKFNgbTFdPzg6V1M8JGRQRkw5alZHUWcyUn5tO21fJjFNcEBD'@;
put 'TW50SlZfWG4kWUxXa1BSNXJoUCReVyVJTkZNMlZ6akxtWWFeYXB0dExPTV12OkR8RlBkLzFbZXZqYV9qX2VUXTJdYUs6NT00fXV1SmddOU98bzAuc045eHc+PjBPKUh8VDg8em9GWGBCL0NBKSJHOD5+QzVsMSthUi9CP1NHRlIpOjZjYUVgTT8qI29ERHdZaXhAT1FFTkM0cVA3bWxHcD9lW110'@;
put 'IzE+SkA9cT9fITIxME51Wn04VlI8PlA1UTlQNDlEfEdWaFlAUkZ4OChoby4mQylXc3A7SFd4QkNFSUxPT003KW9WcUIiYz0wLk8xfCI8RilBMz4jdF9PMXA/VWg2Lj07O2FNbUZiITMzXiNNRzJeYSx5cHlhcTE/UnJjfEVqSThYJndtVGByWnM4fmI+Iy8+JnlYMyZaUj9ya2oySS5FV0QubC9t'@;
put 'O2AzQm5kezNHMSxKQi94dWVKZ3V4KmVRInl6QDtvZEs6ZiVJelp1KntNd2tSbEU7UmFLW3VgWX0qL0pvck82QUYiQGQodnJGPXxqSj5oUmpkKlhXYjZAaFZxWHltKC58Ol5PSDdYc2VURz1ScjZ7S2NeK21FY2JZeT5vR0tkJVY7PEpreXovflheQCREUk5ydXA8aElsd2xpJS9NS3R1RUxueD1x'@;
put 'bGZhK0E9PCY0Kyt5W0NUKF5jNDpLc2I/a24xS15rcy4rVXY5Zm87fHc0JGdFa0NhVCh4ekVsIXYlR2U1Pyk6RUY6djRROzpmRGtrVX1vNlo9KFpCVld+Kj8oUGwxZCtEKDVLRHFKQ1p8ZHJ4JFI3WmxReyt1dU5rLGhMO1Z5OnA8QGBiRExFWHAoYTwoZFsiLjR6Ziw5XmZpOltic2M6SkxFWCxt'@;
put 'flt0Ul1MIVNscExpKEAsJT9zYGldekRuVzl5aytvTHNNLGxOS2tDNDt+fFRgeXklKG5xSyk2K0VIOTN4LEhoa188OyJeUyFNdHtScmdXTi5oVT89Knxqc0I1R1kkSlVOcVlSZS5dRDo9YTsrdEY4Zlc0OjxSL1EoSzJJX2tfWj1DdXZwYTRLZntlSEdRYFU+Tn4oNnFVPExsVmtBQys4TWxoTHJN'@;
put 'YWdWIlZFQmxtYW5ORWh9RyJxbE5ENmQ4UTZNTlo5cXNyTnNaVGBJdkZDTlYoYSg2IXwxNVt8JX5LZG0/clt8dng+XUMrTU5XSSwmVi8oPW5IK2FyZG1CXm09LiQ4P3ovQyNtRTVbRVhxeT5aSkUySTJ8TnomPXZMaVpePEJdZShuXjMqcEc6SCFuZXZgalh2Y0xwQ181U3hWcjlwVSslT1RpQmUw'@;
put 'M1NLdVtYJlprZ348djpYeDI1ciFkSlM/QDo5Sy98dmFbKy8jQ3A7dGJvMWB+aC5EInkzKUgoUlJYKWB5Nl1FXTwpT1RLIztoUERhRkF4Un5xa2JCKjw7UEomcnB6TDErQzwkTkBoLENqeDI1LF50Z0ZodjYrbX1RaWpjIih8aHZbWUZ4aFguT0tncTZEd31feyMiXSo8Y0Fxb31kdG1+ajVGb0xX'@;
put 'IyRHKG5vXmZvcGc2ZSE0KVI+VykkZiVuczZhMXFmRkhfWGQwTWZYM0RRNy8mM0UwTSYyaXlqPno0ODE3Zm4lI11YUGJmRDQrIjxncj1SWTRHVl5eYERbfSxtaVRrMFg9dXNEQHdAQXJwbl5SckxyVWN7NnpYW2hdIyR7T05tXStNN1l3UzM3fXd8XTNOSnlWdWdYXk50NjYkMmJKamxjUC48fl8i'@;
put 'JWJUKXRgfls3SW9RPUkmVG1abWpCbS41YDBCaUZfISVwRU4ldTJUTGVzTH19Skw/KXV3RUkhRUxKfmsvPHQ2c35yWz9zPncuXjRTWVFSU2o3ODIwJVhlPkpaITBHPWQ5VjAhZHA8UFluPyhjeEZ8KVosM1FoUGteLi47bkQpRVcpSFhteXpKLD55NzwmQFlTflNBLnEzNW1bIlJyWWxadD5+eyEp'@;
put 'M1A2SCVKbjwoMS8zSnJKfWNPN1Nmc09NW3NpNFBKfSVBcHkoSj9QJSZkd0pSMWlVIi98W1dRRGF3Pz9ecFdbOTM9ZG5QNk9WUHpAVltvMFZibS9PYmY+O3JsWDpTYjl8ZWkyKiJ9JF0jRW1WZjYsJDdnNS9+fCtEQHcqRSVCIVhHZDdEbD1iT0daenE0ZWlDeXZ5UGBWSkpVITFifk5tVlU+WG0/'@;
put 'UV02WUYwNU51c3dnenp8N3t9N2ErPUpLZTc1Lj48a1I8TkNLajxWNCJJVTN+cXBUNUA5bHxhWG12KTxxTXF1UF5TJUx1WUh4NGFTaitvb11lb2t1YFtjeT1bQFhaTWc0KTp7JHAqLGwrbX5kfi9WVzJhQCZmYDlPfi4kPj4uS1RiVzxWd093NGdSeCxSKipXWS9IRD5SZC8xbEUzK1ZCK205OFlp'@;
put 'MF1qTihiZmwzNEpgP3pzM2Z5bXFCJkI+YzxuR0g1NXt7KVJoP2N+I0ZsRElNUjh+OHVFLnNGX3s2dkJLK2FuMUZDR2dTKjhNenJ5KW9vSDQ5djw+W2JTU3NbImhhc0ZeSDBxJi5GOkR1SU5tP3J4Iz4rUVh4SWhzZSllYW1PWWpIaGQsak4laD9bPU85JDdQJXRJbDV4fV96alVhenJAeC9aK1ZK'@;
put 'aUxTRjZ7JipDQ0x+Ljh1YUpqNVk9RiFeZ2V7a3xBcjsrTER0bilLd0R8L3ZSU2Y3SG4vdTFPK21jPXQyUjJFP2taVWxsbWoyWmkjZ3t3aH03PCFOXjtnWiYzSyxHaERVeGVBRGUvYW4yKT8pSjczU0AxfStfcSRscnRvJiVuZitdZnAlUTsxbVE9Z1k7S1JKc3k7Y0ZPbCU6X2k4JHZJX153djg/'@;
put 'UDhGZSFDcXJwKVA+YD5WZTVZPyZfcEQxIWw/ZyRRUkRhbyRTcXJMOmBRPmYqXy92c2JYc1hgPiloL1lrWzk4RVRVLmZ9RmlCQ2pEKTJTLkx3cz0iTk1CSyRVcmN0bmlxOyhaVFRvdnt8JXNFSiw4YVNmJUxNWWU1UFAqTXZaMjczYjFMKUdKM2xOejddT0FzKWY5Xj9YbzdoYFUjTD1tYDYuYHx8'@;
put 'JXZ6UTpHNSR8fnw/WnUlJFtvOH1jUzFEa2x7MnVyUC55Uk5RM2lRMCQsKXhWRyk+SzxNNnR+KjM0MXRSKGApREYzdiZFQUBaaXN3WTt7eClDJEI4Q3ssO3swTVohbUU7blBlJnxpTDVJb0h8Y0p0LDUrI2U9N0lIdUxDcXpwdE0kfjVHdmcrR11gMUNPeVgsQkxsclZqYkNlcDFWSyoscnk3cl95'@;
put 'ZyZ7cSRHJHF7cDdhanpEPiQlSWM2JmooUWlKUmgmIUMjMjppU1EjdzolOjMwfC80eVpEMFBuZmVBcjlLX0BTcjE0cE5bWDBeNH4/QnwqR0V8eTZRJiw/d3lTKD9+dH4oS1Voc2Y9STVnKmI5XUAlM2crRjo0S1o3SmAoam0pKFp9T3ZUWjEwIyVaPnlAPl4+STVoZEgqUWNqbHRob2x0QjpGPTck'@;
put 'NUdrNFUhT3xDOTJBXXdoMVgoQkdSLDU9W0Qib29NWjF4dDRXYmExYGRAdTF3dnhfNVEuXzx8U0NrIzNzc0ZtZyt1ZmwyeSxhRjRCbWs7Z2tyei5mUj1PWlYqPUhqZ3EhT1pWfDp+N0pgVzZAK2B6XTByTm5rUEd9W155VSMqVnppP0ddM2Q8c0dQPHEkQXA2Ll5qKTd+O21Wei4+YytGKzI8MGRI'@;
put 'amJxbX59TzVgbyo1P0BHZU5wT0A4RGRGV3AqNU92e2QvMHxAciglTERXNCJpP2Q2fnZUe2M3fXVEbkBfSSExbiRXcSImTmNNYDJMNVFAWTdKTyJXcHReTGdqcTFEbm5SRDxRY1Q4XUF9N2tIKk1udWYjb1VEailiJVdtVnF0bWllW0ksQyF1IXZOb0d0N011RUosaEdxS0ssRWIzPU9aVlpqNyYo'@;
put 'P2IsKEI5U1ZIPllpKE9oP1ZjOzgrUlRRMHNTSCQ5JS9YT3p9cVJzKXxBfX5AKTxGbjdZYmVdU3smRnhqcE1lOjk/RzI8aXkpcHhrVWc4NWlOekUjLzJ+a0xIVCs4Xzxgb0UufTdpfDpzQUF0UUNVcCEjKnQ4KWFGLjZhMEwqZjBDaTVGNih3MFdgMkFMS1NMU0c7IT95WDxvXXVwb2VLcHghd1dk'@;
put 'Q0x5O3spNTU+Yy4yVEp1TzgxRGc1PGBUVW16ZkIvQXJuTXVofiFlSnsvIy90MWExI3RDYDlQNT81R0osLiQ6R2NlNz1ZRW8vcTI2PkgiSFJzYU4/RDY3UDs5QGRRMF9oanhaRVo8JjklRUZ9QEB0W1JLSkJwbyxjI3pwUDNaUU8xSGZscU9QN0IuSFNyS197R0NjKkJjUENdQHRhPXJhIV15aiZ5'@;
put 'VURnYlBiPTJia2NMfi4kP2k0RWxILGZfW1NPT2JKSEJlfEBrZlgoOzQ4YzYrSHUsIStzWF5mcCUhY0E6O1ZnZTcwVUduITE9TlBIJnY9SUxeZGtVWmZ2ZWpJN1c+bUZYVmZvVXQ1WWM7cnQ2dz5tU1FOJkZbIzRPKG0/e3ZXUjZZN247MTJwWFJuMz1NK1ZSLnVpNFU2KC5PR1I2SXw1e1pOcEV9'@;
put 'QkRjUERpOTF6TVNjOWMsZ3ImN01ZeFB4JSQ0QX1KZk5kQ34rTCZrUHRIVy55U1lJblhXZGNZPSwrMiRtZnJme2szWTs2MyZXIk1PeGcrP2NJUHFCXSttN2VpdzFAYzZ1UWlJa2V7REtEWj15dm86YkZ5S0o8ZWZ5WCY4cWBoVVU8KUdHMDpGMEhSTnBzPEB6Zj9FYHNTKk5LVi8rJFc7V1NpdDRs'@;
put 'TG9MIShxRHxVcVorWkFdOFhxMGd3dmFHSX1HLGt5ZHlwOU5CUFdEMmRVcVd8UUhkREBFY2ckNHZoVmBQKT0xZHZILjMxVF11MmVpVUckZFgzWmssZH4wSyZfM1pCfDpOTkRuME1TUks/VWQlTkt1SFhKWDtbQTFQZ31LRCNUSnpaNmtBPGZzYzwxZGExZyFbYnAwVzgzNFBaIkBLLj5CcWhSTmd8'@;
put 'eCoucnlkL018UDk/WF11KkdnWnBXVT4sQTVKN2lhfWpeO0M6cm81aTkuWCNPImoyWkEvIyoqU1d2eDReXkk8JV1nJmJEOENrNyViIiNMVUkxZXB4LEM8eFIpR1hkWDd8NHdreGVwcDFScEp6ezEvdEtGLE5UZy8xP25pTG5XJTlieHRPcUczT1FYUTkoLHIofGhhaktgT1Y1fDZpT0cuaUpoRHdQ'@;
put 'NUh+b1doPmsyKztkXmYlczYuY316JiROZ21sbmcvIUtpSmYmV2Y+S3UkPGtiJXJ1dnB5b0w+Smx7K0kmRj0pa1ptU3p8Izlqb0wsJnEzLzlrZDV1cnBNViUhRkklWjhXMnl5Z21sMFc4eEBpOmJUNGxbYGs/bD9DOz9RKE5YPWdzRERGRFBaWEtWO31vMm1jPEZ+XU9qQFJsInNyaH12Pi5QV35B'@;
put 'KmNHZCkjbWMkMyVtM1U0JW1jVjc4N100V3chVVMyd35Mcm8ySD5TNklPeHNPYnpHUTFtM2B0VERER3p3PUUwaC9id3cjTHNJPSwyMUAzW1RaZ0o3U15oVUokNFttZW5VPVF+amJaNFg2N0FkYDdnZEB1VWN6YzBjUTdLYTQqbHRGYE5wTDFKYHJIYU5GOm5ZZ0d5fXdKTHpqa2FnVmJJZ1FtQilw'@;
put 'dlR5KmNCfS9Aa1subj5bc2o4K0p6UXE8R1hOeUQ7Oyk9W0p6VGl5fCNxdW1SZmxHV25VPnRpPzQ0UTVCKU1GZmduWDU9Qy9+VjlSJE85LGIzYWs8eDM9ZTw/Rn17e0NacUNecF5HPiolRVNILmhyfTIsSEQ8KHdPYGBmckc7XmUwcHR9T2xYNVsxZCZ1dmIlQmVrVGNOcE9NTkhEXUpxXU9lXSpt'@;
put 'aTRXb3lxI0Q4LjZlejpodyxNcU9QcU1HOC4zMTdXIjVJMCxuRCMwZGZaQ35WN1Fjbz0kVyNke04jYGgpO046dn0rQW9ZKDxVWFJFNlVhQHF3fHtHS2RbLkZ7fmhNSG1aZ3poJE1FVnpMSy5QQ25uNW9IP2o7eiEvWEttP25hQTJiaEZQWGNXaCN5PTA8bE45bE83RmcxVFdoYGt5MC43fnlCRkt1'@;
put 'VkhjcGZgcFF6flI/NVtjTjBxaH1tays2T0Iodj1CKi8zNWE6NVdWI1lWTC9LalNRQHpNPk0qTVlEQXIzc0w7KSFeemIjVz1IKllhS0BfR0Q7YE1ye311L1V+K0g1VClncy9SX0hjbHRrYV8qRFc2dSRSSlFNeTRRe24sVTZCYGg3ITFQeWE4SCk4OmFtPk0/TSZhbXlKTUI8WmdnOXNdO2F7Jllf'@;
put 'PU59NUo1UXZtbzNnSEsqSitvPVBZSS86NUVJR1pjLCFVYktTWHVpP2JxVGclOXx4PiFtWjx4SFtFcEozdCk3YF9WcnM3cEpkWU5QJXpGVWkiTjNdTzcidXM3Jl1jKXRTdVFuWDssdVhxQjRnTUNneTthYiZtJE0pK0k+KTw8W3h7YGxTJEpCc3FCLk19dC90WD9Lby8kSj1WJSJfbEwmIXomSFJ8'@;
put 'dF02TWllIl8uOk0iTjljZyVTKV5xVFVhbzRbXnk8KVJ3ImA6UXhzRERLOFcrfEVlcG1XYyFBeFcqJn1CVi5Mezh0WygqZjkhZjAzdURLIzlKUDxNVG9Fe1kuNVgpaHxmLlZ8TzVEaV1yQCE7O1BnQnYpL29tNT1qNUl4SXg+cC5JZzcxSk18LzsuXixVajk+SHxlbTA0LC87P2t+SmZDPnA9PW88'@;
put 'WHFrc0JQU2hMZko/a0wvVX1bUFdKR088cj4qXnNrPyFEJXtdTnxGWSJYW1goZ3J3OWt0ZXBAIyFke3hXZjdmTkIuUnwwbUkpRlYldjpSQEVnTWZqNVFpeUZZeih8TF1wXVBle1tuNCheVG0jfkYqN25Ea1EhdndXd0tlSWxEWF9pRHJgXmUqJm1obkM7WGhDSWUhdSxBIXJMeU5sME0+Uzc/Tkxk'@;
put 'KENEfns/e31wRkBmJGFSZHt6eDRxbTJsKzJHcCFjaElJTGQsZkwpfHF0QzMrJlNsVCw7IWJAYzV8e2hWYHJFYEBEW15SSiE5az5ZYnNuRX1Lc1ksLCVzeH1MSi5mdUdYNWIzYkcodjlSbG9aQ3AqPEhrZ283eVNdQFpXY2kkMk1KYkhGRntSKHBJSj5kTCUpQ1AxR2hRInZ5YC5GTGVPXy5fKWZA'@;
put 'M1lOPTY5ZWtjZTImKWF0JHVRN0VLNSg5TGFqRyowQFomYkc4dk5dN0BdLEt8Mmk9IkdYMjI1W0AkOndVSFpRaXJKQzt2ZkwuQmN1MWZ3dXNgJSxDSHhVcnZ2c3xWNElSO2tMViEjSToiaTgpRT0zNVc1dGVzPFNaZ34rQnxXX1YvcklAUWo4R1BIWGcid1F7UyhpZk83ZzFYNThFKFNIWGlifldC'@;
put 'cn5HYyFUVmQ8enFlMjReUUhedCo7PTRSNE5rImxva3sibGxGWyFeNDhuTEh8VUZXayFSNl5FWXFobi5WaTZbej5pPDd1JjQpdl0heGBCb2JIcHNhVzVUMDVrU1pTa1JgSmFnXjA4KF5xKk9sbCkpNHMhU0U2MjdIT1g5aXF8Y1d1KzQoVVBPVnhkMz1LIXg5Iyh6MXhWJUVMY1cuTE5gYEBZT34h'@;
put 'L2FVR2JaPXtgQF8hMzMwVWUpTDdVTlY3X056Zk1mKVpLLjU9TC4/MVR3Wm9eaUtuWlJHXj0uclIveXkxMGhxby8xOGM4eTNRLlhBb3wkVXdRP21VfVJjSWwvQChSUmdQVkQ0OmZ5bDBrRU0/az1hbXZnI3d3WEJAN1tZRW5oQHU7YCs5QjcsLCVAbGlweHkrZ2FCe1JEZWM2dnhZLDF4fC44T14p'@;
put 'Nl5vKE5mOlEjK113N0d3UE9mNysjX3BlX0hSVkRzamVYb042SyQpN3J7QCNOZEZeLEpLcE4qcl5OcTY5S3RgWXFQajpAMVIiPztCQHJmdTM/YHhdNEJXaShhRHZ8WCZBOGA3Ty5Ja1siUntnXU8mdXAxKWFpTFJ2LEIlYl4+aVdvY11kQnE5KUVmdDxINHc2Qlp1dlJQSzdqYT1vJGpdZG0jUVF0'@;
put 'KEdfezNRYXcrW11WVzNdQitENWl6STRPdSt8NlVIYlE2Nz8mcj5fPGZKd3hYdT5xIz41d01IMC4vck9UenFDdSwsUXJjSSQxMHMlQFVIPCFsW2d6T1l7YDFUfE5iTzE5SSpyVCNZanM3KmI7MEMmcWEhRVh+PiFbTmc7RV9kQDE5YmohVTIyXiJZIncmLyRqUmhFTXMhd1s9NEh6aVAlRS92KH5M'@;
put 'Q25FUiFaLGkmRDdGeTxrS0tWIX5PbGBwQn5pfk1bO3hpPkJgV1c9W0lYeH17Mjo5ZD1lU0pmTntRKzRwNTMmYiRSJExqcn5NcV4uVkYkWHFyPl4haUw8P2hbaUosUm4/PkdSX1piSCZJK3csLHgucmt0UEUhZiUsLDttUy4oZkFKNVloT3csOUpIfH4uUy9zJkQyaD43THtgV01dQGE8SlJQWTN0'@;
put 'S3c1YmpHKWpsNTs7aGY7JDFqQkI/PzsyOCFja2JsXzx7VlNSVEN0bUpQKlJERyZvaVFPZFhkdmAxUTBwWDo+XW97b1leMm9PZj8xd01EKFEsWTFhbi9idiZNRFpJeGVveCFuVXp2UyokSWFCMnZxej8qVS4vKWRpUCkyeTNDfFUrS2NhaGpLO3o/SypTMWp3emIhclJKfTBARUhtQDUvLHJ8OW1M'@;
put 'YG59Nlo1PWtSKTpWJXpiIXI2PU5eQCQqLDc9JX1rMFBnI31hfHFWcT9neyVkd1leQFhAeUY0ViNZe2A9V059bj4qWXZkR3xnd1VSIjtbTixEaGlqPXx2Jm5XWmdHS0x9dkFpemRKemg0PkEoKiwsKjJ7UWt5PURvW0pgUyJ6c3cqZyZEK0A8THFMSmlFR0AoemhLYn5ESm5WW14/XSxwWT97PT0j'@;
put 'JW07VUhLWSh8cHlxJXlzYCp5cU9ybyJgNGdYMzAkeFIjcTJpOUssKXxoWE4/KnROaCNsQzA6Xyh+W1dpdCR5dTRefF4mUTV7fCg3djZAX2Q+PlV8V0g1OUh9QGJ3VHM6TF5rUDRLM3ZmeHcxczlnYiNZfkRhWkhYaztKdjBfZl9BLk9xWCwmTGNFUl49czx8N1VGOy5ie3hsKHVvai9Ed0JbYF1+'@;
put 'MUAvaENzQzw/bkthYypBeDN2KX58dU9UUC8/Y14rTHNQTCVzOk0kKCJJaj1GbFgoM358LEc1Rjg3Nll6V112czoiOmtzJlUsVlhfdWA0WXRQWVZ3K1NFIztQc2BIXl1BUlQycSVbRCluKl8haU48NCV5UiFtZTxYOF4hOSswYHQ7Jk9qcHooT2lXXzEsZTAxaSwsNilRKSMsYi4lJTVMcHBpW2w8'@;
put 'dE5VRldsMXA+QXgzViJgUDZfLD05Zl40O2NDMmcqeWpBMTJOZjJMU10wI21oVV1ST0hiRmlnQD1TbUJmfCwmaDgyUHheJT9gQzJpeEFgdVU6Rzt0XmJnTGJjSl14YVREfEwhS3VVTzB2dVtOaFYqZCtjeihGXXF9ZTosZTdEYissL25lTUVwc24iMDJKKz9fKiREfWxyKmlGVCZQRFZFQChXbFUi'@;
put 'UU9fNXdLOXZSLCkxX3BCPFhLJiVKSl1VaDhjK3FZKF5xZTB1eCosW01QaUtLJDNKXl8jRkc5PENpcz52R3lqUi4kenFoTjNqWjRnankqLER7T0FsJiE1MmUvYXFRWyNeVjEuWSVITVF2JXo4WVY4WVUla0VlOzE0ZjU7KXZxb3g2SzJbNmJLaE4uZjFEMndSOmokVFJhRTQ1ZUcxRDdAQHJKXUtV'@;
put 'bGBKSFpHUzhvc3xTLnx5O2gyImp+ak4sRkZKMTs6MCw2eyxqZHIsam1BLGovbjRvXTE3S2RCYENaVlVVeitUUU1sKixVd2IuLnprcnhCNzolNnRyOzJLRFA8XyMjeiZueHFRXkcqeD5sVjVCVXNKRm1beihrQip3c2hbTGdVa25+dytLKU1GWjJCdzdnZnshcD5RW2QkM0JsSy48NE08SHhMUVk5'@;
put 'e1dpITU8L20uNjFvNWtJeGRkeiZBe0RpJDJwVFB6KmBQTE97NUR0ZFglRFpsR3RHJl5DbUYkM1drKHRgdnt2KV8wO1NEXnZzOlFjZ2dTJiQkaXFYN09ibjdddlBmQEMlX0Ila18+bklHaWJdL1BYTU1sRTt2ckFsWCNEUDI6Z2ZGcD9dNnNrKXBxLzlpKEdHbzlnYHt9NyhGQ0h5aF5DfShWIm1L'@;
put 'XlJVY1dSNX1ldVpOP000a1g3T2JPV0Y3RE5ITEBGd3cpTHJYYWUoX3M0KFtVdW5KVn10WkUqeio+ViFtQEZaVDZuL11uTFIxJGBpVCtzLHQmdDp3S3pndWgxcDp3Zi53JkwySzMzTDk3SFVNKHBMKV85V1dgSih9cGRyZV52e3YqMkpAO3VxJkdVO0pARnpTNV51cTpUYjk4T2loIVlyR15IaXRv'@;
put 'NXNme288fH1gWThZWCR4OHApeWIoOjhMWiwsJC9seXc8I2NgTHdYQzQvOWtfYC5oVDledD9sb2xiVWMmTENtfUNPbko9bj47SkN7ZHc5RU5mXnkxM2dTJFlzcD5PbXpNOWNSVi9WSmA5USsifD9dJkx1QUMmfXY6eWlnb0x7OCM3QipNYGo/ZyNMUUJ0cVcqTFQxPFg1RWd8aFlHJT5VLD4ob1Y9'@;
put 'U1giLHU/bjpRW19dRHQ7QkZBRCsjbkQ3d3dBblAxLF9TeUomWVhXI2cqfVBGfitAQzpVVXZ8JVtMS3Y9VGNRUl9KSUZvRywpNmBUM0ZGQFZVeTUxfmwqTDBPfFk+K2dYZ1pPfF1bc3hhLiQjTko+ZEtHSihvWFNhaGVlKy4vUVs/VyVwbVpIQGkqPih7eXxgUjUpayRUc0h9K1FrZm1rOSZsI1hC'@;
put 'clI1Iy85ZDYxSExjN24jQWs0Y3YkRS5tMHlOejZeMjZ4K3lUOD1GYHhdTjFFWSJCZjxNJUlMPnBkalhOREl8Tzk/P3d0bE0ybT4qLD49SFhfKzkoVSkjYmsjVWcwPTQoY2FLKl02ZTt8Y0xBay9qZWlsOS4lb20hc1I5IyJHdllvLyZgZz9VRVdNOCFsW28xV1J6WVlEdjBfdHEqUEEsVXl+RXYk'@;
put 'WiFYdXtvZyFkIXMlP29FUW1aWEowdU5eZDh6NVoybHcvLEwrTl4xOzMxdnh4a2p4X2I0JS4lemYla1hebGxQOXJVNDs/ejx7SkokdTgoOSM2aHY/VGFTciVyYiJETVByU1NrdzxbIz9aJmNrbSlhczMkOzEve1VjMEErcDxwJXlwKzpMeXk5VGtpPERAWnJabUl8eV1lSShRdj5nLzdkRiVlfG1R'@;
put 'RC5Wc1ZoTnhSJUxBNS9PZ1g6OFtYeGJlbnpxbld4bChhQ0xnbiFdO2RJfmswdSwmOF9gO0xBfjpZY0o9UDdZNWllTSk7a0RtL3w6NVVUXnpTdEg2VSFdemcxOWBLP3ZzSUAvPGN+anZ4byFkbFJacVhfb0R7IWVTYWwvKGdTTnJtcFoqLFZJJVtpOWswXU1faXwoRlY+djhhR054IzAhWGZEU3hR'@;
put 'fCpLYGdNZjNFeDMoRzhWcUJHVHttP2hHM3x+KFZWZVBDW0JHck04KSVidyZfVHAhP2FkZnVYJCVkN1VLWHw5ejVCcnM2PEluZyN+UkEjZSw9P2l5dTUxcVlQbX18e3AsdTZ8Ul84KjdwYGVOdiUzRTxsNDdkU2VrRlI6MiRJfSMpYVM1P3lLUy9KWko2PXxGSG1BU1Z3bU41aTY1M3VYKn1HXWI5'@;
put 'fmVTXmQiWmU2X2p5RzV8az9uZDYuVmEmeUphPHF+Y0piZWx+YVZ3c2NWWEVhcUk3dW1+VHQ8cSh0T2M+YmdMX2g8cW5Ha3psWipaRG5OfmR3bU4oZzdaRTZfaV9vITFjQDFkI3x4RypKSlo3KjtaWzwhJG9fQzwoK3hFelk4fjVCZWtkSGdzfVduJjlrc29ATXdDJH5vX0BbTSpIWVkqPSx5cSJN'@;
put 'QixXVUZpfHRMP1VjYSEjezlLbFFXSjFEckwjLD9uZks1K2JOQENRcyQmK1ErUUMhRmVKVklCQFdOQyVSeUhBTEVdUVJ+RlVnTGRHQj8xQmN6OXA3RixiJmt7WCFsYHM/UU1GXlFSTXkiZU1NZGFTanc2QV9ocUJxfEs8SHFPRSIofis2XXBAQm1BVEgrKCNQOlZhKEJYaVNuZlQ2TmhKaXN1fi5j'@;
put 'NkN4cVVRMmZHdilIanA2KnFhZWZ9WCVoa09EVDdYaC40QSFoN2crOng6fTEqI0d0eFNIK3poNiYrSU5yWEFybD5OX3lSMj11RklpOCs0IT9eQEsjVX5CQGI3JVF9KEhQSCZLdExzZkZmP301NEZJJT15emZObU5vYHA7KEF1ciQhVCRAfSwwUlZdSy47a1UyaDlpb156MSQufCs2ZCE8S1JvM0Yw'@;
put 'NEdaVmAzPntiTCxZWiZgZHdsXlRAQD5sOUczUj9nO2cudk4qZ09Ebno5aTlbWEV5XTJrWF98M0IjTl9lQVJCZ3BObVJOWVRjKSlYeCpIZDkzOHxvTX56KnNDJFsqcmVAYnx5UCglKD9+Ql9fTk45ZH42SFpuJm5RRVd2OWROL0l4aT02cUAkdnRvNzR5ZCRPNDYxSFB2SiU8Yz8sbig7SDUhWChX'@;
put 'TSpleyFGTSpHbTZKUnBvUE0wfVpKL2NUMHhQXTA4SFtuXXN4QUJIIXV5WGpQfkBKK3IifTFlRSxNfXE+VGBzIkE3W0wyVXhtczgyQEJFXXJXVX4idWYvIlQrYnFTQ2FSNnhafklQSHZTUzE1dGIvJmJWVSM0KE5lNTZkfVg/Pz91PmAqN3MyOXQ1WTlZeS8xM2JWKTRgdz8hYDFZdD1gI05NX0pz'@;
put 'bSpmcHxdRV4zO1tjZ099UnY8Y352altaMXtsRz5bfDxNaVlBLF5BR15xVDRjY15ILjJYeGNhVSNUSHl9IyslakMxeTZiOihCdVp2T2EqdithVzUmK1Y9TSlXMk5FRGd8PU9NQ2Z2ZDVmM29rPyErU1VWKX1GRiJbQjAydSpjX3FtTGY3dCVGSzxPMDI0WmYlclBIfDFqPyFCUjBTLzxsNS9ZQn53'@;
put 'LzREKFMuZj9UNHgxZTdfbmlFXSVFUCxDSzxESXJHTlsmMyQqQ30xOiooNTtzMmhANFgyaDZgU0xES1ROeGxecWkjVVQ3Vz4pTDdbNiw+aE9RPkpEbk59PHc5ZEt8QVdsS0RgTEV5QiF7L0ZaOnJkQz4iSix0Mn1JUmpBVT1WSnpEUzUqdVdDMnlNaWpXWn1NKy9Gdl5ucnt0PFhPJmtLekRvQXQu'@;
put 'e0dzWDE+KSxuIjR0bTVffih6M2VNX00qUXhjXT45QWltfT18Mj8zV1hPNy9eTWNRW2ZwNVdkIlNbTDFKPz9nSlh2cThsaTxdX34wYylJOnJ0Xm17cFd1diYvQk9DTjdCfnlfYFNIQShlaXkwQUcyKGl7bE9sSExsOlJNLF5DbE1vT1khQj5eTWNRO0JxNVdkUFRebFIrJHRpey9FYHopPERiSC5S'@;
put 'eXd8VGVhRDk8d0JLVVVxbyVGYik8JnFGb0VuKE5beE5WUWwzcGIzN3szXihvRGBHOVZmLCxPZ3FVQ2dUaSZNeWdJcFl6JVJiREN4VENANHFSI0czUmgvcFd9K1k8NnlRaSV5Xl1RaS95Xl0/IWwraXs2cC8xRVdoKXQlTXNwJSk3P0xdbl4uZmpJTCwhY31pU30hW0h9bTUsXWdeO3s6dzZVZUpz'@;
put 'VEl8Kmh6PiwkdCVwLCxOQVRMS3pGPkRpV1VyZFskaUk8Lip+VnBZSDdGY0pePXU5N35NRz8reHpCdi8wKGo0WlBDXWxfOVdWRGZEU1h9IzVhJiZCdUJ3SFo1XmtwaEFTIkk+TVRRQmJxKnNTYyZfa1hQKXlXXz4sMTdVV0ZYOTpjejRMQTJnZHQ7YnQ0ZTdQQG53USl6NlAxLz9KaDF7VXc5VG4s'@;
put 'IUN3RyVsb0hTYjRgOHh2QklCLjcsZylfQyFdOzNQOkw3VjpYM2xSOWMldGl4Wn1oVTNPVTFJW2FLVXRAdz1KZWxWKTVCZnA+SH1xL0VTcjxpWXlqKEt2Vjt2bjJUOiNAWzZ2bkt7SiUmM3tAfSJgay9Tbk9zclk+QkFtPU5fYUA/NHUwRENCRCkicVp6a3lEVGx6PG9aNGxkREtORnJrbV5fKGYo'@;
put 'PCtwO29mKSVvbyhJJU1YdSM+LjFAVTJUSDQvMmE6I05QViZxVTM5S1IqQ1dbKCImcHRpP0BWeGNiR05RRW5KTSZzdVI6JDFkW1pfeGRdYUdGRWpOMDEpdnVjJXBfcTp0KyVbPGFsViluLFZAYGdoSDNrL0c/KzFUN3ZMcVN6NFM+SiYsdDpKaHxwVUIiPyk0UmtwNk1TUW5YRj88bm54flNwUm4x'@;
put 'TFFFX3VbSEs7K2guNndYRTU7OEQse1smJSY2aUNac3tVe2RbO044OUxsbFJ5V1oyZF8wUGdyKnFlXUJNZnhWQWRtXTRnaGlCcnVedTFkKWhoYjl9O00/Zl5xTnwjc357ZHgwODsjWntEWHtaOTE3ZHp2KyphS0tRaXlwXl0yT0Y+Mk1ENCJRJSYiIiNbbVZofUQvYyRtdkQ6cnQiPD5JTlIlJmk+'@;
put 'Onpxb0B0Ny8mYk5vOm1jTmlqeEUpOTdfNzZWJVpzaVdlV252aEMsLHxTSmlkKFEzM0JyJjVNcz5tN31Jc14qQ3ZzdGVFakxwfXFiODh+VHYqYzcxaEs+U0E1Vz5kLlJQWVEvSixaPlF+fXIxTFN9TGZjZTtSbjdKVilZSWVMNWh1TjVuPmA4OS9UYFtiUm1eekFoKX5wVzAuemomditoKXwsfVJ9'@;
put 'R3dZNGE4KzhTRCNHJiQ9MiNCO01bKzdKVEp5cUgzdUw6dntSM2w8T3A8KSNdTGA9NWgmRzZYb1VyIlBRZDNgbldqMF5WJXd0KDRNTHtjKXZsO2pXd3RwW09ic083Z3I5JmFjJXs6X01YQGxjbGc+VX1lWz1eND9RZDtAUCNlciZbOHtpPEZdaT5iO3dITVV4a3BZUFo9fWVtWSNOdkRkYm9idkNk'@;
put 'MGomakJUeCZZdkcrREBEYHVxJls4WEdALnxZJiZNLnlHVEJdNnQvL0B6Lik+LlBsVk4lWkxoJislMUo6ZXZyOypvVio8b0Zodi4lR3Y3QV1CZH1JLF0oQTxwdn0xN25VL0I5ayVlRz4qakpzMGJXWEIiRHNiLzgxQ3lNWzg3WyJKeTFDdHc3On5+RDRUcjEuJDV1P2tVdGhCXTx0XXR1RiV6JHFs'@;
put 'KUFpbjVtZWxsOH4jaFtTVCVsb3w8eyp+KV0hNCsxbDU5aStTd2NDZ3ZnYSZrRSJ7cSlLaHM1YmNCSyNSNlkwTiZ5bHNxfW9PT2I3TXpnbVtORjkyVmpHaXBoUS48NzclI092U2wyI0ouMmwpZXhBRVQxSTNhYjUpST9dd1Q5Y0o7dGw/ISFzcVFLTXpyUnZMZnB+PFU+ZmliLDxqNnhZZUB7eU5S'@;
put 'UTAqUSl6TEsrMih1PnFsdS59LERiQGElZn4+OTtpcl4pTXJvPTN4TkM6QTJLNG9eVnJVV2RXanI3c3osa0ZfbT1ZMnd7YW5nMigkVVU9JHwucDYhRksxRDxVWnNVNG5CRFZ7OjY9YElCfkVscHNsKVk1cXFWcWU5VFQ3RUR5TVs7TDd0TlFQLnhvd3xqbDlnLzYjc2pwR0wrI08+RHtLc34qQVZn'@;
put 'Nmx7N21lTz1yXSNDejZaT0htUF9EeXBQMCw2VFRSNkFjNlJ2MipmIT88KG0lTCZYMU55bTc7TCxxaSVJJSxVUjw7XWgxPFVzbTVNPUhzOktmfV1KV2dEI2hmNTZ8MktEfmVVNEBhb15MWnFscTE0QixtSStQXz5PO3t3PV1GWEw1N2FsT1UvdH55UHwuOk5STHhMPko6P0thM3Akb1QjST84MTRb'@;
put 'fFdDfTRRNU1qN3JTQn5kbHMqR1prZ3kjUkcvTVZVODFYRVp1dH12fFdwVHJINjk2Q3s+QiZYbnAiJm50Pkw9UV9nTy49YWEoQ19BOylnQCFVaTU9P104PHsqTnNEU15wJTB1b15jNGs1V1E9IW9LZF1sfjJQQSJ7fW1mRDJCNTUrUXM+W3lDRS4zQ09fQ21aST5XY0IvNWs7bWR6TyhGI0BqO3hK'@;
put 'KEEuaEgzd1BnNDJCJDUyQGpsKF8lKkw7XnVAV25+MlNTPHhCYzssYztqdDB0fG1MMlZFa153KSlqdCROWWxwQmhiZG1SejAmOHtrZDF3em9YOWRITyQsSW1CZUQsdUlQI1ssOXdJajhtJUljNktlKEdrLjt3NSMma1Y7KG5yejZtSHcofC5dP1pJPk1HMlJgT05EaTtzKj5rViV6IWFxbjBfbUc+'@;
put 'YTZSPjQxNFZ9Ljw7ITE0enhSR3YrfXBqfDlMeWVeVkV9JUxCa3dYU08yNm4lcCl4TTFxW2plP2M3ekwsPilWMHJ1WmdVVGQ5aCNBU1hhIltnM2AzVzArMzdsZ2olMCFNXjZNNkcwUmJwY3EvXz53bk49KXM6LmgoQVgwOlF6UVM+fnt3VUVSe0ZyVDBZOjguPlU+Tn47XjZtKDhlQy4xcXNeTW9F'@;
put 'ajZ+QjBzU1gyTFNXb05kJENeQHheZ1lWcnRsZCNwb3FmJGR7Ukh4JFtSWXNhVF5+VUVEL3MqezApbEsqSiwoeCUqZEYwbnBEQ34zfjErNG4iMyU8U1hfPnNjPjM6LywsJlhIfXgjVkd3PWVkKUFReFBRMUFibD9mVm1vZlZEJShZSTwyKXVNOFslKWFtdEQvKTFLY3QhIit0ISJOMmk3an5TOiNo'@;
put 'Pncwb0tLKzI+TDk3UHFRUjs9SypXXnA8PzZ9T0NbNVFVPHRod017KG4jSSwpZyg4djBjZStGaXYyWWw4MC5KczosflVPOD1JYDo0PnFhUzd3MGxYa0Z6b0pOPSQkNVIkP2QhV3VASkZBcHVDL0V4KWtWPlEySj1aVjY+M0hlVH1UdHkhQ0ZldFFGTUtZVXZUe21HLEg+TThOd3A1Nj5jRiRCJmtC'@;
put 'QSx1KjRLfl5DbWtAb1d7bDxPKyJ7TTY0ayxzZVhGZUpUcmkxSj06Xjp2MGEueEdiM3IwMnVxdUUiY3NAQ3ojZDMqUl9TKjlBVzdxYCI0dEo2N2NBNCtkTVBTeF5WPk1+W0FmRUZ9MUBMaUEhIyhRVn1XSyosKyUwWWpBLCltbSx+e1AmLDgkKiYqYHZsMV5kMWQzMGZJKmAjeF1nO1h9I3Jpbzg5'@;
put 'MlJ7O2JUKFdBUypKNT03OkMoNDomR2suSn56VUVuUmR0S3EqWXJZM3ZUPiNaR3FeZFBwNHgxR3ZtfSN4P2p7RnpiVHE+QlYwem9hLk5iQTJqeissXVU2eHtsZmFiRFhpR3klfHgwenB4VUtLemVWSXk7RmVxYHJDVi51JUdUUkBJN29bc0lvTCEofE9CayQ4QzJWXSsjSztPfWtEOC5PSEZ3XSlk'@;
put 'R3h3JVcyYzpCUWNCTUVVNX5IWHVvfXNUT14sdnFTaFB1Ljxxe1hIcE5DM0osZlU3M2o3QC9tW0txQTgsWFsmOy56Sz06KW47RSRkYCRoTDA9JSl5TlRxOV1PWGJ1ZEQqSl4udjJ5N0hYcSNYaDxuJltJMzhZW1ViZUozWms+eGk3QzJPXWNoL1d9YWVadH51bDc7SyU4TFpRQyV4az1ZZSxpby9J'@;
put 'XURfMCRrdjBzX2YhdkhJOjxual52akwhTXk0VX4zKnl8cTFPeURoU2cqUzIqODldXXpddFpCQkJpWSI4VH1xYGdNbGhmQEZAKGNaOU9ALmFDdEo+VDtuIl13XkBTaWRqUERqTCsleEliT1NHRUBuYXF5WHgyKVl4Ij1aIyhAUF8mc2kuIkspfV5fXSlqSXZnViVbX10pREk0Vi9+SWhkJlUhfCtF'@;
put 'SFpNXldFfDpyOF9DLGRlenVpJUc6MyFJaXo2JVJ8UT0ob29sKUl1RHFpfkgiJmwxMWxbQnpyZTBWa2smUXNJT0k5XS5VSyo+Y1lHN3hETVhfezBOUjo/V2M+YF4uaGs4KXtdLGFoLzNvY2pCfU1yR1ssV0F7Y2JLfDFpPyVSeVdaJlduWU04eGNOakx8Li5NWjFbOkpkQjZ9SSJIS1JGdyx2eGFU'@;
put 'KDtafDxFSE4+W1lPYGdZaXkqKzAkUnJ7I2dgeXV7YkhyKXprM0ZLbVthbSQ6Vm0pdHs5dF5LbHlGR0RxRSY1LDkycHtzTVRmSD9iM3VGM1BKZmZbU008Z00+U0kuMVRAPlcsZX0qXks7K0cjbHpzOW5DPGVQKStLbntUdnxjdVozZnBvQnNNfXZCPWl0ViFhd2g1PUFdWjFeZWtgLjM/Nyw3Qkhi'@;
put 'bmYkS1Jyei5dMDE5cSk8LDoyPipoNU0mPDNXPHlLPkIqLlh6STM4OihnIT1IcW9NKWNdSEd1amx7PSg1Wmg1Si58KXZscytKSU1uQkd3aXJXfUpnPVVZOShKfXV8djAwcXVxPWFNOHssYFlJaDsjezZsSmJRfl56RFFNNzwvLDR0NyNGamg3Kms0PSxOUkAmZGl4STk2WGBYejE9eS5zO2NCSjE7'@;
put 'KU5gWl9PUHB6MTV7SlpxLjgrK3tVQ2VQLkR0UD1iZytSMjwlNEVral5OXiEpJVc4TSVFTzFoIlprVzwscnQ1bCVdKFd3ZkIwMFo4dGl2SFhHVE45eygkJExRJlshUE8jclhuVU9vN1p5akBIN2RddywwOW03Q1s5N2JPSWk1M3Y5VldVc2pKZnM7KWc8YWN6e1BWaVExRVtHZTxDVCZsSGorWEpv'@;
put 'KzJIO1hDJl5IKWoid3F7aXVOUnNZJVY7TV41JSZyX2JWcmhzK0lIY2IlcWg1KH5iMT5yIWNCfkluLHtJYS9qMVRnKTpEa04wdktSejFgPCF1SVgsJWZ5KSl8LHR2QDt8V0thaGJkYEkjTnYmVk1IMURBLzJRY2l8MG1PW0t7PjtJWHFremQ4cTFoZV1AImtGVHsmYWskKVljZjhJIWMmTVJDZXhJ'@;
put 'OkskQmdXailuJWVfbEVNP0BlUFBsdDE9bnlnS0RLLl0zMXh1ayU+Z1lDM2Akcl18QHdmTSF0cHlvSCl3NjgqOXoxUmVILm9ZRkNrUFJENTlse2xFVl45THlzdmo7MCxLUTt1Vjp3eSFYWitBUX0wOHQ8QDFKbUpAIW9fRDljZHcpNEFHSkxjKHFNbjNVKzA0cHtLSyoqNV10az9ZaTVEUnBZSGk0'@;
put 'S3sjK1BhaVpmPk46UD9DSTVdcVBLYW9gVCtle2hiWn4lIXBkVWU4bWhEUDtnUDY1PG8zOzsuQGRoJC9JO3Jlel14NyxmcGNxfmJZdVJLLlIxKUdFS14rJVFrLipyaF1nWypCNTtLcHtTez0mO2BsKSx3ai8ydXEkJlR5KGsyVENgaj5KWlMvaFtQYkRNJSU5O2VKWzs3dH18LF1MeXxJWEs1VTNV'@;
put 'SV1HYSU3VU1vWWRdW2RYaFg8eyJyWF55dUNWSipML1FWSzBRdXV0UFhXQV1UITxgSm0hLzViOFl1VGEhfEkyRnlpdzRDbUA7Q2pULFM+PUw7QEI7S1JGRlJ9Qj8+RGw2NiV6RkVdK19qa0dNeGpaRG9qKGRDOCVyMiZOdnBRcCpFSU9xQlFuaEBmLiNaaihkQzhuL3VfQlAzX2chP0JLZm9qK2Ru'@;
put 'TnpMR0l3a1pWKXQ/d2d9YExJJjR9Xyp4cDJ2OUIlLCthIT5tX1kxWTMhdSlrMXIhdVJ0XkdwdmFxNDEzO1E8R0UiIV4+RDJvNTkxJTFdPW9FIWc3cElZUng4aUk2Wjx7WHwwYDlid303RWpTeXBjS3V5ITozSiouSXh5Qi57QzdRdmAjQzpObk90Kis7ckt0I2srfEAoYyJvez4pRjZJRzd9QGUk'@;
put 'clpoNUA4PVcyQ19dWDFVZk9LQzwzJiooIkdCdiwsInE1L3BSWztSdSV3QWJ8XXYpIiZOXmhiOm1kQFEkang8XVI1TzRsfUBZajlHSzEpPitoQGJJRixmbStWUFIwSXFwcE1fXXslKElAcCxoK3BRMH01ZypJZE9aNjZ3SHpDPHZeWmkvS21PXkssZ0s6WiJmLmlvT3BNZTpjPmVmVXlmPU82VEt7'@;
put 'VHc0dlNuRTkkemYoLyIkSitCbDlWaGsxcChFe0JDajkxQVIoOFhLLEgrVjxSSEVtJE90RyZMLFB6OWp6aj4iQXJUTmY3SnQ8ZjZ9PHVhZD0mKyx8aGpSJiR0UmlfYz8zeFowWGRwb3lPNmU7WlM2aFtyVjJ+c0AmQz03RGpZRmBoVSRifX52S2k3YkxHNlklQDszYDlyQV8oV3t9SXEhQjp8UHQm'@;
put 'al48PFFsZk9ITmZhX1lHMVhKPiw4QkY2KkAjYlFjc3d8KGIzfnRhWjJ1ZjIwcCFJJnV7QEJqJWE2WSNDeDRdPSl6VDJafFpKdiwoNlVVcTU4cDYrYT5hcExTUl4haSxZM3NXdS50fkV5VjlOOGkpWEhKdWI4WWd6S0ZrPGlgRHdlZVZNMixIMmNCQn5bWjxseDYvVSpZdVZSPHszLj85ZF0jPS5U'@;
put 'fiNmeVclfGxyaCMvPj8qPWYjZlMvQCVJa35hT2QvSCRKYktse1k4ZmplR201UCo4TXg7Z1pNPll4JEk1PHFgQG0oRCZqWV9BZkdpQnRnL0FgU181a288a2hlezk4SU9GJitTd1BPdk5RZTVVIU49KVkmWTs4Xy4xVkMpfCh5L1ZKJG5wJX4yOjxNLDwpV0NMZXlPWF5EJV1pd04oPCY8V1MsLkNr'@;
put 'OzZoVDB4KGYjL080bFdWd2R3dClnSWBEMilhaSt7W3c3Vks6eXBEIUt5dVIkbkBVWGY9VEZeV1V6dipDISFVOTtvQkZtPzolT0E/NUkxNTUpJk06TlFgRVJMODlLWComfmtteSx1Z14wKU1feVhPWFF7WHBtbiNCJjheNXQqelBhQUVtXUAjLzkxYiRwSkFKYkApOG9wSCp6OTErJjFyWTIwIjFQ'@;
put 'UDFqLGlTQGsoM2R2ez1Ce3RZTSpqVWNCNDIlTz5dNUM2NE1UK0hnWClMJV1fK0pqcWlHO2BCPCF5bFMoXyoqN2pPXlpJOmpQbVFyKXRLOUlIOFlLR0x1eCJgKStZUDhqNXhRIV9PXWdtN1h2eDpZOTRfSHRnXUBlTUcmRHQ0ZzhjXSxGJDw9Z1pgdzkmZWwqQGt6X0RdRGkweGxNdjEpbmZhMCtd'@;
put 'WGU1dXBwX1YxYFBHdylNcUBBW0A/cDgiI2JKQjVZKE9IZTV1W1t5Qnk/L1lvO2s8bDVXRkddamwoOys4ZjVFZShfPzs/RHJtUytlSH0xPiVRdGg1ZDoseHY7dHJAd3ZGeV0zbHFGU28+KFlNYSk3UWdAa3V3aTF1USVYaFEmZFBEPiFePXtufXtXVzArLHRvXSN6RG9vQGs7K1ZWSkg6bVVAImor'@;
put 'QUUrTzJITCxCRmBXUTh7eVJQSkZEcVphPltDYyp+MEFSNWFxaD5qZHtBR21DcGJOPjwlPW9beEl3ei83Zik0eHUzWypKYEUxdDU1Pj9NOWMwUk1UYSRNODRkejc0blV9IiEmdklvVVRJI2ZNOStTPiw7P2tgKXFzeDshLHpUbiV7ZD4qWX1ZZDpMbD4hI0wlZyJWUl50bW5uUCNoTEpzfmJzbz1L'@;
put 'OktaaHxQVl05I208XigvRS5hcis9QFdIQ0wqL2JoZkQ2NyxPeT9GNCRRYThAQz5VLkkiZEBPI0daRGZjOj5XIV56JS85PFQzU2F0bVA/ayhEIV5WJHpbdSs0THNJNigmZjMvImUvUms1RzdGYShzS0g7ZCQ4a3BPRXFWMDI8MFd3Y2tNYHBlPmApc3tZOGoifkZNOFpMQXMhQz5aOlJiWEtvXUFf'@;
put 'TS5IbkhmWTomRVdiYjtLekR9SjtLS2FGU0Q5fWQsXXljeU4sXXFIQTolZGoxSlI7LnEpK2FgLFNXfFFpKUZSbUJdeiVSZUNMMkRtfCtuZztIZktXWHFIa0IhLCkpfFQvem9OWTAyIj9HZG54MUoydjU0Yk5zIU9+OTFLWmZ4MERwfU8jdHFwTlBIXWFlXmxEd1p3bD01VCxhRWNAZSphJHtzYXtA'@;
put 'UjtNfXNmUHdjbklzX1lheGtOPnFXKl5oelhveDowa14/MVhCc35EclVVbXd+Z0F+fT9VaTUsImsxZk1iSDgqMVplOEhRTy8kTHRxI2hEOn0zOjNlMnE9Lzs6R1BNJmtKZmVdQD1qPlorYnBRSV8/byJQMTlSJlBRcSNBT3JpVklCUjpJQFlHfEsyNFhueFNDKC8kN3FGek5sM05ea2UrRl97cDda'@;
put 'Vis+KCFuTFBlQixTOncmKnFGKU4xclA7KHNwaisqNjptKjJaTTRZNCw1Qi5CKmRma1RAMFUvNkZLODFFZUVXQDwrMVZjP0k3JXZwdkgkQ3E7LmRkaGx4d11uRUIjLmlCQ19OKywzQXR4eGdoRkMsOG4oVXNbQkB5PG5QUzw6LEF8aXlAdVJ6TlN2Ymddcl91VGA1JEcqNUNKaEhCI2ZLajZXV0Ra'@;
put 'b1FNNGRMeEwuPFovWHxjfVBOLkZ+fH1EKTRDbislW0JPW3I0ekJHblVjPEJ6KTo2WnI5Vj8mcSpwWXNhe2lScUB4fkU1LEhRK1U8YnBvUVJmO1VOYU9iXldDcVkyYTIxMT5ld3FgXippKTMjdkhxXms6WyFrWnJ1a31QQ2tSZC9jdyV1VzsyaHZudG93YCJAX08kMFZzZzNxKFtXS3MwOkVSUkYh'@;
put 'VWF1QmIsYW4oPldvMiNNfCV6T2orPXxDOG9Mdns8WFhSRkQuU0hbMk1pWFUwTEI2W1NmMGBnLno2Tngofm5yfmMsPm03JSp4VnE0YCE/STAuWGRfaH1TPmtdMX53bTc/ciJgZkN7SF9oRW1zdWt7byN7WUt5PHJFLlhnQzJ3K1lpLFtIIVBra1gyQlJ0Rj1KTi5MLCNjR1tbb3VbTnwiazpyeUpC'@;
put 'a1k0IWhYNiNNdjxyISUjXT1bUHk9KmozKHUuanNWb013ZztLQHdWXiowT1NrU2I3ZkArJT9iMHNFRCQwRWxSfCNDMXRGfn11T0lEcWs0QVdGfGlCa1UiamQva0YuUEVYUHlTWl1rYzdOMyp3eThaNVppUiRSMWQxX0djOiVaI3cueVUrNXQ7enljaEU7fXNedFJaajxNWEh9LzkyamNXJURlTkVE'@;
put 'KVk8M3swRERAMEI5WCUyVUV1STteOWNYLmYvQEdPSTVZckVBOm4wLy55MSNFKGcwV1hXRCl5JlFPeWlJLz1hNmx5QzJoZyp4d3lucVpBO0pQeWM6fns0KHsjVWpaR09OKFphcDBUZm0lcG9TfF48RiRjezBkVHQoZCM8KGs2Wy8sfUhqI2BSOEpTdEV1MnUsdFZqRTpDRiIiVG55VyU5LD4+Rm1a'@;
put 'ZFs6Vz9CZE00OEArdHUvRlJ2TFNOKCRHKHswJmJzTV9lLGhaL0xtaHw6SSo2RlNPYEFFKWVFMTBfaX1Fajcud2U8P1hhe2htRkpPWW9MV2tIRHU/aF95NyFZcEV5TiJDMSkraFpFSTszSW9iS2s0RTo0eUlHX2dSPDMmSCNnI1lxfE1BI19dVzJ1VGpEZThNRSw9QT1UVTkyMiRUd0VVNW5hcF5b'@;
put 'Z2MjXXk7Ikkwd0xdSHNfWE07QWlMWSUvWFdNbTJMTFNTKVtFR0YsMkY6KSk4Tkh2eSYiP2IrIiYlMEdPY10idGo1Z3pNbjtDRXZwXkAzcV04OS9qU2g5JXVabzFHXTxgb29RfE5MSm5ILzFqMUFrZzwhfixEfHZvdk8lLFh9fipwX3Z1SVJNP1h8bjdlUTZvYFElZFBEPnBgQE07Zk5edDx9UCNZ'@;
put 'eG1VSCMwUSVAbXImbXwsTzRaSDh1Q3Q1dS9vb2R0OUspdk91JXcoVzhSZzk7KHxYaz1JWCxYeC9Gd3gqWVdCKiYpNnV0IUlHfj9nXWRYdkRBcSthcF9pPHlYOU1DKEFhL29oVVZJaTRQXzRyaV1scVdHdWxgKWYkNFpbeSh3TWtzQk1dRjxbZHw8IUZmMUs8IWRqQzUvOjNSMVtiQzVGZTcoZUNB'@;
put 'bSxEfCw2W09BQyhWM3siXVJmb355ZXJoa1FlendCMF12dEsibHxpOHdMRyVCQ2JrK1F+IXtXUSk5ZEI4eUFnQytCWUdSRjlEMHFkRVhGdEFbQWB4cyFHeDRBQVRYKkV7Q0IlbV1RJHhIJTVaeD9ob2FNUWw0b09mYTxsSiI4WGNtfHlTYHMlPkxJYGtiS2VxUnd1JlQhdW1dXWFoOGh0Uyh9N2Nh'@;
put 'eE0+Nnw7V0omV0RSUk56RH5ReXtDTShCXz9ybjl5Yjc5UnBZa3p9ckdIJjpRW1pPdVMwdT80YHVtTyZTSzowOjJlP0RgKGJlZnp3QHZUWFk3U0tWMUpwKXlMfnxISkB1ZC9QWStPeno7Km5YfVhwalREY0NAdilfTVZvJXFGPWM2WWBRXURndypoR211bG4jOmBaYzxjdEs4XXJQXiwvQlBYQFtJ'@;
put 'WipKeVlPQGI5Zj9gaG49IiYidyolZFBmby8xYktZZWZFV0VObCl5fmI5WSZwbVFmTkUhY1E8PTcjfXxAKWkpLFAhMTwxZ2JKdn1qQVMueDdxbk4iPnRwIkskN25vRHosXk1CWHVtflVhOGRXQ1c1QnpxbFFqSzNwOF9MQ3Jic1JLSmxSR0JbO093NVNFUWosLE52PENpX1orcjkpYkJURUJGOGI/'@;
put 'R1AjNTZRQCE5akxpLjR6Myh1Tik9THp1b2c3PCRhak5TXmtwKjU+TDJpejgyamxPallkZlMvckhwPW8zV2c3c2tofm8hK2Epa2gpQ0E6azVoM1FqJGNTVFhTdi5xbkk+aEIvYFY6ZmsuST5kXy5jT1o0YjdieUR8ODJQQSo1fkoiSj9LRGB0d3VGNnciZ0B3QXExRSlTO3kpYz9yRVg7W0ZJalpL'@;
put 'ODVbam0+UDhaUVg/a1RbcjQxO2hlNT1jQiVKNz5WMmNTVVNsaTRdejYxeD59ITV2ZjZzeUNlfS52KD5+cXBpTXZ0NHZ1ZWtySFprPTlJYWhAelJjNSh0Q2E8ekRNRFouLHk+cVouNG9FZjU9Tz52NXpudzRiQk1+NDhlTnAwaHF7OS9BPW9vZmhoWiRVeVhmMzBbdTFpNyhSSlJeOCwlJFlZNUQ6'@;
put 'aSopL2c1Zkc8OT1DfVFxfCFRY3w9WztPaUJlaXZ0RThSa083bUJSe0RbISsvOXklfnFKekt8TV5IfDZTO2NOUldeVDRMNl1HVEl9LDByKk44eGU9Vik6eyRNR1EsLGJ1JTd2TEUxNGlSfVF4NlklMCxldUloc20pfHR7Uy4sNktFQGIvIm18Y1pIOTpldFs+IShlZzJBM2IyOjx+OU1lYzBaZFhp'@;
put 'PmJfUVsmVHN1eVkhTXdzPV8ucHl7Q31RWG9yZytGKXhafk56Szh5IVs7QyFEZSJyUF1hc2Y8dGZMdzs5Qmd7eUpbVyxFW1cjVTkhPFBJZz9TbnplInJUO2gxdV5JYXJEbTh3JTA9TD5DQXoxQjlXYFJRRG1aOmEpdDZ1cXVtYVh8Iz85eTlrQTxAL0l6eVdlK2ZOUlZUOXRaI0w1Rih0ayI4bil5'@;
put 'fX5BZytocT5GLDdxIzUzITVaP0svXTUhfV1dSUk2fGtzUysmV09KUzREJFRaUzVtbDBQMW1oTV99UEpvPnpmU2NRL2Z9XSZRaSZUMUBjX1AwMj99ZEFkdT9lUywwZlYlTVgwK2dhYlFlUVNpY1coQTsleWYyT2lvWlVJeD8sayFeWXhLIkQ4OiQiNilWMUlMZENeZ1F5TVpIWnEmV0RFZnkyOHBP'@;
put 'XT1ARy5RI2RVeHY9dzIvMDs0ZD10TSpfWUh3fjkjTU5fUTopQzlfYFR3KF1+LGZaJnU4dHluQyFpVll7JnpXO1ptSDtTaG1+PDxwLjk3IXVYIXpHayZsSGNRXkNwUV4/RjUlRzolT085KkE5PGRufTR3QzJtOnhNZTlNb3o/fWNDU1pqLihxJCwuY2woTDlMVW1BWChVfkMkKl9kVzE+dVchY3M8'@;
put 'LCZqTVNpPHcpfChSaEJsQ05TWFVkc3k7YjMpRHtQdkFYfGk1SDtVUkpzT1Mpd3ZOPSo7L155KWdwVXg4KFo8KkpWTG5qKWZpUFp2Uz05OCosYjdILHVsc2UvT0k6R1F6VyVQeVZsflJAd1VeXUAzeHJ4WDwuLCJwJHoifE5nJS9ATmo9cj87OX1pTVJdYDd8VDB0YUNzKDhvQEdUYUlXei9JV1VD'@;
put 'QE48QDR+YVhDOC9KWGkvYXpFP3ElblMkPSplSlB6cj9hU2oockwmLnVNfFp2cFEjKWpAQC8iWU4wRTVOT3ZUbjkmb1VxXnc+KmhofiNTOj18PU1YXmxsXi5OcDM5OnNzSkR5PlVaV088bCVPWUcxTHQ3YCMvI2dmcThRZGBAJjhhQUhmXjJeZ1dvdC5jW0A3Y2o2QCspcj4xfEBWJW9Idj1VZylj'@;
put 'cEBmbGpjOUB8JUFVJjBtXX1oaD0pQTBhW0V8Smg4aFZUcG5UZzp6KV9pPTd4O1BHS2AuQHp+c0Baa0wxQitybyxzXSJiSzBdcDBgY2xSOFR7NEpLYWtMMUVbNTcsN2BRWWQoTSh3UXBkUjB6c254UkxFKEdCJXVuU2FqZmpjfGF2VHJEPUdMSVt5T30sT014JDtDUns9ZSt9XVZuWmcpc0F9ZFt7'@;
put 'VkByU1dXc3AzNFU1enAzeXtYajF1PFRtNyYlW0A/azw+OlR7ITd4a1hWb0U3YmwpOmVXSFkwVUFkJDY1Kj5FbC9ba2BPMWcyNGpEZXkiZFg6I05NOVpwPV5lOUpeP1spREgzenA5ZHJST2g1KmQzMU1SWyplOHkhLFg+fjFWVT9oNilAaiJ5MGgsODd7OCFwTz5FR1hVKXFQNlJ8d2xTN3NlPXd3'@;
put 'MkRhazsxZ3AsPTM2eHBpO0FyKUF3PDwoL3s+Ill5QGZnWExbXy54MWVmRXx5fV9hU09mK3Rvfk1KVDlkd2xxb3EoSDRLZnhxdU5YO04+QHlzUzteXzZOP2Q7JVUwWSVxPytRajU4Ok1YVT0rb291eVdDcXR2bCRbTDYsQDIhKmJ5OSkzdiVxa11GXjNPNjBbWWYkL0s8eTk6cm1dVTFtUW1NU305'@;
put 'UEEoMXIzc1l5NTpMLGU1QX1SMVE9XUgoW2JIKkNFeyYxJjE7fWImK0F+MmY3fCI1eHF7SHF5UGUhSnRkNSxOR2Ymd3ohREpqeVBtKWdxIUc1KXA1PWl5ZDEuR3Qoa3t9PEtzZk91eEp4R3dULyIsbU8iWkUqJTU2fCsmI3E9PUtaQ0NwezRKbV81Sl45WHpYJHorRSgxNzlZM15iMX1hU2o2RkZS'@;
put 'OF0/YEo9XUh7YCNgfUt1L35tLF1PWz9gVnp3THYmTHdSRjZeayxRR0Z7fDYlTjh3Sz8kWzBXUyNIYDpjMURNLG8kYSNxNT17SjxYIzdYJT5DTXRKZ31oI2ptJmpfXnRhZ09LNlJaOVYoY05YV24wUWN9bSF+Sm5PbTNrUmlCYGg4Ml5AZjFCUjspYlQ6LF92fTxHT01iU35mSFJURC4+VVpwNCg3'@;
put 'Zz9nPUhleiMrSXxjeiV3cGl7SSNwU2wkK2RrQSxtZDZWcTJ4d2dPWip0dnhxT200VllDS1hnfmw/S2dmPy8pLllIPGQ1fnlUOFEwcUUjS21lUDdEfWc3KDtlJD9iI3xBJkxrLmpVd3ppMzF0bSRHTkMoKFNhZSFiWkVgOjosMWFlYk5JWCZbYlcrZVE2NV1ze2dRTiY1WWdRQjB3eip7Ni8/Wz44'@;
put 'Y3ZYbkc1VE0qZXpqI0ltZ3VRRixfaHRWJHE6ZnVRQEN6RDouVUlRYFpYRH5OdHpTTzZefFI9fjNueTNzKCU9WmQxc3BwbzhHKW0mfH01UzJgT0N3Qi4iZ0pwKT98TkxTb2ZfQm0kenUmTkpNZDAwKUIucDVFdl1AYj96XV8vd0FyQjAuT1Q4WiIidlBHeVtiRmVtSDIsQGtbOzI1TTx0Vm0kSG5+'@;
put 'byRfaCQ+JHRWKypIa29+QUt7NnkxSFYwUHR0Iz4hPCpAVTZrNW8yb1VoXj9kOi93WGApYGdObEJgdG9gWVlGbHtsOyFjfTx8WkNMYW97cXZ4QE5LWkd2Zk5oZUhZO0AqeUMme3c5O1hGWTlWOEBMVS9gQlhRPGJTfXpQXVJoR18qMVU0W2BIJklWYSZXRjIpfCMwZlZVWj1nbjBpYjRbaipkPTdq'@;
put 'YmNLRyViQzVva207YjFxJHQ2WDZGaks5a2VXRipxV2N9WnpsKWsiI0J1fChzWUNnWUYvKCRoITFYVU1bc2dic3FuOlpCQFBdZmJiPTZYSlNVZFI2IlIiUkg2Yzk8aj8zUHZ8MXhPP0VnVlI8QUpGbE0kc1EhcWhJOXZGJmt0fU15PUMyejFEQHpYU2xmd286X2lzMiNQaVpyVn47W1lFUU5TQCVT'@;
put 'PmZTZkZ6UFthaVtMMX51aERDM1R3aiRzVn5vYjZbTXsmW1JEUSRidmkyUSM2Rns7OnRvK3xdT1tvOE4vajs1UkNnU21QSllgT2ZDN2F2Ji5abGFZY0tdUFo7OnIlVUdmQ3Y5L0A/W3VIRjp3R34zMjZacz1sVWZbYnJRKHczflEyM1NrZkJSMl5CR0hHZWh0R2lBMjwzUWIjZCpVLDxpIjgiVEJr'@;
put 'Sk0/c194PXlRQXdXI3dPQ0VETWdaJDQ4Rj00WDJWQHJnKjJ1THFqJiFqZlJQaWFzXTs2VDZrQ0R5eUU1RHlEfCQyITFrW0BLZjNxSng5O0BkZE9zPUwickk+fnhxJCt7SUlTPyFkcjkjaVkpbGA+bH46ejgoNU1deVJ3Z3FqIkkoRzNfdjF9Ni9iOE5kRmxddH1CeHs6d3xAQDlafTdpMXp4WCo5'@;
put 'e0ohVDhkIU04WlYqaXZsR1QsLDBxcDg0K05ya2FUVyxWdmZAa2JzcjNeYG83Qmp4bjxMfGF2VF9KP2lJUUA4SGk1ZlApMH1DIU1pXVVFV1clMTZSfVhUcHhxeV9AS3wrSX0ibHBvKEByd3xUXzclZ25tJGgoKW80fS90S2lRQ3BvMGpyaGFFeDFgVSxePD8lPHZ7aHNqNkhxdm1VWE1pdS5fX0V1'@;
put 'VHlDc1AyOmlSKEpDSVJqPlohQDE5YjlTc283NVJWT1RDdWpodislaihwRDFGUlQ4eVBbLC93UilWVUdmaGtfaW5AaVJFI21OWDJYV0I6ISZKMzIxYFN1cltFL0AlcTdEUVpmcCssTlRlSy9scVRiNjg7U31TNyNrQUUqZypKfnl2aGx3dG1MSl87TjRiV18lRkdkbXI4fTV6I3VoJE5gQHU+VUwy'@;
put 'RiQve21QSyNhXikkJXBYPEl8V0wzKCtdaVdnRWxPbnZKVy94cDYqYmpXSWRjcCYwUk5XVikuOFBRJFA1WX48Ll1laXBSMzwwdz5sWyt5aWhlPyhbQF1DW0M5UylTZThbdlEjVzk0eEhsM1p9a0w8XUZkNjpsck4+MWIxdU9tT0BtR1ZXKVNpJlc9Tn5RVDheanVvV3A6LHwiL0ZhayJaOGN7OmEh'@;
put 'OHpDSCQoYn56b1BDLjxCbHF6fXBMM2NMVS5hKEhseGw9LFJ9fSJgNSo6fFErPGkzJHByMkt2JiVZaX5TIjNrO25hYkc7ZyhjQzZDSUk9Snd+XXd7fDFwa3ZrdE1qO1VeXytWZEReQjF5JHtoeSRgNW9eQm48Nl13d0AkJFkqJk9JJHZRXmlYYXFUNT1VKEt8bU0lUjFEIXdbNEFXSF9gSC5HKHVg'@;
put 'K2A/OnVwb0coNmZtRzVwYXphaTtyVTY9cDxreyZURncmTnklJTE0IksuIy50IV9ZS3NfTDVdSiMzXSlrVS87WEFeUUF2SWcva1I9UlNITnw+czhULysjZkIjUFgwO0txe0YqPzksTk4mcCQsK0BrdEY1WWJXdDE+LEpASlFueVAwInIjVyUjR35ocjpDT0ljZEJRX002NXVqa18rT1FFJjQ3c0FH'@;
put 'Ryh+XT1PUUVWP15vcEsuaD91Q1htPXEmVl9Oc3NZVjlOMzxLeS91VnRGYyRYPUpnVHtJZyRkbXhre1J9X0BaNzMwPyViezA4KXs4aHFHVzF4bTxhbEwzdDJnZ2xxelFSWml+aSpSUkc5ODghJjxOJGJLQCUvYV82N1A3YSwxc3l0dFtockYhOjJvZ3VJcktmfWhGSUxteyE7OHc8NUhnPGpScTVy'@;
put 'Uy9UK2F7MDdSKGNxa0tSO142S108dy9Ve2J8K0VtSCJ0fV5OaG12MGZ6IUJ1KD8yKzNueDF1OTBoZXIleC8iUHdbL0xIfUMoUThaMzBHPSRNOVI9LHcxPCNvcH1qVTZYRU8jb09DW1lTOCFgUm1JY1QxSVI8TD5Ld14vTFopVTNNXThYYCF1IihmY094cU97NWpyRTdEanwuUEM2WThhdGVVajdj'@;
put 'Tj1tYCJWdD43YFNNVClxc0VbVFpmbEBCX0twbSN7SlpVPHN4dnAqSCZqdVNBSjc6UzJEOk9TKkAuLylAPHhrdnBueDFFP28jcik+In5AXWcwViRtbmZuI1lqaU4oIX5ebTUyeEchIUtbbkJrInhRJEgxZUR6dyhDaFd2QnY4R2ssQndNR2BOWFg/Pn08Y1k6QGBvb0tdWnprPmliO148aTQ+PSY/'@;
put 'JGx2KCZRSCwrfmFFQWAxfVQkTTlrOjpHLlVDWDxAUVlqSDYifFYkY0d8Q0c2Tl8jQ0R5PTxBSyEqJUNFbjxnJDk3WnVfQGpMS1ZHP3kwcjhJJTEmMSxFNGp5XWkjOmZiYz5TM3BPSFZTbU16eDYrbHlAS2MhJmJXI3ZIfCVhaT8hTmg8TnpxLF13XShbciRlNUh0MU0vSyEsOnskR2o5dSksOG9L'@;
put 'cV5JZV9iOGZAW09mWHdBYT47IS5RMU1MVncxMU08P11Gdk9Gb280KlR2V2w0PV9uMGFvcjVoOFtLSmBrXi5KMkhbQWorWWZCXTNWMkVmSDJGQnl8MXwse3lyYm4meWExQTIqZyRddmBoUV5rMUQlZ1dJJV9ma1hgXTdwOCRSfjRkXVglSD9ybCJaRnB6WjxrPSU/bT5kai4rSztpVmdheGsjSjBP'@;
put 'SU4uXkk6Ozleb1FqYXdObzU/LCNHQkA1IkdEJTd2TE48aG92MEc9Q1sjMGV3QVNbIz1IfEoyNmtjbC9qYy5bd05XcDsvQmgzWHFNdk8/cnZ0O1s2LHhJLGtMJV12MUdseGBEKlFINkJaU3dAY05tYVRabWQxJjEoLkRMfTAhfG9ZYGw7Sys8NldiWSIvQzErQTFEQTx6R1BIVExRQjw0WXI6TllF'@;
put 'L0I/az8wV04jKT5FP2lzdFpQVDVlU3NIOTRsU2RhRWk+bkMkXVEsZlEyUDY0KEJOTiR5UVZ2ajJedUIhJFB8T25ablIkRXRjdUpKdU5ZU2RadmdSLmhBSVA1STBYT2Fhe2FfSFltVWouY2ZHdzxgdjQ6WFB+dD1iRCM3dUIkRE5YUHt0T05GPHM2QWc6RmpFT3VTdjdxUTJSQ3ZPZWZ4TG1IakxN'@;
put 'XStGJFovRlRec0VNQ1ZjUnZmIWE7JElVWTdXOCpAUWd1NHFAMmxSTUVxIm1uWklvN3V1eiI8N0tSTU9JamxhK2M5LDl4XWQsRGlHUy5NQHBiJnd6ISYkUFQsKi5XbDZHR2wveDgwRXQpXXlkbDB3VjdRai9bX2BaV0hYcSt4eGt1b09kWDFaOjdgWiZEI19FYURIPUJRUkYkO0gvQllBZ01KKSY8'@;
put 'eHpYKyIoU0c+a1REfFN6bGI3W115akVFMWpyNlJQYjd3ZnlkN0IkLzhDUX18en0hdmIoKltuV3VELz1ERE9KMHNQWCg4W0FkbV01PTNPNj42WD1IfSVQVn59Ik1FVyV2WjAjUG50cmxiPzlbNWFHdDg/V3RJTjZrR3QsIXl9dUl3RGQ1KVVfKjxeN1AvRGQ1WnJpVDVhMUp3fEB7W0RfMCNrM1R7'@;
put 'UldXZ101em9eV2NwO15CN1NxSjdtZ2k1TTwsZjo+V256OEIyMXFPd2p9ZS5DOltaWkx5b0BoOkxIVT10KTRKPj8kRls9fkBROFtRa0JvWnZHbVc2WTNTcXd4bHxHOnxIQiJoI1lHTE50P2B3XTU9OFA6UXJvSSJkfF9xSGNvWl98NU1yIXQ4IShBZE9KMCQiM0czWX0vQlo/TkV+InZrRUU9NH1Y'@;
put 'YGt4RlgqK1RASl4yWD5aRGBWR0dvJXVvQFJyKUJkWTo7RltQfnt5ZEhTWno9PHkwdjwjRyU+RzlJMnteSzdIO05pJUwsZm5nYih4OWM2SjJTUiomfGxIZmhrJV8pUnNFaDdUeXRLU2hlTERpNmtsSnN2d0xHY3YxbFUvMGMjOjZacn5CMi87TWVSIX5Pc2N2UnF7dl5xIkI/NDUkZTVabnkxNnZa'@;
put 'QlheQFNEWyo3T099dzFyJjwxYSpnMFFPIjM3RShvPHJJY1hic3dgaGthc3dgNTxiT0F+LjIoekFkQEY9TU1PVjouTFt5Ljpkc01QdzYrWyglck5QNHRMN307R2Z2Rl5ATz8mSD8wUE1tPVhzbWg1UmZ4cTg/JUcjPXYoYnoxcShFSlZ+KEZpekc1QjI4M0lPeHVpUjU2K2RjT1pkNFF9SHp7VDw0'@;
put 'KD95SzQ2WHo7LHo+T34wekh2WG0wU2ZfZ0ViJFRuK3N4elpKMF1PN3B+NFhaP0xvem44dGk/WjZpVXZUJFVmUTtVeyxbPDApRCUlVW5vUSZye0pzT1FZRlg2bDtjXjRQYElTbnBqQEorZFtJemJBSlhkZVgiOV1OTnA/Wk1Ia0k7T2FLMEc2S1JoXSRET15QJEJIKjxRQWBRKipWN1JbS1M/Ii50'@;
put 'SHgrP1h0eVpnWzNFRzU+eFZ7YHV8RW9nd0ElZyhsWSNCQUt0Ykd7aCZ1Yl9AfGR8YWhhS18/R1hVcH41SD9HRH4kIyNZLzVPYn4qbWBDVSIxczopc0BiSVJCOFYoX2EpejgjPFFzL2ZuP1hTJTlLTH1pQCRjKEclcUNyVipRW0Y6KHMsMGt8bkQ0PS8kRCh+Wz5baSpAPkluezViYykyUG1se14+'@;
put 'MFR2Xj8iaGlAfUpfdzdwRD99VHs+QnJNVSo1RztfaUB3RGpiVXRaZz03aSlUe15DcHZJMXZbV0tQdn1yPCJpP1Nyc2l0NEpmbjpNM3ZQRFR5cVYld2JJRT0pSyRkTm1AKVBpZX4uV2BBWUtRSyl0Pz0xQ3NJPltSUW5wUjNXfFdYT1RSI1hldzh5PU9NUkVQOl87QVFaLmQ/MSwhOGRZPjdMS3h7'@;
put 'LzckPm1LMU92fUMseFM1YyYlc2gpRjExREg+TWdDU3BIKzIhTClXKDgkcyQmd0ZOWHcjVzoyY3BreEpgT1B0bHllIj51amtKTjZVISVtPCJ8aWM+JV80O05VMXg8ZmU3ZU1IWWU6ZERuclI/PmplMTJZRHlnJnReO2paI1hFWCJqWnJ2SEFYOTI9LCNuWT4raCkyQTNMcXIkZTU0NGtFZltZOURE'@;
put 'OyUhQHVDd0M/UjpZMCNFTWFHcSFzYj8sYFROPChOS2dVWW81c2JVJG93QkkwLyUvJDBfZlYqeCpTVnk4bVVYbS56OlFtWCVHcHUyTURYKmZNYWcqOmtJfVdwYj18UjE3R1E1cGk+SFFRaTYzLio9W3RJLllnKjBIWF46ViF0Rk5vRV1XKztddlYldnkqLklUYE5leVdDUU51RXFYYzs8RmsuJkQj'@;
put 'TjUoN2dhIXBoOllUcVd8IzRWfXldPkJVQk0xZFpjNlV3ST1GIWBrbyw6SU9ROjA4UWdMUCQ3TFlEQEVfNFtCIkl0YDN3bGoka1FuJVk2fFJaMSsjMF0jUkwzOTBCdjFXaEkoY0dOUmptcVV5Wm02Kjl8SiQ0dkY3TjZLKjMkWVpSVnFKOisiZm9Cc0BjbHJYP3VGPyh1Rk5wXiwvMXR0RD1sRWFa'@;
put 'R1JgSDl2KWYkcXxkfDo7Q3gwZ0cjPEVleW87JX5BKmdJJk05LGgvQCJYUWVvXjUsRGtOZUI9VFdkMXJOX046Ult9U2FnVjFuKEdHL100LzEyUnZVYCZsbzlPS0VBSDFSUWpPWXZQNz95aXFFSGB1KjN6YFl6Qjk4KkN7ZSNuUHdwdz9gQWEkRUd0cl11WSpZYnVHUGd8alY1WV9eX3QsWT50KFJ5'@;
put 'bEcrLmFWMkZUOSlCbF9pR29MNGxrN0JiS3dMInk2PSFEZHRFZiYmPFFWTjV0cUN8YUpkOzx2QGdzYU9HTkVPcDIiTGhPP0s6bTghW2NtY0E2Tj9INHV+O2lHVVJ3YlpwNEc+ejN8TUEzcSZJTUpIX0c9elBWbSYyRVFsPyE8Wl09Qk9gQEMrbCt4eEpuOi8mKThbY0dnL3JsdjUxTmxTYDp1NWVp'@;
put 'OzBUcTVHcGVLI2FTMXRhe302VTxbPFt3UjouPF09JiMpeD5VOktVVF1uP3hgWDltdUQ1OyhwSCRlYDt5Rl9NKnNDKWVYSlU2MCQ+SXlWYStNbDZNSCR6JkVkIU1NdlR1Qkl0eFgmYC84NjxkfHVFVHAwZy45VS4wKV91LGN3QVJrcH0hckAoPW1OKXBkMEh8Vyk5ZldJYDJrZ2FiW0BdU2ZjVm0i'@;
put 'UWRYOWRdUHhJZlN6Ync0QDFIcjs2XS84NnQ2akYxRDxfSVJJO09TcWd4b19APzk1W09KMjFXYml1QnxmWEJfRD5DXWYmWWt8KkEuaUNwZ0VSSnp5KjJWYF8reFY8VyRzUnJoQ1RdPmpnO0hwVkBXZmlKVEhJZmNYPi9NIl9vWUhVdTxMU3E3dklTWi4sUXJ6eixdSWpyb3tFYkcjIStUPE8+SGxL'@;
put 'eiZge1M+JTFLKFBSI0oxWnQmTzk0XXxSOmJaSWlvME4xbWltPiFLejMmNFBrbU81fXxONF5UTmN7TzVoWjBGNWU1V2dkSjs5KnVMUFVFZjVAMShALixkT0FuZSkralkiY3s0U0k6fGZmeXgxbTVSVzpPWWY7TSZ3LFlZdlVGUHpoTDF3YFJuQktpL042eT1PM3NTOlpiNT1sNiklNDVTJHshJHZm'@;
put 'UHsmXjwxYUpbN1V1VmRIXjVTcFBUKUFUXy5PYnUoL3pBUGExNG8jYGFYPntWUTVAcEBSV3pidDViZXBkI3x1UD9baC5JNSYjLk95ITI2UGNSOmosXUNyX2YmXTY8SDhaUlFSIWgufUMhaVJRfjBVdWZ6PHJmQCZeelV3SF1tYVVTLjdJMjxOUzUodykiZU4wTG9hKVoqM1pWbjlSMl97ZDtnVFg1'@;
put 'PXRnRF08ezl0bS9MUWo+SXNvTltNWEx1eW9feS4xLCU8TV5oaFNHUWttQm4wbW00QVVgbFJ8ZC4yYCxHREV3bU1nNXBRPUJoOjw5O21bYV1SW2FVMTJRWz80cCtDVHMhYU5KLGc8T35veypkMnNLTnUlbU4kYl9Tck55bDErflBUJHxbezp3akNvPWFleWxJKEdgPFZAaEswP3UrWW1zNTY7MVQr'@;
put 'Y2JTYFNsZXVyZ0pBSzN5WSY+Ll5xQHt1cTBiclZkOFdYdyFBcEQ7cjE2LGEsMzFGZWFnJjB4W3lePSRzWnAwVlBJPCs8VDozJS9EeHtZcEU8PGdedVo8STtQJlR5Q3xtZ21sIyooWypCXmQySiVUV0lBZTg+VlpWVVFoVUswXU83YEJ7QzRnaD9adU43em86Tnsve19sfWdUJigrLj08cXA/Z2Zz'@;
put 'XTtHUF9TWzVUaUx4fk0xbD47c1EsKXg7QH5AZSJyNFVILGdzKCM5LFFkWEAzaEJdNmpILmwyIiwyeiYsUSR8b31maH1tXVc4IlZYWkw4TzEvZ2FwNjUvOm05VVJVOV9FR0IrZDJYVHJWb3tTdXdQS0pLPytfVnpeRGxoYW5LJjBrU0tQUVZZKlF5W0w9WUguaUo6d1UoeTBFU2g4Pn12W1phRmd2'@;
put 'KyUvV2RpI0VdIWI0bT03IWYySjEsXjxxOEArX1Y0bSV8RGpse25EPklAWFQlbTxJZDB2UjZNXWUzfV1FcCEhLEZiXUt5UVpBfGpWSGxoZ2dGUVtGMFsmOmJbQCU9ZkY0bV1bQyUkTTR2RkZ+XjlvdnZiMnl5UXtvd1c8Jk9xS0lGNV50fHl7KFtLcTRAbWtsPyh6YWN1YTslRTVlLilWRGx2RWty'@;
put 'fCI0PGgkQ0ZmLj93eXF3b2tWUWZ6OmZtdyNpKT06P1gxN0U/bWxfZX4+bWxBb1Y9T1g5YVFGZzg6IT1OaFVKRkw2fHVyaHAwbFlXOk01P2NscytkKUdYYWg4eTA0e0Z3MmkvNy5MLGFUaUZUQmQ3MnFIc2QxOTp6YkxSYUFvV1Z9bWVQZis/Y3ZdNTNjVC98VHRWbDwsaG9OSzRXVSFiVENIWlZn'@;
put 'cDphViw4MjJENkthPSFTcilROlZ1X3UiNVN2YnB0UWJFM11YWmgmZSFyTjRqRjh7eTclLkosWkgpYCh2UHdsRlE5VltlblFGPlQqaERfVkw7bU5AS2QhdWwqMF00dyNqfUc8SDZgZCkjdCxrYEtbM1FreE02Ondaa1RhTTsyJG5QPXIiPDkmU3BaI0g9PTpLNmQsNFV7OnpgKHwlO35pSX4kNnJo'@;
put 'WDZyWk07NiVybFtlNGpwbTxwdnxGI1E2b3tHZGt2TH4zd0x+PGEqcj56VzFCfCF9ejQsezlyaDJPdkg9PTo8c2Ehe1tEeE5bbl4mVU1oXmx0RHxHe3chZCg5ciUpPEhyaC9SLkVZVEFBQV16QUF7UXt5alhaWV13b05HcCwlR0heWFZSezFUUHppcExtWCMqQXdBQUFBQUFBQUFBSUF6IT5vZ0Qs'@;
put 'LmRrMmBudTVufnJnNyF4SS9KL3d5PCwpYjR3TjtjPjkvWCxSZmEhVW52VVRuSSI5UnlWXVB5JFtLPDZhNTl1a1dQe0UqfD8rYWE9QmFneVtMakg+MmBlZkJkd3ZxWFZ0QjRodTx3M2EjfkgwNzUpfihBWGR0PTRyM081N1BtJHZnZUNXcGImXShjTCNqfD04TFAzVXhWOHNtQ300SlVzS3tmP08p'@;
put 'Rml8T3lNO0pyTV1DUkJUbzBOdVVgMzltckVIdlR4Nl0oUmcsS0E2a2BKMDsoXXVHUyUmazBxcSQwUH4kXnNGeThFWXtsITs+NWZQKz9VekdTVjN4P09melB3RWNiR0Vgei9xWEF5REt3RENAYCpRRkRgM0NEcF5IPm1LW3xGTXB9M3N9XXs7RCZaJVs7MUJzUVdxKU4+VyxKJiYhR30vdWNhKWd9'@;
put 'TVJzcH5kKnRGSjBOKmBUeX5XNTA9MFhaRX5BODxdSVhvXi56dHMqaWhOIylhQTt4WWV4Q31sYUtoWEsoQjZ3Xz5TMjhMent2WDREUT9tbTBjOkp7VEdrKCNgOlo/fWReRi98KDR9JGk2eWwqO0dCe2RSXVhKTEt6UEZ4KjQ2PWdNOEdvI2NkOVpnfF1QQHFUbTRhQU9RJjhxSnQjeTZEITR0W21A'@;
put 'YXliT3hnZGs9VDtYSWhoJF5rV2BFWktjd1dVQlFtb0wyPSZjV35+JDc6TGQ1W0UhWDs6NCZydCFFJFVHMFh5PUZHX286NXJ6Y0BMZitVM3c9JS9+TEwrSzs4MjA0PiMuUC5bZ3V3cEJoWDBRRitZUj90QlRdRyJMciFESFtrUWFPRkc1W31JJHJbI0FUT0tmRkJ8NndGJnNafGNoLCUqN0ledCQv'@;
put 'blpMeiZadE09ZHg1OVhqZSE5TD95JVs2Q187ampgMEB1UXhwcFtONW5zJjxWTjdESVFvaXw9Unw5ZSlLdjY2alc8YSMsRWNOV1AldU0wODFQSCk6ZF4ucVM6bjtOYXJoYFlAW3MuJi44L3Z3ek11Z2I6PmF0XW48SV4waHlTZyhUMiNeRitwPnhoPXpwUTZNJkdUS3siXiF+S1BqSmJ6IV1Qe2s2'@;
put 'VGQuVkt1R0JWWyJ3NDtyaFJQe0dDdzB3ckE8YFc8XXd+YyNPL2F2dV9CY2w8MVFNNjxkY2JtOkZSdD4qTFRudnxTNFF4aVtPc31lVmdUcnR0I3pvSyhMNGJgdS9WNiJwRnAvJX5EVTNXeDchIjpBJkBYW3JmT35TLGtsRmtic080KVNeWl08P1BGMXNWYVQ2L2dbeXc+czRLTF1LK1t4JCFUWVVT'@;
put 'MD1pRXAscnshYiZWXklYZ10yYCksb1VpWHArXk1sQWh6YHZ8SVQyVjwhZ2IpYEl1ci51SXFvOWlOLiUySmJkOiJYRFd+KyhpRlcmRDwvaSpQdCEmckV9SlNOKG8hdW82eWhpfF5rWmQ+aUU3b3EhYnJLVitjU2pgaVsuVy9QW1VqV1J5JGNYbVIyKVBveTAvM2k/S004ZGpNL1hTak5gbiEiRmtL'@;
put 'NDthKDJVTz1WeGdkK1RlTyY8I1FzeiJAYVlkUn4uQno8Kmc/Uix9TVhWYDRSYm18bS9JNTgjKkA4Qyt4JFRyI3ZKIVk0N0ZrVT1gX1JYa14oJldtU0s/N1U1UXE+Wjg2fT5RKHFdNFFtbHskZypqaDA9MVYrNUtpMFEsPH5MdlhdU0YmPjAxeDZQUmZ2NTl4L19+X3dSdEVYe3lFb3oxaCZPa1BO'@;
put 'ZS8yWEZHd2hgdUMub1hHOkNZLm9taG1hLHJiXTFBPWgxbkJGKEgwY0F5JipNT2ROV05oTjpsVkI6ViltP2gzKnZHRld2M1Vsaj9FRSpCYyVBPm1jIywhdlt9XipCdHZGUXJUd094cjV4NzYrcEV8KiViaDlSQzFbaVNCb1A+aWF5R1BlM3hyV0AyR3JQeE91SkI0W0lIdjB4IklGezAwRzJ8JGgj'@;
put 'QlosfX1yc3VQU0RRRzk1WTc8I2JHbE9CZColcmp0NU4vP19jUzhGWCVoYzE+XU52WyhRUkp9V2dbSXtRNFgqXzBiNCosXWw4KUpFaHhMNClyZWpIQSh2RzNlPy5HXVUoSCU/fEQjaWdMSlhuQmx4WTlpRlVwTGtDUGteQiYpRCUhP31mXSN8blNac1QxKXdILy5maVlQRkN4TElJX1tJTihaM0sm'@;
put 'OUtILjcjYm57aERvT3RnLikkQ0Q3UlFuKlJ3NE1fclJFS0tRem1TKj4vV1IhUTJpRHxTIS50RjhdI09DZlFIc01WTF8mMCZeWEtGe2VJcWJ1cldjPCVnSXd1XihCeDpqPzU7PDssUTh9e08ybXt6I1p3NyZJRWBRVnAuRChHZTxzLlEiPVB0OUohbyYuZUk8b1MobSxXQlQ3a0FJNkU8KTs1RT8q'@;
put 'ZDREdks8KzlvLz8vbnUqV3xWNlVJaHJmI3QvXVklLnBgOmNgPWdJSWJFU2lAKkF3QDMueW11eGR4cTFIaD17W2x1YXhkdXR+L1plYWU+cl5sa0QxMSgxSihZYXAiVndvKihGfDN3Jnd7SVhXZm9sWkdgby5mWVR1RTEhMV0xQVIicVREOTpkNCowbjF0UF1+TXgpd0ltSyp5WUxUS15RPl1mb0Yq'@;
put 'bGVKdlg8SypWMkkwNyhjZmN0VjpNelVqYFBWKmt0QywsbzoreFFnWGslc1h2dX0xQlNiSDwvMFtfZVEvXyJlV0NMbnMpMDR0O0VQT2U2UWg3ekNCcDFeVkVsUCY1c1VWZldEY002RV1ydVA0Qms9XTd5NUkhdCFpWkVwYk1GSCY3Q0hjXV9YME1DdHI/ZUIhaSQxKlBvMXE5OHpQSmkuMHlQUEM+'@;
put 'UztOZlp+eXdee1AyU1drNzgmPUAmPHYqclQzeTZ5MlslV3FedEtIdEVqZTtldUJPN0Z4fD80TyJvUHNSYERdYXdPTWVhKX5CMGtnKVJAPl94NXdmR09ZbjNtPnF2JHw2KiQoOGpVQDt1bW1ENTs3PyJTPl8xX153eCg0YzxbekFvem5FTTFhYyF+SDV2S0hMQTQwbDRPfWNZQ0BKaTQyVWA3TylQ'@;
put 'JV5LPkM+aDMjOyhCJls1ajksaFdTPlFvVjJBKVk+TXhhNVgqUTpocD1wTkQoSGhYIlYjenNaaERtSjUqWVsjVXReYzRhdyNfVXBaam9wQ0B3cHE+PD9STz9aJW4+PmFaMEJTO0M4MEN5ZiFRdXZrVEpodilCc1UpOSozNCNjOXhpdit+NVFkYyQ7UipOTElTP2lPPS8qL2oqWEE9SmpacS93W0Vg'@;
put 'OjVwfVciL0RSfGQzYCQkXXx+cjFYQTglZjRpPnpXNDIzXShIZS4/K2AjOzZWZnM0MiloajpYViY0IjlGKlI6KmBXczQ6OXBfWiY1MHtbW2o+QVcxSypIUGEwOjJVV0JreDg+SVhDbUJmYW9hMFBecV9IMiQuRmtJcHoieXBaN21TYmc9ZXt6fXFXTzpCQ2F7MXY+M2h2d0lGSjhJUDUjbHd3endi'@;
put 'Rzc8JEtMWTEuV2lkcX4xbzRSN2lEKUNwdXcuSG4jZFpILEtsMUkwPj12V340RDdLeW1MO1g8dGdXckwqMkEoYyY+R111JEYqSCtGUF82JVR9YUcrL1BXRF9MPTwmRTBVNS99TU0zWS4xajYiRzMwOTFAem1LQTFtemtSQWV+QT9JMlkrOVNkVz9ANGRZbG9pTF9AKClMOUZdNToqXnUmLCV9Lzov'@;
put 'fXJTTFlROyJxVTlVW0hpKWM1MTBvYksySjc3aG4rdj17YihwZkIhLGxXPHI4YnNZIWFTMGQhO1B7QntLOD9dVC9rUjBZSWshJU93LCVMe1hBcnhPR1dNMm5lTDFNdjBZWUIifUUkSEZ9TyZ1OCh6fHQqQDF8LmV2WjR2NWc1bFhKPWo3UVk+PElTWWJqTipSQEZQTFVUIzpddWMyS3psOEBENilo'@;
put 'WWZGNntlJmpqMz1gamFrZUpzNG4jY0Y1YWxCZ3oySDwsS1MmN0s2NntrOCVGbnNvV2ZyKV81e0F8cHhhbHc7KjsqZW9DU0o5VTVjSDhKalF4S1Elc00iaFQ+P1UwQXhVIzphLHM3d2Z0OzYqaV1tZGRwRClhdGxlJiEqYlU8YSo7aWxbXyZoSDFSdlMrL299UG43STMrM2YkUVlaJCw3S3pgQkxS'@;
put 'dWsiLmIqd1pUVWpEZWtqOT4oNEljP1AxTj41cyhTQ3RpcFZNR2d3R1lAbzBnQEhacz86bXYlND8qQWN8aTd+MW5Zb15JeUF5dU5+UDldSHo6T0giJExOa0l8MGA2U1psQFlxWyIoRWxXWGZtezRsVi5MP3hZKF8kVjtjRDBiNCgmdV9kcWY8PF0yZ2EyNGpIWCZ+R3ZwbXY0MXdaOzVyaHYpeXJi'@;
put 'N1FgNmpBTSJyYUpTaXt8ZDtwcCVEdFUiNipWdzdRdlF5QipnflpKe2x0IyNAYFs9Ti9WS2dGQExuSFhXQ0pmI150VDp5SjJpUH1fcVk5Sy84RjVqLCRnME9gYWg1fmV0NFB7PilyeVNGWyVmWWIzM3YiSn5XaEBWNVooUVZBVikxdmBJXy8/KjZUYDl+fnpdWX13Z0xTc2dFb2U1ZH5sWjc/SDRH'@;
put 'Mko/elglbD19IUdeSDJbSUNFVSZkYngmRntUYHptNyQoO29NcXtMLF9YS2tGRiUucG86bDVVaiF+eTRLUmB7UkpPNSg4YSNXaS5HOXFDSDJndzYvO2M8cy9oQ0BtP0VWdzp5T29tbkc5bSxabDMra0tyIyo0WkAlalJIUCVFYjNgQEFbKD1uYlEhc1t2NWBEbnFQfkIpKzYiek4kbSl1LihdOU9M'@;
put 'MiNOTTpJcmchNUJXfFgrS1hwQmtESW5rYjBvOTdCfXo7RDMuKStMJTJlS0BFXjooVjNVc0FmQFY4SF0qbzVuWX4sQ09eOm0lM1N1V0pbIXBvLzlgSkteeVd4RGxYMFkpUSsrIyg6SEU1MiUqRmZCQVldI181elZQKW1YNyMjNEYzRGQzWE1AfnlQZV8pLmpPQkgwaCM1cjpfZVlbNFR9JDR6byJW'@;
put 'PkN2TFJpWVlYS2UwWltCKHouPl83UmYxKzpRR0NYJDshJEhyJDF8b2xVemMkRSxQdS5nX34+L05iODIxTm0pT0dvYFo/NzNgeGgqWEBnPXlFYGIvMG80QGZ7JnxrMFR4KThUNkhlTiE6QVNFI3QiOk1NeXRMN3ZJVlZnMzgpbWU5PmV2I3VbKlBvJUxscCNfYXokS2Ura3xKQkJIM2N7bWRAP1Ii'@;
put 'USlSMldYSmdTSmg2NCRXaEBqd2dhYj0iRmBjNkxtXWVmLiMmRihSVG95cEozJWowZDx5SUxVaT1sJXA3IU0xLjJIQ2JOXWR8LylNaUJBK3JJXiEkJl05KVhvJCpXNjRLSSthJT0pa1NjMUp0OjJZYUBBKHJ1XWU5ODAhfHs/Rk9oYUR0MWo2Z0VwZT48IihORDlfRGVGQzZnITpkO3pdPHl5YCxd'@;
put 'MmlCajRaYUJETndRd1pwdkV9a0BhVTZOLlV4NU5eVShPeU1+PF9zb3lwZlBSeVlJemRpengpXV11JGguUmdSfTY0dytEL055NCQ1T246KEhnOUFaX3MjZSwhNnV8dmFqbDYraX5NQTQ9Pn0sKzEzLitwd3ddYWJVV2pXXW5RYF94fj10ZDF3TGs6V3lIenhyc1QhfDJWIUk8QE8mbVc2RXZabFVh'@;
put 'SXg+cVFzdG9MJWYpREtYcntmaUpNc11hXiY5SVU8d1BUSCJqcnBLfTMyNSVhdCYjdTJucmVlRGJGLzgxdDdMZ1NUZWRqY0JsVXI/S1sjMHFMX2RuTWZMNkNYamZHJVZEUCspMjptNTR5TykyVWRhfXpYIUVRM1h7UVUoW00odjMpan17SiZgIVdZYngwdUpELH5tS3xTTV5NdE5RX2B8YHk0PW0w'@;
put 'YERwKGFgLkRDJENbMjpSJkNOM3thUmYxa14pKGpaUUJfLzRLUTc9cCF1LlFDeyFHNmVDKVFpWHkkeyJrWHIjW20pQSRteXd1LmNeQyJOUTU4aHIjJlBpQmJMPDZTYF5NeXxRbEhCczI0fC4zTCF8bVlkU3ZvdXd3emg5fDtufi9QTEdhaGlNL0RIZFNUOS9nVz0lZjcsX1NqNGYwfW5ITXhBXUJ0'@;
put 'dH5NU1F9ZyRlJUBaXntZVEhZPTxTQSkpYXYldWNdd3l6NmAibjpGZzJTcCthJTMoI2pAT3gyXzJgIy4jODlyWVkyXWByakN9d0N4VnBVekR9TTUhZmc4OWpnREpLMyllfl4pI2g8JSF+JEFLXyMjaUsiRCkmMHgiUiQ8b31GUEl1dzFDYXBTZ0g1b1E4Uns6cihVREJoQEA/ZiIxRyxRUGRTV145'@;
put 'Jj93R31lPWttMzNBOHMmMzZNVEI5Mnc0IlRVaWhAZXd+Y30uPjUpblpNVnw1RiU5PjcuSS9ZL3VOZyJZJSZUQjRFUFtPP3lDaFMubDM5QCkkdD9fXVIpVD19dWJbRmExbnVSTXF4TyEmS2kwc1IsdSVxIUgxVHM3Mndbd3IjPE0uRkpZcyNPPy9MO3svcTIucjIjSzhOSSEqJSJhbSgrSWNbaj54'@;
put 'PUhfRV8kI2c4ZGk+V2FEcy4zLiJxOWVAYEhMUD8qfm9Qc01kTlVFYms1RmJzW3ZDd2ZFOVdKRXE5NDhDSDx+TD9naVk7TF5ZVE1CN3d5QGclNnQoMmR6T15GcjRrQixfVUdAUXh0W2h8TkErQ3lTVmomb0ppZjg1UVk4YmAqaDl1LkxxQWFQRV55NTFZJiY6MGhXaUAma3QzN252aUxzVWcqQ3pO'@;
put 'N182YT58ISU9VDg2VX49XSk8XkdLbVo/T0hIO1pmJiwwQGkxWTQ3QE9xbnleMTRgQmY5ZUdrMEpadDFxJj9xKGxlZl1DY2RTIU5FPGAqXUZRMz8oWztbOSo0ckB3cy9tczc9TSpdaC5kKClCbjZgQFZ3RnpfJWM5SSQsRyZRWk9CcVNsTFE6eW1UdyF+L1RBTHpvNHIoS11nXkIuUnVyITpedkBI'@;
put 'Smw6aXJPNkg9Q31lJEMwbVB1IyJRfkhEXjg4OVBARzxaJmRKVEAhP3BQR0wuJWMwUDlKeWVEOUAiPmhVZElCU2UhYzA+Tko3Q0ZjVE1hbX07JWElQEQ9Ij57fjxpMXluUkI5QDExMF8uXy5vW2w9X3IiMSk1L24+LzhSMytSdHFmTWIrcWU7ejJQXSN8NWE/Q34+ZEJLVlY+d0p0R1RgS0VVeEZ+'@;
put 'SSx0bmw7NFdDVEk2PlRiWSRhWV1ULzdaVVZnWSo+MGMudmooJEd6RGg6JkVoUEk9XVFDKW9LTEJhTmw2UDd3S2tsJHVkb3U+XUZzTU03SFhhRFM+O2BkZUpqfihYJUc6Lip0Mkt8QiZ6Ml1kInUrZDF1bF93Om4wVUJgWVkhRGlEZnZPYzpBOFVNQiU5azRRNGdCK24wL0dRe11EdzNkMGswIktm'@;
put 'TFk9Li4zcTkqU1V1VXx0YUQiTFRHZjQ/My9tImksMjkhSzxJcmpNPmk6dXg4UnNGK2ZVPC9nRVojVSt8Jj5OQkkjNyNFXl5CMS5KTj09YnZrSUowNG1mXzxWcVBHfE8xN24xKGhXNWx+IiJTJmAwPWwiO2JEODFmSFVfTWZhbmtrTVJ2RC90JSV4YH0oZmFUTSEzZn5wQjkxeUBFOWAlIWI0UjNG'@;
put 'L2NEKVcvaTNvNDxJTDJzRi9VRDV3T3RadXElSUsyNUY1aCs+ZDpAZSF3XlJWT3VkWjckPjcleCY+cyFNN19NY2dWJmF+OTRnTyROU0dmL2NTaXk6IVZKciZ7Lmc3Zyp9ZFRoYDBwUWdyZmclZFJFJmQvbF1tclFoYEdLP1daODpnLko5Z09QYHI5RmIoaUIyMHJkaUBYNCJmY1hkXSUiQS5ZTmAk'@;
put 'QlQ4OF1VT35fV0dqfGYwOVJBLFFEYko4NitPRF9NWjI3QWcifClpcU1dVX0oSHtdQC93NEBdVmZHdVV2fixbemw0aUtCPHdJYWhKXWw5QzwkJj4zalUzfUdkUn4hcEk/KXlhIXFSIVVXSFBZRXdlTSMoNDtEOzd0LmAzNiNGbE0hLHZ1N2csOSg6TGUxbUNPQnY0YCtvPjspKiwuNip4dipGVCFQ'@;
put 'ZHlvdWd3P35LQCZgPio9Smc4IkRdMit4JDdhc1gxOjVJayFZKyY6Izkjbl9ZYiV0ZHM8bFRdKEdvdHx3SyZFYHxiOkw/UUo4ejo2cWVsbykudVtvfWtuamc0RHpAJHVBMldGK2AsZlIjQTtWXW4hYFcyKFpfWntCWzA1WTx2IkRXdi58d0ZBNVppKCFWYGRiMk9iR0lCcnA8K3FRfW4uNE88a1F4'@;
put 'W11UYDlmZ3FGKGU5OmovVCpjeXB0KjpgUXNJOVd5JShsdU9DfTgxS0pSP2VnSlBESkp0SEUqMkFlb3d1XWpQcUVvMEtMfTB7eWpTWnpQe3JDRXBLXzhGXVswOTB9S0NaVXJlOD1OeyRncS9rb2RjSGU8SnFSPShEVGI7eDZHTEM1Z0c+LzBNXn49P2M3WkZgbF4oeE9lU119RTBsYF4wZCQzdW5P'@;
put 'NmcjQzM1QlZJXmc6OXhqT3RSMWJmYElVT2hBUmM9NSNCTSNsS2RmUipXeUJhRjpLZyZiOn5OQ30jX1ttaUk1QTRnPkg/encyPlZfMyZmTHRgZmpRIl4sRHxiUD5daTF8MGVQW2MrZFtwODJPUWBQTCgzQTJqIi9AJCNhc1hZamlaaEdWJndmbFllM0I4QHxVN3p5WH0qd080Pj1zVmE2LkJaInsq'@;
put 'SV9dPV5mI2ZqQ3Y5UlZzST1AXiphbmZoNCtNO3lqcCkud1BBZlJyUiV4cHhhSGZMRTZMRmZKR11HVUVqJiNlfmpOc0NXczFPRXJLLDx0V3RwczUqU1M8M3FDeEd7b104SXtXfmJGKkJ4LnZZa31qdWtmcHpGfTJaLHUlXkcjK3lYJE1pRysmNyg1fUUobTpbbXpxcUR9d3FRRH52TkFVZTIlYDMh'@;
put 'dStvbHVIIWZ4PWpeWFF3OTFCQn1VTGxyQylCSyl0XXtCSjVmLjc1dDc9fUt+KmAzRG96c2VSI1I3V3d2LERUPSlMXn1RL21ILCY/ZXhofWBFaXhUXSomUDB7aExKb21eP0VtblVmSUdPOTtmPj1TcDJZXys+NSlJYC8/JGZbWGRMMHdra3xONTA7dzV5aFAqfEdKPVUrJnV3c20xMSlMb1smZnVi'@;
put 'MDdfT1dGb1tfezksYiQ8QlZxOn4kMTVfZ0I1dWh7Q3MvaD16Z312JFFpR01QVD1xaiwzRFkuZyJydUZ2dXF3STw+MEFvPDN0ZF9XU3woczJYKTdme2ZDez9Be0k+RSt2I2clQHomdEBTTEJaOHkpL0hxUWpvZXcodUooY2thfjRzKC8kZnJbdGZdcz0hXW5AVXs2LENlUDc6N3U1d1hodU5ecWE/'@;
put 'e1JIfW1eMnVecGRYOjtFNWY3fH1ve3NBImJzNCVudT9HNSp2WGorfkJfVWs3PjpPa2U3US8uQSNHOlZwPSsrNE5Cci9iK1VCd1hAcndnaU5QLHE7UDh9UXRUP0dwcnIvR30wXVVjNihwREM7XWwvR0lLZVcyPk9+JG89QHgzJUdwRmB9KmlyKlhSWHxDZFlkdEdPKiZoRmBSOTY+WG48Vy84S1lv'@;
put 'ayZaXiVQUSh5OlJgKjxnRm1BPmV3b3gsYGpvL31APDZkI0VrPCQqaGNzZHNFfE8xSXViOV5rb11aWGpHcXZNKXFYfiM7TlIzfUFRflojdyZ2Vz98fGI2LH1MZEVlWF8hd2s+c3JOMSpsZmE2RyZZbmM7K1FEW348Vy5JWkR0Qyg/eEYpMEw0OSFNbnpkd2koRF5oRWFXM355YSR+S0x7czVIVCpF'@;
put 'X0ZyU0tLcD5ZP2s1TiN4XmVwZTxbPTRGRTZ8OyErTFVXN1c+LCUwQ14/P2xdc3xXWV95YyFidnx+bmtZb0N0WzdZL1RZQD8vI3dbL2pEKz4pMEJ7ZnxXXmN1VlVET00vK34idEZmUEY2UitRVXk7RXR9VFVecUVJcGRtWlA8YDVFSC9ralRaUSJCMzxTdkd7XVloY0E/aTswNjY8Zyo/fFBXWm17'@;
put 'R2lvJkZjOGAuZys+QjgjUCVJamlJcTVVe3V2dzZjens9RzA/VjwockBQbUNnTnJ7THxsIV0mMUtDWWZ0JnFdXlk7Ly8kPCNwVUc0cyxAOHZtM0V8YUVJdilVKmNNZCVuOTd9Tyl0P3kmPyQqfSpnfUpaYkFhLm1jIStufWhJY0wsKjU7PH5WZlsiYiNCbTd2U34sTjlPdmhvJF1UU3pDLDFOPz0k'@;
put 'JHVrbjFGd35sNjtHKU08RzJLJENuZXQqOH1QdDNEVj5HQy5fOG5fa3dgWXdKNmh4UXR3fClHIV1QUD18X0JCV1IzNyNHaHRHbjRKSlY2M1hzMWhqaEAkMko3JXQqTHM7cTc5PXpqMV5MOTJqZV5dWTx2ZHAmWH59e0RHKmJFeT9qNjt+V3t7flR3an5jRjVQS1k0OTBgZDVaYH1DTit4V0tjKSlT'@;
put 'VDUmMn4ldlgpfjRPVCp8JVJRYiokMVdtTVR6ckZhcj1GNCFEe1AoWC9dYCY7bDJDQ181V1MuVFNeMGcjMFs3ckE7d3IudnF5Sj5KRVA5I1VDRl8wMUowcEVmdFUqcWRJMjUlVUZXVTdPPSI3QnprcHpdcktESC59e04sdiQid11xRiVATXRmQmpdWTk/LE5xO1tBNTo5V3BoZ3huX2UxW0V4KG5V'@;
put 'eTdQamBSNTMqbTBoLy5HYnA1NS89IjgyX2E7ST9gY05OPiVUSlhIVE1ZaGolJkB5LmouLDxVNXFeZH1mWUU6WmhqfEVfS0NbMVZAWEdUMkNlbElOJXBONE1mTntLaSYlWnhBfiFrRmZNNFJWMVIqfFs8cVJ5VHNpPT8+bUAmRyxKVWhNbEklaSFfKGRMZD9FRnJ4bXk9X1F7TUwlVTxSXntJeSlC'@;
put 'NWR3VXE4L3RxQ1VAJGpGMS83RSxbZVdtaDpSZHluaT5oZ2c2WS93b35sP1dlVyJrL0J8WyhJY1VLOztEIWFgZEo3UCtOQjdaPk1aNilsTXVIbnFqUzdxXSZaIT1waTBtaXR3LFB7ZWJwSjlYP0xFZTIubzwjQkExUzQ8dyRAaiVuTCVJRy9nOCFNOXp4IVJFOUUuLlUjOj1lQ20xPzV2WlVxYjts'@;
put 'KWEiOUwvejJFe2VRK2BROnNfZDB6VylXdEUoYX43aF5UVXhicHteUiVNal8/WTUkR15wYitPdl8zdX0wdjRXeDZfSXVaPE8mMGlUUGRvQGZDQV40OEtwKmF+U3MueHErLj0/OXpUcV89JHF0InhSW3tCc1FLX0NGaEhRQy5wUishemc1RnJGUFslRlo3OTBEPUh9SmBPe1c3Tm11N2xHRnljSCxC'@;
put 'QTNDdEJ3TWU0dFRNfV0yaH1KUXFfK1lOfGczcikqaEBERHxIY2xMMTBKM3s5L1g4Vyp+SXJwcTQzQlNwRFE7Qm13Nj46M0tJZHFlUDVzLExbSVReWEF5d1pFbWlDR1YlXUtCVF5tQSw3VkZVZHRjMiEuMHplRSpDXm50eGlicXxVTDJ7dF5xdTVfRSksazRhXVBiYEN9KHlxKSN3MXdtMyRNLzVV'@;
put 'OFdoQj4mbT1ufUEkfVVBQGdnWXZadVN7Qi5aYiV1YmZqYW95UUYkVllTeXNKdlBDIkN2cntdZFZjWklQM29ndXFUXlZ9NmZmaVNRdDVINzlSPyNPcF0oeH44TTFTNzZRa0VAWXBManEkaCJISiY6MkooRklWeVo/UlVBTEoya2cqSEMuImsmOnVoejFrSVh4XUhjbG1YfEdxNSZub2dMaHEzZ1Il'@;
put 'bHkrIjR+JENxKWBpOUMlJSMqc1o+PDcvW20qdVg8SD9sNndTMWxUTywuSCkzcUNTNyx6NVsjT0MuUUI8JTVYLzpfJm5MIVVbXzVSeFIhaVtFUSExfDYwbHA4Njs7NUI4aD1SJDg7dnA+THNZVU47UGllZn5OR0RTVjpsWl9HbkdYYGBuPWpGXz44RDBXSFJCYzNtI017JUghd0NfMDR4eS5PKiRp'@;
put 'ak8hcituW0ZXZEFibXZFdWpEZU96V30/YiU4Vm40W0B9QE1lNSRHd2opO2pGOlshIjkvaEg/PiEkRUlLVGxgfCFYcz5TPlBhTEk0SEt1YFleYnFOeytaOF1kUk5dUnx4LGhGMSpNKV4sYkkzfnE3biJjZiN7JVF+TV0oVktqTEZXPCRJVn1Pa3E5XW5ySXBKZHtuNjhoMXR8SHtGVzAwU3I9NEoo'@;
put 'UTs8SS9VdnhIOkhaMlVianoqe3U1L211O28kWm9JKyx4XT5ebkN9W2NtNVMlO01WeUdHbVd5Y2BURkY7VEQjanM+IzkzKTFMI1d7d1AlMj80PEJHUzEkcXcxZSIjTSY4aHlxYjxkJUVHNHE0dzVsUj1ONktpYXNGcjdwMk1YYXUieUg0QWdEMS45Izd1NGBLW0x8fE81L2JXUFpNWFliJU1hPEck'@;
put 'JlZPZThMVzV2SWR9Y1tTNTsuOWxFNHErQTQ2VXpbX2Q3YT5vWG1iX2U8SW14NXtZQCl5IXJPLm53Z302Jn4+I0UwKTY/MWAqUSxwNll9fSljdiVkdGdVe1QyVVI4PEBATWJYYyxJeztQWHJIdyY7InZoK0p5XjxEVEhjSypSSEE3UnshKW5zc2dkb2p9VHo+XkswSkppI1c4WVE8PnowPH0jdmc3'@;
put 'dFZpS3dtR1ozeldAbFRnRDg8NzEpZnhsNUJOKEt3NklDfHQ6ayY0QElmK1phfjl3NV5+Tlt6V0RUaWF6MFZaa00uOVNMdUc/LyNJSHAjLn51K0NYSWtxUWJ4S0ArST5rPlNwbTguTWI0JjZIRiZbdmpgbncsJTNGekt+JUI0MSwpdHZpYyZlaEN9QWdwJVcmNVVNYCZoREdLUjdAbDZSSkE0PnVv'@;
put 'WF0xfDI0OE51X2I3RFEqUkowPUAsTTJmRU5bfV91JlV1Qjp+XmFnUUo/NSgjK0JUY2dnU2BHJjZ+ZjBfMzo8TXl1QixKV0BvMXduY09nWTciTE9NOXwiekthb15CfkhrOVt1YCtoYUN6WjJpN1dJUzhfOD5vVCEkKDpUKmYhaEw/IyZKT1RkXks4bUR9c31hUGJ4bFJqVU9yaHNeaEhKJkZeeUhE'@;
put 'S1hyOkt4OHQhN2tQKHE2aEtFTnsxLlZVVX49ZVdsT2picWAhOmRHcHlpMys1XXU/b1IwOncva3E6MXdbKClWO3xtMmV1OT9UbyY+PkRrYSQsPSRAS0V3LClIcEZhbEUiU0ZJO3Ypc0dzUEp9PCg4IkQ4ZHx7RmtVc29JbkdJb3FsfEtQIWhGYUUrfE4hJVo6Tntud3k/d3w1c2RNQlQ1K28sR0tY'@;
put 'VW0jXio1XkElVFliTHFzOnhaV2lKKC41Ryx4U0dga3wxSSJsQHo7fE8jcmNhRWM9LGl9XSl1YUducWNPSVkrd3BibF1VO1hVbTQrd1dJMlh8NVpAVlVuUyMoY2YyJF9XY0IvM1A1X1Q6SUYkZnB3TiJ6V3E3d0lvfVNAWV9BKT1waTd2PzpYUS52ciJ8NmtMQzkhXiN6ZGJRVm88T3RMOHY1SCtI'@;
put 'PnpQU3JwaW5AUUBmN0NefTxrPDlNVmhHIl5zPT5aLyZvMVlMRDxQMk1hTixyenlTeGZ6NXZvNUowYzo6YCZ5SC81Llc3elRHbjomSUs3WWRiY0B8JXp6aS8lP3hmPXtTMU9aZC9HN1NLWmQ2fV1WZlBJdHo4THtSfWdUfEE+Y15IZ140dzZPZ1lNV0wyZEdOTlJyTyV2aFtXU2RtYnQuc0tbcUhK'@;
put 'WUp2PiteIllLT0Bkdkk7OyJTenFzLiNRMEl8WWwrNTQ1MF5CV1ZfVyliKmo3d3p3fSR9eSV0X3xFR14qRUxDNG48cHhjKmJaQWdoZlMhdUtGYVkjO0lLfSpeSzU0PFBiajZdP0pfcW58Wz1FciUvZ0NFPzspS2Y3ZGpdLlhpKG1bQyxpe3VlYF5mISI2KmhpOFZAa3svU1V5eixxVHMrLmF3ckJM'@;
put 'cU9JQmpCXjZ7eHVeTipoeywrVCZed3RmeFBqQVJINjRycEFDOG5eel9nU183YVtvZHlmV0VkVUxePGVpJDY5NFovKHJSb3kpeDFAR1liKzJONHcrelc/U2d+V2ose0xUKUE6VEgyRD5pOTZdNl5QNkVMX0YyLzEvLER4bU8kXj9qITQ1cn1AZkZvWnRDWHIqeHR+NXJCZVNON2VNW1k4dEldIUNP'@;
put 'M3kyOGNlX0AxR0xddC5yPDBoPnw1T1QpMGZZO0V2MzV6OEkiUnpSV21JSVV0dE0mVC94fi5Ia3pWeElEcnRZd1s6dVZHYiNKfEVIL2slc3NVYUUrcFNMUCEhK1omdW4+eW5WX1N2KXRhRzo6I3pRYnxORGkmJWdKJlYyNTwjbTx1bk9VZVE9KkVaX2F0ampyKHZEVWQyPVZJWEAoWj4hd1I0XTp0'@;
put 'VG9zUmpUWXRPQ2x2U2FuTnxLPXFufX5oblpjYmRDbUooIjc8Ny9pOnEqUClaX0w7PDxeR21FX2I3fVMjNiV4PjZnfixnTClLVzJIYnY5IjBtLjxFTCRuYSZLWDVfWzdsNHFQNiNbMT40Qk99KCFHVVdHM3k2dGhAY3opO1FeZiVgSWxsZVslRVNQRnUyeEsydjUjWSVwblYyMWJjb1EsL1RKbXlX'@;
put 'VUBXRG5SNkxddlNyPyJwKWcyT0hOaz1fYmAySC91Ln05b0IqMSxNOEEuIko0ezB9dmtyOXdJLjg2RCtSWDtUUDh+LF9bQn0vYXVzL35rcyQpPytEdjRCd3c7WXwsWzsvLEZBXmM4L0VROSE+Jjg1XXAuMy44flE5R2dPPj5dTj1uSnh7X01DYyxNSnx0VGZXKEM9O1VrM3w+RnpPNCVYJU1nQ2k1'@;
put 'bEd4KCtjKV1OKEJxKD99JHZwK0kvU1FPMzZXbjo3VTg9byJDKHhdSGsvWD5xVn0wWGNebXlXVFJBMT1NXjErNlc0YXEqbDhSWm8mbWtjSTIuK3JhVDQ0I2szJTpDdS5eZHtLJENQSTd7bXwuR3wzN2VheV0pSS9qNG5rKn0qbFkyNWJ3e0JrcylseXZHcX1vSUJFJj5JO0xmfFZfN2hdW1tHJCU3'@;
put 'JkBlUElyOEVpNGxYMD5nMjxLQWdse345QlcpT0IkXy4oTGdyWThXSnMpOmJRX1JQTHtaMWIoaiohVVYvUGlgbD5iWGtgbUIme2c1O2chal1JQDg4ZiZnLlM8fnxdNUNiPU9vT1RAQ2oqbD1gdl09Ll9EQnEvKDhZRC5FUDs1WlN0WTVXZ3BZZGkkR1MxZyxML3lOVDdqNTdlRG8pY0gwS29qUDJk'@;
put 'e0ZJQS5qKD07NUpCYzQsKWNic0k3JHJ5dy5rIXQyYUY8MGVHPFg6KDhDUE5xVjc3cWkpLnBxQ2BKekhIZnxMN1EzayMsNjpzdEQ4TUJmfWooJilPbUZmK1U7XyN7NEg0PyxeRj0pbGlAWExmY2hLVWFQYTxBR0AqNCh5djR+Q2YyLkJLQHxJX2Q3ajQ9Mm9jOitAaEs9e1BmJX1jNnJdInJ0cXs0'@;
put 'bzhAbHhaUDh+TXBsZXpUPV5lSTh7S3BlZn5JM1RLYXUjMH1AYC5jSFIsT2Z1IUteRV85SD1+ZGxIXkZwO1ZrMjZNZnpyI3tZPS9uNEBbTjBDQ2k9OUYuN14/diM3WWtEW2JEam4yLGh0P0srN0MwVmJDKHw/c0QjdEcwZVN3VUNoWnx8WEhkIVBEdFVvOEZjWH1KTmorSDVWQm8+aiQ2cSZCYH1I'@;
put 'I0kzWyNrMlYvb2AmXj06VER2PkNDS3hmMWxnJnF5QkZOPTtJfmw5VVQ8NllOOzRXQHgjOTpRIWI5Kz1bKzR6dGgyUCU2MXd2O012aG5BSFQ0d1JDZT9rJF1+e1Z6PWA3eEwmT0UqNWBkJH1BeykhP2pzUyEia0dBRzFNU2J4WlUmO15QTlU9aHZMZEgzdjV9aWkzaUNzXlJscXY1N2prIld9NT9L'@;
put 'biN3amw4dnJdb0RxNjNFOypbWVM5SnBuKCU6LzRofXFkYjIxYlNITDhmZE1udipjQ344TT5bYiQ2M3FNVSJoSCVIIj9VbSFVclticl99MWJEbCwxZCpqa01JJFFZSUhnMl4raUlbWEh1Z2UzQUhPfTVpTD0zKywoW3lCKkh9YiI1QTJaQmN0S1NjeiguWThMQHZkS0lqY3lEMkEuPCtRRkZaUTkz'@;
put 'JlZsJXtTdlR+KVMwfS82NzY/ejplc3AqRnlzI0R4JiQlZEdgdTpEYUxhVX5bTWwjdTQ+TjVTfHFBcDdwPyIoPmNOcjc3WGtKRC5nS1RLajxEcVhsZDRxVEp1XndZK3c2TiNtUExAcUhbbUxeVmdlLHVkKyJyWU9SWk5TYUA0UGA2SjBWIUYuTXJUY0VjWVpHWH1ZVjBrYzUoTDRZTnNhLCpsV3xd'@;
put 'JXMpLDEyLlNiSkJiWz05WU80VTJIMUpWMzN9YVM0fTVqZHBkUFdPPT9bPyh3V1N4Kkw+T3lvVCFuXjw0e3I3fHRlUztxKmk5QDtFOkxwO3VNUjMyUmszJWp6ZX1ndW4ub1tzdnlSLzUrT0Bxa1s2YUNIXz83ZDA7ZH46eVlCfTc/YHh2UjVHZzFWM0NKJWROMSRfaVUvXzBgcFMjdCx1LmAhJjYm'@;
put 'TnswUDhAbiNtQjJLPnB+ZWNbc3RRQWlkQ1BWdylfQF9CMEgoPGpyKEdOKTM6X1IrJk9qb3lea11XRFMyU2VQKl1kTV1kOEZzLj9WQXJ7KlZwNkMzdzNsUVJeWFcqWHFwNUopJipITjRRWmVnd1dCZlc5TmlobjR0JnY8THk+fjMpSmkiN1ojO2IzViJ+JWdbMVgvQiZBJkFJen4jPD03V2Y1NlRG'@;
put 'MkxEXnM7WV5fKnwpamRVKHVrMD5DdFVGYTFvY34+SVkjTjlkcmxoZnJudHBzRTNRODdILClEVExLNUVgfHRfbXp1KGxPVGtJP1dMZUJIbiI0L3ZXUDh1MXtXcUZgOmQ6M1R1fiY3VnFpb34zQkptRGAxMm5sMlZyMjhgR2JWS29HfmRAXk53KG09RGVnY0Fva05nSE82cFRgZXtKSHxHIVdjd3Vd'@;
put 'dXtIVXMjRSZYN2MyOjBtPTd5NXpeIXV3LHFafDdLZy82YzZJK0E7S2gzWl1UWEBpWkwqcExXZTwmQSlUUV5yTDVoKVo6UF1SdFgyczldYT4oSThEWUgmZHQzSTNDezU2NnBVIlIqaC5nRG9eaHFkTUk1eEFnaVtDbyEyPGg/b3RzP25UWjB9e0pVRSg8MmJoIlFzK1E5LD1eaGJXfCw5VVQpKjR9'@;
put 'TCRYUjlgQ10iWDslZ15RYnM3L1ZoVk1dQXokXkdVYEdufnMqWWN7PT1sVX0vJnNVbz88YVpTS1F1NUhRKm15ZF02ZVZ8ZEQ7Pl8yKzRWUiQuRCp3QVkxYTFCcE9EPHEmSCNmbkE9WFZeRV4+OkV1dzA9bCs9Uzslfi5HPm9yUUl8aHoxa3lXPXdndXReXnk2SzxwKT5CYG9rZzY+ZC9PK0dmO21n'@;
put 'azB8V01sb1gqM1N3fFZDbzZdJCQ6fGYqOSU5Nng7QlNpKktDdmU+NmViWFgiTVciQkgoe1t2dGEkMilBdy5wSSE7Qz5EMTM+d1pCRkx+TCFTSGYvOmlfYSZ6b014KF0iRHkpZjNxW2BwZXAlfipLMjhPRmBobmJrdHdTKDA/VzlJTWdfT2dkdkJQW209Pm9ySE5mQ1RtfHU7JHVaX05bcEolUlQx'@;
put 'OGpeRzVOWlVnYVNdQ3NqMjt3RXNHSUI8RS5icF9xIzd7a05ZJFFwX3szcXJ9VWBSKjciZEJocTVOTS5LMkd9KF1XJXcrfjUycWRZdlZ9S0ZLeCtuUEQwPmByfUJkbTsqMGdqQGV1N0twcTMmZCZ+QyN7ODN4YyZtLyRkSzQzY1RIWU4pbFtrQkteb0hWPXpJeH14LEBEe3RLMyhkIkVHRVhtZTgl'@;
put 'VjJvR0MrQG5uSjI5ZWdTTGtbXXtXcThDUV8qRl98c0NIPEg0Z3trREFdZXR2Q0FOK2ltNl9neyRLTmJET2dvYCxXQ0ZPZylmYHpIWjFUTERkVXpwOnhdPl5aKnZpUnNpbTxQZl5hQmp6W3VWXVBQbyk+K09yR01QeHt7OyR6fGJ7LDYxfllqaXc1c3NETDh7a2Uwe3ZtOE8sW0wiUV9wOHtZb1Jg'@;
put 'fV1YT0thUE1SNClQYng0dHddXk5gJH48Vl5VJkZEIyZ4WSNLTD5uMWwze3t8dlZjbzVKfk9VIlU0JX4lbU05OCpZMj1aMVtqLywxKW1lO2oiOmZwTWNhMkpGaW08X0kyQ2VdYntOWjk3RShYImVkOEo5OSk7JU5PNyN2bHhaRi9hQi5rR2ZOdiVlOGYhPSZIdSFGNllUaUhkVSlrVWQ6Lmx3LFBw'@;
put 'OXFmOFFCV0FQTG1bVCMiNUMidWEmOXk/WGkxKzdlM3NFfjRsZFlyP1J5X0ZYLzZSOHtTK1ZAMypVYDtbPm00aTc1eCMwRm5ORClTclhSUFRORDM6Kio2JS9bSWJ5RHM+bjErJjlYKUhqUy8jV2RRfT9eY3N+SFI2aD57ViMrZDxdVXAxWkVZQz1iREwubUNJQzg6NmI4aWNwYy90NWBMSkpsaTIm'@;
put 'aU81VCYhWWQuY2wzIVlzc3pJKHZwOHw2KFpnNVpJYDVfRz1ffiF1dE93P3IxMC8/KnheYyhXRWRLP1J1QXh+Y1RFMCwodzZSYkxKOjo1I0pxck1HT0B0KjA7eE0iJSo4JjRMMUdyJUtrLjU0Tm1LZWBzVC5kNUwuRj1JTjpidCpVWzU8QSJ9WXRPIzB0KVVIZGYlT0JDTW9MJThbZG0zYUcxbGBv'@;
put 'JWJLK2RtMSM/cHl0fnhVazxmZkdlKU9ofnd3MUAxdH4lcEA1WHdxdXFMc3xETURfdmZSPzc9SGFnLjRNaVZpUW1NU3tEa3FUZ1o0N094OjZ+XnsyfXdNXzQvTEp0XSs2Nkh1cWV9PiVlJipqVjtITWlsaXBTcHV1aiRNTVNXT2Z8Xk0jQ2tuTEdELmsrMElHXmlLdXBPTUM1UjZzM2ZSSUs7LDBF'@;
put 'V309TGtyZjJfV193eWddR1lRKSZxMDoiTSlhcGgodW0qNU0mXVFCN2tuYUVIQzRjUCRDTztoN2MvXjpyaTdEZGhoe3kwN2VldFZtKGlKNjEuXU5EWHYwdl5FJWchR21teUNGb1s5V3NlUUhSS0VnL0U0c1Q/WH15IndVd1JjKUJRRk1qS0hgLkElXiM4RldgX095UlQyREpobTdeWiRfKDxwZF44'@;
put 'fmMrZEQ0K3RvImNsfkZaWk1kQ2tXNmlecU0+WFVHekNFdTZTTVlFQlVdL0sjOERAfHheOyF0OXtkW3Y1Yz8qUWEuJmhFPytQVWtQdUYlfjhCa2dYWmwockxyWm57Snc5UmMiciFEbC5qcCw/Q0toIShxUVYhe2FfYCI+OW5ZekpOJThqZiRdUEdiVzVFOl1ubSQ/alJVZkwyMEJrQi9iY0w2Nk9n'@;
put 'QFJ0OV9qOmlHYzZTYFJQeFRhPTRmSFFfdD5vLnRSZW1MNzosMjM3TUEoRVZRc0NHTz5dPjM8Ln5MMzIxXjtXW0lQZV5efn5qbktlYnlJWTlYOCJuTGZ9Y01qN09MdFBJSH05ayVGVGdtMjJ5c3hIa0EpSzpzQGtUKnMhMiZlVDFxbUpfNTkyfldCUklALjtNI2tPQ19YKiQ2YkZgeXxdRiVsJHcj'@;
put 'OTl8bnF0IzFMN08uNl5pfCRZTVRNRHp0WVRsIXdGO1Z0ZDIpYXVZMSoqZjUqSVZFYi9EcVJAKXVLWW4hNUowaThoQzsjPC9lRV5QdGRQfWV4cm5oc1NGPlIke3x6X15VMX1XYUB3V0VlTEA0Om8mIT9AUXhWZyEifVBDTVEzM25DdShLQj1NZkM0UmNUX2FlVTV3Ny9XeCYmWm1VVkwqPmhbRjll'@;
put 'YGxRdytqUDhBV3JVI0AvU1gsM0gpfkZdKyU4PCskamNKQH00LjlFfVpQeCkhfnBFdXV4azlEVzk7LyVLLlU/PVIxbX1tV1Azang4MkxOYjx2fDRQYmRASFlzY2h9bjZ5STFEI00kNSN2ZC5SOmdzXXp5MFAxTmRScTJiUGpsSD9Wc0dUWFNHXk9Kam8oNmk4Wi4qKUxGQHBDL2lqcylmU0s4K3Vd'@;
put 'fXV4NUIvT1dlI2Q0S1pJMG5lISRYVldWWy4hSDZHSkFvNmspTkVadGZITjh1Jm4uP1dWZXluUEhrNGAuXjEkdktBdWhleH5ALltzSl5nbDtCb3VNVyp9cUQ3WlJed2NGVnsrJVN8I15OOUBxPnFOSXxXXnFVZ2g2Tix4Zl0xOENibmopKSF+eTxkUXd1aU89c0JNS0VKTUIyPXZ0dj0ve05zfSoh'@;
put 'VyE6WSRGbm5eXmdFNCZLbl9sbnVQSiJKRE83Z1lOK1pGPXFrIy8ufmRRSEd3YiJOMVJra3cpIl01cjNaXm9RZ2Nac1AiNXFPYjBsVEloY2hyblZGfWU4P2AsQXhjdzxuUT9CYDJzMkp3bzJdX0VLOn0lbkh5an0lLG8pdEBQbHtld1oqUz44Um03ekImVntDbnBZelojISYhVTF1IldLb2NPXkdh'@;
put 'elF2dytbNE48I1FVUkBXZjdbQHFHLkhNTCNjUVleRyNEZmRyYW1xeUpPV1Z7a0pnRz54I25NcXkiXWFCUX50ezYuKipSQm9NO3h9IWJ9PXF+bXJ0OTwuSHZYaWwzNUkzXjpkdHMwRyJIY2J4ZUJITnc3Ky4oLE9CZ34rXlVfTlBrejNBYE9ufTNXZiFCYEdSX1FkQzhxSWI7WURSOCYjczZ5cXBd'@;
put 'bWEwS19yRjhWdWdgdz0oNl1mT2hAfngzeSpJL0N4Pld4cXc/aWRlVFEkYjJze3hKd3cxWzRtWV98O1FkTSwoJHQkdTVPY0lTQ0hgfEhUfnQyMShFaFRKP2taXkRNYWZKNSFhVXVCZXxJLkk+M0wxS3tLdFUiYXZ2NEo3QiVvVWlmUHxpbWJYdnRzRn5AMDZJVj57UDFFT3ZHQkZAM0o3e1Zkbj47'@;
put 'PlE/cCxmcEJvOypucio8MFlrNThXaUhLZnBbOn1pQF1ReTQ/VXxwUVZZWmZ+ODsrJkBTRFlhYi9RV2pCejp6K3VpaHJZPDtKLiJIOjhgeCMwZnBOWENbeWozMU9vU1ZBKnUjJUV8TX5NeU0mNlE9TWt8Mk42Jj88RyY+WjM5LjB6eVRNbWV2ZzB0TWJNY2EiQyFvV0lDcWBDSCN9NXc2UEt8Kjkw'@;
put 'OiZ1enYzVkxxcyVtQEBreUd0N1N+X1pCeCl9fk5VdSpGV0JvKn0jREYpJGZEJnpwNTdVJSkjUHRMUjxEZkAoKjl1I1NuST88RiQ3N31bLmg+SmcuLyFaJl9KelswZjZud0daOjAhSiN+ais8ZlFeTUMwT0JNMUgifjNfPz1iSFMxQDU4RjNLIix2Jm1hUWwwL0VofFgwfT5HM3pLLlpbWCl1U3so'@;
put 'IkFnak5Tc0I8WDwpaWBAMEdBIU5YND9UU1hHPiJ8NGJ6WDhVbz5wd3tOVHMwazVncGd7eDRdMmpeQzI+cFMvNkdrelRsay8mbH5DTX5afn4xb1NMejYwbVk6KmlsPzdrcyJgJj07NWkyI3pVXWxLWyhvKSFxfHRnXn4kaHNEd1UiLlBra10/RWlJSyRdXm01b1EqNSZ1Q2c2MWV9R1k/JjUrc21T'@;
put 'KzxyOFtjYVc2Tl4/PktOMWBlbkh+QHVARCxxZyU+QiNIcylkUV9taSpBSlc8ZCI7OTJbMEhfdkEjeG92IXI8RCorfUk5OCx1RCQ5VUBgQ0dTYEU/MldTL3N9ZllURGZtPT8sQGNOLmZeIVEjUnRnTiVXUypjV3kldFgrblgsbWE/PHkmRX03T2BAeGIoMjs7QilUWGJmMUxBeSRAYkh4diFbUzt3'@;
put 'VlZiZnxOJmllTSJKNFdzSWoibXQ/JEtBYXpCYGh8PT04P3E6SSt1fGpkfVRTeTZEdzZPckFzJUxCeyhOcGMubzkzbio/SShHTSx6Pk5IKzhRR2h+OzJUezF6cEp+Nm4pIWhNOzRkSEM5Xy9YUWV9MXIyTEloI3FFUFgpV3NxYjdNOGJyMVEjKVBJa0FuWz0uMTtGWH1ZdlVRTWMhJTIoPSsyJCFv'@;
put 'Jl1SNjpYMCU9YlZYVGJ8ZEkwPmgxYiMiIlZ8e2JGcCo/YUFZWGAoL040V0RUZXNTPVglKyJQQzVMQ29fKnRgJSpCPHM+K0MxKUB3JSxvYmJQYjNMXiYwUmFXYV9tXT59Vyp4LGVle0EjTzwiPXkjU1hyZkY1MD82YzskZHdjZGYoQXNhTlRQTmhERC9LL35jLCZgcUZRciRxdG5ATTJRL054VXpZ'@;
put 'b2o/Nl05XmdTPXpdP116JHtmRSNIZzpTY29zSTkxM2pjKGYweFo5ekxbMUoxezdDREtybnlpQnwsPHh1WDh9fD5mfCxjeXdFJGFNUi44WUp5VDo/RXd4ailucU1nfnF+SXolfG0xbnddTUBZenFOIX1pOlF3TXZtUVN+KmZdYH5SYVZtbEg8MGJbNEIpM1djUXJeb1BmaixYSWFjVXlNZmBRciJQ'@;
put 'fWVdZzVGfnRWWHs/MGkrPDQrWG5jNG5VUXVyezRCV1JZNGdAYjRbZ0pNfmBMOmVlKXJROlt1QXpJQChRZVAxfFh5M3JdSC8pWTJnZy9fSzJZPmA1V2EjLzsmVVNwelY4ek9ld3wrZ31IbypZV1ZePmdqZixBb0VnIiZtaDs+QnUkV0RUKEkzMTJickZRZDtUL2F7bVduLHAzZU5GbW9zSXReI00v'@;
put 'TXE0LzAkO2BQMExXd1pIbmYlQ0E2I0ZTS0dyPj99WzwwaSZmSnk4ZE5jezoyTExgLiNOfUleMUw0a3ZQMTh9PU9CejloKm19alMxO1lBO0AwRThdblBwSF9ifkAkM1IueiI2KygkdHMjJj1uQjBoWkpRTiNMPSxvOkEhPHNgWjF3U2woUFdrQzkkOXY/NCVDYzdgQTpNNVMrIzJWKz5EUDp+YCVN'@;
put 'NEE0NE5LaU1oIytnZzVtbmpsRSRka2J7TihTQ1gmKGNrWypXKHMxITclJlVjKDlfLCFxPGIqQTBLZ09vPkN5NWkpMkssK214dTA5P0BXQmVBRGV4UUBDfjolbVYuM0k8aVRRWWVKQiF7KDp9Z01QN1k8S05sbFBmdSw3TnQ2XkdFOD5pamlvTCIpazd6KTtUWTVSTU0hN3NsISNHV1hdViV+Y095'@;
put 'fWJzUCMvKGQrcT1SXyojaj00RypkUzghZy5WMDFMUzl5WEZqWEI7LHp7dmFGJUZkR2lFOm94PCwhOzdgO2BrTXd1OVJjSmFQbyU7UjdkUltQRG5ySGYzRHdKbk5ZZG17JkokYmF7bVNGKkNKKTBPK2pbajlGOHp4QjtlLzA1VFg1W35RSyJrP2dwZDple3EqdGtnTHh9RzVVMStzdHFbSWElXUNe'@;
put 'TkhhNVVfaUk5aVVZR3AuMUdKSi4ubS5sYlNeflFmVz1iU2pmRClyKzwjVzFiIWVLL3MuSV4jXXVEfnxgQURYOTsxI3klTmJbaSJBYzx5bVcsSzJxIy8sSTdiOXxQMkNEW301c25eQzd5a2AqRXJbdnojbWU6aFgwMk9kZkQvNWhZInQ+TjFicll6Sm4uSG0/Ml1GQ3RObFdgNHtZdD8+K18mJDRK'@;
put 'dVI4aVRsaHtuO29fWXpxPjNWVFdXQytyKkgsKU1nTngxeWZbdmxkWm9QKHQmTkZOV2ZdTzViSEg0RkxqRHczTl15cj1tREgqOl5APn5tVVFbNlBWUG1vfU44fls6ZCNPfGx5VGt7UyZXRW90Q3IxPFU7PERQS2RkQkMpOV5mdU5vSUxVWTZWcytfXy8kRjlJPnR5SVFuRF0lQzpIOXZDND15VDMr'@;
put 'SzZ9bmA2WFBqU05acDR6ZWVGQnozUz9xQ2RqVXVnRHA7aEZNZFYxXS9yYF83aEJRezc2Jm1jJEdZQ09xQnxFUDBDRVglZT9mVS57RShzTkwrZGxGailRO1ZzKEhtR0I4Nm9bZHw8JV5jM2ApbGRrK35mV2Z3TigwfEpAWzovdUpxSi5pJkpoMHwrMi9RPyN3eFsqJENibWApPFdWdGAicVReImdk'@;
put 'N2dKSFFvTVhfWF46LlN3Mm0lJXVbZWwpOzxQc31KYX1lVThwZXxqXVF+aFU0cGEke3x4b3U1Pmt0VnsxdUg5JnZ5eys6MyFvfXhIMihgZzhLLENCTDpwUFtSKjVrOVRnM0pJekRfVnd2fiopInpGdnpVNV5LXkI2TEorIzN4dWZYazZEPiZHWVh+PzMpJXxHSEBMLzdRdDlTR0woQnJ7ZGdvYCZZ'@;
put 'O25nTm1XQWRsKi4uNUBjZHlhan08TnZFWGs1N1VCaWVRa3tLZUlvUkwhdlh4SGFCIVdpMF80eTlkcnUzKjByV0NLMT9iTExfU2xpM0l3WnxCb3xJNXp4M1llS2pXaUNdZ0olVllOdXE+akk2Kz08fDZTcDpPRkQ+P354b31kVGE3QmA7dyVRaSR3JTshezszMWhmeCZjbWF+R218NCgjeGg2VUF4'@;
put 'WFZFcFlFOUQyOT5NTlZUMnJkRkhsd25zOipecjVkOkBNajd5UjlxNVg2YSwxSFQ4bEtBLjooMFVmdmc1d3psRXEwMVR2cSV8fFplXyJtRDUzI2Z1Nll+L18xQ18lWHJLSk9qSlR6RHBYQjU1T3FOVjAqI1lma1dVUVVqXjp5ZjEvSTshQ19tey52d3kxbEg1IUAzeFJsXWs6RkJCI2Zbaml4Vngu'@;
put 'MXdtayRxPnBFR35ZLkQkSSYmclhOVl83bjttQyhLWllbbkpPUW1NOm9BUCxkVUFpTk5qdzghKjhGIntNRG5dJi9pSzI2JVAofns2PE1HKTl9P15tfVJDZ1JqXVE7SHdpN3NUP1NZQlRpIzpRKjZ0ZVgsIilUZzchOzpoNWo3WC5fPE1gZjRAVGBKUWksNWE7cT9IdURgJkY6W0tDIVoyKkNOdUs+'@;
put 'MDZrc3A7a1djTiU1SVNveUNBck5eQiRMVS9zP2xBQk0/MzpORHRGJkE5bTxePi4lW2w6REMwendHIilpVF51NldsdGhQNVlIYjNVc0VKPVVrcGFlLkArX2sxKX1QfUZWWEBYcyhFfXd0SG5zWD9jZGIkfFtOVSY7ZFtZI1opLDN5OEIsOUBmX3BPKWE8dWZeNHQiQT85Wz1saGFyakYqOkgrOiE7'@;
put 'QnE9JmdWbnI9R056Yk1fNG5pUnhOaU93cShgen1iSCxwM3hVXUFQYHIwaEpEJGBre25JZGJwKWxqWktbT31gN2FmfF9OcGgoOFp3MldpYSlbKi9UcXZXSXpEZWQkJCVbL00iLyhnRzdjK29FPVkvNFlxMFV+UCpMOzVMQWgjYz47LE9iW29jbDcwazpFMW9KPCkjVChbOzh5KVQlfSpyNFZmZltl'@;
put 'SEtaK1RURDQ9PWJxYjM6dTdpbXFBOjFFTHZFUzg9ZlA4PTE/M3JsVkdWJXg2dUQ/Ll52R2EoLHB3cDxuVnx5cFRLMjJ4QFQxK2QoRGZgNWgxeWY9QEdSWXVdQmRASVlaQHsyXV9+L3lAQT1jZmZbMytgSEs1OD5PXnU0JVE4alN2SHohP0xpQ2F9QlglekRmM09ycjYhX280UWlibVQsYkddRzVH'@;
put 'KDp9I1tbRGtmWzBTWDJuJXN8fGZKZ3w1TTh7TEt1TUNvaG8wPVklZUdVbGd3VXhCY1o9STcwajhWW1Mrb118aUphZjV3YW81XT8kOyY1UiQ/UkIlKXwyMGp3bjw/L2ptRCR8ZCFyRSZvYXlzTkxhVTFke25kU3MxaX48JjhbPn46WGxGfFFMNFhHNWtFbmsrVUhuNyMme211bn5FaSQ9ODd1QmRT'@;
put 'T3shekhpJD5vRFFMfCZPJkhAUCwrVzBrKiRwKThaWFJXRWx5RSk5P1VydXtDWXxbc1dMYU1BIUZPY2UyeCx5JTlLTUQsO2Y0WyJgK3lVXiVaTGplOHRuTzldOkdrK3NWfHZgTE15MStOaz14OkojNyZaXUpoVy5rbEIvel56SVU6NSJVKiU5LmtOa154SE5AIWghLFo2VmREdWN1LFJ7Y1h0cSl3'@;
put 'PTlaZHBLdnRIO3ZCLn5GSVhSQCJOVix9JkxvPCxAd29YZTUzV3k+O11faWxFYVohdGxMP1l3IUZgIiw7PH4qRmApM01MSHQwa2UuMDRbPn5HPG9Xb3dYN2pnTiElYjxMPDdSTmsuTXMpa0RNWm81YFA+JnoufF0vdTQjKFZkL0psWzREP0slTm9NQUQmKT9xQ2YqcCp0Y3cqWzczJHBtdU9sMSQo'@;
put 'XV1OJSNTfGdBfFQzMCJKbm5XZW1RTGkpQkpETVtsNjlSe1IiYVQkRXtOLn5SLzZMJW9uWitdZF8yKT80NGoxZlpRPGx6Q2tFIURHKHJKQHh4UkZ1WV0wdSFqUD44cmBGVC8+Z0JjUV14NmlfRl16TG5iSypScUJLOjhxIUZ2VV9UYVZUUTcwPnNCVCZXYEZVMGUmQ3ByNkI+fUVoIWJAUytyRyZ5'@;
put 'MkUlUEcwRTM3UXs0LClQcHZuMU9HZnoufGJbLjJjMndGZixIRVo5RCI7OCRPaCoqeT9YLyZfdVgpdD9gb1skJEdvRl4lM1g/MGk/InF+XkhQfTlTNXA1cjpAemBBailxXzJ3bmticnd6ZEpSJjd+Tl9KRz5JNF9ZP3NDfipnTjdXMXcqOUIyRnc+KFU5PUxAUnl6WC54fkV9elVQXmE4UGUsIXBs'@;
put 'X0J7O0FVSSx5OFBdbz58amhQJWBlOVR2WVRNMz1geV1QJlB9YUtkcGt8K2VlNVcvdmolRSZ9Kzg3T0c0IjtyZj1xKzI+cVRqPWt+bUwrK2ZmalM+K2lmQFtzUSNYXyNANms9b2V3RUt8JUM/ViJDcytzb2A4OHI4RnpEO09yTHxlanxnQ1FDInJdS3tyTEJfeCgpZik6JiFCY1Q1YEcybTMoVntR'@;
put 'Qlc0JjVSI0ZdYkllaz1Vd1V7KFpjfGohcjx1MnkzTDtqaTF6LmNIQTZESU1xNm92N0JpTFBNZVJENSV7KkU2VH5RX3puZyVrZVM1LDl2QjNRbzw2KylRI101KkBva1chYEZWeWxUOzt5RTZjdCRuZm5HN3RxLCt2T0Q+aWV0NzlwdllOfFtIKSJiL3tHKDpwRD9mY1JRPXNOZm5JTGcoZ2ttMUVR'@;
put 'VXpvVVozYT1gXStERk51U1oiYDNzXnpuJndEVkpWJlowW2d8TlF5YVpudGNkYH0/Jko1fUpFQ2hJP017T10/Pj5KXlZjckhaQiZBJkBkWlFmJHVQV3leYTk8SXFvZmFZbmhhekY3ZSJnLFkod2opUHJ2RD87Sz9rYC91QSpdS2svOUtRejtfeDZaZShnP2dIWmpvaTZ8LEE8RFV7PmgkNTZrZz9N'@;
put 'RXVPUiJDMFdjeEtwcUBEaXlRIjZSS2BNV0B8Nio0QSRwWlR0LCh5Mnw1ZHp4Q21AMW0jfkV2IXVVWW9AaCRUTjIqd0tNJDtgVkRVciE3USZgLDQ1Iz0yfVEiSnFYcng2fW4qOXskIXszPVEkfSkiWURTI01IcGBHPzhdWUhbLzA0ZTN7JFsiNTdYa0BGPUtnYHs3WTBgbk8uTWplcmZFb3dEdGJX'@;
put 'V3lLISwieFhfVms9KjBDXkIqfE07TUQuKVRqWm1DITdJXlZNOmk9NGBEMEBde0UkTiheaE5fVHxTeCppWHAxWztOUXRfeVJAK297WFR5PHhPS18ufjVYPCU4Q3V2Wylnd3FgaGpKdms/ZnlafTBgPFs9UyxgUkZjfSNeQSNmQ3IoLDkjRStPblkuSTJZR1ooamlCWjcqeWBVUTFxWVlNYDBqe18i'@;
put 'JTZlVXdjUis1cj1FMFVffGdKSnIwYVRYQ2R3VVplK1FuO0tmYVh5eV90YjNrV3p5S0VJWiVxL3RucDxsckB5Xllte1g4Xj1WOkV4SEQ4bEAhQm01NTN7RSF6YzopazFoLFVqJTFHXTxQfllPdW1reTlhJFg5ZUooSGNpRWtzPCJ9SktaMURoVTdEVWYuRyEoeUhFcE4wQ1UiVG5ycTBPRDIwKyFd'@;
put 'Z3E3SXlZMEFORz8zJHhALEltW1ZeMFR6TVEyIVc0VjA/OiV5cisrUy90ci5kSE8rJmBfPnh8P3E3TSZ0S1A0fENfQSxKbWJ7Iy4jbnFKN3I/Q2pxYFFLUy9HfHZHI0xXZjZFMl1PXm5DSDdhTzdyNGU0JmZMSjN6YSV0bTxIS1hHS1kudD54NkxVMG5DTjBMRVo4I0IqVT02QDppMyY7UCY0WSVi'@;
put 'ZFRVb1skMT9odDJZVURQYHlIVE9HbXA/Ql1seEZkNXNCWD0uVTQxMldzYllYe2o+aSVUVWhsJmpzZCY4dHA9dnppUTlfQ3RecnE2L1c2Wz47PGd5NiIlfk5yXS9WQipbQXQpdy8zQF46ODt7UDU2djJGVnNxVEohVTtYW0YiKTM2YiV4cUR7emROJUIkZld0UGpqK2Q6dm9kY1Z0PWZwXmhHWGgj'@;
put 'RHlrXk06JXM9VDh+elhLVk17USt8W21aM3dwZj4jd343OjdAdnhyL1dsTV0sdmhMeWpWIkhha1ZoVyZ2dWh7Ml01T0N3JTRSLjApazlLInpYOXpdal5Qb1d3VmF1PWlha2MwMkQzRkczXiYyIXxxMktLckJwTFYrSWtuZj5idW5hdVh8aD9LaDp8MTNESVBtJC9UYyovK3w0eDBaND0wQ2lbZT1x'@;
put 'VkZFa1RSPzt2dTNXTTxLLnt8eDtFZlBUNWt1d2dALyQ8Kz8/SFlNKT5lWixPKW1ZRkVPLChKQzoiSltUbEYvbC85U0QhdzJFaEJkWE4zPlNPSihAb0N7NiRmPDtBajxrdW9vUjk8XjVWMTdtWFFxQyRlblRiPHRTfFhMUDBERjNUa0dXdmAzeGsqPTxzKks3NCZCYnEkamMqM2Q5OC5EeWhkMjpk'@;
put 'REhzMXh+UXA7JWFkNlRwKkU6a3xle10vUVJnM2JzJTZOW1t8TlUkMWppR2AweypIaVd0Pjd2aHsiYnE7QER1WW4+ViY+UzkwL2ZeW2Z+QncsTVBWc1p1Ryx4ekg7d1okU3xYbTdXNXNoamE/e19JTEhjWyVKI1pjbC8qZT41bFd2cjpGOl9fOlJyIzQweWhHUnVsNlc6dlc1LjpNZERua0RZXXc9'@;
put 'Rns7ZiUoTWZgIS9JWUBXKzNhYiEkYG0ldVs8VFZOSmFGZi9QJnNxQ3A6RU9NJDA/RkRTflB2LDZqT1MzK2VaVHBTLFBRcTF2c1F3OmxJbjtePFAwIjRLIVs/emtbKCJfOGFnP2ppcXRAP3VwISM5dHE0cGxSaDVYKkNEdTRDRUc5ezxEXSkmKmBJZXIsSH06ZmZhdGNzVjhaKT93bWJkdXo5Lyok'@;
put 'aDluVXYiVXQ0VTgxdz1RKypLZ0ppRHQoUD9RXzQiUyY5T3h2VzdXZ0dQLzIjW19JYTNCdkt+OVVgQH4oaTY7ZzIoZHw5VUpoQkpjdyh3VGlrL0t+SHp3LmpfQDhkVk80ZzBmfTR8d2dfJmR+bU9rTkBBfEBNd0g0JWlWNVB1NkFRJiImcyhkMFZpMmBHLlc4ZyZnclpmdigibjw4TW5FTDJEPTYq'@;
put 'MTdSYStgVlo7OWJWL0cmVX12JGpscz9tX2VxYHIqc3lZZEZyfSZ8ImBgYCV8SyRDNGsvK3c3amFrbXk5YmtNYTdJQCg2KW15aiZHQmElLm5MLENETT91UVdXeFdPSCE8cURRMV5OPi9dTTJ1LygjIi9MOjJjNT97Ml1Vfk1ML19qV3ksOWQwTzcpTjo4L3YvI3U9ZlkmQypyYWRje3pKUHpnOGph'@;
put 'Rn1hYEZSUklPSGx9OGZRLHcqQCo+K2J8UmguLnRCe0JEPF55bmo1YWkiYz99eHI4LmM0KHtoY1h9O002eEQoZW9FS1VfMWVNWWFlcHZIKSJQenspWEM3VXF2RVc6MCo2SCxSWGVwJjdIU10yLHc7KF1Pb3JALmZITTxbKDkrMEBeMDxeRmhLSGd+OCE0PkMoPiltTVN4Q1FiTHhRN0t7IVh4RFsh'@;
put 'QnUpUyhyfHVGbz1oMEsoNHo2aTp1UUZJdCNQKUp5YHV5OyJURWJGIzdibj9APmhVQHdsdkw+YlskVkhAdVNKQ3lZeTZLaiFTRnAyYk0pV006eE9aWVQ2UWAwK2l0PDgjNDc5VzhVNWUrbjFhPHZ0UCpUQCw3MitwMVEscl4iNGxlN2A3MEA8fWpHaHtZbF98eCRRfFhAXipmN3h3WXs9bjdCe2JG'@;
put 'RDIrT1JwUzoySXlWKn0mR1EveSYkXiFnRCN6T0RmWjZHbVFCRzVGUnpLNzEkWHp7NilETzp7UXtydj1aVTR8fDU6PVpsSUZlSVlKam5seiU2U3AlazgmdnNyfWBsbnFmMWtlYU8me3BQU35Dfkh1XiVWNDZhcUkudyFvRm9+P2IyRllPNXRbdyEwaX1eU1hYM3MoU3UycnhRdVZ6M0I9fSxsblZV'@;
put 'LDNYI2tUXnB7ak4/LHR+aEVtcmZpd20hOiJ6cHFgaUszbEZRbUZuNTJCdjVCeT13OUZyUFJfaUVzPn1JYHFnK24qdWhIZiooRTphZmtpQnovWHNVPi5GSnVkM1FaaXVibk01UilEYXE3WGE8VUZCQ2ErPWlmQiEjOFpTQyMzR0FkRmVbeUwvXk09I2hodTM+Rl14PiNIK2IvQFo2JG0sUSpbdmpq'@;
put 'WnJIcEt0NX1WIVt7Z3V8KVNLT1ZpTigrQk06R1d1XlVdXzlnZktOQVZ0Ii4+YVJMRm17T352XjJeOD9FKUcpNDpzXW5vOnldc19nTT9ufSJ1X3RFWG5QL0JISl5xa0YhOW9sRlFoMlYlJXhmZi41fSVLZ3dpVTtvWmxrNHRxay57TSl3P2dgJTEsSFIsUWhbTyhqO2hlP1NkaTBEWCh2ejVnVX5R'@;
put 'JHBJTjlWd2NmRlgzcHN9TEBCcHNUWTFWLndAVnAjWUkrW0kjKDxPZzUxKHB9fTZwWjF3KG4/eix6NShPbihSKkRRanMmXSlkYFJWQyVHQ0NNbH5BOGxOKmdvTkddKGN0PWlfMzZvXio3fUV4a3l6LEJUdUJGNGxubTQhJTJ5YzhHbUNFfnZxWmx+e15ab2hQNigiSSw3bjpIOn5hTTZzL2ZuVi9J'@;
put 'KHF1PGg4Tjo2fW9aN1pBW2kpYzZ9KVdeJCZ6cVdNLlMkdEZVUmRdL3hRP35gK2BhaE5MWkRudjRrPk1rdG10VyFUZ0V6P19SMEpRaGd4JV5vTjJ2ejAuYDYyQiQ7XVdFI3t+cDJZakxScUd1U2JqKE1PYFQuVFREcW5RSDUvPzNiOCY8fTk8JEoqLDMqTio/PyVKODBVQSE9XnEsJUhQYmJKPXw4'@;
put 'STo6YGRTQEZGMmRgQyYsTyhiVURqbWxHLnsibmpTW2xiOjpUaFg/TX1NP0puaHcmNGAre2pPbSgqTX52SDclUG40VSU0U3NVIjclL0trQ3pqelo8O11PeW9DMU9IbVtUMTkrLGF5d3lEQywzW3s2VFYpbypxdyl9SX4rd0E1a0pQKlFNRmMxejgifGE1SSF4aStATXM0W2RqZHEjbVR3c0R5Lmky'@;
put 'UyhXNHp5YjxHNTdhOk0we1RAVm1sfjduK0xlO2xfelQuTDZ5enR5fFghfj01JHF8N0NCPVRjISJnUntDNjcoRiFNZXN5LmguU1dhTTZEbnhsSCljJmBlNEIqSlZqUihTJk42PllnOCF2aSxYaUs4M29LKkdTPDA6e2dLWl1HRmVgaHRmSDxPcC8iNFB5Vyp4JUsvOiRUaElQW0BhNmI8UDhDMFR9'@;
put 'JExsKT4mYj9nTFgwOllNIjlDS0B1KzdNbXNPMEYlZnMzNzpYPzgzdFd2blpNQ0NKVUNDbU1MXzJXKFJsMC5CYiw/P3giMjFWekl6WHNKMTx0SlA5Km1OWkwqOFF5ITF6Pj0sIlBPS0c/Nk5XbD14bFhHNnZYdH5vfStCRyxEWHtkO0pmM1JJaTduMn15QDNIRXx1SzxXeiFgLno6diR8Smx5YDFE'@;
put 'N0J0Z1NKb2owJGd9WzA/fk5CczZSRTd+QjB8d35XPWhjeCo/cTYxZ0peaSFgWzEzdk49QFEhSkZgNTE5LnZNQ1U+M2A+Xj91RW5xSC5eUUEiJGd+XVpwdCpSVU5XKXxgUFVrNj15YTRQZERLKzU3XTMlNShDWXp3O0ZDfEBGfmMrN0U3Rno5Lj48cWF7NyJYc199X2slJHFkSDpvO05qcVV0dywr'@;
put 'fX5rdipNXXZaWU1tS2AlMj1AKCpNdlg8UnlLa2xfQ1ZDMFZAMyZkSGo8UDspdStEbHwuO0laaTFAU2Q/dUVYLjVAUiZDKG1fVnpMOTBCJW9xdy5AO0ZEKygmSk08TFQsbC5EdVt3VXM3RyV8eF11cWMrVFNFbVA9QzRXI3JqeipJYUd8LD5aeClAUWNOUFVPeD5WPWshbX0sX11EXmhZbVZUU0do'@;
put 'LHd5byZuQnZAXjxNIj5WWEBWMnJwQUddN00yaWMiV251OHxNJUQ9dCwla1ExUiFjTTNLZUh+TnlPIW4lMFRLKnVrRFFRVnR1Kk5RKkthVH1ZdkBUMUxbZXsqN0U7YSQkOy5kfU0pP2k2IW9bPHJxL1d4SVZiUDtQbHgxdXxFKjdVST5QRHxKZyZ+YTJheCFqKWVvdXk3TV86KXhgcHVmPUNCaiFK'@;
put 'VHhKMWhkWm9vOyFJfkxeXnVgOXBhTD9xfFpoSE09Inp9ZTFPdkxbJTxIKTYxTihtLiZgZUReR3pYJGNoRV83bWtdKyYvKzB7aWZweU9zSUloYyRmPXU8ZX5HP2FnQ01vTUxnRiFVNnMpYGNQTTBqUWVCazlDU0hhYmJXJHckM1FbJEhyKyt+ZDlrRXN5TSwiUSoqfkZ+dlZXenUqTHJaNTVzRT8v'@;
put 'THM2ZUo+X2M+e2RkN2UvcFZraj9nYHRJdllPV25XXTpVfVl7ZkhzLkl9SyU8YE42XUBiTyh1Z2U7cSFMOFY6bH47SGApXyFKS2hwczpmaEVybmt5NjB+QVJaeyFZWFExUGxSVCkxNnJnTSt9Syg1QDZTeXhWNV14VFV8REpxPkcvYmlqUiJTI2NoMW5yeTNaVCp7UCMwPy99OyZtaig9c3xmO3J3'@;
put 'aVtMIzlBejB4MVpiPjsqc35peSw8aFJLRU9AYzc/X00jSUwlOntkdXldY3RsRD54S2xjV2VKMlVvQjVgVU1XWTNSVjpSXy5xbExQRn4lZHEvQzVYMU5iVztBXkRmSjFJRWx3OGFMWmAwO00kR1Z5Pz41QT98UT5FP0UmemQ7KSQuV0QjNT45NFBRNForUURqZHJLcTxrZ1ZeO3xeKj1pI3dhW0Bq'@;
put 'ZSU8ajFAZyZ7dXM3KEFveEYuSFFUbWN7cDtwajM0Y1lIISkoZVIreXFydEowW1pqZVZmc2MlNE4lISg4I0lHbkNubVc2dyl8amV0LmpfVmZYcldpQ0tMMHhAMHxhRG1+MjJYdFFMYyIhQVQ6NklTU11eU3ZrWUVCNiFtUlN8eG92JXlMWTxXWmhLTVs2cHNheFsmZCgyZzByJjU3VDY8cnVgJStP'@;
put 'JEB3YEUsWEQjZXREcltNUXQ1aDt3cyNPOEV+JlA1VXtXamhHbTo7SDAiZCMsTkNYcz5Gd3o7MWZrOUQqeV5hU1FqRTRSIz0yPi8lSjpvPn00Jl5ibGF6S3NsQ1o8VWA5YmlTbT97QnhORC5BRVAyKFteNVgwUFQzMHRsJjlCM2BrYG5aPUR0bHdobTVwMnl1VTJFNjVXaDYkL1koYSEpKl94OFhE'@;
put 'KEZqRGJRTztvQH1vQVpvK2khNGkrbCkrSVI2cS9qdjk6Qk90WiNPNEgmO0t2Oj48Pk5GeTZYfT9MaiMsIXFwKjxNeVVgIyF+QiVmVWt8WE9KQCUpT01dcnBQLmExWXgyJkU3WUk/RTNSQlpvN31UdGglZ0c5UURKZitlTkJePX5vIU9lZ3lHZEEoK1V3YFo5L0dMVmJGYFVjVkkkbEooZFA8RGRZ'@;
put 'NEZ8Yzx3bVZPV0dYMDU0SSwkMFVhZm14K0grfVlMdzU2P1lbe3JwQjgoQ1ZoaU1jfi46akJqTFgqNGZGIkBldD9xXmA+V2xfR29eTGtMJkNdRXpzbGAyXjZ2MWg9K2B0PCRzQmBsfV8pWEU3XyIyMnxXfj5KYnxVV0BUNlcmdW5oNyQxPWxeOF1qUnkvSChRUywqZTcrV0p2bkI7aVZnTzU1e2hg'@;
put 'bytWLk52cmpbV3xjc3dXPFE6JF4zO09FQlFzX2dPS3ZNcDdOKkNzWDBVW31mPnF2JT0jM0ZSb1hMcTIrcGVqR0MpKTFsZTZ7TH4rUykiQ2JWPk5rM21fLzcsSzsxTypEQ0N4SiI6fnpdazVvQlhZbGRgV1t4RmU3IjclclMuOjd1JlUvOCxxLnlMOEFSdW90dWdpT1tQNzRsP3YwWS4jPyYuMXRh'@;
put 'Nj1KUTtMPmlxbHdqamxaPXBdOiMkL31hND4/RUo2U3x7JFN+ekxoaUw/aE5jP3MiN35Qeko/UH1pbUNPcnhhLmB1L3QpJU00NXJ7eDhkSmVPVXZ7Wzs4QC4xZ3xvRS5tMnI2NjVAYVdCRHx9VVR9RE9FY20iUkkvZSprWW4hR1dEdiFvaj9OUzJFOSN4XWpRPD10cj55XmFOcD9HWiw9LHEwfERq'@;
put 'dzpYPUVsdDs2QUJDRHh7Pyt9LnhjKTw4OmN2cCYkSClvXi4sNl5ESG9ve35kNk5hb3U2ISx1b2dbaiRbaTlFcm02Wl1FZ0szR1NFe1Z4ZmMwL0B1Z2t0c3sxM2B1RXM1QE1NcSpBRW1TIyVZcUI3OldnRVgyIWs3TSlraTc5YUBSbXh4QEtqMn4yRGdvSG0sO3MoV25Fd1Zoem10Q2EuanxJeFEu'@;
put 'UyVYPUNuNlFbYDxoNk5bYkZzREE6YHNtU3BJZzFuQm9AXndXeDZvWnllbj93PGUje2FPPiJrZTwrUXhnSiElWCRXOG1iQkNEJWtCVUxUakhve0NCRGZBKyN0PiRWaWhhS2V1Yn1JUV0ib1kyVFhRKWQyNzxUdm5gQUNlJEFMVFNlTiUoTGQ/MCtVPGdEV0UrMER4djpQWTw6KSN0K1l4ZnV2ZTx+'@;
put 'dGdsZldqSH0/W050Xmp1O3IzNVhadnwqSCxFcFUldzNIRlZfYlFNeHhMPiFGeio+OUtPZlV4ai5NRndwLzRAQVQ+cklsLCMja2dPPCE/bkJwWC4oWEpiMklJUHFCfmh5VUd1I2w1JmlhL3FTOVhXUWZMZTg4MXV1a2MsRThHQCVgeCV5WEdIeW9YZWxRXjxVbnJXUHlqd1BDRChsXy94dyY0bC40'@;
put 'UVA8X2srOGk1REd+Jkg8aEx2eiRyOjJhWn07Q2FURWxFKnY1dHs6ekpkJVMkZHxZVSQ4S01Cfk1VdmxQfGtDKUY9TF02V0hdZ1ROUWtfMjpvNURTeDQ8fm5SZUBkNyU/PE9KdXZ8QiFKKXt7PDB+I0IhQDZOdnZ3LjprZ3duW2FbUzMvdm0sIWFnbjUqcHhqKzBTOHc+KDxmcGdqQnhbalZldmoy'@;
put 'TyhyVEpePnEuX3BGcUVYXihCO1duTjVJIVZ0SHA9cmcyPU1+QUM7dF8kKFlQaEdzPHYrYylII2dOT3suRXIpRCFLdHxfLC9UYUp5Mk97Pkd1MyhuemBTakFQezNHQH5pemg6YGFRJiVgWzpta2dKUDEvN0pyQ2k8WC93UHZbXiFUcDlZc3l3LnUiJWopRFZXWyhnbVtEVnRJJEJ3fVcjdlVCVndi'@;
put 'PFUjRiFAR0xnTG9oZ3E1KHtGSS5KVVQ+WDR1LDFFUDclZHs1UWFNOW56NXk4JHkrLGQ3Q312cGhJIXhqUVN1aiJyP0prO20vcW8qTCFWfiVaYEZKP3E5PTNZP2FHLExLNzJGfV5ReENUWTFsPnJWQVNQa119b3ZpZiQxNHd2bi5TQFNnVmJ5XWcqamdsVUE6QWBXaUU3Zzs7ME1LSyRgRi5LM2lM'@;
put 'eFppOG1YKSlIN2V5QDU1XmtXbk5COSxyLDFWUF5UX1ZzYGNhI1NXMTB2NDxGSFVnOlore1E4Zyp+QUlrVCQ4WGUsRHtqQWJDdVdAViZ0Y1hxcGFUNTh0fDpJTk11SFIkfFlIUEk4W2paJjoiVCQhOUdBViZJQ29Jc3BtLjQvVFBYeEdMd1pCcF1tL3dNajBUYXIoPTd7T31eIUw4PnFfbDE2eUg/'@;
put 'fjdOPl90Nl9pLzkjcnc4Iz5uLF1WckUkSyZpNmNEclBYeihOZTs7JjEyWSI9aUo0U3hxTUI4RDlAXmQjdmM3fmArUCUoL2l4RmJgRzApeVdQOF5JfCwyMTEhWCNTPllPS3dRb1ZeNHNPIzt8ST1qUXtFOUxCcV0jW051QU1UYDZGWShZaFM8ZFtnI0kkOWAreHZoODIsSjVuZTJqZGkqNGI0dU9z'@;
put 'ejZmTVQ5WG40WylNPlN5TCZzdWgkbyhxUERGMUhNSHROI1cxdXQwV3VlbUpCTDF+KzVZdlFhWyxZLDM4O1JTQH1OT2RlQ1d1KCtFLF9pO0M3RDl0N0hbTztRUDI9fX08MlNXTXttdmF9RWFfY19FNmdyKFZGL2c5fmF5RXZmNnB9MEQmMEAlX1JIcSZGLCFAe3kmXS92bGwhPEhLUjVYYHpmPEFI'@;
put 'WitsMDsySzk3cjAjXyx7QGBXVG1Db2ooOlF0TVhSQHFaZ21vdz9OMDBAbkUvdChWRnEkMkxmYCVncD4/WV4xW1pxKllYSlc5JF5OYyYlWHZbbHk9bFAhIiU3Lz8zVC5QYFl0O3RmNXUmLD89P3VDfGZTY1RVe28hXiRBTm18SDBTLGZ3UVFBNlEsbTNoQn1DUysoUDYzfT9DeiUjWnJUXmAsV00k'@;
put 'VFpVI311Z0ouVWFEaWdNUnBHU3swS2E9U01mMTM8THVOJnl6KnArSE5xcSRfW3pINSgsOERxI35APnQ6MXJCJSwwVUQ1YH1qYks7XnlET21MS2U8YEleczF1VzpZLjZPPmc3L1tAS1EhKmpnfV1pSyFuZ050MzJsXzZ3Jnp1b11kWTh8XnwkMnJfS058fEtOPUJVSU5Jd3Jva3Fba2MrbEk4I19j'@;
put 'V1ZFcUskXmRtM0xpe0kvOVUrLzl1a0t+OUh0KkQzeGJlRHMkZkE+Kj01OHk0TFlCPzpRPFpuRi99R1d3M3N1MnU+JkQzfGBSWlpOZmxiQkVeOWRWYTciWGRhez52U2khZ0I2PH0oXTl6M2NSTT5sNHgmYEoqcksqYztQTD1Vd2EwbmsjT3oxZjhRbzRTMUAzTHdBeEMkW0dnaF5rZ1Y8W29eZC5w'@;
put 'Z2hhNU1YR2lZKmR2KlBra0NdJnJmYEJMejUySHR7QUJLeWh8aEtgYkw5XSs1T1srNEQvcmkrJEQodVtDTiE9OzFUTjdJUW5WTlZCPXRSSlI4cFl3N0JefVFaJWR5NTNmRm1VMzUsdFpZbTBkUTddPGtAaE9aWEU5RWojRFRpZlM6MTQqaEVKZ0VyZnlvOSghNzUlOWtCfltFXW4qPnI8OV5id2B2'@;
put 'IT43TUxQJFVJOT9yMSw3ZnIzU2tjI3VPWyUuQTV0JFdXUGd2Y0F2ZH1iPFEpZGJkeFF1eHB8ImJMK1pFaXBHOHZKKTIqcCIpfGFISCJEKTYhPUdvQmgsSCk9QWkjI3phS0ReVyYxSy9gMWJWNUlpIzdZbDsyKGFyZnQmPk1MMl9+L21zK242KWw5Kj9PJTlKa0p4fS51cH11V05AXSlbKVRVPUFd'@;
put 'Y3ojVFkzbiRRXm5aLnM4elA6NVJMLklZcFlRNHoyMGFkPitmU3FraEwqMyNxOXZhMl5KfCtBTS5dfEZAQ2t1QUZxLDYvMD9oSCpuIktSX3ZROkA8OUE7TEwmIT1OfE5CPmp2RkRkNH1TSlk4e0hpM1duNig5cjFGRzM5aztmfXc0YGNhRSxBfEwpTUwrVHZAcnwzYWtTSChUeUxhK0JESDI2aXx8'@;
put 'KzpBdS4lRk0vL2tyPW9+RiFbY0hsdl1edU1AO3VKR1R3bkRPS2pmWllQYzpwKXMhZD04fT05XyFdPF47R2F4e3Q3ZG0kIyxpKV46QylwVFt+VTo/OjNffkxkMWtxZD5YTHU9cChdST59I2ROYyhZemRdRiF2LjxDO2BGQXtTNnZuVWtSL2UyMzNZSFBbb1JAIlBlPnsxUWM5XStQSVJxRVFGMEN9'@;
put 'fFUyeW5Te2kuSSg2R0tudlVnOmYuaHxBUlNLTiR1YnZ0dF0rbVlqV04iNUhGUHVmV0VBZzI0Pz9GK0kxUn5nTlJzUko/KXxuX3xRM19XXzFxIzB2MSRpdDJqQiFJQyIrbEVrY19vTFlfKClySHdsQEhBSCtlNW4sZ2hbKWt+Lk1ARmA2MmU1ajMuX35kNFQ3fUt+LndeR3E6YlBsKUtSdy96MDNW'@;
put 'ZmAuY2wsaE94OEckZip7MWFkZT9rYzF9M350L11GT255YlskL31MbmF7aU4+K35qc2dZI05nKzdUWShEZGt4MmNqTDZPKChxXzBGXzB0ZkdoNEUmeiRFZUh6KmxAJUJ1S1QpQWIpa0NLJClTN0peSmZEMzN1c0UpcX1BR3tSaWBvaXJfR0I1b3ZKcWBvNk47KihDIUdxZXJAMFVaaT5NfjhTQF4v'@;
put 'ME1SUG1baFdHczlGdVVESix6UWV1ZmQ2VHlsa0k4bi9qaCNwdmAqTDJMS2dAaS5gdUs6ViV7PENUdiYqaS5FWEhOXmtJM19vfH1+Zn1nXU42VTt+V3taODYmNlE8XkUmM2khLzp4IS9xcjpdMFQvPU9GPUEma2JjRjcpRUNldn16PGFpSWFCaGtrVDxKTFBxSnV8SHFgNylWRU1VIUdeYG04bi9X'@;
put 'RU1yLCIoOkMjJHkxczg1cXRAcTowMnh4UDpaczxMbi4wKzkxaGNMdjpJYWZkLzw2aFVnSG9UbVVgSHZJN1ZBejdiSihmTlldI1NBMDErfkEqXWY2YmteUCFwSnRaME4lXT9ZUTcldXgzYlA4eCVOWl9yWiksYDRoPkBgNFspO0lyS1VCOkdUZnp0JG9+PlsmZiRhbSJrOH5odDd8XT9FUnxoR0FD'@;
put 'QXU7d2k/S1c+MTQkMEo8Rz9TTklHaSYpZ2tqbTIqZlczNSxuNCUrSSx+Xld5VD5jISh8NiteQSt1KTAkVi9uX3FZYlsvQ1ElYDtaeV5GOGsuKXpGJXI4cjE5bn0mJWk1ZSIqezEsX3B4NXcxKnB0VCFwO1hDdFl0YWcvcE8+bGFhfnlrPWZUSjxeRXFjJEhMVntFaF42aXNVNitNQE85YE9tYFtI'@;
put 'bE9uX1haNjslaFp9RTVFW09Acl5VLnB0XlhoOyZwYHF+L3Z2cV0+MEs/RisxMmNzYjQrJXY0OmlCKTYqV0B9OW98RF19KGNbSE5wOzV5cGUkQm08fCtWY2gkalZmQFQ8Ly9eVypUVld6KSFhUTZkNXFaNj58OnFRN1ZTQjR2NGI4P19LYEYlNCllfk4vNGZLL0pUb2E+akBsaG5PJWshUkhZMTE2'@;
put 'IXVFcCRnKGYoMCVBWCJZPXJEc1dwQCNiTXc8VXBtQHpeRzIhWDBlW0RfeE9SdmZ6fm06Z2NlM1hUbilfbU02OyJwLzFrTmA9N1JGfSZhKmU/NkJ1c115UHdBQlkmaUZqRVg0Lm48LkNVKlpSOCpidEpoWXJIYnBMQ09SU1FIJD5yTjw7SHZQfkZncUtCXTM4Qi9EQkY6Un49MkdXdilabiZkNWo5'@;
put 'fT4vT1pRZVtiUyt2QUd5S2wjX3pMaTtQVjsrSV56UFJkLjFbVmJ6ZjViZTwwRn4/VEtzcy5Abk9ML0g3eTVPeHB8MHV8KGgqRD9HX3Y2VCRQTmdUNXRUXmo/K1IiP2YzI0Qub0d3ezozLCtjdy9BNi4jWWhkQltpWHpQMVFsNUtlczRDUzB3YylmWUl1PUpddDhKdTcwfmkoX0h5QWRXNXBvO2Yz'@;
put 'dSJvKjJEOyI7Z2hbdGsoTmpiI21xSVd8JGFMTTReNmFnZTRhOFQxXyFnaldiYE9Db3BubWgxK3F2ezlBN1RPRE1VeDNgdlp+SXpiaEVBdj43UGskNHlUQmlvUiRIVkN3ST1+KG8jKEJJfnBQZzokPWVfI11JbyFvLGBNUD5mJnV1NTJDRXRmLCZtTCxreSNIKWM8fCh7Ok5DaUpvNU4vK11rRX4s'@;
put 'VmlIdF5lVVReXUI0Y0J6eko0dUJFfSZ9L2c8MGFxb0YsZGFkYzJZbHMuKyk7QH5Mc24obiNMVlRmMSR7XnV8ZlZZTFBtdXxqL1Q1WnhuYTg/Q0RvMD05MU1TN3JxPXxbdDE5MFEkMmdbU2o2VnsrI19Bels7KWF2RE1pPDdpbXE+SDVtQVYlSDpheSNEJTE2ZE14dUVHZDc7flcmei9FIiNrUjJX'@;
put 'KzVuO2tHbEwocCYuN3J3QCU2WF4+c2w0b2VuM31dTXJzaD1EWU9aTGAxdlczdX5NR1lAVW15M2BBOSR5OGFDL2orbD1UU3clemluL0UoTHNDTnUwUFA/N11qKEpJeiR5WHcmQn0kXipWKGEwb1hbVV1VITJMTUxiWi9TPkVSV2Q0Tig1MElrWlFodSo+NGxhO1g6ZFBzWlpRYSFFLl1LKFdjWnJZ'@;
put 'eH1Ic0VAcEhgM0Jsbz9zUlJlaWpQNzx0Yy5bYz8lImBeZWdRdDdpcDZYVlhXKEBfImZVXiFgP1lJaClVNFs1S09BNno6Rm5SdCFxdn5yQiFsUWNRLlcuRjBEUF4xSHdTciRFKVdWZDxyMjopejZsb0NtfF0iZTJvVl4rTTRkJHFOe0A/U2IsYFNSMV00bDRJWmxAVXEqZUcwX3Aiem5hWUpwVml2'@;
put 'bGR8WWl6SyMxfHxJXkAydU87cGVnQyxtI1crai96S2osT0hYUD1uPmAjcmshfTQ3P3l5Jnsic0BvVmk5YXdYYiYoJkI9KUV5NHFfQWFnPlhEVTsyXlJSd2IrbTRkeThmKGZYOVM5eiEuKi9uTEtFQGJgXjZvdjVPc05YOlZzbVh1aShdb0Q6WUpudlpBKW1ZdDdwV2sqdyJsa3RXeC5fU3FAejZb'@;
put 'PCtiITMyTndZVDlga0NpQV4wPGtbXixtZk0xWHtqVnZueXM9cWd6RysiW2wre2JOWjR5PDxCYXBDS319IzRHXjcmLnVZNDNjXmo6PVc8RklCankoYWVSYEI/VXQpMXJiMEAsZVUqRyZUYyJte351clR8Q145fUNkPT93UXJxclIjJVlUOHNSMHRCd3N7JH0xWU1LdS5xPTg+TVEkITEjLCk8ZUEq'@;
put 'RFZfeWQxbzB1K0xBO3BMcWRRTjFIQFswZHFiImg9UXNrISUjN3ZlbUBAIzx+eUlMelduQkNsKnBpZCsocFtzQCJuN1MvRU4hd31ZJEkqVjtpezo9ZnB0P3prSFhwTk4lIXlmU1lxRFZrUyNwbyFNPiZTQXMhKTBmb2ZHSF5yUlt5LndLUmlZRz56c1hgVTpMKDpDK05qUV5kU2R8IX01QUo5OEtV'@;
put 'JEFlemRCW09oKCpZUlNjRUU4WTVGUkQ5RXg+KUdLOUdqQzo0RSR1YEgqZmp9NjRoKkkwYzBlLiJ6c1BbejI3ez91eypjRSMrdHt9STk9KyxecHgrVER8eFBzY2V3Ny5PRT49Q19kcWUkInNpKFtoUnY0dUUpXyV+Lm9STXh2SmVpVmNjN1tpUk99Kk5pU18qVUdFOD1EZ2FHSnByTnNZRkN9enlh'@;
put 'dnMyMEQsQXZTVTJ0QW5YayN1NjUqMzNROGdFQkw1SEs/SHFxeCNKUUVKSTc9cUB3LilOQHsvPkQqJDdfbmRXfm13ZSFwVE5dOHsiTnpXMXssdC48cFY6SDwmNWVvRV5GKGJPRSt6KWdvNTIhaVVvbyFlS357KmpSR2QrJkR7S2sufnZUQzNycGVoW3s0SXU7Z3YmLGdPXTxWZmw4djR8TThGVV15'@;
put 'WFEpLmNrQTg/KjNCIUJLSndIbHN4W19iOk0kdDs/LiRZRkx3eEBANXh9b3hYIXJhSHtBVEtXLFZ2Jl1sTT9XXmFSeFFgbS4wUSl3PWFATT04fWJgXVVVbjUhWm0zSzY3RmI/M2N+IlFYOypvPUYhSz9JQUBOXmckVyMoNE84WXc1LGErTTgkYFtsZU14fVMzOXdyaGIrISlzeGhNK0A2UTI7LEle'@;
put 'YENVYWZXaVhScEZleU53NGR7TkhUckx+V1dPZF5pVCxVYV1IcjRpUXdQMlU7dzAjVyM1cHlYYDw0cGBhRSMoNHw9R2ZLKzFTfEgqQk1JcyplSX5DNk9BQGw1dSZ2OigxTWk6cmhLMlVrJiNZcXppY2JwQyZSaixRbGo9XWRmRV19Okx8NlBMe1ZbQEcuQXtdUUZyZU0hN3JhamhjfEYqI0tGY0w9'@;
put 'NHVZK0h3U1lQdH0jcW02WjZlMEQhYWRlQkJbdX15b0x7UyU5Ok9ZbChfcCQ/VDhRYyQsSzc0dEBNYjg+NWVePjtEMDtHT058TmpxJmsoYVNzIzpFQDw0dnJ5ZTJvTDhNZjZTaFlkaEkiPCE9bSE4a3Q0MTJfMDJHNyJaWjZmN2V5PzN7XW9ZLCRvbUZ8MzFmNDgmQkZFWTY4TXFCaGNddT8iP0hX'@;
put 'IUBMRUIyO3xJL3JQS3ouQ3taJVBrfmJ1eTh1SVZLSCg5TyhheHsqb1J5flg/fkAuUiE9VVd8JWo9K30jKjY6dzA4I1dqTSw4TjZ8WW5zPVE5NGYvP3I8dn5JQHk8QDAzKUk0fTBHXWkuTEMpbjQxMStVRUhIdGgiYno5KC9JLldXSSEja1FAKT50ZmgvezpKOU4hM3N6ZD9ScnR6Y3pSWlZraGRM'@;
put 'SiJjO3pvdD8zYT84dyRMQWIvN3l1aDFFWHRjciNGdzx7eSwoV2Q1UD1iej9oZUBTYG0jeHMxQGZXT35uPWA7Q3A2TkBZSTNWKjdUW3t8VnV9S1MzNSxUOCN+PTo0bExXdSVSMjdWU3t2ME5gaFhXbSJMVEMuSzchcWNyMHAwcTBxeCp8dFFsOnJMaD5LfmE9bTFEaiFUaj9QWWd6NH01e0s8ektY'@;
put 'Q0VoOjFdbUw4V1NBZEU9WFgkVmlUJSMyPDtJVEZQcGxHQCk4aiJJMEplQkx5aDhAKlNGITxIOjdgdDBRQ0lSfEV9bF1GeFRMbFVoX2wiQ1IyVHlZJUpzI1BsMEEldzxbeyU2I1t+KGtYRWc3TSFReHJiXWMrPTk/YW18OU05LH5CZFA6WSVMZjQlaEBfKDdnX09yUFE6ciM2bFFjPV44UDNZUzdA'@;
put 'a3FPNFBFK3V4NEZrcUV7dH18cmIkdi9IP0R4ITVoXUkkL1NXVEQzWEAleyMsMjlbOmh4M3M5SWVsP1hsOlNYMGdJREIjY1NBVS9ZJWk3eGkvKC98aSJEZ3t8NGclbF0rTSt6VmBnW3FLVn4wVUI+e1dGcyk4JDhSfX0iLnZoaT1FNGR+Km9ARnxlQ2Q1am9JaTZNMXxMXW5pbjt7cHw8eiZUT3U1'@;
put 'bWtOVjNAKl9PfmlkcylzMUpVbW88JUZpdlk5X3BzekUjPUlCUzx5dWUmXVVCMkVZSUFJZTNzaVpVSDRHP15xNGlPdHtEZC4iQTNrKHo0eF1dKSI8JHQ+Q2FWaVhBQlZ8V3o5NWE4fXM0S3Q6dmVoIVpUP0tkU2cuTCFQXzEqUkxRKyZJSGRJSUgwPFpkKT9RcX1SRXJXdDpkPzNyZzdOMTF5fGIk'@;
put 'Y3pOKlFUb0A8b0BHMT5bQiYyeko9aDFvVCFwcEVrYjB0SmVqLDV7fDhGaDw/bj44SV86TD4iYEh5dSJvaE4/Xk9zUmxNXkJdPy9ESj0sYSQ7YDd5aGBscns1KG9mUT9dPXxpY1NFIkhuPkJlMnYxRT10JX1WcXJRel1rVHZMRDAuZ3J9W21TSGhKP1l3aFFqXUVzfEc0UDxbXnQrXl01R2NwNk1g'@;
put 'dyI9a3wrNHNhMHZIQF5NcC5LZGc5QkQjKWJnU2dqKz17b3d+Tkowfk50LmE9Yyx8UTJNLn06Y3kvP2Mxd1FiOTVVPnZ5MzwrJlRmI2tMUUBmIkNjPTJuJnVXJDRfbVoiT1JuRHwjKk88OilvbHV+JUVhIWBmXUtRaE1vUDFtc0lwRGhGa354QjpNZj14VW14R2ZLdmV6bTVYIjQ8KDlZaz1lRUhq'@;
put 'LikiQiI+NFt9QGxOeVJ5ZT5pRCk5S3ImUTVjKCY4S082YSx7aWJkKmd2Z31bVHRGWD51IzVgNjR4ezpTK3huNW9wb2RAZzldS2R5PCwsPTZTSCJKIVZHeWxoMyEiWXcoRVFFeSs6RGIrczFgT2JHOiJiJCxWZGUybExSVjx9RDEzZXl0K1NaanxteyVhJW8rJjAkL3BnLnMkYz52SV42aSF9UE92'@;
put 'ZVpbMjt1ZSFuUzFaI3RaMTc0YmZSTmIubUtdQyxVNHtkZkpfI1ljUiElUU54XXhjdEduUzxDc1Q1fHZ9TWNoPFk6QyRRYFE4NCY6Ol1OMTR+cHgoR34lSCtkcE09OXs9M2o7WHlRaT54W2J7R35ra0ttQGIlTDVnQC9iKkpPYCIme1VlQ0ErPj9eNDRTSXpZbV8yI1gjfUddeXBeYWM6QysvPGNX'@;
put 'JEBNPF88fTVBQ1V+KUl5Pl5nYTZRJDRrcVlJaGwoSEx4QTskaCZCPDJCfmchYVcpdD11b0ExQXFZdz4vJV1pJmFnJF5DLi9nWkd7LHIkLjJKVThZYU1tQ2E7Kk95ZnJHZXJePWpFPCFTe3V4LFRTO0pSdGVqZnlUUmg7JWZLY3w4eCJKalldWDFuYnU/SWU1N0wvbnp5dV0+TWcpaXpxXkErRTtN'@;
put 'K05LPXBGOUJ4MSVoO15FO2FOTWYxKjJeUllxUXF9bXptO1p0NlddSH1zXyhKQEZFOl5lWHU3ajJwQDVIT0dYM1cmV0JgWFMkfDhXJltSSC9DRTw1dFlRd0pUNkJNT0QsX35SMlAiTiEyLkFmTkpgWTE/KFYxPj5pWlMwRFVDQm5ldVdPP1NbZW0vMFh8WlFyS1gyfmt9UiNUQXhhKE1UcTI0PWRM'@;
put 'XUdbPEIsVDpTUlElbV9JdnNtPDxsXjI9Z1FLR1NLUGV1Xzl7QFRwamZyNzdYXVFab1dTQEVvdDJofCQoUmJFTmxaNStxPmlnI2YzeHcmP25ETG40YXlQQn4mYzJKJnd5QF9VQShnKTpXIWRmQFM/XU00JHljWVhIZVpickJLOypIJU91aW9XcXFHTUhKJWBdSmhUSjl6bjVWQGZGJEBXK3g9VWd6'@;
put 'a2phcUIxREJpbSlLKmZqKG00aUp0Ik9CRzxLe0Jdd11AY0NAKH5iMGJ6JW1sYSVpMThLez4qXl1fYz9LZm4jclRGKVQmOjcmMmxVNmhUI1lDcEJnXyxCPFNUdU9BIl07WzxXbi4vY0swengpKFJqWzRVbT8sPjd5LiliMDUiV3IyO3BMMl5CeTlGQjN6K01hPTp5cW9yVXVNXjZaUk40YUJvdT1p'@;
put 'M0dUWjt4Ji9acmRSW0F4ZX17PFY3Q149YUs1YWpiKnpDfStxNDQ7RChuXzw/QEdgdGVEPlImL0dpeFEpckREVHx7SkJsaG1yUTxhdmEuZSFxd1QsfippT0IvY1MjdWEleGN1Zl9sc29xNzBENE5UNShJRHMwYnFwOTY1ZTFrQSFiYGdTdUVjMktgdmlXMG5OVlcmMjJWKit0SkF0TXRNMG8iL303'@;
put 'P1diVX07Z1szS2ZVVm9qLz1PQj9XZSg9dU87LitxSlJ1K0cwanh+bE1vOG9DXnpibkBOL0d6MjNGTT1QQH5UazBVaHJMeHskXX1VeyZXKX4mNVR9Vzw1eHtMbkBqZD0yVSoiUHtRJkdkWyw+QkV3SEdsNVU9R2pZSC9MVGo6RjRubF5IYn1tMT4pbDwjNHxJa2NedmJmZHZ6Ij5GSCh8L2QkRUhO'@;
put 'a31+NCJ9TW9RTl1TTDw+SGhVcFRNKF9zUCFBK0NjfGtfRnFVSClwe0lhPm1zIl1HVGtFWk8wQzkmPT0hcVs4NmtsPDcpWyJ3UX5BVTRWfHFxXXB1YHcsbTpTOkthNi4oPl1SampOMS46W18vYitGaGpUezUue0R0TUk+T1AxYUMvaip0XW4xemdOLGJ1P0ZGNlptRFFCWC9gYlF7KyhXWDI3VV9b'@;
put 'S25mJlpwMnhBRn1BIyNWPT9kQmJMLEdxZ1NxWElOZih5JXJRKW5aWFtCKCZucUY8YCNNfSghUnMlY04oU3Rqb3trN2lyVkl+PU44blVyL0UyPyQ6PCY7YVZiM3hSbzQzd308eTY9cGN+IkkvMDNwcE5hQnFXYGE4PCtNOm10N1dzP11qK3oqSkBselFBMV9AOjl3ekJJcFFJJktyVV0+RSEmeVQz'@;
put 'VUd0QmdANHhTKitfdFpISl19WjdgODAyX1tEfEUpPFQ/P3o8cFV0dDxoV3xeKWhzKmQ8U0MyRXorRjRmbGc8fmBRfjw/JjRYMXZ8WzNSYVozeXE8PzkuZENUP35KTHFebTg6Q1U5UUl4NVE/fl1ESU1fdSZ2PkpEbExjWjVWJGJRO0lpbWtFWXhiL3RlNGklKnkoYF1QMDhKUCNwSGYvOyVyUSx2'@;
put 'ISZKYyhzMSJLJE5qKXtBUk5WJnhxKzZ4TnleIypvMiV7Z2thc0llXnVSIXl0eGk0MSt+Yks8Tm06NF1BMCpiTmwkUkpUW1p7Jl1WTyF+SkZ+RVUla3oyX3c3djMkditIaDtSIW1uckwpUU5ncU5SYCp5Ujh+UV5ETGFsSzl0MnRVVlYhRyhFLC8kNFpEQ0VeT31ldV5ddTdNWE0lXjB9Uzl8NylA'@;
put 'IyNAQEVdN144ZnglSVhsQTslLDdFelNmQiVIUzImNEkuLHxsY1ZAb0NLPyxocU8/PTVNdzpGTlBWSl5EPi84JUU2dDtAcWw7Q29kRV12Mn1mdkBla3EsRF1hXVVEJCxZVHsyaWN0aSNqKVdaSXJHckBld3xWMVc2N19lQG92dnI6PGhWcUJ3XX5jcF04M1FBI1BHRWldMWomZkJ+cE5pLDAmL0R5'@;
put 'LjteK2M3KUVQQmliRTtQanVWRjV9Uyw9Nm86NytkbTVqYHJrMSMqQTUmaHQ7e1lIa2w6Kj9wYFdaOio+YltuUipvQlhNRSR+XzlgKnghbmRadlVGYWZzVHUyYWlMQktkKG9WXWBadF9PM1c9O3g+PDUpKG54TypkSHVZdncqUjIwaT42Tm50OTR+IkpFfjtFUk1Oc1tAPGtfWkQ0LlojcCszbiEh'@;
put 'JHpeTS55em91MH1XZUY7KkU0RFd1Ijg0ITE+KklqKWl5Q21HbV1RazFkZGlYSn03V0pCMT8oYEo/cjtWZzxHUX4lN1U4akl3b1FMJTYqdWYrbmc5KHI9K0U3Pl5yQ3lJQjcod3tVLGFZZ3RoeGNyd25kI1g0VCxkVUFXN3hwekx3LCM/OGpHQ0ZPZXovZ3I6Ri8iTyMmISt6TlhLbnRYZiFSNnAk'@;
put 'IX0xUDl0dyQ+d1hOR3ZkUkw9IXJ8dEEvJk1HdDIrYX19KDY4JENXfHwiSCRxQkNAbU4pJXR9TUBbWiJ8bT4/OSRMTl58TXtOVkVZV3Yka0N9R2I6V3ZuZTw5WCs4V3VtdVUjdSkiazxFWUwzRzdVemU9T3NuaTdHLDA7fSU4UDM9L0E9LEwsKWlRQSpUcCJlbWl0LD5dIXJFUlQ3KyY8X3tNKigz'@;
put 'MURmPz9VcixMdnx1N0lFdVR6eGNTWCV0fm1kKEpZeyw1ZXZMQWtYPjkuZWg3ezF6dW1bYGJ5QFRTK2l2cklRLyxHOFJ0R3hhMyU2PktAMVNgQFZXRXo2XjAyITA0OHJQPXVmMT02bmh0ZzxZOnVkTzVNZDhlTThhKStEJmBGZGxbc1pPZUh7eF1OcjV7TShCW0I7WGJOdW5IKW1YMiJYKi8+Pn4o'@;
put 'XzcqLCFTKjM9YjZTSFhgfD9pVVJWeVhnWk4lQGtAfSMrezJfUFpEKDNqRG1fb2peNUA7KFFMJHAoU0gvQylEcEUqRnNxdHl5QF59IT8kJTd8JSo+Pm07JSZzUn1FKHdiMTRkUGRAbkI4KEphUWU9RzV0Nmh9UDZGND53JUZwNT8kRTE4ODR8RF5sPDR8WEd+VC49fEU1STRTPnVaNX4kdCZzfS9K'@;
put 'R3VdMnVzZmpjaGVmMihmNk1sLHYqdy59d3Y2fCNjKCsucy95X3YvQV1xakI6dU19fnFXPjdeQW99OXY8b0JwWWpidm1Ycj9QTChoMTIkPUZUQ3xdQEFxWi56MyUvV1FDdVRJa0Q/fW4+JmIyQ2Vidi53O2oqVUZ+QH1qeDF1RHguQl9CdzBFMytrPWRlLCN4JG1QbzpwW1lZQiUrNWo5W3sxKkch'@;
put 'OkZzVmFXRmM1bkwsRU9Pc0x7XXxeVCtvJElXPD8qey5dcVF1MEUpJG0qXz1MY0M0RXchbFt3SysiT10vYHY6Kjw9V0dKKSQveWxAJnpXcTpCclJkQFRPbk47PX5FMktfXjloJTtPJjU2RCU4RCReSzZUUzJQcHt7PS9YKDx7a0V4PDRWPGUlMjEmUyo9X3RqYSQvNSN4bV1bXXk7XnRdPj5+Lys2'@;
put 'KytLU2AqKEM5MEVjX0QzTTVxbmZNNV54TGguKTpZMntQNGZ7UXRjQX1KWDVOVEBMQmw8RmptXkYyVCZSS2d3fmYpc0dLYV8hY2RWUCJdJXcjKkJSWiNbb0IkISpYb2l9UkgpZ3wiNSNPOVIzflc/fVFCXzpgSmB9bFlhbD84RTlCRipoMWY8L1l9NjM/SGdiN3cvcGsxNV41UiZMXnQlNXlyUjN2'@;
put 'YzxCN0tJLz84OzVBbGZaZSU0OHFzYzBGVishJT13PDgyOVZuaHpGUnpUTC5uKEd8NDM6dHxBL3BKVys7RC51XmB2U0VKa1FnPXtvSmhNRi5jcl42eV5tPiF7N1tVVzciNDRZM3t9OHp+Oi55aTJ7VXVfRkhIK0d3XjNtOVlJUEFHfC52cXA1TC8kbHouTyYxJXhETVV+WStqNWBSR09FLi82REVn'@;
put 'dntPW0M9Q2EzIXh0amBAfTk/S2ZfQ1p9U04iL1QjSDNnfT5YQHRkUHhOYVVpdDYzQnV7KnhvcSw6MHFHUj5QJC9PejNdXm9iVUd1PmdBWUIrPHBvX2dsZiVkWExjez03UG5lPUo1YWEsX1ZrantxY0omIlhTMm0hQWZfaH1TZ1kjLFJtYkhoTDduPmVuWVdqcWYhJm1EM2hDQFZNJHdRJSYyNEh1'@;
put 'Xy8wcExtYnYlMnFdbE9GTjhSKXwuSF5bPmE4eFJNTW4jd2MzV2VFIS5HIykjPE1zTVNtWCR8NDt4OVMwJUpucHRbMl47Iih+RF9eWnwyOTksY3ZCR2tTW3k4bG02bkNRRDJWP1c1VCxCU2dWZTFKe1ZsRTJCYWNRU34qZnc4dyh+bTxFKXtPMV5zK0EkRTk3UHxJeE9LdXMrcitDVG1iWTR+I1tx'@;
put 'cmN7dG1VcitmJVt2WE8lQ1hqR3lLMmtxYjlaLGZAM1I8YlZlSmh7aSxefj8iKHBWRWNMYTZzVlhwYGFNPzxtWXJVRyZCWHp5R0k0bXc/dXZkMTZ5bntsKEpTbFI+PlE4SHtyanM4WV1TMldYcl11d19qTFMzZiFdTjMuJGJyTSZgV2FdJENQR2AhYnJ4WXlENTghRCkiO3MpV2dKMjQ7dHRQe3ok'@;
put 'JDhidVFve3dVKXV5dDE+R1I4bFpvbW5leismdkxsSU0sbz4sTEszVipTby9dKzhgeWR4YT8lbF5CUjdvPloyTnZRP1ssVjFrWWd4UVlMaFgyUk1Oa3I4SDJvYSRVW0xeL3lNazBvaytPLnhSSVZSIjBTWnlsYDE+S1AsRU5YOjk/T0tPL1Zgd1prKT5Gd1szdVFCbH05V1Evdk04eiEhaWpCPiRP'@;
put 'IiNhc3R0Wmk0PFBgT2UkfTwwZG9DYzd5O2daLiUiaytCfkcsKlFEK2V2UkZefVNlfUVRUHsxdVFxKmdqQTd7WzByfXYpXmsmPllgaDhrIzcpbUlJdV5iXnx9OCxQRXJbeE4yTUMmb2RMd0VxfWhdTy5CaWZsfjxKaWI/aSs2JFdLOXkva1dDV3R7WGNIXXxoLCpUSkdGOGcuQkE8TkszRlE4LH5B'@;
put 'K14kSXVPK3Ywe0R1LlJ6O2F4SHIpOXR4U19iXVFBd2VHLklIJmIoRFJhaGghMVhqW1BVTWhiU2N5XyFkO2tIQnlrO09FJilyV2BgbGd5d25KV0tsVSpYSyE4Pmx0JT9lOHZeITNOQHZUdChtdmk+JWEsbihxfUVDKyIseE99SEhzUVB+XUU3dDUjPjxdeEp3WD1ocTNgUkpzeU5CJk8oPSxbcCtL'@;
put 'R3o1WmNeK0piZFQpYChTKVlxQ1B3bXlaZ2xCaG4hSSJiRzciKENgbkFdVHNie24qbCRPeXhWIzc6SF9pMEVXdSRrJmVbRj9KYntseHBmcnpfaTZxV3I8ZWE5YCt6alBJenI2S2NqZGwvYjJlckQsO11AeHAvS3oyLDM0IU1sWywlVkx1TGVTT3I2e0dDY0txY3R7fls4WUNDOV9IYlRsQ3giQ2da'@;
put 'aF9XXVMubUpUWSFSUUhGITFLe3ZOPVM+WUk+Z1MqP1A3V2YvJVBdO0ZDR2MkMSNpSGBXM2gmaG5feDs0OyVvKW1JaXJ6dHZpPG1mVWZoL3Z8RDA3PzorLkprJDovQTNwTE9wI2c8dndyaF9pVG83Okp3TTBAOS5jcGVqbzpUPDNMLHZhKyhaeXdRfElkbD5oalRud1JOTyxRKDpWZ3lwSUlXKkQi'@;
put 'dzUsXWhKNmZxJGtaWjpPTzE3Nk5aTVpgeGtRLHQ4TSNnXkFmXTV1P3dEXzRXeCgoP3F4WjEuTTkoLmF8Jn47bHVxWipeWCRCekVOeX1WcVpLWTs7U0Eld09WX0Z6azhsYCw7VCtjWD44MiM5alcweHU0ISx3eElGc0FCV3lKU0ROYXdydGEpRnxrRWROR1U/T3Vwd1pjQClFbVBhOj5KXjR9eT42'@;
put 'QEdyezV4L2ZPVXwua353UntSfGVFYV8wRV5HPUAqeks3TmpnIXM4eys/d0V1JTpXdzFZfTtnK1NraDV6YDpZVyFZK0lbXUhMfik6fjArY1JOPkhsZiZ2ZHhqdnpjZyU9S29WOWc9eiJ0Z2EiY0tSR3UoLnt+TkRLS3YhRFlxJlYqQFpVMUB3cXwsYG8yIWlXenhmSjsmZTIsZ3ZxaG03fF5AVVo1'@;
put 'YnllWEBEdGg+IUtaREh8VF9peThMVyV4KGdTRHtsPU9UZXNEOFdnO3BYJEFwUipKbzJJel5sUW91YDE5dT8qQnVvbn14ZXksKiksTC9MKzJoM2sxY3VCazFKL043PndtfT1iKWQoaHNWfDA7NSw+O1khYzx2NHppcXV3UUN6VlMyU1koP3NfVzIlPDAhak9URmVZWjBCZEwrUFl0JUFMdXIzMlgu'@;
put 'VmReb0dXNlBmVl5veFo9Q3tXKy4oJSImJj81JFlxNkI5ZWNNUjs0KlkqU2ROVyt+O1pbJXApdkY/dTFGIkwvcW9QQF4qLHBfZj88YW9kQGAxUTpNPkZwL2tUL3ZRfkNgRiNVd0lHQjFyMXJZfGJFOGxCSmU3ekR0cTE3K0pZXnwhSTNVJEx8bzBKaSxDLGBhWnk7PyY7Tz1HfVtgRz54QEFra2Fp'@;
put 'KWQmXStpX2RAYm9bJkg8USQmVHRFbVRZTXkuSEZhZGNhfklpTjE8NH4jTGxyfGREYHgxSn1pZHJ2LyFuND51RzVbMWB2dTxCUz0rQjtaUDEuY0pQPUBZcXxZc2ZLOmRVJEd6dmFaLHVHTFdCKVU1ZkNPLk1wO0pMZyVVQyZHVkVMYFQjQERNJEtjPlFOaFpkcTs6ZEwvT3tMOW94PWtlNShycWMm'@;
put 'QU9Pa2B3fVVDOlh0SD11Vld3JXFIe1IzWGt4TndsIzd8W09ObVdQeGt+bXJjZHNGZTlWc0krZF9CQk5VWlZOVXdDPVJOKmIlcmpwfGlOK0w+d1pbeHY/NkRacCNZY2o6TXRYRm9QJEB6LEs6UXZvc31IJEZtOixZR3FLaGZjYC8uSzRPKlg8NzlRRnRrRSU/W11TQHxeRnpocHp4b29jfFZefV1k'@;
put 'X154cChpPi9lTTAqKH5HSDJ7PkZuNDRqaG5VSj07KDA5UnNnb2VPaSFlQUs8IUlFUWZkLzE8O2R+ZXxELytyUE54Lyl3X3gycVthKGlrdDpIZk5TdHlQenl5P2NJTit6PUkmfkdEQHNseVQ/O0Y7QkpdfmFkW0V9UmRkWShkL0NyLHldKm5fI2M9P0xDQmtQZ3VPdzI0fS5RZ2BCLCx8YiNFInxD'@;
put 'dEBTfEpqUmNSW0BgSzpbaX1yaTFgVlJXUEBHRGpHZkMiTUNYSjBrYm1mTV0zXWZHUXx4VSgyUVYzRURlcEJCQVRnbWRYTmJ8R0ZVbyVwYD93QF98ckNwfDdIUkRGTj0vIW82dkJfIldFTDo4aWR3JFEkaDo1RitIcUhbfVsvVX41YCh7fE8+OyklfHpqJjEhVXJyKmhEKyUwcEp3W2gxSUtxcHAi'@;
put 'PVlIPmRiUD1sZmltL0U9N2UvUTZiWzhON1Z2VytfZWU7YU5+N11mMFZdKmZmdCZSKUw0XSR2JDVVOGFzV0RnPXtNYDwxQ01SWH1CeHlsQGpuPGMmOD07Y2Ulc0JrTi5YNz9sNmo1ODZubF5XMnpxc0s6OU42UV15KWt0JnhxWyp2UFhWZUo4ODFMJDVCSy98aTZXLCRFdiE4dVszTzw4WCZeZSp8'@;
put 'O0B9fkM6e0A9PkNHblNhOEt6KXp9eE86SWtNR09gO2hXTTFKbiFgWSs4LkUqakltJVRvKzteQFEmK3VhR0BWZlFgYXVdfT1xcW1ldC5+QTl5RTwyezMwc2NJM3M+U11od2FMc0BXLH5UTHJ7QiZLdjluO30xekBBcDVjS2FqY3hZc3FZc0ZyT05gY1g7QkdSYURlI3B4LFAyc3A8THx6dFBsWDY4'@;
put 'RFM1bypTK0xxfmdRT0kzcCNnOyF3Vn1UYHpJI2wkVkVpW11uandTRTJEU0R4MD4uZERXTlJqKUZrd2cub2t7fj87eiprVzhMZ35dWSoiNTVnZ31dd1FTa1pOOnFBdGxrJmFfeEZQcjddQ2R3YzwifW5qN1FAQDpSPGJbVXFVUSJvUSJvLiZRK21KIyI9d0UreiMhQ28qX1k7ZT9pMk55dmB6Y0Z3'@;
put 'PiZuO0tWSk45NUlPMnU2bE90Z1YpVSJFPnF1QjgqZkxLbV5bIk5zRCx7S2pMPEJVe1JZISZdQ2JBLkE0bVpHOVY0ckZ1OGldejZmZ05TXUFCUkJ4MF0yVWtQZlM3JTYiWnAlXntzPFgiSGUuOnJDYXtGempJMFEsaEp1WmppeEp9PlgkN18pW3FmRFc4LG1TJjl2ZiNOcE1PNG51R2ltYXghPFNG'@;
put 'Rnk/QWVIQ2Zjeyl2V1FnO292R2RxM0l5YDRuQDRbMDZnW3N2fEo1RyRoSGlpaVBraUksOj0hMWR3b1pOZjN7W2pnOWwqRlQ3VFssPyowLkxwNmQ2bS5TI3xLU0BrNldIZ14sZDR2RnUoVX45dS98IzxrYm5Pc01BL05zI2A2N1VWc207NT9ecWRmeE99RVRLR0lsK0okOEIlN0VUTDt7QjA4QVRk'@;
put 'JjVxM2RTO296dT0/ai40OFQ2c15bNHNScExPZiw1eml6QXV8WjV8RFJJRnJfSEE/ajliR3diVHt7PzVXcGFJXzNKO3p7TjBrZm83MVA2P2ciPSR9cTpvPnMvRlllNFIkT2FfeDoufjUsJW83YjJRUUpJYloyR0oiNWM9alZFNjNLa2suMGA4UlhAOCR4KGo7NiFNZytYfWRSeix1Nkt1Kzgqa3hG'@;
put 'WkJ8S1hiV0VUTmFYLFRGcm0kUkosfW9GOHVWPnl7NTJnczswe0QxJXVAVmM3O25xLkk+MnF3LDdQXUJdRzUlRDRnfl1XSyNZc1NhJDV4XzAyTCRyXVE9K3MpcWJ9MDI7UFNZcFJvbEROPEp9JS82RFh+TkhIQHFqcnJGVWxMe0JKJmArVkVGeTRhbUhgZShtcV13d0k3Ul9oaiU4bDN+Qi52PlRr'@;
put 'TDFBejhyT11GZnR1dUp+ZyguK2RhRG14Z2drTiQifVpdXTgxamdOUlIkbzZsKy9sfXhIfT5iKzV3STBkIVs7YWMvYjs+WDl7c34xMFFJRXwwWSFTITMvTjxmaGpFP1RyS1AwJkBAeFlCQ35gUFNnTXlDQjpdOCVvJEpuX3tLRiRLVyxbVGpdIz1qZHxsdFJwRWtsP0hiRFtzLEJucTB6Py9TQ249'@;
put 'bztmeDJDMlhsJXEqSE8hWHBlPS5db3w/P2NXOH5AZ35hWTdOOztxYl1VL0s6d2VQTFllc1R1XXowN2xJZktzaSZ7LG56eS49V3psZiRMW306MmVxNiQ3dTZ6RkF2YlZETnVWeVIrQU8/bEx9bXhKSnFpclphbmk3UlAhcnIuPCpwWTE7UjkjX2VPT21rR0RjWkpgPXJwTlkjVy5bSklgayl+a1Es'@;
put 'OXhpO3ZpXm9MNmF8a1ZqU3pSZG5vLGwreGc7N0JqKDQsfmY4Ijl5UXhtU19dSUxOVmpEXkBoV3RoJF5vblZLRiMqQ3d4IkZKVEBVTE0pWi5NMTB2fT1MNnxdNHB+ZSRmO0QsY1klK3wkNVpxan0rTzZ4Yzo6flR+QVg2L1hzcCNJT0FOVkxjKEp4VlNTP0k9Vk94K2Z0UiEmLG16fmJrUF5UUj5+'@;
put 'VXc+PGMvbVk3eVVzRkxGUXcrQ2pJTWc0aH4rZX1QTGA0XXZqWlkyMjw+NEVqKEpZX1pWTjB3PUJhKkNWUTVmMWpiPzEvP3xDZE1rW1d1ZEtBZVpgMFFCVlR8VW9pSjVHXkIySUQ5JkBAPXIscF99c3dJcz4jbitSL1NsU2p7I1MmSTtEc252dnF+bXFDOnU+PEU4K2M2RmlPKUFqMHhJJFY+JnVH'@;
put 'NztDdXt6V3o2PCRTNEksLyxtYTJPNS8sSGZtXWNlPXJHPUtReGt7WXY0Q05iQTVqd1tnR2gkT09RcS5pKCU5Z1hwRm1PR1M0R3Y4JEtgY0BIQVkyTUFPOnNKbzdiLkBIPitrMzprY3RhI3sodVBGdXVKMnY0IypLant3KEVgI2pxZWAzfCpPblN3VkxlKD5AZU4+fWUpdDFQOGd8NFQ3RmRlOU1L'@;
put 'czl8d35oIWJJOSRhJCJaSmdtXW5ARG1fRF04cCswQzhVPiU2VEpSekJJeTtLVD9iVDwhMD9KU2ZWMFl7Vy4rP2Q/T09VfnIlYCJJZUNHV3JVSGZtPjpxTURleE5EYGJDWSQ9eDwuQW5gPWFnKEhFeVVYdyUrSjsuQjc+WVpdTkdCMDpabndYKD5KYkR9bzw9V3d+bzJVdVhyY1toJGBXK2wjdUMj'@;
put 'VlBoTGBNPywpZDNBWiY0LGQxTns5bDo1UklSMERJYzU8Lng9MUYvXTcrRUdpaCxsfHA8MlRrZTFwW3B3cmQxIitQfE1BdGtHSlAvUiFodENYOCU2cVcsN1s8b1pYc3JVaE0xYChlfEdLWH5wWCV3M2VXLDkmb0lRcTguVj9kaEg5QS5rT1ljOHBgaGlLU0M0MGwqQjNhQlpgemlqcyRkcDB+cyNk'@;
put 'QWxZRj8saV1SYXtdYUcoPHRnIV5FTENtZEcycSxJOkUoQmAidWVCRU8kVygwdUVsVmM5TDAuXk9mSTRLQFBjQEhJOX56aj5eM3R1fDNwYCRGdlgzNGgkSUp3Ukt2Nkhld1AhSSxZMjJyNUhEL0E7Ikk6QXJKZTx5YWV9WGVwaEVsanh8IjJQa3BhWG85Tz0zKD9ESFY5LjYmfmp9JlhEWyxxSz5j'@;
put 'VkM/Kn0ydz06MlBQTXhSXm5YMWxeQiJaR0BpOHF0Okl9VkRgIzFhNmVJYWBLUjtbInY1bkkmQjROVDJKR01PalopXWx3bSE6TjF9QXwvWDE/RXRCOFJdcjZkTThoRXNpd2dEVFokfDwrQkUkKkt5NTVzUFY5K1k6N0Mye1dWX0lpMz9eM3dEQVNHVnlLRHtMRlB0V2R2YH1GKSpBZ1RQfn5GOGlJ'@;
put 'XXRgeSxhN3VnISxBfCwyTFIvUD0wRSM0OzBxL1B3N3c7aU14UVspaTF4eEl9WjYwI1RnbW0+WElSV3pkTD8oKnRVdEhTakZOW251LkxYKjQmZE11eX16ZmF3dyxBYHhXOzNTTk5rc0lyKStQcE1eY04xZ0o1PVh1MiFFNkRzTTsxS0YmKTNxO0NkMyZFcEBrcG1SVlF7eGY0IW4rOUx5cjpeSGlJ'@;
put 'RGpaYFZ1OChufVluWHJWekw+aDlzbG8mInF2RF5DaTR8bG9ZNis6LGs/aGJ5PilLL1daITRdPmQ8KC9Mcyppbys/eUUqXk4yISFXK1E0cGJVK3RjTT1HQHdlU3VIIT5+R0BXeilaL0NdNm00eiRqJUEhSTslMGFxOFBnN0R1KXt5b2B2WSslXjJDS2tbKkY8NDlMTVtIWk5VeUtfdSU5cD5qUEle'@;
put 'XXE6LD9yR2UuaGdhRVlvOktEKDtMI2JPS0drfG4iI09PdDthWyIoRzdLPT0qWEowRnp+WUI9YVgmTUEycD0kMUZpd2g5NkYsakBSaWdmd0NaRDJOPixEIXJHLGF4Tl9XXyt5dzsrPy9paFdhVlg7MzQrfWVkSGU+SChXOyR9bDAucHBOaFt2b29JTi9GUEUsTTY7dDgmaWVCTFEmPF12NC9rO3M+'@;
put 'ZW0qPlswckA4blZiaUYhcjpUfSZANnBDLkJjfT5Cc2hQN00wKitONilkVjVWUXpPRSZYcTBpYDhLfDh6R1V3aVtaL2h4Tk0xMSJoTltyOmhgZkhDKlc1W1hMQFJTZV5jKjQ0NWp0SVNtYVJNe21kN3E5Z1hLQl8/P05zVFhLbEhOczorM1N0MXtTPUxYV1ZLNlpDSHVaP19CTU55PzwpWipFXV1V'@;
put 'fSJ+IjhfdiUzMGUuJnVtZXg5bj8zJXIkLmtrVk56cG9LS0tDODxWaTQmfUk/RDRoZXdufEUoVVNneU89WjViViVram1DXn10cUoxXlgxWHZQIU1hUiskUVZGcylLbTEpXURwJGJeWmlMSCwyaGNWQChTblhRaTM0Q3AwSl5eQnR6bH11WU92ISI5XitoY2NZa3U/dVlPfmdRW0hhZzpzKnNhYTw7'@;
put 'd3R7JT9Yaz19MSptL3Bze0tJMS8iZ0cqQ0dITjxQSUFwYWR+OUk0KHRgNDR3dE5wcXRKOURAI2ZscVd7dSlFY1tQQzlzdGB6bl9lbkxFTE9vN1I9ODxjPFguXnNfeTdqLmhoR0wyKXE4WVpleStgRU9NV3ttVWRkPmRHVVBoLigre2hzcCVyImUrITxRIU80STQodCFZa0FzcE4lVUxzOnddcjBd'@;
put 'WyYpbUZ8TndNfFtwVmQzaDkzbHMrekM4XmdmeEs+Q2IxN2lTLzMlWDZ4QWBTOVFgYHIvYkpfRHd7NUdCSX1LOFplXSl0WnRGeDpYa0lfTTsrVyRkc3cxK2UqK0t0UytDdF4zYSwoYkApL314c0w3RmxPTTdlZSIlfXRHIWdmQ2BaLD9OdmtNMENlJj87KylTZ2NLPUNNWjlKfXJKRy91U19pfWhP'@;
put 'LGhjZWFxOGM3Qkd9eklaYk8xcVs2QUY0KGRjeT9HYDwuQFYwdVp6WUdIWj5nVFJfTmlIL0BQTWpNbXxRYCE7Oy4jOGJWdU0xLk8+aEc/ckVzKHw2aVdNe0t3QkVtQ2JDKVtIWlUpPWA5dG1mPDRWe01SK11LNTMjTWcpYVVuanF5VGplTT8iSjg7cmY2NktBTV4qQ0pHen1UU1JSM05pa2k5fk0w'@;
put 'MklhNjo6aUdSaS9HMCE/YVJ3Q2lNS2Z8TTB5YTQ3UyZoeihSMVpjK3xDNyw8TjZ9JX5xOHBqcFVtWWMsbDFgIT0wTEljaXpwIzg1OSs/byQ+QGBgNHgkcVcjKHFucEI+QHIicDYxcCxfT3ZZeTFuKDxxWG0wRldnO3BiIUNSJWk1IVBxRlRROFNSNnZMbUAyUyZeYW9zTVAzUiwxSG94P0ZOeD8m'@;
put 'MiJNdmlneU94PVpvell3QndQK19ZNSp1YGlPb3pqdEpqYU12JSMzOFkmdWgpRDUuKU9lYElSPGl4SjJDcl5HNCUsMUJlbV0rYzBwcG9deTEjYDZlWD9DNSxKdV0kT2p0JTAqPCplQ3w8MXR5eGlWXWY/TUFtRCFCVTpmL14rMj1jKDF8W0Mzdit4UkRNN30uaSw1Qzt0Z29kck5LeFgzLCwqS142'@;
put 'dWxXR1kkPXkjXTpneEByPT41R0teT0U3RGtebjFVcUlreFJJeE0/MVE6SSxLYV0sc2A1YiIsdWB3fkZuZU1rZF9JTXFLdn5RJHF2JTo/em1paUhRODtKPnZdQFBERC8xXj83YUBrTzd5bSNNdlR1TVViezFES34uTl8yfHpJd3l5IV9OLjlNKEt8SDtxO1JyUVQvSkhaaEsqLlBFNyQ9cTFgM2wp'@;
put 'djVmX1ZJV0g0cmQ0NH5tYVp7THQzPHA7NDZzSXJPISltKD14PipMXWhvYEYhQzcufFFuXWB6SUQvN2hFLyxIWn1zWV5FaXJxcl9WQy9WTFs6Wj5vPSlqT1sjXSJ9K3I1VlhzNCY2OkMoVnJpS0kscDkvWXk1cXJwaSQvNUtwTmBmJEMrOWNlUF1OYV9IQytPblBIVTl2MGNpV0QmM1kmdi8jREM2'@;
put 'OjslVXBRVTdBLilVezt5RyZEKV1IcyRgQnQmYDVJTjF5RFt+VVUmSyhXQ0hKPjcjUlhWYEAiPCxuK0MvPz5ZblhyKkZGY3o3X1FVYGJYJlNvKXo4dihxfHlJbSpYTj1ucWclaSxJZGpbXkF6fS5tYXI+TEp2S3A+Y18mLlEzdX1UZFQublZeWyR7ISYuc15UeUphYlJmVEdSTVNldkNtci91Sy9K'@;
put 'PT54XV99cERNYjV9WWRPUlZLUS5dbjZaKiF9LHQhMnJeVWh7bzsoT0s+Wyp2SUhOTD1RU2s1RVVoZlhUUj4wb2FsanwoNyE9MF5vQVQlSF9Da1RCaUowcjpUVTx7cjo3Y2BgKi9BWkJjNig6MVgySGd0ZWJLeVFCXWhmLzJpR31qWTB8YG15UihWMjhWaTtXRztRJllLcyxgVCsvIzVpSkBtOE1L'@;
put 'I29nZCsmS3xyQlk5TE8yUVdzdVJuOCNPRXZnKix2YFt7azE+NGIsNEZeNWdbLD5RaVBAfSNKSS9ZayZHI3dddiNpZT57KkFhYyp7XU0xV2RMW0dyYz9MfCh7VUl2ZGdmXks8W3dbemR+YCwhWzUsTVJ6Ly59eHUlWEc9Y35uPT93aGdmQ1o9e2hRbzUmb04/L1lhPWt6Y214fTNaI3o9TW0ufDAq'@;
put 'RzZLPj1zKVF0TihoXlhUMUJpcFdOYTE1LHswVDoyVC9TUTg3bCtaQnBqYTlsKj82UiY6LGBARGQ0cjRZNEBjYFhzTWtYc18xUiJsWjRCKF8/OWMmZU5oOnN8ckF+X1NpPCJzdUVkcT9gVChoIjE0bz4ld3pfe2x7b3ElIkdFe0N7TUphNXd+M3BvPHxxWUtTX19WQERzSmAiS346NiNqWS5jMk53'@;
put 'eSFYaTZWIjwjdUx1YEB2UDd1XXczS1RJLCN4SE1le21UMGkpJik/UjFQPTtJfVBCMkhbJU8mflVMOiFWTkZmUiIobk5afV5CdXxTc2AyU1tvOGp5PE5sdmFHSGZRYFppYEpta2VqUTszMG88KjdhSUFpdCl5RVRSZDQyczNpQEImaXw0K1crZWBNanUqK1RVRXFrKy8jbyxRJkt9Xj1tQWV8W0hS'@;
put 'T2QrImVrRURRQnZRa0B3azcxcT5UWClXbmIzazhGVURoV1ZYcX1Md0NNUD0yVXQ/T3JSLiVxe3ZNWXtKRV5BLGg7aUtTQytOImUuNlFLQVclRDkvQUNYU2UkNEpVK3d7RnR2VDc9SSomTnN6OF1RdVdHWlRJNXo5Y0t0KlRgUX05dSxOUmZIWUFCKktSVUA/fVA9czM6dE9xQzxrbTRjY28lJnA4'@;
put 'PTBbL2Zhdjk3WkpfIm83cDJJW0V+bFddb35UQnRKYTE4b1BDPXxIfEBoVVJ9KEwqfk00XyJRUXAhT20iT1MyaXE8YFlyOCIsWF1eQiJieUh1OSIhUDdVUnApdGdNZlt9NDpVQEo/PEZzWWB1WTBwUGdMeEVFOWl9T11uWy99MUVOPkpfb0xOcCFTYkooRWpMPzY6bCNJUyhdRVNVVSVJcVd6cWtY'@;
put 'JFApanJiJGguI0Q7bGZJWEt9JDopTHZWb2h9LGUpK3BOXzlbc1QuU11dPWtqWTxxJWsqd1k2LGZhOyVdIX0/djVDfXk7Slg2SmQkVHVDLmAhIktgQCtpQTpGdUNAc2d+JF9uXzVuazxzT1NSaH18Imx4IVAwJFBNUDgsODVkaT96dEJDYE56a2NMUkpgbyFUKEJCOCxJb3NKU1MqbG4sMi8xfEQ8'@;
put 'e0k6akxGWUxEazkjeTQ5ZmNmZV5BYSlIQTwqM017TCxjZE9uJT8iKkUkdFFeOW1XcW9vVjxzYDJTJDBIQ1hAQCZ9ImdLIl80eypiXU09X1kvI3pkM2g5Ni5DYU1+IigzXjsoL1J2Lit0bWhte0Ntc1NYQT9bRDJgLCVLLnB5RE5VZ3t6VjVLQy8qeXdfSjAwNkRAVVY+NkpeMiZIdklGVWgsMTRM'@;
put 'VUU8byhnTHxJbER3U2FfSjwoKV0vVWw7MDVEWTA/TltxcT0pPVtAJThvXW8jV3I9JFdyJnAlJll5PV4/JW8kXiVgcERqbHtsSGRHSUc1Kz9sPHBzVCMvaXJCPVdgWkl6WUkzOE81XkliQSswSWBRWEBBI2BgNURPTXpzOlk/ZUFyN2FCKTE/VG1FRyZgZk8+d0UrfEVTVlVSN3F2T2NDISxyJFZt'@;
put 'SEx3d3J0WHxaNERITUBiTjZlK3VFImE7bVBSOU56dzlBKWpOcHFvWTFWeFZrLCpIYXM9SXVvNXR6ZUc7RTxWTSVAdU1pcT43e0M4L05fKVMiPTpnUm51OUVQRGV+aitwJGx9PzcvVUJDTG1MSVdKeTxLfFZGYkdjPUk9YEldXkBTey9tOj9vJHw6UC9VJWMrKkhgcS5qW3dxVnlVQSUiP1tuM2Q1'@;
put 'MlN6MjFhO109PG1iQDZvJHNbcEs+fk9VeyZeIW4/YGIuLiRtck4xRU4sdDs0alJYcV0obS9VZE5aKyZwRGNba0ZWc0BFbSgvOmZbMD5rbGxRXkBtdDlfUFt1e0lEK1ldNj4lTiZOLzJsWWQ6NyNIOV1VNWhhSWhSXjIpdlIsQiJfOiI7UiMpejdlY0goY1oyd1JMPyhvfiZCX3o/XTo7P2d3RU94'@;
put 'NEpiPENtRlVZOjhoclFiRGguWlUsX0BLak0saT5fMFZZcVBrT0ZaO11kbGkrRFlaVTVxZDBpdmc1LCguRDhqM2FLQFFfJTopLFBEXyFxOj9NVDExTFZ7eVkkMComZWNSPSZodVpeZFF4bDNvdXB9Uy5bR1hjczN+Mk99QzZVaTgjR3Y4RC9mRiMxNG51dixvVkAscTQ5WWxDQldTYktYLFZafCg9'@;
put 'PmBuKDgiKHgoZDVfYDFfeD54bCY3e3tZbkI9QXFneUFzS0teRkMySmA8WVNTdGx8bTIwPS89I2tSd098KTd8Xm90VXh1MUB4cEJmNyxqeGQxbXY6dkdgKTp9ISZ7Jmo/IVQkJWsxZU9hXV1XZllyUjx5bDw9Xz9nTGBDJGo9OGthYFI7UiQudjRKXkBAV1A7VGNlaksiYUd2X3JmKXk2VjF7NlRK'@;
put 'cUJfNitAYjdXVT1lIVA5ZF01blRuMnNvQk1vcTg3P3BnbyU6ek55bTwxfSVZMzIhWjwmT25dODdYa15QQSVdaGI8X3NlWUkrXUZka3VzV1RANip4VXBvKng+czB+biEleVFEKT1MQHB8cWM9eCpyWkVDNi5gbm1QMFE0cHVSI0pCcUElV0YjT1F6dXxObW9je0NWMUdoQGpqJl0wdXtpVztaSloz'@;
put 'bHAsOT0qc2piSU56aXAsZ1VbejcqS3s0L2pBZU9NSW1pOm13IUEpe0BPUzFqcH5DXyhPclJud3xLbDsqfSZNMFZrPT14T3xmKm0pdFR0SSUxUD8iaFd3ZTh7W1VVPF50eUIlfVYqIzRTdkd6aTBUS09bIiF0KiFsTWBYeDVqVnsmYDpSY2RGLCQ6XzVUY2lrJk9LRS9IJC42YCxEXVl7XkpORyZf'@;
put 'Ung3Yys+Y3M6SiNfXUluVkFtWSNhLDtxLH1AOVVCNmgjSFg5LytQSDUsR3d+O3VralBibkpWezV8VCFWbVp7dSMyWTIhaCRhIyhlcTRaXiFoQiVIdFIvdWx3Y2ZfX2VNNU8xT3BDWUokWCRoLkU5UWoqdD10PnQpSFtCbz5rJUdLdkUxTElsLDM6di8rJEMoV2lEQFlVbyNRXjgvOCE2bik1QlR8'@;
put 'UT9IU08ua2s9eWBIP2RERDx0NCpSajh7a0c0Yy8wMV1icn0/WEZ5d1tzYHRIfT00PVRed193K1ZWNEJkOnxoRn1hRDhlInAoJTxjW3FKOi9QfXhqSXF7NTh3VU5eK0tZU0w9Xz8ybSVUVF9YInljPDdgeGV8ImgjKF9JRDhMdTg8SExwOEleNUxvRlFQUyxxZmtFKFhMS2BGWHYyYn1OfFUoRHFZ'@;
put 'b3k7XiEzUmdzZit4eUhGUSJXLGVjX1llQEQiP2hxVCtEPndZNytYJmVudUtKSCJuTFNwW2Ixd2gwK3N9JWo6dSxTSShwLFZRLj1tYSghKXwldnpRdW8iOWhmaVtQdHBqdWtXVF4lVWh9W1VPTGpIX20hQik8Sz16TyFZfXheYygxLnhfODtFdW96eiY2NzMlZXJxJEEmQWFEPmlIS2NaKEpiKXdn'@;
put 'Vmp+dU10IW1VMVdIaWRMc1BBejcqUUM0NWg3fSR1Zm42a0Z6UXhRPCxNTENoamdbaEA/Tn4hZGlDJj1ePGVZVXcpZVhVO2VjO1BrIiV6XXY9cjo/Mzg3YHBxMlpqRFIkNksuQ0lrfXp6Xn0keE94RkUhSFQ+VjtWYDopanIuUnVVfDUqUTV4UXNBNlM7OGc3MVFuSFN0bVY/cCxhOzR5XzYxbTF7'@;
put 'QjwiaHkkaDZ1JD45Q2ZSITxLPkJhYyM4b2pvYEJyJn0oVkRCNS9HfEx0MTFBJkJieEosKF9vKjNkfWpmbWd+WVJZQX5GWUROJHppJHs2d1ZHSldwJGM2cHVaalBwZDU9LlVlRTRnNiUlezxxfF9PK1Z4RlFOWUk1S29aazsvRSU/V1VdXjxfMyFobENLX1dbJnUzXWA8OSs5UzQjIVhhNV5AJmdf'@;
put 'bFpUazw/alYvZnRhKFgzR0xgS20xPT4iW086cyVSYmNCOXpadjgsQVJmbDUjP0k4QiUyUkh1b2opPWp1L0pYfjxYXUFoKDF5WUZfP2pXYU1SRDg1dipIKD1xWz9Icm84ZVtjTCxzRDd3ZmlUM0J9KjZjMSJbcFpsa1k9IU86eEVwU2Y7TFBSVlhsbUAvIyZFOmk5ZngzaWQpOHRbKCtjaXg1ZyQ4'@;
put 'MU5LUUFrLmd7QXMsRWRefjIsWTFeajZ1P2pjPWhDQHkmUEtQYldDQihAWk00MXU5Mk0uJC47OTkibjY7OWV+KiI/QD0mVCJpeE5BQDV0W3VOcmo5THU0VCM5b0tBYkI+M0J9XWdLTWp+WVl9YnZgMTRWb3BLQnY4WTA7K2NhJjliQDhmbXxPdyp7KDtFaihnPEUzbXleUz1ASEM8Wyw8UjAlRG9M'@;
put 'QHJbNzcuQHVgTzFMSEF6Ojp5ckE+UHZwWCheRHs1P3BIXy4hcDhLNjNCL2RSfEoyJldfVmlyK1UldDpuKGpqUEUseW5vSCZ2dV9KfExxcnYlO312IzNpRis5TCZqJVhEOmBeK2VPP1cqfSpDQFs/fmk+YlVCYF04YDU2citiKS5vXSY2czxdU0ExNDxmXWNzMHchc1B5Wzg9WX5UIXN5Zm89STRw'@;
put 'dy9INm0mWWlZSV4hNncoU3g+cGZeIT8wbiZHcUI8RG8qZzczKXglaGpiI2UuOT5uTT4wcHA5XixPT0JORT1FPjVBViV8WXB1KDlHIV1NOjc8SCVEJEVyVF1PVilDRHIiQDhDUVNhOEc9U1ZAbjJZKkt0MHI0VnQzdmxLcko8azMrVWlZKyZBMWBQcV06QWFfMSlKIykla2lqZVZSM09MISZkQT45'@;
put 'TFNyOCl+MT9aMDVuY3g+bEw+cUVxTD9QMENRSDYyOkBje0VAQG1WN0xtKH5SM0JeQiNmMG1hLkkpei5BZ1o5PXV7JF1KfXJQI2lpP217ZztfL0g3NTQvXXA5UXFrbF1dKjljWzhNKzFnYVZsPypNcHZAeHp2SkNGbnY/Xj11VW42S0M9Y3FGWWNbeD5URUkwdTtCe1BUbXM9amlgVDN6OzJCVFQm'@;
put 'TEZ8TUlhWVF2SVNjfixoKF5YMlksZV4rLkZMJH1TTX1faTEkRCR4cVJjJX5LTWNjYERlfH5ESChnfjBBbCohR1tweUZNWjI9cS4rV3VpSyQmN3ZSfDksfHBzP2ZSOSQqNFV9XkwqWSRwe0hqNFdXK3hEelh6eXg/a2ZNITxPRjw5U0YoYntlRk1aM0ZDRCJhV2hPcldNcyVdIXw9PlZQZkN7bmYo'@;
put 'LjEsdilWWHFRLE1AXytwTmZJVz1zJVZUW30zNSYkUUZXKC58W1k/bFpwe31EYVh5aXpeQnY3NDdVfGVOIzltZkA6c0VVT2lOczF+MX4xezN+S0w/KTZdWypSUncqdnchcFspUUM5S0pgOzxwb3s9V31OfiFwO35zdnw8bGJ5KWdpYXJKdmJeWUZ4ZUV0TiM0TnwqfEs9TXl9Vms0UUR7czk2OCJL'@;
put 'U1J7VCRiLl9pTVg+ZyVOaVdONypyOVlXbyhXVmxKXUR+IzpCXjs8ZVghN08iJWNFKG8iQXw/SzxMcVt5O1YvZn5sX0lCdncwRHo+NlFZYnQ+NmFJcD92ek9EOklVQ0pYbyF9IVooWn0kQFRCL0RyS3dyMVpAWXcoZUw0ZDA+YzxtNXt1L1J7dVRFNEd8dEd0bjssa05jNE1xX1IhUG9NNzJSaWU/'@;
put 'T0pWZHpVO31xeHZPTWVqcFEhRTFwTnxWXlErNGQlRFoqfmsjL0xhQz1MOCVHIks2MWA7bGFRVHxbPj85Liw5LEx1Q1t3O2kzW2RTXzlvOVB9I3p3LEA2YmRUaVdScy93YVFUJlFHczVkY0Y9MFdbO2pFTTVURXs1ViElUU4hSUdMZFk4KzI0WiJZcl49ZiJCfjd4RjJAVzwuUWZPTnUuPUpvX2dt'@;
put 'NntiajNbNjswelFURj03eExWLjA4RDVSUUloOl5GKH5ZU2tnb1Y4XlRkaUFoRDtieXVUWEtaamFDbS94bEpDRU1FT0UuR3BNSiw/PWxZZ3N5aXdFclhbZlY1d05XXyI4MmRbTSVoMjEqbCIpfnYqaEVDVSp2Mn1VWjR1M2pCUzF0aUouP0RGZzdZPy9yPjQhbWVPKS5kNlZTa0F5R2hkfGdKQiIv'@;
put 'TFozN2FYS3FfPSFISXR5Wz99X1YkKkovKGxZfklPejUuSDlXUSpTR0kqfXh8ZnBgX10/ZnBNSj9RQ0xHVjxRU2s9PmBeXz8jXyNSN0pXbm17YHsmaTRRTmhacFJnfG5+VG9QLihzPFBqWnhraS5ULCV2fHFreTJNdntwMUlYJSs9Nj1HcEAqOlNKaC9VN3tEOTJgNn11UERKe25CUk5aRzFscjZG'@;
put 'WndqcS4qIWxNPjtWL0hdVj0manpyOS96MzUyYERWQjk4dF51ZTlKUEkoa1hNc2FEeXFROmkjXk9oMzEhYlAkQE1zYDVyODVJZH1WLjA4e24uYFlwPENafUp4WHtdP3p+Kip6R3xlRkpJRzB0NjVaen4kUSYkey4qWVYoJHd1SjpaMV5qRHpUMHpzMSlNWjR8cXU+KihrMDMoNzBZQ3twL0MhOSRP'@;
put 'bU5hSzAydE1UXUE9Qj1lPXhLO3NQOC5FXnRCbU88dT5fZiMjRHRCaiI7VmtSRndfUSklbCN8OkYid3srMHphMjZqLj52dFRRO0U8YF9DaFhSe3BlPlhiUERxe0dpLkp2a0w5I1BFOEc6Vyg3Rjl7b3pgcHg9UDZzdCQsYVBAZyl2P3x+S1pUfEk9aEsyOSlKeHR8aDdjNE5oQGpBclU+eXFYR2s6'@;
put 'RCZFJGRnKENTIyREN2IkLn4lSjpMZlU8WCE6U0E+aG14MWYrU0NEKCxrSiFLXTspcFJqM2hJOTlHcEQ8clZGWzFteS8vSTdscm1NeH1JK1UsSEdnTiE5dntwTzJOXUQpeSlULkMrJW1iNiE4RjQoL1gheXosSFAlfSRgMStJdG16aEh5ZGosTkx5dnF3SnA1Q11XMz8lWDxBZ2Z+c1BDXmFxSHxA'@;
put 'dDUkJGxAcmJnWEtxXyNSKk9FN1ldKzB1cGZzfmN7JkEoOTBkaiskP10sPS4pZToyRkM0Xjkkazs4a1ljMGQxNEpYOntnI1A/YXI4ZnF6aT53d019cjtqdTY2Y3ElWjV2dCp2fmc3MW57cEBjeXZhQikkPmtjaEtke3ZeSy9zWlV+c1orV15OaVpXZ0Fpez4pYDkpPlRfbFJ+WHBiNWpCXyoqSHt8'@;
put 'Nl5fRDxVaXxrLEFdfm9jI0ZxfVRiKWNHSCp5PTZwcCh1fDNsTmU1Wk9WVHJXRU07Y31kRCslTnxyYm1DWilXQTZyfip4I1d8dnJIWT0oZUo5andfRHFSTWA+ekR1U2hne0c9Ikc8X0t2bWtzRkdhVjVgMFdIT1crREkjUXcrZzVrZkhbZUpxY2tESTBxKztPbzAxMT5wKkRiMTRzSXlddV5GPitb'@;
put 'KTtiSz1bTj9APGhkP0JwZklVQlc7JSh0dD1JKDBwRCU+OWwwOXRpcG9pJlJLaSZ+dnNERjtAP1smRGQ8OipgRTskVVB6XnZWLnhvWCIlRUNFOyRGaHZiOChWRWNYVi9Hey5pKVMqV08uO2F5Wil+dTpTLkZAOUBSbDVQcW5UPksuYUJvfkcreWA3PV9bejN0UHAvNX5HZTo7LmNza0EhJmlNO1Ys'@;
put 'TFtIXWxwaStyVUFRV0loMlphS3dsU3gmJjBUPkpsNXxhMntVKSUlUjIqL1I/NiQ4cHN8R1JHM0leWl43TDRKPFRtaXM9Rj15QkAwbVhFMDlBY0paRGtwd29VRno+STc9VzxLKyQ6RltCKj5HSFtjZDhsX1BGJD5qYDhAI3Q7PjxhQXV7ZGlDdF9GMX5BQUMibUYkRncjNTo8MG8sJWovTG8zdGw4'@;
put 'ajpDU0xRSyVjPSs4MEYwMkJtWzE1aXklQ0tjWSZyZV9WI2NNVk9BT0EiR29fZ3EqcmBqV0NXN2VKSl12JltmQ0wyb01wJSZsRiUmWXNAQG1vKDwycE5dN1MrZXpIfVZeSlYufWtlbnM0O3FjJE91RDAwOVBlLmdvY2R0PEVBXiEoKjczZTR4VEo6NSNsaiFtUXgpN3ZTUncvdUlWZzdoMXQ5b05z'@;
put 'YHB+XlZuQyl0YEdpPyFuZkQvPFkkcD5rPHg1LGd9Jms8SyM8NGw/P3ZoYExRU2lHaDp7RVZgNm1TRWttQV5RaCVLd0tySmRTQWE1ZUEmakkiN2o6OWhARWtTQGlvNnQ9V2g1ZWhTI2pCJigwUlFIVDQrX2c2PX1gInsoK2x4fS9EdTpAcTEzRUtHPncsYDtnQlYwKX4lajExWFkqZzYyWUEmbC9j'@;
put 'LnJ8TUlCNWlyeVp6WV88fF1QTlFUT05bJGx5O2FndnRtLEJdKn08L2ltRzZKSEM+Lm9vJTlEPDIraVhbV191MV1BKigqKCF3L2RiJmh5YEdmK3FiV0JvQlUwZXszR2g6KkMjZFNmd2k8VG08aFNpbj9APSNdTUdQRmIwISooaUdbSSlrUixLNzducGpQMlY3djtNdEslOyZxajNBXixaTT9jbVUv'@;
put 'cVdGVnBmcGlIWzlfUjdfYGwvMlM6SH5kNmcmXyMoKE5NdFt0YH1uOkszbFRTY1BiW14wSzV2UkZrOEU/Ils3Xl49cH1jbUt1bDJvUWh5djQuOzF4fSQrPVMqeH5xaGxxeS82OUAqQUB0KnhSZWhOXUFAayFeVTUsNClPNDhfZ1BfRDNZNSxoWVAuW2dZZENHK3leezBJbXpDYyMsYjUuPGFbSHhV'@;
put 'NmcxfiN0O11JLzp7OWgoXjVNZCQsS1RDUyQuQ3Z+cDM/Q30qSk4zc3sid0UrJFFANks5fDRtcC5jQytEODs4THFvOHJLSjkwY2p3KEAsakwrREBaJTUvTjk8KEVgNmd5c1tsR3VfKTo/T3QhbS52TVp+c2R+JmxbJiZUYDluRGFMfmhiKWxjXi9reEBnQ0AuJloybDFOOnhFWiYoLHglQX4hMzJt'@;
put 'SEVeYzEwdGl1N2ozXVMmd3p7UU9LOyJ2ViR+dyh7PkVhOyYlR1FXcl4vdWwvPE07YTxsSEhYZnQjdFBTMV4hX05ecWdGXjtNZDl2Sl13XzskWE5zVjxBKiZVQSZ+d30jKlV2MTg1eiQsK31lfV4+ZzdfSW03KTExVHNnJVR9QmpFbFR2LFhbeU1+Uys6Tn4/ISQ0R1E7bjppPEpYS2ROPSUmV3pK'@;
put 'PXVoVCQxRXhfVUFxcEdeVmx8fkpsbHRmNWpyNClyXnlUUGNXbHlVN1FDUjdRZjtdcClIe1ZReHd2VkBJbiUmeFZJPHgiLD9dRzU+enIrRXpRIXBwYDhZcUlEYCE4cmUybSZVSyp6NE50VT49MG9wYDJNP193fk11KipIIjQhaGdAfFNCL349QG1sU28qVWdtPSYhOlI5e1RkLHE6VEVhYFVSJnNI'@;
put 'Pkx+fV9sOnNfKUJVdD9qaklFOCxjJHNUQCY9UVE5X25nakx3NllGPCtOOiVjOXlvKXw5SzlZdUl2XUdFelFNUi89IX5gVT9qWEZ5ZUM8I310a2JFSy40YV0vdF5eJTwrPCV7Z1JTJGJKNT9Odlo0VUUka214R11gYF9oJm1DSyJSRkQ4eTdPZnlzSUBxPzA3MClwPkB6SV1iOzdldSUqbEdaPjlV'@;
put 'aGlwP2ZMQHVSKktwP040ZUpZenJkIXRaeiVDSSY1NloxX0BYPiVtcn1GeGdNWG0pYkh8X1VnNUByWFE1V0gpTl1MNU4rXikyRiQqfmVBKEQxfXxKVF9gImhxWUw4I1BAZVsrIn0hRS5NM2c7P0xVSDFEa1d9VGR8Xy4oQm8qIkZBSnkiJDlSUkx+aFVKPS43djs6dGVZJn0zZzcuO31WUyY9PkU/'@;
put 'dGAqMX5JZjciJFFvM1NjR3IrOWgsTjBRVClSbEdALFY0PTJffXBXS2p+cEJ2Zz8oZXVseEVGKV5QQWM4Q0ZNS0AjcSkhPlB1a095SSw4cUVHLGFbZ0dSMEY8MzgxS3FvZU8wOzhZeEd6cXVSUUs8VFErc0ZBKHQpX3dwJVBlISo4YnA6aks5WDtMVDVfYDEjJWtMSGkoQyJOK31wYyRHQHFpK15R'@;
put 'dFN5c0tre25TYE4yOzwqYV48RVNoUjp4cUtMV30jOjBQMzhGP3NFYDQwNjxhYj5PMTRpdG9dNWQ5YzpdIUVAK3FGLipyQVNEYGV0PXV1Z1hRdlVNU3Y4T1Ara2UuMkNKPzQ7SnVuZy5NMH5BOndfOildU0BFan5uRGI6TCgxbUwuVDJqNHo+VmppMz1sWiZ3ezRtUUtQLkJ9fCNuTSMrbzo7Y01k'@;
put 'VGJMfnV9SGxsclNDbTt0cDRTViU5S2xXe0xZOSgqWllhLnxDSXNDQEZKfFssKnA7cC9US1NYTEw2Y1tGeVI7NyNHakpWYk14Qm9oYUhBRDgvZDl0U3ldJDdpZHAiZ2o3TFt8Ok0+eUxWanZ8YVRxZn5aan5NMVczJlBDdWk+LER+RGFYSGUmNlA6fDkjYll4b3tYKyRwV150UUtqYHlFJUN5R3pw'@;
put 'N0dQZS5gUTs/TC5OQys1TVtIW25nTWhGQFk2cD5US2xXXjR1dnh4RltZPzBFYlg2OkpbK3E9XnVsODJbLGdlQjNVV0JvMUkjd3Z8RnloZVkmM0tnRkZWeHtAJmh6dHExWSNfOUk/NnFRUW0ycnF4dll6JGl1YkZiJV0+dzROenYzT0lrKy51MTNhRjBaUGx0UitJOG4hbkt+Si5rYE94Mi9BZCs+'@;
put 'a1IhMVJDc0IpV2BGQSE8O1d9JFI5Ty5KPDRkOHs8ZT0sT3dMLHFZVGxXQ2BHR347bTdCbEY7PiRwRzRocytEK3ZDIW09aG1CdkZIeTpMND1VZnhMUDJ1Oyw/akReK3NQLkJieHVDX3IreEZFXV47P1klU3B2SXQmS290ez99YHdFdTN1NDVzUDBRJTJBfmhKYFQzMUdifUdQWnhTYlV3YS58KlVF'@;
put 'QHZafm9xfFV5UH5jWUg1QWglOVopIUouZzpIJmkyPzB6LCJRdntZc01PQkdBcHVOeGkqcVRKYUJqIVNERTRkNUZbLlF6RWl0LzJTXSNeMnVBMCYuYVRFWTMjaGdOXip1OV5YLnBnLC4jV3p8fG1ONi9dW2wkXyQrYDZZRXF9XmEufiViKGNobzVTQiJiOXtVMWxENEo4eEFeYzloV0xSUEBsQlpY'@;
put 'e3VVdjdAP2hHclhdMnFiJCt4ST0xSnM6Kks1K15RWF1AYityWyo3d250TDwrMkZ5e2A9THxOQVdFJCFnXWhNKkF5RjZvVGRROXAqdlIuK2U3eG9ZUmA2ODgvakc0dnh9fDY/eV47JHE0ZzgsRTdQIUkoZ0dgLkE6cVhSXiQsaDNRUjBJN0dTPG9gc045JEJDWjJgIVpuPXdWaXF7QylPXiFNSSQ0'@;
put 'clokMnBIUHwic0g0ZzRnKyxrRm94M3BQSUszR2s1PTgoQSRRMVB5TCMzSnY8biRYOSYue2B2bypzU0doLE17RH5EODNtOFUmfFs2Uj1RRXJzUk1jVDQxTkMvKVJSJixlSSw9THtaPiFTbHo7KW5YaFg3fl5wJj5YRlg/Vmlscn05MjEiXk1wN2U/RChzLnMoTEFwcHFaZF8+RFMoTGtALzkvanx2'@;
put 'T1Y5Vl1LVHJ4MEgyVl9rSywwZm9EKktrVlBvITxyPkkxWn1peHF2XkNJV2kkNl5RakFpckFdVV4rRklLYkVBcHRhOUpYPUtpcSV+OWZlVXlOOFhiPmdSUyxkfiUvLkpkVE9GPCo9bElgKkF5TGQmeVhsPVlbZlI8ITteZ3h7fn1FXkU/TEcjdGgpKnZ3NmV9YXdqcSxZW3hVdkdWQFc9bn1ZNVs1'@;
put 'ZEY1JGxaVD1TdFE6LnwoVGA/SDZ6K2pRN1JqY2Y6Ljc7JCo/eVlkdnVJPGA5YnFNc3YpO3kuWnlYc141I0NSNC5jcD5oeCxsdHtaJW4+NnBYdHR5SHNLeSFvdyY0THQoKSlGfUlrYTk2JWEhQnt2cF8+bU1FXVFeVVZRWn1UeGZrWzpFVV17ISNsUlAjeGZfRWE1UHMmaVVAZj1kIzdQRmR7dXVU'@;
put 'NEhOcTloP0ciX3kxS28zcnYkTG0/SUxQYnVYSkFmPFgyL3hmayxtRWUqI2U/SFk2SnpaaWJVOEBgIU1zPHRqaiFPckNJaTcpNiFKITVYXnUlPz9DKlBwNSt7cmMyKD1JT0RZQktLXk0kOkM9STRpI0dVUjUpe1R0IkFZTjp3cHhbdCQsbiFbfF5ISDVBaEpkdDNVT0hPcF9CRXBaKVRxa04+JHJq'@;
put 'YXdxOmMzMj9EbzEmYm4/WGJaO105blFgV2ZMZUxCcSJdVyNOKUhoPUVOVnt5YHVYNSs9JWsvPUVUPUR4LERwfWQyOkhbS0YmbXMpPWp9JFcqJW17cCJyQ211M0Y1LzEvOz0jLFtEI1ElWjUwSSZQfWEzWXdmOHR2ZU9oISQqLGp9SiF5LmBNZ3k7LD5SMSk/RExocS5haXo9JjZOQ1lCemEzQiI3'@;
put 'bE1DM0tdLnhzeEd4M21+WT5PS05GNV1KKTQpfCprckN1bnE9SUJnZlNvMVo6QHp5NnN1PXFvZilzdWQ9NT9IKixsRmFbLD1oSGNuLC9KVl1DPHVMdCE3OGROYixEfHI+e21LXSllSXlseFJodG87KUFXRkRDWH1hW3h2bnhQMiZZfSwxXzF4YVFbQ1o1Z3p4dCVVKT9NdiFtV3x6NmxGK10hLDF3'@;
put 'dVM9bjY+K3pYS0tyfXJRKlhJLGxNKXEhS0JtaWJQOytrXk4zYWt3STwsSG1iWlFeY2RxJDJrc1Z8VHhRI1ZPIk91OVZPR3RZfSZAXVgmX1l6XXk2KEZdOHs2a3F9U11HfCpUR3g0Q3ZZZHUhaUFmbFo1RTwjQUk7ZW49KD18NkpwQjRZfWtLdntCMEIhO3NdSGN9Ry5+OUg0Ql5QczBQcmElRTZ9'@;
put 'QURValVqfX4iMWl0N3ZWS0ZPIl8xZ1A3MmBFJD5EOTR7PnFdQTw7VFUkLkRWN3B7TmY9ZlY4P0RPJmh0fTNhIXF7JFdEYWs/RHBIdzY5SCh5Ty5IXlJYP2A4clhUUFU1bVUoSHFVN118O21mYipIWjpjbEc7QF5HVH55MS5uSTxgTEdLdz5WaUdLbF9+OVkxSn1QQlgwaVA1Z1Y4K3t6UXtDczdV'@;
put 'IjtmdXVxK2VaXkxbXWR0Q3VdeSNSXkxUSnRCdkwiRGxAV1lQP0RWMVQkalZXeExiQEBybWBUKloxQWMuQ3hPOzxxSlMjV19QQlB7ZkNCLylGKUVHTn5kZU1mNjl0MDA6S3VCYVZlR2l5JjB0YmJGSmF3VDxLUnEmL1lMLnNpR3YrLDBOaG80LH1uX3spRnk4Qnh8c1ZiLlFaaytgOnFNPFhwaWty'@;
put 'XTdsdFFqaGlTd0NsMFNqMDU5RT8+JVZJXndBayVTYG1vMyYvclUsPFN+b3tUKj9rKTh7JGFQLjN5L318SSxHc2M3fSExP1ZyWDFkNG5GQncoU2pZVGRBSDthe0JqXkx6TXFZfitwXTs9cV5pdzk3RzYxTnYiNVhNYSl8JXtsZHI/IV9wUn1jdnp1KHtKPGs1KmlQdyZVQmElS1FMUkdFaCMwQWVS'@;
put 'Nz90NHxyZXE6dUxjfFJOVzckOTFTMntDaEE8ZipadH1Qem0jRCE8LnhORCNgMTQ+PXZ7Vz5KZDk5c1l2XlY3Z3RpVlY8Ok19aDd0e3BDXWN9bGcqSGZgJnxKUnRRd3BsSSlHUEgkNVdubmNGYiFPJCNwam9sRyJFczx+T2ReKD9wVnVpWHcoSG8xX2lLckx1SF9MeHhgWmZyczpPciVIa2E+cWJy'@;
put 'IWUre2FbKjYkV3Y3WV97KEAmdX06Vm50a3h8TGQyXkMoRyV9OUwmKCorXzQ5LyYjOl9Dc0dXfnAwMHNMdHw2Ql97NT1CVGtTI2xXUTJ8QH1QcFQoK35oKWF7fS49KnRDImUmeDk6Tm19bklSPTY+IyVtezN2KSgqcHlTfF1JZTdTRHdPO0J0OlNbaUIldV1afSx+Ok9DP3w9eEp7U2lUOSN8VytW'@;
put 'Vyk0Zzo1TUxJN2ZuP2khMFVzNio2ZXxIO2JGUl1vd2hHanxAdmxSK0NDYH4vbj9KLFhlKW10MzNSK3VIK11GdDY2SHZDRTEoeXpBOmx8N3dWQ2BJYExdRH5RWHRUa2U7TUBUbUNNR2cpS344d3dbcDYpKjIlRWYwOGRrJHtnRENUW3daT2spZHpoZ2hEX3syT244UklrKHBKTF1TaTprUCwqPzQ9'@;
put 'LDJwZkR+T1FPeVtqT3B3a3N4TywqSClYPklkT05pNGpbalgrZzhKO202djlgP0UxeD1FMSxoSH1IZm0/Ql9rOl8/eGpJXzNTQkhKLFMmK3p6LlRGUl1tP3lrd0MjLz5sfC5XUVlXb29HVkVJMHU8c3ZgKWQ/SzleSEJDKTg3W3w2bH4zIz5XZiJ+SDdDPC82W1NZeFJ6TEt5NTxzPDJ+MUMyb2tP'@;
put 'Z3JSRV4saXlJZU4jKFRyMVAmTTAqTzNsO1k3QTJGTEohS2ZnM2d3IXVeR2koRmBGO0hVRGhtXSl2a0QrdnQuO2ZtKk04OUlKOSI3JDtxSER4O3FEYFUlX25xKlAwVyVHcz9HODF9VEM0ZygvJi42PkhJfn4kYUt1eEp7fVQ9O2dWN3FjWS85QWgweGNgUS85S2R5L0BROEIiOkA9Py5DV3teMTBT'@;
put 'ayFFMFdVd1pVJio8NFJqYWBYLEN7Jnc6bWhYVUw0QHFYIjBEQkNIfCUxX25rQj5dXjFNU2w+d0JyMWhLIzt6XSV1K1I2SXl0Q0hadlp0OnAqOyJNZTE2dDxyKz1GJWV8XVJ9OWlwVDJDIzd3PUQ+JXssYzFgPWxZNU9DaEJsPmpQIWRsMGlhPkEjV15kUCNAUmZXaEZleXV1OG9nO2h8Z3h7Wm9h'@;
put 'aVtMeGxXVSp4YGNMJmohOXUmbTcmL3YweSJOSmcwaTtERSEwfj86SmhkY0dlfkBVd1swPlQzbF1nVSxMfDgsJjtIOiZKK0JaK3ZDRHgqfVNMfmg0VlBwN10kVTRdQl9tRUteQl91a1QlRntkRVZLcmRKSmBddlJMUC4xfGVJajBpaCRHV19JV0dBIUR7RmZpZXA/YFskSUgrLjRHM0kiR0Y6ODZl'@;
put 'ZCF6PUB0diY8Y1YjN1kreGowLj10azZaXlZsQUlEd3BdWDNGQHAqO2lbbzVxPzVVcGlTdlJ1cEpgb1E7MShveHFKblNfXSJRXWoxYXpHN2k8YndHeHR+bD5ya29GQnpBNyQ2KkFOXT4lJWF+PilaQV97Znk+X1lYL0AifTolKS5iLDUvJTVTJCE1W15AQWkqNUh+P0JYUCVUYD43WXNRRzRwVHgy'@;
put 'O213YzA6MEFxc29XJmNLQTxwOntXVG9udjMpZzooVlIpSDUyYFNFPjMhVU1rMW09UntpSChBeHRPIVp5OEQvKWx8aVREblU8I1FWKjBrRSJ6KF8iNSQhSzx1O3NQb3NnaGZ2IylHX25iO3F2UkFbblh2XkVpZ0dlalBwRUUsdE9WPkZIIzQpazU6dHVWQW1yODQrczlmLy9aez9YXXAwPWNiaXQz'@;
put 'YUV+R3BvJGomaXojOmpUZjRPTSE0Lz1Oclgicml1UDFDeCQsRixYcDIoVkBJej9EaEsoQlNYRl5VdllnSk5DdkgpLyRrczcyPUw3VWRjVHhfWiJdKWBkZmU4LGteYTRCXTtoP1hlIVlseDt5cG9fej1MTmIuVVpJJGJCdm5FdWA0VWxjfWlJe3srbGp+JE5zKVJ6WWl4WkNuXjZGWD8oNGZMbD4q'@;
put 'fGNEZEBrKWBJI0Bea0FpSiZlVl8jaiRWbStITEBQZnFieGcpIUokfXkzV1FpXj08aSF5VXFJQkMwXy9KXi48SX0zYD9MNTVdNklwbngoY1pdOzJrKVhsflloRkpUcHghaDJmN2YuPyt+KCNQamksKWk0YiQ0Vn5mUCZnZH19cCIxai5rT1FlZjpFek53fV0hV3J3dHtPdzIvRylhQFdeM19AVzlk'@;
put 'WlZPQTs0Qz43JklnaXZlTkJUSD10QnJ9RGQzLztPQVk2LHpRIlFQWSJgQH1gUTdVa3E0fFJDI0BhSSQwLjA2L2ZhNDA6SlE5bUtrYX5QeF5lM0RbWmZPc1AsJkdgRCVNaz58dTJ1Q29qY0EhR1czYFs/dnBtOWY6Q1h6LD5wW01RMDV2Kik8Iip9QWtnZ1klVS5GVllZfSo9UHY1M1glWE9hcCwy'@;
put 'YXJxdDZSezkrejNWfDsrKWNgbmV4PyE0N0dSeHhDO0ZJSFpTUklRfVR3YXFfOmZVLkR2JWpXQ3t3Mnc6WyRjOEBLQktEOno+YVFsJjI5aiN6KnFBZkghfltBYklsKW1VZFR3Zyl7MXtJXmtCLyFtI3VaUyNNVX1MN3kyOmNdW3E7SHBscWZmezE8R3BaJFozTUBLTC8yO2g6XmlXNHM9M3hSe0FP'@;
put 'RzA6P1pjUSFtYS5dVmNCLiFYZ2ZyYl9uSWZUTk1OPDV1dywrTE1UYFYmQi5maWRjfGxYPCMpPVBJZUxTQVZQKEwoKjFwK3xwZGhAcE0iKn5pTChJfG5iU2VfIUZmLz5EU3NrZip1eStAPVJ7M1dmZXFOejpXfWM0TjEoQlElUWpWV04zRFd6d2lQIU9bKnFYNENwRnBZaUNjUH5COEhbelolVEMm'@;
put 'TCF2byhuLyFjKSgyLn0lLys7XmtYK2FINHo/MGJiVXYicDZpKWUqIWl3NSR0OHJ4JXNgM2hpUD99XW9iJi8rUlI7P0R7T1lHTkNSKTRfJHF7JUpzYnYib1c3R0FbblsxLE1qKzB1WmFAR0UuQmR2NGU6a21dRCkwaiZIazFYOilSYkdEYzdVYFRIYGVzPyMoLGZUdD8xV2lVcXBpdyF5UF9JcF1u'@;
put 'eD8kTWUqMkxfNWF+OWJ1RGxEfkd2RlQxIzJNc0V9YnElTSgrd1lAM143YTFjOkIsbDAjXUFGakd+UT1SdUlwLG5UeThQVn56Qk1gall5YGMwd3A9OjxJOy5FYTFAYmFCb0pCbS5eYll6UVpzaSwsTz51bXlZJCxJSz05Oz9dWElDMDNnfl5hKVphWFUodWUqMmJqVTZsXmFUWXhJfU45NnF3KitY'@;
put 'eUIkOWw7ZEZYVzhPZmU8alMmKiljQnBvPj0iWEdfWnsuPSg3aFZZWWBNPUB3eitGKSMxenxwd0V6T3xiUlBkZiF4VHVkMHBYcldbWkZrfW1SQCJkbjFrajwyZnhpYFd0KTFYKk8we3F4YntTKzozcGZGfkRFQWwxQmYlZVp8RG0iRlJNO3Z4TXAwKFB4OWJKOUJXUyg9ZTA4LyRYOl0/SUVbdVBd'@;
put 'WWVOOHgpZTpSSX1AVl4sPSQ9LipQQ2R2VzVWLktDJHtOeTB5bXksfURtV3NDfH0zSVN1MipvZ3guKDh7TEtXPWZ4TG98KyNqI2IoSUducEFPelguTjlbbTpRdTo+RllKdF14QEdmQjk0bk9QbGE9YjQqMiNHfTY5TTVYOkVyQUhzeixzfSlQcDAoLnV2MjVWIzYxU1U9fHg2aWMkc01McmZ4RVss'@;
put 'PVloZ1RDV0w0T2dXR2NdLzZRcF1eMmIoUFttMTNrNiQqPW9bTSUoXUZML3Zue1BVXkdyUzdMS1QrfGI/LCxqQ1tGfig4SXdVMzR5cHFsOmUza2NUeGJVQXY2TDVuO0IqW2UzWUl1UmE4Y3xnTStncHhKcGs2NDdENHhZMytvc3VrdzoyJWFLJHpycD8mYyVTREY4Vl00bEJYKXN0d0Z6Xmc/dFpq'@;
put 'TnlUIXA2JU9QITA/T3RkP0x7TW53ISszVzpoT3N8PU96I2kpeno8Qj5taFtlMzAwXklaXU1PTU55QiFJMjBDZWJRNUlRLl9ZdSRaLC4jMiQ/O3R7ZmFgels9c21pd3RqIVBRSCx4YjAqayxya1hiVHtKSzoiLzcqdjU9SyMyRjs4dikhTkFTOz1dLmJtZUZeRHlKKXtxPF1mJEIkZ2hGZSI+WDwv'@;
put 'cyVjNFZ3YUZwdX5xRz45NWI3Jkd9TkVtYltJd2htN31EZSwzM0huMXt8JC9JVEk5MFNWSiRkaHVrWlRkdFt4V3osNVFJOi9EWilJaz9PIXQ5VWRrfUxhQiZucnJkVEVeWl43MWIlJUdgVmw+T3k9P3U2OzJPTUVRe142SiFuKypmLl9lWUFZYHoxdXsifCh9eDloRWxIMC9JVig7aHdTan5mMjRD'@;
put 'USp8IX4lbForPT5WTnl5fXs2LFliaFY7MywxOmxJOktWWUQjW2F+I0p9IzJZWixDV28yWDdxNXRfal1tMkZwVEU3U0x4fjE6NTRtNnolWSVjY1RkZT56dyo8SUV+R24pUyJheG0lLF5DO3hmRGEmKk5eIjQ2TEM2R0NhMXtCKlVLUGJUcn1YcWMhLCxTJDs6KkhlLG59IkdidyV1WzI7JjtIVH50'@;
put 'fUg9JW5DJCUqX2VBKmJmeCgkTUtoTU03MkckW3lHTTZXKE0ibD9oa3dBSU02dkhTPDx5amssMm1XOX41OTdHLlhUe0RhcT9pUjZHcUdtek5QUENQXmlGUEhWSkFsNzNeSlVhV0JZWkRMQzR+S3VGNkhdfD5NWlA1OzYjTH4+JnxLXV0hd0hqW2ZMNFhINTJPezdLJX1gVjYuJU94bHo9JXJ9c356'@;
put 'NnpWbU4kOl94NmhWX3dvNjkvPDFtKnVTI2grei5hekthYzVKP2c3WkZ6aj5iXSEzVDBObWchWTFCVlcwSEEyNSlSVlg0Y3doamJ3MGRPJSslfFYxZU9JJV8sOTpnantyOXJPeU5wImU1OnhnJnFaSF90aEpIWSE0QDM5I21xezNuKHA9JG1YNiFFKFAibUpjbT13OmRIYjFLTSUhVGAiJTtOY1kq'@;
put 'ekFHYjxaKHl0ejUxazhuRjwqOGFAbnV6biZTQyRnPXx4ez5fREBLIjQyIU5McFokcS5qRF52RlpRR1ckcTVRR1dCflZRdHthQGZaXVF9VnUmcFtNMUsoTX1YSlAxeDoiRndUVyVjZ3E7MUk0fFpOQzwpNU14TyViVFpuNj9ZciVaaylVJjgsfVsqdl0vTEBPMS5IOk43MVlXXnBEXXFZNllUYUph'@;
put 'e3o2LHdoPmdwZlA/NW5VQGAzND1UV1U7TzEuKUpwal04Onp2ZyhSUmRPM2d2IzRnOiFCe2kmUjcpRk1dOXZYKSRxSVIxMVg2Il9JNjgqUyhAMmJWPlRgUTBPQC9hUnRhd2pROjp0KVhKR3MlLiIpLFh4dncoeFNDVU5rZEF8S2EoUCwoRCxveTJ1NHpMQ0BPfE5FSXFyeihSW3wkPktHaGdJOj93'@;
put 'Ql0lIyZwKUo8NGwhaXo8QmlzaDhKIl9zZnlZaTBEM2xfUi9XUEI5RX5zYWFZIipnKGUuL3pxayU8KnE2JSJ6Z1R1QF98ZXhPdEhGa19fPkRwL3FlcVVKbzZ8XXRWZWhUKGUuRGY8XU88WGhnbVR2Wi5OaWZlfkAxbDRSRiFDbCw4fEJUV0s9TzZUT0BWejlFVTNxNXQqaDA0ImlQQyp9Pio7KXlJ'@;
put 'PkZwYzk2VTVGLFJnamo9bmxAIiosYTU6eGZDeEVLJWFJKTIpYWlNV1BPeVcvRFk/XUNvSG19PnVYPGB2TFo3cjZ3b15LIm1DTzB0dntaTlIrJG9qLm9Lcys/VVY3LHw4aXBlMXBBXywlcUg5fmdqV0pvMSZPYSxGejA4SHJ7fCUqU15NQ1heeXRuPGMqPXlaW108STRYPl9QZFY/XlsuTGU5bXNP'@;
put 'b2x6emFyT1F6NDhDJDFPaFsvQHVGPlQkJk9oaXFPOCxVRE5AVlFhOTZ9cCNfb0dTb1NleHpYaDdLSmY/T116YkJxTEcpVjNdUFFOWlR8bUhTWVdJMixWPDIiI3wmQkxNTCIxJncwK2xvNntMaFtjRHloJmRpYz9UUHRRa2Ftaz5PJW42U2RGclVzRkg1RmUuMElSPVJCXX0zdnRyLCVxQCRjJWpZ'@;
put 'eEBMfH1nc2JEeWh5UmV8TkNgQW9VNXd6SF8mXnoxMSt4JH5nPVlEeUhBaVAkT0Ngcj9fdWJhK30/JFZpdnpTKCZebGZqQD87fWdxbERLY0pqOCFkXTxJMG9oImdlTk1VWVNqOEJpel1ZWENgS3FbPEZLWzpKOEFhK311PUFQUFVsN1JlaDB1cUElQzt3QEtxajgxUENgRG8yend6MDlAcFZ3SlUs'@;
put 'VjV+ODBub31XdjgqRn1vUFByWitYKlEsZS5QWmdtZj9WSG1lPExfPjAmWT5oKiEpOilwMVl6QzM5YSNqZTsiS0MlbTYqfD1TRj0pO112Zn4zRVVyY3RtdipIfnNdKTJtNj5nUnl1Vl1mOV9qKyg4enpUQiolc1NLYF96YysoK2pJVk0jSD9IIlowfF9dNnI4Y21LTTMlNW4/SHprN3hePylLSSZO'@;
put 'RnFoM1FacylPMllVU2FheFJ6bzhSM0lQakwjZFlxYTk6MGtvaV1MQyIhLmsxU249UUd6eEFIVnZPQjt5RFVbPFpqR2x6SCZgRCErWDUhJmdJKUg1QiR3P1dCN3Z3Z28rOng9THpGUWdsIyJGbXk5Rl19KkgkRUgySiEjUUQ4RnVMWTE9STp4Zi5mRHl+Y21jNzUiRkMyZGBTIm0rLCw7Zi5fOl9v'@;
put 'WWhifFh9UE9gKlpNYT5ISypNfV5DPSl3T0dfYX5QPjFEOUlbTz1JcmBaMUNYJi9yZkI7ekRBTG5gYn5feXUzWnZRWWUrIXlWRnwmUWdXR2hqImQod0pZRiRPa1Zeclp2fUs+PCxTRnM4OFt4UnVLMElvZy9TYkdvdGBwPGYjdjdwUU1Cej9vU3d9X0lHPXZXSVtlfWp0dCsqfWV1QC9ILGRndno8'@;
put 'SSFDMSRAJipDcSl1WWlQezdIPXF5WUZuYiNCV1M4YXFEVilyT2Q/TzpsNHhUcjNXKH55dW82PVhYSiRHQ0QhUUF7dDMlUGx2NHM0cF1HO1poUUk1ImpAbz9QUztXaVo1IkwqNVlRPE1OKjRRWyFfMX0/dGdGbkFNXWA1e285azlqdDhvIm82U0A7fT1NcnBoNSZyOTtAM35nWW1KNU1AMGFaPFtB'@;
put 'T3h2QGpDcHJ8UWg5c2IjcklVPUFHM08zZ2sxRFYkO2c2Wz1ZeWxyKyZLITl1aVIwSVo2YUhfdypqYS98Yk1zJiw8JkNLa2ZgSXtuRFA5TT1SdUpWT2ZdQk9KIXB5aXwhfkdCO0M5JjslfEl5SCQ5fE0mcTNGIzg9dkh1ej1faEAkTUphP2l8JTVRI2IrZ3NCYDRvTiZUPXR3ZzBgcENRIllbSyhw'@;
put 'cj1YXWMyTU9SdXoxbD55ciplRjNbXUBvUT84aS55dnp+eStyNT94OGVdUDdzeDh5ZXg3RktxcGF6WjFaMTpTMERkIVl4T2Nsc3BmNWtvQnpjcyE7ZntYY1VJQkxQbnZ5OnJyfXRze15JaWxuK2Bnb1tEdXReVy9GTjdHajdlbip2JTc6WHdfRjB+ekhYQz12TSV4cW9OWkwxXzlKTSJ6MUdyfmNV'@;
put 'UmJzRC88MV9Sc3RhanxpXkg7K1ZsaEZuWDh8RyVtM3N1UXp8RihVTGoqSCtJPERkLF1KLzRCcHwkSk8mNWBwW0FFdDwocSJ1UjNJOmhHWVZFdHB9R0VaUDNCZDdkVWY6ekZVPCwrSCxLMVJNNSJ1fHRMTzFLYVVBbGJjUlVDKk1VbSo/SGBDVFlSMDt6Vi5zPll9alYkLixEM2hDLGByKHtFZkVU'@;
put 'QkIyTDlpekVYOW5xR3ZmIUoqLCtRK3h6SDY9OW5OYmx7OkdFPmoieS5FMTptd0xvNE86OX0/QGNwLExQZypdQC8hJCh7NEFvIyV0WmtnLz58dixnJkJUYE0xSGtaO2M0LHYmVDxFeildLDhNZkR+dCRkUmlaMGlwOFB3eiZCU29ffkRCPE5KTTdVM0dYYDxJQ3RxKWwjZFF1S3NFXnVfaG83KVVB'@;
put 'XkZ5TilbeW9gcTBHeUhmVFAiPDA0OXhEZEE2eXtwLls0TT9JUSxEU0YpRXA3ezMxT2UzWm1gOUo0LyFMN3sqVG4xP0slJTVQaGdAVnckRCp8TXpwODZKVjd2Ok0pQWE6UVg/ekBVSUB5RHhHVlhLeT5xLFl9fmYmans1eis+Xyk0UmYjaWsyWURiMExQKkV2e2M2fiVfezY7QnNMUDpQJkQ5OXBh'@;
put 'QV5Xdl50ekZMKyZFIzBrRDBHSyxwaXRwMDJeMGNUKilKLmJLQ1h3MDRYUWpMIVF8Ln1BamMwckp5OGAsZERDYzIufEVoaytxMSk7a3x5VCtEaEptTVBhXy8vbjdqY25ZW3dUZUEhQktJWTQ0MGgiLlFzZmtTWypoMH1YcH0welBWNUZqWUkkPD9ET15PKS46RCFAPU9oblFvKi4ubmd5bVM2VXU6'@;
put 'fkxhKUhSZW1SQyFQK1t0YkVWdjF6MHpmV3U+WkNqWTlbaWVDZihQdTlIaF1XaUo7Ql97Sj0oZnNFeV44T1lQYlJ3a35DTTticnIyLmE6bnJwMDY4ZjN2LHI8fTgqJEk5cjJoMnBId044WUF0RVJBL0pNWls/dGFrazopRF15X0Y4IkNRIzh5Z1ZOQ3tQc0szbC8+VXZPIWI5ZHxIV2BPITpNaSNf'@;
put 'c01wWGllTm43UEtMe2lgX2MrLylacERkekw4JWAie11XM2IsWyx+bDFlayR+aG9YUlVIaC8qdXA2Oj5lL1tGaTU0PXlsOCJbVyY8MSlWX0xtbz93U307bHxgYkZQSjpsLHdOQjp5fCF5VzNYQVleWXBHcX0rKEUzQSZiPjEqMld7emtSVTcibDNIRyUrTHdNWFgjfkpIWkM7K1s9O1lLJXQycD94'@;
put 'Ul1Pe3QmNCV3TCguMFtXMyZbXkx7Mj1iPyVpQ3BYYyZubzgqQFl1X1E0V0VpJldnJUZMUl82MSJ9QHgpcExAJXIreUszQVpULHdQM0gsU1hUYUo0dVM8P3lGOXpIRzJYSCY6bytdXXtlP197KW55KWUxOiJocng9UnhKQzxtV3pQdFE5RGE4Q31ZWVpUa3pKaCFXLnZ6YlhSQVtSVlpDZXxYPkdI'@;
put 'S0l3Z2pUUkhIWkk4Sz5NKn14L0teOTBQYG5PNyYiNHpiZUJ9WG57dSV5ckUodVowcWNOWXBDOCxSYD1wJEBOS0hIPlRuaE5Za3FrcVdHekA7X2wxZiw+R1hqTCFxNFtkIig6M3BjSm0uVkE8VVB8XnFCQl48O3N+dHZgZ2l4NzVTTGo4eFVtWz91RWRRQHIsaWF7OWNwJUgjYHBoIzBsSUMwYCEu'@;
put 'LGNGSmg0Oz5vcGJHV3kvcUpwRHV8NixfTmM5XjUsZTpLJGpFSSR5cWBLOGJpR0djaVJ2JTlFfHUlSztpPVdFIykmN1V2blgrQDlrImhNcFl9dnUzO1JkOjdiVjhXcT5nME54TEdZMF9KQTU5Y0pvMig0Sy8/S3xBfEVFS0o2WiMhXio0X0FZImdaUkZ3KVZkNSJ5YzAiSnlaW3guJF1KUHtkd1Mm'@;
put 'UURgOmBab29MeE1ZQmhbXlBuLyRlZVs9Q142bjhyMVVaST0hXykvalVkYUkwWWVbflU8U34rKiVrSE5gLHgpVlh5aWZuYDQpNyQ1KWMkOX5VUGZKemdFPT1mQSowfWVHI017QCs8JmNaTDd6aSswfTNHWEtFNH1GM0lzTEdXakVQJGAsVUIiKyg5U2FUKGxfKytIdlt+aGpCKi5WQX0/JDNNOUBe'@;
put 'VnsofkxUO15EbTdNNE5aencicDZvPUReQyQjU2h1LjBheUNoLiw2JSlveHAlSj0mOlAvI2Q6WSJxOlRRdStmNFE3M3hlZyVHNkZ4SzJlU1okSVBSNEJpajB2WEJDfS9vYD47VHQmZyw/YEh6VT5ARE5ZMVhrKCNeWng/QW1SQDBhNll+b1t5bGA/L2xvUEB1TVNVWFdsJUN1a0IsfC5kJD9TaFFn'@;
put 'SG9aZ0cpVWhHSTteaChzUVFsLnYwJEt1WSpNUUNpT3l9WSxUVlhKd1toQTp9UmFOZkdGSnpGanl2ezwsQUhrPVFERD9FJTxRR1dVJVVoOEdrPVsyYiZQKEk4b1lIXndiJmR1TlEuUDB4UkRMVEklaEdXR04hNXYpd0t9QH5rcHhDPztmTF9LRmFJWTNrSUgzJC8uandOfnoyfWRRej9oJCg/VXc4'@;
put 'SD80ZWkmMGphMEl9Qzk+aWFEQ098cXM7MD1JaE1DUGd8VlhBbndFRENma1MmWX1fT2N9JEsmTG5jI0RCXjhUbjZCZzohNnYkS1A3STxHVCRTPWk/NH4ld0k4SUtsR2VmO1UvO2p+b2BtYHROaD9odU9SajE7LlEyWXJwIWpJUjJSZDlUJjd5OCRWKy8zdGpNSGBEKU12WilnQjFkNEpDM2tuViQz'@;
put 'WWElP3VJOEB4IjJ1LCxCemJIKiN5aVI3MjgrM2Jva2FoY0ZNdC5EKXg/d090M3lDOSxBUjJQOGlDSEt4UG9TRTt4fVBnXXl9RCwraH52UmprZyFKQnJrb2ApVCRYeSwsKixWTTYueTBVSXtbJnwvbUsqQE1TMVhhbFBTMXw6Yi9wfns6OFd2T1hAc3ZocT9MLjV9Wn4vMHIiWi9yUlFpd2k1QGh2'@;
put 'dG8haVsqTDZKenpvLjdeVV1tcmpiaUF9ZzFzfCwvK1ZhbHZJOkI6aVJHOiMubmYiVngualJ1SjB2Wj13fjJ7aUlIOUQkfEl6QzR+fnBGNj0vNDJNdTpbTWQ/RG9SL1kvcWVYKyFNQFJqfXBmaGdUTWdIQHVtcDpHNkg5VHUpeTI1WkIqcXV8c3IwMDQ+SVJWamlSYi4yfkpQRCkmS0huYE1GO1lp'@;
put 'PFg7K0ZyNWckY3k/W3pXSUk8TDdwcU9hRXVUdmxAckNNT1RXY2lJUXJYclhJI1taay5VZGMwSUl7cDxGQGhYN04hWm8xOko3KVREQk1ofipKbTcyOkt5bTo7dkBEeVRvXXAuMGloTENUV013TWZvWiZMbDopPTNpcnQsP3pwZFEiZ30vWWlYIS8qM349YCg9YSUwMH1sbyVKbUhpcCYlfFNWJVFk'@;
put 'RWpZd2k6LGNWZ1c5amZMbj87SFJpQT9LJTU3ai9EOCRnQyskVWM0Yk90aU5AVXU/akleQD82JUV9JjtjTG85TmElJVkuZFVmaWgoZlJ3MGpsQmZlIWZoZmlUO2JJSHspaWpLd3B5L1NSMEk+TF8hWmVYZWhUKCVqPyVlKX0rJmFpVV5abGxjVmpUV3k0SXUxfS9KR3VVISE6eCgsOktRTDxNQ2la'@;
put 'cT87cCI9ST1rP2RFIkJ8RUUsfXgoTD5oOXpfSiZ0JV8haiMhLDEjQn17fiVhcjR0N254YEdoVWFZdzU0MHU2VEU8XV5lS0duNlEwKmtAeE8pa1NHYV5+KE52flREVV1CZ2FKdjtHXT1hUT9uNHxVXl8uJWVATi4kSDYoSilGUXZHZGdmMik3I0h2Z3o0UGlEa31BIUcoSy55R3dSI0hzdUo+UjZ0'@;
put 'Ok9gIU9BaX1ydjdzRksqP2ZrbH1JTGl7dUo8fWU7M35KciJQNUxDfm0kRzlwWGVPNy9TUmIzPXYycDl8QlBXRnxyeUpoeFFfLChnUloiJDgxbEtufWM9K2VocVlqWnZdMXRgM0RnemkmaV5DL3wqLythR2x6KTgvVTx5WSomLitgaipsPDlISTR4JkM7VzpVaG1AOm4lOm02eiovWzZWZVl+XV90'@;
put 'fjBlNi59anA7PiYvMWwjczs+MXdzM0VWdGZOQ2VpbUp1Y0Z6IlpxaFJOQG0pcTR2W2xTJnRIMG94dn5EYF1iYCJpbn48Ino5WSY1TCF8U3doWS9HfiVbKiV0fmFddSsmZ3FeRzcmbjc3bTpvcjRWZl1QTjh3UTkwNlZ9QzBJfkQxRCt2aylXdSg/ZEVLTilNZmouMDh0dStrUldxO1ssTX06fS95'@;
put 'RmxpSTNBZ1l9dGZgTjcxPSNqPWtFS0xOKloxZiw1STxfYG0kQnU5dSUwPTk8ZXhZdX1pSWluXUtgcWJqdXR3VGkvX3J8fD4oRmJrIUhFblNQaXk8bkNQclIzSERiP15SKENCXVpub2RPQkdlPXgxUk00N3VidEhrelduMUk3KTdudHs6ZzxwMEJ0VGEsKW0pVih0NmlANGo4YWlYJHt1c3Bod2V5'@;
put 'LzNLWCk7RCsuVnBIO1FuNkF1XXpDRSFjUHBISDIzbHp6MkdNcHZvQztRe2g5VVNvbWBSPGZdaVNBaUVSSk45RCkxfkQ/Rl5jSGp6SD83VWg3K2RsTGV3e25DeE08OyZfZXRYKjooemgmV3JXaFhWUn0waDZwXnUiY3UrYG5xYFdvPmZoPGEwWFZKTyhLRVh8PWJDO1pJdCx2eU9Uakw7VFlFQEJ9'@;
put 'QllFelV1e3lbRSNoYGxjW10kOHU0eXU3JCgpZiVxaTs9MT81VjBTOksuZkE+UG0/bjFHM08qUCQueT8keUN3T2VlIjF9S1JKW2tVN10zM0owNENafXdHfUIpJHg4R1UwJX5BX11NRzlSTDdQZnZeI0VodT5CQkRJWUo9Nml+TjFee2U0L3Fle3UvRnNpLFdyX1hOQTBTfTNKa3tbZ15EfihpQnNh'@;
put 'bEMkSGV8b05le3s2K0JfbEhUcndSRkJDXXdqYVN8SVdQdlU8UDM9eXFnME1KZGhMVXlKO0g7SylmYDtiIU9HYXRMIXwpWUg7S0Z1MF4xYm5iXjI4Rmg5MDV2eml+YlZkVGpvXkR1eWhBYXt6aVh+dXloOUQzSC5RcGk3JlVPNyFzUnxoNHoiKihMUGdVQFhRI0pkezJdXVdfI2UqLz82TTVmSUs/'@;
put 'RkUhdHkzbyYiSzprbzs3fHh2XnFpIV5iMkdoe3BPUiQwQDYxc212fCEmaShQJmcoUFgmaDIjLExod3p1bEFLa1pxJW1IUjU7R05tazEudGVkcXRNSVEqfSRyT2F3NUdlSjR6SToyLy5NSUEqQi54QUFLTzduYlhhKnx4WlEhbmcuU0heWDg4SnpDT1pFQXU5RDpGIkxDQUFBQUFBQUFBQyJDaDNs'@;
put 'a3xYOUxoRDVkMGY1KzwiSGp9eE5za3cwajAhRyZNI1kqdE9AKGlLSGRXbS5AWSQzTTo6OSZrNjU8LjtTX3lnL2t8SEI4Sl9hY3RCVlghWm1yPzIpLj1hdlg/L1ZzTUc9SGk4MCRXaXQoRndfQlBgaFBVPVgiLEp7Y3RLPjJrOS9VP18zO2FdS1JGZ0ZHbXo6dF5OKzBGTnBNVThqO1AwRlNLY1o3'@;
put 'PmkybFhVW0YwdV0oITltMCYoPEZ7djJPYih3JE15OEM3O3N2Q3QhPVJLL05sYV52RzJRSWtWYitKRl42NTxbPksvIjYyTEQhQFplKmQ9UF9xJS8xOnNaZTpDU1FlbWJ8TWV1IzY4T2EjUi57e0pOLElSNVBMW1twOUYyaCRAeXJVOHh9KCRIW0RuT3dLeXdmWGFILm9JQ0I5c2d8dCZ4aXFYbnBD'@;
put 'Q3JmflNARmV5Qk9NPTFec0c3SVU1TF94JklrW191aDBfVGdENSUiL0hnR0NMRURSTCJUYlY6bjRpR003NCwrSnlzZExxWWd2MGRFYyU8UH51MU4vLDIxSyk8bTlkRC9rUXZRcXs5TFMobz55RWlBfkhXMjtxSFR0N1dyIl4oeDQoRWtTPklqNT9oRGpNeTRrQyEiPFZJQl9AVFBQeSp+VX5oKmoq'@;
put 'TXB6ayl6aDspbWAhbnUvQldgMmJ6eEosYjNzVmYzWWgreHRQKG0zcWVxd3plWzMyUGo8cSRZcVtbeV03Lj5bYj91NUIsRm9ISkRHTWE7aWpBdWJRNVNKUUlMczBdQEBzdnNTbC97QUVqUkdlMXNFa3R2OWI1S0JKInlMYiFCWW14Xn1FKEwuWDEhRi9DbTA1L3M6Pz1Qd2Y6Q3ZldmAvPlM3Vy9v'@;
put 'fVhAJmwkJihLQ09zXi4pYks2UW9TYXtkO1s8fDJlPzhSOHU6aGIsZ0lgWkNhKzxKNGBHMnlyVSNHcnZ4OHhuK3leYE1DMDdkUkJvIzNOVT0hdTNyY3ZLaXIwcGp8RSR6O2V7dURxN3JFfnx0JkRJMiZrTSR2VSlJKjNfXk5fVSFxdWxkOltzLkN7R29+aD14SEcqQ2E7ZGxUPD0wWG43OllJVmlM'@;
put 'dHNQXStqMF9GcDNkc2REbyNQP0lhUDB1bkw0NSh2WWlGNUUufkpAJChlNm1dYDVEVW1PRzpkJFY1azA0UFZAZT9bM2guSmdFcmBxbntfe0Z9ayQ3TiEpV3A8emhgdkRYQikkfE5EKmA6QT0sWSYmJl1vZ10kTlsvX1ErRjBpVFkyVWpoVUQxZyxmTk1kZF5FK1Q8RldaaVo9OE1OKU5HIVRlR2g+'@;
put 'a08+Xnt8WXtLcmEycXtWWmhwT3tVLiE1XjskRSosQzNSZWRXIyhVejxkOkBWOVdocWtLWkZpKE8mPHxwTGJIWVp+Y3QpbiN1PH5NPD58c3s1bmk+c15vTnxsQ0BjXSl6VGlBa0FLSmo2byYuWFEmRDI7KXU4WyxbNXxfb0khQnZXMltUWTAqXitxP29xM1VIIyx7SUd1NnYuOjAoQ3VaQ3soaDhj'@;
put 'a3BbMyVhfGswMSJXaGZTKXFtdW83U3JKUXBydE46azJ0eFp9NkJ2PF1GS2E1O0NhZ3RfTCViJl5DayZ8UGA9VDNKPEdJNzN1OHY9KVtuUjRjZFtsJEQuXmwzVmd8eUMkQkY+LDgsZ1BUP3w8Q19dd2NtXXxKbG1tfV5wMCpJVDRQP108L1RlKUJifUZSW2hIRnxVQmw8P0FGN11HbSlSZ0FlaCoz'@;
put 'filyVS5zcXRidjwzcTsrYjJePUkvc0FodF87M0AofVNOSihFdW87fmQubSReJGxWWl19MjgqME1CemtvM1QvO0UzPEl7PTJXSDA6XTcwaVJKXWBdYkgpeSo9MzB7eTdLN2tkcWRZZjN6MFBSaTclQkZIUWJSfG1pQ0dOJCkiVmMiOC8sezJUb3tfXUBfZVRWK2FaXkBzViV5eGlmNTZMWmcxZ3ZI'@;
put 'Yyp+aEN6Nyx9IlZmZWRQNkM4MmBHSnR9OGI9TCgyNlFVeSV9X1QyPzp6PV1dMDk/d2wzb21RVnpaPSVVL3RbLDA/YTREcm1mJUp9ZDY5anwmaVoielU9L2RRZiQmSyxII042JU1RMyxhVF0oKk5ld0V8Im4/WGBMRys8TFQrUTZ4e0IsQkk3Ml15Kk83VCtgbmQ/MCgrMFBGNmQwOHVfUjVicGA+'@;
put 'dCw7SSx+aytrUiowWDkoXWZGIjdeQiFsOGB9fCtqVlYxYzZKPV1PWmZeVDlnSmMyTkI5a3FpRTd0Nl4sMishdSo4WktsPFhmaC9BY1ZTSGN3OEEuMFBRPEVbO1AjZExmUnkpclRybCI1Onc9e2NMWGQlT100PD5LSEAxciYzNjUxZ2Q3YEtxZkI2dGQyc0RjM2AuXiNJX2lXTyxDU0twSHJ5OyRX'@;
put 'dSQxP0xbSHU1QjR9PT42eCZSRkw9IU1AOGhHZSRtR05ANTxUaSF8dDB8ZlBaTnwhfk4oc1ReJDx3JUZTXWE+IVY6NWoyS2FATytFeyp4MUorUVsvUlQ6OUVycG9MWUFmRzwmKEliP3kvM0wmZTxNR21dVV1qVyRFfShOSyReUE5wdWhEPXFbfHMiU2xgbT9AQCJSRS82bipVM1FRVktAdSR3b3RK'@;
put 'cFhFKS8vezQmXTIzVll4Yyh+WD5DRiZuTzRxbnk/KkQ1Ti9AYUBRfFlhNzFwKV1nOXpabGMvbF05SFEuUXVkaSlyaEZrP3hOUjwlNHRGd0gkYmtjcz84SXQ0ZG5QdmcuNllmOEpZPGAqSzpXTDZuam40XmU6ITY/R1JycCNmRlZ6VkY3dGVXX2pmcG5hPVdtJT99bzlEfWJLVWp3RU5vdFM2I34z'@;
put 'eXcua2pZJGo7PzxHZEJOJl9IPyIvd0tNY2UqV2R9bCU0ZTw/WW9EMGd1I3Aoej5VVjN0fEJ5ajIjUD9hcS8kZmNEbjpqcUFbZFg6YilKM2peNkJ3Y04hN11Tb2NnS2kyTGoyI2BDN0ZeMER5MmlwSyhOQ1Awez5CdGVPI1dXb2dtPCw9TjxtRnslTjw/cm9WRmVZa2F7OUZASD0jYlg/O2xKdSQx'@;
put 'ImxWQnhRXjlvZmhMK0hLZFlFRykmJndWYVdBOTZMTmxKVXR1cDxrT3MyO1M5bWoyellUb15SdUBoXW0oZ0UldiNldUIlKS5CUWluUCRQY1RqflUlaWomLjRSNTAiaipGcDNZTXc5eXRpeXohcUR3KWFiJUk3NjprSG81NXYxXSFpVmd1Y0Q2RzV2Liw1W2BzLnY/a309UzdqenlXUVNHU3A2OlEk'@;
put 'aG1jcD1AQilHTGIxKkVUeUB6WzF9KndhOyhPZD40RzlTckAuYiUhT3V+OmUiSVUyVVQwdENlXlNTPEVbaTxAfHtNO3gsKm5PM3pBYmlaNmArfTdPRnZFKD0yWSZJSkBTc3UpV0lxJDIiJDEheEFINisqL0hTM35MNz0vPiN6N2RqVVZjLjtDQ3MsXXpULF1EajElO2hYNk4zP0J0RllvImFvT1BT'@;
put 'Q2J3MFBDXU1ESE1ofH1kRih+enFjVTxyMWBuO25AXlllOXUhWTRRJFQ/NShIWkRreEI9KzRPYlRAXytLY2hldXIsSWZxUkVUUyZDOSNnR3IybkgjLEV7KVUqVXA9X3hATkA2VE1qMW9wR2s4e1I7eWIjeHFNUn5rVlIjTzJ6XllpJm08fkRobnREXi5UajNZPXZVPGBCNlN1dUoqM3lqP2NbNVE+'@;
put 'JiJfL3B+SDQiVj9BJEV7SEBiVmFdQD1JYn19UWMzZUFKXnwoWHRieVFQeEIhVEZHVThOXmtJQys6ckxvaTt7bFhQLG50T0J1VX5ZRTRGSXxKQXtieFdKWGt2fVNjTnVoZXVrO1RKXmdRc2JTSj1gWFBdMGd+OEptSnxaPmV7IzgkeyVpfWxUbSpVVSFuezpWeChDZTFjLGxQeUxAYXBwbjxsak8l'@;
put 'djRwSl80K0t1NVdDWTl+Q0lUcV12Z3RUWGVlMTgkLj10ejxAel87Vissd2A4SkA0c15jTzFbc0hmZFBWcjkyRyksV0U7LEI1eUJnXUIzcDw0MF1vfk8xRWZ0RGtNJjpfMzdNV3pnR3A/O01WTUNMaHtQditPVE5rUVo7ZV1VSGJITDxJeSgvYClgWW48e2s6JndsVD04cnVwR0Q9WWhNd3N6Rlci'@;
put 'W1swT1AiaEojUV5dcEk9ZV1XJEsjVU1IMHZsVVV0LGZde0YrIyo8U2VxVUNmTG83Jj9qfn1VN2E+RGFiM24za25yUVdHb0krXUNqIkU8IzYpPnVhXTBueHQiVWNNOCNEV0lEcFpsfTt1dVswNWpKTVFEK2guSSp0IXR8WFJ9RG51aGQpMGA8T3B0PnttQisiMDBXQzA9eVFSNjFRc3N9UTNrXnBM'@;
put 'Jkt8VlVZSnI3fDVHTHxoVChjZjo4NGtUQXA5RTFzNGo7MVI4S2Q7Wnh6e2hPeGFQQzhDUTolcF81M1s/VEBEWDZ0O3dUNWdiejdBel97QSFPS1AwajxJUUhWREQ+LixZVSldTFcuIW5KNWltcUo4KU5FazRjb3xoJkNHKWtwJSJONGZ1YWFHZG8lMylBal9sKDpWIVNLNEU5JnlxOjRrazQ4Xypg'@;
put 'azE1YXNla1FHOU1gKXZRIU4zNCI/OGJpVntFZTZvIkRebVBIRjxXQCtpNUVfYi52ZV9RcXRSVUhKbC99YnFhVVVwJDV4Z1tUdkcuW3tXUCJTQG1Eb2A+LmchalB8a1ByQnV5SUchfEgvQkl7cDNneSRpdjVSVHMhdHVKfF13ODhfVG5fVT1ofmIiY0kpMGg7W1lbUTNuKltnNT0oW1E3R05leWhB'@;
put 'Q1UyRT5FXn1QSDgxUm8qZ1EjLyUpPUB8ZExTcjs3NSs/RktCVSVEMVBTQDQpdU8kRD1TY0pLOUtnZV1ddD01WzFeUjFrNTpwITUiV3ZoJXo9WHxoI0AkcDJ1OEJvcSVAIzxKeDQpPl4oYCxqcyh7L0c7UU9nYyleWE5bXSFOd2w6fVNsITklezFbai9yUVRULHR0d1lzNjdRK3pkYSFmU1N7cmVq'@;
put 'bGY3Uig/PF5pc1FpbWpvV3tnVUR0antAYGtsdzFCKVN7d21fSDA8ZEBifnIrXWlMIylqTk4+cntvcitTc2BNMXpiLCtkeHwyRHFGWjFJeyRBeSRwaylFVzMpSi53OzopVWklWWl7YUgzdncjLDEpUlFqKzQwWCtfRU5FX3tQKzJzci92NlBeJXdaRTBTXUFOSDptN1Z+fkVPOSQkMStUWl5beTZT'@;
put 'PiJMU2gyRGBDenBHN0UqVkJNTFkyWFEqOmFVYDdsPTBTUGRbcDprK1tLaGxJSTVJZCYjXS8mVGYpR2lNNXt5c01IVWtPbXd6bHduSG59VmdEa1VGaTRgWVBKenBXSE5IPU40fHdRZjpnOn1HfmElODZebnM4fCRpT1hJOlNGazdqdiJLd2M8eTshYnokV2Y3Rzc1W21fP0xiWjQ0R1R3W3tGcipp'@;
put 'JW11LGNja3coSndmUz00VDUzJChhKnUwO290UXkoLy5AS3JrPytvYFQub3JrZTIkOzZneDg3WyYzdjZBaVV4TWY9ZiNPa2FeRWIyOmglT1lEalZqZW1iT1Z8IThLdm1MeEsyIUNoUl8yZH0oMmxPSnJGND1gKjBjN0VTQ2FAdCkoQDM+Njg4ZkVPSFVdWVdkSTtHTikvY01mK0JAcVhFdDhlcVZ5'@;
put 'bjFqbTViQGR9KSEhc0ZVMjMyeWptOD5MdjY7VGRWbCFFOkY7JjshPFYkbW9KazguYEJ5RVFITXk6cC4rNFEka3omWjxZJS9IJGNTQ3pdUFBpYl1ZbVcmfmtQLlA+VTJkT11OPFoxKEB9Yjoke1drcSYxY3I/dk4sbDNmKSVze0kwfl1Sb0I/U29GOUY7b2RfUDdKWDRRKlApOG48LGk/WjxbPCQq'@;
put 'VXpHI08zVX4uV3lSY3xlckhbdEtUIXREc1E2c1pLLHxpJEdMPyxtbUQ/MUxsMjUoaFJzc1FTWFJfX2dNQE1XfT50Pm9yNCFwRkVpalZ5LFpReztMZXN0fVs+W3VoSiYvfUhSY34qVXldOHhbTn4kb2JYUXE9ZSY/aE0iR2YpK3dtZyE8N3pZe2NtSk44cHw/MkBnKmhmOEE3IjZYMkRKdFA4UHN9'@;
put 'Wzo7LzZIej1YfXt4a2VCd2gyNn13fn5EPllmfnU7KHxIb2QkOHZkJGkpe0ZWemB5WSFUcDpGM21ASDJaYFpJWVE2ejlTOEh0cV10SmI7YCRqTEpVOkc1ZTsuQywsdm0zaGE/QD5vST5OLzlwXn1uJj1fYHNwaip0ZUtiZWJNeE8oKlRZRGcsOEVdMTRqNmsuOlZiWk95Y10sXiwkInJAO09bMDZC'@;
put 'SDo3MGd7c2coP0ZaN25tL2czbHttcTM1MTZhNixocSkoPChsZjBTPS8kWiZ2LClJeVJMQFl+aUVnUiJpMnB8c1kyNCtqNisqcUtmUmgjIX41IV1kakZPXT8+cE58eFZZLCU+SUVuLCkocmdtdXZWUmYhTHkyP1ZAKmhFJmszbn53KShGdXF5IVRTblBRcls2Lk5IZ15rU0BtSVk8MkJHeT99ZTtA'@;
put 'KEJNNkNFRktJZntxQUx8ZDJsbUVqLmtAeihgS09rK0hEVGQuZmQ/fj5XQT0ofkd2WkhIdUo5Pyt2VilyQlMsQTFmbzM4NHMvNV08OV53blVmVUFjbDBrbkBrc3tfcHtUcU99aXY4PzA2emBFS09daXNxSkxDYXosJDBQeVtVdCpWOnFnd0ZnQi9jKzxYYzp8QEBFPXVdZkN7fTc7e3R8MD5Gansx'@;
put 'cSprLCgjc1pjJHM3XX5SMWJAaGk0cH48YlBsVyhDfitgVm1uYj50PENiRm8+VkhuTjcySlsxOiZXT1hxanZdXWRrL3w/TzxvaC9HVkN0VlpWXVdxfD47dT8wQlAycEJaazx3WkU2TXhWKE9zXjVoRztFb3tSLCVoW0luYjNHMmlLYXc4Z2RqMnhjRVZ6akVGR1pwOUIibSppQSEwa208Pmk2ZCRQ'@;
put 'TUQmTmRkIX1fLm8zQEk+PmQ5aUBkWVVILEYpMF1ZIUdkfXY0WiVaYVA/L30kSFUvPk4iQjxCJi5pPGN3SyosLERZb0V3eTwkaTNJYT9fR1l2VH0zXnQmPmtkMUlfQmh0PDB6eS5menFYbmxAImtJNyQjdjIpUCohRXpiSilSTT86KnYhSV1ta2t6MiY+Rk1lX359I3V1cCQmTGsuSGRBTFhVQy81'@;
put 'dHROT21yWCRSaTcxZUx9MGRlQiNmQypnNCI9RUpfckNkeDwsTUpjPEBUMDdWKGo1bmM1dl8vYHRGcDtrWXB0cy4yeFAzQTNCcG0qekxPb0dIJnB1dT17X3s+UWo+LyQqIXxsZnpTKU1CTHJ6JmliaV5uNEoxNjFjbV89OyV+TFcvXyF+b2ldQzddYFtwUyRCSXpQWTpfPCZGJW8kUEYqL0ZLezF4'@;
put 'PWN9SEkiSSM+UnkqKmNJZENYPCs8Jjw5aCh+QktRJDJRcjEqZDx2e1NaMDo3WX5lfEB1Nm4jY0o/RkVUWks7ezVwWThMY0ReNGYvLyFYSEVQMDhxOFJoaFNiSDpRRXVSM0t1eCYoXU9vNWE3RnJ5WFgxTzdrcj0kdXIhUjZpPF9uZ2koJChjPTJgWFsjZlV3P3EqS2I3Tk9IZCY7Uit7bkNTdD9l'@;
put 'T11pTztaR11qaDcqPGp0R2VoX0NCcTJFOUVqZjUjYjJuWGZZSmMiOHcxNSIxYUlTXy4+MFYmOXMvez5dOn1+ZjZxMTFVUG4ycCN0fmYsLlh7KSwvMiEpa21ZTldQdTgqODJOI08uc20+JEJAcClBKk95aHZXZzZaWHFINSNfK0NBUEpPNFdWVnVJNWpMZkBtXmNTLlBRIlNVVnZNRXhMTFpuWntC'@;
put 'cm9hKTB9bnBpdihUZ0pWTj1tdnpILz4kYF1oWjIuXkZBPUZOeGVdY0pCRGJkMGZtUWByKHl2KF8lRGBqd1hOVi96WkcsfFI7TTZTYixUTi98Pl1ORUpQdS83dlR2KzdGIShoZ1NGOl53KDlMPyVfUy5xeTQhYEtFIndMNC9uP182cShrYDAkX0skbywqX2lpcCtXIlNtWiQ1NHc2VjZCTWhCPWU0'@;
put 'SUIoQEUlWThOTjhURU1bcjgjIVdfMVhSIyxNW2hwflF3Ol1rZGB1fWszXkRDIzBhMng3VnNvW2U8WVV9VlBxUG0pKTpaT2ohXklvJW9weUpoQjZgTlo/ZDkjbGtkQSxGQy46IlpnWDBSfVhaXkUlTjAlIy4jQlJ2UD90RXgwMjVZPVNCXU9GUXZWREFEPTthfnZmSz1Ma3RtYXtqckpENWhtQGNN'@;
put 'RUI9c2w+fjI+WURjQSkzaDswMm8iNjlAPGw3P1AjVSZSSy5pSVdYQ1ZobC5IUH1WUzlCLkI7QUJSXkQ5Kk0waSFxSUhzWnR1K0ReMXFTWXleJVBEfWpTQF9FQn45fFdJPUN4UGJ5QUQ3W11ueGQsc0JwN2BReHBEZ04vcFBdZ0x+eVNdNkJhZ3BiSlFYKl8wOkx1dCUwLyRjWThwd0lgQkEhUT97'@;
put 'N3xsY3AuRF0mYzsoNFJJKGspU0xqL1srNntNRmY1fWJUX0lSSHBfaCxkJUxma3NgaS41fWpLSilhTEtEe1tyJlZDfHB9fEEoaFUlcylpP3Y7OFdJMWZsc0hkNldzJnxHS1g/ZHh7Kj8xKmBNMiFQZUJ7JDIrWzZUPDtHb1drOHVPMVlYZnwiZSV+Z1lReyVJQiJUPmFQVHtRPDp9SDlkVFJRczdu'@;
put 'TCt1TV1icHImPllRW2RifG40c1toQiJwQjkzc1c3a2lLLm9rTSwycFhsOUdCYGJjXngjaUNkTmFwOSs3I3dePjFpdTtKL1RDfFVRSkRfekw8Zj9mbU1vWnNgYzRec0lRMVAyUzE+W01daUhmbk97fUpHOGZ6Jmo2amlze2szPCw/OTxKWW06IUp6W0k9YklFeGw8bDc4VVpUN21XOmcjfG11YTtx'@;
put 'YT5sI1Q/UDVqR1YuRUlnPHUkXnluL3kuVyZiR1kmenJxKmRoZSNCcGAzMTpRcnRfW0piSEYyJmM6VCR4KFgwWUZ1dDJCSzw5QyhvPUdAe2VDZ3FEQFE2WjloejttYktoX29FbjJOUz4ufE8+RHppeGhfTSx6Im8yIj5nJkxuVnxzWiUkQEsqRHthU2BbX0JSPSx2Kmc0KGE5OkI3alo8WHc7YCFa'@;
put 'eGphP0NwP1JpQ1tQblpVfUx0aH5oXVEkZStePlMsUTdqMVshbC4kb0ZbTnZOOitpYkkjc156ajY4U1gwZ15aW1lmaXNVdHJHelNeIUsqMiFZeXtoNUQjaCErcDdULCQvUU5hZDNMWWl5enxWS2E/TnNLe19XWSw9JDBhLFVmVlQmX3ZkSENIaFl2TSg5OEZTQmJXbDgqLDAiQ28sZDRfeE5wI0Ms'@;
put 'YD01XWgwSGR4UVVeU2B+Zyh0OyxzI3YjXyRCU0lta1R5dnojJXFINT5NLyV0azdWRjNPQURCM0l6Km5bdks1JGZDKHJjPzw1ZEw1JnQlLGcuK1E5eCJpK3lYKD80XSVbMSN8WnZtZkEhT2MvMjN4YSp9Z00/ey9zJV1kLDAxNDIoW2w4ISVyUFgoI05vZDc+NSsqS1dNN3BuTzJJQzxgO2BHMDZI'@;
put 'YFhLLlosKkNjOilLPUJKQ3RvSSFZS2xpfXY8NyxmczszaFRWUSlyQ1RZJlkiYGEiQEQwakguS3AiNW9hb082NUN4I0R2Q2JEPWZQeVtNdTcsMUF+UTY/O3ZRWFUkQH16XmQ3ck8oTl57ejsjdW9kWkZhRU05a2QwZWxIQE9hdjlXKyY1NUFGNmBzUSI1X0pzOEh2dTxvejRjeDdyc3BwVyRXKExf'@;
put 'PUtkMUNzaUZ0emlqSWxrbFMiVmxGcCUmQ0hddF80ajJNbXtJW3czPj1oZSlVb2Iial89V2U0LlZBQFZZKjAla2w8S01tZjxfKnAqNWpsJiZvM0FWTDlrPn1oMWN7TU5vPHFIQTxsLj80dkN5VCYqSTkjMT51bH56WlpbPGAiJCtDVC52P29JfTQ9a1ReNWpbN3cqN00sZ009eFZudDRLUEtYfEws'@;
put 'LHJFezdXQyRzYT1qRntdI3BKfD1RSz0icGdiUjdqSCwqWzxmMDM7dkdoaWhiYHFaNDFUaUozbGtxJjBpcng0XlpmNzgqNHdJfVp+ZylEfnYuWj0kRWhCWGRMRWUiQE16S3d1VXtvWEJ1Tnh4Oz9LM35PXyJjNi4pSHM8Tnl9N2JFWGw2TVRkK3pCW3Q7TTVEWTc0byN+Ri9BRj9USV1CK2M9a1BV'@;
put 'YFopQCorLHdZbV1Gbz9Gczs+ZjBQZDU2TFN7K0tJdngvaXdJSEY5QF0ybyw6Pz5TX20kZnFlfSRXZn1qX3syIWBqenhVLFVuTF9hRWB9VEU+YWRkPXlbNzd7USZfeC5oMCphKy5SM3V1Yi9jYlE3RD8rWktQJSRmXWwpbDNhaWt1KSRBd3NvZCFPQ1J8MjBWQXVaZDZfbmwsWjdoL04+MnFVan5f'@;
put 'eyY5Vl89clhELCViY1RLKlVHaXV9LytxUmhASzo8TiVjbyg+XmxuY2FdYio4dDV5MXYmcmRxM3JlS1BgXztbJSVtJVEkXW8jJEBnen1dbWpPdXtKbl0yejFkT2NkaSE7aC80PDtwbXIweyZva3UiN2lMUGx+Ky81fSlKdmJjfHVkIWo3d01bKiNRRy86VEQzLDdfaDR4dHAkJiwoQ3pndERbVVV9'@;
put 'NWJrdiF6OkY8XTo4KnFtIUxTUXprKDhKUkBvX2BfWGxZPyNIcHN1N2FZIV1aJmY1Xi5FQG5udFtRcG9sdCtFJSFxJTpTOTZAbWFPMlArdmVmZkZAK3UmdmZvNDgzZSZ0TXx2I0h1IzkqXyRTRzRge3osOWUqbFtRR0A2MX07aGA8I35KcWNUUmwhejIhUnIkI2hLSi5eOGFfT2I9cVUpP0BPXyhl'@;
put 'fjNQdiRndmhBe3N9NXU4IXN2UW40MC5neXlKSSNZNiwvPXg6bnRbT2ZFTHsmI3w3RGMjaTdeRT18KnU3NXB5SWgqKWBmQkp1JG5HSVQlNVhteiZmITU8R3BETyZOV1MrJTMrZzd5cF9LRkBLWnVVcDEieW93NGZ7MFFuNnEwTVFkNVovPGB5dWUqOytKImQ0WllRQCNsZnZDJDpjO2FiJSRtfCto'@;
put 'TTl+KElaT3dwSndGd0M5VDIsWH18ZXFEPGYhbV8mQE5NKixKJVVPNW1hV2x4dGNZYS5MYSVTZ2dFUihLV3lXKkU8Iy5pTXRFKn1oazwlaVZCYD9bYEQjUSF8d05ISTtrQmhRfXFdKVhFYnpXRTt2Sy9UcDdqWWEhMH5RbSloJjo1VWJ3SGB5Nzc+Q29sfW9TW1ZbNWl8Uy4we1NIJmEiU0gjYik7'@;
put 'ajRKWHMuQX5eaCNGVjQhNzl5PGcpMjokZiokSUtXOXtmQytufiFGb2FWIndiJC9RXng/fV5UVE9IY0w7W3k7MllIfFFAQl9yRENedGRUKixHLzNnNGc5Nn0la0l6Si9MRHticyx7dzdTZ3Bqd3ssXkRefiZKfWxdVV1IWFhmeDZlaW9LLnc7U01+V1MzRV1yb210cWFraCh4PkthJUZ4VklSOU9C'@;
put 'bzpNKHFmRHV9ZFVvTk85IU0mfjhUcF1HRD9neHBQLClXeDkicWdBenp+VDQ8Q3xKRFlpR2VIP352eGA9d0RtSX10W0MwXnBiNWl5aSZEUV54UVZiUXE/SHs7O1tdKzAzKSxMRXhZVSJgNiw5dlNLX2RITmRUajpdekg1Kk8/MjZwakkjYHlAKT9Ddz56KnEvSSlJLzQua00yTTMsdncuN1VQMVVk'@;
put 'dzhoVDJ9fmJeb30jVkYyQjhGcmkhV0k/OSM1V01bazovMkwvL1N9e0NieEtPUFdwNm89bWBufH50TGRocG4+SnpkW0ZDVztFeko8OE92In5eKSZINStTbzc6XTVVZFljYEJ0X2ZQZ0g9ekJ3PiNXcUJQVmU0dDtWQFt7b1lKZEhDXkFVKUt9TWVjVCMjQjhFazRGclRKQFdXVyUsNH5pd0Nbazhn'@;
put 'fVVrRi82Wnx0bC50RU1DPyl1Z2F6SjJeSyV2aFtuQmpHY10jKGJDQCs+eUlmfWg+ang+NXdZIV1GIXpWRjtgLiR1bmlVVVA8RkoobUhoWmIiSmZBbmpqMmBEZnR7diRETmJ9SCx0cEBOUypCLEZdfHFdfFBHdiYjUSk2RW9HJChGXVFxfi9taSkkJjlITE1jZ05LX0FCenI6S08+cUFVcGp4Mm81'@;
put 'KFlPPGd7eSMjPWlsUFJgfERFfnUwTndSUjVII0ZBJDFHOGY7dVtnTl0wX31mYns+bGBxQVQ5JGgjOV0oO0JbbjB0Ij02YUUrQmdBOGolYWApYmJUOSRacjxVRVlyWi5UT31Sbld7MW4wT1R7ZkQzcGpDdiF6eDNtMj0uSWEzWzRZTDgkU3V5dzBfO3h8KDp0cSgqPUdeNF8lXmd+MjNZRigsfmZb'@;
put 'ZUlWdmh0TXJEd3J+I3VUfiNMdlNeeisiQmJUPE0mU1tUMCpWfCooUWJKVj1HIX01QXZvfTglOVRpL1F+T2tFTzMhY0dWPWN9KU1PWyFyblFGUzVQZUt6Ujs0OkQocVkpXktUcDx+KFZZVkkrOEw5RjteTEcqRk4hcFZSdVA8UkE0YjZNNDRJIjlSLCYqKVBxRHJSO19SJDRDM1JBRz9ObnhyMVZv'@;
put 'fXt3RTZVR31ZMHtdPjxtZnMsZUc0dENMVWl8ezwqQ01DeUNQKGZHXllNXWh7O1F3aiVxXipOSTR0ZGNnI2xsKUFAXkZiSndBRE9gMzdgcT17dWw5Jj00aXsiPElnb0ZDfCFZJipQWU59fjl9MXBWclA0YSUod3d4aWIycStuWjBjV3R3blBXXyJbcHxicmMrVnxXe3xvRj12VW9HcW9iP1FlZjNh'@;
put 'dVlIYzw3WXJkNE57aDkmMGR5RU15ezJQSldvZE8hYTtIfnQmP1Y2dGM6L3QrVS5Cbm89cSg2bENUTEhBWEBmWngqL0ZXckR1SWxJUE9NcEVYbjc6NlA6RzA2VjghJWYoYD17UHcoLG0mUElhblsvJnIrPTNrYD9XOTkoSzpgSWFKUloufFk6amo9eFojT2c6TDY5JD1WQSZWZjNyUzVkfF50YzpS'@;
put 'ODRLdzcuc3U2UlsyWlduN2VLYnZOVkc2akgiNzYyN3h2YUVqNnJpbWdIVEsxZDskcE5LRSNmZSY9TU5yfSpramtCNXh1Qj1vTksmR3pDTl8pNjcsKUhlfV1RSnRee1JQKS5+dUkjey8zOTBjVUR6aEV3XVYuVG1SSE55YihOemVWKFF8PHM5RXhaW1tCUU0yQzBselt+X3BPXW1SLiRgRmxac1ku'@;
put 'QE5lbyo1Nl16RU8haCZVczt4MkU5XlhGdTtSdS5xJVpMW1UzcC8lTnZtcyYiM3JtU0ArfTYqMT5he0U/X3N8bFM0d3ssUHlPaHpzRHp9IlhYOjF3QFQ+WmN7YiRddDpJbyZRTDRVVS5vcFFZfFgrbFtnSF5QVHskLHE2WX5kLyZ4NDcjTTJ5MGVQSlByOGBiRl8pZlB7eWgoITpQMiMra25yaUBQ'@;
put 'MF1ML19ZdjkpX3Y+PGFJW0BrX3tQIVM1MF9dSmN4TjJePlZLUUksRkdrZkswUEBqLl5FN184W0xQMygsUFhFVHQ1VmhvWlQ3cDNFPygyJV0qbGpXZUJgKVl3bT96Kn1PW3hfW3g7WSR6NisuenRHOzAjQU1fK2U9b01PYyhkell+ey9NQ0RCYmBbazIqYyIlNlQmUWp4RmVDZHJ4XlJ+S2F6UWpn'@;
put 'OnJRLjJCbFNkK2ssYmx0eTJgRXJFMU0zNTQ4RnJDUikzVWFEMVVdL08/antPITdeMTdbRV4iJn10bD9ffE9rOmhuUjopXjdRTSl5ZXF6MGY5ZlRZIyp2ZF83L15QIW5uWn5ZdG5wLjZrVEB4JXFhZipQIWsveDkuX0VFRklwbnYxd1V4ZyhxaWNvZUJ0VnpUaEdPbVhMOEY0fnkrdjFTVmNDVVVS'@;
put 'cHxuUGMjUlJuQlJPPXB0cFdmS0MiKUZubWZmaVVqXzVKRDdDRTo8Oy5gTlhZdGtVdH1Jai5WNWVtdnF+ejF2KGJZN1dMJm8wRns7b2AkfHl6KVF7aXI4Uk1JSUFtNlV7MnU+Im5vcCt5IW1yLDtLMDpjPUp2PWl0VngmcGV9aGMlRyErcChoeDNIY3kiW2BbRXRQPnIvZjVuSEhPdm5oQywiTD4o'@;
put 'VX57SHp6MiwleHVqKWZUSTtiMSUoYDFNbVlafmp9WEl+JkVuT2c9W31SSFQhSixBTC5+bTZ4MGJtK05zNDFWcDVYPGIscyI/V2tPfD4/NlFTdEhoJF9pUCg/YVFvb0hMRlUvOVdadyQoaChlQGJoYEJTenFINTlQIno5Tyk6KXU8Pnk7M2t5elFsSkt6Y2FtbmciZ3s8SzpdeS8kJWB9dG0wNCxb'@;
put 'UXgiYHdkN0lZKlM+KVBeU257TFNfTHJrJCopS1hFKWFxX3A/bl1zPHE4QiIwaT8lVUlaTEU0JDp7cjhSMGEvdyF3Oi5feyxKWDlRd0drTz51IUpXZFJgK0NBTT9bUT9yNik2Ij4maVopdUpuMmNOYndxclFaNVpDSzczMUEvIXZBP1BDZSF6bEhyMSs6UT0/TmFIRXgwPUNDeWxTdi5NdEhAdDJJ'@;
put 'Iy4zfHc4VmVdd3VmQVNHSTlDZjY6dW9Maik2dUhkQExnRSoodnN1cWlJWypnXnReUGFqUV90cFgrLy9DWlN1V1dVQTI0NXs9YSNweTw4cCN9THJCRyZXUkYlZythTFpdPiUzKElnMGBze0QxUmYiIUs0c25jdFE6VTJzNVpFa2QjcT1tZXdGeTIqaix1fEpHXWJIIlFzdipYPCZvd1h+K3Q/bmtp'@;
put 'Ry9FNm5ZJClIUkREOXByRkswI0htbTlrLERAIVJBe3V5dk9CK085RSFmeCIlLnZFfUZWO157T2V5Ilh2WkI0bl1oL1k6aSM4e3VnImA2NDkkfihtdzI4bm4jK1RDbXQjU31bOWshYTcrayI+XkUxNEhqOzFEd3xxcTdiaV1INlEmWzxkX0BTZn4kY1s1NixvezYwUEUyU3U1IyZHRSplVTJDTWpR'@;
put 'V35DbCt7Y1p4ZDJoQHhzVkE4UnUpdTQoRCNGKFs5dnJTJGdlIlljS2tfUW80cG1kcjE5bH1hSkYqRyRRdmU+WzZVbGtDTUhvQzNObkM/N243bVEhcEdxSUUoUDs7JDgqSDM4PStEOWxrWmxbWEhaNlVVNTIyR0s5I11HLGp3L0dkTjw0eGdaP2pnSEBMe340ND1NSGsvbnRYQShNaSZlRylbcX1U'@;
put 'dTE1W19Sb1AsRD8vOl58N1QhPVR+MWx+X0dHTyYwJitYXzJZfUhoRkgsIix9O0k1cCNtZkY9e1l1QkVTP2hycislXXtBamRZa01EeVIsKTFuUz46bDVFZFluTE5fZiQ/SXRsfEZxUWRqTCtgNXN5V3cxNmluMVtyZnx8KX5iZ0l8NUAuSkZXeHtqJEsiJSZhVG4scSI5TzlJcWUsbVZidTdZUSp5'@;
put 'N2tRc0ZwN09GIk9gMiJZbSx9OTdObikoTT9TRmNnUmRLJkNgOFVYP01lcWRIOzNhISlhfV9TLnFTZFF6VG5GfDM3fFtEazhUL2NDZ1M0VCZjRSkqfmpvc1hQTzgkdnFVIyM/YD8kej5FVnFpeVVpN2pDYU9DbWdReDYuajA9cVB6YmtXIj99RkBkRF85OEJyNjlPZl5bVTA5NmRmcnM9IzdDaVpq'@;
put 'cC9tQlI4WlksInNBbixFWmRPVW8rcj1+K1l2e1M4aUhWXmkmZFd7WylTK2p8Y24lUHduY2QuY1BEOGo2JDx8WDxCP3h6czlMT1lodjlsWnpKQXMrNiEhQExrTmhfSFZXaSFsR29vWk9lLD1VOypTVTdaMWlDJiRvRExhLHhKeFUoRGVKYGE0XTwvSy5pW0k8IWIuMlg5V2Z9SWtYXz9fN2JWTWhP'@;
put 'Qmk3XzdmXmEsY0Y2QGV5OSFJRClnIyJMKXY4VW1UW34jJj1Na0RJPls1KkVqOGtgZHNiezplVSZ8L11peEd1X2kkK3QyYG8/OmQ/NzUkbVlNblpLby8/VXRXNyVkbU89RUNKZV1PJG8jXXRaRTEvQ3luM145SVJWdWNVV3U1RTNEc3o/Lzt4OiR0TEczP0w+VCxaSmQ3QVUrUFMlMThNL145dzQh'@;
put 'aVEoQChGTVkxSHd9dGdKTDQ0OG04V3QjOUpsa2Vofmg8WEd4Lk8qX19jcmh9YTVOTTZWI3NsUGkhd2ByYWh1V2I0Sz4uJGYoOXgvdFRkUSMkTlg4PSlaLy9RIzcsIyFZNlc2KWRdY0lvK30oQjh7JEpXIU8zXjZxd3dWMmJFY3NKaVlrOWYwY1dBK0QiPXhsPTI4fURPTF5bZ280W3xTX0toeylN'@;
put 'SHNVYDwza1soTVNlI3BeaiJyTmxpIkxZKSlDVlQrSTZyPTNtOzBmZUMxSXk2Iz5lY2shfkBic1VrUy96KiUme108YTQub2NvcCI1cTErNXU8MXpxbyVqW1JlaCt0c0BgRkZEPyoleFJVNEV5L0czRnolX205PndALDBDRXt4IWZlLFJ8S0Y4RyRwfF1aP20xKjtlS3p2eiNgbVFoZzNtbn1fMF1Z'@;
put 'Iko8KypGR0JWW11eRk4iKlcrInlkOEhGPXtxM1BnVilbMSpWZmVyLl5gS1dXYiVoSnIwK0I6b10yKElHV3dxYXR5bjdSST49UXIyemksKFdzZnB8NWgmUU15UShfS3tjYn5OZylAKCxib3xIZTR1RiJ6M3lzanRCRFIvbWFVS1cjV31lcn5+MVp8IlZ8OUwxVVRIVisoPCVmeH1QZGQvSDoxM2xx'@;
put 'UW8vLERLO3k6SnhrbUFRVlU8eW5zNy9FMzFhMzEqRT4sWHc0ZTo5aWc4PWNsdV05TFBfUyp3MWQ8dExbYU9HRzp6L1MqNmxwI2tpLzNfZ0dFSHQjT2BTdnx0L2ZbVU9xPlEqeFZ4OCMwfVRKWEl8LjYxIn56al4oWUpuLFppTllvVkxlKUN8ZCg0QkwvQ25QQ2dwP3dhU0VWOnYkb286I2V3Q0pm'@;
put 'PSxRS1lIJkxYeGB2KENHVGJLNmRYdTl9aExIcDZMfmgvdHJUeXQ8dzM3PChJU21iLjBXR0xYPkNHTmZCcX5SSEl4ZXxHck8raW5VTXhmP0dwTT9iW0lLeGRQXXwiVko9THlEQCshLDY3RSt+YnIvRX5oIUdBT1tSZCRicUBwTjc1Q3coMVQhQV5sbXAsPSlsLzVaRz4qcDJdczk6UCYhP3YrXXl3'@;
put 'b0RtJDVIfWw5MDI+QDZROiRMfWgyMDxkOGUhbFYsSWdRXlFZay5KTDRwZkpRd0lxVXIpe0dBRz45KEtZV3ZmbypTPE45JipWczR3YkR+bnJaUFh8N2NoPTd5Y0J8dk43alZkJSIhKXM8LjBddkd6cDRYQiVqMzp0antAJmVPbExtUCJnQU14UHRsMHUlSEhFQyspZ2tqcSUubGN1UVVPUE9SUXdn'@;
put 'KVt1cEJQfDMkVlcxPkIsczNjcFVeIyZfby5ZLC5oJVkhRjZSXnYpUyNaUkMlZkQlMD9NMChTPDwyIkxifjo+S0NGLm94fEJvTz9sMW50Z1VXMDp+JSFQbjBTOUN9Y2Z4PEJwTC9zIlJfL2M2YiZYZCEpUCR8OFlPV2R+MUs7ZFY9IkhRTH1yLmFjOTZKd2hrT0x1Pk8pcik8ND9lR3FBXXUscHcw'@;
put 'RVppI2tFTno/RH12LmJJJX05RXNWKytwSzN+KGVNaj9IMTx7MkBROX03QltnVUJGI11XM2JIeWlHTVY4MDphOTpSXSRvcF95PyZ3UCpBbVY/VEwjXzYzV2g0QUZRVkdET3o1cUVOUSRhNzdVMSwyQi9tSnhIc3JreWNpKHpOMyFNTU46bz4jO3suPiVaOk0zUHpVOUJbNk5yZyJ0KF9gOixETnlJ'@;
put 'MiFnWHcpfj0pXl5XW0goN2wkaDhQLDszdSM2cTxaOypkVFUpLyJ8Jl1gOCt2RSgxWE9aZmAoKjhKSitSfEdFbCZKMixbT3FLKT0lSTBma1pFO0dkX0t3clVbQUF1KnMySlpvVzopeEdpLH04YSNIWV1PQl8vM3dBU1k8dDQjSiZ4e0dIZXI8a2d0JlU7Q1BPbitdLE5CbWZ4KCZGSE81OzZ0Wiss'@;
put 'PHREbmBZO3NxQG1aSlpTP2pLP345KW1CKjp0R3h3cHdkQ09fMmNYVHB+cXs/I3ImQ0hCezs0NiRne2lAY2VhdXtwXj4kdllJc35pUW5FbVh4N2I6W0ZjN0lkcH50Ni8lTS8wW3UlKTA6WFl3c05fLkYhZCZLRkpJL3ldO0wkVSpUcX02XjVaPFpSazt7SXN0JiRTVEhMWTswYl42aT86SHZfJGE+'@;
put 'YWd+IyZ5cl0+eSVkUWlCN0QsZUVbblhYeUlSQEZvWmt1UClPXlJlPlF6YjIjZEVaeThKJVlKVE4lVWg5MT9bS1FMSUA2InJPaUxEOS5FfXhEbSpDfHM/c0FJVjYzVUB4RGs8T2lHbUU8XVFuU3osb3YqbEd3LmVILEVvMzx9SW11TVoqNm4pREl2aHVlYigvNmxLOTk5WHhKTkFePkosIyFVS0Zp'@;
put 'VV5bQXl1dDRLPj5pS2N3VyFTWTZXflNYeDBtIT8uQjUvUnFnZU4mIyIvJCF5PFldQ1lYUjchTHVFPWlSL2RyWEZRNWNzfDU8YGxIPzFCYyt3VV9QJl0yU0dUU1dwKipyVXFMIiZUTjxCXjZ4KzRjWHZVOWhaYEpBQ1hEYXlpXldZezZCb0E1W05xSEdtUDVKQF0wfDsoTz40U1M6UXAyfHhFZnVh'@;
put 'TkNQTWEwfWwyOHdZM1BDa2tlKWE3dGJNZSlqeHs1STZUdXpjfmtxJEReUkY1PnpJSnpvXmJhLl4iNnpfWCZ5Syg8TVhvMWlVSDZbS085PGJYVWciaH5AWCRidiRgPiRVZD5KVzs6Y3Z3d3M3XVBDUWpOYEA1TFJlQn11a0o9czhEJlEyPkx6PUVCdHUkLnd8UnVdMV5QcHkuWCVCKE9lZU5nbCo2'@;
put 'Ni9rO2dAJWkjNzExfGQ1TklPfWJENilvXl1dYXE1YlNAVzZJPEBjOnp7NG5sKyQ8SSUrc3gxOmouUXdSR1tXaSYwVGx0dXdiQysieilwaWd6YERmNGpiYF8ydipJdmpeLHlVYzB7Zm01OC9vPH5IJl43bW5nVG1IcHtHW09gfDMqMDEwNTtqeHc/djVqOWxXX01Jb3gsOWtoZmZ3LDFCM3xhLmZW'@;
put 'ajtPQ2RzWkZFTDpnZSE9VkpWfDtxMDtYLmtyfEFAJWJLUWdraVVyJV1kKDchcW4pQ1J5Sz5FOEJTNUw+d0Fzd1FYSTV+YjVJZ3F+ZX5vTWhDTEVPbXVKWDFVKSFofihCdD9HXj9xdStmbT19JVhxXVJEXWxJPG4jS3ZPVSo4QCVwMm5hcXhqKS9Me0hhNV53UEBsYjxBKl8hPHJoZiMiW1BVSmkq'@;
put 'eVo+PEJbfj4wPldRYGckYW0jW246NEcyJTd0aCU6eW06NTkpNSNnSmNlUXdnV1dHW1RUcUtUd1lbLnZLPCJXOntDRD5NMV1LO2ppJl1San1HaCROZiE5Tk8oSE43el5eU2woQUkwLkAzal0xL011QzxSZUQ8ZFM6cVFRPDNzU2d9aS4vNVQ4TE5DWXs/RHRsWFAjM3BkV28lNzt0Lik6LEhxd05H'@;
put 'eTBgUj9nSlhiOmkmV1Q+X3IqYllYfi5nfnc9YCRvRnhjUl1FUE5CcXosS3s0UmZMX2QpZyhNO2RqRHNrJDFeYTR3Kz5WYi5JMlVQS2xVI0ZHVEhLPl4iJFtWaDRaYl1demlIc2VlZVBfNEczMXZ+TjY6ZF9NJHJ2bXhvaipXaV18LGMzXU1NZFJSMTJrUWl5eUtmNTArcnBsWGRQJEdPKGZ2WXBs'@;
put 'SzJie2FHS2ReRitRc3VAU2JTOTRKNXF2dWVteS5ZQyI5R2N1OXooPCtAKlNebzNVUjE1dGVQNVIjaWIwLlZkcUJfaF5ZSj94KGUuWWtScGcuSVtja21qbCZYM096XV5yWT1mTFRBdWVYO2gmPVBbUHJWXVZMRkVsJilqbUdoSjQ0V3UrcHtnUDUzbig6NVV9QHk4I2hkOzxSOG1HSDZlS2NzQFs9'@;
put 'TVRlaGdJRVFCRnlkb2FyUUtuZmlEZlJYMT1TSjJlL0glNClzR3goSk1dKkk1MVN3dl1yfTs+M3FdK1pFYnZyfmQ7cm4+Ykd1aTQja1NqRChQRH04MCxpWGxBNyRsSmwsUTp5LDVORHllYCE8QElWdWcoO2lKWDAvNFR8T051XzR0Qm9oO2tCI1lTXyxxczY6KUV8cl1CRywkPUJXdiZacGh5Kz8q'@;
put 'ZTAhPms7fUBdUGNmKz8wfEtiZ3o9USRlWkI4SX1uVX5WRDpQWWNwLmd3OSNxfE4wcFVpW3oudkJPdDAoR2thTSlzVWsrM05uTDc3YS8jdHc8UTwrOFNjMDhLSFdXQiFXWT5qeVhTWU1xITNAQHE4Qk45cE08dXkib3NodiMrUF9QQT1WfSN5JFRfTmpMOzxpSHoyRj4uRGdhLDtTOXNFTCM/fG1Q'@;
put 'ZTRPZkFPP1FOXUpRNj9WRHdyLElEZzcyQTFFaGh1X3c+c09DYEA4IS47MVk/dTxDTGdQTzB7ZCU5NHZzXSxDXj1GbXcpQy5rNGN+XVdqIip0bGJvfVZdLExjKkdkaDF2VU4xZWVzIUNIYClXdl4uOGZyNU8sPXVBejw5QXYjaHZKKWFeYXdfVlRvZXlsVEBxLyZDNVZ2MV8xNEF1Xm9aPndBP1Br'@;
put 'ISY8XlhiJFlLS1lIWChmPlREQmg1P1Y+bygybmdzYkg/MlovRkA/ZDNoTlVoYDFONFo+YkdJR3d2XjczLy5EN2hPQ21hK3NWISNTSkRWZFY4XWZSZHgvUH0qQzlSRF80YGk/WywlTmRuPkwoUlQzOkppL1p5bk9+fnhtZks3LHFKUVZ8VjAsM0ZkUmF2OShQdyVYRkg0TnVXRGl6L2dRQnpuOEp3'@;
put 'd3JES0dTPXhbN3tuY1hyIjd7ZS5qZnBlYlp5dytDdUpiTGNuYlJvQjpJUU5xYUdVfVtEMVBaRXx6R0s+eVVRKnVWZURiIzVWRz4xPz9fWmFXZk47aC8lNTFEMkQ9enwsUCF5Z2l4Z3luOD56KGdUNC54UGVxMjJNU21BO2k8azRNWFY+QFpeMnR7eGR8UShdb3RlITY7TzgjR3QpYzFhZFpLI2FN'@;
put 'K0pgYVtQVHQ4YklXN2JoK09fVXdlNktAQmhgRE8jR1k/b35WIkk3U0NBWkZtfXZRXl1HQWclIWZ+QXR6PjtpNj59Z1QwLHVSJUBfJVNOSGAyODtEPihlZjJ5dzd0JUs1UmlBc3QuSzg8N3E1UTAlUGF+O3w7SmhTI1VfYUB4bUtSQ1hwRHc2Tncwc0I9VVI6Knw+a3EkMHtKaH1vWXReTTZ3Ylgl'@;
put 'c35nemRGLnxqeFkmPFdKWFE3WihneTg5ZClzbDFgXmFvNTZtR29LOik6YV5mU3d4YTJhJjdpPy9wU2JSdzlUdCwoNF9nWlZ0Qz5JO0tdbDpsSnNlPn1leTl2b3lBR2k0L3ZqKSt4T20wSWpmKllpVk5SempgczxjNVl4eUR6RXhpIiFDd18mRT1RMVc3bXZ7dDU1ZTduNUh3cVZRZTdALyZCZnch'@;
put 'N2JAMz46eih+JkswUixlLzFDajlmRl9BIntSOW1HYTR9Z09vXyg/PiUzRE4zK05vQEgzImhrPUQsMXBQJEJrSWVGJWdvYVI4bEFmaE42UFNRSXQmRlUxbkRyO0NwaDFCeiZpZzI3fUVJbyFFIk9KXkdHK01ZfS5ZN3FXWm5ofXJlKW5+OlIuISldWElBJTU6SSRbVSt0OVhPOzIkSmJ9I0pGSjIw'@;
put 'cHVPYVRRVG5fUWpmWGt9aHcvdkl3cjxnYHh9blpCYSFuR3JrXjdqOnY7V0N4e0MqfkE0OHwoQSV1ZG1xX3B2LFJZXzBEZThkXmpMLEhoViZxZ3AyP15IYlsodyVkMn0pbENDRHxpPTY0MlE0dlFxWl9iWTVke1J6S2p7dkB9NXNNW1RdRG5EOVQrakQ5TGtbIzs2KjdXLDAlZnZ7dj5fRSV2W3o/'@;
put 'Ly4/fSk2TW5VZDx8eilxJUt4Rl9hezBTbk9FWnhpTXYpS059Pzx6cEt5ISZFenNHMXJZPENER3o4fTZWZ0hTV2M/QkpjODFnS2YpeGNGP1A6dnsyOSVrJHVYO0tZbTk1eV51UWN4cnVQZDcmRWVQN1FDd2ZFdkZhb3ZxMmhxeUJIcm80OUgkJEZOX0NvXjtRSCR1RV5nMGpDeDJ7QThmVEcjMSlS'@;
put 'ZiI/b0Q7bj0seUJQKVU8VUFiZXJ8bnhgP3xfITssSDx4P2o5L1cuTjswcCZQS2loTVpCeyJJSW00WlkiLHpQQz9jYzJXW2V8Ym9ETkF5PT8pITY3MFBjMWEzd2RUZU03bm9uLFdUJm1uNjN7fUpbdWsxPSJpKXtGT3lMTit2NCkpLj4uQXdNbGZEbjFvJVtuaWRdfWVfcXA+cFlUR1prRkgrPmZ7'@;
put 'Pj8zOiM/QW89cVVnemxxYT4uI3pKMnRoeWxpRHQ+TD1VeDJWZnhXY2pBUCVIezszc24zfUksaUl1PFN3ZzswI0hQU1U9Y1s+dVVxJFovZWc5Kj8yVWk9OEhIMlh5QEdCWTNsRkEzWmB7RjV9cUBecS59dnRJL2QwfnEpaCMxWk1QQmg2Zi8wNC96cWd8UGlIXzJ4Vm90fDBfYCk4QEBIckc9cHFT'@;
put 'L2pLcE16OHw0NUpqMFp6dSRXfnBjdFg5fUI0c0Jge207KFJDcTE9cHUoaEVvJHl7PTJvP2lwdXBtOjdXfUpYWFNaSUElfTlTQ3VwUXVWLFhwZEtzPEFlfksuMlRoT31DakdZRz5PWyVgOWZtbWF8aWcoMCtuay95YVMiOV4/OVFNP1olRjZ8L2NNUyZZXyk0a1UmWEhFdT1YO306cnsoaHowRiEr'@;
put 'Rmc6TmxlYCY7VTF4djJNIk0zMUNbNHQ7WWFiUCFnMT4pTFQ7SHZ8KXR9e1ZSJl5naG1SMnxaTHVORlNlcGtkUENqalM1WSthWDg8ciwwayR4Rj95OztCS19nSHtyT3oyXk5fR1p6SDZPMXpSRGIuS28jZ3V4cztoKHJAW1I7SiE6RERtSnsmc2Yqa245e0FmJFZORU9jZjwpfHh3KDs+QGpEanN2'@;
put 'eHVNTUFGMmVZVzR9Rjl2VXxWWjxhSVQ2dGhsfGQ1ZDxEdVVbPSJDKSg4Sm1rRlYxU34rTjlYdmw1ZGtFY2pfeXtpc3IlfHhGXV9QMF9AXWJVOE1TISY+VUB2fGAoUHRHOihmLFhaaSlBMXZTcGBXeVZLNCg6OTFNYW1+YExITk1YfV1YSmwwK1lYPS9WJSw/VDlwN0Q9SCZRd0x4cFEsRjpCLm1q'@;
put 'TnssfDFPezNuKUw4KHlfUVA2XlJCfTA+NXt7NXd4LF5fImB0XSpbMWFUKSkoQFQ6RXt7Nlp4RT81PjNWQlhya1tGPn4xUCU4KF9oalgmQGB2S0NMP3xyOyw6MWFlYm0qWTZSbEVXNX16I3lZSE8hNl5SbHp3TSlHPCtgN3RsT3k+fkRPSlgzW0R0ZXNsaGh7QyVXR3dxe0pacjZgdU1iNFB0eyE3'@;
put 'RlZeYXFSaGAlQE59UlpjLD5vMncjbDt5VHRfIzVFaFJHfkZtfXxSeWs8Ii95Z1JVLzN8a0w0aDNfa3BxWUR5fHBbOkFyWEtNSFk4NkB8RDwifE5TdCt6SzBUIS8mRysiTCI+P2g/eDV3XmtKOG9teXx1YDxXbF5KXjMxd2BbPHFEe3csYnJXV1lQZmh5VGI1O3NyImssRUlLL014RiVqeF84cUYi'@;
put 'XnImWjxsSSVEZ10wJmVpO3M9b3QibEpXSlhyRnBlRk17QF1WUC5zP0BWeXkyIzZATntKZjI9aEtTZShoK2ArYCI/T2MwISE0MyZiN0s0bl9Oe2tMfCVmIWk7aTh3Y0E6UXNIcEVtRnVFeCF5VW9RRC54flMhR0hiRDFJdnlgJXpKPlkqaVdvNTJsRSJxVE8wW0Z0I01mc3NDPDVwfi9SbURYbipb'@;
put 'I3V8RHwsRzJGUChmdnZtcV1aRDlXWk9iIXhoRnZjYTpAcX5pU1cmNFs+dHEwVDYjJFlJejRnQzQjPUN2WTkpdDNIUkQhYCZnW3NiYV57RmhFbHMwfWlbQiIhfihbO0p8VmNfWClPZ152OD5VeS82aEsjUEtxMXsxNEV6XjVYdjV2d0hORjFKcjRTMGh0Z3FVPiJqdz58O1NQYjZ9Oz53UVpNUjlj'@;
put 'Pj07TSxXUiI3dVpZYCR5I2cuJjppLz5YV340PlgvWVVlUDQ4Ojg8XVU0Kl5XW2ZsVVohIV91SzVaaCUvRmAoXy5bUX5vRyFKYTkhSH5PRVlnRl1qTm8+QjZyaj9NbUJjY3N3MCUmZERedDY6ZyZ2XVUiUUJyUW4+aHcvfUY4ZFFGQjE7PzZxcnQhTWV4bUsrIWFnIXNbVnc0bkdsIU92IlElTlRs'@;
put 'N2A4KFVWZk1iPjkqWWtyTDZTa21LTl5uPVRYcWBSZCRXZXtULHRvVllDfmMxKnk0ZTopMEoyZ0dWRHJ4eVBWTDd4OShdRFBDLnZURGVkUHJBWFIzcWFkQE51M3t9LyVePVd5UjVAWz9jO3xadnk+RThSNn5EN2JnN0QuM0wuJltuOjRHKnMkV314QCE8fmRhWDhjOmImW09VenpxSUs/Mmc7IT0w'@;
put 'TSM7VismZ2NkMS9GZHlGK1hMcz5+cUx+MHVsa3FxIksoe1g+MEhYSnxDJHp1V317M0ApJlI9dVFENWZnfWNmKGByNjdsTllqQHFXZmgvS1o8JHo5KlljPD5vbTY3RSNNNFk4VXU6UmA4cVZpRmoiTztgeUh6aXg1fVEybFBkP0lyRjwzcW9BZ2JYOENdVU9Ee3A6NGkuRUg5R1g4Iz1mM3VFZzlx'@;
put 'bGZxWmZ0dWZgMWk1UlgxSjo7Xz5hWUZKTiFxTnYuWXk0fi8oUT0keCtHP0ttak5OWWMiO1I0QHxGI19GQ04mJHBqS0x6KDkqbllZeyt4cW86VT5OPzBMNCQ8aipfaFZvOzIvNCtgcDlMNV1bQkNyR2FfWzspMm9iPnU+UjBwRStZcDk1YXJzekw2XTpPTDYuej01ci9weGZwWyEhKjlGQEdWX0Nt'@;
put 'eTp6ODdjRH1gdUk9eXwrLHRMQ0FhaCU+MXFwTkt7VEt6MWBadHg6bE1JPmEkMGIjekpqNWFFQjNveVBRMWFDUXNNZlhjKkhNQF1+Tj40JGl+aUpWIVFJfH05MyhtJCY8QzwhdUtfaD97ZHE+ZzteZ3ZwYkNdIzY6Q1FiellWWWA5RG5ONT4rI3olR35weWAlS3NtLj9dWWNrSEArVn5ZV3wjcno9'@;
put 'K1kqKmFydT8iMVk4Sz5AdzQjfGp2eHdLMGpQeUlkMzApMGtdQXJ9PTdUeEA1XTF9QFlBUkBlaGVofnR5WSkqRClRQXs5dyxMODN7TSUsZSx+PXZaTjNfQUttLjQhXkFYMzVYUilfYUZyV2tyZ1s/UC5sOW5LWWl7fFc0ZGBTaVg5fkswKGxBJVNrbCR+bFp7RWxGZ05lTlVvZis2RHBXUCF5O3ZY'@;
put 'eXMzSSFBYlR0OUhQOlZsPHY1allgP1pHLGc2RHxER3NhS0slMWtyUk42SlVKTlZ9cCM7fWY5VzV0JWpaV3Q0bSg3allFanAlbEJneWhSUFksfS5DNmRANmpJcmRpI2xRYj4hUTtPJXZUO0M2fXRIcyN8N1YwIlBKSXFoQCV0WiVFb3QrfTNhV043YH0/UURGQ2YxL0xiRypnY1h7UWpaKDw+OXw4'@;
put 'N1VTSnBvMU9pcXwwYXBbMX0sUyRDXVNvYyQ6Q0ZBLEB+dHEqZWxOWzNqdkBrNy4rIj92KWhUPk4maUEjc2BJSE5YUms1TSJ5ISpfR0dGUlE+NT5MLj1McThGfTlxd1RTV0RDKyohXnplS2xNcSUpeHwyZTJmRnx7bytbaEAoRnl2P3BXTlVUYjl0OjpfXjZYV28uNFI9QzAwcWNlK3c/fHo7VGxE'@;
put 'YjVndjlHLyJuP2ZHaXdHIk12bX1NXXhnem4rW1FQZ1BQVVopLHJTe1E7OzNtWW4iOUl9WUxRdndWZWxLPiRFdCV7PDFATyNrTXteXXY7dCtAdH01RkBgZnhzO0J6MENqKXlgQU9uaU82QDlfMVVLRFlYUF8xWmRkfVdWUVV+ZGBLbyw2KThuNE1mazUhMUdpcyQ/L3Vsc2tvK1E7L01fU1E6KXNZ'@;
put 'YDFmIzhzKm44UTh5Nm4uakp4LFpaXU9RJFJ3ZE1wJH1EL1V1Q3MxLj1RWHdEaCJ1VF8sKmU2QXdlJGtpVV4qWFtoXV86OUdOZ0N3Nl41dzE2WFkwVT9jYFU/UGQ1ZFBAaUhRJiJjXiFDbzd0by9ZVEt7OmZEdEs2L1c2YCxCbytoTltvM0dMWk1zazUxVStsYzowSS4zMUVFSnBRbU5NTHwsMUo4'@;
put 'eXguc3pbL2xbX1IvTmBkMjAuZXBVdU5GNmV0X21teDN4WltmWGl1KEMvejZzZDMmZHhjYG8mbkEhcGxTdyRZZjxPRG9TMlsxb0Z+Ki97Sm50WEdMaHdYMF1JUj8hQ3YjdVMqcCk7QEEkSiR3LHVXZ3ZfMGwjU1ZCNkw1KTF4KnV5O197Pn5dXWFxVz9bV0AmI2Y4JHVWNGwoVztaSkg8ayMwU31Y'@;
put 'STEjbGc/PXI8KkRDSjJkLDAlW1FzMnxJQjZdXzombF51P3c1c3JjZUcxYl5YMjU8KHlsey9WYmhoTiRbVmg6bV9rIiM1NWVgTGRGcUQ+eHF+aV1+JGNpfDx5Y3sjP0VAfXVhcj8vVVVCYk53QFdLUkNTOzdiZGtsPiU3RU4/d1I5ZVpYeDghR3tHWWZpTnhnIVg/QD9JPGY4LzdkJFhYZklIXklX'@;
put 'I0xwKzkiYVI0d1dYdkckPitbenZGPHZZfDVTQml6Un5AcXZlW3ZzcWlAMHUsdHJib1dCIT1YVFZrcFBMZ0dhfWwwaDhRfmZqO0JSc3wickE9Mj0ya2JXUW4iNiQpQExJcjgociNxP3tmM1RqemwyS3Z2QDZDelJjaip+MG5Ray81TzA6IV5FNkxBSlZFQV5hK0slOHNgRn1jVDk2VmFMO1IsIjs/'@;
put 'I0RxbDMlaFJ8bnVTZ3Y9dFFrIXJJXWM4Jk5MSH00Tn1pQmZ2NGZlblRiI0wiNiIxR05SQztuYEszXXk6OmIjR1YsJjhFVzA6VHVLTm9xNE83WG5iNC9YNGpRbGpBXXd1VDgyJCs4THQyRXIsOX1bSGpAaVhJOWxAY1h9YkZOWDRuN0opNlpAKiM1anV7fGN5RUNWVDpqRldBfk8xeGRXO3wkaylq'@;
put 'ZmA7K0RXNipZbHpAcXo+OCF0dkJuX0VUcipAOEt7aEJAamxFTlFKLyphKVdzanZNMGleUW0uPGhVSXI0YFpSVmRMXl9vME4vL283fHZ5OmtWP0hpTiVeMHZ3fFc8Wll4c2xONXp4V3k/bU1zLFhpUTxeNVMlOy9uMyhhMURlVVVgblA4TlJ9fU0rXUpYTSpoPm8hVklyND1DYyQhd2V9TWV+Km5J'@;
put 'IXpGPUFOZ2tYLE5EblJwVW4sPzJ4U3NgamRgVFleRGpLY2NDUnpsL3dga1tFU2Y5N0VWR019YU1namkkKjJdVmYyL0RrRnJiIS53cn1QfjBhLzhIMzlyak57d1IiYGVhMjJDLiVEJCFiN0l0Y3dQXlZqK3ZIeVhzezE9Y2hZMXpgJj5sbCNfIix0eHM/SUlhR3xbWytOQilEXigoW2krWkRPMj5N'@;
put 'T0JgbkVXZWdEaSw8dlR8JE4xREBKS1R6QylzeGN8Qk1uJU8oNj4kfmMjbEEmRG9OPC4zL0JDY29POWNuNklfOldRJElqUGMmaj5iLkhFZmI7SCpCWix9LGspaktnUiM1KnNHe2IlcjZZfEEkPGx+Y3BwMyQhdyRAbE85QXU+MCQ8ak5fdXFxS3YjW1kjXkRZZF5hKDE4LH1DKmZFXmdaWT1SMS4i'@;
put 'RTZpX3gre30sL184akJvQm9tXldfVlt3K3poUmp2NWVzd3UlV3QuOjdwIXAieUl7ZT1eYy5GfTR+e2p9NDt8TWAqTEVdUTR0ZmpWVX1pN1JBfXhDfXY0enlvPU8mJE1LaVQpWyU4MUZBeVlhMGo7W1AzQWhZIVs0R25sLlEyT0QuSX1Rc3t6d0ZyaU9paUBzMGVYLn17ZD05Tj1VQyVIdyZ0LDtR'@;
put 'S2d6RitOcHhxQ3FpT2dLRkxFSng8amImc21uW1R1ZShmQURafUMhKCVGYHFVPDRpY1I+fEdAV1Z1JS80JiRNN2lhZmxDdFB4aDZKc3B1c3NXJTBLbHpWe1pAODkiTCgsRzdNTkM/e2FwaGhNPSUyNlVyQ3lafVUjOjMlQ2ghSlZ9P25ld2EudjIyPk83bTI3cS5VUDYmPGR5bi5DdENXSCY2Xz5q'@;
put 'aj4mYU8/QCtOOWVHQUdwPGFicWhwTXxZay97fCNkWkxQfVp4NW1wWzpSXSNsQngmSVE8UHhzKjkoJnBsPVhBKFs+QyNsV3grUnAwfSIvVD1zUnt3QDpOcVNuLGY5UThrX3lWT31uNzQ0SU9Hdz5udSswcmswRShvaFJ8QklhKTMjNV5pMXBxZUchaWQ0PT1vNW5GaF5dUHEoRExdUiI5VF14NjZm'@;
put 'b2dlVHskcz9CSWIofE8vJDUuPjJxOCt7VVFeZ1VXLG0+eEwjKUFQPC5tJWhfOkNkWnZpWlJTUGFCZ2BmTWAqOi8jPHo4XkZSP1RDVm03RlZRS2ZNYnZVNlIvITB6YU5ZZ3o1a3tCI35iSXZYNWU+Vys6Ryh6VG94Z15RYURhN2F5SDhkRn5bM3F8PHZkRE5ZaWBUKkhHbz5zLikuMjJVXiZoTzc5'@;
put 'UDFnaHJSJSEydWFCdEROYUNqJSREbykuZ08sJnFfYlQkc3soRl1BSXFkMzBHWEdkYUZHbClOWixMTSx3RDtIXUN3WzQ1UGVubCF9PnIlKm96Zzprb3VTJmNjPD1rJWUsNzAyZDZnYitjbWRaWzsvUlRabkBBWDQsQzd8Km50eEZoVUJdNXVmTDg+MzEzJEA0aH1qelojO2NfdkJyNnl4TjcxS20o'@;
put 'PV1jdkIlKE9QJkF1T35pemVgSXZbJC5ebEhdNypVTHFaN0lUfVRxaDVaeixmI2BTKmtrR3NJKlBnQ0Nue2lkVXRSYj5aI1k8a3U7O2RXSytOfi56L1cqem42QWRqZHpJSFp3NTo9cURKR3JyQD5WMnpjUnA9VmdlXk8pW2gzJXdYKiV3a3tYaUksdzFeaj8lciRpVW52UHJee25ZMzRAQi5iXmFW'@;
put 'JEkzWn4vdn1uV2kheTlQdFNfXSg2TXB0eWlvUHh4Nzt8LmVockBSNldQemped1FwJkJDbTo7OjckSVRMIjRoNCl5XXdGKXo1NSM3P3ElQSIjP2Y/TnA8QGo4YWAiX3U7JCpGKUk+TDlMS3ZZQmlub0t3WFJDVng4STBpdGxnfXBmJTZaaXBheiN7YTBSI1VAJkE3a25GTHVZKkV7VT86WFdjM2tz'@;
put 'VThaNUVRU31aTUs+Jkc6Plc7fU5UNF1DOylvNUlKXzJqbk8ocCJkRGJSa2BqbFJoKCFZRjdZcH42XUcrVkwoPSwqRngmMGtkaXJuSzM0YmUkai90MTRBLnZeN203KS45OkdXLl5NX1N1bCg4eGpXVVh9L2xxKnMufVYjSEVQc0RtTHt8KFcvLnE3ayxKakBOQ1JTSVlJNDx9RHI8WGxPcEZeKUJO'@;
put 'JnpRT2JBRzJRMjoscXJQez9mUiJiaCl3ZXNIYiJ4TTtnQk9kXSo4Rnh2QztSa2RaRlt4YEpqSWhdPl00IiR1PUoob2AjdHxjVzBsOHVSPjs0VC93SFVxNlAwdFBDTmk+QCpseF1eelpvSF1WLE9fd2lefXxGb3ZnfVZYYGhIfEI4TXVEUlI0JGJWfD5sVFdoYEJ+bUBdaHc+Vj1OWnAuMmFMKiNQ'@;
put 'WjkyO2tfNTRJN2s8YC5ZV30vOlVRe3VEOHQjRVleNUZmZnFtRmspcFtLdVNtISUoOzZCNlczZ0lZNU1PJFBlSi4wKTFAcEtZKmZ1flQqeTRYMEpufT1aMH47SGhmKG5Je3hSajNqNUE7SlNFTllPYD9bTTA2V0dtcClhV0V0VmE/eEYzPHJaOVFgJHlAYkQ4P1FlR1VjIiI4Jm1NeVRxVDZ0bjUo'@;
put 'bXkjIXNsJFVlUW5XQ2Z9TUtzP2REMClZVX53IkN3fURmfFM+MjMpPl1SWV0wM0lUe18kPGtDQFVkVkt1dG47bkZHSS5TKS5haExbNyZ1JmtDYTsvR04zOndYYnIxbXVrW19IUVFpUGc6WHJvKV15cUZtVmZ2ZFtJJnd2TF1ZQ1tJOncmX2YuI0l7OiExMFopaGBXUX1aRX5yZnMrVT9kXXNddz5w'@;
put 'bDpoUy89UHB6bCYzTGRSZCpFdTxfJCE2LHlTX0Z8Jjt6XnlHWXF5bmVuWVB2QUF2JF0oYVYpazFwY1hBMkV4dWU9d2wzVEgsJW09Nz1iNWdmWGwvJld6WWNeYzskV3tKWyI6YSFmVndddDUoOipfMTE9UlRTM0BMVHo/QjFqIXJUTlIqS3RBIUx5RTVZLEhLbSxbaXA9fVBNXn5QYn1GRGYwT1dA'@;
put 'PzFmIz9LZkVgdX5PJjtJIWBAYjNAXmhWNCZJIn1FYVVVOEtncEJqLD5VTy5OJHUvYTZAQyhdVy5mWF1jfFQrKVJIKEtJcFJEV0dMYDBzX3V5RTBfOzo4P35ATDN0QmNVNiRdTCJXdStCcyJaTGlXMlQ8KXVnSytCIT4jIkd1RGw+VjYsLG8jb2A1UzQ5PFNGNkUxdlZvdy8odnd3cT1ZYT16WXUz'@;
put 'M15tMXRdLGFYWFVabjwrJnE4MVZNdzh2OHBDellsOVVla204dHl5RFZMWVZ5UExtPChbaX46JUM0R2QzenVveVJfZWBVImNsaF04SVVab0xfSWZwO2tCOiNrSzl2Pk1FJCU0dHhVRUkkYnBQSnI1V09eOH4pR2pVJiR7PTtBQWBQbXpScHdMNCojSSZGLmYvPlUyRjl+WX1YLl9HOUg5b2hAOE9h'@;
put 'bjJ1S05XPGJEeWBnLiQrc2pOMTNtND5QYnZibSlkPUxWMCx+eVQjTTVkZHAzeDAsQS58OEx3bCh8eSx0e25fO3pPflNqQ1JHaW1LVT0pZTA5Zj1DbkxnQkksNElNcGdKcyN8ZWJ9MjQmODdGdHBfKFM2LzB2RylRP2pMVXlAdXk5ZCppUEo/a3MzVE1yZiFiOVBUP2xAWkR9WkZWTGAxSDE0WTNo'@;
put 'WzwzX2ZqLCwpV1s+LGZyfE06aSIrTTxMcEhGdCx2eFQsZnVUN1pkRkE8fFQ5NX1yS1RYNEI0QDFSKUZaeFA9STVoWTZIYkd4NyIrYGpHSF5JdGVpWSZ7VWV3emA3VXxDOSomXUhPWVZbZE8/LkRQJSxqYWhZWF1paVV1Z0I5V3RxVUJMKU1kTDJbMUBlVWNdTUNUIUY9SnM1e05NX0VrYUArajtK'@;
put 'N3VGMSIsW19rTHxXY3dBVDdILChFRTQuUldbdVdUL1JUX0sodipYY2BPfTNkLl5oRF5QeHlta35+NzNQRj9kfWM9V2RTRytsJTg6PEEpVlRgcTBDPkg3IyRoVTtVenUhSllnLlVtS01OPjJKSiNXWE9JR2w3V0hkLmpJay94LmlbWXslVDozSF5sMTVgJiw5eWs+VHptP2hKTyVKXytMPl48UWlI'@;
put 'TmplZFNNUVRwa0BiI0QhdzQmVVcwKT1zSmoyM2ZycHhQPjBIO0VhcnRbaXZFc1AkfFQ/d2skMEN5c0MuZDYlYjsoPWpNcUJbeWlieH41WXAwams3OHpPekZFX1o8QmE0ZVVYbmo5Kj0yQ3dlNUksW3lrdHkxN2NmTGFJKUgqUj8oVWdkPDllbT9uLjhMaklES0s3dXF7Tjs1dkRjeSZnSSFKVXhC'@;
put 'eVNLTkZWSDJVRGUpRiZGMk5WL2BpRk9mVWBSSjxXaylhWE8xPVQkbXNdPiRhK3dRJlFxemVhQnJ9eDpQLGAzVFZhdEBxMThTRi9EcGl3ekdncGo4VF9baE49P0lzVXpyRGRVLEZ6K1EjP09XRn5XUEFsOyo8VEQpUiVMdXhCc2wlYEJNeTB3fjZIRGohX2dkLCZ1bG5oYCR8WkU3SCVNcSJGW1dM'@;
put 'aTc/dlhxNiEyTDJNbC4jalBERFQ+eFtiO0k1UktBdWBdaG9bRi45NVtqeSUuZig9TT5deyFKd2g4dmE7Q0MlMkw8KFN7NyVxOkZwXUE/bVRuelhnT2BWakNHNTcqeTdiRHRkWkppUmVjfXkzLyhxaSkrWWYkLy5vWS5tZV98YGgsS3dvUj1yN19ZNGNSRGEkXWksWyY6eFQlST9mUSk9ITNCPmMu'@;
put 'MllGfXJRJHw7Z1AuQyovNz47TkBGaFkwSXRGUHNAQyxfZFV8fD5iWWBFIms1RkBjODJWcHoxQ0kuRCo5RTJre09lUHYvI3JaazN2Ujo6MWp6VFdIfkZ+e3h8QEFbMlN1ISM8RV9qfVlMOXtQYGVCOHUqI1dXKSM8bzs5ZE0leHY5UEE6PSN3JHhneV9zTGAqKXk4ZXl0Jmw+Sk9peDJ9aXRgbUVq'@;
put 'a1ZFKiZ2RVtiOGUvclBJUylLTGZxaWEhUEt0PlhsQmMsW3pteltLdE1YIz9PSFQiS3xKPF5QRDVnbEF2N0g4PWsiWjJOMVNjPHpKWEFwYEM0Rk9SMltrPldyT01zVix4XltoVWpWP0E0cTwxM0xfYj8rcSVHRWxyI1kzfCZNNUw2ZX13ZltuUW5ZRTQ/Kz1JQiZqUnwqXmNxNn08WS5jKyQ2ej4k'@;
put 'ISF3WWhzQHBGeEN1T3k4Vyg8VEs6PlUvX1dBYSVCJUdMSzQ6aXclbTs2b11QUDRMeCtdM1dPUTo2Nm0+NS4hQGRCMG5za2JqRnBOJUEiXXZYWSY2ZkRPITUzT04uXWVBKSkxOmxsfXhKXjliI0U6a0JId0pxV0lPeXMxeld5ISx0KjchO3lrbylpdUI+S1R6KSk1PDxJY2ZMRTIxQjFiWmR7YyMv'@;
put 'YUA3M0w+UjM1cjh+Xn11MCQ3WE1eLEFdcjp0OCspP3NjQFUiMkNaSUxffExAeD5DXkM7fW1fbVtIN1E7amJsUmJ4cmZJSUJYSnYkRzVVIUpLcnZrSTNvdjYsZGwubDU/c2JQPWgqbmQybGY+QmVbQyksakVGKEc0QztZcV14Tyg3ZTZNcyZXIy41OSszYF5IdCxZd0R+SVk9OXpEOnZ8MVcrcU9b'@;
put 'amFqdGk/LGZlKTA3TFA6KSI6N2o6cG0pfSMzYXtmIXtOSihdZilBUUI+LnpfaF1TYXYpVF9kLFdDTXJkRXdkZiUpYSlhVlohekYuZXFsSlpBT1dYUlQ4dz01SHksZ1grVH5xRV9efWFRYng4JlR4NSx8NUo0OVB8XjUsckBpTEMrdkkhPmJHTSlaR2IvdmloekpPeGZJPllKfD44dD1TfmwpQUBq'@;
put 'Ik10Jld4cVA6Y3YpPV54V0c5ayVZTUNYPkR+bmhEanh5KGpLQkhgajxZRlJ1NzMldmtrIml9VyFEPXQvK2lffk1CU2VJaVVtYHdDYE17flNUPUMqViRhanYrQ0o1YjY5THJKS0suN35qImlecyU2X3lBenV1KWpsTzRscy4rPUxVWiVIZWR0JHw6aSNGYztKRUMuNkBOMy92VHxzIUlNSU85eHB1'@;
put 'dUxBTkg+QGB7c1NvcCVqJFFVd0Y8RUZCLyhFR2RiMn5dZDxzNTx2OnZnb0l3cVEqdFI2ZjZqaEomYHdCSTtNS3c2WjEhTyIhb01PYjRVbVROeS4qSj9BRVF4OGtpYjpCRXpWWnAoMHZSUzV2bGRdPTEpcGZBdkk4Vj97I3ZOIS5KODZjJGlAX35AIyp5Ll9zfUYzJSEwTX5Ja19sb31dUSlzMzE3'@;
put 'cFZIUn5mOF9MXjU2enZaL3FMd0xWPnl+djo8JiRzS1lnW1NGX1NuN1JZbCZzRTRYYjlnQDc1Yl5iWSleYSZxLDpDY09zWCJDKlEydV5UQyszLjxyQUNoKF1JUVtydnFXWzBzc0UvSkl9Zj9LL3RdUjR0RjVNYGslY3d1fVkuMGgrfko5OkJfJjRjSW95eyQwYHolbUIkRFg0TmttSHx0ITUzIylA'@;
put 'UmNJKEs3YVZINFdPJEhVeT99JXo8c0RASjRjVjYoWCh+eCp4OlpVSStlWHMrWkNgOyFFYEteSjh8WFtaOF1lLzY0b1pzI01KXz5MV0YxfVUqSVI+ISo2LDoyMj86WTRhWjcmL3lwVGg0RzFnKztKeHx0dzwyQzpKe2NkKT86dXF+ald6KkN+cEllck5PIWdxcCVIP3I4eHR8N3hyQVltXlEjVTc4'@;
put 'MkM9fXdLWkRSVUs1eUF6KCU4aUByPzd6MmslYXZyLkVrMTxVZyg9S2wycSZHME9bS0UsIyp4R29Ac0tNMkw3RGQvV2pVNilRQm40OSM6SnU3T3UvQ1hrVDImKDdmcDVoKjcjdiEja2d1YFAzUEVdKDtjPDpPPzJITjshVHZGfFVHREB9bjhKWWppNE4jPkw5YlRsWmFsbWM3MEh+NlZVN0VYSF9F'@;
put 'PUhocHxkOytyYDZBTzVDKk5bYUMqIT1bVG1wd0gxWiU1UmFxQm45ciVmbGZrVU54LkU5MiE6c3dQTnErUSVaI3hAeVFtXWM5V0FfSF9sfkZCP0Z+YXlMdUMpZURBVi4mXXopd3FYKzJUYVpQby4/I19Vc1g4LjosRjk+V3tOYSZdUW1bcm5nU0kpJGNGPUcxYThYWWtzWih8bylrITRQdVkvJHdf'@;
put 'PEQjb2Y+em1ke0l2NVp1dk1dWFNnamcpcE1BUSQ3YVhTNyU8O0U0Xn49dm1eXlY0SUF4PFFdSC4/KXRlJnlydUlmMyRMQyE6UnNjfmc8VElVWDpBSys1QUMxJTh6YS9+MXpTW3U/WCwycFkhbD9CfWA7PzhLYzBKeW4len4+cS94IS45JnAjUX5hSGE8MzVQTz5Pd3guakI9eUgrI1kyc0ZOUUBy'@;
put 'Rj54VHRCNko5VGFmQm8ldyFMQFBrOVVoUzNnM2hsYS9Ma29tN3kyPlpuJTFCO2g6PHQ7THVyLCZMUSllYUlYNmlANm9VMkN8c1VrTjhYPGx3K04we0ElQkxWJHhMYEYrb1p6Qjl5ZntoaD8wOGpCNHlyJXRxYiVKTG02elhgXlRsKGZDeEMjPk9WPzg2fD4/blhEZShhMTEqRSUoPy4xTHUlTUV+'@;
put 'fS8qZyQra2ZQQUZHI0FnI1lhakRVN25MUHMpb0xae05GL0s8SCEyI24rWXFsYE5dQlswJVgzai9ObDdrPWg/K0lMNzkqRVd8MU5aPVd+W2p6M0pAJHRLNWJkXi9lakklO0JPN0xUaWB9eUouMVg5M0JtLjV9LHV2S3lnVmkxVWZTaTMoaWYlOkQyMlg3WGJjW0AhbSYjbUZlOC5gKTY+UjEjajcq'@;
put 'Q3drKkBjMDhzMlBadVJUTk06RHh6dUIjP1IuVik3Vmg+ITo8cV96MDh+KUt1dGEiO01YbjJMVjUhKTcwW2xgTXwqSy9FQj9FVHZLYUErNzRBc3ldakZaVlJzLE82S1E8TGU/aVVRWkx+LlE3JXE9VEttflFsYC5VcV9XQUY9eUpMP2AlLzR1SEZDLnJGKT9ELCtfcFFRZ0NxPlhvamRsRzN5TWgs'@;
put 'RFY1Rmltbyo0Tnc7amdfNFVzIStRKiYockBWdVA9dSg5IWpyPGxxUTZGek9HJFRdeC8+bVFSQylMW2BOUV5tQTRnenl2Li5jZiFNZWJqblRZfE4xbCtPPkMkUDhVNkNzdT8ufVNtMndDS3YmelkqSGhKO3s1JShwejg2SzQqX0crLC9hUnpbUy51WCxOXTFYSFVEJVk3amMpWHl3Vkx6YiVJPjhM'@;
put 'fTBWd1FkWlIjU3F5fmtaTEsrOz14WmdRczE6XTZoWjxWbGE1NGZ1dzxsTnA4PH5+ZCVXOEVCc05sNGw1UVhNRXBgRkgkdVlTRSlkeFRiT3R9KWchMi5GOyhfJUI2c35OZWZiOEx8QUtLWy5HQV41e2prN3dgSWY7OlhGImVHOTh9YEhjWTZ6LmFXLnx2ZHFQdjxxWURec0cseXgsdkV+MGZkLH58'@;
put 'TXA2Ozhzcll8VFJBN0pFRVBjMDNXfTNKMTkvY1dVWVdTa1ZqcGR0PkdEVV94O1BQL1QkTTNdbFpjcDxDYyJ9T2lzIzt1JXVnOWNicmZadU13Z3UxN2wjb3VtNjtqPS5KfHNCUF9TWkdmWnJNN196dnsvSEQmYn0zXTVObC4wKXozeShBUDRUZEdRamg9ZyNYZUFdXjF0NlMham4yS3cjcFZKL1M0'@;
put 'ezFiUDRPMkBmKUtTdHtMOGgsZDZDZmBWaURgUHgpI3B5PmJRLm86OFVPYS5FTls5M0tLZkFmbF1uTTFjRTpSLFtXdDNCWkg4S3RTfSYsT0c3ZC82dz54aF5BXlVHaFd8eElJKWB5NmlKKzJ5Y1E3XmRwTk1ZYHdKXT81PUU2NFovajQ7ZUldWC5UKyNlKF5NazxdVE9HXU9pLltifk0keHs4OF1D'@;
put 'JlQwfjRuPiFqaVYpOnQ6XkNFWVcxUXFdQ0QrWWFNRk4lNU8obE1kb0FSKiNEbn5tYSpKUUdoLEFNcmMkW2wjQE15MkhOOGFGbEw7L0k9SXpvVyFyTWBIZXE2RGF8cHQ6ciV+My5PN1dTQ044SCgzdDZROnl7P0QuXlNydUZLM3FvdFpNZSFLMkIjfXRxb1AmfHMjTC5VNHhmWGM0PVFSW2NdNFRJ'@;
put 'TipWbiM+Z2JuOHojSiNjK3dGJXZzfXgqc1hQbiFucE1ZaWpfKSRSUD9tT0ZifDg+S2l5aXgucV90fFE2SDpLVVA1XSw0PjFlW1dZeCQhXW0rNVspclNyK2guKkFxamcyVzRMeGshJm9ZQlNxKWEpNFJUSSUxb118O2A4b01oPVtBSVs6cVRWVFhWZkxPYWQjWDQ7VzRxZituJWMpfT1mLno5PVc5'@;
put 'bG0pPz13a0RwcVpZUGlYSUN6dTJPOnlOVyUjWWEyOCIiMSJtK3Q0JW87Nm9OSiRGQTNFTlRYWTxUPTw5bUpPTTc/RDVGbyIpXUBKYnMiTys8Qn57bEUxQW5NbCMjeG0sfG8pRHdWZW00MkkxbyNibFgyTXs3Wi41aGpsdENYQVkodn5LVC92P3ZlbVFXTiguQDIyWWguP29qJHpoKVQkayoxJWMs'@;
put 'ZnpvLEVWK3h5QHwpNEtJZmNJQEQ7Iz5nWXAuQzQsWFBCYUMvKGwuOz8mSFM4RClIPiVYQG05JFVpKXdEfEtHTzlwL3A3VUFLMWlzVmAvdEJ1Xyhgd3ZfMn42PCZLI0hPZWcvSnxjbFAsfmFrTS9vOWBYY0VydVRjXlZ+WEdLPkM1fFU6cEN9Z05UIko6KFNmVmA2SUBMKENNS3B8T3ppOXoydm55'@;
put 'TnltfndeMEpSKSlWUFpPeWM6KD5HSn1NdDVdPWxTVztySzkvdVNXaVZBP0QxXiRdfX4uPFFyTCtOa0UuKDE1QjdSRDcjKEgzaVNjaXxQWGZnSzI5QDltZjhiYVMsTVVQckBxQiZ8fiVLfENHbjhHKU5dWnIlSVlQdmAvS2Z0I2hCK0oqez9kUlQpVGJmTzhtbkVILHBYPmhYPmNMTTVtdyh3cX5X'@;
put 'JUJrZVVHNGlzSEpEUjg3UDFsQXYrVnNgTFgzJTpYbVcvfG9WV2wqbTdycDBsbShiQ1BsPyRmOnZyQG0jRzllJnFPQ0l2XjpsPXQjcFdTVyY5aHk/JENOVW8+PGRdYzlPKlFeTCFfMlU5I2c6NzZuQ3psYkQ9NDh9aklDelZxY1A8bkR6dVddRGNGVndXN0l4QkQyT3gwfjB5Pn1vaU18aVVCOShz'@;
put 'cHtqSi5MVClpcDYoantae3RebjUlT09ATVZrY2ElWkM1cj5nRls+bGhzdFtJJEpuUks/N1M7XilVejh+R3l3NyMlYVR8L1dvT3hGPXo+MXs0LkZsLlk5VWVVIWFUK0UqVyxXLl9YbWtfdDV2Uil2PTo3YlksRnpTTi4oW3F8dWhrYHpdLF1NUFhsOixQP2hZUzIoNHNgRnlfJWBmVkBXM0k7MDRX'@;
put 'ZytZWWczfk83NWs5OXBWdSRZeVF5MDFYUHUwJVlfIy5veUt+Vn4uNS5WfFtYTUJUfEo8TGFZTG1VY05+RiNMd11ZTXpUOjtpUW5CPU1WViNIT0o+djA7RlpFcHtEVUx8KjIpfG88UXhLNjRMZSw3VmJIXjVLLlNmT10iR05CSW95ZmZMX1V1X09hd1ZOO1FqZEo7b1ErXT86Qisuc3tBcFtueFFI'@;
put 'JSZxazRIfjVCNysjNil7fGRpezdxLE40dSlfX0xiMTA0YHkpY0ZIP10qdE9OeWYqYSNhImNxUlRpUT0mL0pLPlBRYytkMTpBbWJFPD8qIUYwW1c0aWRbN3pjWzVgSjA4SHhRWnhGTno5M21sd2NyLkU3dXwpOWtePHxkO05MWixKYTljKlNTVnhUQXNeR1FoSzM4fW5HeklUfUA1bUhASls6JGRi'@;
put 'RkxwXWNMKSp4YWU3ZUIocjRsY2VOPGludFFIXlc0ST5JMSlbN1dSXkFTaWhmZ2QoUDlaa0ViejhrYz1RRDhMe010PjB2NU5QcnEySXheQGI3aTMkK2g0I0ZZYCt0WmZuN3JQM2BrbkJ2anV6PDUkKWVZSX1Ha083WC9qUCpVKzhnKlkyck9VKGQqalVdMjlRS3g2KmA0RThNZzh4ZmxVPWA/PSNe'@;
put 'TkB0alBjSGExVDEhS3F5dmp4RFF3bns+aD59UXl5UF81PlIrTkQxbVl4eHQ2WTFPIU1FTiZ1SEIoK0tbfGFpOTYuIyR1YjRsWFgoJUdOfF53ezMvYkZ5R11+c0c8S34zcXBHKndNbjdeSEhMW0pXcjJPU1EleURwNy9AKDljKDBWM3N8TDRIITEoIyl8P0MjdVYmIzMxNUtDJTlPcl9CR3JzY3Nb'@;
put 'UkBqOzxhemptZW9pMndLdkFEVyN2eCpVQzM+MHRXSy89dTQzSW9tMno3PDxoQ10wUkRXcENJdW5wR0c+YnU4cm1ANDNaRUYwdlpFVT9XbWg9YG8kal5gZnpQWH5GZGhZbm45eWFIejxwcH5TRXd9Z1EhN1E5Tj9MZm1PVnJ2JUB0aWgjaF03QWVufiVwbFZaWzQmOih+VV5Jd1ttNkljWUVkaHtk'@;
put 'b0w9QHpTazRHRnVMW3EzWlQ/Lk1OPyV3Zk0mJUMzXXRTRkFXdnRDO2hMfWR7a2dHflJvJnxbKExoejA4NGc3Xy8qOUlndHd3cU5gRVlKUmZYfkUjNnhLPmAzTHEufj91e0BdcFVNS0x7fVA6VzJbYVRiX3w/ai4kREgsSE94eEBpZD5AVmZyUismZiE8OG4sZCg1XSpxbTBVM0lWZmVGcSVMO0Zr'@;
put 'TGFkMFUrYmpqdzRhMFosUWB0cj0wVy5oZ1hQem5CXmZbTXJacHMjXlpVaXMwPW9eYDlfeDpsd0krMnxAVFpuPiV4Mj1OSzRhbG0xeEJhPVFCNipQdkBfPmglWzMyRVchL0hSaWd+L3Y2LHtNYm9ANj1QSERnYnk2aU0iTSVvaSNULyI5ek47QzVwbm5AaFB9P0hiSm1FSFFDW08pY3ZFZ2QzUz1+'@;
put 'VSFtRT8pLjhSZChTRV0wd0EpKmBmI1FzfG1iOClgdVQ4QUQ7Pz5oKjU4eV5WUSgzYztrNz4vSjVkIzpuOVE3UnRvK207bl1ze25zclFJP3EkNUdJQSVtZWxfNzciWmY/ZHJCU0VpYUFya0ptS0l3eDB0RV9YWHJ0eS55Yi59PC5yd3hINzBCbCpwKkdNdCNVNzN7PTdLbU0rVlpZfGBaWFhYOUxC'@;
put 'VHp3fF9MNV9AOHtsQTZHVChESUZbN0RJLCxsKzpRUnlyeCxOZlBfUWF2bHNQIkw8RTk3WVBZSzJ5fkR9QiZffjgse2JWVl9VcmRwYEpOQlUyRmw+XVhdRkNVR0ZwfVdEV2JVRVBLfVlULn5ndFMhciRrKFBId0tsLDowVzBIYi5vNUEwI1l8TENbfjE5bF4hL2UpOkkreUJwMFR+OTgiMV5IKWUw'@;
put 'LjIuYmE3blBTTmlnND9oZzttclFFTD1GM11GJCNeODomeGY+K2g3TzQhNEUwe3UlIStZJHQyNUZIKyEsNTJjcGwmNm4hRlhfP1coIiZ+PC5CaCZLb3RUSDsiOFd9Z20sT14uLEYremR7XlArWHJPcWwjalpWPnlEbHpiSlFIdil5SDR9cUVbREQ/cD1qNGZOZmpZT3MpUCRUWTc+ZThzOHx3byUv'@;
put 'bF9PPFUucmQ4X0dLI1YoKHRza0t2WzNjXVgqS102XSskT0VGTHwyM3AlaTArMWNzaklRPU8xNSFdL05qNChEUU49VmBuW0ZHPWEsaEQuVllNezVFYm1SUF5CanVwOzkpS3RlWGpvYHBrPGFGXVFEc3VfTGlRa2w1InNjaU92SzU5L1pETnEqSDhjW3pGMW56JFAuUTkzbjlsXmlAUV5ZTV1fQ1dk'@;
put 'ZFNtKnNhP08wb300ejAoaShPKHhESGQ+OF8wTVVAdzNSeTNoL0w1bSlyKnNwVEpzTWhlYGR3RWVIMkZ4Qm1RYGFMSE5WPjBtaCN1dUM2Nng3M3BRIV8hdSkmUjNLWkE2TW0lX1kwK2twQmEoKEdoNkNgQ0R4R1NLM19HJkxtSzRqMDVfV2NIODMlSmlzQz4kZnIsKG08UGExUmpqL2taQHhRQDR0'@;
put 'Ikw1fHNwNER1dSU+LmU4elEja0tsSzUvRE13OnFpTkNBejFKWE8qMH4hP24lMyNwaSVTOVczV1FsZlhSM0g9JCtpflM3aC91VHJXVH1GSmpYYHowO1BBM25HQmYrbVgzQGs9KmxBKVo1ez9VWzNZSik4c0swV0FQNCE3cDt9LGtfNV96ezBCO1Zpd1chZUdTXWF6bTJGMVYlJWBbZSp8MFVnP054'@;
put 'ITRiPWpVXjMpYEJHQkFMclBkPlh6MzddbjM9NCwwLDBJUWAqOnY5TipiSXV1RF48WTR6c15DIT5HME0qeG86bUI2JD8rYzcmKTQkemhWQ3xMJjx2O2xXUTtyXToibU5QfU1UZ11JMC42dGV6ZUFOLm9BKFUwfS4lW1RhdlFsL0lAR2A8aFBwTy5lcDsoMkg+LkFYbUN7SnhffStyWC98eS56WklX'@;
put 'fVYiUCo7PEVwUjNoVWo0SWA/LFBfUUcvTGVrUThzTEM/O0tUQkszS2ksVCt9V0tuWGp5VCFqPDBFJHk+XVA1QzhWWEhiL01CdTZZblQ6YXlGSmUvdzZmfXgvT0tOWSg6YGglPEdANEw3Vk9IeHI0R1VHKjo7LG48Y050TEdTTkt8WjtjKVAwKkNSQ1pNWDI6W1ojU15GN3tRRU10Qk5FeD9hc2hr'@;
put 'KCNKWjZfM2NNUVJiczBXXmFgc21jITl3Tj9ZfT9mLCMoM356L34zbjlMMV5mRGJpayQ7SFokS3c3JS5tXVkrNHlYTHVHQDwrSURSWWMsTW9bVEdoJVRfRThldlFnOkgsezt7WDdKYV4uJHxadWNGaWM+dnhsSFAjQjNDM0w2MU4zeyptTDIpbT00Sk04VFZJdChSVVtKL1h7XWshPDkhLFdiXmpq'@;
put 'SWdjcUcoPWF9MUQ7UyRHc3VTRldzTF1tdD9qViJ3dCZoQG1JcyxURCg5ZS5iRnsyQEBKd31wIXsuKSMpcmZ6TXVxTUsvaTVhfXQsOUVjZEtSfTNwb0VleXZJd2dFfXZqWGg3Qm5EUWB1TDhYRmBqQj0zPnddSjsqQFN9dT9FXjlPNCFsa0d2SkQmcVF8I29PRygodHcxYl9ebXgjKWspaFhLZDxT'@;
put 'TUpXJHtwVDFIKG07cF4mIU9QNy47X0Mofnw+dSIoKmxHelk5SUZraXNJciFAT04pSSV9OXRTW2lGa25qYG10UG1XN2ZCTUA3JjA6dX1BYDgkUz1dVGVReS99LjArP2gkPFYyRDlURz46ZGY9VW97M0RheithYFgxRWd8TTk4SVswIjZuRH5GQCw3Vzp+QXMoMD10RmpxYj05Kj19SGZ8VXclT3wp'@;
put 'TDgyVl5GYlBNXVd0W2dzMXo+fENWMTl3W2xodGRfcFJrNiF6OmM3Wl4lUmppRUhtPjRMeGU3ImVMZlRmNShgRC5qdGg2QD0jTzBTKUVtNypQPz1kez1vYzNYKWZQd3VadytTJF0/I3Y1dncmZj1KUXV0KkBnL004PExIVF1mYlNLTTpUOFMjPkV7Z040TVNfIipESH01byF6Mzs/VihjNzxqZTVv'@;
put 'PUJyPDQ2WjpTKj8oNmp5cVhhbkxjRG85dyZfUk9uSG8wdSwlKEtZdkY4M0E2Omo1UUUza1ZWaGwrPyVbQkghenY4SWtsYDFRZUlHTDhpeEJ4c3wyOWdRYF5YR00vP1lQbF9xUDo0YyovJDJgaHVfZmcmcj4lPl5nbFRPVkddZjlNNS8hbXRebUNDOFN4bj90WGZmVCZVMktpZDtyNiRqIm9GNG5u'@;
put 'VWkwIzNMNz1oWyFzQn5ScXNXSiwiQyNkYXY1KUgpQlI9N3VYeT16NExGOjhUaGZ5MkxGbUVlT31sT0JdezdtcndWTXNiaXJ2PVFUd0osLi5hbztNZ341JT1TL1RESG9lOHlyeFBOZlNJKWwkW0pkPFY0c0pzO3IhOjR1YkBHcXF0b2BEO2lfRnhnUjNbTVtAbjFUJEE/bUlMelZySG5vWGElNXwi'@;
put 'IU92aHFqRDR+K3hmUUcpPll3REBielk5VHVZPVQwPjRXWVIhZFE+Vl9yMXwvYSV3K1gwWmBYRXMucWdfeXNqa0siQ0xNYmxwcStkVyJjdzNyQkdETWRvJGxkekdlPUR3UEZFcm14Y3t+XkVna2YpX1lFfTZGU2s7WygjWEw2elNaelJ0bGZBX3duZjEsej1hWGIkJFFNflZtPUkkNk96OW8vNjtk'@;
put 'O3R4VjlgTDw1UzloYzAkRk1pO09tMG4sYElRfFFWQV8hb3c4Knw8STZuO0h3Qy5zZyhkbSVCMnYmLFk5X21KKHdfaClSXSx2aCtxWjNNIUdgdGwlaVksNW17djFOaCwjVTIwZTtWaWUoVDFQNihXMnBITU13Tyg6M1hYOCRSK1JNJT1bNmk5UmJYLj5eVEE6M0l6cVFvOVsscV8vd0YmREltMylT'@;
put 'ZHZkMFJaQ2ljOUhTM29QKG0obiRXTD9Kb04hfjs1TGdHUUU+JDNYYE0xXVNTNWEkeGo8TyMxYGNqSDJLYiJqXmNJZmFEKVdsYllOUnRnMnlXaWF4Nmk0ZyE/eXtqbDJ7YE9za0Y+UzMldFZZIzcvMVJrQld4I0ZVPjVgdkdae0V7KzBBeWY0Wnd3TD4hQHJUPCtLaGE8UC4mbG87RDlIb3JKMG9r'@;
put 'YXo+WHk0NTgmT01GWDFEMXlAYVB0QD9GY3FDK0Q+W2FrRioqd3tZdiR4UnpSUFZeUWZJPyJ7YmxheHFEO0BPUUVZOFtKYHpYUk8oSmtNWV5JTiVza3I0L0xdTCQoYXg8c31AQSl1fj16cE5GKnZNNm51Yld2IlQoY1BsZnp6N2JAfFJgI21IRUkyPGlWdykjTylDKnZCVlJgQUo9L1dJUG9lZmwv'@;
put 'N2JgPzZ8LituWXVea3RqZzFlcDldM1MyM3NvVE50biokWUI2NnwoOmNXQm4uUDY7IVR0QzY1TWxneDB9P0loLnw9X2p+cnBmVm4ka1VHVGM8JEZXd0xSJiUqWmtzODdQOD13fExaOWkjcCY0WlVTKyFuPyIjYyk9eWpUQCMpaiN3VkRZQH1fOXsxSXsvd0YoajglQC5dJjhjSWVEYFh5RGdoVVVD'@;
put 'cSVyZGZLSU1AIWpsdTk4K1JGUG9TPls1TDNLV3EjUFBxNUlZVldEXUoyLHpyMGJkISRMRnZjTSMiI3ZbYXRWPz1iOmskMyJOME1NJGtgRFU8M0lVbiNpfG89VSoiXlFeNzslKE9IX182NWlMTFMzfW08RXYjKy9fZH0iJDNpanQyJEloWEgyK1szV3NSZ3hneGppbnFPX1NDXkYxeF1xWiVNezNR'@;
put 'MnAzTGYvLilGUEpBIk95dVAwWmxSdkgxVFk7dSlJMns5TzB8Y2Jla057K2Z9fjIvRDV1WXpFKjp9bndCQHVPUzBLMXduWmF0R0R+WyRCW0pbNXNiKVl1UCNuQjZjOHQyeW9NRiFAUERYcComLCk3Tz1JP3V6XklBMDI3U3dBQD9DO3gqM1VgKU8lY3w2NzhKPiU7bWZAKkZHYWZsT1RRZkJTWFRg'@;
put 'dTNmZiQuKCYpZyZSemA0S21FcUVsekJEVnBPd2NhNlFoYkcpWCtaPEU2PFpWSiJbXzhdMzB+ZTRdOkdATDNnVllxSS86OlF9Wz5SWD8sT3NLaWFXIVJjN2pwKWsieTAwVnFOKT9rbHUuSjswUVtWWCQ+Z0svUlIqbmg5OWpmX247PXNfJStORHMiPGE6TSt9NmUhY0JZMyk+bW8sQVIpQTg4ITh3'@;
put 'ZiV2KVA+WCNIPEpER0B6NzBHbGFXMj5Za1Z7Y1Q7RnwqPVBeazhmbndmTTl0aCx2UyVvInxKal50TElWPzFPeEVqfEtKMXQqeG4hSEhHVFdnW2NNRFoqWX10JUIubVRLelBMRjtgWF9VX1o6WFBobU5rfVJ4cFljZ0QvcjAvTk9eZ2ZqfWZ+Q0ZwP3hDQ2VtZUZUR31sZko9eWlVKHZhOGBheGBC'@;
put 'Sm5JTjZ8QG8/V3tFKWRSbThiQjNrPURKZVhaVmRrRkleOjkqKkBKYTlmKn5RW2BaWnNqfHxaXjEmOFQ2L11sdG95UEciSEticzZKRDFmLlQ1cDF+ekhxXztgT0RlKDxieGh2fEJ4QXYlfUIzVmdJeUk8LnhJJFFvODBjcXshO3RQcDxXTzBGTi5YKDQ5N2JJNEBpWD8hY244I0FqcX54JnZ+QCgk'@;
put 'JiE+ZEx2XjokSDI7M0pgUV5EY2VMLjdrTFJHSHcmbnpNUGtmOjpOMTMxOG9yWlhWbVQkKjxDL1ZiY3NIPyUrJDZ5UClQInlyclVmW01ncFB4akVOTjV7enNiaXk1Wl5UIiYkYCwjSVJKakk9anFYVF9udzFpaStqPWRbPSVqd0VidlNMVjFDV3MmYU11ezZBVF96VEZ9NFY7UFkxYjIqSHBJPFly'@;
put 'WFV6KUs5NV5MYV11MThMQWdrWWFbUkJFLjIzVVAmSDdIcTx6K11VYShXV3kzUWJ6OC9CNyN+OllYTX5vNXk5RDw8QkhmTXQ6N2A6ImxmST41c1d+USFHaUYmbExvKU1YI1VxNFklNSg2OllyYTBrUjRtSkcrU0QyU2lBfn5KMjVAdnZ9P2B4NltkWzg2al8lOnVRTiYzK0M+RktQb1V8SCVoXm02'@;
put 'ei9bK2NBUV9QLGpAU31xczRDMnMyZ1d1JDRrTjBjRi5ldFojR3Q9Zl4/PkdbUWh8b28jb0l4Uzwhey81Sjg3OXRedn1KRiRVX3ZVI1ZLQ3s8JnJha1VVTGIraCk8Zn5VMVpqK287Oj0kajdoLHMkaFVUUURJajh6RnE6fkNxZ2xudGFbVHF5cF1JYltCVyp7QjtQMXRCb1d7QDZaIyVuK2JpZmkj'@;
put 'LkhJJmA8LHhYN0tAe3d4RWhwOiQ0KzYzTEJSPnw3RzFnLklWLyZIQFVOViIjcyYjISpTfUd6UFAhdEltbTRWeXFuMH57TkFfIlp9TC5oZDNQcnosRj5lT3dQImF9ZytAIWBOTV14fi5Cbl1PXkQsImF6eCJ5VEZaWTNCMHw6dW1wImc4eTRCdD9PLmlNVEJXZU8xWH4oSDhmPi5tJGQ6ezlrZF9j'@;
put 'biNCW2FAckdpXVY4Xjs0PDtMZiIvOislOzpTbDt0SSNMe2oiPSVbW31BPWdJIjhxUFIwM241T0IhTVQhWGJqQ3QjT0RMVSltLlhtT3kofDttZXMiVjB+S307P3teJio4Ri8hQj4rNUwsWEZ0W0xzWWZ+cCFIK2VmVCFlLkZ5YkxGdzpMWDZhK0VjX05xTXBffmkmQjBrP04kalBMZk01MCpNOG5y'@;
put 'JUxOfEl+U1gjWEUjWUdiUGIrTz9sRlJmSXM+Vj19aEx7NiZAe1UlVE9AeHx3NUU8VD1HLE5aP1NZWjV4NCMkd19UJStLSSYpSXcpbH10ayNpPmNNXTtpVVRodUgkQkl0KXlzLCR0PE5YS0RYZmNoelY6XUtxXSJbJEN9MitUam5NaChMdWw9cGRVKzFuZFZTLG8+U1JUZVBmKG9IM3sjNE8sYkZj'@;
put 'b3laNXM9W0V5MUJdVFoheyEqLDJaU1QlV3Q9QTBiNCYuZjolPSttYzddUT8mREdPXk1rd3VVVkI+RWpTZmlLJVQzRVg9LjQoflZtdEJWc0A5MlAybG5HeXB7ViRNdz5UPXE7fThocUlmK018bDVIK1VpPVlfRDovaHkpOzl7KSE+Ukw5K3YrbjIkQj9kblgzUkp9Kjh4ZEYoJTUrUmYycyE9YTxb'@;
put 'eil6SiRFKnRiaWdgLnBNUSI7eVd6YkpCeys0V0M2NXB2Mzo1Jj9qWV1KWjpAal9GPEVPYjApV1FHZER8ZjdSYmhbU3BDRytHZlRjJmxLKzUsOXFrJnAxb3gqdj8sMEZdVm8zXl5MImAuPyRkPUhKIThJMFBebHwhV2RzOGtuTkolYEkjJWxFeSRNLDVIdnpjcDZkeVJ5Wkdlan0kTk1zMWtdMCkr'@;
put 'JDJdXk58ZHBzaSw3c21eTzBTRFQwejBbRkhnNktgeVY5QUE7dkw7JHEzOllraSp3cG5rRjIlJiRUN3paP1dLIUd7fi9XcjE0SyZvZUxxbz5KJk9jaVtDSV43YkJZZTQ9bmAmVFFIdnJkKVp8N3U9MTp9Ml50SzwvLmU3dVdgPylbbz5iZ3YsTF01aEAkJihHZ11YI147VFhuOTJmantVPkRybm1j'@;
put 'W2YoRDk/ZWk7WSg+M31oandPaVdzVHpAZF5SNVkjTFlQe1MsemBwcjouTSElVTN5LEpaaE9XMVtrQWUyNW5XTmc5LkhBVjtJblVrWGVeOWg5US40bztEYCMuIillXVBQL21sSll4fGg/TzVaYE97PkkwaExUSihmdX1eV1ojeFJIWH56Z35EfXxBMntxPGNVRXlHeTMsZmFgPT5dQXJBbGkhTnlD'@;
put 'ITFJZ3E9TkdleSUld2xac3AvQFpkPzBgR1s9Wis3bHNMMnchSzMjd244QktCfGxqQTxtbkw3SzAlVnNKcVdadTMqKi41dnF0PF58dk4hZko3aSFDUXYxKyZmNUJWME01TShZTlV0Pn4rOWtAZiJdfjVnMXsxWV4yYS8pKCRYej5JRUwyd3ZHOT4oVyxCZWV5NzwuTHFeUXxlayVzKy9ONispI2FI'@;
put 'aEZFRFtjJntafVcsdFIjRVhxP0h9UHlUIlYmTD1IOl4yRyQkY0l4ZiFlT1phY2E4YHRbY35UfEZOYl41YEUmdyo0U242fTtoV1ZSTldSNE1Rc35CXzB6U29hazR+MHRSYHJ6cVhITihNNDYyYDJsYmpfLiM1IzlxLHRMLlprWXs2W3xOX2VFYFolYWl9M04sPHQ0a1lLbDpub3UsTUA8c0hpfkxt'@;
put 'XS4+NUZDWmtOJExTM3ZHbSRCR0F6eFNWWHN8QXciImZ3KnQyVEVDRUloc2FhLis9I3cyWXkrRlIiRStHUEJUdHYyIVR5SHBhNEBjfS4uImlZbiNkMCRAQDxvOVtiW0ovTFdfPExlZGFqalc/YSVRYiM4c1BUcSNHLkAjQ3BfdCxFJS9nUmsobFI4dWZ1TS5pTyZOeW94P2BlKjB7LmhgIWpQZG4l'@;
put 'OVhqcXV2UlElZyhUK0ZYQV0kIXckV3ZEcHd+JWk6PV9MPnFpV252dCtXamlAMHw6UCNHPDsoZDxEY09QSXx5JF5+VTQrQnJmPWJ5PUo3QXdPTWhBQmVkS0FYRUNqYypuajRuUkR6UEA+K1dtST5TOWl+fmNdYG9ZfD5qcFh3aDk9X2U9WVVzO3o8TWV6N11jSUxqVVo3RkIuOUpWTTR0NV5JfjV5'@;
put 'SklCRlojI2lLZEIqVURmXWwkKiJCVToxcH4oLzssR3IsfT9Nc19mO3c+djJZVVlTdEIhKHNNbUw6cUF6Vyk1bE5YQ0BlTFE9Q3VFVDZwOnp5S004azF3ejQ2eDkycyFzeW84aX5qWX5nW3FYN29BKlBabmR8UkhyQmpuNnhsNHVOInx9SmhgKysla21RU345I0RdPzIxIkMqcytLdShSY3R+QTdM'@;
put 'dXtgMGdmYiM3P34laSthQU1pSExAT0hQeWc+Ljt7ekIhJDBtOihbQVg+aWJbOUpbQDZiJGJLaSFvTzcoQm57XnkiPXI8NlRybVEye0E8W0MoNjdbbkdQUEs8W0FLRXV+OiIsMmpsUiZUKiooKEdlZSZaVXpnV3J1L3sqPz16SEpHQ2d1LF9lMXNNcEIzWy9ObTRtV2NQM1MuUTl6cXgqRyU/NEYx'@;
put 'OGR7OUMyc0UuRWBUbG0rXSwpc241YT4yX1FTUDNxO3NuLDgzNG1ZZU9zZDlKYVY+VmspW1p5MjdrJXBxcyM7SChlaHMqbG06clRjKFc3KVZPMWAoM0VJb04zZlFMa35Wa2EufF15OipGMClnPjxeOnFDd29bSjR9Yl8qKG43NkpxdSthRmx6UGs6MDppRFZhOyZSfTp1Kz5PeWhLRF92bilNUUgp'@;
put 'ejZ3SlIrUU9SMERjRFBLPEVrKHcuS21NTSlsamhnIWQxSjVJWDV6eHo3PXlrRCw9R1R8azpZdFU6ak5bOlkhRkM2YTBsNnBWZyVyTVVPSyYmPUhPalNSPTJVeztjcWMhKn1mVS5sUH0rQkpBV1dIZCpHTHUxKXlWP1lbdG94JF5Bekc2XXo+NmtxLEk1Vl17dVYocno0Sk5YOm50biQoIy4uTG5r'@;
put 'azB7STxDeHlRWUR3OENwTj51YFoxLFU6Uy9yVmhVWmU2K0Mrb1N5Y3krcmtYMncxcCl8TzpXYztBM1c/Vj0mRXFJQjViVS8oUUU2YUMqaTkzPEI9KUd1fWZvPmc4WCRKKkpMUjU1byZrPWssRGBsWVtlfk1qdndlSUx6dzBMNl5wNlJ1LD56XmBjW15Ha2g0Lz96TWB6Xys2RFVtTkc4Tyw4S0B7'@;
put 'PzRSQ3N5OlJdIzVudzZGOnZbKm0vI20ld15rXlAsTVU3YH5MPWdEXyYofCNzNnQoKnVlUlo+dWpqPVc5I1h5Kik+RWFwKnF3VWFjcmBVcCNrSipEQHdaajJIRCUhbkpzfCNFQXZvUCxkWk8lLjM+ZD5LIWowO2EjKExAclZMRG1EMF9yUnR+cC46MTxVVW1CNXhYJWdBNmQmOWgpczRFJFlZfStv'@;
put 'MGpxaCx+TTw8OWxKI05SNT5mOk8qViM/eDMoXk05OXo+L0d9Ymk2YyohNlhlOkBWNnR3bGd1c1pLLlt2ZSReekNxI29sWzYiUkFJU3p3Ym8+LGBaVnsyWGpQdXk8VlkqVT41eiUyMnhrNFNSd2wjPyVaLHAhUTckeiwrVlQ/XiRRJHBEckdTeDZBLjddezZMZFp7e356fVZ+OERWb3pOU0JqOVdL'@;
put 'WU9kKyF1SSpBbHJqaTcvT3tpaDM/ITBJWUplc0ReQ3NlaFBEQlhMRk5EUi9faTNfdU1VVEJTfH4wbT14cUl9YTxHZj97NSJbPSkyeT0pVmZnJVE4TyxOUyQqNmFTfXt8UyZUTHl7UjJ3Uk9BWigwZEgjZGVUbXFRejpoaUN8YX5MWDdrbyQ1dDxpS3sscyw+YmI0alc0fX08NDp3RjNGeTl3Nis9'@;
put 'RjRecVpRZSREei9BTGJvL0NSN0hGRTtCN0Y7KkhyfSNAQElkdHsuKUhdXiVPZHhTZzdpVSxqeno4O21sKmQlT35oOEcoZnYifj9yLjRPX3QpLiZjPXpARCNBZ21+bG5kSCQkRSZ9S3N+SGZLJG1VTF0rYnFdIkNqdSMwd0dpISVEZVJdfn1vW1FSRno1MTV2VncwT2g3VChFW1R+aiFBSFVjUVAr'@;
put 'Xy98dlVrOFkpNHJ5dCk/NUcuZWRKYUxfaEp9T1hPZnRPPSI5ay44VEdIbXlVVzdOMXU2UXJ0YXRTdXkmLFVzeT0sO1l6dmd+Q05BVU1YXXJYdV5AOUN8bTUrN0Z3ampiI1NHbHV6KSFoJSEhKS40LDhKLmJEMzxpeCVfSDR7elBjdElYRG5yMjQ9SzJHUzt2MEVLJko1STFjPEBbT2V5WVBCdDNU'@;
put 'fllvOXlAUi8kKG8vPmAyVWdma1J7VG1WZDF3e1JIJE5Ickl8d2whVn4vPUgoMzRJZUslUyVYM2UueXF3VTJ7I2hAJjwiRENhRzs0KiQoLnlbRCxATVhGSk1uQHAyMWJOZj81WC5fRldgOit4QS9JWCg1aE5mTXNKQ1heL0VJJUZLN3xzcnome2ZgdXRlMlJ+KiFgTVBbWGlCQzBSWjJPJCpyeHl0'@;
put 'eUBDdWNIbEJ1USZvLmMuIzxne35WfkdyeGU7bnUpUTtTOV1VMFVEZzxqbl1ganZHOnVqPVgrLDlkO0U1JUJvP2ZoPGFMeVgqKjI/ZCksYVU+PSVfWC5fOjdBUktUe3ZIX18+ZntGUi56S3t5aHVvOX5YMXB+K2NJdFNuLnNuP2ZPQHM4JkNkO2lsQndtRl9tTC5aVEd4eH4mWFtWW3JmQmdORlkx'@;
put 'eFQ8MmVUW0I7az9zfntoWCEre0dVPTRPT311cktNMXR1ejgoY31HMzxLeGJuJCoieER+WFBQZXtvKkFScDU4Pk1JYSRCfkZPQE5EdiM9eCJhamZnQ1IxaHx9QmI0W1c9T3RoYGM1OGdwfVs7aTFufDApbEshZ3U2VjpUNk5fTF1MaERvTWlHSV47ZENheUxnIW5TXTNKWj08NTlkRFleTkIsI0pp'@;
put 'ZnZBJkBwfWBFPUNZKDFxcjF9SjZZVEovLmwvLGJidGkxQnE+VXVobWhIM1siXTguLk5nVCE0YHthbWVpPHd3P0twe3Z3QyhaOUVQdXthV0heUWI8YypkfWg1azd2ZFZ8ZW4+M2BrQnR5eUJZMF01XyJDJno0eEVmJTMyPV86LHQwYWFgYV9aaywkQ3VAUmBDR1p7Sks0OHFsUS9VQSFwJSNXbiRj'@;
put 'WVEoOGRAPndKMTRIK3orLkAkWFQ/QjhTQEdEVXFTZiZ6bSlqWnNbIzo7aGRFcnhqJjpyWVk7KVhiW01ScSJyXX0+d0c5Y0UiNk1bRlY4NkthJD8pW3EsQ21mLktnQj9gTD9dYltiRkAhM15ZdmpHRHE+dEx8N1l3NGNTa11gXjl1JkopR3gjZk59bnVuLFUlQnlXQl52RiJvWztnT0RCXlQ1Z2lD'@;
put 'aWo1NW5OWUU+JSVfPFRGL203QzR7RFtLYXU+Zn03X24qKShtcj1AJlBjUXkocz5UJHcsVGBnWk5KYD4+elRIUVI5ajAhVkAyc196KlpGUyJFSTxxejRZOypFMlpLOzw6cjNVME9qJkAkQE1HSys1MTwvWClDS3hoJktPY2FhNGwpPVJWbTh8VTtgMWlUVH1wbzdlXUw4UXAiZGFkUV0scXgpaHdT'@;
put 'LE94TktWS35gVlFKeXBbU1gxJiJMbXB6VHg7QSJ5TUVaPHV4NjMzLkkqU3RxSV5NV2J0Pkd6MCtIa1I6eiFnPyZ5V00uckwlRGF3bnw3O0t2eWExKUMiTzRdVyhiVFRLb2tBUUwhaHpyPCY6UVRAfGgvejh4SmFickVFS1omfVNuMjd5THZlSjM0X116VGQ8W3VTZSplTStTVW9NPSI2JThzVUxW'@;
put 'VThFIVJYZ2BEUkohYD1vcUhZOyYpO3AjSXxiNSozTm84TEllNm43IW5rYSVTV0dwI0x6IXQrTEVxWyZTaSpOWzc0LkNzaiRRWEdbNFJZP3xUcn4/JGQwYzB8d1AsS3E3LklremZYTzdzMlNpVmA0Y3ZUL0Y/MFF9fDVvZG1QNTx7XlZPWjgkYklFVzpZOiszeXlGRi4zOzU+W0I1ISpkVmJRKHUk'@;
put 'UDB8a1BVUWo/c0pPazF9UFtoM3NMfFF0XXNKNUs4Y0hgeDhSQDsvTXlNbFZOXlRRQnBrYC9dcFRWNFNnJn47a1IxVWNHfn04NEtofUBjI0pSOn17fClidzQrYDk4c25pYUE2Z2Y2R2lVe0xxd0w3MERxYixEd3o+e3p6WEVla0F2PU5nOD5kIiU6b3skd3lMIXtVUExUWlJjeWUzSmpVLER6YFg1'@;
put 'Zy8oWmd+Z2dnP1RHUVVndztIUmNJL1ZXfnJucW9yTVFlREVIZT9pMzUrVFk7MEVWN05kKmFPKyhgd2lvbW0yRVl1aHlETWVvTXY4bDk8dSpKaj9dZ15qVF9yVE9IK0pfWTxhVlZkJmpxdGRfXSlVXXEyeFtWRi5FdHIpLEcyODAqRzw/NzlPJkRiRX5iYThHKGw8UXteR0k0elo8ZnNQfXt8eDpU'@;
put 'QWd8RH0vaDN+MnFVb1tHOUBGXy5zUERYcDl1TiZZfXAoalJRRXdpcFMsfiJNdi9heTJjRlE6VixaRFFpVSNWMCUpe2BURE9OISojUTlWPjBBNklOfFI9OTxQQzxPKiI9d19IdXwuNEQkTHV7YFkqRDolJWspXjVtUyNjX20xYSJ1b1l4WzUiMkUiZ3ZIPF9lYFtnUjd7RFNeQUVoWVljRk9VTkh2'@;
put 'XztyTCFJbVleb25BQ3V3SUJ1Uit1aCh1T3FYXjplS119fCh3Wnh6WTYsdndCR0ZnaVhuamwkSEFfVHU0ZGJqIVV8IkUhQzc3N05UYzYsP3Y4SWFNaDh9OTV1WkBgYjl5MEUkW2s8JkVAZmtWe2E1VjVdfUZYXVN4Q3d1bEgjfWNkbCpxJCtUeDM3bihdfW8pZ11OajlOTXk9O2Mue0xIMVE7O0Rr'@;
put 'QiQka2lqcl0qIW0ycURIfjthISg8WDhCPV1zandZdXxxO2JzZFZyKVswLmRNZnIiUjBzfWhFbUlVSk4zRV5DUkEvX2FMaEsrYD04LEFARjMja317O2F0WWs8NzJjc1omRiFQTzA/YysyNTlqTjx8LkRRfTxYVFpgd0JvNnUkM3x5OUxpcUoydj05Q2Bue2lGSH07JHdbJnw/TWNFbDtST2JfTCUz'@;
put 'YFRfQHomXmVpakBgdlEyKHQuQ2heJEgjQX1CPnFUZnVNP3ksOm1rMn5tNC5GPS8iVk0oSUdeeUt4X0dVWzZQZ2dWY0xnPHQ7byNyRztXe3hYLDpwMFF8eiJdbnMmYiRwYHdlJGEwUVNFKCkyLl42TjguKW98bmRdJUJyVElaZlpTWSpjZFdHfXk+dy85UGY0SnB3OTBkMWpgWkFUImNpYi98TShE'@;
put 'Ul5iKnEoNEtsKSM/di4qTVlJXWFZUC94Y3AvMkZVfXxSVkpzfEt7JjFIWys+S29qUX53SV1hdX5dO3Y8UFk2UCZxaitMKSpkLDcqMSpPPzVdZHcueVsqVmlje1s8LlZEe0haWE5AXyFbflFeO0YkfHhINVl6cWhCY28wQmhibX1VVys9PFVsPSE4NGxRdmoscSNvV2hmWzA7TXBZYE4qZkNxcWxD'@;
put 'RzdbIjEoKVZwKjtzTl98T09jNCs8bVJaYXgvbyUoR2FzeDl0MSZ1OW1LSXFwYF85K0deM0ZbLE9PTTplcFo3KyhhPSZWfXZIW0F9SD89TGtpMitELERAZStVM2pfXzImeXh2Kzxxe2FQZiZmN3AjdFtId2dTbl4md1UyPFQyJnI0a0prVEN0Y0ksUyxUWTYrSj97fVs2aixiSFQwVSZsai8lSFBi'@;
put 'Un5CSk58O1dLZTAvcSk0UD9oXUBJQzVMPHNMMkJ3fVZUOm17KmR9X0w9WVAwaEJebnx9K1ssJT5aLj4mKyxGV2gpUX5VWWA4citdJG5eIyNAQmR0SjA/QlZUKTxWMDFzOG44aDoxPXJ1NmdoNHJ9alA9am92WlkiUT1PZyoodldxfmE/NGM6K1g+RUU5YXQxNHs+ZkhnI2FaJWYjPFd4YWN3SXVW'@;
put 'Z2dYbUJfKF9EOnJyT0dOLmRAW2NgaVkjZ3o4VmA6blBjPW5uI141WUg9b2d0N0QydT1qQHtgai5fQD83cGlRTTtMWyFGXWAuQT1zX1NGMEY9Qy9MSkY+fjpIe2poSzxKMmRffGxmVjwlTnNDPm4jUztUTXMmdEQyfG5KeGJNMGlEIntBczt0ajJDL19WWVsoIStfUWE+b1FzIXVXRiZzUEVXRmBI'@;
put 'Yn1eQk9ASkE+c3gkNENTb3xvRlJOcDM6YlJWPyI8Q3F2Kzl6dmx7TFtOI2h3bFc7b3IvTUh7bCYmP3VhNGFPXW5vLz1NaGw8QEp4Zm9oTnJHb241dmI7WW9FNUFZQ1dUYXEpezxMWGM4PWw8Tjw0Nyk+WVN3OiRFVloqJDkoR3o/cXU6Q0YzYiZYTnwsPytOViJ2L3JgamV4SjVpKyxXSyhUfigp'@;
put 'MFhQOUFgMy9HZmk8SXV4W3oqfGRKV3QpInQreGN9cWAkdyNjODg9LzU5XUFtMEdVSGh1TElNMGBHd31YVzcmd0tiK01bSHVqXSplPE9uTXtnZ3x2cWdfbU5YdkZWJk9PZzpjeUZFJVUqZDpkK3Ffak4hK016I01GZDQvbDEmOXJ4bWcrWUpfPG4jOEloW28vKlVoUzZvKF86U2RwWE91PEQ8YD19'@;
put 'T2N5ZnhVYE1GKS9wRFVyOTJwMjpwVHJ3eCZheyQ8RWBHUC9gVztia2ptbStmI3VCY2huYHV6I3B7W3ZiOm43bEN6KnN8alRaaFVTUl54SDxZeTB1RjZDcjJ6Sl0qbXQ0R089T0psK1kqLFBMXUIlcnVzQlFPYFJxclRQUjBgTyE2Sm9eI3Z6WzleOD9Hfm05N0whX082XztLUjt8QW0qVWVsNEgw'@;
put 'aDZiQVpAQVFUV3J4NURYeihDejR3KnI/PHpbUkIscW8uUTRsIzNKSGgsaEAmOndVNyI/aE5OTiN3ISFZUUghSHMlPFFZbWZ0YC9QSzpJbV57emAxWVQzJnAxOl57dERhcUNFNDFdWUZXTn0ySEgkfHI4VXAsVVtncUJkKUUwZ2g2QFBuQX5EakdhL1UuZEc1VV1INGxMUWl3dEVgYjVDKmx+dH1K'@;
put 'KnYrRixKI1V6TnpeZiVLW2ZmOThaezo8VERCNlRILHpaaClaRXlkJXBUTX1jQG0qJkV4SDYsY3FnYDc/Tk4uSG9TKTtqXTRWKEN9Tl8+I2NdVStuSTh3dTM0M2cyMjIuOl5MeHpuWHtAbEZ2Mk9MKnh+REZdPTtGYX5QKFVxO05sSnw+TSpOJkxsJjd6P1dkV20uJTNxYW0oeUEwXndPazhIJHVG'@;
put 'PTAzVzUsKXo3KG4kNENIWXYjNUZNLFdtaEVuX2J5bUN2KGk4Y35raUl3TUVdYCo9IVhHSnFAVkBdI25xPThIOlZUYWJJWWJiT0kyRzYsZXpYOjolSEVabVE/N2JnZkBKfCtKVjV9X0AjdzdURUhIa3VdJGwsejovRWA3an46USleRVFzISFQIUtsYTxfV30pKFBgeioscX0sbEU4QXUqKWheVzxW'@;
put 'VSFFVDU2SH5qVyZFVCguNjpfT24hL2tNbFNzL2picj1PS0o+dj8/ZU0hZGsmTntJPCo7dXYibjFod0Vtd1MxI1QkSGguSmpydCJaQmtZa3R8QnUuaEMoLkRHTkIzUyMkPzJ9LjQuTnFGQy5SWUN2O1liNTNjMTRHZnpzNXsqUjd3Y3R+QkRubDAzJUBtLEBvaCozS0Uje0s/d29ETkBSdzUiVXs9'@;
put 'YTpkNF5deD89VztaZT5zWFlNJkxtYWtGMDNNeDtuKk9JIWQ0czk3bm9Neix3RUVCfDg7bTFNZ1clK1l9UkZiay5EQCgiU2RmaU1vKiVEWFkoNXcyQjFgUX51TWM8NlB2eEolbHZoRVR+PG4kRmpdKC5POTc6dTRNLGEzQyolPk49bEs5Lm9TJmJPSjVydkMqbWUvJEIlTDA1QUNqOkx4YG03LGVk'@;
put 'V2ZPN3AkMUVMNmc3VXBoUkdKTTg2Y3Q3Q1NgKX5uQUBuUWpfeX1DPDYjIUNVSVRVKSF1SEE1I0dYcyp4PEdNIyk3ZD1ua11DOTdxRWYieHg2OyFpU0RET2A5MXBeR1dkc1U4XltGdj51SD5xW2l4ZDYuJjN2NEkrYHE0IlopJGhQTDVhbDxrTCxQPT96ImI1aWN3dHNQISN2Y3YhYl1aazoyLEpe'@;
put 'TVFpKkB3VjZNPD1CW0hVUTplMTBeP2AkfVkrSUdnOEVSQ0ImejlDczduTVJIRTptOnFtMGQjY1E1PjVZci4wfV99I2xKUE9PJSZsSFVrYVBOMGkwYHY8PjY0PUZraSo5NztpUDl6QXJBJDpQOndBUzYlJE9oY1kqQWkhYTA1e0c1NFJ1Qiw9TWFMc29GRiM/RVlSTCZDWF4mYz8vSUNtdTVLLC9N'@;
put 'dTZRLCk3bD92VlZ+NDM1VkgqJCZVYmtPaVhkcHA3K1I3QyY/R04uSF1kWjJBLi5yNipKbDNWblJtdEQqbTZ0WF1oOEBOYUV2SzxHLCZFV1U8bXVQdmdvS2Z7MFpzcV9DUWNdZm1GaExdO1JMKiY6NHVVKSo+Om9ESiVZfVc/ZWB8NVpRcGhFWmZhYX1qQC9RLnhNa1NtV2dZbVNRTyt7ZU58W1Q3'@;
put 'NyMsbDw2Vj56dkdaIV42azloUFt+OXx+OjpEOmZnWEhUfm18Pnc3a2JxcWkuK0Z2bjJESjosMzF3fGAwPVp0dThvZk9VJDdGbltEVD1kcHVQPzMqQEIsfVJxNUkiYi9MM34heTYhSm5AQHFrN3U9Qk1YVSVqdz9YKikpRTNUVCU5SjtXVER2Pm0yOFFSRHNaWTg4YHJCJEYlZWtvSSkmfWB1Ins/'@;
put 'V2ZAbi55JXd9dllHS14iaS5zOTImSHZeJEZNIlJAXyFFWVVpZW17RUI9eGJ3VSlmdHdwQmRyJF52LCM+YkRmWlFjYVdtTi44Q2xCcUIlRDR7MS5ie3E3LmIlJlh1K1Ymfkttd3U1eyRlUSxCISJ3ZUt9aHcrdmFyemkoJGlhW11CcHRWfVclYHQ8bms4Xilfe3JMflBgPX5gSEpIZVF4QzQpRUhQ'@;
put 'QEp0XXxjcmgmKTw2OEAySlksUGgvUikhM1lUWHhYKFIuYkUuckZyQG5VOVtJPW1IQXE9Km4+bH1VT2h9PS9VQWlheVZWM0FbYERybEtgPjRzZmNLYiY5Lz18JiltWCRQelVWfFImUz9dbmBaI3VJNTVNOE9Qb3lddT5bIVsrVmdYPVdPa3hIbk1VUWt8OitCb3hPVFBIK0RiT0BnNX1Sb0d7XXFU'@;
put 'ckhmblRbPDJrWWZGfVBAbSxvKHtCQTJ6azpVMD9fe1QsU1cqJltkMn0oa0FaRmJaeWhhZmtVWHAlaDlxcWhMe0Noa2ZLPi9yO1JyViZXRE91NChESypeP0c4TXxVPV1uP1drTWlwNyNHN1A3MWBIKiVdQDksajpMPF9rZH1vXWpMZ3h8d3k1OWwibCUqMyIrQFB4fVBqNkxzWSl2YHYwayssfilI'@;
put 'ZWN2cUl6PV85KEcmZGNJZzZqIyZ4XjlSNnswIkFNJURtUEZzeUU+PnVYLkJ4Rn1HYy5jZzZoW2h0OXlkbHdlTGEuc2t5Yk14SDFmVnp3Qkx8blcxSEN7I2RTKSh2JjF9ZnR7PjRvaitdaSVsXWBgSTZBM0d2WGkqZC4rZyhuJFYlMWJSdzNNbjxKNzBdZn1mIyVFYHpZayk0W3xrT1FOcS8oM1hX'@;
put 'Z3pGSzdnTClpfDVmWDlrczUlKEokNjBDKVl3TXRkYj1XZ0pbZk55Um9wO15zPixWKXBrSVt3aHN8eT8rXU04WEdyVi8oWUJvd3RjNG0iRzpmeHlxTn1LXjMwPXhycCVTTjNYSm9mLio1NnI7PGc4R3tQNStgNk93dS9FVGxua08zMmd1QEB4czUvQUZFX1R7WnUsYF1YWWEzRVo+Xk1VJGVZSCh6'@;
put 'YCk6MHtgeCskcC4iTiFAIU4lRUF0WUVCVUEhZVdzO2l2cFJ+NnxEP2cmbWN7LyR6Jk5ddl8uYD8uJUIsbUhxR0EzKlZ5W218dm8lPy4kfUdzSDVxcW1vK1o9NHcjYi9VMXAkTGxJZVRlKSxYclhtfns5QUJnMXNdKU0+L0pCVS9gbTxXbT12ZzlRK3Uvd1ZOOUpYdDAhe0NQOXMvNXc1PSRfeTBt'@;
put 'RjQzeEwweWZhVXMre09MRyQzRzp8Y0FbeHsmSTxSTFpuXXtRNT5AQyRGJmw1dyFBPG5wMXguRjJrcUs5cUxWYz53bnw4SSNBdFRAR01pZlt0Zy5CTDNeWmokZTBhMXVraTw2OVNdXX1mdTkqPjJ3X2tiKXZkMUVvci56NEJiZyUlUGBBWX4wVSYlOyNlNyR7YEpsN3VbVTlmIXp0Pj5COTdBfjZG'@;
put 'KSNOcEB+Y1VoVFssNnVWc252Zj5mfVVBR3o9OWdZWF41e0ssTixVV0tCMF9DbigvMSRpVUE4K0o6KSxwMXIpLiV7PWh2alt0KzQuTG5VNUZDfmZZbkNyRTsoOXhsTzh3OjV5cUtYRDMkcXIsYHcmMWtFemdUfCsjP1k2OjpfaGUqfSkseGt3IVdCMz94cjB8TlAvV0JvbVpFZktWfjBjU3hxWiEw'@;
put 'bTxuPD5LejE1ckt5OSh0LllwOlRLLG9ldj9aLm4mSW1fWHw9KU5HaVUwYHByUytXT0h0IWRtcCVCSmBqMixfWXtFRyYwNlc+JS4uZzslOFdPRD5eenJjYF1BJENWIzJFYHd5KFJuO3IsSGNTdygiJnpwNWUpbFhOeTpZcCFlflV1ZngqO2ZIXm8qWWkyW3pPK2s2akBIU0h1dHhCZXJdXltoUGVf'@;
put 'I3tbYCtoJlhHa0g4TCpJZWo/PndsKUJbPG1vVVk1OylZV2NZR15BWEVIL1pgXjRLWVNTPz4qNjBXLCRxd303QGJRUUQreWVkZkdNR1dLbWN4eHFjQnhLPiNWRS5KNHpEeGltfXp1JlZDcksoQUcjUWovSVgmcUFJVSxCL1I+UmcrS24ocHZ8Iythdi9ZO0NQRE4lTmFRfnVlUFlfajBHb111Vix5'@;
put 'YCpwIjJ4aHwvT0x0I0s2QjtjO3ZpbGI0YEZeQFlAezNzZSs4aFtQK3dbXXlYOjJqJSQuaVZJKUgjNyxNSVExZENPQ0NIO3dsdVchezNkKGc6NSxMdVkyNjhqX2F3TGRONkx6ZXxmazBDT0paYTxqJnwvYkd9cjsmYWUrfHEmIV15TCxbZi5ZWlQ8aE5aKkw1ZVY/RSVfQ1JqTmVbQDRVeERMUHZW'@;
put 'Jj1aNF5OZmJremNjcUJqIWskK3hqenJtLiMzIl0pWWQ6TV5CW0xwTV4vKm9zViguUjN4Vl9YbCltYHxzJXtiKSJNSG1CI2tpajZZfiRTVn07QDc9bj9SaDthJWpHNll9Ult8Z1ljW1tqaipGd3hLJXw3Sk9CWG5iNTZwR2NbR3REdyE6anhFXkVJWzFYS2cjbXA9I3prMyEwQCFfZ1lqN1Z7V0NC'@;
put 'TCJiRkpJdlg+NlN1Vjt4XTkqK1B6REd+KWtoaVQoWEQ0Kld0TExjZXpmXzM3NSRARzs/X0paO35GPHwjY1QvQ3YzTHhaNWwwMCZFaSoyNlBabCQ8cF56bz09NmdEXyhFbTw3K2s1KitBbCg8WnFVRjJvTlBJN0NDMyw/b1V5bTt4Kn0oeCI5dCohUndGOWM8eFs0NCU0az8mPiVmRUJkaU4yP0Ru'@;
put 'KDM4WWZyPTtZfGdPbihtUWt3KmYyZz0vPiouOylTIT5uV1omLCtHKjE4JkN3PH4wYDBDR0hEM3UifkBISjQzPStQWFg9JlVUfjEpUmt6TGN5IntFOFFFR1U+QFF9TCVvakBnQURxJnR8clA6LD1nLG09Y31FOCFAKnM4ODBbQWFdT1tTd3QvNSJiSGB0Xj5KVyEwTFZsYkteczZ5OClpYlpNZElD'@;
put 'Jk5POlNgVjIoTmRhSDpEPCsiPig/SktLZDI2JldkIilrbU9DXnY1TCIlKi9AWlFxUGNOSSV7XVcqcVVLQDJFOFhwQlBeel18SnBjbVE9PltLXil5QXA+VyNkXVZ2XiEuNnNfb3w4ZUNmRHhbSF1VK0h5N3J9MGM6IUt9JXBHUFN1PDw2Kjg5eWB+NzhxWih3YjgrVFk9Vl5DWU86dH5HQjx3Tmcz'@;
put 'YlpmfHgwZTRyL2NVeVEvWS4qXVE7N3d9T2N9X2FtPl9MXjV5OUUmbiNPIm5IcHRILEZlKl1tOG57Q0Z+QFJ8WzZRaz5rKHM8YXxEWTVsM3R9K355Pn1CZkJXVitvSEkmJklxYE9XaG9bLjgwVEk+RFVVOUpwMjJyVnQrNnNfWyYmJTt2JGxKV31nWXEsREs0cT1uMVlMdGwoIXQ7alRDfUpoW3Ir'@;
put 'dkFfajNeV0J0MGw2Y3AxfEJoOFteOHZ8MTBHVDt7fHcueHY2PTBvKWRrdz0uY3t2Y2I6MmRLWDF4YVNAaXJ4eCVAdUs3cSZPS0JmX0kwMlpOemhRZ04iMHhsS1RfQUckez57aX5jWGp9VFNYe195QVgxOmIqel5qIyNhYXRCRVFYTDI0WyhpOXZZWm9ZWFJtZjVCRkp0Rik3UG19ZjlLX2F4OSNz'@;
put 'R2ExZC9DTG9uWD5ENHgrYC9QIztdSSRidVt+WT9QYSZ3SVNuLkwxUEUyUWZGXio0LjNlPG1CNV14O0J6NzViYThzRGpOTiE0K3AxUjRUY2VPdSVBVmZ8NVdtUDs5Jml7OSRsMWp7OGN5KFsxZz8iXk8/P0lISHlKQ3E/Y1g7Y1J3WXckWE0yaFhDNWhTcX45PHImJmxbMiorX28zMl4+QSpbJEQ/'@;
put 'MHZuRVVRPnsvNFRxMSE7TFF5MXVwOVlQJkhNOWJPdjpQJSsoTmtaRmFZNClUJiF7VkRUUTlaSG1uN1laYTxPajY/NlFHd0gqKnp4JjxBemNVJGlNfDovKndqRUEqczlpN31FPHlRckRGZmMuazsoZXU3djJ6fjcwbFY3Sm9VV1RiYmJhdjRXPj19XkpgYWU2KlBoRUtqbSE2ZVVQdjR+T3o9fF5n'@;
put 'Pj5UL2hrckk4PFZzbi50UGx3NFBAKyRiaXY4NjpqYyVCJFRIekVFZzZLPntBUTlIYm4oenk0Xz5fODBaQDxvfDg3cTgmPnV8cjhsU1Y8cUVAMGJNQjc/MnlrJlc8YSVBajg/NT5uX18id1ZOflQxT2xFbCooZzRDb1ZdSzM3ZVdXKm96JFlDdDRUP3EqWDZ2RmZoI1dCfUNLJCZaQiJ4Ok5GKmoh'@;
put 'WndnW3F6ODVOWFhKY3ZVWyNNOTt5Z1hdQ2Q8am81QzJ1VDlufC51W09panlOfmIiRyZYMU1Zd2oqaURxdj1mOzd5UXhZIk9jR0ZUbyNkRkE+V3t8QiJULHVCc0dLOTU7ZiM0Wz0mRm5ScCpkUnJbQSg4QFhMQWZPQChbS1R+ZlBtJnUrMG03MytgaislYFlbaDVlZHZ9M3o1ZGVYYSZiWWNIK3U7'@;
put 'aFdPdz80JmUzV2BRITwwRiViR0d3IVdgJVJFVF9EWHZnQ1dVRSZFMGwpMCswK2FbdXtXZU9CZXI3Ql1zYzlHYCRXcmdrb00qdGhYYk9NP31MTz99ODtgP3lLYCpPWFM7NzZdQCxDY0pMIWcwUio3NmI6eW1YRiolTz1eWkQpZipHLEJAbHB3cWRkbj9gakVtbzklZTovWSE8bjduKCVlbExRaVk1'@;
put 'Wmx8YHpEIlsvYzhCd2Y/Zm81IzVKZ0ZKKzQjJiMiPURQb1R3XWw2UGFMNFRuYmJMcURZRWk6JUxlKiFfVko1Km56UzY2XSk7bXU8bj5OKUldIUcoUz0iWmtIPlNkKU9ZK3kiSmJxZkUqLkFgJkNPQ2UybnpaIlZdc19JN0RLanJxb09WMVEsLyNxMEksX2AoW0RpXmA6MF1OL2pzdz53YngjUnxS'@;
put 'RDxbTXVvN3ZOKkZGei9EYntLYywyRkNbO2xjZFZpenltNXVvSTQwLk1veyxSWTF6SDIkb08wN352LDc1O0ZlO2t9STdsSiFqXWxzOCJ5QFkpclVPUlY2aik2WVF1ekt3KXhoQylNfW5ZdFNgfmI0TjIxX1NpZEBNfEl8NVNWTzwvbEErZnklcUsyK0clUyJpelE0PSVpV3UvbS8+N1E/WSpjMUhi'@;
put 'SyZzIWhEQjArQ1p8UzomelgpejpfVyVPdFUlcEpDWiJkImshczxJLno6X3B0fU09Xz5jTipfWiNDVzA2WTZ1WGVFLHJ6ITdDMiVHRFNEU29OfCxTKiE9TTh7U1MqOCxafHFOVGhGfkhhL24xJWt6ZWAxLFlvVypHPE8rNGhdVH5uLE1pKk8xcFMsR3NKIWJsKldWc3sxKCFuY0EiPyF9MFcjXygo'@;
put 'IlRRIjlFLlAhbkslLi5ofjEoVTMsOiU4TFZtfGRVQl1lRlE4bT4oRFlhK3dwcUAkfiE+WHxKPXJ0Y15rO3VeIXFnN0tYRCpTd2RAKkEmQmk7ISshdSV0bkpmN0soXndnW2I/ZXRMbzA+Q0VQIkclT34jcDdvKnlnNG9ScE8xa2tIOSRRaSxCVCo1KTh2aXpmWEszXSFPWnpyJVo1U3JvK3BBVllo'@;
put 'L0JRQypSXX5ZN2xlTWAhdTQ/fWEhR05bMGU9cU5tUk5dWShxLz1LIlV2eC9BMEkqXkZmdk9lWlg7eEdaenBLczheYGpgZWx+O0IxXU9dVHppI3N9T11UMD9nVyJOPFsyNWVAITN2NXVAYFhdVF9jJH5+Z3hVNGpBKzFRa2Qvbnw/KSt+RHosUVAiL0s+ZnlJTlQqIXhrMT58PG8rRylaW2Y/ajNf'@;
put 'SCFfa3NpJj0mTjlCUldHK017Xj9IVUo3eGlGd31HNEpmLix3b2NaQHNqVlJQZD8oUXtzbmJPblViWXgwZ1ZdJFNqVDsoOXZaQXN3QHhCXkl3YypmOURlZC5XUilHfUhNRFNGVUd0WypVbUcpV3p6T1JgI1pEUV9uOyZIbTtOYWEqPHpkZ2tiLGU8LFp4UCUwX00xQ35fKDJ4elRIJHRzcV5fQCFd'@;
put 'e15RM1E3RHYyUVpgSSheaixXIU43K1poSmEhR3pnbDRxcyRGciw6dXZEbT14ZWgkZGIkVyxUbmF1QjheOG43UDx0VDlOQ2o9W1Mod0w+aCwxe3Y0dFIpdF5URl5RdW8wUEMhXlU9M1JAVCw2RzAxSnVwSUNqIiRJQnF3M2Y4Q098WzZ7bXNKMkQ8O1BUVnJgdEs2VksrMXReTylRbDgsbG9jPVE9'@;
put 'ZW9aXj5fSWZHfWBgZ2xEWiN3TEdlWT8wZG59PEgyQDZkJHRUSXNWXlRwbi87QjY8fF1yIWQ9byxJbSV4c3FeXWxdWGNLWHRsfCREdlZuWXMucF1qWG1tQ303Tjp7MCwzOFRfIlFbQyF5LCYpdFQ1ZGhFbV09aHJmfWJOMkZyPWt4JmReV2dtWHo5YFp1UHh2Ij0janpYXypDPlA4fWcjMEB0PSQ3'@;
put 'aUV8JilCO2EuPyFWaFVXRilTTDpYYiVjfmZ5ITsiOz19UytVPDBkTSltRHJsTl09VV8+VCx2VnJyOkV8UUxUYWlOUjBJYUVPdjEpPiJ+VSwoUzdpN1A3fE1ZWFNSUXpyPDJtUlJ2WXZmJVAianp3c1ZHZXtSfElIXnJ5dmUsUD8wbywsal0hbmYlUD8wI2klblRuWH4rPn01d1VTI3pqOkBVbTNQ'@;
put 'TyFeLjxPRC5eVTQ8TDF3NSJtPDBufUFsZ3V6dUU4OTlGbSx3ZSpmaFFLMEordzpqNUM0QTJsdl1NKXNSSjhSNWZpT207RUFLYXxaWHcmYnBbOU5ILCRPd35mcmQxOHIsNFYhc1ZCPlgyMm5GRXJxLzsmYDhnKCZhbH1SPnJ7Ijs3UzhYZFk1Lms6VEBUXTJzOVMlWDQlW20+TFdsInF7WEtbP2I1'@;
put 'UVNedFFYQzBDdjAlMDRUbixWXnk4bG01Uz49cl0kaTJ6T05kYTYwWFAvK0l9JCFYUG43UDxHZUBLMm9zLHFoeE1vcDQ8aGszdzNvJTtPKEomKlUvfiJnZ2U2cF5FJWNlRTtyQl54UjBJLktSLEFLdzBDOG8+S3s/PXY8M2oqNkcjeyUiL1QjOmw/NEtfUUNEPE9PcGMwKj9iMHB8V1dJUVVbZWBO'@;
put 'O05vOjZeJW03OHhJb1VaVCovP0pPS3wodCkwM0RxbTtrPjV4WT1hXV4qRE9XVkA8S2pXdVB5W0h2KWhpODpSTGhbX31nR2dJU0NUezQxP3d+ZypVIj8wST9TPll6VS9KZzY/ITFWIUM7KGwwVl5TVC9KKTt5OG1FfFk+fCY8V352SClKdzlCM01GK3dbS3VUdGIyWkp1WFghQiUpPW57UXtMWn1g'@;
put 'YWYuPEc+ZW1fJihId1M6WSM4K1F3QzomTy94TDZpNjhYNzYlZX5XVCErNV8zSzcsNX5ZYyEkLktKcW59NSYqVFRdVEtXajpNcjBwOD8sNGZgWGs9O0whYVZAMFQpWU85KXVlWD4wbVdiIl1jYixoY3JyNWAhblRNdmMjO0V9Kjs7PCpsTEUhfTJvVEBvKiVLOHtRTEBqcUFEMUZUJlFfNDo0RS5L'@;
put 'RFBzJGBFKkQod3ZdS11HZWspU0o0em9dKiZqYSR4Klpqc0E7dV95OHAjaU1TNT84Wm5JKF5qcSwwbSpJdkUwJipLejI0NVRUc1JTMURCV2p2TCwvKVVDMXRkY3pscyo1P1RdTWNsTHkvYlJvOU1EQ0gjLiV9cSk9di9vNVpnLHw7YXJaSDYkYE88dkNxdUlUZUpPM15oI117L3hNVzYpQDxlUkw/'@;
put 'SyNAKnNEKClLXTdpI2tsYUghIVhAPkZUeUZGITI1ZTwxMDYvSi5ZSTYlaX1ybUVlbGs8ZWgjT2szbG1afWNlZTVDZSVwNHR8bShkK1N3R11GY3lSdj4uYHJzTCphIVc3VnJ3LE9MbTwkbVVwUHpKZUpbdG1BI2ApZH50SD9bfCNLLio9bzdrR0p9WmtURyt7djFtTmVbJklpcWo2TW9KTTBHZl4r'@;
put 'QGNzRTZyS3l+QXw/PWtfdzAhaWwpd28+QX0mbSgvajpZS0FGaDAxOC5yPTU8TVtPZXAiNGBOYFAsaSkxPiVIdTcsXXE2IVRpPU8vekZYOXhCa0JMQj1oQnRxNzJRJGM5fDl4Q1E6O1VNTitQKnVzcWlSKGBvXmRjSiZicmQxQntSKzl3WzFWalcsZWlmeXlSU20xeUNfLyVPQ0F1Q1UvKDslZEk1'@;
put 'TndSdHdjXnQ/c0UuRVt1ZTUuZylfYHo/YFMrNGB7OUV8RHJrSXJibnQ+TG9EPDNhITNMQStyPE8wXjZhMVtXUWFHXXFSfm1zcV4uWSUuKFdvfiRRMnlsWkY3PVtoPEoxdEEja3lGdDZwWEohQzJsQWw1KmtbSGdveD53dkc9I1kkJkx3eD1pPjd7eWIsY21DRjBQUWxvfjtMa0w3RFMlIi87dm5K'@;
put 'eCE5dmRrV3YkP1FeSmVFSUg9IzxQVjV4bG8ydDElPCE/SVVmIXckNkhOP3d3T2hNSEAiZDs9RShIbDYoLFYkWXZWSkM5Pzk2Plhqc1l0bEB6Y0wiTiRyNkJyRnRPRl8veCRMeXtKcDx4ZmpLckBNPG1xdHNIQlprfUk2S11ad3BmSnBXaHN+WmxrT1FJYC44ej1WYnJGK0tiflk1XXFhSE5yWzcj'@;
put 'fSI2ZXV4RSJAWEhFW2hNJSJVUyhxSVdJaUguNm1Xck1zYX15JnhoOVdPezp7LlV+XWomWkpaK0Nea0YlQ2cvQ088Ynd5OFJSek44PC4uKy4lQkMxZjw4UEt7eFdII2BzOUdWL3RoR3RRcFRIViE8ez0+dT8xJkVyIV1iI0Fsa0hgYV1AYig7PmYjQWxrbmBhXW1oLFZqSz8pckVzTj1xJVZOTzgu'@;
put 'PVouOi5PTzwyQHpNS188bWI7NzNrPjp5KkZJeHd3QnImMEBPK2hSVyYqbExeIWxrNi99PiYoJC4hYmN4e0ZoUDljfFI/UzhNTjxoZitoYEBiIXZWUnY1RHpabmpoYjFqPGNJK15VN2Y3QzZdb2pMbHFeVDswNUdRYVRvamAjSGtRZD0zb3Y1MHs7WmJYQF12RXJFMXtsSUdyUHYuL1JgMU04VGJV'@;
put 'ezl4Sns9fHhJT0Nva09HJWYqRC80Py5lKWMlSUs1K2Mvdm0xZCwvUDdxIUxrfVRVPF9iMHVgTmFYRkhBOj9odlFeX2F5PTpefm99ITZ7Z2ByQDEhKGZmbH1fVkUvY0IpKzQyc35jeVIrVTUqNy4qJl49cjxsPGxmOExCMTxMeU5saz88MT9QPzBXZHdHK2RjSD09UWxDTVBPaU43elJKTTZkYDR8'@;
put 'L3JETlcxaHxAbyxYeEBpNXJwVDVnOElmNml5ZCV3PU48VCs0SHJXMmVeQGlUPEM1JSspU2h0JGp2PXxPek1MWnNpTFo6Mjszckw3LjVTY1tsKSxmMl9ILk48b09De1lVQl1eYWZIayhjS1hwND98I0EvajgiNHwyJm59N3tjcFM2YHp3IW9HKk1xJDo3SWsoVzNIY24vUU9XYl99YzhbRHJ6X144'@;
put 'fXYxUTg8TndqenM5b2spenAvOUJyWCp3RG48Il5XIjhib1Erd0FOXmA6W3RMKXssQ3hWRDltVmMuLC5HcklnWHNxaSghUVovfFEibTI5OWtWZVEkQEtzS1QjcS5GJkptMHwybTklckAoODZQaVowdmpBKyp6JjxzLlNJXVp2OGF6VT9zU00jS1ErRWVvYl1SJnNVNV1DZSRiITtzLlVWe3kvbjg6'@;
put 'YHE4fFVIR2Z3O2BidD5uRjZLLlk+IjxzZStYWyMhdHBnJXsoNk1FQk5ZW1EoRHJWUEc6SXdHcDdUOUhHY0lEd1ZYKjU5Klh6Lkk3WUwqN25RRGVpeihLU2tBWUgyUiIpJEk3RmI/V1dLQ1k/XlFzd352K3dYQjR3bEwjQ1ppP002Ky5PQ3pGMFMsLHlKSVpqQXdXdlJ2PFtjRXh7YUk3NXlfcE9J'@;
put 'IWJwWy9DOkAoKmp1VSs7VzN3VG5wJiVVX01HajI/Q2I9Xk41Pmw7aEAhcnNyNzhRelV7PT1NelV7Rl4sMUQ+PkZKKFs3RiYjXXE/eGtpV1lNN11eKm88TVRFXnRMWixzMltFTzg/Yk8lND0xUTppTCllPDY0TTZTUENtfjQiazU5UCEoLlRDOnQ7e25+aCRDZUkxbz0qOHhzMGtHS3YmWmpsTnkl'@;
put 'ZFNFeVJeOUllYVhiQSE3JlBLYGh8Z2FFR1ElNll8SD0oU2oseilKXnBbZENKTDlsV2JbZTA0ZSx2K3FNfmpQJCVVflBCOWIwIkQyJiZMdHRgejZFPTNtaEI9UHs8ZV1OanpHJEh3V089QlVLUEdrL2lDJHkvNDZKOF98WGtYJjVQRGMmbUc/eWF4RCxfJHV1JSpZSWNsXWgpSWldXSZ3O2xFOjQ/'@;
put 'UC5CVVtdJitPe3FlTTVSRk5NXktZaVkuJT1sa1MkQ1U7JC5CNV1pQEY4U2hQOyZ2ey5JN1lXPE0qN25yIVNEJS97bXMuXWk4QjNUZGhYfEM8QSokSV9pJXkhIzprIntuPiolfnZXPCx3OypqQkthLiVsTHIhJUM4L3ttQDV6cEg/RmlyRXVTXXNYSmVuRHZ0US9KcyRiNU5ze0hNXkFjNiZWeFl0'@;
put 'THlDRkRwVy9NRTc9KTE/IVp1MSRKJEs8UUleRjwmO3lrQmBVJCJMX31pdyMpO2Y9PEhQPDk2ImBMailXPWBUemtAfGhwPjhEal1mZDxjVj5JVSRmbChUPjYzeT5se3tmYSUhPUJxZjgwRlJCN3Y3Z1kyfU8/cUk6RkZMWk5TV3kzVEJnfDUyakRaPU9wKSM/QStZfFJQJTl0ZUVzMFQ/O1I3RCVC'@;
put 'Nn5nbW93emlmXjopPWokdjBYMis1RFdISU1iJF8qYHsxaXcySEdyNjxsaD09SGEvbldrXTcxJS9uT1NBTUpLUyo3XUZxXWxYWyFyT1EvUnU1QS9dTTQ/aVdISU1VOF07WzRIOz0jNXwyI2Qia29TNmBZLE0ud2t2OCNBZDd5MzFDbzhUc3NoYWBhUzlmd0ZtKzdwZXRQR2h4bGg9PXRlZSg8aE1m'@;
put 'LC5lQjMqQT4uREUoMSZMZWQ6aHdsS0QlXS8wZkUvfF1SJnVeSkR4O0ZCJEo8cFJXVkxIUWopZldkcFh9eFFRTT0kWmFzfkl0VnpuPSNddjB8MmFzQy9AZSgudHRzIS56TmwvSzAqWGVEZltlOV4qYGQlQSQyOUxFYC5hbj4+MDhAaiJlRV5QQnoyNyR9YE1TakUyb1VuTmxHczM5VzI6cXFbP3xg'@;
put 'bHpOVGg8NDthR1Zxe2xzemZ7cjx6e0p2QCFlLm5EWj1PTlNpKCplKEc0OTlnIjNNWihHQFZOcH4vZnI5VzRaeV4hIllHOSlZRjVkNEVZS1g3Vkoic2UrUXVnWWJ0M2g/JHYpdlIrWDVHVTApPlU3YmRdKDVqPjtaYnxVI29iJCIjMzVOYlM7JHVqMi9ERHxmXls4Y3xVMjxlVWg6enorPUQlcDE+'@;
put 'KUpIVnA6dW9NOz83YTZZLEA+eW9uZUMzXSt8KHl9TSQ+cUNRZFsmYDppMnQ5ODs9QUBhJTUxUEU6aX1uIjBnTmxZaHVNOTtXeDsiMTo3a35oOV5fJGVRKUs6OCpsKH1rMFMvPF5NXj5VSV9JbDFqXn0vXk0hRXlyRiQzTiJbRDNyYXMmeTt6fmReM2RrKDtySSRpfCZ2N2duSl1lRkE1ViJKdDoh'@;
put 'TzVEWDA1LDh7YCloREJFRmk+akkoREksKzA+ek5KQXFCRS5BZksrTCpIQ302SldwPmEmQ1txeVorcj5YUVgkdUs9Q20sJTBFVFY7XkRKbVV9QWdkQF9vcT5IRD9bRV1qQzdIMkYlLy9KIlUvbWhrXj90OTxWNSpHSmolUFFVRnMzKEBJeSVxUUlgblZbUTx9ST9bWCtuUFp2KyRTaWhvfUd+VEdW'@;
put 'YFVjfUtlfSVyYTgmNml+PH4vb30pU35nQCgyPE9sXiZyLER+VUxoUFZlWi5qQTE1am5PSXhoT258O1JeI19tX05xMHQwfHI5cjI6MHNsfjp6Xlc6flBEU2hTTVshV0suQi5jWmFrZ3lyLkJCUC4uMzojTmNAXVB8WiFWdWpyQWc6e3J+QTBZbXJebWBGQz1OVm94LGUlaCF8UTBtaUN+Vmg8cXYl'@;
put 'Nit1JW15eUJyRStfNUgycWQ/KHFYWz0kUXxxLCksJSh0QCMhP2ZeZipgez8/RkIjX3xja0JRbmxeVC5FXWlCK2pXPTxPcjt7Z1NeTyRue0s5TXIhYFFqWFtgMiZYNiRMLChrPWMpNXFYOlNmJDNEciQ8MGVISTw8S2h3V3IxcEhmQyRbWk57Qzx6Tjs/NEVObi56TEtMODAuUz5sVF0rLjM/QWhp'@;
put 'ITNgTmpuUjJKSEd0by9CNW5WbG5EJENhJjNEQzZeWi45dkxZPjkubUtUQCwxQyhsLzFqaV9AJiE1WnFvaTxpfF5LOHBYUyt6d3Z3PVRteXN1fTVaT311VSwuJmA2dzd+SF5XTW1IYXBvJjA4YW5RTWM+YklieyZuWCFKeT1WP305Z0xfL3dwa29GYUt5cUZoakFmdV57ZXQ4IkI2eUZqPmxoQFN0'@;
put 'KndNOk9PeUIjOiZvTUQhY0I7JiR3SSkjZDV4LFErQy9+VUxjY2doUyJ7fHdwQWJZd20ybnl4cTNePnBlWFJhOE9rdjA0czF0bSlFJnZAJlR3XUxCPiNFTlpdRUdGYVR7ZHw6VT9abWMlZkBHP3xqXiRvV2UpfjA/Ll5jdTReViJAbks2S21EOFgociJuN2UxbUdQNzM7U182e3I9JSJbV1g4TWZm'@;
put 'emsuK31IY3l4e0prajJOPis6UlIsfDpXUCptNFMzJEkrbWVfKCo0KyZ6USlfaTVDfCV2YCtXMktqYTFpe0BPaDQxaXFiSWMzPDxRV08keFtzeTBNRmw5RWJMUEQuO0MsXmlMY25IM2cpTEddL35gRWdsIys3PUQwIzxLTFEkcXIhKi9PeHxjRiV1JmQ9MTpkMjw2dD98Zit0dSlAQFhNOXBkOCtQ'@;
put 'fV5jX1BbTU92N3AmRmgrTTR4NlUvYS5Xcj8/ckElISVzTjEoYDdDITw+JW5xUjQ1dH1Ob0trQlNwTUBbT2orVjpdfCZpT156dFgkVHZ8NXtweUR2e3ZwYDpMK2A7KEova3sjdFN2eWdoejw2VlJlIi8rS3BHQXFXXzQvWjwvU0lgWyIsdSsyQkUvdjgxVXVWaG5aKUY1M0BjO2lEUUM5O3Jdajoo'@;
put 'Tiw+YXA1RyF6blZhOUoqSjg5IXxhVDFNLGBCUGM8YF90YDlqOE96UVI4MzlQaj9bS1U6NTZVamFgU30hdnBmXXNgZ115ViN3LGN4UDtjWTRpaHh8LD1oZXAsImxKOUM4IlM7O0RkJiN1SElLOlhpd20yX0ZvUnw/Zk0jZEM8Z21Oam5qZGgiWWRAPGQiU2R6MixQU25CXW5IJDo8dGlMPDpCcFso'@;
put 'KCpaPyM8Y2hIRlNVKGpWKV5eLClBYGdbaDI5Qm1JYzh6MEF0cV41UkFBbUBFIVZ6O2dyfF5PIyleIilkXlcpISU2SjJeYiR1PS9VX1U9TGYuRGYwMEAqPnRxa3QrOHBydTIjIjk7O0pCcDI2WltQdTM/N1M9Lm0vKmxCcDJedE90UDQ5V3kmY1hYZVgwNS8lRDl4bTtEVHo7eSQyOSkjSXpNeVt5'@;
put 'WzU7YU5PdCo+eTFwdDI5T2x0WWY2SHldTTgvOVRtdER+I3ZbSDxzaCFifFhyUjBJRyFxQD03Rk05TVBsfjR3VUNtaj5KdyVzO0A4JDxUTTgyblVbbD1MXXw7QHt0VFNtXmhFbHJKcHdsbFFmWk90bUdTNmBhLjV4elZFdzprK0loKU5nRlIwMn03Xm1dVDF3KyVAQmtXJC4xZS5YLFRtOT9VR2cq'@;
put 'XTduMXMrc1tFT2FIY2VkNTVVWl5yIm4wNkBwfS44IkBtNEw7QjxOIlVxVl9MZ3pEeVcwVCo0TXIhcE9DeyZ9cDlHbVVjRF02L19gcFtmQS9tNy8ofWsmSixSSWN1YUokQXR0YFtZfTAufmgxeDBrfGszfE43PEtfWHlIalkzXTAzTFlrdTE1RUI8V3ZIYj1lLn1pViQ0VDZbRSR6RX00USw4SUch'@;
put 'bm13KzIpQTRLPnZOMDBRRlIhPl9bOU44cUtNZkJVLDdAbHZAOXQyPUksJi5YbVFmZnM0SU1GTVRUKXBIOGxtQSwocFVKPHIvfTdWSmVnbjwxSlB1fWZxeVkwW2l7Ty91NWNya05HNixTaVAwRWdkY3NRL3p2YC4oJjQsWihOIi55RSMsQTpKSl12eFQzYjE5NHJ5bCF1bFJWZTR4XlIzcGxTblNf'@;
put 'eDpEZXVha1QybVBISXRzd0s4X1ZDPWJ1Xkgrfj81eFVUNnh2NUlfPlRjNXo5Ry8zb1lTemVIbClFfT99ZFJiUDNfJixnUj4uMWlvLFQvImwuZD1aYno4LkYyIzVha2I8OlFnPlhsWXQhQjs+SS4lXzo1P3piX112OClrQHxxcXxnWEpCPCY/RlkmfCY/e2BpVD5WTWNtM3dxIW5aKWlLWGtHS11e'@;
put 'Wjw6RSIyandYR2p1L2MkaFozMSZUMn5dNyROPnkjfSVTMUd8WEt2UShFYmJDaXZvK1N2byl3I0RKJGVyI3l8MnhdK1ZReHlDY1kySyFCcFBGfFg1XVdqQElnNWtFUUN7XmghOHYqTEdLTnsyZ0BScC43VTR6Rm0kO2plQnI7I1BjOHw7QVgwakJkWTlZIml1SzZCcFpsfEtVRiF8WyZXYUcpQEwv'@;
put 'd2pLWDpHOCFeRk5LblRgMmxlcl09a0BUNklfditbfEdgZWBaR1A1VzJ5TSpYZFkvd2wjPGprd3lkTnxWYzNrQFpYXzsoTEdPeVgycSMpTkxtTV9+WyJsZUJ5Xmo+Q3hdUFokSnFbNm5jQ2NSZFElLzoubUdjUkMlI0dFd01qM25WIjQuOUEzS21UXSNWXXRxTEVeZEpmXS9vJmlJTyZ7dkRGUVsx'@;
put 'aVhDdXRSb0h6VmxibVYsZFh5ImFbO1QhdXlKLmwwSyxXZXJOT2dteHghS2JFJWxZR0lbPSkzPGM6OT1ObVIjKkY2S0oybSlWUT1LS3I3fXkjYSlYITouK31leDcuMH45bWtQVGIsWWg3KnQsWmo2VipNOyZuRzoiWHxqWmhaMF8+dEhESlFnb051SUpFez1mVGJ9cSN1WnZnI0tVSjhOZmIsUUJs'@;
put 'aUdOTj57PnJCKC9eOS4vc1IyIWJWQFl2NEFlYEtgKl9PJCNYQDI/YWEoJExhTkVVbjRQNU0icSYjdEo8Okw0VixdSHRpd0Z6VFNta3k+L0YuVlZ7NDRUMHdKUygpUm1bTGp1OWB2e3EkTXUsdVlvVUxiNngsMFcjLyJqR3FQWi9TYFdqW0t5O1N7bUxoZF1wfCFzOmtiNWJwTW9rMCosQSQ8MXR5'@;
put 'K1BNYSJrZXU2alZLYXRpR19oe2Z7W3hWKDBRdERETDZYMnwrfmVDenY/YUVCWjVATyxmSzhKWWRJOmtaY2lPQlZDeGV+MCt1PVo3S11tXVQqUXVUTXFBT3omKkhWXW48YG9VXUtKVnd2PlFzUVB2UCkyTUNIKjkkdU8uXytjblo1WlBuSyNEKURCV2dbJF5jVCZ8OSRZQ25jJjU5Wm81QmV9QW0q'@;
put 'MiQ8SENpIVk1clRXI1k1dkx1enhZaEV+bEN7ZjJQeCpybXkpclpPa2BIZU9Fe1hWMlBRPUQkYltrWEp6TXwvdHA7dGx9P0ZaMGUpSCo/VltQXUwiQS4lWSxxS0J1diYpa05JRXtda1Y7Q2ZMcUhCLm1jUmFZRWF2I1t4V2xvQkRqPT9KXnB8cGQrTnk4WkZMbD8oV1BbKU0+aixvS3pZaC96VGA5'@;
put 'UUcsOCYkQykkaSJgJkpUayxWQUVVNWp5e0I/K0YqPV5iUG86ImheUmA5NmBVZ1RiMFpqTmkvZ1dyTi8lN0grNn4pPDw3aTJONGEuX2dYI09oRVs5MDdPSm5xc1YlSnNgOyNhRzlvTiFMRE9QImZDemdDbF0zPUZ2LCRJSiQpTntZJCxeKV1BJCYpJSksVXs5RXMxNlA6UiFWJSsmamFQOHcsbnVp'@;
put 'MDshTzRZOyNKOU1LWTBfWCZ5eWFYLjJMb054QmQ+JXxTS1NtRyVfZm9iLGFqQWBOJGFnVTwiN2M5XTFWbmIkYmUjR2YkTmdvOW0sdT1qLCI9KHpSSX0hYTpObFlmQ1lMRTtTMysrXUx2VSVianNvaE07SW9qbSksYG5wK2ova2JfNnNPKEdML21jcTZMW2xaXUksfUUqRnc5IU5FKEI6OXAkdXhK'@;
put 'QTxkLG9gQm05QCV8T3RtaCYwfUIlWyg5JWAkVVUjbGtydG9+LztMMGNsPjZ+bmpTbnBzajVffCZCS345LzZDakBEOks2YiVLVTYpcDZiX3A2YmEzUTJDX2dPc0RlcXAoMiwoajU2ZCR0em14S0VnKCNfTzFteGJqKkxRXXh2QCV0P3RUMyxCQUFBQUE4MC9SUHV3WF9JWW8sNVs9cWNRYVEiKiE3'@;
put 'YHEzc1RQck0oN2JTP1BybCFpPzJBIT9fbHd2e3lVOU08USZAMjchLlpCRVg9XWpUczIyenBMIVY6QncmXixFfCN2OTpgcW8pMV5APShEP01jSXR0em9QejEuSlZURE1IPGd8RzZUbiQpdkNtSyNzUFNeZjtafnhCIWgqXTBvLGpYakd0cH5EOzRNZHRvd1VZPH0zMz92diUrKCwsPkFsXWdJdFBi'@;
put 'cGpBP0AjP3dzIk9bTHY8UyxLIXwuOXs6Sj4qJk8sdE9ea1ElfTk3JGZYKS5UNWZgV0oxNDtvSkZEOFgyLlNgP2ghanojJnsxYFQ0b1dHOXwrUjZCK0c2dVAqcmZ7LnFNMD5CbDhNWiUlS2w2JUdEPHJHJis2PGVsXzB3RkQvTHcyK2IsTHJsRG1YanNRKXwmYGNjNVFfMTciU1JhcnUiJnxJXSVM'@;
put 'eWYzVk5PWEU2RUBSMDpbWkVMekghPHpoI2VlfjlfYj51VSMmcl9wWXJ0M09+NjxzMW4+bDI0PlcoREhFQEpFQkw6cU51eC9fZUtFKXxZQ1NgPjBxNUFeUzE1KShCVStuOEI8JnopckpjdlZROnlya2JuVjZiZzV8UW4sMyZ9dEZRT1tUfCpVXXFwMmxtVD4yZlI5fmxKa3NpIlFBbU89K3FtT3pm'@;
put 'UTgmcDFqfVRPeU0jPyg3KkdFY1t9diNTfTEkeHY1UjV0fE09P3lPW3spQEZAJTFBfE85LEtQMmMqfXI+Imt2cFt5PTBZdGB6K2dpcVdFcUIpbGUxdiJ8NHtWNihkbXF+NShiPHAmTXwrJHU7VHwxM0Y0VEVUZnNgRXo6VStsKXBVIysxfXFyWj0qb2AiJFs8bDI9TmhbPVV7WSRFdyM+WzkvNC9P'@;
put 'eCJ9bmQoVSRsKVNeKns/KFFOR0d5dltYaSV0MkFRQm4zcFI9UV4za30sUmo+b1kjYUJAZzZucE1kS1NLfU9BZnZPQV9XKWAqVmgrImx9NSZQNHBvYHtVUGMmTlpJcW9jPDZ6U1J8c2N9QmZGJCkvYkIvT0lOYCY+OmF1LnU0e0AlaSlDUFJHb21jQF1oM1FqUV19InFqdVUoN0lrXS85ZF9Qdksh'@;
put 'PzUuKU9bUiFjZVFLM0lUfX45T28kITd+ZT0qels3WDJiJDoyd24mLCtmPiEwYVlOOU1DXUcqNjluL1RLdFNzRk84I2xqN1dKT3lZZiE4WSI6cjJEcnp9SCVOQm5yMUZuJGBtOH46eWI7dD51cyk7Mz0qfVE3RHd8fVFBRTcrSUckZ35Cd3xoV1ZTaD9aYzxvWTAvYkl7QUM+MG1PRyslKk0+ODZq'@;
put 'eiY8Vm5EUHRxM2RMeWk1QSNOSlpCJU43K1p6Z0h4RnE5eihdTG9PV0M4WU1rPzo7a1pER2UlV1p4byZlJlUpJXxVYmVuczksMzVCZHlucF9OZHNJYnNKYWI5N2AkZyNIblkkdzZTTT1reHI6TyZqNFAja2khaCNme11QMk9wMCRjNjdjNz1vfUVOSEVabWEselNONUBfdTgwZ09lPkpOMy89NHYs'@;
put 'aSNgNDZ4Png0UTl4QTJdLDY4OlkrUyNgZ1I+amtUXzVhY0pVfigwe2lYS3kuN2h3WWJnKD13UzhIT0wzMD0kWFg8KnRENmp4YF9dPGB3Mkc8UG1yaVIjKl8lIUk9aVNXIzVhJCRJJj8qTCFZOk44QFcvISY5Z1RKXSh1R1R0QWdDUX08UEg3Wz1QKDBVMjEpUHZmVkZeT3ZafVEoZCF3XjtIMThE'@;
put 'NnxfZmBaWGdaO004a3poJC5VYFMxMXhFKzhEI3EyYyVUUWFlPkswPFpzLD5Pc15xWSY6LmU1cktyMk0kLkAlT0FSUWxiejF5PTpZO1MoakJKTDV0JmJQbkpnUFtocz86eDxrPzA3JHtgel09cTYrKDRje2QuX3diO21DXmhnb1t5LF4kb0BoRT0ySFo1VTVvPDBRTXVpK1ZFbnMuPFFhM0pqRDcr'@;
put 'Um1kXnFidCokUTpNOGtaUT0wYWZ5Om1xW1ZNV0lfcTQxVSlVQlQmRXZxNSxpc254Okx8WFhGcFFTPERkM0RMbTlbPz4+YHtUbSV+akshUC8mPUVVaEZ+dCRMMVdgcXpadEx1RH5Yb0xJZVl3d2tiT3F9cjRqJEIuP2tHMCFaeldga0crZGV6W2tMZiNWN051NXZQZGxyQXd0Rj0vdF5tKT5MYyM6'@;
put 'dksqPkxiU1R0OkBCTE9CIk4lTntbPjQrTnZDMGJnRzZXfGVnNjNuPVAuYFohNzRAQTlxOWxja1hlKV5dJlZkZEo3STM8P3Y8UFp1XTRAUEAzUndxaE9FTnNrUispUlArVUJhTDR8Klgye3IqPmVlNn5yW01yX1JFcVh9cjVyfGsmQHM+JUosQHFveG4jK2AvdnlwKztZUXgmVyksJVppJFZtKE5u'@;
put 'SV8jfDBgJWYwZjJ9S1szdWtUZmVnaEJ1VSY8ISJtKF58cWMqN0hvWTdSLnszZ2BTMSxrejk5bVs8cyt1OyN4Q2JoNmxHSzBqdmlaVyhVMGhvKiE2QFsmMmY9fjZoT1hLcnczT3FKY35za2Y4LCk+RiUubj5XWz1+SzB+cyM1WnRyXX5oV3Jyez5FVkc9VDptTHJdbWJye2A1Jn5mPnhnbzU9cD0y'@;
put 'JXhndF5QcDZ2VXx4e3Bfejg9O3FXXT5pYihOaz9KLCJNI0AxQiUiclBvSV5Ra1U/c3d2eEljUyxEMFpEdWp4fmYpajExZlRzd25MblUuIm96dzgvVmA1dUI9WUxVZ0FKJCluJFQ8Y09TbUxERCUoMldsQWJtUURZd0hwPFBnXkQzJjQyOmUrK3lkU2Jtdkd3RVMlMUVSQmUpYFQzQnEiXigjay9M'@;
put 'Mjx6OVppRUh8T3JpL2xfcUN5NjFrQSpXTFVZKStVckJiN3dXbD1GSEhETHRSP1tvTVMjUGFZcVo1clBEfkJrNU5PNFIxKGU0RFFUQmw0P2IyRzY0REhsNTZXPHZnd0VwdVljL3xxLGIkKG0lKTBZP2s9JFEpTShyKkIzYmFjUVFwJSl3UXRKN3NjVkIrPDFrYV1CWlt2L2JRQTNpJXIrPzJOPik2'@;
put 'eUNhI1hMVVZ0ZGMkSnxXT2BNN3h3S1N4Wj9GOm9BQyVEZkRxNlQvV0pTTUMyK1c9aDlaNTVGS35oVnFQMm9nMG9WSDxzfEQhV2Ivd2IjV3dNPzFfQUNmd3ZRPzokT0NvY2RrSEtBQ2Rpfmo8KWRMeUlANHQuKFRja3VudE18diMrSXVSIWwpO1R9RHkocV9tVUBMVE5LQSJMbnQuJGFsTCFzSWN3'@;
put 'RlhMVWp6ME4+KzhQcEI0IUBBWSFITFZYTFVaYF9dTnRpTmspeG57ZVlMUyklfWtVdVgzcF1DY0B8WD9HTGU6eSZXb0koMy9XTFVtIiRZYVNZdzhXYHZTQUJ2I3lUQG1dWWtDKlRYZHhqSCl2eSJBbSZDKiNnIldvaGo2W0BBN2NsTj8iQjx1NWx0SiI0LkZEJW1ePGlnK0dHaXJCJGcxWzhNT0ov'@;
put 'TmtaKzw0TFB6Zy9VQG9FbURmQiYoTFUzYkw1Z0VrIVZ3RipBZ3dFKEE3Wj43NDRGS21Sb256aml2dS85YytzIXdpSzdEbSp7ZGxVQUJnfDVMdUdAVypXPW8qeiQwUzRFTmZET3RTb04vI1sqTjs+ZVp+ekUwUGo0LjZtfVFZcXUyOXk0LiMxOm9ZSUpYNW46WCNZUjZWTFgiLz5WRFRoS0NlVXlB'@;
put 'T1hAdlJOQk4kW2VPNz5DeiQ1QVUrQlBCQCJhIjpvO1IwRF5MMEQ2YTlbOm07RW9ZOzNnR0FjTndgJDxbU3h7WWIpUWFBTnJRQ21vZGVXWyVsQ3Rafj8+a19sJk8lOVttPWxUXlUlMUFydXp7WXRwaVtnZk87ei5VfE4rcGd1bURiVE9CaEg9RnBpPy58PjsmfmV9dGomM3VELE9YUlgrS01OQ1Zh'@;
put 'TzNjYW53MD4kTSlydGJJL0Vsd1NeWGhYY1AxRkQ9TG9TQUlEWDN0dXQpMENPLz98ajM9aj1QL0kuM3c6IWw9N1svOWNSelI6PWAxX0BaYUprfmhINnA9ZDxaWHgxLy8jOSNDQV9OWW9oKVJ5aD1tfDlSLC9fTVlXeWVLQWYwb3xWKjB6dWt8ME1iQzYsdHhGUXVIQ15VRmBDZmBrZDAwVD5zaU1z'@;
put 'YnpuKXxteW47dHxoM0Axbjx0PX1+PVtfemd0ZnxYYTAuQ2BVRWF1L3l8fUxeaHxhYWVTaChyRmFFekR0NGFUQyYxZHpuWHtYZjByaDN4X0lAU1sqPldvKEByemBdR0BFLDxwUVhRfD9IMyhkMUB4WmRmXWx5OmxSU2R7NHl2SFdBN35tSF4/clsxblo/Kj8vb1pfbVg+LjRZYWNpPj9odTBXIVJo'@;
put 'W1FORWlbSWJrQGh3a1tPVUgyIXxVd2x1XmA9WFI1bzg7Qj05Z3xoaC5GO1o9JVUoSGJnbU81LENYPSUraylZKjBwdSJOWypUZytrMEUyZzwmTjBHTWZ1XzdEPHszWjsseGg4YStgcXZhRCNOVU5JPnZbdiljYjs4dz9UIXhaLyhqZm0wKkciaDBGaVZtTmBwUlhEdyFAWjJMPypCZkNWUmFGZ0Qh'@;
put 'YUlrJm8qT1VPMXxtS1Q7KyIrTURrZFsxMGdVeVFfMDBUMHNpMkx+OWQxQnVtVn4+NFpTaX5NO08sdSx5VmJpMz5TKCl+YCNjdytCI3lTKlIleXI5QUV3bnI5Z0hFRz19R1VqUiNZNnhRLEJNZTI3clgrRlc4WDNVYDMsUVdES0krd1U6cVlXRHswSlo5dU91aGYjQmtqaV0wVTxaJXEwMDhXTyFy'@;
put 'eUZrIjtxOihfNzVGVDNZaD5gc1FZPCU2L3AsWU5EbzBgTG01OTgqVj5yZC94UC8mfXpga0tLbmBDRzNSNUhOWHxWblR8IWFIdCZ8R3QlcXpwOlE+e0MqeGNXY3hWQlpIKG1MLnJLM0ZxKH1MYVYvITNWLzk6dnV7Rm9rOUw1cnwpcU9AKDEsQ0QyZ29DZ0Q2MXRpb0NXaE1XIyshcz4pJml1W2lm'@;
put 'WyNuK2AoM1hgLzUybjhha0BnfEBXJkQ0R0poW1M7d0VSIypgemlub2prWSRdZ1sjX2l7TEtPeVlmZkl8ZUdIR1IhX01UNHcuOHQ1UkdLd11EWT0jVzY3cCMpYTZTcHRyQzZMX0t3T2l8VSYrclZxdlRhPD9FOmNrX0IldTRNZEs1Tm5qPHY6K2lMTlNlPjB3WUE6KzlLJGp1W1suM0lKWURUQ1lP'@;
put 'OnswTG41MXtDKGBaYzUxe0NrdWFAbzxBLzNYSnBdRUFHcVspW0Q7ejQpbl5dTHFlZXJ+b1RMe1t2NHcuOCpCZ0QrW0ZyPklKNyRwcy8/IUtYQC8vO0ImT0ppUTdYZW80NTV2LkBIWGZYcmJLWDUhc1NoYEgxTntZaHN+L159b014L21oYk5vOWIhfG9UN1h5Pm9QOlhpbylDfXZYXXwpfFhGcGRT'@;
put 'V0tVSGdqIiV1PXhAUk5JMUJPbmwkelghJDJVdSIpWEYvODM9OUwuRFdjYnYrKVVdNVJHS1tmYU05UGJSTnVFYnV1a2IqR04/VD1kPlUzSl9Hd21hcFB9bkRZZ3swYS5fI3I/bzJnODIpTUloaixvQ21wITAvTyQrdCx6R05TMClXJHFyM040US5EKmdyaX5MZmZ0RiV6TT9Me2paOCt3RXRyZ2Ba'@;
put 'VUNeVWFdd1YqW3IqWlY9JE1TYihCWTJtT0daamQ8TWhZK3dHOk1NX2BDTjVfZWZkMVR2KykkRzEuKVVXVVFaazJMUE1QJkdbWTtbO0dhKzo0Ui9zaWt3MlBmTjo0Q3QufEdVcSowYS5fI0xXO20ySTQoLHwxRSRtZEAlU006YSp0diNpTF1+P1g8RypuWVVKTyYlMWk/d0ZEYVBoTDVSMmI7Q18s'@;
put 'Yk8vRkRxeUZEel1ucmE8Ijk4Tl93W2E9U3NMTXBhXTcvNUR3NElXPEw/W1NUVXN+PEAsKUBDX1JYWj9hR1F8P2okWjwsU3JOQlo9Kj8xJHdyaF5WO0liKSJlaFtOeElEK3dDZl0oaVk5SiYoU3kobWNUQlA8OWNySkVzJGIuc00sfE07OjtiZSxTRXVZdDUuYD1MUHAifDZ8WENdeSI6b145OmxS'@;
put 'Rm1tN0p3I3NlZV1OdXZKRVBJaWdyKiV3cDx2Zml1OGEuOUJNR1Q8QmkuLD0obW9pUDBkY2F4Py41ZFBXeEp1KmhaSTRwaTBBKSh6fHtaX1ZxI2U0WFIuQndhcnVYQTN+V0hlK1JeNEArdEorbjlSRGk9LjN3fHZjeGs7RG1ZdDZJS3JufFJMeiF2dGRnbXd9M0ZtX31JTDkoW2gxUWA6PHc0ezpy'@;
put 'ZWFgPmJPaXw4V20qTy9zPH5lPXJiXkFeZC5aKjkzQ2ZDbHpkMGckOkQ6dCp8eUZYOGM3MT04dEQ/RnFbLFcqeE5nMFcuTFR9NUNEZ0c2OzBBZiNQfGg6Wzt1WXBIZmZqRTpYbS4pQzx1TntmKXZEK2FpJVUwSXIrQW5+V2lJIil+N3Ndfj9VMHpSTSlBV3hwZ0VxJWp3ezp8ISZPSEJ5UGo/aXVu'@;
put 'NFc1MFdiaWo5PnJqSmZPeVB3aT54QnZSVExpbG8hUTF4UTBGNlYhVCVVJXNRSFFgR1YjNH0vQiQpME1TNikrLFpwI1BhblldSHw3NUpae089QXk7QDoxfXFKMndJL1RNLEMjLkJEfTMmMUE7I1BXJWw4cDhePSojKkR3PG8qPSQ6aT9NQUFeZVZBTS9KcyQ+KldlbzxLSnRuVEdxXk91TSpdV2hM'@;
put 'N0YwdTFRbCxFLiRpaVI1UWksYU0ia149bnR6TiMlUzZBRjdYOnpfQW1VOFNKZktTR3Y4akh3d3d7SmJ2Z0N1MXgxeDFFPFF2Km5OT3lETHgrQiMwbVZweHZ1K0JCS3xDVjJ0Uk5ITSIrQHQ0fmwrK1VqS0ZxOXRqdGtfVjI3a3dnNX1IV08iQVQ1ImtCbDUxZDQiNUouUjk9YnlxNXApMktDYywr'@;
put 'V11vK3kuLDRfVkUseH10dVN2TCkxMWRKanpYW2BoU0BoVT9FOld5WmI7c3BgNDNbKlZpJGtEWF5vPXRQbkZKTlg9TGE3dnUrWHoqalh5UCplbzZFQH1FOl5mRSJlJS5ELCZMRkF7djU/OigzOlE8RmY6MXg3U0dCZS9Fcj59KVIsZlIsVSV2SlNKZi48SmU5M09UVWYqRmlhJjMzUmpiQGJQZ0dy'@;
put 'VFRle0c5V3w0ZWNJW100cmFoKWx5XlB5amlVT15SS1J5PDpGYi5FMTcrT2suInpCJWNSPyg1RyR3LCg1aTV7UHw7el5hNHRgbjNtTF4/YU0qOz5aS2JQOE5selN1MmN6Wz5ecWY4R0xgPjNjeEN6WiIlSy49TFhDT3BFOSRQbkRGVDAhfDpIJDRHVThkKX1xVz86RHwvMmgzJnQ4dGRVKWEkK0My'@;
put 'S1ZuaHN5fnJhZEQjRmMvK31Ea1RrSitWXTpCNGs9ZTQwelBjYzFNSWUxdCg7JHB1ZSxEZ1BZY3pAQGhVNWV6TEVNTnd0VChHSFF9KzNxUTNkIUJdSWpnd3xOeyZHbDZFQH5HLm98ZG5MNTpxcUh+VChCUjheVmo5K15pKlc6Wjl1JXR6I01nQWglel9Obi5BTEtsSkI9aSlyIXs2bSN7IyMqSSFY'@;
put 'P2lJZmpCYkYxVlQ2bztRc0oydHhqN3J1KTEuRjRZXWlNfnhnZWttO09jMiRVR1lEJnVJKiUvTjJeT2NbaCVKZ2dXVStVV3MvLldYIW9CTF1QbllUQSZeaiQqbi9RciN4QnNJY250QW8xPj4kVGB6UXltTzc9XyFpfE96TzNIWCZLT3FPSXQvREZLV1M/THh6a1psTWIsOWlOUkk8KTt3UDxaWyQp'@;
put 'IUBwUG42KiIlZl1EKnh9MGA/SygmWn5WZF9vRHlJS1srXmwlJDEuNzM3PEYmdG1pLHFoR3w1dDw3NUNHd29wfmw4akBNaWhSMCo9SENSJXNKQ1pdVnc/V3xkLEY+NXJDVlFoNHRNKFQqeiZSYGQ4WD1Qc30zWDI3Vy9uK104VkkvJj9INjZaRnIrPGpHKzMke2s5WyQsTVIlPUtVZHI5JDt1Plgm'@;
put 'JEwxMGxJYXRqeFl1MzMrcFQsVHFod3NKdSsxSDtLJSJjIlZeTyJ+UUUyQV56QmcvZGN2TyNMM2c0L2RMcVlObWY1KiUlK35YJkBFUnkjQkpbdmdTPnkiWHg4WUtqN08xKm54Qj1MInZxSl1JPjRPOndnMHc4U0ckejlpLys0TUdBbEI2VFJpdFUsKXg0IVJnfS9YOzRkX2JeNk5iZnJROEJyc2lI'@;
put 'ZUZdNUt1eEd6Xm88dzJ0ZDB1ZXRwezQoOEJyKTdeaSJuLFRRN1AhQWtle0JUL1gpeCxDOUlib3h4YXQmW2dQaWFxNXBWVStLK3VjSCV8ciNGPnxeLkZqPyhPPVMlIj9DbyhidXBSa0M0TkU6XnZUdlJXdFIwJXZDNXEhNTQ7XlJAWE5dQ3ZxZFViYXd8JEk5WkNlOUZXLGRmeHJ3MFAhQXUqd196'@;
put 'XW8oNGlHXWghVjs7REs5NHxIak9+O0QzTkYiM09QNiFidSw6QVRwaENmN2F2In5sJFlJK1hAUnAxYGcsRyRTQjhASW5Bd0FOQ1RCWnJhTS5FKUswa11RNHRwUjM+JmZHRWwlRHpSSCNiSThAV3AhS3xqJmt2WUJbMXAwZmRqd2BNbEBaV1NMMCFHTlNOTiF1TG1EailsNTAjd2lDMThfcXs0dFl1'@;
put 'JS9ubHB0PmxaSHc0dXAvTS55PUVbfW9QOmx3S3J8Rk8kfSVoPDtQMENqMkMyLFhyWE9TNnpJRVtiOGokbDQ+ODpnbHU9e1t6ZG0hMipxS3xkW2FwPXtbZlp1TDV2SUUzbD5NQ0ImOHhiMU5jamlNPjZ0RlpFbm59TUluKHN+ZThaeyNBIWVUMlZfNHs9VGY+ZjFtKXtSWjNJOUk+NClrNVNGMDh0'@;
put 'UHFwSGFeM3RjaiU4aixvUHNHIiFhaSRWcEhbPUpgZUxsM14rYEpnPk89OCJIMTtTYGZxOVIjNkU7clpyVF5paGk1IjIlI2E6XmFhV2BiPlVDKTdWKzFHMnFQQHg3YFdKU30hY3tvdmpTVENJQk1FWWUweHxaYmA/a0RUOkdYd09CYTpQOituI0Q3STYvXihmMGo7fFFhcjRBd1V6WWNHXlRjSix7'@;
put 'RztLQEpDZXs9Qm97bGFyX3BCfGxYbz5Uc3EofDdmVkp7dCQkWSpjcj1JXXxZcVtKX3ohNTNvfHgpR2U3T1BNYWBBRVtaVndmdE1bSyZZJm5IJlJ7aSpLPlh8bF91SWVMOChHPls7ckJ6XzBTLHpjKmZuYEliaDV8Syl1fTArcj5oMzJne05rIlAibFE4THYla2VraXxPeF40blVxKHFLQi9nOjFj'@;
put 'Pkk8eWkiTTk2OC58IVUrV0pUJFJLVE8sVW11NG82REkqbE06QFFVRUZCK3UvN2ZVOHleYVZGWEdhdWQjKVVnK0prJUYvR2YrPUJITTQ2M3BbdHVLfUxCPT9TLj5fKDdKPWliO2JEKXt0QExnKHBIZlBodThEN3spKzg2TS86W1dWdEpEaUExSWQ3YEpbQUBQU3l+RkVzKzBwPTpGKF5menVVb3tf'@;
put 'V3svQE1BREpkZUpAcGo3IXc/WWhJWng2STZuS3heMUZ1WCZrSThAVncjYmMhYmJve1o+PGhHcmdFKiVRK2EreHJvc1RiXSxPXlYrYStKKCY8ZGZHVXVCVUdAb1FGPn1KaytePnhBJVJ6QE9jLCRMPm5oX3lVY0hhYU1pQjhKeHQlRU9Id1hEQzhfIU5xYXVINndaI1hGUE1lWGUuM2psQEZvWzgk'@;
put 'LDBJR1sqJCosd0IkOmMyfVBqe3p9aClFOD9ZIXRjfCY3YSlKP31kNDYoXmh4UE1nKDkzYzQ0djg4VEM4V0V4IzRIWHtkPD9XVGJQciFJJCk9Z0FgXk9zc31HfE0wOHlWNj9OXnlDZW4kZlFidkBEYylhR3BsYnF0UjhGanklPWhidTdPNyQhUD8wbkMpe2E1WypbTy93IlNfIWBnWit8RX01Wm8o'@;
put 'cERRSjEzO1IlfDQuUz1nQl5kTj5EPXI3YWVmOjk3ek4wL0ZxOFMxZE1VV2ZgPU44QHkzRENEd3BrXihWbm9OJC42RGQ4dElDbUtxcldEWG0yS0NDPUc4UF9WRVF7dCJWKV8yanpZKVJdfFgvZ3JjWjd5QnF2UHgjRiRYIlNgZGo5MUdeeHtdVjhlbU15TVh+ZDUjcG5LIUBUJXB6KXVNZjVBJEos'@;
put 'KDNAJCtuJXlreXZeKFZhYFt7SCF5P1N2WF0/Uj5ZJllhMCs6cWVMa35QZypaT0BHek9nKjxmN2w/Tzg6fmJHQ1ZkK3hAKjQrdjUwVVokWSRZJCJ1Kz1zXlhXUDZjO0FmI09YZ0ozVU1DQnUvNmJreGxpXUhSZmxSS2tsJGg8bWZUXSNvLmZjLGdlO0xqYTl4bTIkP0IzPGdZSXVMamF4Riw/YjEv'@;
put 'UyMpQWY1X35lNC9jRD1yQTxuXi5lOlN+bDVhZjx7LjwrRFRFPl5oZHkpRGtXfD0kYipwSHVHRVZ6RXZYJmlWU0RVR0srfFhHcChMcjtAT3k4WD1rOF9HUjdgSm1mW2VZIjYmTyl5c0w+NSg2YjovYkpDNyZJQWosYV5QOk9dQlNyZmh7WlZdayNbIn5icW1ISm85YlRWbj4hI0ouIX5sUiQsaEZ9'@;
put 'cU5QYVRaY155U35gP2A8K3g4ZjRuJk86QSFqaElqQFlVUDBzKitkIWprUCwuUnxSOVlMRG1gfVB8LmFUZGtBPEpOMHNhdng4M3YkJWt6SDx9VkVnRDxmUVcpc154Inw0UyVwPGBXOHx8OW5Pb0gyUCJXI148ITsoQm51WSRAcEMqU2FqPGJadSY0OzVZX0xCZkUkcz1xNzpyWjImWztCWCRAYml8'@;
put 'S1V2PHJETV1HdThMak8ibEBaMk1QJjVZMkdCJXA4IWMmIlk9OmdPZE1PMEc2KVZDOSVjVEhpWnFKS2hEakBNJERCOiVjVEhDWmZhUmN0YyYySCxBcG9IQE1hZDQwU2FJZH5ZJnU8blZkITAha2lnJHwiY2p2aTcsTFNwfmNDcFJReVloLz12cjc6ekk2TTE7UGlvflF7MHtjdCwlTyIvXVpDfV5k'@;
put 'WzUpZ1gwNk9OeHUmX1NtWmI1KHk7NTp6WVkiUUlPZV18NWJZfllvU2w5QXJJTyl3WHc0ZTROa0RnMltaQ3BzemJWU2RYRDMlQV1HTkZ4djQ9bE15UEQ8P0N5X1NCWStpKlp7cWo5V0pIWjZMXW9JZ3RTI1A5SD5hSGVERkpaVCV9PHxlRXE+MGZQK1dJK29ObFpjbkFXbE4zQyNxJmRxJVdFI0xk'@;
put 'I0UwMS8iaDVaZHF1NTIvImgiK1MidXN6TjFafXR5Tih0MyVYMnxMPERMaDxEYiw4I1lzMnheQkFab3VNVTNSOUgqRk40a3d5QF9vdElicFZGMWw4LDRgP3B1ZWI/L3pMfl5kK1l3IzxoNSJzXkVhb3tYY0hHMFlpIzZoU2EpSnRQe2hZdmVWakVJOmdZXTRienUkRV4la3xtRzxCMTplTytmUkQ+'@;
put 'LC91e2dTbkVRaGFgPEV1OXw5RTo7T0dfQXBARVlQNV9KaHI3fiklYzZZWmFSYUU6c2lFZUYjPShiOT0qXndmV2EuJDg8Q0U4dWwoRHRLfFJIXlU4Lk8wXiV2TWFnO21NJE5PTUVEKDE9Kld1ISpLNjQ0XlZwO1Rma05EOko0NytwN3I7NF0ieChqKFlka0RtUUZPOG4zIjlYSkFIZ2l3MCl7flY7'@;
put 'UDxEc1lHVGtFOyZoJCY+dFlLckhgXk4sSzpXI29xWDtifWZ5Vn1ERERXQTJIMz1pNXN9UUM2dCh1UFQhWD4vYHhoaVlQMkR6NEc9Vm4uXSFDU2NfMC5mcEJOPE9rRlJ4N0cqXmFWKn08R0JTTXlGOTpJQlN3RyEuZysxdzx0MFZiNE5xc1Y1dF4qWF1UVykmPExmZHlPLDZeJipCQCMvQ2svWlFg'@;
put 'YjIidXIzPWsqMyt1Nl1hTmopSzBDOj0zXmpyWk0uPWt0ZSRqZVpAIVFYQVRNWW04T2wmYyIvdj87ejA/P2tjaVRuNTlFREBpcmFOYVRRM2crU2tqXVsqWWksITU1bCk8VFRFcy54QmtBP3dqeWZATkosSiNZbCM9Yns2TSNWMk5YJiZfVCVjaFd7ZyozSTNwRTlsViFfQ0J1I3hoOXIlMmdMPlMs'@;
put 'TFJdYmlPITk6cy5JYTltVFpRLmdIMTFnR1JiRWlibCRiUndgWntIYFBhYm1MPW0vR20sSWZKMkQsZFRYdUw3JUtDSl9DJk1YLEApTXVeb0JTJDpaNX4pczQpa0JfNC9DVV9pcyEpLH1SQ1gyTjNpTi9rOUglLnFPcWA5dHxVK0k4MG1iM3lKLClzKWg9Si4lIVBKVCtNWk5wPkxxMWpzRE14djAs'@;
put 'Y2RzY1V4Z3whUlEjJDAoKSppMjM+RXBdWVhjVFNlZ3U8djFLOm4pKUVyY3J6IiJuMDEhaihOX3twYGJPWU97RV94bllCMFlmV2d0XURhZHVqT1BmWWFUe3ZKI1gvbTxFODc9KG00bDd4JiohQldKbnwmYytOOWB7QUlxbzhzcmIoMX0pI3VqMzFRUiVqfGxndlkjcmlZb1BLfDhMbERBeDJmLE4k'@;
put 'NCpMIyplTnE4RHNBbWdiKUIoKUJISHxmZnltZWFsWk5SeHAyQkd5VV1qR0FgaSZAS3VKQDp+Z2x0ZnNaZUdJLEwwJjtlJVhAKEAiNlM1aWd9a0l8dEZ5bm49eHRTVSVoP1g5IjU2VnBUOkA6QFptczhdOXVGKzUmKWpHPUsrMzJJSktRLkN6IkwzPVMoPHpuPT1MRGghNHVpQmt7aCNpfF49dm0v'@;
put 'VUtKMl1OJDJWaHZMKTpwZE9KaFt6U0k3ZzBlOnpCZSp0Sl5sLCs6Ln1WY1ZneTFsdk9mOmpVZTFmO2N0K282UXYyIypXXkhVPy9yIVNMS1ojcXtbamA8Ly46SyhHLjpuW3NTOFA7clE2RDNyKX1GY2lmdCw3S3o3ck8jKnI1VUFJYzNJeGl6WFklKDVfYilDSS46bjJ0Vn4oPDIlYTw6RzdVc2cr'@;
put 'Yz1DV1cxVzlLYlhAU1N8QyM4Qm5hWF9xIyh+LzZsUGc8WG83PStDKjlRYF5BYW9VKlt8WlYmeitMcFFpMUxqQVdxeWFaL0pZUmllczhWa0dkI0ZSYExVc149L1QlXz8kXjwhKktbVjwuTHZNLFY6WHY/SDV4XzBdLGhAVE9eZzpWfFlwdnpeJmBmbWAxRGtyb1tzKyldTE9eWyFjMTRHUlZ8ZTh3'@;
put 'M1ZbVXY4SytjVTdleSFOIU5lZlBkNyZnfHVCZTYmKnhlcmphbWp1bk94WEhaNVBWZUklUGNlP3p2K2tAeXpTaUt6cnk+TFUrSERkI11kOE1aPE4lKXdlQFdJaltWcjYoOXZmRjcrblU8V1B2P0hOR1E4V2VbKktVKGdfQjMlR05GeEdEZipDVG0lTy5gcTdhfm8meH5UbSVsdj5oa04sN3lXcDhN'@;
put 'eUYlRnRWRX5vaXg/SVhfYXxbb0dGTVg1M3smcy9CQVtCbGpmUEI/Ilk0UGMiMU9VVU5OKGtJOTQ1ekJ4WSxBcEZ4VmYuVT15VH54RiJZVn1PK3dGJnFPT0J1V2dvQzMrMEt5ITcpdjhVUUtOLykufllOUyswejVdeWYjNm0mKmFBRSJRPkFrY3VwS2J+MXgxK0YyPXdsZzh6WzVPblRue0dGODFD'@;
put 'TkdnY0FbVjtfVFZsfGhoL0s4KEFJQXZXWExGS0MpdXZjdCx4c3F6YUdmUGxQISYxcGhoWn1QKDs+d0toekdQSCVFYUd7Sng1VUE+O2R+Y1EwN0d0VDRmTzNxS3E4KkY0VyFYej53XiUodDdHZXEiO2JkPURsPHAqPnl8aC5ISCNpYWw5JWlzNjFaY2huT3FYdiVtWUhAOUhsNV9CPms0JnVjbFA5'@;
put 'MzB8cTovb3U9SXc2TEdRWDdAYklgOWx1a1VrRlJtYE0pPyVnUkdgc0NQVUtiPzFNXy4sJDpNKF45aWJCZG5ZdVNpOXJIUCVXa0RqRzM0YjM+OERUTWJLNFRyKW0jd2dzb3t1YGZlKj8qWS9dZWg8Iz8yRilbcD5GYShDNnJiIlRtREZxZTgoM2glQHRKZzVGIVh4Pl1WYy4yPUBTIWdURkFUezw0'@;
put 'SzBeeGteMVAqNUEjMmVEYTtleiw1OGc4NGt3clFdPVdVbnc6dmNebzVpKSpDOGFFdHE/Rld2QCM9RFU/RmlkTTJoezd4UkglOyZteFpHcSp7UD93bGc8RF1EZCwydjgvWmJhTz51WTAyZVFNaHYuQk1OLkJ1SGhZZU9nNVkwYTFddFM1WSFKSClFQ3o+dXhBe2s1TyQpRTkwekp2Yk91MjUhenZL'@;
put 'WWNicCopOn45cSpMKjFQcEJpIVdLKikzcC5IfS8iNDUoP3xPZltaWmFATmRuemM4a1dSOmgyMz9oTDF7UChVaE0xV2tucXFVS29HVzliSGEmakRYdkB5cU9zLGJ3NUQ3MyVZIm8qWkQobWhiaDJSamAoZG5ydE0jeFNPbmYrOnw2MVA1ZHx1cyMsSFE1Pj9IKiRaW1gzMW1gWWE5SDRbK2BqOltD'@;
put 'UHtxa29RN25SZVhoSn1pJj5udD1+NGxqalh9TXZ3OXxATzhrYGovRDxkQWQkLCJfaFFqVzR3KzJ4cCxUX2NZIm1NSWp2aSh3Z1Z3Kyg8Rzhye0VRNEA7ZUdbS1BVJiMsR2ZiWUNyTW80QGZOfiZvMncuIiYsQl5OQUMsZUhYW2NhO0lhfT1pdCw6VTJNeT9ZcnlJZEdJODMwaF82c2cqeFVyck5F'@;
put 'VFsjPUN0YzpGZlh0S3Q/anVuYEk8RndGclprSSw+UHxQbVNSVnZQQkpZVUUjLz0vbl9LVTtZbUEhMmhAWUMwMCJNeS9KbGJPaEguNHBMdW0jO1twOX5KV042YTE6ZjcjeEo0TVJjXV0mT1slMnZMLHQ9fSpQZVkqe1NLKGlrU3R7TzchezNUe2FrJjFkN2tVZS9KTUssfChXM1RibSQuW09ORUJi'@;
put 'IjQmb3xFI19NVGwybUwvSkcldlIrUDlRTy9SW3Qsai4we0paZzc9bzQ4SV5ASFM2cyxTdmNldlpPQC5KOl5GNXROZ3g7ZHZnJklxMGJGKypoKSxaXWwydFtfdXYkd3NEZjBYIzhXT1EkPk5oQklna0N4K0lINkk5SytAZyM7IXJhTDYkeTJXfVFAZHM4QUcqTVBnIWchbVRMTjVOXjU7T0VOWkMw'@;
put 'VCxLQ08/QSNaUSZAITY9ZmZUbkhIMylAdGFwNyZJfk5QVF9kITFNLm8xdWVZWyZFbSRFN0clL2cqSTRqLHtxVCtEWH0vYyZ2VXtZKTxsRVhqVD5gSnEpPV9tQ3VISUhLZEhlaWV6OSJ9PlZYX2pZO1leZWNAJElJbj1WQE5sI09XNmFfQyY5YkRwTGh3e3JHZVM2KG4wRDJnWHh0UG4qUExUKF5k'@;
put 'QFEjLykkdUBtX00wTDFjOVhGLHJaZCwweCNEREJEOjJyRiZvcjQ6L2J2YlFIdyZxIT96cSYwYjUoWk48dXQqIzFYZ2l8Qylqbjd5aj9fK2tCaCxXJGVENWxkcD81S1Asd2BdaVlkb3d6QnR1W0xTdUJ4ISFfSyI3N095cTZ9WyxEdz1HOVBPUWpOOysoKT1QaWAqRW0jM2ZNZCkqc2NjZHJ5JV92'@;
put 'cSsjUzZ1KVhOeCFJLCtydm5TNjlPR3QzXVN5P31xN1BHYikyaXNjZnc0VSNyWkYsQjhbWSp0bDdlPVckcntPMm9qdm1LIV53LiEzelhqWXVGTipON3J5Q1tdcnw0Z1ZjIV5VQnBWV189V25VNz1fVFdWQ0VsUXBELklMYjZUe0w8ODt4K2pTQFFBZ0RUaFJ4SWVmTmw5WlZ7S2Jvd0NscGJPYWN4'@;
put 'K2Y0cnx2Zms4QEBKM2djezp5eWJwW2lbJVslW0U6OjZuQklsSWZuSmRIWFBiYHdnTGRVaERkSlF5eT0zOUBHM2pBVF5MTT9vQipCRyg6QSR2dispPVBCVE8pfXtiT1EvZWZ1Wkd3U095UGlJZ2pwfTVVL0ZyJjNpTXtCJThOIXVWL34mNzp2fX1vaWhmR1NWeGIqXkZEclovKCRpdyM5SStFPD1y'@;
put 'R05TIXV0NVgxU3lsc00wIUdOU1N5fGUxOEMhS1dDUHVQdn12PzMlS152bnVIYUlgd3xlWW1yYXNeels6d2Q8cCpaQ3NlM0xbXnIidFpFL09UR2pUKDhRQ157eSRMeS4hdTZRQCZBQ2JqQ1ZZYUEsTDxxZzVldF91NlBlPikyKVlGaXF9IUZbPnZ4aXNrdmBCeHBebV9TLnJxOyJQYk0vI24oJipT'@;
put 'dzVlOCR3UDxufiZGO2k+WyxKL1AsLkFkQH51cDhRUmRMNFcubS9KW1BLSXVVVCp4fnE1OzpGMS4iJiImS3tRWnVvc3dBfS5RJH1mcnM9I3wmfWxufVNrallDVz10W3RTTTM9OHgkc1FURXtsNigyNVBPVjJjWE4zeC48eTw6biNgbDVXajFiVi56NTZbWkVkPFsqW2RjdWNxWDkzWnRpKShLa1hJ'@;
put 'YmFZclZkSCw1ZD9eUVM5dFRRQlAzPVNIMXpMXjJHOm4/c1twOnBFSmlFZnxwV3k3aDxjKmZ0bz9gKmQ3SnNaLDpva3soPypuNk1JUXhVYUMoLkNTPHdnTlM7TDxlOEkxbGI9O3ZrRGhMfE41aW1gSktaRzhTYWR2Ilk3Wy5gUiJXYn5TUHcqWz0oXzJpSTVbZU1za1Q9Rm5WdkZQNyY1R3ZSTFpO'@;
put 'WH5nV1l+KjV7MDlPKDtwNjwlTW5LcHNUUEhvJT5RVyFMLlAhQkJJdXRQR1pdeUl7ciFjTEhOZGRAdVswTjhYeCJRI1NfRCVCdSVfMEEqaCpoTToyNyw4UDQ4Xzx7cjB9TXh8SCswU2Z8USxLZz9tODReLzZTcER7bjM6WWhXI1FCMSZbNiRpNihgbDozJT4xamxNMi9rSzl6LEFCbXcpbm1wSTt5'@;
put 'JHx2T1IhWTNudTgzPWpIKkVrWTJBRnFAKyw5bSRdNiNTUTVtaERIWnowenMsPlNrNHtRNztWLns/a1p+V0U0JmhMPSMmVlEwXnlrST0mfmw6MlUhJjtXXXNZPUY+IkoxcDcpJElsKW05NE9ZKndnIUMzXltSflN3YGw9WUU4cmdzdit1I3puez9aUmtxRmYkcmdzTmhMYGQ9SHVrdyhweXpxUzZY'@;
put 'ImZ4OGZIe2RrSFY8RDZnMkEqXV9HUlk3OlNFej0rQWxJT35xaE1POCR1SjdkZXs8RUgpJFJ8ci8iOHIsIUhySSlnUDhmWDwsdEVeUzZYanl0WnlZWSNOMzd5R0p7TUVZaUdRL01TM0d3bWwpczhbLG0vUGtadnc6fDlQWnRQJnZQbDw6SFJiKyVrTUZlQyJpL0BNdHliczNpTUwqcn55TUFIQUI3'@;
put 'WyguUHZlPXx7aDFwMkRtR2o/dzN1S2NTL2dfeyY6aCs8bWBZIjE1SX5DYUdHVTJYUV1FZmpSK0tSO0AiKGtAZUYyXlY1KWs9QDFJaU02d0dUfCY0bnp5Zy9ja0xFdkw9MDRwK2clSFdGUnQzO3JAZUYoay4mak1kMysjInVtUkQvZEVpXmRjdDZoPmx0d29RS1heK1dEJmIjUS5ycVQwLlR9NWtg'@;
put 'cHJERURQQjZ+QGs0ajdZajx5MHU2T1NvN2wkZkYsIiRJZWFrS3E5MCM/WUVbZ28pYVhGTlUleHo8eDkheHomLGVmfW5+aFgxTDQhMmd3a2N7b0NXU0JuYzd+YStLbntJb01LenA+Omg1KVFAeDc1aXs/W3oxWm4pMGlEbF1jbDpCPWMmd2NXaiNTfnUlVFFCT0tOM0dwZEUjcTlpcDFGcDQ9MyxX'@;
put 'UGtvO29rMjN6Wj5yRjQ7L15JT20rRzVCSVhiISFpb0VQZGRMNFRgSltDLzxOKiMibF0wUTh6SENJJSFnKG4/bzhTRnIsXzVLJT5gOFhhWDZlTzpTJC9GfGNPaE5TLHZLWWY+QFEoXVMreCw7R1NQWVFOR1JQfXxnJnYxdUd3IjhQMSg6aFE4SnI5OFl0OThVXWcoY25rbks5dClUaHA3d2RiU0FD'@;
put 'e2kvQGpaJkA2byt1UFRBMVpSNylURWtNeyIlYz8sZX1WeV1lQV9YKSF1PlUrIUFCalo9I04zQz0xW1BNYWsmQ1ROeSM1QzVtaD1AdTp4P0AhSWRwUGUxLmtrNCRNMztpIlMkbFdHYlFoXXZacCpyL2VZbUN7UE9LMXh+MD0oVVBYeHNtI09pfFtBISVjNz1vOSRqNHNSWXQwZkkreDJSdjEpUEI6'@;
put 'RyE4dHwuR05Dc2VNaTolSWlQU09AYUZoRVtlbVhhYnZSNGRNaWFSMTEvTSJ6NTgwL3h1MnhEJnA6SCkxREclPT8/JGU8bC4jKi5JdSt0LHpAXklOcTJRSWAqbDYyZWojS1NLYilDa3BSalp3OD98LythMHpObDJEMD5oTS5xWD9ydkV5Tm06Y0FEWHp7cmRPQ28rN2VeYGU+YDk5IV9pYG03NjtJ'@;
put 'X2t3V2pLe3VtYHNGTlREZEhCJXVJZk9KTXlFXiVSdzlRKmJFP3RjVmAjKX1Iajc6OzNzXkZaZEx6UkpMLHJsQiNxfDwpMzdvUWAoN3lgNSRCRCkxcXVZd2I1Z1ZdeDdkbXFBci4yTmBCdUdNdHtYSFQ1MnFXaHtZYjFzcG9lNGElOXh9YyZXaH1xQ1pOTyhGbSlWMz5vYGB4YkpBJCQkUVpCTmAz'@;
put 'Wz1bSEsyKEx0c1NDe0poRGo6ZU1tQnQ6TFJQWGJtVX1xd3Y8YktNSDcud0NYI1lLdFEhSDA6eWlSVXFVM2Zvd3UlOGwqN3gjVyNZI0BPQ3o/KkYze05vRys1OSNuPUp9Zz12L2RIKzU5X31UMzV4O2lLQ1JwYGBFeVd2JVtIS0MpbDRmTWp0TyIkZyxELHRVfC5vKXM8bzM5K1slY3hCOEIma215'@;
put 'bGhIYT1VdytvfmpuYVlDbHdGWGpbVUwqQFZzaCNiNSxyb2VSdUciW0RsTj17Rkl1JG8sWjU4ZXpxflFDancld2xnVCVfKU5kX1QwOkZbP1ddY3ZaJnhIJEB2dnZ3dSRVajZ3U0I3OW5QeSF0ZiZ0c2pIWz5yRmheU2xSLmxXXVBHOWtjX2hUPjRMeFgzNkssaTJ2RGpXTDJ1JiNAL2kjQCJtTnlr'@;
put 'UV48WUsxT0VeNjlQKyw8ODxeO0s3QCU4fEgoRiYjXzhvLEA3LiM2SmpbOCQ5SlAqSko4bDhhYEM3Lm9JM21eNEN4Zl1lPzwvZnReViY0ODdDcX1VL09vMktNOEgyJDMoSm1QOSUzc3ptYDYoYVgrczIuRWFXaXE2ZVlafFN2T1J+O3dbPF9na0NjPns9VzRMTVAvNz5iX0RXYD0wMHR5en5WfXhw'@;
put 'TzlxKTFyKTw2I29tem0pTk04TVROfkVgUG5iZSxdWXNPNz9LWjlXRUVoTTkldFBhTy9FPnYjXXpgdChwKyNfRj1ocHBHXUlDZEJibygmSnsxQFA8P0tyUU1+bmJiIVFVUmguaG5dc31mPE4oNGVSNjVbRV1tKl1gaDRoOGklZVVvbyRCIUtgPCVIS0JkZjwoO3IiZz5YTmtEJi88YCsqLCR0WFhh'@;
put 'YmNaMTZPQmlgVV0mQnwlMShiUGN7cTRrTD58dztYRm1uTTB1MVlCQyowUCk4aU9zYzBbVSRdUVJxNnoyRj1oKWVkfk45VUw8MERsbUxSdHY7aj5kZ1gkMSpneCxjSWhDe0FUMSpMSzx0WHgxK3NScDhuaiZpL04pKnY2OStUe2AmejlQO3kiVC5YbXRtUCtOQE4wOWZfbF0rKHpdNz1hMFNTSTBa'@;
put 'Nm5bblMqb1FbbnphT0lgYTFqTSVvQC83IzZtb2JXRTcya1ZJbixRQjx3SHNrXTtfWVFCfChNSzo+PDM4TSh+RkM3SGlhclt1M1JRbDQwfE5zO2t1ck1JanIkRWdjTlU2MkkuVTpRKXAuXmNGTHAzYzgoMTAhfHVffnxWUU04dWFlVzdCKFtLPz06X3lOS0J5TSkrKjluTXdbMmkrISo5bjhzKmBI'@;
put 'bWJnZUJRUklhVUJUVmU4RD5BbUhXK0B1TEQ9c1czVDVsUTg+aS9DV15BeHs4I2VgMlt5QkkrITZ0VmspcFVgYUtYaC4kaE0kOiMleUBTRj99VnRnQlJAcntLSDRXUlEhSEpbJlRaJShJKVgxeUNJKyFqKXpxOHxibmFYfVBDN1RlNURxXjYjNFYxJUk5KzssWDozSk8mWEUrOW5yaiRFbV4zaHxv'@;
put 'OXBHNGg0LkVhaXxgXn5tPiRZYSFyZjZZZiZGKkghQFZ5cSQ1PXksKD5jMHdIckcwOyJLN1Btam5XN35vdWB4V2JiN3l2Y1UiOWlrJFY4bVZHOzdZTSUjYD8lO0g+ZnxmIWcyNiJHJU82JDhxZXlBal90bWRHZUBzQHZzVUUsPV83fXc4KEYjLClSNlBuVkBqQmk9Kih6QW1lOjxXPypMS0wiREdW'@;
put 'QltOQSM/LDdESlFdWFBxPXo3cG95PHAuJlBCIXRqaEs5Xm1RKHxVK149ezJbe0RyLGhvX2s9RXxSSXgvaTQ4Kkt8UUJuKmloeCJUa1J9U0cpSGpCW0prRl4rSy5aZWVBV3hdbHM6MkxJRTxmdUdkczxeLnFaKFFTSiNYMXpfT2AkNnJeLEJbJnldNWl9OikkSW52KGEiJVEpVEtKVG5hcCNjZyZN'@;
put 'PzB2WU83RGlpYEozdSlQL2Y9QzFbOS9KQ3BQcXtnQk9CNUhmIlNgMCRCUyV9Ly5QWCkweS9GXXdyPjd5fnB7RCNMNlVQekUqfVZeWGpxMGYlfDtDRVksNVprdiFAKGgoVkYqQEArYVFhZStDX1ExSUchcCtiOTEpZGNTejI0ODVlMVg7cmkzRUY9eHhvLGVmUyVAfDhGfl5+QU43an43YERNPiJM'@;
put 'Zn1uKnU2Rz1hUn5dcChmXTAvU0FCaERvYDhGJi5wNnRpSUk2dXpwY2wuRihyInB9fHwwOUZwSmZVcFBqTi9GN1E9ZWpCbkIhR3dQS1glcTpeKyxrSV1hNiY7Pn1vaSFGYHNGVy44eWxzO1gydywoPmMsfCIpbEJ7Xk1AblBuLllWQFVkOzI6XnQyNDVRSDZeWlY0aTRmOlt+QGJDR1FTNDNKRDdP'@;
put 'ZjZYSG0rLHxjejwoelBJZTVtQ1JnJTpqS3FsRCNmcj9UJjlmTnFfZzpTSVA3bVU0OV46XTFCWyQiOyZwW2hMTWovLGUjO1ZOPXUrJXN3clh2ck9YcHY/byw5R3olW29XZ1NWXiNmYUtkeiRrYmZ5PlAvQU09YSZDcyFIfWIjTDRkUiJ1JFFKVzFIJWdzSntuW1s5KkxhTSx9TUJ5QitWVXtJWmRn'@;
put 'Ui9ndDIrYEhtdVI+IXNRe1JCMmVofkU8Z3c6WjY3NUd6JFs/UiEwMC8jWy4ydnAjdFNrVjFDIzdNLm8meiJae1EyTzdCIT8hMyFPYEl7PyIxQnI8a0c2YT5HNmw3cyVsNiRpZS8zUygzNVtBXmlOK0w9M05SfiVoTzRCX1YseVZiLEluTTRCbmNQbElwW21jMHQra21NRipqfDA7U2MuM2heNmJf'@;
put 'T3xBRD58eE8xUU9GXTQ6WFFoVWZWSytjYEpyTEszPCxCLjxaOlROKkUuTk52cGh2TSpDaWVmTVMwMGBbcEsmMU1neEZ2bCQyRGp+dnVmcFtYdT1HMzpjMWNlWjd1diFHcXdVQmljR1hYZXhmISlmSzNRWVsrbCxgXjZLNHI/L3ZrIzU1dkhgJk9DPUZXV1piekBEaztVQjxvPkhkcj9dbSYqV25M'@;
put 'Z0c3OUlKTH1GM3NGZDRWPFM7Kn56XWFKLm11QUFAUWREdigqQjlGK01QZjUvMTVwYig4UXRDQTh9WWUha0xiVDArWCUqLklrIkFBQ0FBQUFBMUJTNkZTR3N5bF04P3wuTWVfTmtQVCxzIWRCRU1uKT1jM21+X3ZBTlVMIXMmeXpFcngkWnljZCV9czh0XU1vSVs4V3RFfDNDVz5wO3Q9MWIoKWwj'@;
put 'Py8vdlBCTzcpXT5va1hhOHpoNFJAbmNxeT09RH02diRnZWM2NzR9TktFfGdbLGkjfEo/dixpekFzKl1qbGYlLmY6NDc4MEBqP3dITnVibGw/d29mKEdNV3IsdFk5NT46X0QrOCxNfVIiTHVzPHpUb0s/LjFYWCl1cWdGR1VjSn4lK31Ja3FCeFdgLipvKCVId01OP0dTKVJfMkkkJkZlfGosNDMz'@;
put 'R1RXfXZZUkcqZ3NGIV43e09gZ15qbXhRNVlYcj9sdzkyV1Y3Y0A9WFZyNDUuZ3NpPm5uKCU5KUFtSFUlM2AiWVspSUVhQ0NLPzUxdj9TRF4qQS4qZml4SHRsby9udChZQ30kNFooOCltPDEqXTVZTDBQYkJXU2ZmL1t3JUldW3poc2wkRD5oMVBManc5cjJPSTg4SUAkJXw2Nz8oLGdCUGB9K2kz'@;
put 'Tj0uJGplUlI+OH0wUmsmR1YwKipISWZeUGt0KVBdcXFNcm5GISN6c1VxNlJ4ZSU3XixRWWxEfV4sclo5N3NOajpIcUgyVXoxUSZKIkZHMU8rfVF5O1N4UEdafHZWcCUjemV4ZytxZDpPKVRDXmxQREo8SjZSXkhNK1NddUs8KlFfayNXMTkyaHcjKiZVM2BVJD4qU0Neayk7fk8vTkV0cHlVYFhl'@;
put 'bzZ7bTg3bDFScjFNYSlWY3JaWmJGMT4kaURIL1lBQFhHRXJBSFBjNW46TF5jWSZgUm9oUXIrPnkmZGJ1JVojcn0idSVqJkR6NnghfXV5MDkrUTJ2PUdWWWZBdXFtbGZ8KzU3bi5uLjxISy8mIn5NYEx0bipwUkVtOGo9eGxZdDlQV0Jlby4wTSM1Rl1wIVBrRDdNaTh0UCxFXShMNTVXMVM/bnpA'@;
put 'Vm87VDhNKXM5QnFDaHNAUWlWNUw/UyY8PldESnFpLitLNS9ZI1B4MElFeko3aVJpM3xxWGU/bnU5ZThgNX5RYnJDPX4yV21iXy40dX5yO28+WVIsU2pdLGZyJE1DKihQNm0xa0RzTEQ+akJabypFSzpXfDd1aDQ7Yl5xdk9pQClPSnFbXllGeHAvZkp6en54VjJRM21CWkc+JXxSPVlxMFlpWk8r'@;
put 'bihCKHQpeyttfTtsLjgyZyQqLnc1WylOI2tFZEZEJDFgRUFmP08uPkd6WyIxPkosZFoxdCF0UzkuZjg1LEpFdXovdVQvYCNsV240QiY4Jnc5KiJOJn5LcVpwTCR4MjxsJUtoL2hKISwxPEUhe0JrcVZ1bSl9WD0rVG5hIWQpfGJlI1dFYSkibCF7N1lKeiVpSXhRIVE7YjZ0Klo3ek8jK3tkOFFn'@;
put 'ZmhpWXU+TGBeRVVHS2B0c1VuMF12fmA6UUNQSisuNGQxW3U1RzR3ITdDSlQ0VVtkIXNtLjZ4YHUzcWVsYj0qKXlwdH19I0NwUFYiP3MlRyk/NF1SMF1fOiErImNsPnkxK0FyXzhPWng5Vn5jcHEzZXIkNl9WWCVmIV0iPDVPa3ZRYVo0NlgrIld0NHdZcyVXWmo3OnVMeDp4WChyXXUrRSE9fE1R'@;
put 'WWUpNFMsZ1IyU2ArdnZCeU8kRnlYWmY7O0RnKDV2KyprVCFERENNL09QcF5FUjhURHR0MCh2S1JQKE5bLFZrK1tJUzlldC5HaEFvRmNZTlQvJVJQPDxbIX5PY2BNNiFWPmErdjRJQ3AhLjJxMyxuJkI7eEFCZjdwYEdlXW1zS1ZkZHZSMHBTS0hefF1iZmlNRyF2TTdlOk9UZjhhK315Y3xrdE1E'@;
put 'byp3OkBrczJ4XmNzYmMvPyJ6TG9OWD1kTWA0dnN1dm0sXnRQeTFFMUV5XmpxL1pDWDJbQGZnQVVPNkg5JEQyVUVZZ2N8L2c6YHpsKS5gd3Y8cGNWIUdOeS9MeVkqOE1gZShWdF9dOE9aM2AuUWEibkp7QGN0KDclTkJFc2xMazt4M2JqKiJ1TjlbVkk4OFtbWilWfVQ5Ym9OMjU6KW0uSHczamc9'@;
put 'TDJiRDp0UGApfmIkXTsqKT5BMEJsRCEqN3RrMjxJMnZ+Z2NJVUQsME5yZG9hWkRnUW8+bkB3RT57RzFSJHN9WzpHJn5qX01jcjF1b21+eiN9bnFMIygiQiZpPWpZNT1AbV12KnlUdUVGS2wkRDdRUTQrbzsjP2VwZjVzY2c5XlJ7YF5kYjlnQjIwV2ArMWt3YW4kR1A7N3E5VnA5YT9AN0YmJjBr'@;
put 'OHVMPEVJVyo1UFI5REUucFM8S3RJPzttJmxAKjI/aVF5OXRyLmQleHlNOTJKXyxQXTJPaEFrRml4K2NeT31VSHYzbkMkfEQ4dz1sWHxTb2J2NkBnbWpKbGliVT4maCFsZTszWWBZKTg7NSFpdDlOMlt8JD9aPEkuJTwsbkBUKiRMU3BhJStJXWhFfl9GdnZPMHtPRypCQj06Q1cjfEYlajNIQjwq'@;
put 'JFFAKlJ7ZDpnWzwmL1hLUHwySDhIJTArdGhmMixOTlspLGwwNk98eTwyVXBXfChHaDsuR1lSXjY0Wj08ZmNEfnV3fkN2JjIoQ2BiRUUkakt8XUN7NXlDLGVVPC5qN0oudUIuPDBqeU00TGJ4IX5dcTVTVF9aRnYycChZV25RY3NwTkI2S3cyayNlK1d1SXFlVzQvPUAlZ3dveXdudVMwbXM6eD1v'@;
put 'L35ae2VPN09Ocn5oPHR4MDBgaFhoe31gR3N2I2FTLmszc0ZZImdyIWUyfjk1Zy5sVnZmYjg5QFR6N0JjSFlEIihfe2dSRXZqaFlFNmFnemRsXk1weXI1RV9iRGBYcjNzNkRIUDo9ZWIrSzpXY0YuT3FPQ1NVVT9mXVlmZWNobDlOTjo3bX5eVmJ6Z0wlPk8wJDdiVSFRbCg0UzZwR1AjYnhaajQu'@;
put 'UTlfYzZibUImKmZ6O286OFt6VDdwZmQ4V1A3Z3M3MFBfeT02WTx5OX4hRlNeNmxyIU5CdmBPaV1YbDohL3kybyhxR0slTWMsZm5Ga1tULDV4USpxSGJ1L2Vja2srPGpBeFF5SUZ6e0d4c0d4cHBdQUY3RjxjZ1BZQ3EsXztXWD12YkVFdncmYi5+MmBIaE5mRHNUPmUrdFR4KzF6WERuSHwlPlFJ'@;
put 'T3JyV3FgLFhjanFIODg6O0JPKWBNR3o2VHNybnFqMG9MS3l9OkN6aHs2b3ZFI25GTFg/P2RgWmdmXjhlUCx7SnxGLm9KOmBsLyVQfUJmWVZwL0BiPH48QDUqPG88O3dwb0x4P3hYMTZ1bThtN1hnN3hMUDlKUn1CNFJKUHJsQnM5bDB0SWdpXyM3LmBMWTB6eGE2NGNWfGxlOVtGKSRLPURRXnxb'@;
put 'ZXJOfiFfQTBNUDhodkA5PT1AXU03Zjd6QEpEOTVyZmtZM0RmL1VSe3pgQHg2PkVHblVWMGJkd11SPmhUUUYjXTdtT291TjROTUl2WU82QV1FLF18VU5dIi5RSWlvcztJe3doQ0BjV09+ZU4vK1c2MHIvVkReYWpzIzJ5JSo0VHphOT19am52RClVbiRTKWYiTSFiTCtwby8yRU4kcUZtIlhRUnBE'@;
put 'Umx2XXZWQi5AdU1FNHBPMyR2QCZjb3o/NH5bbiJhMCF2MCUvLnlBd2o0eG1rRFMkWi4iSUhZXVtmTCpudF9SQH4rTjZ2NmVqPVVoQ2l5TWBBZDVZSlZqcGgxNltUbmoxSk1BOCVDNmdCbmBoTVdVa0tyJnpKNEdoRGJvKUEvPzxXTGAjKm9gdlYrMlFieytPeVg2blV0WCM1JGxVZTxbL141RE06'@;
put 'SFgqMUB7c3ZpTHgqUD8vMX5zJTV5YFNaPEV+fi9ecG1dODVkZykmNT1TUnEqclN3dU8qTGVTQDhJcGdvSF53NWF5cGRaTG5CMmxGPChlcFRLI2tgaS8kKCI5LjhubGxFcS8wfXgmYHhSbDw4IWx4ODwyaDhDYks0aTF6PSZRayhlVzt4SnU9cTM3QzxWZl53aGtJVEJgLGEuKHgsSHd+WGRGaDxo'@;
put 'eXk/biJwTjhUTkglVDpeI0RKaCpYWGNGIWYjUj8qZW1eLGpLRnFLMyQlW01vWVRmTHVBOF5zKV12OSpeanxYPCUseXM3PE9pZ2k9PEVCYDBmdXhhQHxtWlI0OX5gK2xAXW5eWzhKSSlYVTN9bURaI1d4eGN1YldyWzhFfkBiMngrRTlpK0lDaVorQ3dIbVZ4d2Y9X115RW9hX1dVIihHMGdBa0tI'@;
put 'PnNRdFl8WyJOUHxOOitvKGR+THdUYElSfFU/VnxYdUwqbiMkNnt8O0o/IyZzfSwvZ1hRKF1yYGlqVFNmKGlgP1IqKGNpYEhxRHM6OUczWkMmUDNkRkwyW1gjYzYxZ3NPLkFfKHBrbTA6eE0wfHM5WSM9U0JqOndHTzlzeyRDPGxkZUtTeFBXODlGbWFKIWFZT0VQP3E8RkNUfUEkRTFxP2VkI14s'@;
put 'QCFFVXE3YiRUSD4kNisiOykuT3JrekhCXl1RTWssKkk3X2EkSCxuLlNFVktedntbRWwxbiRIcFNfMCNCbXpSKykuVEwvQi5rMXNjYTZ9Vil1V0o2LyszKEhfckpnOElZbCtNKXZkQVBKUGtednt6bX05JUBXey8zNDxvdTxNajJWL2tKSnd7MGcyZClodS4xW3pWUUBXZjhiWVV4Zj5OcD1RNiM9'@;
put 'JnNUJStxI2U0dnsodV9NOl4vOShGT0RHNGlyO3J7ajlycHh1IVZtRF12dGBtSGlTJDEqXmFlKjNCNXVMW3pYe1RuUSRZLzBVOlkhdkRee2hhPiFyQl5ENUosekdpTFkxY0kyS09GXiZNMHM8QihmTEolKC5PMWtLPjdDMDFQKSolbFs7fWppOkltNmU1V244Rz9USFAjXSgjfi8vckR0QihvfGo0'@;
put 'NV9qK1NuWldVdnh9S1JLYUo5eUZYUjs5SW9pKyIqVGBgZyQjSlh4an4ra1M4N3t7UlkzVzBTdSFSS2QmVDA0dzdqO0gwWX1oXiJBbUhMU2w1eSMjIyVoVGBaXntkTks7VW9sOX5NW21MLFgsR2dWMWZKckk2bzw5WGkkKmNocm4ib04zbE5dSV5PPnRHQlRtJDRMSkVpQ3dkcGJDMSNtai9gT3Ri'@;
put 'JHtpSXElOkExRShENVR2MVBaWyloQ2guNCpPNDYrdCtjY219bUBLVE9pSyF5ekR+TTVvTzpiJFFXRklJV1BGMlNMPG5ydyhMQjhlaktTN1lle25qXmpdO1l7JlpwNzp0dXgvTk9RXm43JlgvQWVyL2A4OGNFVWpkVVtjfkBSMCVjdnFpMjRrSllCQShNfUY+Q19OaXhLclRQLihqclpJUGd9Rjte'@;
put 'Lk9EazMlLmQpWiNTbGZ9bzF3fCtKWU1hV0RSUE1TZl9+ZCJMOTdsTSgyPzkvbnxERjJgNVFqKVJgNy49VypwXWQwO3RzYV9KczN2e2xdV10qd1RSWEd6WHBsU0koelI2IVlTUnNCWWgjTT5EI1NiUixvMjUyTVhAVUk4RjQoK2I1ZTxyaGtrdGxJJlldeC9lUmkpNm1nOkYvIzB8LCg5JGphVltW'@;
put 'SG5tTFVyRkA3Iy8maVJraEVMYGVYITUkcFpRWjtMaHcoUXVbWjpHe2ooWXFFSDU9PixVPUg4SSFpQFBNV2YsUEltRihSPTEpWHhwYmZZUGM4SyV5OkAiYnlPQ0xVaG0ia11UIXVHUnR8MmlpI1tQPVY4VlhbPUdddSpMN34/K3V0M2Y6Mzc5OEtZdjpsTDpDLFRVRjRed2B1KllBenpqMjU8KCUq'@;
put 'bmUrKUpZZHRdRHdae1A4LE1PUCgoRHd7e0dFYEtpV1Z2WDZrb258O1YkbHQxaURfIy4hW1hwc3FVcGwxayhyPT1TeTdEak9BaVJ7VEgwWTZHbEs5NCorSyE9aFQ3cjFhWVpYSXNLT1tlbVAkP1dJVGZvWWdeOHxgcCtjODZyO3lEXVohej9IXi5wdTU9LktiMiZScTxbakY0Sy55VUVlIXFOYkMr'@;
put 'bFBuMGp9WE81ZGI/ZktsXzBhcGNsRUB6eUVpblBST0V7blErb2lhc25GOmpFNjtMVyJVO0ohLzguJUl0ZV1lfSElazdoOFZWanAuN14/Z25nMVd6N0EuVXp9OUVVcHxqPz91XUJiSFRPYWFuRVs0TTpzb15EVUg1Z3VXYmUsUURbYXc6a1QzeishVSE1dFpGaT86UVQ4KjBJXk8oU0N8bSldaj5e'@;
put 'bT1kTlc8TzIrWUVHSlYhb3diRlVPZzZTP3pEeXx2ZU9dcDQ2WEdmbnlCfntCdnBWZ2hwQT59bn5AUiUkY2hrWSE9QDMhbzlxKEZZdEo4NT07KHJSJElNSiFrWERiTmx3YD5rMGIhcG0qRmB8KU5MM3ZMXmU0QDs5U2x+TTNmT01lQnQwWnVIaVVkeCthWkhmTGwrSCJeekRsa3IjJSVubS88cW9P'@;
put 'ZygmO1ksPTtiMSojbC5FRygiejsuSzYsUGduOTEjfiVxSUNgQTNDSUU3JHhKYng8QUJ6XjJEZjhEJHtCT1p6bXNSZ3lHbVB0VzxYLj0pV1hbMnYxNFRPPC49fkVTN1B7fC5nS0o9Kz9mNmd9fGtHTSQqQVBmYUE6P0d0bkhuV0JmZnFTaXN2bXNlTnJgM0JAe10xOlhgKUUhazZ1TWcjKlYxbUJH'@;
put 'dWkoK3Y+YzZsOiU3QSslclUqZWxMVUR2QlRuVEZhQ35HclpRNmFVdFgwaWlURCJpeClMSU82Nng0aW44JUxvUj9tNzJ0NiZ9RkVvOGVKSkdtblQkMU0/cUsvbGY9cXBOMmw9ZVQpSkMwO0slaGJmLEIpITMuYSM3RDljfiledDwvSDx0Qz5zSGdQMDcxWyJhIys5OSV+Rkc3biZuZVZ9XTYwZnls'@;
put 'dFljKE90TGcha2B+W2Jpb1doP09JTWRsd3o5fmdWL0Z3PSVwXnM/fURMYWxDX2AlQGBeRStgNTtVNHsrUjNlXl5HTHxKPl9pVWxGLDhYZlBKfTE2TXlwJUo4MSY5fUNUOEFQTT89W1JXa0h3aCN7KGxZbShXPmQ+bDNaVCZkQztQUnBxQmx9LCNlOW50aVVwVn5XeXUmXTNwImQiTzxCOVNlbzE4'@;
put 'Wl14dz8xJmJhVW5JKTI2IytlWVpJcUF4PVR5Ryh9SEl2MD5SWj13VEA6VzM5JjgrV0IwPCY4VXIkKG5GP0h3Pj87ez53MVAzN3E0X3o0OThLdzwzTjZRaE4oWWFtd2M7Qmw7c2pZJlteZHVvbn1HUy5vUH1dOiJ8X2JYei5dLi82aXQ8cm1XUHw1KkQ7WWYlXUNze0lxViMqeXk0KyxIS1ZTdnkh'@;
put 'dmg/fU5BdltkclsocjVecXdpPk1kSCNAb0tWbVplMyUzY1NPQ0BKQX5OMm1qKlBTWSFDLnF+bmE4KCQ8JXhsbW5YKyJ1c3kmPVI3PHNlVG1kPTkpaF05ZGZ5cmtSQGFkZ281JXBKSVJzZjgvLEklNFtZKGQ/cEBJYVEpZExNZTRFLjIwNDY4dCZLSV9aSEQoU1Z5Q2omSEBoI2U7ZTQ3I3cyajti'@;
put 'K1VjS3tXYmg+TyxKVHxLRWpMOFhELlFMbTsufkN2W2gjdzpudHp6Y3FuJH0hN346amNMeXtDcS9PSlomcHo1aC5QantCUmN3cFdJVSNCUS5AZCVTQ1o8aThmVVFnZ0pWU1pbZHJUaHxvNF0lLEdiTztHakRkemtkei9AQ2ZneHpSc01JWS8uclpLQCxDU2h8fGpSY1NqYjc+djlAT0lbYTtlNFU2'@;
put 'bEVocUhge0ZXIjFfT28zcSFsX3x+UChdIUx5ZExMU1d5N0V+I0UyMiV1VzJTR3JBamFbfmkjbi90KiRIVTxNbjkrfF0yTVQuei88Pnk0O2BkKTRscjg+UCJVV0hUaTJ0JD1DanQxImRRNn1Fa2lhTShpYTNddDJdclhnPSRSIzU/IkVRNCJMYWQwSU06bH1EJkVhbGplYnsoRWJZKmd5fjBAJj9h'@;
put 'XnI8ZEUmTVpgYjJdYiN5Q1I1OHpjRSJBRCNRd1IzQzpmJXNZeXhDTjczLHReSWB0W0whImQxTzY+KzR2PkJwezg4PHxmNzBXU1R6eyo2IX54UzUuNkVFaWI/JWF8aSRAVjpnTldzfH0obHZCWzxNbTMpYzFzJUovVm96MzNpb0dsSyxOWiJqPig4QTxXWE9XYEpTQmQyd1RbJDReWFBFWWQwSVVG'@;
put 'VTVGPlQ1SWhUUmlKMS5YSDR9LHdEVz5MKTU9Oig5W0cvTSllaDhzYXgmX3gsMUczaWZhViRYQ0FiZjIsM2Uye3RHQC5GKHRAOkIvdn0zWC88PVReVHF1c1gjTlBxI04pe2FYP0shRGltQzhLIyFaImNLQjRnL0pAMmlZbXdvODBbejNIVlFxQkNkTlA/UXAhcCRURHd7YTVdOEJwNGdHUjU8bWs8'@;
put 'ZVBAJCxdU0Y2JSgrMChLSmgmK0ZwQ0VoWDlaL10pKURtXyNVTUw6ZW46WmdBUS9ScUtaLC5RLyNAcDlYQX1lbFdIR3RxVmFZeERXWyxjeTl8YEp0aU1zLEAxNUpHUmZLWjpVOm1AKnVROFEmPj1eY04vZCJ3RnpwQHN6NHtGPXZDWTxeZzVnTXE9cVtVO0J0KUlaJCgyNk01eSgjXlJQSVhyPTFE'@;
put 'dUNJRzpVZz93MEZTWWZLO3NROmhHb0AlU2UsS1VDUXVmQkQjVmw8Lj4zLEpEM1RHY2l5emN9UU5fM0cpUEQkMDFUTFB0eX4odnFLPWA5RDtJYWB5TWU0Rll7c0V9WT1rVSlhR3RDflA3ZzV7fWpESFlsSVBgZW8wZD1lPmkkIS8kYiszQCoxK01FZWh3dXwsW0JlLnlLeFRCU1ExRTlnQWV8VGVX'@;
put 'eTtOPV1+LmdNfTt4ciN9SnBQO0dZT2ckZk9qdGI8OChPVTVfSFNSNT9UQUpLRC9UaSZFbUlZRClyN2VOQSIuTHZuWnUqIUcoeDI9fENCanRwQExjfEQ9WEk8R2U3VVh8OX5JOHZIbCZ4dCt9QVcmOX4pRm52Vy9kKHJ0UEV9dTo6R11ZOzUwb0VUSF9Ie293KlhFKFZ7OjNuYCJ0MVgpMDJmd2Z+'@;
put 'MVp4YDttY19vRChXIjoqQlY0dTNdTkssZ2woJD5XaDJycUdSSnNedUgzKTUsbSpWKmpQbEZFbTNEL2FCIUBQX1FyQyYhJkBhe2pQS2lnUX0iQzhGPW8ycDFRaTFgbStnJlJHbDRKXjU7ci4wUWl1d1lCfkkvT1dmbk5GR0ZAcGkheUM+S354Myl8P2U/PG5QJFU0Zk99STVONXxUOjF3fG1vPlFA'@;
put 'YjUkYVV3Mj1kbHZ0NyhuTCJTPSg5Py4rQmspZ0FwIjY0aFoyUz45QkglNGwwdkZTVFd4bV1LKDtBcG9HcXpGZzZTMDJWREpga3UyMTRnOShMKXRMZFEvWGMwLCRdYmF9TV9gKGB7WCU3fTV+OCMyT243YE1yVjVmPSpRRSZwWyZvTWFOQ0IrOS4pWXo2LE95JURda3wvYTFCcD8lZnBpeWNiPFUl'@;
put 'e2BpNm5XSGMvTjUlUy85UmklM15dJGVTKiM1eUNXUiRHbV01Ln12amM9aWFuZSJ7Jm5iXlo7WktHUVJidGY1Z08ibFQiUVQhU0p4MTckKF91U1h8aTcwSEIzQmE5QnxzcHZPYk92T3J3Zkw9L2o6Z14rK1kjZjxhWDBkZHhgKlVDMW9UbjlWaE8mZm59S2gkfXw5dXViW2BYcHkxWkZAWTteTmVS'@;
put 'fjo1KUpfcEQvWjBlLjcoNG5WeSJeKX1JdkJNTDVTZEg3Yn0kVXxgNEdHPUBSVT9TVEJ+bCNmQmsmbEpASURpPnl9NDIudGpxOSxEXlBYO2IlcExkVz9vJElrSVRUQ202SXZiNEsoclNUbn41SGJMWTF8YkZme24rbD1BRypMWk9kKGpRMElNO30yIyFCOjRBPE9XcXNyMkolL3oycVV0fHxBSWw6'@;
put 'aEJNU1F4X14kflVWflRqJkZTe0JxWmMoQUo/Sjl3QDFJcG9dZmd9NyZIM2t0RFJIWWkmYkpFeEdZVjFiUnIiZlR0K3tXQVZ+fmMuWztSI1RsKVl9eylmcmxyZkh5Uj1nMTBPbTBXW3lKZDt4WSlXfm5xMD9aUnxAKSVMVHF9VDRZM2w3c24hTis+ZFFVUi9iPHA2K3o3YC5oX1ViYzUwcGx3elFM'@;
put 'Y2k/VSphVSRaKmthYSloWVl1PjJHJF4ocEt9fkhMJGJKNFVxImVMVU0xUVY3VmMhWWpWfXZXdEBUfCh+OG5UejZCVXZ0OV1RbzI8dzcmVEIsUWsoNUt3bD1lKWxpNlM/K017PGY/YjRRV194YntvVDtZXVk6PTdzPF5+Q3NLUGFxU0lfWSsvbUpUNEVSKWdpcyMvOW8zMlo8I3RydUxNZnVFSXE/'@;
put 'REttNXh2U0E7ajNDJD1yaXIlNCtQVWVdRGdHWTU6PHlhSytZVkIwZDJDczF7WUl5Y00kLGo9ZmssZHg6O3x5a2ZqJC5DJGc0P24jajJIWU8wLH42ejllY2Z2ekh9cjhOd01IYm5kVUoyZlMhLlpVJGBnUSNjXz1Db0Y2WUlLWUZmaWhvbk5+XVJQeUolXjVwQU11ZzdOfkFea2NheXgxciFCaDgv'@;
put 'bVddfGwobzlmT0BYI2JRalpZeDBzL3d3NCpnV2cuVCl0Lyx5dkg3JUBPL05CY10wMCo5WT0oXkJLd14/ITc8cF50KiZJQi5ZdGdEdXsuRz4sZmQjX2FEXS8ydVRfWnpYMkRAQ1phQ0NfMzFXPX4ofTZ8dz9aSjZsI2NZJm1GWWpiSkZMTT1uVUljUEVleDxsMzA0NFFvPkNMM081UCQuUzUiIVtN'@;
put 'R3hMNEBpRStheVplLmh4OHRgZmo2WXxxa0cvVmk8YGIoczE3Tj52ZEUvcyVIcV1UXzN+dEpvaHZ2cmlYMG9jWW9Sfn5gKzhyaHR7c0NBdDQ/MCRXWncobklBMGohVE19MDpZP31yVi50OjZJV0FVMUlNfGBlWl8hYyRGSzpDL0JHYUNDTSJ5RnpNcCElU1ZHV3E3LEBSZ2JnZywmOjkkZyY6b3Fs'@;
put 'T1NPO0QqMmpQWHomTFtNcjAlTExCe211ZmZ5KXVYWnJgOSJbPjI+T1VTcmMjO3NPUTp+JihzdD8uPS95Xmlackt+VzlHJTkkQzE0Kkl+UlNvVnlDa3xYLzlAdWpyZ1Q7VWFJKSlURWo2LlM0P152NWd0O0duJlQhaHdBUyh3KUlZPiZKZmNWMSwuMHkzfWQ5ZjMvNiZbQF44Lj1nWjwsfH5pSG5F'@;
put 'azp7VUQ2YG9wOjFwdHwrX19XXns5cjNUL1MqM0dmOn5rLFc6JHZeY0RYOz9ELD1GfWwhc2x5KFhzM0YjYUQke3FJZWFVVyFWUjQ2aUEmOCQzQkkoX15+VzN3aE90Sn5sKClnNHMlc3hYcU9GbyhIQ2xiY0JWRF1USiouP1cyMyVhLHxCV1ojSDRLMURofC9mTnc+M3hsIT5iQ1BVO2c6T2V5a2E+'@;
put 'IWhpUXlAZ05pW0FGekdAUnN3JXtQfnkvOGBPXktSMWU9WGh2cDFeYClEYGsiMEIjVlhKYGE9PHA8STBDS15pZS8zaVpebWJ3S2NHYC5AYCxlWi99VGhnRVlBdWc2PjpEP3swLCJIPmwrXSlRO243W046I3hOZWFeUkkpXighVmhxOEExc19Qe0JtZCxjOH4+Y1c1azBGV15GSjhxK2l0ZDZScCNM'@;
put 'W2U1KG08NFpCWkd5MjMhVDA+QzhEbEJVSVpDbzhOdXtSMSNvakQ5fmspbWE1X2YjUSwzYik/bXl0e0pediw1aC98NHt7c3ZQSkF9d3xVYld0N0NUVDFrdHwiQHI9M2hDbXQmWiV2aDFHbiJTeDRxdyMjdU0pez9FeDB2Sy9CcG9dbGd5RzRSMGI4UWYoV1hPQXxJUGo1ZGFRay9taX41Ji4ib1NN'@;
put 'QzZkWmxGcT19eTs5JG0kejdHIkxrTEVNOlome3czUWFJJXxTMzcrY24rSV5RNWdeKyFTO2I5eCR8PkU9RVV2PVRULyVoOjZQOUJeO1IwQ110WCYvcWVdeG9NaDdaRHNiQjM4XnZiXWc6SSRyfkImdElzaXlebDNPT2RfanBJTzkqeEJ1VXhLNXZtZ1lAKjtLemwobT82bX1fIXFxPmM0W24/alRd'@;
put 'dVQ8WGkuLDREbXNEPFhNeU9yXlclKTR+QWVheF5rcFZFSlM4ZFR1YF1veDYxbCQmdXJlRkBiWG93NzpoKSQ6QitqaGNyKXh9TENJLzV2MFR+YVZKWlRreH4oUTNyQ2wodEspJEJUOS81Il9iVSVNJWh9ZiJ8IlNjXk8kJCgqPHkofmFDfSwvS3l9NVpvUj5iWEFjYXhjWSksezJTOnwlRzhBdiRO'@;
put 'JlluITNyKT46Ulk/RWJaako0ZmtkTWtDWj9KYmozUjRePlV2Ll4+bzBEdCE4Kjlia3BoVnAmbXgzfmttVUxZakkvSl9OMjFXKV5zcTY0allDSDJKSlgzbGkmVW5JZm0pVW12N24oI0R0JTNSS15qOD1pOWdKd1ckdW1LMnVKYChhcWdJUXQ2Rk15I1pwVjpoWSxxRm9HYEVBOzN2Ul5DMEVFdEND'@;
put 'bWUmSntBc3hYJUM7cktRNyJlMWBubS9TSmJtS3Y2SlF1JkYmUS9EUjI4NzhpTjhgI2JkVlNoVHBSQVV1K1VJKm93JjFARGh5Pi4odGZVWm98PFV4YTAlZU9SZUJRcjdSVVApRFFCenkyTm5kcyFxTTF9e0dzZUdRel9xLEFLLFtNKDxxOUNnRXZSdEsiOGcvfU9HYDlVY0E2JGdHfV88dzd0SG9i'@;
put 'JTExTU57QC9sck48MkMjJXNnL1B4QmA5cGQhTThRQGt4fS9xc3pgMn5FOV9pMjl9L1tMUm9raC8jPXpSQG1fd0ZSXStAZkNxfnQuRHg9XkgsJVtsRUNZYHB2Lj45dDU8NlpfI1tHZXUoPXU5NjFgNmZaalcxPmtHQTgxTVBzL1JbVVtJNXBLbWdsLHBeUHteIiF5YHNWNUV7UUFMfHxyQzU8Yj9I'@;
put 'V1BsMmcre19mZH4zWnU9N1VmOl8/ZmYsUFtJLCF4Ik9oKmo3PGpXTG5sU3tjaEpEW2YjOHNLPHNJLHtIIyJtP1IhVSIvPSJrNTpkPE41Nn1WSjtDRXNhbFkkMEF3YUUmNz5jWmU0TEZzWUAvQjhUVXRAaD5TImNDcXozQXZLTS5hQG5mNEVeQl9KcDtTdm8hNXN8T1hNTnxheldMYjVPNEhKUVF7'@;
put 'dSFIOkYrViMpR24kKlUvYW4kJEZzJW1SZ0VJVD01cjZ0dDw8UktHUWpAVFF9I011NXxnd3AlVltRdDtGQ055O35VbzciV2ZhLEU6PVJGd3lkRyosMkR6Q09uYHpFPUIoJDRxO28veGxHV0FCfll3Q0ReN3ZBalZvNVQvW2ZaUzZDZixEP3wpVytEPzgsYylHdU18S2VPeStRS2oqclVtaEw8WUxR'@;
put 'eDwyJGtdI055OWU8W0hCLyFiVU8sfUluZks4QyxEdTNWYnpBWFA6SHZMR3pWdk5sNHlDW1QhfVhwLnJ6Y1t+RmFaMmNMenBzdmFQIX5gbUA8fExRVC9ueDFTeyR6UUAqKWJaXXBwQGp4NG1hI1EkaGZRJmU1ZU9RNExELk1yTH1fQ1M+O2sqI3UuNFJBL3RkWlI/a1BWfk1kRnFlLCY5cm9ofCsi'@;
put 'KzRUP0B8cldFXn1AQyVzRSZ3KTJRL3E5eiYyNCFmJmQ0KHBDJlIpZHdRIXNSZWY1O3FKUE88L1dSKlVxe2dlOT07UDxwNiFRSSh3UFlpdzs5PS9gPilRV2UwXVsvR0lPKVYyQjloXTVYZkJ7cFZhKUJlO01aJnAuUFZQR2dPOGBtSyF4cH5ncjUhTSo6ZjYhNUVBaW9RbExOaFddXmsxRiJELzps'@;
put 'UzkhJHc+aWxCW1dlSmIwISs5TV58SWlNJSlsa0k3JVNCWmM0ZGxETjNuS1d4XVc2XUtQPG8yPFZCYT49JU99WGttYW0hb0FpU2h9fjQuXntCQzRLNUVjblEiPnNvREhBS1pFaU08O2ZfI205NDtOW0QmKV8oJFNsZGVkYHdQSypMOiFzRF5NIXUwUj0uaSV1KWosejFBT2l6Z3EpKilTYDNXUkhV'@;
put 'S3MxImc4QEVNb3Y8Q0Z1TCRhPUMqTEsxU1FJMXwjfW5vbENUfiJxJFp7dFsxIWtvdlRVUzlvSzI9L29PYVQpOEpnfDF9c3EqXT4uRElaPnkpe2drQFh3WT1gaylOUHBQIU5nRWw4dnRDd21HOnAjNXEhR214O35WKl9xfXpWRUAzJSNqK251K0JTYSZhUjgxSCxUSFguYlJXSTUvODBAJFEzT2RQ'@;
put 'V19tQzN+TVh7Q0w1IiJDLlZMfDU2TXFTTUlzUjxgRjtdfSJTfU1Mb0JOdyFKQGk4QXZaOzVbKHFTZV94Ik8qOFVRMUJZe20jPUNfUXpDMERlQmBvV2YvM35zYW4rMD5KKCsrS102LzFma2gvcFlHS1t1XzdQbz1oI2FDL1NSX1ZNeTAhSVZwbDVwbmVRTyhybSVaSC4qSG4xRjw4KGJfcjh3P1tW'@;
put 'MUdAW014eT1uTHghcG81fUtRWDpAfUpodGZ1fWlNO1VVQmFXKkwyZkpeLCg9QSJYKkNdXyt3alQzVnVhKzxDektNSyk2QEtFWHpgeSJuemN6JHVxeFoxbXhLZixwQDR8amEuaFB+bFA2VjRFQTZpPHksQlM9YWBTWXtnL3JLVzNtMnMjQUBoQks3bUBeVzxRUkdddHZram47bXcibSZPemlwO3xG'@;
put 'bHlNdnFOTTFobWM0QDIufTMyZkBwZTUqQVJOdnNpP2VAO2VJcEM3YWczZmhaOzxaaSI/OzYveWpdfj1Da1NZRipEZ2IxV1NrOn57TXRCQixvQj5AU2Y2eyw/PEtzJiNpSkdsO1VkUm9rNmJ2N0hXdklDWFBsaXZyNnFle0RBckBAV3s9dCwqMStNRFhzTUdWWixsU08icVp0KmxBXmN2ey5hJTxZ'@;
put 'YiZlRV07YTJKI3tqT25nRD9DN0tOVFRmaG8xZz5AMj81NiU7bSpJaTQ/ckdVOUt3Kz5gRT19SzI4eygwMl03NnpUI1I+JEEueHQ5KHUib3VoUW10YCt2STx7cjlsdlg3KV1SNHJsUlE3L2o+VUlHdzRKPU4vKi8vKShDbC8qaDQua14wZ2EhbTYqcjF2YmZbVDJ3c1s4RTRfcCYxSSNWeGNnZlRt'@;
put 'byh0Sz8oPWlGYCRYSi4mMS5CUEFeVWNCNyx8LkpVZiQ4Ujo0YWZ3ISJ4LntSKl8jI0YoX0MsYG5kPXJsVEJhMXpBL3QxVmphdkxlbyFgWXk7dmNAaUNpe2NtTTtiWStLSD9ycD1WYVFaUF9ILiFFRDl0KnQ8NWomfFdNPTl2eCxMWyQzRUs2ITE1P158WihaTFF3VEtWSlloOS9wODo5dS59YFpv'@;
put 'fW96YX40dXJAeFcjRT80akI4XW9NYkteZzsyVmhpUkNDLn1JZF9KPCMlYGcoa2ZwRyZXMnlqZztrPEJHQEQ0ZG8xRDhEKTRdLk0lOF03el1VT0hVTUxrKGxQVX1KNnMoIUxXfD9qPVZEciR9aWg4alhETUQ2MWhRJD5sX21mXUVBfmBMY3xWQDMzOEciQVloTV9uXl8qNlhULz5CQC5tYTcjJlZV'@;
put 'L3pmPGBReUlRe2lrQGo5RFZFI0Z+dC9KcWBlJlBBM2pANiNbZl99VWkxRlZsTi9AYipCZT5vX0s/M0NGS3FFOkpaYX5YdDNiYlQidlh3KD1lITtZajJSPyZWdmdPNzosUnlCQlhIKUolIWlrQ1ltSjsycDFrNWpeSFRnQ3l7VnpMNGVFS1VubUgkSDlzcFFJXSJQR0ZKaiEkKC9nZWc8M3J0fTtF'@;
put 'MCNFYG1DYE5GM3tmdkRIXTgqUllGYTs5ak5uU2JAam9Abl5sOkYxOUcwRn0+MkZbK1RnZFFYcV1HVU8meTRbV3l8fnMhelF6NzZBOStwfGRVT3ZVTElkdkBzQkF7Sl9AOzsvaX4jdW05PCJlfEJZVEVxXihDeFNqMG11RWg6WVN3Jj8pYG9IdTxkJXFod3Q6bSMpSk8+eC5USn5dJUQ4fCRpUzxe'@;
put 'eltxUjxsc0ojbn5ofHF6X2QreDdNKWgrPWxLZGg0VkB+aWJWcF9XZ3M0QCNieEAvY3coPmEwaj1wQTY+WylmSHpqcjZGfVVJLGJUY18jeDRmOyo5Y0NKKHZ3YmlgcmVqLEF7UFN6PUI1Klh1NS9qaVovUjNZUTVdTCh7aWBXQW5pMipKd2RvIyooIlssLCtVdWJSPXl0OXUwV25pfmA+VUZ1Y3cr'@;
put 'TihZUndnWEMzZSV0VXxCJHReTS9XbkdzJnxdJmRIdD1YejlHWnlmeX1FMlkwLE15Py9mfUhWJFVVcTRdL1ZRSzJCQSZXdXhJLmttRTBleDk3bEl0RE15UWYvMXwuKH49TWBjP1F3UzMhLnQrWztZSjgrOGk8PCE3ezgzWy93NnMle1JCYlZlXV04YSl1TjReeT44QlJ7JlBlZCJdcTB1ITIqcXZx'@;
put 'U0B9KVFLSmUlRilFKmlgQDRLJkk1dTx9dlJCZFZtKU5VRXxhbHJxTUFhPnJJL0N8KiM8Q3dvMzg/RFo8aEpdPjpraEVHRHcrWzRoPXZfU29iU2l3I3Q8RFgmN3UkYTQhOExxX2NgWDIhaDc3QjtYI2A4Rjl4Yz1FWTwwPkAzekBqTCMvRm9qTSNkUnhAO2VScUNiYFklL3xiJjBDanNjdm8+bnVZ'@;
put 'bUlLPUZRVnNyOi5lNTFCLDxdWEhpYX4lIkF9PHw1VnkuUyVZfl4yKCpDKXQuQDwsTzVKZWdnVF5IPlBvPiUzYHBUUUUwJH55YzV+QXRxYmlmanZua0omJWM5Typ1NHA4QyxDUWxBVD16JSYlOl5uOklVYF11NktFTih7Y1dpZlpiJGszX1lfTjhnfFJoLiV7e2t2diU0Sng0PTsmeEs9R0NnKEQo'@;
put 'VjVIO3p0K04+c0NqXyo/eTdDZVpHbn5GdTBWYi5ZV0VxTiEjSnY5MEdwbzJqVzE7OmdFNjtkRlt0aTBPakVAQDlhPjg/a2I9VklScEc5WlRgUGU6PWxyfVtNODNRYDN8KWkxWCZwN19ROThdJW5SO285Nj9tUXxjYkUkQF1VTi8uMiN1WEFmUWBeQ1QrZ3gjYltjZ1UrPG4sNzI5Qkkwbm1wOFFP'@;
put 'N0gvKDNoQVF0dSYvX0FpS1toZEZeUF1eIT1BKk03Wz1zImMvZT09fExVTlJUfH4qey4hX0ZKUEQ1Izk0aCp7U3p1W28oMm1kR0h+ciZ1TEoyQV4hczFLM25UdF9CYVNRfDU3aCRgNStAbzh4PCExIkQ3UEIza14hbCNZWTJwLm46IT5vbEd0cHk7THclWFpTN1pSRW5DP0AyKH1PfmdNKXMkbz9t'@;
put 'N2BwSDlWSFMjUFh0akN1djp8ZCpFWUJ2Y0N0Kk5kNF1hRmIyVHghI3A6Yjl+OWBJOStxbFJbXj18TGQ8MypXI2ZfYHpzK2ZMUU9vMDU0JiJBPEd2KGc6cixsa0h0VFsrRF8yKl9BbGs8cCNrSFFTUjdMV00mLz5LW0p1JEJXN2UzLnNhT0o6Tk0xRy51OisiQylgZjskXkBgV3A8cWQjRlRmLGkj'@;
put 'LGh3L3BmcVRdP1E/Y3t+VlhMaFAsXWVNXXdmYmQ+KCNPSV9geT01M0xgd3wmc0BpOzh1KWBXOCUrcENZU1FwQiYpKmhvNFRbL2A9KDtbeyg2blA+OyRqPkouKUJWd30/Pk4kWkk5UU0xVUxrXU80SiZQPShlTFcscH5DcmRnSiNSOF1eWUQmaUxNOn1qSSl9I3FQTUwuejVnaDZnIW5EXj8qV2Iy'@;
put 'ZTJeR3o4MmB5OlJ6OTY1Rj5TY05jSjdra2BqZnhSZipWcFpuY083WmJILmxsfCp0WW4pXWg8Onl0JCl5UzhROyxHKlEvX0tsT1BIUz5NRUNAITliIlksOW0od14oOWUyZCV8IUk9Iz1oTT9WaTJyMX1AcCRmdnwiRmw9VHdoOjApKGAoaW12dC9JY1FJY1Q9Ln5zdTQkLFt2P3lFQT5RQmoqNWhd'@;
put 'XUJnSGNWRE9FQEFneT4wcnU5PSZVIUBEJlhuI2JNSD15bXcwKCoxR1ByVG5KS1YpImkiLzRyUUlOS2pxYG1sJnpXeCEoK1FQO2VySStLNk5JWEVEKXAuXip5aV1peD0haHEuRiYrRFZaQyllVHtgeWlJMFczNW1DQm0uTFpHIkNbTGtdKCh5K35RdnFQZVR8cURkPFEyMjFVaVpDZkJFLCpuTE4l'@;
put 'VVsuaUJYKT9Xcy5eZ05pW15NcnBydkBbb21WUn47SDg6XSZ5el4yK1I7Xz8yTnVDM2NJfE1EbmssKlg6SXxPTS9vQHBOTVclNnxUYyhMN3t5V2Fda0V6PTs7SDBvKTArbSJIXmJCe102OCFiRHZDKXMqTTpzbEIkYSNQd0dOKlhoZDEuLit1KHFNSFB9OTQxQWs2bm93NkdheihYSD5GYE5GTn4p'@;
put 'Lk9PeTByNU8pTyVka2JhYS4ybEdGUSJIbSJrTD5Fb1E1V1kreD1fTGJ0TVh3UGBxVTR5X19dPE9wSjgzM0dWe1tLbmllPFJ8eWBFeklnaXpXYzpPZSEyMSw5OWJvdVM9QHQ5JjhrJHBNNEAuS2h4L3VTKG4iS1Mjcj8mSGcqYEJWQElic3NnRmAoUlYqO3hlfjMzR3EzNUdIVmJ0akUqbEtYM2JR'@;
put 'WWxmU2VQd0gyQUwlUSFmTlsySD5bX3gkQTFkImxwRCFZe0QhME07YEwrO0Qzdlc2MCRQeGxfbyw+RiR+ZHlxOkh1TE41NF90YSRsVD1xY1IyN0N1Z2M5Q2l8UHg1eGU3RlQ2SkEyWXY7fF1Oc2x3QSUhbXJUdiFJRVdbNUExRD5aanNIZGZZU1hMeFZJKVkkWV41NHojZTl3NmVZdSsoPHgqZG98'@;
put 'fVVZW0pSIXIhUGMjfWwuPEFbZzRHTUxoZUo0OUVqOVFAUWdBW1pkKU1SMCo5Vm5mZks+NFdiWlh1JD1XPD9MSzZXQkIyMFg/Ml8wem41Y0s/MHBMT1RRLkZFZSZod1IjdkglMVZsI3NuRXo6X3FhdyhtdWdVLHN4I3MxaWt4TXhXSyQ3QUlQJnclLDBELjRNSXdNRCYySkV+MzJkOl5+LiM+SDlp'@;
put 'L3l6QEJWRHpmMmteUDROe3lKKklmfEZdMSR0OTFJXjNCb2Q5biN8TUlbQn56RjBQd1Q+QSZQcVBpR2xSTj1uWihlYVVbaWsheUpFUVZhTUtTMn5BSjglLCl3aXBhbXY9MG9oJWVnMCFfLjdBIjtAQkNEVXszWXZIZmVSWkh5eFcuc3tZbCw5TGZodTNFU1JgNXs1aW5SdGkuT114S2koc3EoTmVI'@;
put 'O0lrIW9RfHBiM2pXUj01V0E7SXcocUwjajxmWTZCZC8qfSZSNFtLek5hZExXZkomPS88Mnx8fHF4VnApQmllYEVXMWVWRzdbd2JbJXdsM1NMSEJ7WDZDYkJAPVNvZmozKW1Yd1c+XTNUPFowTmBsYUAsfTF9d0IpQnFeWHUlc3s/S0xKTHVzVkpgIWc8fV5sLmxAKU93PEdbK0E2MylJODt5TTc1'@;
put 'OHN4bTRaN0UiQ058XVNtXkVDKXM0cjU6WjE1Q1A3X1JTNlRnYjt3ZFhTRmJtT1E9UDddTEhWPH0sX2RnRClvfk07UHRyd1R0eVg7elZhYDlMWnNMJEgzNnw9MCpSQFcjZnsrRm0haExrbUVlb3hLTjNxSip0WCg8c086TVI4SUR2VSo8Yk1nXytsdGk9Vj5RWTpkLFFEIXdFdlAvWXFON1d5QltO'@;
put 'a2prRDwseFAsQ3BocE1fWkZeS1pNSGNPNiVVb0RUOTdjYF53cmYoPCwrWkFPNk04aiglL1BsY20lKl9VYmVlLCUvQ24hdWNlI2phIVJrJWV1RE4sJCleSl5oTiFHRk9ta3B2RnVqZlVXM31FX1E6cmY5SkxfWnpON1g4MVJ9ZkgpPDxGRjNsaXtiNEtvZnc7XSgiQmRFeTBfMm9pVkQmVFJfej50'@;
put 'Lm8jfFNrfE9FImVlYkAoPnxONVdCM2JQZzpTSDd2d148czVLPFF+W2dyRjhCZF5hY3Y/PyluUS4xdjlIe00pOE9jPTd0b2MqT3sweSUvc3ZRJENYd3dqQlJUOUQ/OmQ+QUQ7KGkrJlt0MkdsZnYhdCZ7XjddMkxrRk5BZih4Q00oWGU4OmJQanp8O3RlJShMeyhVZEYhYV4vQ0BKRnxlSlVvWili'@;
put 'NyNiOGdlWFRxLCZxQUN8IVUwcyw4JHAzUU1JIyZYIUxBayR3IWdqc2xDVmtzK11WQkxJUTxnOiVONmsqMWE6TjJuUlJISl0ybzozPk4xQ356cnEubEAkWHw5d1hKZTl1JGZUYEdpJDRIcyk5WmJRZ3NNVFpSLDZBY0BOTEVFI2dnJiVJbyk1Q1lqIjxzX0EqXzpmckR7aUtkSnV8LC82P1tBaENQ'@;
put 'WlovN0NeRTllTHFzUnFLe2g7IXczLk5QWzgqS0R+P1JBPk1QTXBTTHdEZ352QGw0QFs5OGtKZ1h1UXYke1NJODNPJTp+Wi5sX0xBVio8Z1VfQihJb3pPciIyUXk6anApOmtYSDdBdTNCOl9FPkRlOVIxUDt0Ong3U2RGTjI2OSZvejoiUlIwMH13WjFxMm94MG1SZExbTCo7K0d8OV5DLDxaJSo0'@;
put 'YTBmbVN+RlZmYERNMnE3RVo6XlEoQiU5Il9lKU41SEdTPUVweXpdbTVHNEBDc09nbXhKWDY5ITBaI04iITddbXs9PERQN3B5TUl7YHgrZj0+WmtfWWQuXWJHR1haeWYqcjc+a3ByLDdmKyZ9JVg9Sz1jamVwcHAhTUlQR2w7Y2ZINmkpdGw7NXJ2UzI0SFcwazAleDQhV1oidip3VmpwdWNySVo8'@;
put 'LG1jejsrWD9gfUA4YyxUSF9mTHchfnZEMCIrYUFRckpiVnMuUnZ0XkdaYEBzOUldXXB3dFV1K3pnXnxkcHdOb1YzOCZGTHF4Rm5ObE49XzNPXktjKThVQTwmRiJMTWBEPn5ZPD5idUhDVHZaSG0iWXkpZlM9JDJiQjJIJTRmfGVVfVVQK1AzPV5GKWBYZ3J2PDBVODV9SyNwNC9mYmQrKEBUJD07'@;
put 'eSVpMVVLLzdXSSY3SWExa3ZkXyZhWEhhKmZmRGZ5aToiKyJaJCVEU1RgbVVoWHokfWFwXnJyNyM4N0xDRW1dV0d8ezluWShaVTgxMGRgajZ7NnpXc1YxWzdrLnUhPlpVPlVhTyRPKmxbSzdlIUp7O3BWd3BHe0YzNHEwW31QKlUiKnR9XUx1O3M3ZSRoc05ELDdVITJgOSY2LG19dTFXKjM7T2JG'@;
put 'Z3EoY3RvRlJ4UjMlNEpgfm5DJiQ+JUE3ejhCKXZoQkloSkYrYTtyJmZXdHhMZl94WiFXWzVMTzBpeilFKzs5KSxpRUA7Jnh6djAxIVYzVWJxODh4QEpffGFMKFQqLGFQPCVwJU1VMkZ5dWlnQ0EyOCNbOiYxWU4oVyxIQ1QoPVNZXy99L0N5PnYxZ1N5WGMzZiE/amA+c1VTPENCMl5KJGFVOVhn'@;
put 'ak8uRyZOcm9SSnZVeDMzcUdpZ3FaUyM5IWp2alc/VW8uYm9lfl9gUmlSUmNfOzB5QUB6Vk5+L0IqMTJsRHxqfl9SLFFFZldOQS5lRXgyLDBZLFh9dTRVfTp+fmUidzBXbiY5RVopfDV8KWVeVnM/T0tlcVIydSR4YU9XSkV2cmd3bWFCKURZeUpyNWolN3t7PF9qQml4U3FmO1EjdSxfV1o6fUsr'@;
put 'bCwuWUt3US5DfkJJIkg8QDZ4Rn0ubGN8JXhEYjd7cFd2RlJOUlpCcChAO2VeITdxLyRSQnk+JklLNDsuWVFXYD1RT2p6RXgoYjdnYEJYNEU4dDNEeSYsMDpRclZmKUhJcWYvLzE9TlY1dFVjVXpJSkRSejQ2Zj5mTUlScyFYUFFCW0w5aXhJamRgVmJDZzl5Wz01VHI2L2BMS2xQOjlrejdgQyIo'@;
put 'SEJxfnVDdEdRTnc/bXByNyM+bUZKOGF8dyFDT35IUFVIYiQycFFVQF5FLCxBWUBkI0ZPXUM/b3UyTDZHUU43XmtCVkkzL21dNExxMT5WJjVjbXt7cFssbWxwV25WSywkUilzW317KSslbkhHLk1rUj5TRWk2eSphZERlZHJscCYpSF50M1VqNlJESDdTQ3RHQkRzeGlfKVduV2pLfUdTMVhic1Vr'@;
put 'cmlbJlQuXzhMPFFKPU1GOXRlMn0pK0lxbzVFS31TbDZbVVQ6MDpzL29VSmo3V0laTzJ7XyFWXWdOKVVsQzRvKXJ3MyJDKElgTyNJR1VSUyU0fGI1ZSsweDZ6eVsqS0UhRDJRb3VyaFF3Ml9kfiUlImNtWkd+cyY2W3lrd2xGTlE7UHIoUzRxNnhsN14xK2NoZEI2enA2M2FMKVg5L2ZjdDteMlo5'@;
put 'ajI3NW1WX1NgKzVLeVlTdXRMfEg/MlFqfTpUTERsKGVnJGZMMXFNektXeXd9TnYsPG9BPUs6cnFtNC9QZ0pGN2V4dnZnIl9mPyQuVGhkeCU7M18mPUhyKWsxNDxTNGEkWCJmPGlqMkgwPjcqPisvRkJ5RDMoO2VbKHltZ15PdVlfPW9pWmgrVDg4XUouPEswNlNffk58fW1bRTcxS1k2RkhzIlJk'@;
put 'L0lYfDRUMS53UXdENyFleCQyPUZgLj1DZFJ8dkNVZjpeSipgWF5QMXh5V057aWAjdVtgTkY5KTxDYyVme05leWJ+WHhZLjxKOUhOazxDXjw5ezFsNnlDI3cocCNZN3JEVV0jdVpPazZEMSErdVIwOiZOWUpXLERYeytpOE1qaTFjLmVFMU0lW11JRHA1X21YcVN7MEBxLjI6c0g+R3hBRVdzSzFk'@;
put 'Pl5EeXVPN3VuKXZffT0oREM9aUpQeFQoMmFuYT9bdWpFc3pkJnkzdXR3NTooakhTJHsoZ0h+U1BWZGg8KEtZWjhscUd5fldhczY0fU1PVSRsaF4/UHdHOW5yeCkkTS4venNDLG1PPyRfQ2VeY1FaQGMkZikyXn1xZ3lJK0lhTkpbU1lyeUo8PEUkSXAie1V0bH51ZGt8RyxhcXR0UyFxSFo4d3FZ'@;
put 'UWJ1fnxAPS5FdilpXntkPzJzMDx0TGZtSj4mJjpBblJvQjRSM2l1JmNmY0tAYyQ5bFdqOkxNNGMyPGd+IzBAeUomSTE4UCs8fEJAaX04azhmeG8sZGhjQmVMfU1QcF4rVntsYyU+dnlGMnlZc3JMZGZGemxrTTc7WmBgLEt7eCQ+fnRGJDRfNHdNdnN+LjhPMilOaUdAKiQ+SmcoP0orUnFMPCwm'@;
put 'KCJXe3l8eSpfOCp3KD0+VkRmeH0rajhbX3U4JFl8blE7IW5pW0JmQWMkO2s+V3ZdRXdiYzB9NTpbRU1KWTw+RzJNY0toV09AY1ohKWk8M2ddeTh9JXM3fkw1SFcoOFVgS3F4W1tjMktAJXJAemBMLkgjLDJDX107R09ONz5XY2BTRGFVMjojKjgvKXdZNytOaUxlfXU6aHJDOkUlMjhHUTJ4RiF7'@;
put 'XmRoYXxzKVQ6RFh+fnxMcD82Q2ZJcF4vfXZfWVc8Rl5ibF0+TmBhRy55MDAhZD58Xn5sbTJZIUpLNltUYko1QXAuLmw1ImY/dEJCO2h8W1NCY2wjRzVsej09Vmhrdl1hM085SkE4N3dYLjpdVHJGV2dAb3psODNUbmxnZC80Kn1hKzh9OENfKHhXfCpmU1FPe2d2RSp8WGVOImc6T0VmMjFbRndd'@;
put 'fDZ2KCgkckBxL1gvRzFxX1JIIjBVQSV3TjVObXB1fXFaYHhgTXEmQjFreXdPNERXaEpfNWdoM2pMSl9xW3pbTlJINm5qfEJoTiV1MFdwXyV7a3JofiFVVGxqOEN8Tl1fbUtjfTV6eGdRRClYK3VIQ112VU8ycUtdSD4sTj91KWEpWFZESzw3aTk0ViJJLiY9MlttNEJ2Z24vJVtkcHVNS3VLelQq'@;
put 'NlRZLmJBSXlFTlh+YDY/KnVzZlpMP1FjfmxJcyFZNXhDaHpHfnhVKHhDYEFtaSM6IzlOPjZ1bFJ+b1QmYTBzUmdwMWB2eGxWcmRCOVZlbnwuSHxyPkx3K2omRV8kPT0sUipwVnoxfWU8eEovRGhJUWJORipEIzE6dEdWYlEjVWRYOz43JEBmUGo+OiJhLD9XT1JXaHx1eHxBIUZlSlglaDcxZjJA'@;
put 'RDJ3aVhtaVVafChXSSxYKzRiTG1TKVAsYEB0QiQ1Oko8flY9SDhQZlFfN2tbRTI2QiREeEhQT15yMmRgYXlCVS4samNnJVQ7dCNEcy52ZTshdlpqZV82XkB5cT5hNzUuUUQ9QzR7dE9Yc3RaRnYuZ31FbTFuRG8vWVRgV3JhRVZxemg1cDVXO2BeI1hIO3FwZDNLTWV6Y05eflJ8QVg/cS5dNyJ8'@;
put 'aFEraUVHQUdmL1g3NTRsbnhNNHJFVyZwKSR3VmNkP0csR2VtfnwxZVF5JHt4Ti5mUi4+Snx9U0RxfCM7WlRdRTNxWFBTXiYpXlFyNGtjLCtIQjljY0ZGVkMyS2tWWEVjJEpjL3QuWH5VNn4oOXtXeWVGXWNfPnwzRzl3SXhYQV5PSUhdXT1TRihkOTxXJCkvaHVbI2kpNTZuKU8wVldSbjVgUXVZ'@;
put 'Lnk7P2RmQzFzIUF8XkBDNzIjNyhUOnp1dkpeWjAlNXdaW1NgRkBSUzIzfHZ5Jmw0Im9hZkd1VEFDUG5sbiVEcD1BIVVFLGouOWZIQmUvPS88cW57fUBzaVBbU3hbdihXdDUvcEkkPC4iVHhWP21kcSIxTklbWGBwOXV6R3ZIVWM7P1Y8L3piPiYvTUx6ZjowK2tBWSk0Im8+VXdRZ1FWZzkrO115'@;
put 'WENEOXo6SEtBVkt6dyI5c05del57UkVBSmR2YnRCP19+b2IscXlYJlUwNTNQbSQucU5JRVo4S0J0MjZkWn5BSWZYKTVOOzQ3VnpaTENNZV1SLG5fQ2ZxWDFmVj1dajlETEsleythUnAsUDFrNSNIVTxEPSh7VWNxZklPNlZrVzJOVDYrPytPSFg4NHB9ej5OMHxgM144L1VdfmlNdSJbbm4iUjUx'@;
put 'Sz1qYFdkSG8lWEdbXUkjLltLOyMsI1Neckl9fnUrMmZxWW97N1grRTVYRyhXfmN9WSNyfT1SSFdUaWRPPnRSOyJpTElzOmZwVHIrM1pUTENmNWpNNT0rXWtlfVE4bnBeJFZoe0A5WHQpb1kyZDpNUzcwbTZiN0dCMyUuP0tldXZpVClMXXw8U3V0TVcoRE05bCV9STEhfFR9UUFnZE0+Z24xXVoz'@;
put 'QCMsfWo+MlVkZS9fXno6QGRgN2h9Qmcza2tYalk0UzUrejx8S3wpflk/bHU4aDZ1VWEvaGFIayNSVm50aUdOO2I/cjVfcWBsN2BvaERJPDszaEpRLChCV1N0I15HOUx4R3gyaVFaNCtSV3d6V1ZuYDJyelZJblVwO21YezlwanFoJXQ3MTBJOnZnQjBOcE8yVXZKandzbkt+OmpDOm5fVzkyejo0'@;
put 'Xiohfjo4SF1kSDEsd3t0MXN4a0U0c0BDK1ZxMmgvSkJBQ0twSiFTQ31SNTk8OFlwOCZPJG9Cd2Q0eEJAaVdkW31iYn4xd0R6SzBGfWhAUXpIZSlMMXw5bjBoV3EseyghbGxgJjw4I2ZwNGVLVChaYDFgcF5rJGhhd2Ztdjx0ciUzdT4mNVkrX0U2VT0wdV5JY1VjOEEkYlU6KlQqR2xhTD1QZ01M'@;
put 'cSlHMF0uKHxZdn5yU0FbfEosVyJOfGsmWiFGLkxXYzc4PFJZUTZ5M3MhZn11UV1YNHgkVlZXaX5GPmxpZiIxNVVJfWEmYXNlc3BCPmhbbXw9RE92YCpCY2BMJTJ3WXQwVF9kL0IvMCZCYl1MfV8jfEYpcXk7P25SL0FyVmx9b2w0N3Yscl5pcH1HcUMyWnRRLlhkbzpkJGdHc0luSmV4W2JIUjIy'@;
put 'WTAlcXgwRF53fGwzP2hKc3JDUWQqXTJuYHU3TjY0UyZWOE4yeH1yQWw/LiR2OGhfSEhMYEgkPSR7VUBOKX5IWGtWOFNManBDSk0rT29tKzBgOENhUGtYOUE0Q2l1aGIuczYvLiV5KE58eF4rU21qRnY6K3Y3SGY9aWQqd3B2L3VoeHd7YFRgal8oMjVBSDxsbCZAe04jKlojKGRAUjZlWFhVZkgi'@;
put 'R1tnL0BCU1FYWFpyLCRvVjIxeHd8PEo7MkshY2tSYTxudnJzam8le1NZTT5zU1FMNVtwKEl2NDw6amJ9bHZ4TiU3Xi95RVV4TzR4Wi8lfHg1RmBrIUZhOzRPZ0Aoa3QvWiorV0dnM05CUVIhb3dqfjw5SCtFZURZL35qZS5QT0NaUVUkR2NoQ259eX5sMm9BaGBxZVMsfDlVfG8xJnhHejxybCFf'@;
put 'MzJxWGl9XUsxWTFxVUVKMXo1UzFDe0ZKX3U0PXpscmlCWn1UfG0mPGw0P1kwJmVdVzYkPndjd2Y6dEh2RlsvS25yO1s/Pj8hVmMyNkt6JjIjPUdEdEhMPEY6WiUhT3JYck5ncklOLFBCSjNTZkBEKXdiOztTTCNOMn1QVEZte217OXRENSZ6azdoL3ZPIXBgYj0vJUtUXko2O2pjPldfTDw5QntT'@;
put 'RDkzYnx8ZT4+bUwsYmpUMV9aPiVIVG0jZkFFKGIvUUNpW3Q2cDYyX2F9I0V1XXRPSmR2P21EbXZ4MngubFY1SS46Uj1UI2wpKChiImg4Y3sramhJQVJPMSYxMG9bWlR2PmlmOF1hMipsak88Y2g9SSQzc2hNNVRlbnpjWWtiZGswWWREe2R2I0hbMmFTSTpmelVEbl88Tk5OW3ZtXWFIQi5qe0Qh'@;
put 'cDYlTmcxTGpZbGJ6bGtFM2cifkUzO3BIZGMzOV9WQlIkdEhJJHlrL2ddfjRsW1dBYzpxSllHM3wpMyQ6V1F5cUdkZ2MxSUhUWGRDRykpKnBsfFNtaGRnfCR9L2F4c3M+MFRja10xcE5SdTZJdWlhfEx3SmZXdVRJVCRMTzMmOjJdWDxMS3AucmE1Omg1OmVRSCZufkooWWNBNlNCQ10mX2Z0Tyl3'@;
put 'b1VnekkmMVNOej9IKy9APjgiLCE+fTslKj1hb24qWDZZdD0zL0tGS2YsUSpfKlNiTGE4VmpsTj0jVTp3dGJsfUN0b2FlQCEjP2R1Mj04TjIxRVJ1YGtfPm0+L1FDMWBfN31aVS4xVSo1dzBkKW10WXlte1RHITRkP1pQN0x8UzwjfFMzK2M5MUk1STBWZnt6N25YUjcpLnpzLz0pbGIuQ2xNZzJL'@;
put 'XWtdYD02bi97eU03aipVJUlXdzYxMHUqMTs0QDpaR0VZMTEpKU1eQERgWE9LXmJZe0Nte1VgSllJRylaV0QieDsoWGdXUSRxKTBzIWoyJHUhSktwZm89azksUnU7LEIsWWlBZ1dUYEpadnF9YF1rQn5+WCI+QWE8WS9pUTwjLGkxP1h6KCg+aXNTMS8hcTg/L0lTaXZKYz47eF4mTl48cUZSTyVr'@;
put 'emBAVHRjQXdhLiJUbktPdVdTTDUlRm9gWlgoKCw9IlIiezBnRSpaPFR2fS9PTTk4SkMwbGsqMGMwc2c+SDo0ZS5XSzR1aTRmUl9ReHYubyp8U1srI1REWkRucUI5STpRKmhzOXsjNW1WM3RbQnpMPFBaMShrVjNxNTtqZFQqbkttKV5bK1IrI2E2cXR6TFRdJVcwIkd8dF5kelkmZVd8X2EqYnsq'@;
put 'fGdII2VtfVpOKlNgI2pWelZXS0JKJXhAMGNtKX05L3JPLyoreUdaZ1ssU2lAJU5AYmw+KH4oVTIlKF0/ZTJrfHlNLyNfcm9QP31RZ0AyZV9BYmFLJXp6W0dmLkdoUVEyK2B7SX5xXzk4bXx8OF1vdihOeTZsN1JRM2QvIzhTWyFqWkI6UTgkU2JMSUZ5OVFlMHx2OnY3alpvP2JRQEAjO0t0IUJL'@;
put 'LGFNJDBCMCw9JUouI2IvekhQKkldbkNOLm9rN3JPRk5sY3lTTlg5IVopWVQpUDtMTkVtYChPKnFwZH5qOyNYXzM+KUZzJU9QbnpvTlAyLkQrTSlJYEZUcTkocn47IkRDVVhKPD87YyZ1c09XfGdbYHoyVShrRVZZLEpgMlpdTEU2I0d8ZkIqXVo2Pi56aGRUWGt7THpnTVY6XkBrRWxCfikmPHp9'@;
put 'I111bGlvW1Q1aFBdLjlKUThRUyVsR0ZZX0tfbCQ0ZjlNNjNaImN+YFZQXzh2RSl6YVh0NnlXd3tfdltRcGQkL100dyhPbS94L3Q/XTZFdk1xMkM/fVE2dD1JTTpGS3J5I1NeJWp9bilCdHdJI0tsZXNOd1NAQWFHJCtxdSMjVD8uN3IzNCQyZldUUjl5WiMjLy9KREBCSz5jMUs/YVhUdjNeT0Rb'@;
put 'WmYkLlBKO0ZdZ115JToyTypnV311dDBMWlg9V29ScUY7VSNlX2h4bXcvfGJCPjBWKWlrbmwiUCJZW0ZzeSpmOkwmKmY1cVVBRDNVVXl8QWJtb0ArbHciMi9fMGdZdm0oVzJbRXh2aExtVmtKMn1zJnRqMTY9LlR9TC49aHBzKyk+M0VnUUkuUVU3IzI6SGBlQl9rPFZ4SyFtMFIhQWZOR3RQYjhg'@;
put 'XlhiYyswWVNpfT9eOVs3cnokOUpbMWchRTw7d351fnRMVk8/PVBKUFNQejtJMk97NjNxNmNOVTUhdjpGJm9pPl42MTxlW2VFJldmUyx5aVFpcTdbNm9zT0ZfMWxwfCUyXlpHQ2xaZn5jaGcudVljRU9iVVB6Qks2On17OiVEQWlEUntufHM7QDM7UyorK0ArfT83WlYkKU1ab29mcmlRfHVAQz1u'@;
put 'YHh9Z0hrUFtYbT84O08xTT9fN1FULiU1STI0Rmx0RTE8VmVaMXNMYj9hT1NZN0o7WF1GdHtMN1UhMDIuc1VnYEg9LjdXYjl7WVpUZzJ+VDRDUX5dNDcvKGReMW83dDtAe215T2Exfkc0OTV5KDRqaTltVlZ9InNAaUR1Zi4lRjUoa2lGTlFaVTdJWFZUdVRYSGpgUjBtdHhEUG10X0NbbDh+bkVa'@;
put 'e2R+Z2xaVzJAbyZmVndVODRUMVFTPywhM1cxfT9CLjdyfUZ3UT4kdC9oRExDRVchc1piMUExOT1McjgxX1VxY1pFVmhuPVlWT3JwQGkle31lZlFuZGNCWmsvP3I/ajg1Uyk2aDp8Snl8SnJ1TVMhNnYxV2t2WlRuXW0jT3sxaDx0eUs2c1F2TjczT0AoZmtIWTFuSFdrUjF3YFRQbjJ5Z3c+IjZZ'@;
put 'KE9eLGc7NzxILzRjYVQ5LnxpeVlWOytEOFk2IjosXTR2Kz1qMj9iNUpNPi5meDhZKTsvRFRZRC49bmhtc1h7S2k/RXltM0pqcnl4X2o+cCRATHNtfChWQkp0UlZJdGM/Knt4RXZjdUpbWT1zdVBqb2s2QDJTInBRQ35AX0tETk8/eVcjc3t4M09Kbm82JnMwUGZacExAeGVRaFklN0p6Xi5yWVkr'@;
put 'dCtlUyNrcngwNFFxVCZlMWxZP1AialJGVDNHJVJeQUZ5fipZKEBKaUY3U3BycW44dl5jL0NxSitEfk9yeXRpQW07a3JuSDk1NmFXSkZ1dXwrfVovVGJaNl51SjQpO2xTUH1MQF15cHEiTXg1Xj9pME9wXj1BeEY5Ljo/KE8rSyh+KSZQLkRGOTdBT183U3ZbSHFKLENMfFEwWXxnYF1EZkskQHYj'@;
put 'ZS5rLHcoO1Nge3w3RVYzTlZCLDJTViUiVHlPN1tkX0lCSjEvUXVKYlY8P3lydk0/MFYvWjFkUUBuO25+bTI1Sjs2YGBoZkBeJlh2dG1tZzZMJkduSl9tfCJNKVV4Uzd9bV9dUUdjW0k5YE8jQkkqYVBpYFZyfnRaX1B1N2ouekdRa1BxRUVsb0d6YzB4PUM1czZ2IV8vU3taeVM6fnkwRVJhdCU5'@;
put 'UzpWPE01XTU0amVzU1BKQ3M0diVnImpZS09bTXkhIi9bcmZQTUdjTW14ZEhiUjFdSWdyY3IlVnBPcTReMUFxQk5fUXphS1AoRXB4WG5XXWpjNj03fm1bMmNhOiY/YHlsbjpyLn0vfHJHWyskPUs3Sy4vfSE1cCJ8d3BjTnZSMVFrPi90MyIwL2B1M2o8LmFPVykoP0BvUEZKYV4qfkolZTN4On07'@;
put 'NEdKWENjYCFCVFIjMXZdM0k/eysxZHNwPSQkU00iYGluOkU0WV5aVzZKbF8mN2RYZ0VNTjd3N31OfSlQOmtDY2tLQ1hOMGB3e3olfm8sYmhZd0JXZ0J+VHcxS0tnfWhRSS4lIVkhLl1naHgkL2FJJSEmfC8/XTQjcVRAKiFabStaLnRESSx3RnJfSkZmayFzcGpXZklAdU4zcD89K2RqXzQxenY5'@;
put 'Y3NbTV1FUClkanZ5cnRZY2A7SSVeI318OGhUXzdQIUJlKlteTSZLbyY5VjVDPkVmJGxKX3NHK0o/alZ2QltOfSRtaWV6WEkhS1k9OEFda3xBemtncT10QjNQPVNdUVt0LGBEd05WKkFxNT0zQV5jXXRMfXglYUkkX0YzSkNeNz5PcF13N2dOT01ienU9b2VuYj97YGVpQVFJY0xmenAmTnYwX2Fj'@;
put 'ODlxfHRdTU5gTTorWXF6a2ZYbHsmcjRzVmo/KTheMiUmUkViTixoPTc1WG1TcmckejlKY0FUcXdbTHV8cWhPJjJUTU94SG1QYDlrazBWaHVAaHw1NDExPCQ+aFNQPDxMcjw4LG1OL1pWLD5XQnU3UlpfRW46alpRYyFJN05nMVFvW2pFUVlHTzBTSWV7KU9RQ21FdFRlKCxQc3EpYkYjKEZHKyVi'@;
put 'TiNMSnEzJWhOL2swe1cuMThoUXsqRn1XdFNEOXo4PWgwITBie3s4RnhzIiRIOHxtc3w1bllxNXpLRzV2dm56aWZuNjdCNGc/ZGk8OiVndGYmeE5LcDUhY3FkOkp9V1ZKQ3RNNkplJmNROlouTkVqRHxfWCx1O0N1Mk1EJTw4QktLQTRJXXsjO0pYV0M0UEVid2VGNiQzXW9bVWZMeDNPRkhmZmZV'@;
put 'MlBefHZIQjEkPmQiP0tSXUxPVk9QcjIjWWxnfWM6Vl13Xz8lNm5FMXVuJX46TGs4c2R9NmBRL0lsfCllP1pJZF9ZREh+fWZBSmRjMXwycHRhYWguKjdjaGkxYnQqeUk3KlIjSj57e2JqN0U6ZW87aUFwSElsKnV9VnJwVkt3VT9mb1NMRTA9SFtLNmBJYkY/JjxZYElyfTpRcmNkcy83I35+SStK'@;
put 'bWNkdktrIyhQSiRnMS48JDNSdypMKko7VDF1djx9YDFIWE4hbSJMNSllO1Z3OkNnaj1PKz1rR3VUJSZbQSgsdFg+PTxmWSVZbStQZXNOWDEobm9xW1A0SD13fCxCX0ZRUzs1NHZZaFNBZjd2dDxeezwpR3J9QEVSV3lFZ20rLylyJVBwO356TWpHLiw8a3gqfWw7VEY2cT8zLiMmUFIvVjUkbjZT'@;
put 'e3hOfER5Uk12cngmRUEwRzRpdDtsfXwlTXNOT3khUWxRKSE4MnkzL011djh+YUAibUI0RUp6dXAwQ0czMEEqMmd3enNaTXQlPmh5WDN3SGEuTlZFPn1aP1ApcER4MTdlYk5ZeEM0fD05SlVjekltPGlYK2BwUzd3XT9LeWspS3NJLlRUP0NFQ0lXRHVKeHt1X2d4fFUje1tldl8rPlNCeyFnMVFR'@;
put 'KzopKitJXTJTLktidytWOzg4KkAvWFc0SFFtLHdnUl5ib1V6KUNUeiVWeHNMK2UlemtpZGM8RlojJWRxRTtybWheMC9kNjhWa3tjWlFwUFt7YXA9TERePEBVcU9yaTIpbkwmUmNENWRWR2k2IThFdmxiXStMazlKNj1eaShoTGV3I1RfdT1XckNbTnhEWVRQZz11WEheIU1DKjR4WC5OeCIjeDUh'@;
put 'O3NyRiUuNW5AdjZtSzx0I1QiQ2RMd0EjTXZHUkN6Pnx1WTlwQXF7ITVYSkxIfUojRyNaZUVzZ1AjXW5nKT4raEs0Zzx9YTlmbVleQEw5SHgxdGouTGk5SH5reVtSYkppaGNUd29qSTc2S0lXTHIuUUIiQjlIIkdlXX5CWXwlLikhblY2JF5qL2diYzl7JC9hV0FaI20xUURQZ3k/Sy9ReVk0PzJ+'@;
put 'MjkvWjd2K1JJIiQyc0hIZE16c0crc0VUfjIrYDVAdkZpQjlkVzxEcCMvRG9PV2d6Z1c/OTozeSZOfkYsXUJARCwrOkpYIj93RktkS3d9Zy90Z3Ukbm5sNzdubnZCS3okU0oyKyNDV1pLOCksV2l+TytMKkhLRml5NnswMkdic2t4Kl40PH5IPipKPGNmPVlqNGVTLHdVWjdlS3FtUXkhMnVXXWF1'@;
put 'dl8hdzp3WlFMU2BwdG94bjRtNn5RIVhWZENpPShUbXlgU3NrX25MRFBTNk89aDY7M21IbXBUSlIwdENWZDVkeTtBVD1eL2FJLH1hJnRqVHpJMnhQWzUrSmxfbyhZQlQsSjs8ZzY+ZShuSyJbakpISl93aSR1Kmx6X0pvfWJXem5bM1MsaD1ea34/ISljMnl3SUc4SkBPJDhiNWFEd3wlZ3MsVlBP'@;
put 'YDMrNkkodihWdEk5R3YwZ3JUZ2RaWnUkcEkvdltrX2ZiO3BKP05ZPkFKW2d+VFAhLDlNKzRsMGdQZFBuRWg7dTM7MTtXfnpFUmEwflA+M2oiN3tOMT9APy5VIi5zVWljJVVLTHAuSlpKIVdQXixSKF54ZEsuRFt7bkZWUXkhZiJUQ3clO2RhLzRPNnJjZyMwfkl7c11dQDZ7Rn0yMHF6PlR0aiI+'@;
put 'Mi9XX1tBazs+S1laaWArYjV3RXl3aUxyQGh6OGQoPW8qJVY/Mz91N1E3OmchQGQhdkZ2cCNpVjwjfFpFMkBEPlhGbGBSbiNoNTVbbCMwIUcjNi5DJXcyLEZ5cXNmXSYjN1p0bnp6L09kOjBaYntsdU47U3NkR3Q0bSZUa09VekolXS4hUkBVVyZCKj4lNGZhNU4vTV5Dbzd5cjkjSyk2KE8uO1Em'@;
put 'XkliMS9lS2coQy9WZi5hcnc1YGVhWy42JFN0UUdzK1hYQ2pIYlVCdERCeUc6VzkjVjVVaiNXWSFqYjg1ekMxTyNtM0suclpKS25IIXRlQDJDJU5HJFFfKkc6dzo8K1U4eDxLaUtxREcsX3k0QixOdEk4MV9TOFBvLEJ0PDBFUU5lIiZ5LHB7UF9dZVZ5JVtgciVyeSs5TSlDcVlVVERFeH0rY2BR'@;
put 'dFZjemY9cUQsR19EL3pFMDpKZng7Xk9EY0QxT0B7RiR3IipsUkgjRGVQUyZXQD5qKU0mbXtMIlgodkR+KyV8d0xHYiw1PExYTDh8c31JOWJKUnVKOSheUk5UXUBVfE8vK1cqPDwlek1IQG4vSil8WDNaKXY2djg8KnIzcVtPVFg4eF9POE1nKS9KUElpMXxnPERASSI9VGM0U1VzPz1vfmJdKmJd'@;
put 'W3MofG4sZF95TnJjOUJROXQvIjRPRTxHZlZzNjZ5fUcsQTEofE1me1pyIWNRa3lqKFp7VFc/fUh0dHpMfUEuNmA5LlZHNFhpMGNCUGFhdzBOOWAua0dxMWgqPCtAKjhjaX16Smt3NCshTTtfT0o3SX1KaUVtaU5wIyFGNXsvI1dfLG8zekRYNF98M31eISspc05CUFtLSmlzVjJ+X2EjVkdEPTZ3'@;
put 'P2MrVmkyR2RdRmxgaFp4dFdETHQxI34kLGc3Rj1PX1d8cDI8OS9sP0B3THtWNX59aWwwVVNVfkNjSX5ZNHxaLmhQbTw5dXo3SWQiSFBxImRzckJfRS94L1I5QiVGPyUsfFtTZCVESVVERHo7fDdgejhYOV9+UV1kOXFYRXFxR2AiUVNYSG9JKk5GK2JVVjJtfERLKnlAaHlDVlMyQ3RscCRSWWwi'@;
put 'Ij81V0RHZSxyfCxkaDIvSCV3Q2lVNmdqVWw7fFNjYE0zUE1pbyxYW0xkZj8mZTF8dyNFWDdPYV8vJi9SRktPKF5YKkZBaGZocEc2dTx7ZHMpVHlNXTg1ZVpwSDFzd2FNYlguVVg/dm49Y3xHJmg9Y3VQR11ncXpXXmJTUGIjUnhrZSJjLzhoPHxdamY4UVF9PUorN29HSkd0ZT1bR2hralhgW0BW'@;
put 'YSg5P3VuQWMxaG4ucyhzMy9gUCUqRWkjLFpGNXJOWnpYallrIkVxekoofHJdVm93MF5JJlMjeD5NdEVxW0BRW0ZiZyhFR1pNb2BFQDw2K2tkcWpVcCteWTwxdWVka3FVRnlQPzN4bmpIPXdIN0IwRTNgNnRoZjlsPkQ8WkQ9VF0hN1giPDx1M0NVImZ+fHt3O29NXlEkWnNKTVg4e2FrSl5VfCxP'@;
put 'RldtQHxuS0gidylVXkIhSk4qNzRTYHd6MWpSR01nM3J1PnE7SU1QXXF1MXx4RD9ZZ2sscXcoVEhbb3FGOmBkTGZ7UF9YMUAjbmx9Y3s9RytwNjRTRTU2IWAzNS4sKl9LfXBCUVF5MjgoeXpiZS5Ed2Que05pbXRNVyFlOnsjUDFROD0kY01dTTg5NUlPS3lsNWBeRiRTYzM3PnpCek1XM3JXNFEl'@;
put 'UlooPSRReXhua2o6U3whWCV9MTs3Sm03YDkvMWJROWYyQSJBRjBbTGAkYVMrX3JnK35NSEZuRks1NXpTWXM5IWpfRjJ0cjYuYDY8R11JITQoMXdqRG9RalNOISNWcm4pfTl5K3ltX2xBRXo3ZDkoWnpKdH5oT2A9OF9SQEp2XzNHSXs2MFhgb0olMSFyaHUydj5xNHc1X1tuIUNVKG1EWVVbYEo7'@;
put 'bH5yMTVkYD9dYDVBRF8hUVFbM2dIUTZsITRjTmE5QFp8Ui9mdz5CYW9oW2x7SVAqKUAmQz4sNlg6WG4yVy9wZiJ+OyhGO3Ayfk1UQmNscUAoYWtkNjEhSURbdHQ+L2ZweWx3KDhvKV1gbzt7RFFlM0xrKEQ3Ml9fKnMuXztPdWUsND54b1V5Vkg9K2pCSSwkdzRzN3NtJkFpJUBTa14wWz8xdEki'@;
put 'NCVUQkB0MXlKQTRfSHRfc29DP0d4KTVaOH02STtBa1JZczkhOiF5ODVEdm1DP1VQPzc1ZFpvfEQ/aV45RHxMdnp8Uiw4NmomNCppZS49ZHZbZzRDMGFzWm4wbitCI0VWOF0wbUhYTDZeQSQjZSlAQDFMXit4KGFxYmhSY1NBV1sseWtmaUFaaitUOGJ4dlNWNEEjfjFGRkh7PjhiUzB9Pz1fdjNz'@;
put 'ai4xOCU/JCl2a1pOcHxrOGVpKUkiZUQvTVI5QU5afU5XU0h4aXIrdUw7UUBfNmZ9cGo1eyw9dF5pZmhTNzYzU3w5JHVDKGRdOXMlJmM9cz1HcnhrfldabjFwfk0oNSp2N0l1Vi9SPHE1VF8+ZWdMQTUwfD1ee0dkOmEkbzA3UHNHbm9vNjNPUEViOnkjbztJW1lZdT8yPHxrXWlSb2VKPWddKFgp'@;
put 'VGhTQVBzbTZ1Yzw3QzJKYkh5ZX41MGRIbTF2PVdWZEE1Uj9xSzY2Wyoya2lLe25mKl1YKlBEei5ed3JDdCx9MGtnR2w6eD97LDg1RlQ0U1FQZls4YSFfJGUpRlhpMWs0UzdHTXUvcixIXnhlZWJiMX1Ie25YN25kL2wwZGVXZ35bdHx8YExbL2ReXXxDOyxmaWQsV0NUd0d8RyxvZ3xXZTNLc15e'@;
put 'M3UoOk1sIkQuVGhDfWB8LCpYXXNZJFk9JmEmYGR5TG4vNlNkPGUjfmtjSWQ5V21QY3U1K3sqVTw6cWZsMDJDYDt8aENDTEJBdTd+byRZOXdUIVQvfktIe05FLjtsfHFvTlYxe3h2ZFAkP3chUlhwLyw/LDlILiVtOCNvKj83c3dqdy5RQWAkayZxanh1SlFqSjUuPkgweEs4dH08UiZoOVhPfmRZ'@;
put 'WTA/M3VDNF8pdGpQYzdJS35STTNUOip5TTV2MWJTezIpI3hadDA/I0NHQjp5ZHU/fV5XIWxjdl5uKV4heikhcC9YT3YzZFhrVFFqODBBLCZYYDt4RTlnNS9mUzx2d1JjZnAlQzN7XjNOaV84eUsvSmV+SixOQzVFeVREcitSTUp0Z1YpRSpFMHdUVlIoMls6c3FRcHQ9NG5+WTMhak9McjA2dWVE'@;
put 'KVhpMyllVUhgV1FdXXRzVmlwZDshY3RqTyZUUTg7JEptSmBFQSJdIjY/TnQxLEwvWjpoe0NAZDFLI11ibHk6Njx+eThxM2tPTntUbnMmUnt0KnBbfWluRiwzXjF4fEZpIlo1PC5bQXJjZFI2eXV8NC5PTnw+RDR9Ly5OfEMsUkNbQW4uP2ddSkBmJEJNNVlMSzlSYG9GSiw1VUlfSTJCZzIoKHtL'@;
put 'O1ZMY3AzRSNfKzpyIiFWODg2fGg0USI9JlFrVjkoOEBeUk9je1dRTUkiRmddbzFBMmZMZz14M04oPmNOfit4RUd1cHN6Wy47RWpnP0Rza3VleTEmcGUrN2JoMCxDUyxsOzZ2fSRvVVBrLjNRMyV3YHU7Qkg6R0tFU09Lc0FdaDxpc3o5Tm49VkVERyhPUSxFU1slJVBGNiY0fTV5Wz1CSkp3PC5F'@;
put 'V1cweWxQMnMyLkNQK2MzailsdGF1Y2x+L0xxNkU0cjZma245SmQzQi43dXBKNWg0RWNJdzU4ZjZzdzhkcj9wT2IsXTdyTj49UnZdUVRTfHZaQClgSnBaIzkyNTxIfCtiP1giP2Z0OTVKNS5rVDA8TWMsbnM3VDs/YComK1RYZnZjMDFXSHlVSFFNKyNZUFtTNUBOVGQ9QlkmLExpdC4weFlFMTpK'@;
put 'Wj1VJW4sTGtTenlvdnJxMFB4M3JBdGUsbmtXXXokT1lSeC59fn02XWM/MVtdMStiVGRWdkh7JGpZXmFDOkRIR0B5ODsqQDI7MSQ/VzM/Q2ozQU82QiVuL24+MUgofmF4IUNkPkNaWFQiYzgsMS91QmUxTXdzcWVjLDkvelMoMGdtN3VONlg+OF4wKiREQ0hBLzd2dlBvZHI3TGpHQnslL2lUYFMq'@;
put 'UXBucl52OVBLcTgzTFhtRFU3a340KENpXlk9TStwKXUvTGNyQjBaTj8oYjh1U09laD50VXxqcHVRWF5EO3l4OiQ+fnUjRj9pTW13Y3QsTyIpNjBZMTJgO0BNInBleVZ8JEZvLHcmcUJsI20xNiJbQnVack8pLlZFXUJkWzE4OkUkeTVqfWssW251a1A/IXI9O3h4XnNfSEVtd0trM30lLE9UcU9G'@;
put 'bTcrK01oWClQcT1fN1hIOCheOTFMImdRODE+djNjREAkNks4Rkk6Z21gPUlIJDx6dEdJP1Fseil3VGtKVW5oOit5QGBiSi4wT348Q1twRkl6eUVYbns9O01paDs2VDo6K2B4MyNGYil+NVhCRWxlTF0zW0NJajVaZHFJMyZlT3F1cn46dHxGXzAqQUN8Nlt+cSVhbVlGOTJaPlNgcTp1XVRCZ1dY'@;
put 'djE+ak1PQWR3IXdEd2B9SV4mdDsrLGw5UzVHaHhKU0lUSnMpWVtlZVp5SUppISZLWGZ6b2RWJUNUWGErJm5gNzssdzUxJlZWXTwzOTU7NV9KV2lJSVVCZUVrZTRTZyJgOX52eD1CWkZkM0Y3Ojt9L3gmQ105bmdMVE9mQHJsR0RhelN8SnAicj5eVH1lR0h9ZyIpVzt6RVJyeGNVcVBoe2NQXkpW'@;
put 'aUhmIisiPVJCZCRsRnpSVzVPeV8xKDEkTjhLYFpVJjxzMURlNVJxQHd1fCxiZnxpYzBtLCgxO0woIVh8UV8uW2RoT2EzSUU4LG4pUDgiQXIlUHc9ZDp0a15JbXsrfGIqd3dbRmZiTUlnUGNtbjVmVVtfdihwKDF0W1E8ezVHWmooNi5PY01OVHF5JE8vakZ5bVRjPl86TFNRQT9HJCg1PDR4NyIj'@;
put 'YTZBPFswaWF8R0Y8R2daUi9yY2xhS2ZlYTpGKk1PajU7Qk4kYVI+MSxLMSpDfUtpSWB7ME9ROSR6Q28yUGRpSVR7Xy5VVVtoL110eFQ1T0IlWmx0QiFTV2dVI1dNYD8zQTlwS3ZmZUJTRSk3UXlTVGxrSUJ1RVR5WD4sY0AoIm05KCV5cjZmQH5yKlpeMG4/YXRMcWhXYSYqSUA9KilYSFNQe3BJ'@;
put 'X1hdKXZyNjRIUUp2WEtiZTJ6L311RmFEJFFrJUcqd31MX3IyVzZyQ18vN2J9QmpjZ0VUNzV9ZSN3UHttejVpfkw2Y1Evdl8kVzc8SSNHL2NVSlkiSWs7RSolZkYrfVRyVGF0Y1JfbS9ELFYqSVh6MENZZ0NjQ2AmNl1YTVtaRGc9Qld8TElbSyFuZW9ReVtpRTI+OyhOe0QmfXJSIzkoMHtyJDVR'@;
put 'd2pkYzE7TGJVS2EsT09iYztkQVhudzRFelRDOyNLa09yb1ZEQE1GYDg/eUVgb2VgXyhlT01PPCxmMzZLR1lPJjFwfCZ1eyQqLk5uaG4/SXN+RiNvfnQ8R198bz1ba2kkLmJqNF9sdDhuUGhxZTlRM1s9PUgye1p4c18rPjBZYWA1UDpnJix3Ki4qM1RfdG5GK2kuRiY2Q2ltWzdFPUd8fSlpQCN7'@;
put 'KykkSDtZNSlXbWdwL0NGMmFkQltjNGBRQF5OPFhnUVUmZUxELFpWQkM+cXYxcV5QamBUVHZqTCh5amZ1W3VbPktHYHBqI0dtVVZPczdSIUVFZ3wvV1tDWTkpRkYoSiFPJFoubisoZSVTXW1KSGtkcnZ+K3U0VWlyaCRpV0gvP3pOMmlHKWJIWF5lKWlSOUF4fTNCSFh9ayY5LnBBIn5WTn5pZU0l'@;
put 'R1RGcH1AcGFYWGk2dypOb3dffXdaNFJQaiVSSH0yJEolMH1zfUg1PmN1OlR9dDFRVis7YjkwOUg5VkdGQlQrKCFdcDkhNUkzd3okbzZYVTc5MXoqcDYpcTtrXV1bY2JpZ1B5a0AwV2t7fjt3d0p6QkBYYDQ+PyJGYVtiK1IoNlFiIyQyYF13fCplP2hnU34oS2BvSFJJIS98TFBwcGtHbHRrOXw2'@;
put 'NDEuaVB8dTAhT0klcTdvdDR5byV0NTksNlNmWUkzNiRYOHtkI0ZDUDRES0IrK2pIVVU+a04kOzVWW0o7MnhFX0FfeTVMSD8pSyF1KnFZajA3dkRnIXFCUWZtNmc9S1VNR3x1ZDRTRTg7WDo/MiJBMS8/TVJaSF17XmB2MHx8ezA8aC9GbTJiX0IwVTZLW2tFLldOXiNPbTd4PWAlYTUzWSV3Rkwh'@;
put 'cDAvY2AxZUJhO0RRK3g2MGYka3ZlLDlNfD02KDorUTAuW1FDa2t9Y0BMYmlwOiE3Q3hRdlVCMSVDLGZ8PXN7OiorSnZ9cGJ7ZTBYWGRLaVAiJjs4SzN5NDo8UmMmTSU5cFBhQm1ZYEt6ezBfLlhhNmsuYSIyY0gzLDlWYXA+LyswKmlgbGVUOjNkaEdyUD13ek1wPHVELklLcGBCaD91Q2lpS3sr'@;
put 'S0JDIj9kYFsyTn5HNkdaRWkpXmIuTDVwVSJPWksyeSZNT0hKaShANEdMfiZKNUQvTzBaPmQxWV1TTElANDZoKjRyek1DZjV+bjdha19YeDNsOG0vaTxHKmtPPFdbbGwyN2AhJl5sOkU/VmN1IWU/YWpxO013TS8sdmJzbSJmbllIJSQoZkBiZCMyZGgwRnZ4QmJyM2g8QntJOHs1WllsUShWJEJE'@;
put 'IWcjJDkofXhwVlI9YVMrbDJKWioiTnV5Nz9FP1BLT3FgQCoucE5zQE9jIlVpS2JZdEJxI01iXSFRTz8sT2hRbitreVFEdXNYQjZaMS5UMiM+eGE/InhkZF0sMngoOkluSHMiJENPeHRlXkVZdmR3ZypqbjQ9Rj1lIzg1Yj1GImpMdjpuMnJWOmRER0RNI1tsXVJHXyh8RC87UmZEaUJTR0R+JEww'@;
put 'YV1kRjJxNmwySTtqZEMmQyxoel5hcUZgOU00aW9AdEwkaGtCWyxIczVRcm5eYHpFRV94KmVYSVBPPX5qWitHJXlqVGFiRXM9JnU/cDt+VzgrXyRpZTt5RHRJNTxCOElmRXFjSzRSNDZzOEwxYFZ1YHpGTnEpSEhLKmw7XmY1U2VRWU1JV3UmPGlRM3lvW05yKyRzX0lQe3gwL0czPWo7RGVpcXda'@;
put 'e04kSmZXOFRrYTV8emx7QzBXTH05SCpoKU0hRHgrS0k8S29BciZ9R2x6QWNFTlB3PD9OQk9MMCwkRSVMTTZ0eEZyaC5VVVZ2anpWP3FvPjYrajZKXV9HK3xeUkBPJjhFTl9weitPUnRiVDlWJWZwfkt1Vl9wX3t6dDU7JVErRGkjWj1Nb1U3RHF2a3hQc2t4RGc4Wm1kb14jTCYyKU5XaC9IWn0k'@;
put 'TWNGXk1wQ2BYJjVHKmw6QzZ1a31XSzhPVkg1Ni5JKGhqaXRgXnJzKSJbcHFDeVNTSjEybzMrSV8ubUJdWyo0eEM0bkJ2akRwWGIhKUdxV3JfWjl6YV1gSF5CJW4hbCt4PGR6cShuXUp5fGV2V3Y7JHUrcnhHZXZqeitjejhnRjhDQGI9SX02YzxteFV8I31SfklmImJfTkA+MnpHdE1gVDJqRmgv'@;
put 'JCgsdHVwLlEodEpjSE40e0YkaU9yZDMpTjpkZkk7WXpRTTI8PlNLUVAzXSxgI0dqQD5rbHoqM25BYlMqMEZBRm4ib0R3UTUrezZKJjc8L3Ekfm8mV0QjNUZ3N1VEbDF5bkxVbD9iI1FQRHdzOlAyLGxZOCVaMT4wLm9eLEN3N1BpZDhnYXIiOSlsc2N3LlpPIUJjJHp7KVQ5cywrKiNMJlgsbT8l'@;
put 'Q0EyXnVfI1tZejZZfDdwXnxRczNKaktqaHtwIzdNVH1tKGwvSGVoYm5ROmp2LlA6eTArSW5IVzo3SiI/VGxKSHRBP0paNkZxaVBLRFAzX1BIQTVAPF4xNHp6WC9JTkVTfnIyanFmdk5nV3BMWHJKUmg2dmJIM15mS2lMVX1jPG5IdW5eY3UqKkdRSkN3Vj1kWVU+YkxOYSVnelteUixfMkYrQl88'@;
put 'dm5dNT9+dlBbYDBPLk5vYW58K0UlKzV9bWt8fmY3bGU1QntqTF1ZKSZWT2BLOTVxMSxrdVBGLHxBRW90Y0xgRE5IZjBgck00XmRYSjpURUc4fERyLCY0Y2xYd00id0J9UH5RZG5YSW4pVUovU2NJbEx1Q2RyZyI2aT0obmthY2NiIXp9NCV3fV95dHwrQlljL0g5e11NMz14P2UoViRfbkh5KEwy'@;
put 'Sn1BRUh8Vm1YMD1vfVtrZy9ASUZpRGhwcHQoMFtBe2clQFUsYlQ7KzBTT3JHaihxZUVgMnJHYF08V3xqTWBJbVJSUTBeJD4qTUptI1kjcH40LiZbOEokYUUvTGUqRkBdY1FqPE5rKGI7cDsra3d4cUhTYitMcUErZEo9fGQ9UGMlY1R1OUksY1orUDRFfXpZcm1CJCxPQCU8aj9CKWV4KHhbWHk8'@;
put 'I0xBQWtNUH4yOlV4fEJdemBDMUU+RyFoITVoNFFENzlWJipJdz0hImBKfEpUNUchO0RjLCtgaGFzQSlGXlM7MiJrPlF+dEx3QyVhZz8mTmNMdlVSXXF+XWlTaWxZfVIrTisyUUZRMjhJc1tOZyVwKjwhc15QZDFMe2pzaj4xY2NqNVJkWHpqLGQmR3NENiFGQjRFNU9tMzFxVmlubCNnLjoqVyFu'@;
put 'Q31CMldKXlluWGZlRnBiemZsZTRuRiIsW2Y5cSJLT2c0MGQ4Z3difUhuN2ZZKWdtRFkzfTxQX3JMKTl2alpZNTIob2I/Ymc0YWUoZDpKakZaL25qWS9xUUU9RFlsekBfWlQiPStSPG54bmtkflFdRDNOJlR7VXJNejJ7biohUi8oJWJIOCNfIktiYDtzP118PypeSlJab0JMSjElSjU2MSM/aCVa'@;
put 'IkBUQV9QMDk2OUJ5e0MhMHJCYF55ZFFXbG15NHJdL3lhLEtPJCtPQTB0bHxMTCFZfUldL0V4Qn1HS0FxZWssTHFgfXdfc1d9Uz4hSyUhfGZZMTd8eWc4fVZyPVptJD5tSWxRdzYkK3NSblUyW2Y2cmFhJX53Rm91QGU4bDJlfm5eXnZYW3RKJSxNJD9ra3Z3dWM4YkBnN3VII3R2XTBbQmA/YmN4'@;
put 'JCVDZj45am5KM1d+V283RFN2b21WWFVLSyRSSCRFVEh1ISEoI3hyOypIUG45UCN4NDFdYk9DRDlZK2JmZFZ+TDpgPlV3SW1SdCxObH0oTXZZKGdqbjEpVD9kYC5gKHg9V218Pz5gYXhjXVE9c1FgY0NzKkRSNn5MYGFHYypNJEQ1bjBARVEvMk1XbnBxbmZfI0o6OU1XK1FhV2pjYnlGPSMvYXZ1'@;
put 'T19+LzJEQSxHTTkkL3o9cDswKVFDOXcpaVEqP2Z9fnhfay5yTnJjdzxzeWJtcW8rcVhXW0o8OXl0OGtWano/Y0dQMmJWcCl6TzpxQExGLisxPjY/Sy86eyZnNGQ6Z2BSfUl1QHprTEs0O1NXZ3csSE5XbVFlZ05vam8xamZ6UlFSOnE8WnxBRkJFWz4vcnY2M3NeZj1MTCxCT0FxN1M9RiR0YEBq'@;
put 'LkYpMGshQjVOeGkpbWUoeysmODA+QWdUXihIM0UoUVYoNExUfUR6SHMiRix0TDVWOkh7LE9AVytmYmQ0KTszQEFabEhxMks/Y34qW15nRjJ5QD4xNkFiZ2IpMUJJJWx4Z0BpTWo3ViY3WVZ3OlVFY0tid3lvTzF7X0M7TFdPbyJ7ImpkczB7REdkXi5CSD5ETVVreEIsayElWDI4b3lrRylLKXYr'@;
put 'Xll3VXduez4qZj5CdUxFaG5nRElKP3ZTekcrYzRuNHJRRX4oNG9CTmFHa0tIbCtCU1BlNlt5OD42MkRadE1XVGcvclR3LG4uWix3KzZwOy92dnZfOn1QYU0vTiUyPUAkUlRvaERCaUNgTlEqKStXJXNAeyZfV30+PWZiVHpwPXtuQip7SzBuTV54bWFVZVJjekkpcnE9ez0xcUxZSmp4N317P0Fh'@;
put 'I2xyYEpRZzttOjdNdF5bR15wOzt0TkhRTlVHKnRzaW9SKFl9emRUUmdkWzV1K1p3Tk5gXVYoM19eTz1HYUxwLHlObmg5e2hEfEtpSUVJYDJmdUtFTDAoZmZzJWd2fGpSPk9tOFhGJWhFPGAsJHI2RVRyJlJVSUQ/dHd5WHBXOG5pQCxzTFFwIy97NjskM3xMak87czJDTGYmbyE/aHI7OG9JR3NW'@;
put 'QmhlZTVXfT5oV0BfYTAmWntocHwka1NYU31kd09+fVRKL1B3dUlHIntndTFaRHgrP345TnNrS2N9bFJIWEtIdnJjOSNJVT1+e2I+MD9NeEk7MUExTGNHZjEhTiJ8U31zTTR0c2N8WD5ITEo6LHQqXjRva20iIS9sYVQzIjEhMDUpbFBQYExveDt5SGF+Ujw9I09CWFliPiQ+NGBZS2sqVHtXT0Ml'@;
put 'Y1J7SD9aSVFrIVZXX21saWFbNiwoYzA7dlVzSj1pd0BsKFAiaDpHWTxBc241SmFBJkRka3ZfYiN+VzFZcjR8cy9FNW5JdzpfITV3MSk9Zl14NDJIfV50MlozMlsyZVc3eWp1Y3pjT3YuQnJWbk8qOVlrLFldaGtbNkNlKCs6NVhQWFJOXz54fissIzVNVT8xRyVMX3F3eXBeKzpjJCpDenZlYjFu'@;
put 'dlVNT0kxcy52U28hZj08XmNpUnxASnA3ZGxKdEx0MVhDNis0RzsuNlQpfFQuN1J1OGZ4SUI8OjglWzMjcj94QjwlXnNja1ZTeE0mdWw7ZGlBZXsrKGsmTUshI1VrS0lwd0VdcU1bdVR9MEFWOjJISmxkSTZDTFtNT2BXeHBfVC9uPm44N05beF57Wz5lR1cxLls3VTlONT1rPUJ1enR9XjI6MHEs'@;
put 'W2QkYDYqX2osVDh2VEpxO3RMJiRWTmEmSU1pOFZvOH0kTCpTVHBISWVEfChdWipTZ3EjJiw7cTJldFpvP2shIkF2K2RZNlYiVFVtfkJkWUAyRE8/IV1KY0xhe3tkTyU/en0pfHoqQjg2V2JRfWZDYykhWG0yM2VTQHIpRVJEUTtiI0k/MTNTbUlvTTB3YkdLbT5KVVlQaER9Qy8iWzhlcXlkXVBv'@;
put 'YFFVdHlVb31nPSJ8YyFfWmZHaVRAWFZeTX5dRjU5QSspIShPbGhEMWczTz5vVyt4am5CUEUkPTo8PWcxPj5bPWpaekBbc0ZJIXZRNTRFajxJMUI3UUo8bXkhIlhtY0ROQSlgXVh7Jn1WZWZuPEpTUSw7PVAsTV5WOytbNWorRl89WHZhQ0dkfDskM0NDdUhsVSo/ZSh0T1k/eDJUKzI3UD9tbGhp'@;
put 'NFMvanZiSCtJPSVhLEdzIj9FLGJ2ayM5ZCZHVDxEcDlzamRReyJbXnhiZXBzQFl2VDhNZHVVUXZ2aW5GSSU5WT9Yd3kkJXojYCs1Z1FEbmA0LnRjT2JgImg6R0EsZ107UCYhd2YzSiU6fiNuaCZqJW16VkE3YyxpWilkO303b0AsekpkQzpGfk56OlNDUHpROTRpNH5lNCllWyw6SVs3cnk6LFBh'@;
put 'aT9TS2p8TjlNc1ZiQEo/KFlnV0E0NmBda2AzK2RAJmlbI2BMT31wNVtGSSFXLm5eQCs7emFpd3tiXWBSdWdbbC5BQUBbMV5rNzolSzFnL0c7eVBiRF0vUEZAUkMsMnMqM2N+TSRUVVomRC9XRWRybHAvJT57VnIkd2dDZEJsZG8sNV5YdndgNiNuNTNPX1MjODQlZFQ5RGdbXkc8e0lrW1ZPWz1V'@;
put 'JiVkQl02UThxZS5yMC8xREBuKiMjMUpPcVlZdGJqT3BENEpsW0hdXjlfVzF3VUJ7UGgxZk5hIlk/PixpK20+c2ZHT2lQKyY6cXF1eW5MUjkhIzRyVVNVLG5nJVQ4ITRMSSZaUD8vMUYvQmhIcSV4LFdAY2khSSZUPHFIYj80OFtwSnowPmp5SEgxeFJWaCxJeDBaUkEhTSwwTUJxfHc9ezUyMVA9'@;
put 'OzFxKERpaG1keypPQUR1bUg/bHhpJDM7VDVJR3JbKyhhaTJ2cVlxakkhaG5dJT15XmJrLFBVWmVkIzFTMjxTLmJXfj9bcUxmUGx1RUckTiI9NHQoUGNOREhgJFJLVU5vSHl6NFJHRFZ6Nm9hV3FYbjwpZnltSDA+WCQjUC9WdnZoRCxqJWRAIV0yKFdzLzI+e007e3dYMXNuKSI7di8xN2w5MShu'@;
put 'PVBpQmhIb0xTJXV2UWZ1flN7fXomW2dIPz1kSyluWl4mKlspcnx2a2tEIVVjRWwydElvJTdxIkBSPXhjMVJmKWNlZjJ1VX1sZCQoKGVJQDdzWUxHV114ald6bCozfEAsL1ssZldnQzJjW0hTIm1zK35FTiZlPEp5TVkoVTkiOigldzRLTkxhNjNgdkVkbW43bDolNU5UOSZnV3hYQkBwdFRzPm13'@;
put 'OV04aTdRPmdKOHJfTGtkXXg3NUhUWix5aEEsQ0wreGRefHB7cUp7MilGYkxJR2UmMClsd3lueSkibUJaR0tnWThrXX1QZk1uMElDSyloZm00ZS43NnJxKDZGZzJ5LFR0JjJbUnZWNkZoezc5fEcqOEslZXdEMCxxe3h2W0xNPTtiJmVBWyVyQDpARz1wZG85JCQsSXtTMUlOK11LRHFVQkRTfTJv'@;
put 'X3M8VU1IMyRDIWFKb0ovWWM4Ynw1entPeWxpYSwiKWdtdjF4K0FWTlldfjI3JCIuRDwyK0liOjdpVHNYTGc7MiNaRCNQJX4ybWJOVz9yeTF2QUxDKi5fdHtpTD5STDdsO20xXT8mQDlfUl9oMyQ+cHZ7fWphenB7SThkZyQlLip4JW47bF1oWmZBKFs9Qkg1Vl90KyN3VH5PcXs8TFo3W2ArbFY6'@;
put 'YXZUUnUvIyUraVMwOUw6Ni8qRDxUa1tmNTcyakJXLkglTDBkPzMuZFV0Ol5jfHVHWF9pU0tvblMsVCk/U0xtaG9gKEY2MFhaSmg9cEgjTTpiO351cHBeSSlwbz1pfG1hWWlRSkQsYFM8VCR5PlBnU0NPI108djU0Y1Y8dzt1RXB4dVRlPSZbTSVlUEsyaW8wbj06ZCZzZE1URUghY057SCN5N155'@;
put 'RTxjMm41eXw7SUM7cW5SUVF+K0dNMCRhRnpRVlskYnAobG9hWWpoXzIyJHFLYVlofDl5S3lreyZ3TUJHeGR+T2J2L0dSIV9mIVNjSEJrM29hb2BseyxUaGJSYFFgPFUsYzhKUV1UaXM0OXJoaEA/O08sKyZZQGA2I1NxV0sjWzk0a2FiajV+d2ovdHhZXWgoX141YkFqSXMmTlNoK0REYTptfnFZ'@;
put 'bV1NTnBbWGpEL2t5aCM7QkxTekZOKkdNNi96LyM8PXtbJDhsfVk6V1QxM01ANERqJG9tY05aZCZrV1BVMT4/YzRjIj5kJGEwPzlKPjg1KFhTSXZBdS5tc1RSVTh1QUpTOkFAY2pjeH05LmlvbXB+bioqeGwjIW5aX0U5Y1pBQj9YNTtNbVRSUCVPJHAmJG9fL1tMbGg9V1NHPUQ3bXAldFQhV1l3'@;
put 'MV1FbHFyTTBnWSZTMjlJXkUheFZQLk09KFdtRUMuSWpJfkQ+Zl59WyhKMm9rVW17WiM0ZjVAP0NnOisyYFk2cSY/JTt7dnlge0c/RiU+QVM6X0ZhWSM1YDlPYFE7KmliYmhjYGpbczh8QCZRKCVRa35uQHh8LDE5JSw0fWRbTElZOHNqQ2BEZ1BsSkFnW1lRNCttbTRifDx9UyRtZjxJRVdOQyhJ'@;
put 'TGBSeSU2TSx+LCUuQigpckpdeih1NEklYzxQJT9kQ19UJnh1fTZEKEZTLFdwJGJlQmpKZXB4ITQzbkRhTC49SnpTVClAfFkpbmk+PiIzS3dUWmk8dnVeTmdhKFBEYlU2WSI9Vlp8bW57bTh9UlY/fDleX0RNRyw2TixsNEJBTkd2PyspS0gqN2NpVXtjUnAwcVd7TU13KFArXjsjVHx6Vj4xSHp8'@;
put 'NGBNeW8iNmsrYE5FKTxvZ0RWfjg5LytNUjJXRj4lO21aSSQ4PFFNb1EyeTlILCJMT1BeK25MIlRMY2U9YiZZXylXPFNRZD8ub3UodG5WIUowSlNwP3w2ZkxLMm4iOjFQQH0qbjxieGhzd2FbcnJ+VUNrLz54emVebjgoXj1oblJ5O3hzbURgay8yP24pQkJ0OkRYUTxYK3ZtWEM6YU1wYnZNXk5I'@;
put 'RHR4Qm50ZHJWXVI1SWsjVSx6UU1CfUF5N0ZucWBLSzlhMjFOOlJBTGo4QGZ+PiV7RWk9b2M5U2VpRFM8aGFiOktaNkQyIW5JXUAuaV4jeWxHS3M3N1E9ZyJFLDomVUBTZy9fQ05+LF85WUlWIihdSTZmREpxOiR8V1g8LyRmaDooUUtpREowV2UpIz8yWispZTsoblQiZTolNCNlJWwoWiFtSChi'@;
put 'WFJ0P34rN3U5KTw7SGBTYjdrL3txRDV6ZzdmMEpbPHBURnhtSHtDaXZ6eXt2bzxgLEM5a1AiUHk4akhRPnwrO2w9OCtJSjlTL0dIJUQ/QH01aF10dFZNWTVxPD1jR2lgaTd+ZTJPd3ZRRDtbVjF2LE89RjIyalE3amhCTjUycHhbfVYzfi4sYSV0Omo6fC9dcyokKUZMdDtWYi9weno2OTB1V1cw'@;
put 'MWtXKihvaW4oaUJ2Wjh9ZD9OPHsmWVZXe0NONXkjNmd8cStYR0UhbnJ+cmU1dVQ0QT1ObyI7KHx7VF1OcEA2XTpzP0ZDaWAwaj51JnFMR1IhS2gsYE97T2JIVGt2RGx7QnQ0KT4sSlp6QDxybjh3YkN+OF5NLl5AfmgpSDppRk9rRExPSVZrVl1UTyRDIWUuSS5UPHYpZWVXUHIkVixUaV91YnIr'@;
put 'VkJLUE8yRnlNezVfWGhOeyxoIk50QzhDbCw/Sz46O1AhJDBHMS40dnJQPE9IKyl+NGJKRXEuYjtaQ1hvTiIiQ05OLDJ3Py4wK0w3N05CR1ppKX5UUT5bTnhdalB8ISRjOGw8PExTMiNeWHFJN3Q8akREYDVDTUpIXVcpcTJaQ0lwa1Uvd1tBKXwjbj5XPk04VHAxRV5CJDdfd1I7VkRAL1ZFSUhD'@;
put 'fFIjQj4qS01TP095eFF4UyhNOTF8YUAkKGJsVyo1dnQoQj5HXSV+RUF9YmU+T1ZzdzB3Okk6b1R1eiJXRHhKYHNpRSE/V1ArRHZaPjZFYjcofGNDfHdkRkNbW2JZX0hPLGpPa290T3F1MVhbImllJWRHOzJ1Pmt6K3FsQm9WUj5ZbV9PWThDTEkoZTEzRSZgMiY/bi81NWk6K11SWWdJZ2Vsa01v'@;
put 'YWdUd35rW3M/TDI2b35yWGJvMT8jdWFLJm9eS3kuSHpWQ1B1cHdVfGJlIT5PSEcvcG94JGVkY0ElVmhmK184KiQrO112V1EiIXRkTElqalRUcVhaS2JWJSlJPEh1QlpoeX58dUtfa1NlRWZQMTBKdlhzV15kSWd8WFR+UyZULEokfipGcEo5MVBTTF1ETCpbOCwwZiVFZmU2ZnV6dFF3LDRCQkEq'@;
put 'O3JEY1oxUTVAIj5IJDwkZ1V6V1R0TE06VDZiInMpYl8zRVNvd2RUNjxfcjJAWXJ8InB7Vzg4bio5VyVkLFtgJjF7PUpmNG5SVWQjcSJyN0ttTHIrKiZgQFMqNypYeCp1IXRYaG0uN0ZSdHx+TEQmV29wQC57RTA2KCpfME4pOFhvWFZfJDx3PUBLcTtaaXV3Jmw+cFM2PzgofjcqRkl5LDxWbWo/'@;
put 'MiJXeHR2Xz4iST4mVS5VXnpaayhROEVvMHZOcmR7LnIlK08sW0E0PjRfJDoxZ11WV1d5aUlePWtjZig/Ym40UjdNfCl1fmFETGtMMXdMeGpHPUFaSEFBfkAlNWY8PlpvfGF3Uy5rPDlCVztedy8kbmNPNE1fTzNpSnxfXjwrTXF1RiFjd2MxNDkkIy5AfG1JbnV2bFNgIU5KPGhja1FuZkBuZik9'@;
put 'JVppWzBXKTY8I11IVFYxLHBbTzBUb0peaU95e1h3OkkkJTEhfXpDJl9ZJFB+JXw+Tk9eM0FRYHFBOXUlUVUsY2hDSCRSZUA7aTQsQH0wTmNaYmNxa2heUCUoMG9ZOTZTRktdMXswWHpUUiUpdE5bdk1WKWNBQHV1eCZ4V1FmZTUkTXhvYUg9SGFxL142QiVXaXdbcWMmdTVfPylQTVNHKXpOJSYh'@;
put 'OmBwaD5YOFR5eV98RTg0RmdgdnhKd3UuYSRbP0BOfDtuXjFUbyt+VEBLZHhqITxDKDM9IzovTyQ4Qlk7YitRSTxbOGU1V09EVzB3N1N4VXI0elsla1oxTnpgeCFmMWE1M0dUS2osaVBNJG8sPztTYl9CPlJvUkpAMD5fOld1RzpreX1OUSxKYzA9U01ZJndnWzFHLnhlTUVsQlBdVzF8YFtbP1Ve'@;
put 'P0JPUUJ8dTVQdTM2b08qSGIjYXg6YH1NTmU3UDdoQ2N7TUhoRnNxfndKTTQie09hfmIsT1IhMlpFfnEpTCtNfTV1fHNGO3RecHRFVUM/O1gpOHA7P0hLNyZ5LGlOJGc3QipWYUY3d3o4ZF9XYE1eV0FRJjJtTUtXYVlUXiEoMiwsdHpnW2g5RERTV1RDN1d0aExWNlE3aSYqJksrRUcoZyNiXXNi'@;
put 'TEJeJkJaNEM8OU1SfG8+WClPdCswaEVddDoxS29dKG9VWSh8YDgsO3F7LCZzPENUWnYxJWVLW1YkMjJzXSwwY0JqRF8sQypIKWd6flNYckRXREFjfEs9W3tvYXFSNHphYj9QXXEiS2Rndj0/SXc5VHEoRVdJOjxCMlQ/PixVPnE2N3REZSZbXjZHW0JjUWFRIStSa0NnMGFKSlcqQ1B8OHpvKjYw'@;
put 'Y1p7THlxUFc7JHZsS1t9eVR5d015Yip0QjZuU3xFNi9ZWkx4ezkrJCs0PDNZWk1zPEI8STddeTgrKEhgOVBPW3tDLzEiKFdua2Vecl1gRG8mRnxYNk9XJk87K2BDdiI8VmE5JjhJXSZSTEtwPllQL1hXLjZXJlVgZyNUSk9ONlpSVFAxSkBPUiZMN3xtNCFvY1tkY3R4USMoR1lYVDJVWi5TLEJS'@;
put 'U2BQZmxgeGZyaCJkPVdBcF42UTZYTysoK3Y7bEo5JkNDP2JONi5XTXAuQERWR3xTI3FreTN6KnNMV1tnbE0hfW1DUU9eTWlQWzZIUXtFWG54a2skWT1dbEVjUl5zOUdoaDRmajQlTzU8LEJXUUgjUTBQcD1RW28wQ2QofGpSVmcodjUobTg8Y3VYIlE0RXUlSnAzc0xocTZQfShBQUl0XV56NjN1'@;
put 'W0tQT3RdLz5yJER9TV98WjpITnkpMXQ0P0pHPnRAPERzPixSZyE+MF1Dd3EyXSMsWmoscSlBIWlNPSpTVDJwI1RsWylbW0chWT5DXnoofkRFeHJifjM4aiF9OUlxbWx9WlpMZWV9dFk1On5vUyt7dV9jNi43UCo9bihgYno7fCNEMUhBYUQ/fTx2RFJZczc6alp6JUVzPn5nR15XbEphMGVgIVpa'@;
put 'b1J8PyVFc3tXaS9dWj4vQyZVM0hGYWl+OzpkbWxyJFIiQ3AkbmxyJHZ3XWNjLEVgSiVJYU1NTm1RQGRVL3MrQ2NlczVdbTV8aGRSLCh1aUwkcjo9IyNGeFoySkl3ZE8/W0t+VnBpNURFNitfSUxCSHdxV2FNL2hufFJVUmx+V19FKU00KyJGMTlFNnQxTilLRWwrPDF7JCJJVDJialVmImlQVipM'@;
put 'MzhLTiF5RVIycG5bI0hrXiJQPCl8SVVZbnwvY2YobD0lW1AhX2xfVVhNQ35xcTI8azdxcSg+ZClMNVFFViF4Q2dCdzhiNmgpK1VofTFodCsvcDdsek17ZGYwJWJ0aThjWV8zXiY6ZS9uSG8kbVA3UGkoeDo0aSpyUF9wLmtDK1gwfmJyMiQjalNHWjttKj18JXtIOXJNX3c3Tk00VSVHKHAsaDdC'@;
put 'NWVEVUdeWEludT8je2thNUklaGdGcVUwWFcreSYvUmdiaWFsVlp1Y3lRJHxhNyEwRkcqUHZmej89UWg8aWk5XmdYfSpVOERpV1VqWyMmRSZ3dDUkeXJ1Z2NZVEVKMXp4TXNPP0RESVBeejEwaUQkV3dRN0BkTVZ8eGh1eEVrMWQ1WCo4d1NkXTZlelZmVyU2UEh0W0ZdW1dXJTs3bzZIODNvaG54'@;
put 'TVlUTmwxaStHeW5zLFcoXzVvfCg6akNpPkc1aHZCPX5RKyh9VCQucD56LHx0K1FLUksrSVhMZjxfX1J8cj5aREB4NXVdUDRHLFlAKUUiOnxlT1dhdl89bUI5Q0Z7MUlbUCFaWEFyJTBKY01UcnViJUMyWEZDLlJjc25NTGpiJj90PkRqVkRNNnZTXVd4OH53ZDIsUm1SQFNLfmBTVGkwbk48XV10'@;
put 'eX1CQ1ZCeklEVEJTb1UmJlpxXUlWSGJULzh2ZzVMO3lubXEofko9YVVRQW57blhnR2xENl9HYm5kZzl7LGZrIihFY3ByQSxaSmpTLjhRPVNGRyF3WUA3UkxaXlpDRDs0LkQ/ME5QczYlNDBdMmpLb09QJWQ9OUZsK2AkX1NYYFApfmN6QTRrVm1+MFl9RXB9Ln17RCVRXys2cmlNX24pWDxaOW04'@;
put 'XyVmT3FdZWNHPG5QPjB5ZFJmYn0yOGhbKERyem5ZMHxZVkRNPFpfZVMrfW45ajxzVV4hWmR4OXhDSWR7d0NJLy8uYDJvYCU5dzw7SWVLJnc0aCF9Ml5TYXB8V2I3JV9HQT9vYiFhSiRCLjplM3tOIXkmQGxNQFRhP0Q3OEhpeUJzS3lrV0JkX21wNV9iOX5JOyhNQCJuU01MWGBLZTVGPypuKE00'@;
put 'SihdenUvbjgkI2hsdGElbyU4N3ZOOS9NfkdLZ3lEPGVSQG5AKHIzblVDQXgrJiVIbXNQKDYrMmhlOV4xak5CdVsicTZiVmpJe0g6In5aQkw2LFBbZF9sQk5hZSpzaCpBTDR0YDx7byUydEZzdE1xOGliM0pCOU5JQ0tNekMxN0BvZFAlRXc+PSJkaWl8Xz80cC9sNWN4ciZOVXw4KiNtLF5zRipw'@;
put 'PGMsdFMpWHQiTGdqe2VLYXJ4P2w/dk8pOS41SyJdZVtEYU9PVzBBfF0sZ21Oe15SVC9vd0hPZX5CL3E9THxhfV1ZV0VNSV1kbXQzQT9mLEZXPkVMYilxISYra1Jnejl9M006bTcxXjlacCNUIl0qPV0zNXFmT3hiSEBqSztRM1d9LHRlM1BAelNaTlg8S3l3Y2t1MlRSbGlGY2MvWSVYQF5MIWVb'@;
put 'aDVLVThPR2tPUW4kLnZycV0wLEtZNHNKKkNVSEtiPGZHc3FXWGtiQS51T0RCV1M7ak94cShHQEckZ20pbHRCXyQkfn19fVRVZG9qfW8pIVk0QzEzclkjZ348ZDFVcUZ3M2gxcm4yJmh0QWJdVkw/P1B+ODBlODoqdUJQWjksZDokcz98JjJQVixFdC8mKGVBPiJtJiEuYVNZIl0kOnFifnFeVmRN'@;
put 'a1d5W1FFfkd0MFJBdkNfMjspS3s1PHZ3Oi9QekVIMCZzUXY6TDx0Vm0rQTM7L1FYb2J4SURDfVt1TEVGcDRJSVJQLlJRZElhdy5+LjJlQGM/IV5ncEkxUHwxK1pNeyVJMVgrLklwIUZ0WnRCXUtKUXwqRE1CcGQlZzU+eElZSntmJXRXbV9wY0xxSDdqV1J0e3koRjQsVj0lLnckeSZES09gRUQm'@;
put 'WzhWc1pvVkBhNCx7ciNvRi9JfVR6aD58Nig/YmMmdmBzZVM/bTF9MyUrL0QmWnFBWzJ5ZzMyOCFxVTIvXU00MyxAZC4jcFU4em5TZ24hUUx1KEtRbn1DNjNtQzVTQUhNMShpMXFKMTxJJHlRN2hDSTlWP21ha3ViY311ImU9bCJESF9ZR1Q/a1U7KFdKZEtWUmhpJWpoc3NVQDlrTEtXRUJ2NWo/'@;
put 'VEJBVFN5Uld+ZU0rfDx+K15hVyI0WHI8P1EyTS56cTtzemV8bmBBZWt1UjVddnZXOUFrZTlZfH48cnxNNkpuJVtdYTwwRztxezVJVCNwSGJrKUFpUSlJLDlkZntHfEleVyZIfXlaLCxDJEhwI3taMl8oLn5LKCI1dSpdaiJOa31aWkh6OnpUQTYmOkB8fT1jRVV2NTdPXn0zPXRSIS9uTEVRaSla'@;
put 'YVg9dnI8eztmSU5mW2JoOUdHP0MzTnl0JS9tS0MzSyU8ZX17Z0xFYH1DKnJPLEI+MCU3Olc4dDpbOmdkeU5we1A+SU97SXtTVVUrMUtqKytEMDlbITE9IjhVJVBmZSw2WSh4Rk9TOj4lXVhlb1VZSzcmXntKbTIxNm9HQVNeUj5QckNuKXFRPHV1UHdOJEdJeUVELnJ4cSJbd0p7XiNMby5OSlhQ'@;
put 'JUh6SHlSQ2YwZHY/IVgvTTVnMkdlWTReNF1PeT0zenRkRlFIUiMsSm9sZHp7ZlNuR190VVp5Pi9QRjZMb2R4Mypze0ZAWyZFRCQ3b1glRnA5RW0mNDpkLlNHdTlxOUkkTkpgQlsyPiUkUXFHcV9VSFNzOUV2fWphYkJ4InJVZUxtIUc2XUBsYHlSRl9GOCZaZXRdYFdAQn5rPGxOPyt8OWk4RTwp'@;
put 'dExZLG8rKkpuM2RKMmEvMSVTOnNJdnZ2alRKVGpwLHRwZ1I5LyNKTXMlNyFJdzlrQSZzekRCMX4rfTlMe3duWUU6KzhOaShRcTQhezA1PjQxNHMsQDN1OzM6QFc5P0BYVDs7SjIuMzw5fEdRcVhbQTovPHUpWiFvdkImfGdHeVRsXTZNInFBe2sxX181cUljTlE1Z3V5JjNBO0NOWjdiXVlNI1d1'@;
put 'S3xlJEgwc3cvWVojbHVuc1JPb24/VEZHb05ITkVHR2JVUjB7Nn5MM19ofmN+XnBpLHVFPWJ9QFohKTxdfEtja24hO3YuY0s+NSteWndWVDZBc09jZVZkXz1aV3ZpOSlAREo+bSgxQiw4KnMxWWUlOWdLciViSl1KTWttU1BRUDwvXzRzUmN2WF9gZ0BWRDdWdmFzSU55cW0/SV08ZkwsMD9EIkoo'@;
put 'blZPfiw+RGBNNlh1JXVxbWlnej9eQjghNExlRTxGQmB9a2B7ako4MiE5QDhpV1ElSHY5XU1uKldrcGt5JkhBfG9dSG1JJD96SHJbd31UZXkxW0lgcE5YJmskanBXP3k5bStmXSlFfStWfXs5MXI0KF9kSz1zZTljM15xNmArdV47cnZvYiNSRVUyL3pEWkxXSFk9OyFqVypbVmJYcy9DISN0a1Mx'@;
put 'fkwoKjBuaCR7dHdEOnhfM210Tjp2RFpEIl13KClDWzIhKGdzK1FqRX49SWw4RDBzVlg6NSlyakRQPmtTVFgzemRNJH11I30kTD4kWGZMZHwqYTpJbj1OTm9heHcjYVJROmRlT3gqc1tec1AwIXlFK203VyxkcDhuLzZiOU5wcHMyIlJCQWhePkZdVTpFNWhMOF9DXXd3TyxeKTNCV1s7PTNDciVN'@;
put 'WXBUUVhOTWtRJlJqfCo2XlJmJHE0d3dyMXNWNSNnZjJMfVI6b3B3NlR9ZS5DQT9bbWN9XmQ2JXAva3NQJVQja0lxIyo+VERmPmhqVF96T3l6LGZJREZaKFA4U3t8OX03YFVOOFdtYDNxTjEkbHlwREc8JiVfTEs/WH5QZ3BzZW15dVJRWm9TOU5+UXxiQG5EcnVDal56ZiVSSGAvU2ksczJjb0U4'@;
put 'OSU3JjBQOV5bZ2BgSXFzJVoxYmp7aD8mQDFzc2lXZGduYXNfKGNDOFpXRHpROW4qblZIPU9TQSNoRnAqIUlwbF48YXwxLiU1ZXNtKG5yY0M+QGMxMUlxLHheNzE7Rldue1NEb3s0VF5QQyw8XmZ0N2NQIUJYU3JbfjVjISNWfSVpJjYiQHFvLDc5JWV+YEljUnc1R1MoVzp1YzhhfmFUPS5VLGZC'@;
put 'JmlwZTZiOnQqOXg/e2JST2d1Z3VZSytnOiZlQltfNClydUNFUTxmNWh0LGhhaFRhRUZDSFFLYVNuUSpmd1RFMGEhLCMxWCRGSkdXeFtucTNdXV1meCNJW24yaV1WTmFPYVlsKFtDTlhrRyVMPzRUPkxkcSNhX0AvX0ptYjJJS14kTD9JaWx2Y3BvYT8/bnM0Nm5zaVFFPzNoOFdtR3wsU2RQMnN7'@;
put 'ZGtdKlYjX3liNlUlIkQ8UDc8L3NGQ3kla2dFTVIqZmt+K3pMd0JGPF03KHRyOGl6fiY2IkpVU0djSUAwNjhHRntqSkc9O10vTjZgJjBEZHdlNW9fZ2dZMDB6IlMlNElScXdAQEB3QzZjbUtmJkpvb1RuUHpJWmVAOnc7b2tnYEhGNTghQks6aChvREdZYU5EaHUqZzhHPnJYT0NVMl0lQko/WUJZ'@;
put 'cGNZRFAuZjErQ1VuT11sW0VNU305OFtIUHcocC9weiE4ZmVqdFs0I1NScHBiPTBkSUBESSFtPntUfHI7LGJdW2t1RigsMUVYQiNwIjt2OG16fmUscV1XOHMkeDYrOEN4XUBALm8sRmNrQVU1L0ZLeVBdSVd6MnxeM0ZUT2Q4PWlzPVlIbSM3JV03eCFxWERfeCFxQ2clOXxWM1ppV192V1Z1JT15'@;
put 'IiRrMj9QdyhGdDRLOFRoTmk2SEF2TVlTL1E7bXBUPSZGMyN1XWd1a1lVaVBaOFBBRFo7akxOcjEhZiFMSzNUb1FxYU52X1JZb297cUl9dTc9OiJXMU0pIWAqQWxhfFZ9K2d7djtfZCZENipjPDJeJWx6TzF3MStuQnRYR29QXnBfTCMqPSZdME83Ijg8ZEtHNn1jcHxHRD5uW2RdVFV5W3tmel5q'@;
put 'Yz5beSUwUE4zbCw3ZVVLczlBfl5aXSwqNmJEaXxtS2tJTjh+WktlXWQ9KFRSOUdkOz4mMUlzZUJLNG1tWD1LQlV4cDlLd2tTITYiIk00LCZ6YCEkcXxyc1VnOTd0WEcxWSMvPmV5PW0mdDhnZW0zWGAyPWZWPyFyeFs6MW9tVSJMaiVyQ1ZORyklcytKRjx2Y2d8ZVlja1RjP15iSWZWflBlak1t'@;
put 'ZnU9WUw4JU85WjtDLltgU1pRcyZeaHAjeSxjX3N8dTExdUYpRyxqPG46d2J9eFpvXzJOfUw4NXRxcFhnTSVzZzsqP2lWbDQzdzp5blhyd3g0UUZ7XUV8e2d1e0VhJjtHdl8sKV82YX5sOjc6QD8pOl0/W15oMipQNCwle3YvKlBHMW1eVHp+LmV1eSlRK0lufC5fbTsqYjpKYiRST101ei47bixg'@;
put 'P1QyI2UjZmRAJFpVcGczPjo1cUNidTssbVBNPTpWM2M6TTc7KU5de3U6WzRnWUs9clAhb0BPXSNqOzk7WllVQk9kWDRRPjc7cWhbVHAxbH5vWlVdTzREQ3khaVBOYStiZGk5d2NGfmwlOlcvNUkmVVlvb1J+Q3ROKTNBdzV6ITRCb298RFFHRig6fU4jb3V3dl1fbTpoTT99Wl47YDVvITtFRGJn'@;
put 'IUs2engkWz9+OlkuQG1VI3wxSmZHZTo/UHJQRkk1cUgkTSk7PlVoOWIpMTtZOWAvVDtFTHl+SWIuUF9hJFJRZj8/S1NiSmF2TzFWQ0dFUTJMNzF1O3d1VmNzJU8leCszS2c4N0s6QzAlezpmfF9GS2dXWlFSdzVVVVVGKD9wSCE9ZFt3WGRTTlYvYWR2R0ZIUG1XZktVPitdP2cvTmlOdDYvWXlC'@;
put 'eFJHIiQiMmlzPnMvdEgvUWhoSkV4QS8+OjpbWls4Z1QxOGBBTFdrPFM3Ki8xflBBJSIyWVtQM0A6ZFlyNztXIU5UODZNUDgrd0NlRiEwflZjWzZlTnVyZCtMaEh+eW06ODNwb2lPVGMoOUJ5WypLRDtLSF1HPTtaZVlEfTJaZXd2KndpV3l6ajFSSnxta15Me0dlcHozWHx8Ik1xOUV8OktpOzhK'@;
put 'M1c/KX15dFtXJUpuIkg7aTA4ZiQrTVsxdHo+cDo5ZnkwdjY8aVpRWnVWazppTkYrP2V+STdIfCFmNXF7PyRDNC9wc1YwYV1nZHlqYE97aFY3KmM4alsqQHBJO2lELHJ7JClOKns1UUB4KW5mVS5BJmxSamxtLmVNTSVzdyhpa0B5KVslZ2hXWUAuQSY1MS8sWmkkYXBlKTFsTj9nTyFjcTxMRF5e'@;
put 'ZkdlNHZNOjwjR0I5QkZOOUZfRXlAOENscmVCTEVNUiFZeThMZnxMektFMGQ8IkJ8SHRAaFA6PmxPeHomcSJOIy4sfVN6cXpQTDxNfVgsNC8pVztUezRwdzdLVmxMdUxfTVV4WH1IV29sYGFEUCpeVyEpSlU2aSY0cWhlVzNfbk1rKn5wfHM5SzxtX1U7a2FdPSptUztaKWl4UXpjSEEmX0Y6UUJY'@;
put 'Nm05YUE6M2c3UGhWMmE4V1tmXzQyNlYkUDFVYVlLcVR0IUo6cVtSalRxL0B+QHlnbGBzbzZXODE9bXdlTXRjbnF4PmYhTF47Xjw9M2xgOkR7VC9QaXlXZi58NHxpcT53bzlxcCYlTD8obSwjZ1ZRcn16QkA4cX16JlZ9Q2ZuJFBie18qM2luPmtiTWE3YTl6LFIoJT5nQl80XVs1X3Y8LGNScnFl'@;
put 'bEBhQ2pZeitSJlleXWMmMTlHK2ZwIl9ib0lkKWVMYGU5VTEkOCRLekZEdS9ZOjtiO29yQ0M8QDdyYyxHMFR9PlYqRmByJTIpSXZZbj1BcTMpQmpYL25bYkBhQSxIJW48MUxLYH0yMFFmU1hnRiksX29gPE1jUSheWyswOkh0JUxFVUxXaVIlPmclZjlBSnx6JVo0YlhkfCYzZz04cmM9PmBkMVVV'@;
put 'JFZ1aCMwMkI5OyJuVStGWzF4OH5DazciKCRGRXxKOktgRmNsb28mRCM7OWkxe0pPens0UiRDVmlAfWw9QmxReV1VaHp7e1J1amB2empHPnZLTml7dDp0PWU+cjRHPz40cjR0P29sej9PamZeREo5PCR0KnYxLG9XeE5YVy4pX1dqfVRjcy8rV3NSJT1wVFtXL0tzb2JsJj12QjVFcnJNYFMvaEU+'@;
put 'XTg5WXJNVH46ciZsOkVMdkJGSGZSc2Vjb0dlT14uPzxLfkg9XW85bCVdQklFQlU1VWRoIno+OkRMST9ZZT4pdTEhYXYpdW5gZENJQX1TJFRIQ1heO0hDUTczaHR1XUBeYk1aZkZ2W2cwdDkpfXd2PCRzd0ldeXwmSWk0Sj9KMFI4fFA/ciJ2RyVjPCV8UnxoZS5AJkZwUHRFb1k8cGh0ez9jZDRf'@;
put 'VClnRntgOSU+dVt9MHNARDVoJEtDb3cpM1spfksvZGxVI3F3SE96RCN9T1BWIWFuYCRDXm4hJX05TEJscEN1X0EvbypPdzU9bEJmQ0g9U2hAP1hjXXNCL1NwR1JFWyxoZzZaPz0ueUQ0I2tROkBsXW5oci9tKyp9dUpmVlshWnJAfD1nLkNgXWZeZW9pL0hDSj1BemRKbTtZV2t1YX5hJj5nYjFV'@;
put 'aFBSVzF+M1kkSTxNJENCTExhW2AuNiJEfmE0LDRVVlg4VntAXUdlWXRxc1VfTjhWYFFDQlFyaExTP05bOjYwUGxdcngjLEMyXUQ8TT0xW304K1U9SUZkfjMlMklmZnRUeDNFPUxWL14peFA7PF9ub0dGPXI+ZHRzJDFwbyw/Wik4JFI8I1IpanMlaGU+MTAoNn5odTR7NGM/cFRENigsYlFGJlpq'@;
put 'MSxBXjxEUH5tYG9AalkiN2h8LypsJWwiOi9YSkNUOSVMU2xVdTUyO0RhKy8kcEFRd0lBOTtvSmJaZnZJQ1o9OWFjNShdZWxtY1NVLGt9fnhiL3Y6W19xPjpjNjRfc0JeIyFecXFYYFcwWnFQfDdESFs7P29pQmhNOi8mWFo0Z2kvSWkmUHZgNzk8aDhoLiZHIT1WVS88Qzk2azkrOGddMVUrc35e'@;
put 'KzM5czxbM1ZiaVo8eW0+RCgxZjR7cUVWdyJpNjg8YC9TPXs6VW9FI0Eme0A2cyZUM3EmVExdLnlEcHV+UUFNPVBGMGNmdU4wZD1OdUJ1RmQpfUUxQy8yUmxJWDI/WWUxP1llUDk3W3pSVVs4VlJjeSIlb0U+NDxJYVUobiZ7dVJjZFt6N1VyUUAxTVEkZGheYnlkZjRgIjQmRTw4c0csKjdZLG52'@;
put 'U2dsRmVzeHdFakRQenY+bnUmYzZjU1MoV1MkUCNbU3BxKEw5YEN6dV44cU5QTFpkMEF4Ok5AWXRZVkdjLlQlZjYmd0lsQCpYQSkvPzxdaGJoMSx2bFZ1VWtnI2k7KjY/M3ZUeCU4S2hmNDA9cCtecntaXkU7OXdWQ2U2VGluWnZhNGdVbFZFMDdvSyFXcTgsOEtNc018T0V6bmpSL289fFZKdyNY'@;
put 'NS5PVSE5fE5OU2coK29zPHY4bzhkSk47QEhQcTBKSlFhfV0lN0Q5JlN7Nl5ibmBFS1hOZilAZTtbPmU6Syx5JEw/XjcpNndtWCt1R2IobC9IRCM2JiYqSU9aMmUocGh0Ln43YSshaUVeOmRCO2xmeVNWZXR7YStvb1pwTkQ6ITlkSWo8TE8zWXBrZk5PaiZrK2ZkMiw2dW9AQVFNW3p3MDYyVTd8'@;
put 'WllAKDNmVl4wcHhsNG46M3d3PV1zTnVDXnpxdjdgdXg1M08pfGNlbUZPI11dT2UhI01CcmAqYjVgbXY0N2ZCal4ibmBbVVE4XmUoa3dVdFJPIVp3M2ltM0t7WllsQVtATEZ3OH1pKiFzeUVlNDZyVFJpeCEwPil7KTsvIkY7S1pLOz9meDdhTTtvM317PEZlQnEhejJrWmEpcEcsY24mU0tQfnZp'@;
put 'fGBWUTNYOGQyeVtqOzRUQzgyVFFzYWh7InN5OzNrQDksTTZkI3coLmRlNHhbYk9NKEpGYn5Jfk04dWU2JmJ0SE10SXx0XUIvMmtPJG5IZmdmR0JLSyJpOkspSUtkNFAya15aTEN7YEttQjwjOHZmXVBqNE1Le3crZDpGN018SFY/bjluPEchfipROHp3cnFMIykoTmw+RnwyN2VRNnk1YCEzL21z'@;
put 'b2ddSWZgbDNAJC9SRlAwZDVmYUVbdWlvYWUvczdAR04rWk04KWMyRzwycEMqRFduQUsqWGpxWDg7ZmU+TXJhcHAzcUMyT1NeMD0kdiI4K09iPEFyR1J1RDReXk5JVEk3Sl11Zi4pPUFQXXhUdGtWMTZ0VGBCUi9ONCokS0csbDdHYUxCb1tUb2xBK3Bjbj5AQE0/Pm9CSTQ2dDBzcVF4bnE8OmRK'@;
put 'NkImS05fYj5NJUFjeWEqcTJ0I2RDSFNDez9ydX1odHcmJU9ncn5gSE5tRlpMe305Oz9YbmY8SlVhVV5VcDMmOWJLdGtrVXQqdld9Q0tVMix2PXQ3aTAuNSwjfFRpaHM7bn1wO2ZtWztkOXkrW3FYfS5vJXp4aEY6anlGZmlfUTpuR1FveHRoTDEvM1EwR1I0XzI/cDtUVTk0UFc6OHdxJEMuRHN9'@;
put 'O2peOWtJVlhaUjdZQjdzJClEUFhSUFQsK0QmMlJFSE5OLjkwIyVXfj09JGYmMW07MCx7RyFncFQ0QmY9IUI8XzglUU1mRWJpdVAoSGMpZkhBfSNibER0LD9NPXRXO1dCIi5xUzpLWysxUlMrZCowRXh6YHFed35odTR5dDQySnUqfEMkX2ksaV06NG1IeUp1PVtdPU41TkpHWEsxLFliU15geXFL'@;
put 'eEI1JT50SV00cmN+UWRETlNzTHAjOFN2bH1GL09NM1Q0aDVaL0RKRzJ6WHpRcFJKaFtoenBSZlNqYXJCX2ZoPGAzZ2FjVFA0LmBbXj19aEtQb0NUWihLdzJ4RykmYUNlRn40YnFANHx9Rix5RTZrQC5kUHBgdH5ISnslaFhaWVZmKWVNJH1CSzFSRmRwQ2QiVTp3X3lTeDl5cVY2R2gpKDNjcGJU'@;
put 'ZkxAX3ssZVpbL1JDX1NmKkBZVlJrNUlGckNYQj9KNktfNDJiY1BWZTlGXyUrV0xFJTBQNTw8YGhaRFVyOTwiJkRbSi4qRll8SjB9ckBHOH47JitgTDt4d1A6OjA9PkpDK1BMTW9jVUBjKDdqeXQvOUpPendye1AoVmVrJGFrckV8K0VwYGtAOmpXY3VrJVIvQEgzajEmdyE2Ik49YU5yLDJiPFA2'@;
put 'fGNPbHpHT09RW3YsMWE7Lj91ZWMsOjJKZX4uayYlZ31eXjNRSX1CRV1ZTS9OZjRZVjohOXZaO3piZk4yO0dSZTQoLmY+KCpaY0BvaVcuST5UKFR8R15YbWlpQEpIW3VERjlhITUlXU1nTT0iZ1sucj9jW2xEN1sxXiJJWTAxU10lKioySmNUQWwqfX1KTSZpfnRfPUQmQkN+T09GYWtYPF5DcjJ4'@;
put 'OFE9RHlELG96SlFPczZJTyxYcnRbP3BUfkc0QGFENXNgRj5qUT1SZktJLFpkczddS1I8fWsqSDI9ZysuRV01NTRwPEY8QzBnKT4rUUA7aHkvKn5pOlJSaTJiZlZATSJbSSh6ekJdbCEjfms6Tj1iRnlCPFRdOk49bkJ6R2NrdzRTVD00MUVMbXtpQjJtL1R2UFt5MlY8TWs3UiY8NjZwTUJTSFVR'@;
put 'Sjt4Xj45djE4K1NqTHlSNDF9YEhtUztTeCYscF0yVXRAOThEMUpDS0JMWWZ7RFloWEI1NDRAUCQrTTxzRCJ8KlF1TDhHVkRibixDZmt1c3JAIy57TDRKKU9bOWJkJiJkSnNYcnxYbSQlfUtmaFZrd2tDPDttXWdzeFRAMG1IcDhXOHM4ISIsK3w1VCt3YXhXbnBLX2dLdmpuSSQlOl0/Xz0lfkdA'@;
put 'TStRY3U+dTlHTExJUXNYbT9yKVNMeltgRU17c095aXNjQzpSPCU3OCUwMHZCVWl5eXxTZGF7TXMuUTZqRXJ4dncjOEtEPH1wMiw/QzlvTUxAKWRuTlguNDI7YFZfQEtRdUx1Znc1XkssUFR1Rkk8KllET20/fUo3N0d4dkUhUDkwMVtXVWljaHpYKDhNQ1dFN215IWYrWihXKlhlOyZxZj4qdnti'@;
put 'ZERTeDI9RXJVfG4ucERie1JBL0czJTcsWEJYK3E0OHMjNGEwRltvQTAmOS51UThNMzNtdVhbKW07enx9dCp8UUhuPmF5enlHZXhORTB8QDg8QnZxQEVGXlB+TllCQVQieUo0WCMmQiVFKXIpbUFKKXhdR1RUZjlGInBDa19hbXhzPmZNSSZPKGN4Z2AlLzZGRGpzW0dDa3cpSDxSUXNsY1k8T0tB'@;
put 'XlpwPFBFTl1WXi9RI19HRkZOMWVzbFJRO1dUYGJCKkVufXI9bVV0L10hZFg4V20/KlRtSTVCJFksQjFRe1UrPklhT3h6VmtfdihEdSNvbUhCQUp5SkNLUF5kOGQ4VEQyKG9iZHRZTStiOlViaztWNXxwS2BRLyVoVDVZNHQ7MiZRSis7RURINz8rZ11mNG5XVisrUyxzMlF5NUQ2NTIuZEQxSHEs'@;
put 'fGs6KlUpaSx5dzpoUC5+ZUxMMj93TjQxJXBoeVVqcnpjJWVZMH0qIWRZMHpAWilsa3czfHlCKz5Cd0dldFJibXA/NyNOLGdjPj0wKEZZYSRVPCFNW2BiY3kmVlosVHUwcC9AV15dNyp1eUBsUTpbSWRlcGF8IzRibldUd00hfDw9IiYmVG0wWEBneSMlQHV4N2U2MnkpQEAxYERdLDdpMWcoSDU1'@;
put 'I3xQPlV1MilUbHhSSTEwcFRXfG9VKCw1OGZtb2B5MUl9ZGMwb1JAK3pNUig/Jkh8MXIoYF9jK29ORFVWdUN3ODRDakd3fFp7VC46PzYpd1BEaEdObDNdTzZGen1RL1VPM3BIcV19UndsTFU3bS86YVE0UC41TUx5M29tdnZEdktLeXx3OHp8bEFVXTArdm9VfV08dzY+fUZDR3pnJj1tc1ZQLish'@;
put 'ZEZkRklWOFFycUhre1R5VWVSM202Pk06YEJjN2MyUXpOMF56Wls7Rzs6SWs7TWljbVMjYjVkOWc3YD1aJDx3SDtbJSxFMyluUipxNylDU1I1JUdZV0Q0TjVaWyp1fnpma1JKOHhxNHZzKmM7cFJhU29peUIpXm9UPT14JClhai87YjcpbWFJXSo6PWdZOTdCPjpgZCYmU0QyVihbUlBkSU44PDNl'@;
put 'PXgmQ11maDVpY2FqbWt0Szo2IUpbWTYvc0hHXiF3XjcrdHp3cWUiV3VHTl9fRTpKRmxeW3c/OSF1Ql0iendkQmEpOjdXV2lJWVdqSiQvamVgamBdanwuInhYNnVlXlZoUT9hTFUqUSJkVVNqcyNfRDokfURRUHV4WV1GXWd7NXtPSGM9VWUocWk7UjFkJGd0a0svRWc0eGhWNzBofUNzKiIrJnxs'@;
put 'YDgoYlEjczF4U2tHMD9nUn12MVlZM0NdSTZ2YW5sYDAudlgrfHxLU2FgZWkoaU9BNGRUO211dzddbSkvej92V25sTExLImIxT0NqJTgxLjsiWCU2aXMrOyJPOF9SPnlKW1VgIX1jR2Y4ImJrezEuTEtsfGR8MjJOTXcjNEQ+Oy4vaF1HXUBbW2tScDlLJTFBTTdpRkg3UmJKbVIkNz47bXBaNTE2'@;
put 'UDBBenBPKV1UREBAQEBDS0chYFRPenNIS1ROR2VibFRAQH13aXNvZW4iSyo1eEpWZ3NGY3tQUiUwWTguRCZEMk96I2U9MTksenVBLEpmcnA5SyQ7OGdUTX5POmt5WmYiYGUqUXJacjAqaEgqfHQzPSxyM0F2TTB5NVZRckg6Pl1wJGAjQClNY2tmcF1TOk97R1IhJWB5WE9FYVhQWWFhR18we21G'@;
put 'NUsrQmdqY0VNXXVOe0dbendHOHxWdChfTVppb1dFfm93O1RSXWkje2dDd2lqdn5eYVo4ZHVhPXBdJCZZeC9YSHFhaTZWd0B+Y3NzQjlOd0IpY3dBdW5XKjVyTXJhdzBOaU5RQjZuMUY1M0Z1I0d7PlRMXSh1V1tTUnczMm96eSkjKXpsOmtpNmcpaWhwR3tIKktdX0ZaPlhPR2dEVnA1Wlh2Pko9'@;
put 'PSpeUHNhcCN6UD53PVp2S2RjZzZ6TU47Vkd3JlohQ314P0x5fGBwZVk4WzdYWCt+M0hDTmxTRGFNWjpmZG9TbUg8QkddVEVIanl5fFY0YWlJXXJjOTIibzZvSnJFfiFmKmkkfDNlKmlCfi9kXm9db21Jc0d0YSNZIXMmTkhxanZxM1g2MDVYcUtqSnJGbU02KClNPnh8diY+UD0qS11UIWVKbjY7'@;
put 'KSUjVUhmLi9gT254LjNOJX0vVWZPNWguWzg9T18hZXY+Z318YEp9QXlVNjA1KDpWR1laOFJuYT59dCpFNz1ZQkxmNmFiXiE6KDFMJmVOX0AuLCFuN3pNRXM1IVdOa3ZqbHRxJXpCMH4rbm84PH59R1dwe2pZJFo0dkxudy5GNXEzRllJU3ZeO1dlclYpOT05SX1RPXRtYUgqRTwlR155eHwuTEdg'@;
put 'PFZWck1AU1olUysvUWJLPHRDfTtvXz5oYGg0e0xSU2JDVFEqaVhKL1lyOyNsXktocVljOXQqZSRIUVBpZT5BJmFqSSlkVERnMEhVKzpSTmlORktqeSJ7cDxRXio1PW9WeypATkFjKH5QbkFbWCh4NXh7KylxOF86VilPKzE4cn1TTyFQLGFjcjBmbGM8fFVVfS84bGVRL3dPMGxYK1F3WFE4eTZW'@;
put 'MStbL3dSSEYmbGYwRk8jKnwmfk5QXzFOT0trfVRjLD4wQEw+TCtaejgvSSkzV1d3em0lZjVHamxvfCZdSGx1Xn51P2Y+SVErdzt1WCh0UXZIW3U7YH5uNkxtUyIlXl49SUJIVStaVV1PdkhrWV96ZlZKKHVRPCR6QzBnOWBST0NlQ3ZIeVRwTiFDdkAhViVWO0IuWCNjZDR5YjxnL2QmbFkwaT1L'@;
put 'N0BxOVllKCFEfUpQd3tbbjh7UyFzUTdrRTE8Q1gkTCFlTFIuUDZwaEhmJSZkcGxJKHo2TnpFbWwmLlFrMm89XkolSHBkKUArRS9PXXE5QSkhN3ZgOmRNK2lYIWw6REYmQT5TNUxTVGF8Y3N7NCRNZHtaTFcyST9PMyZvMHlzSylYREQpfnFNJFlYYEVGdiJWXmxJfV1DWHUja0plQWhNezVWU3ld'@;
put 'QjhXM2ImQz5eMUJGdEZfeHt8P3E1eUAoL1o+eWRLQjFqb0h2SEZzfVlTM3ZYOU1xWzBPY2ZuL0pdNCEpWzpTIls0fHNzIWA6KkJIY0k5fVJGUyh1Qjg2NC5BTWRuTVJ6Rk0sTCk2NlV+am4lR091WFBOWXsjV3kiQjY+dCxxQEVMKjA6SHsmPzpeXkF9aWZNNTF1LE9uYEdAIXtxRVQzKjdQUD07'@;
put 'KjMjeCM9RX5YMFFeOypfN0NXJW49Kj5vPH5VZ3IlI1p8X1JNUF5ycWJmRSk2MWRVc3g8WmdqQ09HYnU7KSNoTThaI3g0JV43T2hwPiNCRzx0LFtWc1NNMXgkeCVfSXteJmdbYWQ6N11GI2E8RSMoMlFVbjYuVTJhQDEiYDVINFBFOFZpKHtTRnsjUyNeREJlMmZlPmgsPGEmTUtOWlJAVyUpfT99'@;
put 'blc8Y2tqUVNiVjJDRUtCS0p0IzYmXUN5OGNTMnhpLDYmNlowI1VraFN3L1U5Vl9QaV5VfmVjPTZ1aUVWVGBeP1VKWm5rWndHNV1XLlE7VyRpKmU9bzFIX2xldFE6OVF8dzglKlYiOD4hdzFIVG5FOkcyJFouPHZrUjt3KHJNIz1UaHJWZkdlN21BKXJKOj1vUTQvOnh2UGhUOCw2PUMhQl48I0FP'@;
put 'RzswaD93bXw2Jnp2SGlCe1oibnp3MTtgKz54KVJQI0pzNFhVQTd4UzZiaCMmNyt2YEsjNnReZy9WY1FsPFB3QCFpLG1pTz9mPXgzdllfTjh3bUliPGRMN3JVS2pJZjlJOGxPIS9JY2FdVnh1QGY4V01mPiRYYmh4eG92TkpAbygvL3BzR1dbTDRfPClsUDFwY3EvQCIqZUZgKyVgbWtQQyR4NU0+'@;
put 'bUE5LGB6ZkhkMHtpQHt3STN6ekAwPCwkYkRQZjB1ITl9MT1KZERQZFJRXzlIWlM4Mll5aCFWdGt1fVImaikrPCklfDtkYkZvWDZpRThLI1p4S0RkYmxUVnFYcjc9XnpbSWVMMVY6L18zWmZgeTVFIkZycUMzNmEiLDBHbndXPT9COX19MTxsYnIvd0hEPlRRRzhrX3ZgWF4wb294Tmhgd29KM3sr'@;
put 'JVdOOFQlRmY4ZEB1WGFjUGZhbGV1Ry9xdjJiVGYzVD5nVnZCX2I6cnJoRVtmaX0xMGhIXntbczciTH1EQzhOMT4kbGdFOEpbQWlTNUNwTjhXSzhhNDFlNi9dd201M05jKXU2JVlXUmlLUlM/LkchcVZCYkZQbit8YyRUNnw/bkJMJGZHI3EmImhgd29ybWg8MG1YXz9ZVTJ9Kix3RykyaHxscWRQ'@;
put 'Wio7WSx1UnRUOHpHZTtJK1NpbFVpbHFZL2Q9KHpRL3FtVmk4SjxUNyNUbVFSbFRdamwxbHVzYExGUz9dPk8hQkxNT0hOcWZXWTA4eFFleGtwKFpURWYpTH1FK2xBeiwwZ0N9Xjd1SC90YUAjNzJHdihEQGpZfkZ3Yj82PXx4MX5Qflg6cChQMXhRS2cpencyaDJ0cmBlY0ttRGpiezViSjJXc2xT'@;
put 'czJaQ1hFYE5ub2IpNFMjJG9gRlAqK0VmaitpRH1lKyNxeS87TG82Ll1ATEtGXWM2K2R9e1Q2fXMhQ1BtJmp5dnVoKX09QFppLyRWYDUyOj89ZGN3eC5TPT10QXwvO3Z7UV1AQH5rUFJDZSE7fjB1aV9xTVRZeXBFOyNNTyYrYHNueiF2Zm9QUHZIS1JAKltgajNgQ3s0WCJJV2NKXnoieGswQzNY'@;
put 'ITlmS1Zacm8pK0lgdi8meldJMztMKipKJE5QUG58eXEqImFSKz5ffHZtci9nMV5mVmkpWzNVVUN3fHcrMU1bPntOSWdbb2laN0BANnR9IyNRQHJIUmMzVjF+ZXQuJWxPOFdhXUdEWHxvUlpQIzMvRjo5PTlZPl4uT15rP2lmTl5VcyNwQzsoVj9aMW59VjFyaU8hd19GLEZmcXg4alZKe1MsNkE0'@;
put 'VlVHZVpNQ2VLPGp0LyJlfU1pT15XcmglK1h+cS55az8hJlhCInpGYEExXVBQVTthN0QrWyI0d1hgJShCe0ltY1RwWkA/PkZYRUcmWTMoPExhTDQ4SE0jZmtpMCQ8Z0BtZWo3aDNhIV0oZGoiUkg5JkkoMChraT5JK2NsY3d6eFEsakt5P0lGdHRBJUFAWFJaYUVBZ3M4NWlwK2pPWmljIV1LRjww'@;
put 'X2xFcEd7OWg7KX5JfFhuSXNWL25nKjErLD5GaVZgdiYoN1JSfkVxMyxCVWhnO2hdTChxdkgoTip4K3l3cWxRMThUbyYkfHZwZn4pM1dMdTVoUnpnXnldeWczYUB1ZWV3WCVCcmpmcjxnajlSfXpwIVJtL0MoQ2RFSixOdUNPJnlvSlg3b348cmZ2W1ZzeCpNUWMhc3wmdSkhISJFPnlGb2k9bCUs'@;
put 'PmoybDpLe2FDUil9VlFCZEssSFU5WmZAOSo8Kj9XNyZybDpDQjk7U1VzeG96dn5tJCpHQzt1Q2hLUjlJLzI2VUZVR2MuMjlrJWhAWmt6YC5CQUpdRVFmVklQImk6Qyp9TmEsVEMjODA9Nm9fP01KX3NQLlElKS9qP0BQakpPKEUpUz4kaCUjLEk3QCZEPXlDaTJhJFQ5Um9ZWy96WDtTP0FLbGVf'@;
put 'P0JuI0UjTCpxbjJfN3A1Y1M7b0FxO3FfNCVdRWU9eFgvWS8mfFQ7a2pmOGk4KyFvZEo8Vl0sd2tVPVlGTFkvez9SLntlZDo1cil1fHgrPk1JcC89b3osfk8hPUc9PGJmRmwlT2ldKnlWO3ZTYnJHaTdHYGljcXBDT0MyaEt0QytLcWtxfXQ9QlNBSm9GdjB7M3B9R3E3anR4RiZ1SStBSkZxVHli'@;
put 'RS9JL3BkVXJPV2A3O213IUNzZz1oKTMvOiFFZSU/NV1LRjI4On5EMiErbCg/MUY8OE4rfjVVVCFvLyoyXUNbTEohSl4jLFRzWytoL3d2PStqQys+RztsdCMpWXFabmlmXltLUDJBJSxgemVGJXY9L0d+SSs+ckUoJkFtOklJVSFwM308Wnc6bDB7bGZaMWl2JTBqYmdzWCgmOH59KlI8ZWN5Tjgv'@;
put 'fC5dSGA0YCo8anVIfVUpZyEjNEszRlFmUVBnTjhRZUFvXk9JUDk5bSpwbkcuPmpNSmZAOnFtUS5wTCF5b2Y1YWRZci5+cnpaZVZVbDBiSmQrPGJEWnheYmlmaTlXQzFxbj0pNmh2RkxOb2hZRHU4NXtmLGo9W0JiK0RocEAvbHUrfHJUc3pPKSVtc01wczYxQ1M5VDolcVtDQlBGcS9GWmVEdUFN'@;
put 'XXdOOFglKWsqTEZsQGlaOT1INkxnQW9KYGlgXj1JJkJXUjhVPztAT3BAPixUKDlIWXJ4U0ZLcVRjcEBMTUN8SnlvWHI/MTAhJHE9Yll2NTJdPylvbSwrNit4QCViVERLSTpebUBlezFvUzh6b1lSYT44RStRO1EhK3o1XUVjY2tTWzVWdF1tXTZIMkllK2o2RSt0ZFRJZTVgXkowcTIuZGVoZXxS'@;
put 'OEw7fTxocFU1Y0B4ZExOPjhrRnQ6R3hRQlAocGhdMTAuSFtgNCw6blUyTXF9JUBzUDBmNWdua35hJGJAMU4sZnBlYTovbSxGNmU7IWZhSDBfQiZIdmAhKiNHXiR6UnprZWBTdVQ6LGFSVVs+OSFyIW83QFVpQ1hndXZdY0t4XilYZT4qTEF4YElJamlJTUpDL3lFY2p+Uio2a2FeP0IybEUuZkhF'@;
put 'Kj8/KVRSbGVnMSVSJXZhPVlwNVZETFs2Ny59XmxhTjgwInlDdjB2XUxQM2EvUmJfREMmLm9pX1tZS2xjTGlsb0dMVEozemY5YXRROFYhTzA1P0h4UnNJSCN0fFohM3oyVyEldVJLVWFJPk5Sc1VzZEche0BsJXJAXmE2Tmg2NChVJSErdkdHYF9OfH1WbGpzIk0/TX1dRUt3ZyRBSVkuWyhCfDJo'@;
put 'ZmYoS3VtRUYqJFZhZ3dpOVBYIXZOX0dmOHNGfFs2XjlkPWlfPCNDXnt3QEBgMjQ2Vmw1JVdoQDI0TjwuS24zQURpd0g5N2t5IyNDYldsRjR7Tl9IRFYjI0NUVyVDTVRsYVIhMk5OKXM9PzE9WFsuJllkMX1dJmYvLFB9TXpkZmFwXVc3IVgvVUh6XUkkdHo5SXB0Y1dPQH5de35sYFM+MjRGTVY0'@;
put 'KyNSMXdaWzY4NVYkdTorM0ppdFlEOC5yXkRFQHxMWV0wdmBxJXkicXxAS19jJiE9bVF4Pik4UXNDXk9kKTsjcTApXk5hL0ddV2dzc04ofnU6X3ZIakRZdT93R2A2OCRrfnJddVtRZjRvKk8iSTZOeXBHNTpVYmhlXXZVVSEuWjEiaj80UGswdWJpeEVVKkJCQ3hGSENvWHIibW57aykqSj4pN31h'@;
put 'a24xdyoue3tWfEFWKXY3MlcrMCMkb1B2SCRJSVVQSGZPL2pteCZxQHhQSFA6aD5QTUh3R3FHUTteRURTWltvcC8zPE1pTGUyNjEvL3U8MEdCUEhTIVh2Y2FzVDpAIy96dWx9ZlkzZ2JJcWB6PX0jVCVeYnpJOV1icFJNY2ksNzspNSR4dkUmT3lJcUlVZCYzU206Y3g5ZEJNT3YrWTJ3ZmwqdzUp'@;
put 'I3p1dll5QllEVnxkVzx8Q3tgaltOL188ZTB6PVU4P2tmZFZtSWp8LHUzYVYjY19WW2pXJDtQISMzJEdqKGxFVjRxZ2Rlc09IZWdHXkkrK0ddP284V21AJithfXh8dUNqYTVBfWxRUjdQb2Z6V1s5OGhUI2dXXmlwLHRfdCt3NSkxW149YktFIWBHbDI3JlloKTJaPCVjU01xND5udVo2dnxFdzN6'@;
put 'aHJzN28uP342Q0g7MkM3eDprJToyUXhAc05QK0YvVEBzSih6eUBzUjtQXyhEYE5jWmc9NFAyYmZOdGQ8eEZvWUhMSEVxN2Z4KHdqSTUxJGVSN1U/NFgkXSVpN0pzSVh0dXZeOS9kVXs2LzVCMCtnbWxbUiVjRzhUQykyKXleLDBMPzx7fDp+bzAyW3NjWmRoJEhAT3ZLNnd8Lyl+X3t8N1ZDUG5I'@;
put 'emVYIUNjZHhuL2x7RThxZz93W11kP0BTPEM/W2ZPKEZxckdgYEU2ZVNqaU1Bd0BCVzFybnJQdU1taUE8eG43ZzlGXmFZV2EqRkpDMyx1dClZdi5rZ31TUXp9cFQxZX1hVDwjXWs8Zk11YGM5SSMiV2VtUGchV3R7WXNEVk9zIXxZa1lyNXFIQFdpTE1ESHRpfVYzbnJ9ezZ4Oig9UTNKcGR1fl5t'@;
put 'ZTNeRFRodytKNXpVOWIjUU1gWzJCdTR4PEwxZUdMUChHcmNrXm11MEsrQW9MKjpnLmUjXm1tJlNtPENKbiV5fS8laXtiWiZZeTE3dkxnWUdPOV5pVTI1cWZ7UHF2SyJ5UXdXdDhDRFoqQ0QueSs0fHp+cSJgTl5hVkB6NjMmNEJ7RypJYn1TKyRgVyRiSTt4KCZ5QX19Mnxdd3JTXztXemY+MDhE'@;
put 'SypCdGxZMWFkaEc3Z1lecmJVYG1nZTlXdD1neXpKRCpELz4uPzJ1SCxwdmA8NllCX3s0a2JqTUc1LHJ7RSFIL1JLLy5YXlJRRX1SW2csY24mU15FQEhbTztPLE9PZGM2TG8xTmVEcDslNEJIckVUWDpgMSxiUXlCVElWZk5QMzUsWCx1WyxoNCZPOjZdOnAvJnpdOmJkdzw3KTwrb3dXSClyQjRH'@;
put 'V0xpeV1+akZdKyE2VEg4ejk0LHQza2lHNTdeWUdOU3VuOXZrUnJgXi44PCwmbUxaS1pCa15OX0lzVF1eMysuKSZtWVlYSmJRTGFXTTNYc2ooW0lnXixSfFtFWCx2YExaTm1Fd0JvX0A1NU0sZmR6V0ssWDIsd3cmZ1B4biNdY1pMXWhrdGhqIjtmQyQmRWROOzdTUF9tVzFbNVM6LFtafEBEUEBa'@;
put 'InA2PXB0V18iV0p9Zk9XYHAyPlttZWk8aTVzYDkyUDhKaVQ4SmlOWSk1YEhtREgzfnE9YDsqNTEwSiJCMkd1ZFJOaE0xbFk+LmFIVkRZK1s6SUZ4SlJCNW11QSV+UG5mVmhxMi40QUBSYVVHVF4lIWI1I3I5V19YTm1WLy8wNFFpeHRWMWBwNGx5NXMjO3kqYiwiQjY+QlAzLCJCNWhmMUMiNTcv'@;
put 'OSVgTjdIfEtBUlc+XTYuRzN4d2w8bksrdUkhO0I2ZWRMd2dMKjNjLE4zSCpKPEthQCY0d3tbMXZEKml1VD1GaTRDUkEjWmAyYipQWiRPantLcWBWZGg5anRRd2hgKVkoXTd1S2lJYWEoMDRvKnpIREk8fSp4T2M4dj5pV29rWE4hRWZDSkNae0xifCxFL2NFdEJkZ0JAKW50cml+fENtWWUmW3Ak'@;
put 'X0NvaX1oQnwxN1VGemxzSHhEXT9dSXh+dDcifHttRURseXtZZjgkSmxQWWxOL1I+Z01afDlNcyY3XioxMXgoW3JiLnVyJXF1WT5GMFVtU2tYaDoxNVZ6eDlQPW1WY0Bhalh0dShOd3plRkN+YGEhS1NveUU1WHdrMGc6OWVRSmJEZnNwIywmRVVLVVV1clRdaUtAZ3dmWzZZcUlOfS5vWDJpY0N0'@;
put 'W3gsQC4hXUJdcEYldVdVfHl2IWkhUU8/OTxLT1dFUF8kT1glTUguYTxwPEIrb29CczFicTk3T2x6SV1CKU8xUWZvITJ6RH0+aTY4MCtTV0QmKnkiZFBrKExmX1dtWDI0Wj1demYvNzloInRuJT5XJG96TT5JNHt0XnlHdzxISDR7NDQ8dH58fHZeYiU/QjUvSWspX3B5Rj5ULixGQF9FPTsiV3c9'@;
put 'QkxldGo2fj1nWVlmMV1QRnt5Z2pfcT9YVkdSXzImUDc+PW10VEx9VFd0O1dgXkVYYl5xYCNpKWsvfkVAZjxGQFpzVS5AZT9eLjl8anc4Ok1aSlI9IlVFYV1YZC9xMTxTMXhkZlBjZGshYHhqZXBwOl1MXURrPCI9JilYQk9VNltRcVkvaWUxdWxyME92ai5QTTVfSmdbdkJtRmJnR0BfY20lcGZR'@;
put 'L1I1c2B8KCJ3JnFeT0UmIWl4RWkhTWgsaTx4cGNdeWZyZGgvSzk8KGRNTWk5dENSZilLeiozUDJReGE7OXplcTkiW2EpX1l4bG5DaElPcG1PNWtyOzgicTh4JDl0MHd2IWtHPUA0PU9PWkNdQj1vYXsve2xkIW9yW3EyQzp6VT5UTTdILi5tZDRKRj5qOUdyaz4rYTV5RGUxQnthQitaJjohKzle'@;
put 'aF9JR2teQ2FrOnxnZExZK0dsXmJ6REJ+PSxfQE9mdDRBKT9ATEZtSyh8Yjt1YDtne0R3d0dRP2Y+WSV2Y0RzWi9MJDEhSn42M21lQkU8KUohN0w/c3p9ekVQbSs8JHd4JS5SW0spdyxMSTFtVSMjcVslb1FjTEVQT3FFMUdefm1rYE5bcEBESmlWZk1Ed2hYZ1RFPD4kUls9SF0uZ1BPey5RNmpr'@;
put 'dGFZbmVBcSgiOG1iMDFrL0s9ODo5OSw8dixYLCozbFBIVnZRa3IjWjZCUj9gInJrbU1uJEYpV3NWWDF2MXlUfCxjXXRLNzdrJmJwJiI/dzh5LnM9YyRJTiF6Y1E5Vz5SMyRJKDheYHF4cEpXPzIpeF56R1R6MzooQChHRkYrI3pONGdfcnQoU1U3dU1kPHgiPyZRTU4+ailiQSZSZTdYWVUuNnRm'@;
put 'MCssY0krTHdZN0tje2pMS1tPPD1xeFQ4cmNhZklgajg8InxJflt0fD8hMUNIcnQ7SlcqQkRLaXFBaH4pIiFoQ29VOHQ6KVhhQHAudGguaWB2O0Y7UXJzJDF7Jmd6OH1tYkdGZmhtKU06ZyN3bWdySngoOXUmS0M7IzBda31ATVJeVWI7STtwZlE1Y2Z8Qz4hfEJpaDhGM1tJOGoiYCFBQ3BgaTk4'@;
put 'KlhlNzI0I1N3S3M3UWV0TkRDL1FoXnh5c1p6RDkpX2Z7OGtyc21HZmxoLioqR3NgYyV+RXZ8d2U9YSl4NEx+ZT9qLG4lXmIhLjxyOm8kbUs0Z0BoOFpHJUxYK3t5LEVaJCpQeUpCOTtTPlkpS2A2NVhWKCh0IktgaTU4SUx6OXo5IVc1ZnldYHY7cXp3MjNLZlhLd1JQSX5qaTs8L09JLFJxcXtp'@;
put 'Zix9eF1OaXxlfnlNTExzWzhLbnBeZndHJDhRL2FXZnYqKDZlezklcWN7NkR+dGR9cTZPdzUpJFFXdzs+e1gqV3F4IjJqMXdwYXciVTA6dWpZOiZiNSlgWE57dSR3ZHxnOFdRfXF3fE1ISzFCNCxEajAzKipYb3JkMnp3YFtXKjZBTC9JRDBzfGxsdyx+Vj5SZXEjNXhrQjslfD1kSSpsc1MuN15R'@;
put 'RWB5I2FtSmVlPThjLGplPDhsLC40ZSl5Ois/aXlFIStqUGdnK2ZtYW14MU1rODxCLCtJcVZuYEI6PSEjWzgmL1NiRE03ak1rPExXaiNWQ2ZQOE97eyFoZlglKzokRUV0OkN+M2hQOUVsaDZoa3BsNWZiMUB1U29LcVEoWXgkZ0F5T19gMTFZMiR2e2VqU2VJQ1ZOY1tQa0EsYmsoTTR8N1ZHMylG'@;
put 'Mys7ejJrT2hfVix8JShMaTVaKywhQiNETUxMYSlbeGg/aF0wY2dsL2J7VSpne1p2P24vWHIhVihocmU+VSgyOjlFZGMsWChuS2BBWzU2TCxEeDBEZmhlMV1zamBHUmdrZVt+WCpEalckXVRoZENTXkBUMk1hUkBgS2ZUZVplSjhKIlpYJD1wOS8+W2FVRD93dnBxOTAyeDRjUSJJazdFTHhkOEV6'@;
put 'IWVBLH43U0x6NWMqQmVzRVt1ZiMub0s5dSZsbSt1TD1dKzQ9MkplWjs0LCp5RiYpXnh2VmZqfUBDbmxZaFllTXFqaUszeWhuUUlDRjIlfU5STWdjcElYI2lxc082RWNFc3VbM3A3PWlwZ1djIUxbbTJaLF54US9XOTgmTjE8dyFdIWdOLEIzY2BhJH4wMDwyLj94PG1EWnRhT3gjT155RUZyMj55'@;
put 'eGs2aCxtKTYzWC98akohTnlfUC9lVUJYUGI/MUpiMS5dT3R9SHA3fE9DUS9FalQhWnQ0IS5aUSQhWXgqVmcqUixNdWR1TG4yYjp7XTR8OilWajM6bD5sWTEsUnVvMnlxPSxgViZYRnNvQ2g3diFHMUFPNCUxQCR1KUREcT15QkZDWlZuaXN2NlpYakBSPDlmWSRaRUxZN2FdTmhtYz4wUCFjYz4y'@;
put 'Smtyb040ekRUKmFdWVddPWxtZ187U1E6RTQlc0A2JnpnP1VKfkc4KUtlaHNuUC5Zdn0jfVlkb3ZTb11oITBVLjpuJWQyMjNVaTBgc0BsUl0xVU9mMWFsd0Rub0BlKDdzZmdTTiQuO3AqWlRCcjc2OjdLYig8WkxeTWFrJVBPN0VUR046SHU0fFUyLiNKSVNPZnJmPWJsJU9RWi9gSipNalhtcmEx'@;
put 'VTEoOC5vRWhUalRTJUBbb1ZNY0s4USU3InF9QjJWPFFkfWdjP0ZyPztoQ3BEUHtXYCk6ZkBJP0xDYVtUaSthfVhIbmB9JVEpSzdYWE9XdWt5Qzo4KUtmRWc5QF91Zn4xPUN3a1hhUmpFaHNYRTpMODxXUzFVfiI9WEhuYGkiIVhJSVE6SyVzPW0+amxHXm4qXlF1eHF8UzVHUi4uZmEsIkQ8VjVN'@;
put 'Q1NLWX5CUWFrfEhQbkpiMn1uYGhzTSoqI21yV0xSK2F8WTxVKEFmYEBpIzlmJTQ6RC4sRkhVTyltP0dfKVklOChZNURWO3k8Q2crVzk6KG11TGZNIUdEUjZoJCYhZVYkMGhtNjFxcSk0SkZ+XUI2ZEpdYl98MH5JNnAxKzt+aHhFP31xJFZ3MUgkWDdqb0heZT45emZKUjpCaSYmV1MoOUtyZngx'@;
put 'P29GMDZsVU9yVFQzdThPWFphTnM9NmdjZHlqfkxMRGpyNUk8Unc1ViRdbUNGRktKLyxoJDR4ZGA7PixsKTRteV94fkE+TkpWJjB3Ql87IjsuL0MoImwudEVDUypKd3guKllBeToqQD9EOix4dkB9bjptWEhSWn53NG17Uz1ZfW5HP1dvcnF1bkl5ZnVjYWxVQy9ZZ1BiWGU9OlcyQ0lzbHMxaXY5'@;
put 'YlRoKjZiXXMvV01xc0JqRzRHM2JJWHU6eWomUzs9dDY4UzhML21dTHpdVmlUaUopdnQ9fDNYXWlIcEB+bj5hPS4rUCFnSktyK3xGKTk/cCp4PTpgcWRTOWhkXiR+LHdvQXBnOyJwWi4+JUZNUFolUERXQTpBe0U3Uz1YfGdkeD5qPFYsMmMzXmFiSjh4QFRaITtDTDcuKT1fQihKXnImUklUVWxn'@;
put 'ZkA5MWJUVHBKZFQ9ZlAsfkJbOFI9UnxTPXd1OmpVMVVhMHYrJSo2PzhnPlUqKlZvSGtKcDNFT182XU17RFJHYk5lNUNHfEsrKStQXi5kVXBBQDt8LlQ9WChdWzUsYlFmV1VsamBMZDtKPi5MVF8iS1Q6Z00vY1lCMmxITzk9M2d9YXgvXWo4aURycyQsP0tOZjNfM2cpb1Z2LyJqZUJdRWxbSDUq'@;
put 'R3MpSDRnaXZEbDlJUGspT2lofixjTG51QThTQkRtNygkXlE4ZjZkaT0uWV5FfSNxcC53NVJfXmN1WlB3K1d9WTZVZyhocWs6dlsvJlBjX3VFTEtZYTE3JWVwS3ZmakdsOHIkYEoqVzBaT14pNnlXciRwYmpFeTtGJFtpdjxdOEhuNTZEe1UuY2hKPDUlPjR4OSEjN0dmNG86W1RgWzdKfX1DNlhy'@;
put 'd0NGOWA1Nml9XUhXX25bIU5nKUdSOGFAKikmTXNzYlFkdD9GI1JPZ2NlP2k6W3J4e3RAUkM4bWdtbGM6ek4iMFR1JipWYVptZTpzISt4ekohbnMhI3VfKzcvUip+Xm0+Lz9oPn1KTTlPSDlWQ0tVMGRaOzlNS0VdN1FMPDMmNE1NTmNkOCh4LD1yJEU7ZihYYGZfRiNLUUokVklXXjx3ViglQj5Z'@;
put 'dl5bQW9qK2FyPCJUeEpdZ0pvby93dSVZX2k7SkhLeWheSmlVKSgyXndUIWRbS1FYMUNLVF95WGZ8OSV9SihYL3I4LHA1KEo5XTB7anBsQ3p2aSZ0RT80eVReVG4/WHImS2h1R2B+VmxGJENMQHRxTiFOPSZbTmJ+anA5VTx7QzYsUypRVyJ7UndTK01eMCw1fkBFe2BxZHF1Q2hEXyhSdT4waVE3'@;
put 'TTcyUV1sQHdgZUJFP1JYWzFsIXBgR1hnfF0wbFFuYksoZVhfeSRQcztARWs7TWhbcjxkaU87WVcjKlllRlNbdWJIUGspImluPllJcXY6KDU4VEQsOldNd196cjJ5RFM1PHxtdFIyNDg8YUE0WmBPWElIckBxQm1zLlB6IT9VQGx6Q1g1TV8scFJ9UE99aXJFJm9wRnVEdHtwWzhLUUpNKXNgS2Rj'@;
put 'alI2Pj09SDBvQjFlbXdGUjp9b2tVRGg0ek9aOiw6MnBAKDIhV1czJHhudnRgaXk1fFMraGJnNCRIJTI+N1hodmw+WSt3ImIkYldua1tFUVB4Il90fnluPDMrUSJOL11QTl94R0RrVEp6YlsoPWkyd1M8Mm1vOG5eIW5wTEszeTZAbF1ATU5xaGNKPHlsYkZQSiowdkhfWERWLGxROEdVdWFaYCt2'@;
put 'Rkc2S3khbnRTVj1MUSRFRmduKyFbZi93fEByaX1IVE9QKyJHIlUsSlQ9dEIjWyp8RnlASj5rcWhqKFo8Vl1aa11fRFZYJHhyUEkoen0oKix0e0Q7PlIxe09oWV1CVSozY1ddO281YjpObF8vKk9zOyFkVGRCR3t7MkJRWXsvOFZRQ3xJYCgsMD9HXzQpeDUvaVpuP14kZXM7dVM/fGchc3tHJEF6'@;
put 'RXk3Pi9rRUVRIW83RSRPI0VEZWNqe0tqXWZ3a0teOz8pJSJVajlaaHFELyI+Uj5tNSUmL0Z0eyt7Z0Q4clYla3p2KkRpLChIdE12K091IkdmPysvRFQoRDdeO2JVWE1XdnJ8KzlaKzZueCtifFMwQ2tBTjZaZCtfOC9yX1MhIy5xNEtTd19NPWFJTHcvKmJCeFMxSHE2OnFEPzhhajchYC9ZeSV4'@;
put 'WVBkOXxWQTp5JC5DW1U6LG98KlEwYnV5YW40PUdsR3pOPzFJdjtKempLOXdfZGVKPGtqMiYrM1RZKDZRV3JSOkR+bE4sflE4UzV7USJ3PGwuNXc0X2pIVHN5MDciWSoqeWBFZHdINzcydCV3WVV+OHxSP1M4YzRiRDJ0MGN1aVEsW0QxKF9CfVJFbiJfNTtMQzFjKTJde10ofEE0XVsrTFB4SXl1'@;
put 'V3xYIU9aYGx5biFEWT5jXjsqTXVBaF55QUFMJUlVM35CQEJsN0F6TSljRDFxS0xKUlcvR2ZoOC5DLENeQCNyK1ckY1ErTkVCR0Uzd3d3YklnZG90di4/InJ7SyY5X3dkdFVIKz9YaWV3b1EiY1AjMSsmfDRRbzNManp3dSNhfWpmP3hRPDd6JkdAVntjY3hkO2B0UTs9RVAmPFBCfSRbQW1seiVs'@;
put 'RFBTaH43I11jLzRWei9LaURJWj5xPTJzRyxKQUs/M2cyRkVdQk1hWm9XOys3dnA0N01qUVo3QXhnRHk7NXNTYVhlPEBrfUArYy9pMzghTERYV2skeWFrTl9EYzFMRk92W280Ty9ENShLTUh1UTs9RVAmXjoqJTM0L3MlZ147bns4W2hdZyNON1MhfEovcSJ7MGRrX1JAT31lZnVDdHtKfC9sSXJJ'@;
put 'fUd6Lmc9YVF5N01Td1A/aVBqK1NLZkVWZlRHNnhbKHxYcGBaZVdhITFRV1FlXkgpTUlRdktvaT9wcyh3a0tBYkk7VjFjZnhBWVBIRD9VRkVuYzg8cnJ5SU17WC47cWBtU21oJE19O2pdP2tJXV9GUihiSjlsXjtRVmp5MG4oWFR3TEg8Mm91PSlbQ0cpR2JPL3ZyJSJifD5Gayk1JkxMalhmST1p'@;
put 'Nj5lRkJKWGA/XztPcWE3Iml5NzE7cyZGR0A3YEV7RllgV0tlPFRwRDd8RU19dSklUyxyfHNyPEJxYHU5RX5kNDhFTFIkd01HKEd6ITZbTSZIdSN2NSFwb1opYFt2dTQvZGYrIzhfRnt+YTswQz9SeX5lK05ZZSxpMSReSHR7fFtIaTM2TXghfCFgM0xLaWJ7fnsoLyx5IXM4SF5FJEpfNEh9Z1ZF'@;
put 'SEM4JmhtNkF2V2x2e0J2N20je2tuIWU9T081Q25FWFdtZUp0e094WC9eX2Q6ZG8yOjN2Qz9db1tkUiwkNjdsK2FgJHo5XWpRYj0vJDlKfGMvZHMsJnFiSE9JLFtWTCozPDpMLiVjZGdRLzJwQWBvY2Nlc3tgNXhsTTl4R2wjfUhHdlhKR3p1biFZVHV9fSVSeVtnVWdLbURKUXd4S2xnMWg6ME8/'@;
put 'V3E0NCQsbClXYzg6RXB8T1hCfEpeO1d6UDU3QkFkYipAPWFCRENfOypLajBdTm1LZHxkcyRuMUlyeVgzeyE2aHdGb2k4KnhfRDRtYC5paHNzbGIxZXM5Z0Ewe0BHKDJJRDZTI0w1YHpXLnUmXVRkWS9Kd2JpdTJfZmttZ2E0Z0FDKTE+XUpIQ30uKiwpTSJ3eFE/Vy5RJixXRU0/fT1UOjM8bjFY'@;
put 'RmVEMCk5a0dfPVpnQTN6eGRWUFNhJEVmbkBoLEJDfEVIMXphUyJENyo/Z1p8MSQkV0plS1ZjXyVtWUw3VjtvTmFRaVUvd09LQks/RldjQiZ4RGh3KDAwUFkvN31JcnIjcndbSmd+YHlMIXVUXmx8YVlVMHVwJGdjc3Y6QGhGY3pdZ1o+KVkyZnleYjJfUF9LRjhabn1yTzZCamovYmI9b3ZGM0tP'@;
put 'enJafCpRQi9udGk7S3RwN2BwVGklfXhYaHo5Xn5XOXxVdz5UKFpiaDBAX1p4RkIwbHNIJjRLcFgpRzx1KFVuNHBiYGArUCJiPEd9KW00NVVsYENdMyxoS29PciRwc0o0R3x0dTZpQHUyKjNjMXR9TEUpZlp1O3UqMiFwYGdWY0xWU19lYC45dmNeR3Rra0NYT1ZpRHY/UnU2IUJ6UHtHdE41dEl1'@;
put 'PzhoNXh2L2VRcWJ7e2RpbncmS0wsbCgmNmZ5WzUlcUR8Tm0kTDB9SkF1L3EqeyQjQi5fLmUkZyhTeEovLFpKOGlUY2lubjQ4Pzh0QSs1JlUvUl9lZTJoSFkoPWhhLE9dQ0NzMEV9XX4yWlFTKnNFa0FsfFluTi5DaUlDcHxRI3J2UiNtVEcqVWtfNH0vYEJ8NGZMQVIpW3peNWd0flFXW2ozPjsz'@;
put 'ZlpzcFlRS0BlUEdDelp3TmlzY00vTnNRTWl3cHJUW2V+fn1POjRKZGQ5eVV8Wnc0dnRiPWRzWGs8RjsyT3FXdjNXSlIkNGtJZCEqaWlnbj5KT0hITT8kVkdYTEUpJiFNT0dNPmQpK3VeeEkpaEshRTR7Lkw4fSxKaDRMNWxOeG5uOTd9NVRBZmFSJF0iNG5mbDFqPEdRZ3gvbjVoZEc8b3M/QTJt'@;
put 'T29FSjBjUC4iTkNCITQhRng6OTJ2Tn1CciVWeXcxaDJ0PG8hLzNuNk9TQ3IpTGJSKnNnY0hbQlt2cz9DWShudVA3U3JCaEhhWUJ4bCMoV2QwK0d5YT99Z0NRNUEqNV83bk1mTEwxcjI5VTJeO0xAQjxnQnBibkdEbDB7emZVRX1dLD9HKCZab1JnfWZSSVRbPSVfdFl3Z0RWOE5zP1diMCM0IUVF'@;
put 'dTR2aVlZeTReOXFTX3VEP0dqTCo0Vm1zXXRYfXZCUnVafFQrfVFNdWlrRVJfbnhAYXwqUVNHL24oWHhle0dzajJocUFxJXEvWmQvOTAlXlhDJkUuUFpwLC5baUttYHhwP3d7eldyX2g7dWBDY2ZUKjZ9VSEwWkR1VD9kPndaX2ZCRXlfaUxhYVdIN31QeCQpSCxpM1dqNF9GPF1LcDhEZkgpIzRo'@;
put 'c3x1Qz97XipPSXtzZUcuVWAvWEJsIkJ1WDNoRzklcGIsSDh6MUllOXcmcSlXbXIoKDJrXVJNfnY4anAjezRpPDttP2MmeHJhM0QpUHwocnJeKT8pY1VOOW5TP3UxVlpURTB1ZiQ3bGdqTXptOkpERnV8KHJRW2AwNnEiKlt4UiRARyh0czVoZUtAVU14Snd4ZzkqZ1VQSE12dThWWl5JIXZdOW0x'@;
put 'c1ZgJGRac3BlUkc6fmcpWSIsJUxlfFNaflc4aHxUQDR4UjEqfS8zdyRhOmtoeU1QdHtuZk1zVUg+ankiM2hwOiRkLyo5Mj5DITFGVlI3XnEyZW1lN1lnaDZ3ZFZveDxfTEFQaG0lLiZNM3VmK3UlS2U+N1ZyeFY5QGF3U2R0ISkyWzgmNUp5NHZFQSt4NH5BKF8xPyl6KSUqakwmcUlfQmM+KlJt'@;
put 'PGpGLkB8YmAzNVZSaURAWHJEaWtTUEVlfnluLDN3RHBjMTEwOCRHe3g6Rk1OOUYhcWxCITNGM1Yldzg9eiNOW21YcnJxQntHQE04WVUkSkVXRlM6b080fXd3LHk/P295QjNfeFN6OHl3Z0h+PCVXXnNSO2YjfFEwR3tNJiV0TXVMPHAuNUw8NEpQV0pISkRwRG5NUnRiQ25wUDN4NzAlckBrZX1E'@;
put 'X11YclM9Sl59Qldue19oazE3NFErZF1YRHNZQyFvRCtYYThlU3RwYktQZlo+KSRnZV5wSTE/PlhBaCx0WGx7Pjd9JG1KLjxISEhDO2VeWi8lRV8uOjhKRTdlQDQsWS5iMGlicFd1JmdxI3RQIWF4KSFQIl5vYz5VdUNxTTVXfFA0R152a04yUGpsQmJKd1Jab2wyKEg/b1lEJj1ML0UlW2xXbXE4'@;
put 'eUkiOyQ9LmlVezY6MWkzaC44OCV2OXgrL3osW1NnTClLVixBcVU4K3JUQitYVlVDemlkWEBjdV1PQl9uM0k6WHlIUEErZTppbShXcyZpUD9VaWBESCpEJE9NYDosXkErfmoyQn4wZ2s+MmZSPCF2XTBaZk9YVWkqIVRwLDBfL2E/c0U8I0EqYCs2bCJ2bi5GVV5GVCFJZS4rZ3JJTn1GZGVUNW9C'@;
put 'JktFbEtDLGhLS2d4Y2Q9byxeRGw8PTUwXXBEOjFbSUo1bEYzfFpHfS5EaSpGOHc9ViMlMldqN2wiKCt5SHFMb35YXjozPExHJnNvb1t2Kk1FZyIqNiZve01yOEVpajlENHJeUGBCYz0+PWo3RjJSLmd3OktsQVQyM1t+e0dSdyhmSG5UWnJYSnF5bkhKc3ZCWGIiNEQ/eUM4cntHaHhAYEYuVHo7'@;
put 'TVViKUxgcHcqSGYjTClwWkxwcEg6SWlFUitIaS5uJShbMTBTUXI6eT49UjswPio+YUFoQk0sKllwN2V5KXh4QjhhNiZxcz47MHpHd3JoMUt+QEM8PzhsL11XX1A+TmxkOUJfVTx3dmZsfihhbVtXInJCLCZbSFI7el8ybiVjbWJVWGQwQXxdUi4kJGJBQVNUYiFjZ0RTUzI3V0E0RyNJP14vZS44'@;
put 'LypPZ2F8bEtrciZHJT9xKFY0ZlJHbl5VMEQ5eWo6UkwwSVV5PzJXU2dQYUVeYSpCN3NNfn5Pb11AZC9JXyhQang3R0RnM0JefWRBbHo5ZlN2a3Nwc2V8PFA3JjliJDF4NHxJR2VIJWx4UFNeOyN1NCZ0MU1YOVU2Z2J5UzQqZGc2L3h7VW9oMyJkWGM7SHtFRDxCbT44X0YqRElbOFV1eCp3IVZe'@;
put 'TGZWZHRGO3dFTjhQUGtJZjFVVDF6VFUobjAiOHUrZC5lLCssPEJ0fj9QVEckd1dJPy5AO3xsKlV4UHxYcmlpa1hCXURxUC9UR2VJK25WNUlNUUlwN2BOZFZXVCYoVi9DLzReVi9DL3soWnJTd2swSzxGTUVIWnFgMjlSLF4+en5CLk45LGcsY0V+K1lgLF44bUguWHUpRE4kIUI+eTlLRVptYFNd'@;
put 'OXZpKUdzQVJfW2hRWzV8b1EycXkySXNJbEQyX0gqUmlWJC9IbkpEP1FMQlU0PFAzRnlfbSI1YypTa3tTfV95eExzbHtZNCxxZ09IRzw6ZjN8VWJrVlswbGUvLms0b1E6SGRPaCN4PTl3MXFUPFhPbCI4fGQ5W21dKE0scX1UOW9AMXdhJHhHZTRxWG4mMjlONTR9OkV0bHJnazQufV84aU9xMU0x'@;
put 'WV5IeXxOVnJSQXtpOUx9Yy5leWJJJDRHSzhUdF9iRjN9eSEmLHB7bzlveyluVXRpV0VqfnldPnlHb2pBKyU9L2kpInI2UHxyU1IvKjNnKm1ya1d9SD5dTmtsJWNtWC9RIyhTeGJUaDlBbzpkUmdiXnhLSmJ7Wzl0Q2VrPWVkRiEyLy8rfF9jM2RJUjdXUnl2OFlXfn03YGlWaiV5ODtgIzNGNC5U'@;
put 'RGdDSkt2dU5bQSlxV3Vyck4hUSk0PDkxYGxhITtoTzwiLHdQTm1yKXU3UFhUVUlrNTdxL1ZkbEtBYUZGWENZQktAIyhkS1MhblRwU3pkcGVLST07dCl6dyVAaH04fTgsPjE1MHE0UihXO3QrJjtsKzdlJUNjfFF8RloiRzN+MDpxQiN4TmFXYUV3TlcmeGh4ZERbY0c6TG44fDVrUGExaF1FTXZq'@;
put 'MmIubU5UI3o8KGcrNT1tfGwiWUZ6dGhbSXEsPiowNF5yNUFJb044OV49cjdfYWNkUjIiekhURVcvYntmTC4sMGh4OWtVTltdc2JqJDJXUypNeVt5MHVOUlFWZWVDYTZ+ZSVxYSEuZXBiZj0wUn0raVhILy5fcj5STSV5RjVAWjQwRSRza2YvSzRHNU40VHBvTTdEYUdPQXVzSSVRQVE/X1ooRGxm'@;
put 'Zj18NDA/Q1Nzbk5rPUlbTT04I2tHL20iYjE8IlcpKUtMYGArTH07akNvNUp1Y1VDOm17eiVGcDI0RCVMY19abDo4TDlwR3M/Jj8kTGhbIiRffCpfVStsTnooMEw/RWVoUF5tWkJYbShOVHxSSEUjOz88NVlaXlAiLyE6a2lNUU9UITVrKXY3VyNjfXIvb0RVdj9OIUdIOHEhPlZpNzgzS2YjfEBz'@;
put 'L3U9Om8zfUlPKUQ7SntRPS9XelFnP2o+Q1Z6N31oOCh1SWl3PUNeX24uV2swQXViOy9SYE9gI0MuTCIuVVZjbEoyOTxXS0o3RVIvLlhAV0dVMVd4WSUxXyVRY3ghMTdSMUQycjRDMWVtPXtYcm84Vi94NDNGL2U/MEEhMTMja1VuV0lVKUg0c0NIeDhKTikuZHEkRF5jX2NvRXNySixVcW9wdkBD'@;
put 'dkVtTTk5TjgxJUBUNVlwQnJ1WDd3Y3hsQn5nPGkofVg0VyFebWpqWFRZeXVye1JNWChlMUBgejRXPmlYc3wvTm15QUMrP1czbERfOmpENXEqX2VELkp9O3okOy9PZEF7c2lUIXpWdzBNPCxVanFlR3NlWlgzcUReXT1WJlZaR3pLY08ud0IkRk5fJClfd3xvVFI7YHBTL3lfbSZKLkUoNTRNeV9E'@;
put 'IXt8YS9tSSJ8TV9+ZCljRXtqKWswVDAma0ReWkF6RngsYHEiRHpfS0ZDdjFpPUZ8KGNwMmVhVkdlKEFQV1YwQHVEUiRrbXIvZzNJaCNEJDVdOD5SRzZDK3d9OTYsU2omc3xYNTVvWjxIcEFpc2NNY1loI1tpYHxjKGQ9dFVKKFRxMj4+O3p8SVkvQjAifi8xIS9vK0Z5ZHt1Zn51V1phTEhJJjV3'@;
put 'e2hIbXIqJCohZUAyNTV3eChfKEtXZD40cy9NP2hlMjQzP3h5dzhkSFFXSHJuVGBjO1hiMEBgP2BBSClbcXl4MnBBM0JjU3JkZ3opWy4iY2U9KDxIYnM2NForeFhYXkVSfFI3dGwhcFh3NG1ZLChjIWJ4NispfWZOWU9Md3VfbyV8bFNFRG0iV2Q8QDVZSi5oYXlAKSFLWjtFR3whOzBhaT0sR2xG'@;
put 'YjJ2I105JXwobkQuelJIfUNGS3NwbTEmJTtYZmMyNyI+ZUR7fFV1KFgrVHJCbG9SVmZRYX5meygmNzI/KVRLcC9eeTFPaXRXZk8oZDlASmtlQzhASktvTXIxYnlpcVtsRl8rSiNlS09Xd2hGMX1CaE43cHExNjdxL1U+Z159PFVsaE5uTkpGeU4wdTtVIiNPaVVWcSJmR1B1O2E4SDV6O1AmWlhl'@;
put 'R0NrUWVlbTZxWWUwfk5fWVZwSX5QYyFPaWBRX0ExW0puaX5IIWFjTUdnRHZYKEtNQ2V4L2l8cExVWWBjekg4fkhPbkguX3MkLjt6Kj59P3hydkpzOUg/OHYxJTFabGZaLEdCKU5mRWF2RF9NXU56P1deNng/b1ZSI3daTHROJSxBNnZENihjNHNNITpQUFUwdjQsVEVIb3d5KytPTEhjUjZZfCJg'@;
put 'WDhIQVkybjNSQzZfUSV6SjA0WSIyTEh+QyN1RGk1fCUoOyxQWWU0Y2chP31yVWwwLlVBOiVqKWwxOXs7OWAuOHMhUndAJj8jUCpbYyh8TDZHbWB7fFR0c0JGODtxeURkVW0lVFJWZVIvSSJaeTgmOmolfWlFbnd0dUt0TCpRRkohOXYkSyE1dk1Mb2kqRVhJQk5JeW18dUg1Iyo+WWA1Pm9pU1NB'@;
put 'QUF6YkNBdzRWQnhESUgiUSwxQ3VLPXZGQEF0Qjo/UkQyejFOI09Vamh4LkxBQUFBQUFBQUFBQUFUWCg0Ijlwd2FOLiVeZmhwWCVdaG1jQUlDMURpTUhDaiI3NDNjYSo6b2lFZ090PWEiLEtmNTsqOFgkLE1VXyxLb2tDS1JKUD5Ma24kcF97W21SdUc2T0BwcSNzWFE+Iygrc0pAbEJ0VHQ8bmBq'@;
put 'SD12NkNzXURvNyRdR3M/TH1tSk4zYGhuSXB3TVh8ZFdwOVdQTDIwWnA+LjFOQzgsZmlZbigzdDVGYEN8XTJnYi5oPmAzQC5eIy5OXiNYTTVUODdvXUZVaUVYNEU8emlASCx+WFZ+LloofmNlQm5NZFQ/VDB3Vk5vOkgwNDgyfjZCejokMTxAYmd7dzcsQkJARCMwZjcubDduZm0kQnJYd0M3Xjxe'@;
put 'M0JOWlJeO3FKLls/ZGtJKFFPdFdnU2hKd2EvNFZAVz5PZlVRb3heN2Q9eWRaNXtlPik7dyM+Om1tS3JieDJ6TUd3ZWFuMlY6a1VEWWBgbWEqWjFUTSk1LlgpX1MpXThrODBZfXBoOzRiOn42VEUxVTRTeWcye0hhJCs+fVFHeWtLYWdTcGtwaSlVRlJ3NCNKQmhEVlJsfTF3I2FPcHljcE15TWw4'@;
put 'Kz9tLl4ueHp1TTJLej57ZHEpYXJOYjFzSU84cSlpX0JCKUsjWFRUTDdzdV5EVjFJWUp8Qk1uWkc0VWpeKXx5X3tdZHpAREordXhBazVyUzxvVGgkQnEifjwzISp6fl1kWnc4N1VgUUQjeDRCTDgwZEJMc1dmMEBORCNtSE1XSnNwPWpQdXR3fD9PWWYmSWh2OXQ/WzxrMzt4aW9qPi5PRHJeK2xo'@;
put 'QlhTNj45TiNTb0c7OCV6aEE7YVo4IlJ0XTpObHA3JiwkdltOaj5SMko9KEtgOGQ/ZXl7RjJTUitTWDJVPS9mMl1pPjJZK2poUi86d1RWUnJ2SEUrSD1gPHZlMWJgLzNGVSlEVnY3anxGelZGZERnLkF+OyhMWipoSHpSaH55O1dVVFomPWI3JXwrJmNgfllTfnh2QU5LI0VbVFk/OWk8L09sblQ8'@;
put 'd0AhWj1AT2VNInxfQkBDTTM1KnlsKk15XmRCPFJKL1Q2X014T3RxNGI/SllHR1MueEtHKlJ6cntfOHpRRiJTa1pRQipfWnJhdVh9Pih8fStkJnRPSyF5PTNRfnd1SFMzQWIsRnpZODlTYEZeVFh2bV0mWjF0fVp6OERFSCp0cEQ2PSNeY1pXej5QYSs0W1tWSyZoKTYzO1oocDlPT3xEW2dsZ245'@;
put 'ezJVOUxFWUs0ZHc1QExvRzJtRz1uSmhAJFVZamwhZmp5RmgsWD4hZE19JkI4OHZTUWQqOyljM08sU1lmcT07RCspKHhBMnBtNVFvT0JNbTVvMkddX3NgaTNmOSlkQzs1ZSpIKHBaUDVDTmVLVyV8QzhGJlgoV3ZOKzRZRjg7SVosOVN2TEYjRXh1Ij44cXQ0Z0p3R2A/THlmYCIwY2k8eSRlVkZ6'@;
put 'dSllLzhTSl9lT0JWWDYld0x2MS94Z1ZIQk5OVGo3aCIlfUsmJWRpLiZhY05VZE98c1RwVGVXOnVwMzxFfVU3M2dATShnQ1NvYXhoP2FAaFVofndOdzpyPVl4SUwhVkB0SzVLPH1iWVVdRV5sTWZ3biglUDg1PFo0fS59UU44NDBJSFI+WFJ7ZDd0cWN1UkoqJT51M2p8KVhvWGdsWHhPPEFRMVo4'@;
put 'TiROWTRRRF4kVVEkdCNYK289SkhMWGVTQVBNNHBjaX09fGR4bH1YSyVbTmlHR3xGOG5aQzUuLGVuakZqL2AuazArJX4vbkBQPWBCUjp0JGM0XVdnfDkiflpOUVMpdVhJa1NIbSpfUUVfdWc0fSI9czgqPEZBcDwhSTN8Ii9wU1dOV3MualJpVHhjMShKNHBsaC9WQD9MXj1NSUZfNFV9ZSRoYjNF'@;
put 'Qz4hOCU2MV9MJk9FMS9TXih0KCo2ZFJCUG8vJns1XShzX2JBPnZdNS9ebTRpdnhbe0gqNFVrIyRAL3lhQmJ4PW1wfDUoeGVENXUyb2E5eyoyOypyWkx+JTFedExUWlYsXj5CQ3dCIks8M3tAbG9gcVMmPCheeGNqNk1aP3hWYlNqOjNKOF5zRSQ2e05HQCgufVtfYV1CR3pAXlh9YixbO0o8SCha'@;
put 'U3ZnKDlIWkMhODRZd0Q+T1tzVTBRWGckVVljfmNIZS9YUFROeSkxJiZlREZ2NEhRd1R7fndIZio2TjBhQ100dDZyY1t7USMrcWpuUDQxKWIxU3Y3O3d9fTZROHowR3ZSbjg2cV5eLCZeIUA7bHpIOFFeZD1BR3oqP2l7eDshS3RkW1NCJmYzXV9qTlAweDIlQmVFTGlkTko8cT5pZzZQMGV6PHZ6'@;
put 'UUI0VDpFaWx0QFFIY3FndCshRjx4SGN9NmhDQExNTCRgM2ooM3Zfc3BoW1BjSDdwVWJdYyF3QyF0cCspaGxgYWQ1fik9cjV3enFHQFdwTzpCZG5xKjBqUy9CLnp4dUBbQiRdcFgrO10iNCU3T09nMWN5WmZ8TlowQ1VZKTpWSiZ9Il9nazxObzRvaVpxM298T1t1eTxDblZsUCVebV07VFIjKjZL'@;
put 'fGVSJit9O0hhSi87dVYwQGk8aStJKkNaMEtdZz1YTWNBYExuYyFfOWgvR3I+RT5HfjdFayR2fTwvcTRQbWZvKGpESmhxUyFbKWhENltlaXwhNlB1OUxTIUk5L2VqPVZqUz5bZ0YsPFEkKmQxMWFqTjRqdTUzdl8rMFdmYn0rJnJ8QjRbcUI2WmRkMER3KExzQSMkTUo4MEhwMU5nZVhWUy5DTD4p'@;
put 'a1IsVGcuQ1k0KnVaeUJdelVmM1g2cFROWCNBI15zfE9KbF5PY0RgV2xMSmIkSFdgYDc+fW9tWz1BMChbZGU0Ol12NExRPjFRUTZQZXg3YyVuR3RuYlp+cilmfHJjamYpNEZsJT5xX28pXTFAOkQ1XStHTjxfRk9PYV02SXpeQEh1fjpJZj8+aj06PmVyT3l6MUFoZGxpV1RiR1d2dzMrUi5XRSVi'@;
put 'W0hrcVAsVGdQIVN6THkpaVhLOGxgP0ZhKjJUYHFmPXIvYXlqMD9tIS5OM1I1VnZpIUlaUTJSXzc0e21QOXA3Z2N1TH40XmhYRTBrU1BJWUJlSW9AU2FAaSpwck9ofE0wLkw4NVIhX2M/Q341NmprJjJiYV1EKURrZ0U5NmwlK1Y1N0hyLDgiTStJeyxZUjRGb2E+dmx7antjIn58dHp2X2pvdHVZ'@;
put 'e0pKKjFDeEZUPiEpRHJ2KmpsJVoydWxrVixNXX5mVmhnU2cwTytRUXYqOGM8TyU5Pm5HMmQxKDd1W19IeUlvMkRpP0FwckkwdjNkYnRUI31yIzhmSTNwRyssLGBudXtNW0U4aERvZ0RQMmtzOkppJlUkXyxfYE1mWmg+VD1LTGFHcm8sb2IzbDYyUU4lb1NaJWE8O1g+fktaUlFaZzFQYEMyMkVy'@;
put 'JSw9Jm9JOGRrfkQ8TzlaR3RLRGxsWXA+eHlLMCVYeGhfWXNle2glOF4mTD5HaHB6USZ5KDdbRHVFXVQlbEZ9bT8zODNGYiUhWDdoRCxZTkNgdGd5ZHN+PmVwQk1dSWgoNntwMDV8Q1QjR15JSzQ6dHhufEZPSSQqdCguJTZWZnNAZyNhXVVvWCl0USpQOjoyXTFGRyVNdXw8VmV1InljWnB6U3ZC'@;
put 'Tzoxe2E7STREOnx8VEU8OWFyKyZqQEIlV2Mpbyp2cVd3aSkpUDkmRDB+QCM4WjR3S0EwRDFQLnFYRF5uSXQ8WSVeK1Q0VSZ7bWRLZGtXdWR3MX0iTVByRHZ0OUdpXV96PXdLLm9NYVtgZ1UpQn01QUVJYEd8MUZuJG5QV2FoNz56PE17eDlGZ2o/JDM7eHowaUxqWzlAP2JeTUguWU8ycn0kTmJj'@;
put 'WDsjanw9LFU3Pzw7d19URypoTlNWX1pSJlpJU3I+LldjM1hbfi5vXyJAXldhWUh+JGZ4PVF7QjxQKG1fOHRoOHMsT0dBJiZvdWRtUys9eF9fNCpDYFVtNy5fRiEpNWQqV0x8fmB1Mlo8NCR0O1dIKnYvcDhtXSo8cmlWbUZyYSQvNjxbbzcqfVVwWG9gaW5kJFp7UnhTcylKaiEpVFY5KDVYJj80'@;
put 'ajpAbXM5S3Yya2tQIT9DJDsmRHgjNHRMRDIxVjE+Rn51QGJzMnxQY1lMX09XWzxqLzwoNUkkU3xSc2BCeF0hZ1g0ZE44P0AjOEtnMDJ3LDxIMShQJU0lK3JkOTlbPywxQjQyTkY0M1pQVUJ7MHxVQV4lbVlOZH1nNVo6YD4jKSpkKFNQZjVKb2xIKTlQRj5LSHx2TkQjTFtGQGg2VF9obyJSayQ7'@;
put 'WFcmMjw+SDZnQjNEZihtSjdWMWJSS0NZeTx+Im9qfkomQn52TE1EP3RwL3JZe3lkUVd6TkE7P0MpQ2I0aDtOL0JHfnpGI3xfNHZhLjUmOmVAODRSSFpTMzZpV2hOayE5Wz9FMj9eOzNRNEJWTG57dCRPRy8qP3xhbXxaQ14vc0t8YFVGJFlaWjZ+WUFISjZsbStQe1JWWkcmOi59LjQqNmJNPzVf'@;
put 'bmdwZ3cjTT9DaCNIZjl0c0x8K1dTS2xHRWo8fnJyaU1HNT5JVTtnRT89ezpWeitOVjRtTjtvUFRZR1RJSDhkakxLLnViYGZXUjMyJGImKXk0T2VaOylDd2QxfmpZU18ldj5lP01OQ1NfXnVsKURVOktAfi80dWM8OTFrYjpdYTNrMF91JVc6YDY0PkdZVTlFWiZzU0dkOT5kOTpbOnkmSEVMXzdF'@;
put 'VjJaPyJ8Kn4rNDgxZnlGU3l2QEhDMypbOlozbjgrQXBjO0ovJmpadXZ3Vj89UyJzRXNxXyhWJGpfVmFER15IWWZhQUdIcXl4Uz9xckh9eTt8VEA+VEYzKj04eTtrOnwkcD5EVmcwU1hiT1R8WDtWVWU/bVN2bjhQcHpOWy9OYyQ3JEo4MltdQDBsKmREWUV3MTMvSUouXVh2JERaKXE/P0l4W0ok'@;
put 'Ti5MKEVaOC5pYFtGOFd4TXtPNGxfcWwsIV13Qk1NYCxNcjNDIWhNUnZiISM9flJ7Xj5VfGF2az1zfH4laVY/a3FwNk9xKWBvfldwYklabkBFSS5QcEZMRjkxJXUxRz8/Pmg2Py94YEJhcXFEUnU2PGNvUD5hZWNaK2o7RTxDJV1obF1VZTNfYVZvX3VjSSUlNF91WXkxayJkLFtBVyhpcF1QeUFf'@;
put 'Mk59WiU4UWk6PkJ7WHJST0F+YzgmU3Ykfno7JkBKaVF3VjM3KnZINVt6IT1PWSVkd0s/I3tgSltyQkJnbV5mZHFecWEoayViZT15TkdCSVNAUGNxVXMrd3tMUilqRiJyUH43RD4kfmgiRzI0JWZATyNpcWhVdz1xPUtDYm1ydnwyQlNITHxXMyhOKip1RTM3byZGO2ZSNCY2TkFrI1NBOmt8S2hw'@;
put 'WFk7QUU8az8rYmNqW2NyQ1hOWX5IbFVCRCZhW3RDV0h5RyZYYWNlTiFqOy5VIU9NIVRXKkRMblhROHFOQyFrV1pMPmVAYnw+Z3tJIXM/Iz5eTDBUKHwlSjJ8d0BrVkJZdX4zeDdmWyozYzM8Z3kwV0twTUV0Uiw5c2NAYndLMV9Rb3AhWlRmKSRTP21TLC5YKVg1bHdNYE83LExBa0VVYGl9Q0kp'@;
put 'T2Q2ZHg2JEFGen56QUxgOE98VVQ2bktSQUklNWV+VChRXV0zSEJmeWZJJWoqQm5vZClLbGVDLEV0akxzMGdFLiZvPlkkMTh7I24uM1k3aTg/cXpSUzBFMDZ7Il5QX3lTYTRGWUE5cEZUaz5pXigkaGhieXY5aSIwTnZ8Ujs3UUhUWXJ5MSN7NnZhIiU4WDlLa3FpRnQmTzoyV1dEYmszXzo7PHI4'@;
put 'JE5GV1lPM0xNKXJkXThHbDgsKWU2LEFKMV5RSURvbW4+S0lDOSlLPV9SU1UpO2R5eUNJY3xqbjtDKmdjaStIbFhEWlhPdTQ7NmJtNntmQTdCOCIxcUBAVHIvYkM0UFkiRjRHS01jOnREND4/UkZtRkdRSXpxPU5UREhgYTxVam9jdDFLfHpZXWwvaWtMNjdNV1NVbyQpMm4jK1FdOkU0e2dlUW5F'@;
put 'anEhbnA/PmxYckEuJFUrc2lDKkhCKixVK31jZnMpcCFmQyZpRS9bKFNKdGNPdGZdMFBfekRCN0I3Vjs+bjxaRV1jcDppOVhWJGMzfl96Im1MOVJiKXBYent2QVsoUkBkc2wzYlUlPkcuaG9IemE+NXpUYjsvOnZlczlpImw4c1I7Nm09Xmw+SlVpdHZyRStnXzFnYnAsVXhjQ1tbImFadko1WVlK'@;
put 'WTJUInNLRGwxQUF2SDNQbyxCcWF1UkplXiNiR2hAeUo9O09dUGg/IUAsMztgZkZWK318Ul5qfV0yUXsyb0dJO0JyencsV09FYXBQZHs+VTEmWTFXP3hbM01lYWpzLjt7JlBwO2Q7TENlfmokUCtpK0V4aSxyRyM5eGNfVlZdemt+WkZ+LDxAN05tYz10bm4sd1ZnOnhDL1RRTkNeSWJ7MiVZTlEq'@;
put 'S11YNmZdUnh4VF9tNns9cHVJNW0/dGVmREN2ei5hdituSntKNFFFKV5XdTlCPV1CMng8PDRaKSttPjMrc290cVdGJldFI3w3KCljY1R0diN1VCNxaC8pY1d+R2xSQTR3L3ZDIT4+XmF3fVZqK1hkeXRMbG5mP1hZJnYsKll6WkUpN2p8LnBaOEQ3SUo1P3RLRiVIWDpZI3k3NToscTw6dFN1OXY1'@;
put 'Knk4cEh6bnxwQE8jX2EkOiQwZ1gwOW5udSJyV0UrRm1+fk8iVlVadDVabHZ6R3xvSyVTMzQ8cS86Ti95RUNRbmxpdDxyd31PL3c6RTQhR1RtPEU6Q0xKOzJDVFdocEZnZUNxSjFfeGdCSEtOPE98SW5FSnlCK1txdzxeOFN7WXFXeSltWiF8ajRjYnV6dVYuUkxEVGN2YjNZbipfKzNOMjNKSCpF'@;
put 'cUdqbiE2KkVGMWo3MGVySHk/UWs0ZWtOaUBSW2wsMjMmMldufUlXbEhCMG5RbmJwPXFWL2ZSWjM3TTJkOXZaSigmMi5rS1Y4P2oiVylZOHFrI2pMKyEoMmJNfT5Bcz93YkBeXXssYDxVSk54Y155Syw9ZEtMVWdVKUhaeHZZQFBKNHIleE1uOy5yISZyPlR7eUR5KlpCNi5MN2lWaXZQdWVxeV9i'@;
put 'cCkkZWdmKz9qQUJTeUgmUSZRdm41XkRdRTJFRmFeUEhjO3A4PWklIVdwKnR4OjddaCRfW1ZmU2BgSGdzSkVSJjZ5enVeNEUsKilqLCoyQSZUSSw/MSJSKDJ2NEQsXlVrSjxsNVheNmdLLzYpbWlIVGtWIzRHP052e181XzEsfEkxYWFWMXU7X1hlZVZ4TEFsRHFrPzlkPFZQUCVjXjtQOVIuKy95'@;
put 'Jk11TFgvcWUhY2U2ck1wIzo/UkJLaUQ+PEgsd1ddMWNaM1R6cz1BSnFbaCo5IzomMU5ianM9RlBFamYvSnZrXikhZG1FLCpuWUBVSEBEd3FXRUIvZkw2ZFhVJWA2KVRRbHY6fT5oPEJxVF1VSUA3e1N1KV1XeCoyPnRrJTkrJF1sRXNNOXYmZXkzby83bzIyNXBtLFJ6XkBsQWUwckBsLEEyMlZB'@;
put 'bjI3WnFGSEF1TH1GQlIwIS86TixqQXdDY1NqIX12RDR5aH5lRDc5M2d3ZztELH1COiVWdkBOdUwuZT48ciNoU1Vabz5gL2FtdkJLSUYiKntEXyRVUVgoNyVlMDZlYE9BNDVKeVpbN3ksaWF2cHJxOStuakh5UkY+TSQhNTVUdVZsMnFZIllxP0xkVyIxWzAkViFbOFRoclIzJGwuTHdxfDh7M2c0'@;
put 'dz4zdjJ1NC5GVTtpYXZqYV5uZFREVipCIzwkZD5qeldkeWlFVWdGeTAmLmJKPF9tQ00mRiVPN1ZwODdqLDFOWklVZE1UaFtJNFEzODJ6aGxVfUpRNj1WO246PiN5VDw1eXZ3WDVzSTplP0A+NDBSWmZ6KHNWUUg8PUhWMXFKbVowSDtgVC40SFdvP2lxYXNOInl2USZgQFJifXQ0dko5NE05flpq'@;
put 'Wzx7b2dGOkI/LEsoXygvVDZkNiFUVG5feEshYmFAdk5BK3JIU3Z7PjNIaSp4VHNJLHJeR1FCbXViR21vUDslNmRSayRWPG8/V1o4MEJnfEN+KXsvLnRFaEx3bU5iaEp8JUN4MHlSfH4uNER6aENUWEBQJn5ZRSJPSG5GXTsmSHVYfWJwdlt0S3I+W1ZmI145TC5xU05+M11odjNDfW49bW5oKlRv'@;
put 'MnxtZyR5WyUwbjhnSjR2b1AyTklFdS57YFJDUihKTER7WEFKc2cwZl1wIzh0VGNMamFSY0pNL0MhKXpGWlN4MWxRdkQxfiEpWW4xSm4pbnpKSEw/VG1dVVk2e3p7Lk1ZPC5DVyMkZTslJFdGOSU8WDFVazAhTS9xbmh7U0JAX21eOkF8VXRyOFEjeDp1Z1BsKzJqSWBTQCZSSS84PGhxLyZVY0Yv'@;
put 'YUBnR3ZSZHhOPS5AejlUVGE7QndyW31TfmtdXzJScGckPiZxMXlEM2k0dV5FZ2ImNG5GZGNYYHMqZCs4I0U5dT58YXVrZnFeZDFMUmNJaTd4O24lYjkqNU0zPEg6WFlsUS9YZmp8X2pmc2MhSHU1KEhAJHJsbW1tZXBOZEV4YyFzPStXRztXfH5xZU49VTY/cm9AKEZuK0RBZnxwJC5RbEYocURE'@;
put 'WERoVXQkRkgodkYxWGA/NTZGeCU7aXJPRDU+JlVhWCk9bFJMJi90cmt4KnQjb2EuO0s9fEs4aTohfVN1ZnVYVz5VZklhQFhyOnlzZWFhWy98dk0jJVsyNmszZ3ReY0djVXMmI3NkUjVPZ21GOWo3R0xdVl5eVnY7YEV9aD5uMToxQzh0NHAkVHA0SmFSdGA1bkUjWDheeCRRXiMwej1uVG8jUlVt'@;
put 'SytPN2IsNn47VUo9YysiXndfOjJ3VSFmXl9tIWFbSzgoe3Z2JUM2R2ZuWkFGKk0ydVReTiVmQUUkYGg/OCk+KFF9Rm83Zlt1ems3RyRdcVdtR2R8REtwaEkoNVtbS2RkKWUrWzUjamt9Rk0wa3opQnA8Oj1BP3ola30xPlVfYltOLyY5dHo9NUdGVyw2bml1U3xkUjRtb0pQP0pvMS5AIUw2YXFt'@;
put 'IilyJkNUdSkxZk96SHh4e0lVbiwlVCo9eUw0fWNzL25nTSE6OmNULkBLJGtxPkMoOyxYdEo7YlZWYEZSPyN4TU95KHRbaztpcXpNdl4od10pcTxbRWkxe1dwLmNpdD5AUGkxdkVSYTlgaUJkai9LOGEzO2FzPXV2Xng8d3MwcyZATGAyb2JOLHZGMWRrNC98UDIlQH40d0NZLj4lfUg1RENxIkhV'@;
put 'UTM8aH55QzBuY0J1cFBURGFMST58RSM1RlNpY1FJKiNDIV97bCVbclRzJFZAMjsiNTJEOTUwX0EkdHk6Z3wye2w6PklaQXV4NzdCSiE+T09JbFhnTHlwTmRld10lPnA3Zn5NKyU2WjRfNWZIfEhGX2s4WHIkOGEvMHB4Pi9BZXQhOEM8NDMxJGFAXXRsJFRaL1JdWiVZZjFvRmBdTmEhNiw7Si9t'@;
put 'QkdrVCsrZTE5XnNTc1soTl50MilMSFFFLjRFZmc9fjtkZmw3Nk92dn5yJk0oLmVmVHpEVjYoW3FocSVOOnM3STBFIy4pbGJqbi86M09uJCtoJGYiXVM9L3RWPHZjWW8rQEBHN11xX3xmfjh9PkBSb21iVyhQQ3xEX3gyVHIwKXQoQUBuLkdsJittNyhUTF1qcmI4TlYxLzRoQFREaFNAeTd7Uit2'@;
put 'S0UjVDdUT2hwfE07WiomNkQqYzA4NFNIIzdUUVZSfXkuMEx7KV1BS3w+eVRyYmZmPCVNZWF9MTJeKU5USVk7Ny9wSk02KXNAZFU7WmRUdD9adUZAOChTJHJ5JS9FTHw9SXYzREUmcy5heD8kVWZXQXkjU0g3UCJoRnN7TS90UEJSXWxfOEhsNy5HWSM4MUA2d2lTM2VyN2g7NTpsWzM/ODFdazsx'@;
put 'fHhtT0VFTGJpdz5ZSjBqPGk0MU0qQ1dmMzFnKCZjY0c+KHpZanMqP1cmKTMifGZoaFErNTZxPDhofWd2SDJpKDg9KSVUZC5iJWo9bn5bTFtiTzAjKj53a1BydnV5JG12UlJWLl8yS3crQVgzdThJWHB7dGVHanRqaGA6VytEQ3okN0R3XTU9YipHL1VicH4rMj8+djhHY25eWyZqeW93dl84WUty'@;
put 'SUxzc0JxLGRrYjpZP1BvKixXR2xYeDxjS1JVbU5dQj9fd1QrW0FGM1JkQVNAdWNybjo1JDAoNEtXeWg/MHooKE1tZDhjTFBFJFR6SUVZaSxLS2lsNzpEZ0lXW35EOTxyRWolKD50Tk9ZQ3p0T3pjV0JhKkJTWTtMamYpPk5HOk4uO3FbaiE8Rm9RSjZKRXQhejhWNEtMTHJOaWJrRFFvZlV3ZH46'@;
put 'TGQiX1ViRjpjWXx8JiJnIXNeRjYqeFZOVl8lVyZPYG9BdzJ5UWlOJWliaUJuZERHeUA2b0E0TH5oMi8uY3pFKUp+WCtAaVNFOngiS0phbX0lRn0vdDwkYTZGaF5gOkpZJUIreWxLNmhieFA3VFleR3hFSSYrcSY3T2QlYHpYQlU/fmJGSGRPSHVRJlBWWjZiV1FzKWNFK2NaYGpMQVFXT1h8cVso'@;
put 'ZXNPaTA+aSguYUNmdywxJnJ4RUxQKDo+VTd9cDNBc3dSOX1VKmMydT85MkAoR2lEST86XiZBTjh9TG9mRkxoQCxKMGhjbD19VztReD14XyRMZD5DX31Ackk4WTl0ZTVLfVojK1NmTllxMSx3SHczP2V7SCZZL19GSCZ2bn1eMHp0fjlyM3xFW1tnRXx+SztdOmMjVjchZnIhfWJ6VE5UfCZuYTF9'@;
put 'ZHZzInpmaUhuPl9nNy5nVVNIZVprNDE0eDxkSWowZzxyP104cDBqQ0IlMiRuUVtdOHZuIUYve1VPZ3g6dWw7cUw8MWZBa1tkV21kVy92UVdBVGptfCEvbUBGczwpdVVDV2ttJXhSJEI5Km5ucFkoTm1ufExQe15IJClRdiU6VHdVcENPPVtWKjBfO0YieE9nUnVaZ2dSIm1WTz89aUlpSlp1SCV1'@;
put 'UDMpJEsiQyk6PHomZCl4LEJoWy9WSTtfcUxQZkNMMXVQSixkbC52ZXhGUERhMDQoSDhZSjV2c0Uuem4zNjR7PlojLHdyS1sjKm06e1RmMkBQTWJfY0xXYGg5dVchVjAxME9jUzpvYVl9PX45S0YuaDtMcmVJYn40Wk9HRmdqOUdFLzgoIn1mZntfWWYuWS5IP2JTS1BnXXdRSHxnRF9zQzAqNU0p'@;
put 'MFBqRlc6NzFkXk5gaHBqSS8kbDN9OlZJVSYwV184LnQ0eF94RlQqO1cwRClVczBeIVR6ZCpSdClJRWhGWlA2VGNhT0pBJHdFIkVSM3FDczc1QVVYRCZbXl4pY11UdzJaZm4hJW07K24jMlF+MF0ublVwfVs+fmIzRVZ0YnxtIXA8L0IrYTAzQypJJTt0Li8hOVIrfkg4VVcmNmltMiZ3P3U8K0xu'@;
put 'KHwhTXhSdSghOlVfSDA9cl4hPjZ1OHJtSl45WDJKPU5aa11dRjEsQW9yajBKckx+fm9dbU9VZXVUcl1qNi5iO3VRMUFrbyhzck16WDNCTy89Ol59UWVOWGc/M1pOUyluKm89alQxOG5CVjRXOERTaX1VSmk0LHhxKjB2UnNvOlQ9JTI9Sz0wOEs1dmE/I3g8ZGxkUiwuLHlIR21xWzIyWDwiJjZY'@;
put 'dTNbTWg1bCo8ZW1xNGw/UEZSeSZpL2E/K2V0WUM4d05Kb2VhLikjc343eFd6d3x2NiElKlVIWlMlOVpIPjRxNTBYQ0Rne2oydkdifmdmPm1UUVllWjJUIWo4fGRJZF9RczZ8QjtDOWE+K10mM3g3eFlVUU4+M2hzZFRTJkVZXlp0OWh9SEJCI2dSZCNDVDppISEifFNLQnZBI1Z5cjgoWT51Wy5G'@;
put 'T30sLmxgKDoqd3Y4ajo/ZEdxZzBaP3QkdTFiZGYxN0g8WzRbLDYlfTlUUVFVNzk9RE1bfjh7L2FtPDY+Qi9TcnplRF8hJV5HOGNMI2haO0F1cXwmbUluKkY8VF8vdkIkLjE7THZvT2thPj5tOkxHYTxOZ3h6ZH1oSHZ8a0JhQ0MpIT5uW0NPeUtoRGFsJU5HNEQzV0J7JXI8UUZ8aFBUW0dFJVB7'@;
put 'WHB1e2BVV3csfUw1dkNCWyVmPE1FO2JENjZVSUZ0d05MdUVqL2A+fCoyOEU/QnQhd0M2X2FYbDIxRUB4T0Q8WHAjSHRAcmlYXUMwUF5xViM9cEMoYU8qc0dnQFIiQ2xKeWpsQWFFXkp7NylFNko9N1csaz80LFFBe0l2a2dSOipnXUJOXylaIzJRZGRjY2VEIW16X3JPJilTMmdseWJOR0pEKyxt'@;
put 'dk06MVBheXM7azAvcndgWyRwL01QZGU+KXkiQT81b3AwPGNqQ2xjejthSF83KH5pL2Y0QTY1P0U2WzxLLk5NL3p+T1ROUE1BZTx5L11ofl1kUSgyb1ksUnQ7N2ghLiZQZT5+M15ZMEIiek9kIURsYVZ2RldHNmhgcmdjayMsYWdtbHxyI18pcFQ8I1VHWEZkOCkwVEY9X14yZGNHUmhJN0E0ZCVP'@;
put 'd3tSSVBxJktNNSI4UXYqa2tKRihkYmpATlpBcTo/KERkJV4hNChsdns4b3lhSHBKXlYwMzApPTViJVpOZjNGbSs9cmc4ZnNfNnE/MH1tbG1Va0FXTU1zS31oQmQpXnV8Sil8UFQ1WnZZVntmbkkhXTs2dF5ddTl5em9YUUg0UV9sdjhRLkszKndDO2QwTlpaR1AmJG5NWDhnP3V4fTVTPCwvMSRi'@;
put 'PlE0Mkx3aXBrPSwxQHA6Yi9yJXNnKjE9PjN6dClgcGldck07WnQqQT5hSzJJYllVJClIcCVEKmsvd01nSWtwfGw1ZXxwWTlDMldkfTFzfDY6I2U7eUdWTF1PYXVVX2drOSJ2c0t8S3hja344a1gqfGFyQXA2YGFvayVvM05aej11aFRjQD02OS4qSDZbTVQvNiJmbjp5SE5RNlNQL0pfe2tYXVBs'@;
put 'fiZtSjB7cSlYYDxhfjEiQH51PEhYZDxjN1dWXkshLy9BWzwsYioyYmpzN3QjU1V2bGo7U3hNW3RCYlIoWj1kcXJdQmpPPDtfWS9PQi5AIVZAWSooMVlWKjxUcDolKUFwNDs1biZRfXt8M096ZyZQUyokZkYjRFFxI2Z1R3dJOTU4ZW5ERE9sb2ZhcHh3QH4lOC8keS8uemFjZXF1WlddZUhWUDtC'@;
put 'd0k4IXIvW3NmK2kxbTp9O1JgXkBxQEA1XiVuJSRFVyRnekUqcElCa2dXVjlZdjVGX2p2VD51ZX1CT1ZPSDRUVk1Mb2FNY0Yme14pQDtbcnlUfUgke19YZVRCO3xpbnhaSUd1TV5aT0teVWNlYFohWiNLZyhmdHhXL2pveGY/dVVFKmQ8fl9uOyghYGUkcTtvMlk7W1RHTzVAeWw9YHpAdE54MGtI'@;
put 'VmA+T3drR20/PndtTm9oPjEkd3pQWHZ1THErfWAjQ2B4dH1UMSZORGNiOlJAY09WKXp6VXZxSjBuUlRKYTB7dGU9UTFiZDk4YzdZaUFoeSYsNnZGXkJlSE9gMTd+VD1sfXl4fkhFNzlqOkR8b1BOMmAsQ1c2b2hhUWspZmN7PW5eNSFxTW8kLkBzVlh7TyRefX1lbzomVEoxdz1VbCFROFpYek5M'@;
put 'USUrdm1saSZieGZ+dVBDfltxV0RqKWxpS2ZtYEhtOyJrV05oJT08TGtCdnljRXJYMG55amYxY1RYeHQ+OmBrditaaz1MLylFImI6UixYSkZjJiFWKTdVa0tbdiIyIi9RWyVgZUlMKzZxWE1jalomZi5Lej1UV1BJOFc8Sm9ZTyZdLzVMeVVsZTVhKjZbLCQldTl8UFpmTFREbCIuXzRMfWAiViZn'@;
put 'W2ZeSj9xWFk1TTRXUTdsaWd3bmtrLzlaZV9+b2lFUHJBRVJvaGwkb1RzZFE1a3lkNnU6aGF0TmZyKk5PTG5VIzh3IyFlL1BqQ0o2JSNfZFs3M2tmZUYvLmolfEtpZksyW3ZVd3pJcWhwQ3ZdJmUkUys1ZzFfY05idldSZjU8NCprNUIxXlZPMEdycyQrTHdIOEhAKF1XdTVBRlZ0Mm5fT0BMTClJ'@;
put 'SU1ZUj5ZeFprJUxFKzQrdytlTGxdPF1FQ2w2dEMrRl5LJkReQyVrKChJZDJCYUZRSD5lS0E0NFZKe0w7VnRdJENiU2o/SWQ7cHh0P1ZeM1o5JkI7Uy8jdGwiNWVwQzRXalJWVkVWTm54UyFjI2V1KCZ+KClYKl51VlRRYDQqU2dDbTkvMUcuQ1tELl9jdXN0RiF6IVEiakxNMTQ9aG5MM21FVE5R'@;
put 'IklkT2k3RTdqInlNWl5vNF5YOm8zO01WVEtaQFtAYCFvZF89YSQlcH5aKmJsP2FSZ3xQLy8/QSsxX34pcWo5e2RjRTEkb2c+XnczSSQzNTRzKWtzV2pWQGpVIm82KyZoKHEkKH5xXlMzdFc3NzBNems0dSh8UXpOU0I3PkA0OzN0ZkVXYmtbaEdwNWVkKld1bDVANUN7RkQ2NT58N2h1aD8yODJ3'@;
put 'Lkd7ZSZwQkEmfWs4YkMxZD9temlSPzVYMUAwa0xjWVVAMyttVnZWNDg/Q11xX0pZdzV5QXBHUTEzLCU1Wk1eX281KnllIXE8cD9mVUFocURMRVdOfj41QiV5enBKSVE8YnkzZXIhZlo/UnhFNUk3XnxzRSQhT3RYdm5jYmglbDdnbHU4YWJicSQrdDVXQEJ3PGdgYm0kNjlQQE4+NzRTZFBMZHJF'@;
put 'cHhGRlJOTXQ9RlpHY3FSRiN+WytOW0dFRyh5PCRNaW9yfGtCXitXXmU+O1FwI1BXbTlwT20yQUZpVntjMDtePXxUNUY4LzMidX4yaHRjS1MqYTJJQ1dURHEvXXtVXzI6d2YqbCUldmwrIWM7WGtOMDdaMylgej5PQnYrNnlwV1lTZ0BSPFUoaFBZOT9mLG1Ld1RaJE59MXRVUWswaHcoamB4K3Ap'@;
put 'Zz5qOV9qOG9aU1N9VT5iSkxHZDlKcEl6YXA4d3liUSlZbFtVN10kIihWO1g3YmdDZ0pzb2ptYihIM2ZTen5kNnJ8RzQkOit9TzI+M2l2MXN6I1FAW2UmSSlDVlcrWCUvYyQ7Z18jXVVhQTF7IX59R05zNUg/dDI0e2pXJktieDNYeFhHX3pfeVEpLjN8MV5MM0chZGZLWnRZWGdLUklXaUUiPGFU'@;
put 'dz9FWml8QkdMPnh8bER4VUhqO1BaW3BTNV4laD5+Ky9wd2RJemVtcT1YNW9ZOCQ7c0c6czpqeDlOQSF0PmZPcl1rTkFrcTJ4Z0UqcFJTTFFzPUppNHtTKVskXzM6OTJ3YlZkYnVJQmY7bCY0dyJna2M9TlBsLipMJntSfXE5KU9GKCRnTXF1aytYJUBwQlR2NHw0LFlpQTBFNzREK3hIU1Z4TWJR'@;
put 'JDJhd2xBSiRmKW9rQGd0NTFxNj9uQExyK3ZRdWVNQ2xNVCkvXWZYeEZUS0NDUXV5UV1CQSpwRWssNEdbQnJHQmEyPDRRZzkkSVNYaUAzZFpEYGFqcm5NUG9zXz9VWUU/R091aEIkWjNoOj5FR3w5L31AaX5rdjR4ZCJTKT5qfCJ1cHNJYjNuemI2NnZMPT1+OHxZe2hlSVE+QjtvQnY4SDcqRHxE'@;
put 'PEFNYFd2cDx3cDYhPlZOMkEhRk5Ja1tsMFJZWDMucSlOK096JU0sbyxoPXJxciJjdGQ2RkEuIXB+d2B5eDZSTXZ0Q0sxdUtUTShnfDJqfS8yW2pFbzBXYiZpdnd3R0swPyZZYi88LDhxc2xoPkZxME9zI0RYRjEyMz04KTN2RjJCTl9DImlRRXB2a3Y8TSFlTGBOKzdae2k8UTw8aCgwKFJIXV01'@;
put 'JngyLiFTNj9mIVBaWi5OZDhTdDg8d3okUyRKIjZqanxuXzU1U3FmJnouWiJ8T1l1V0NOdiNWPWY9aXkmQWUpNmh6TmZJdF9yLHZqKlIrbUciWk9AJnB9YkNVRkUufmJfSmIqNGN3QnN5c3BuKHxZe2Z+PH4yKyh5P0wmZExXRV5WSHY1LnNvTHVda0NfS0xFcmNFbV9KRXtZIk5mcTlnej5ITzF9'@;
put 'ZDZaMiF1RTRKIjhTWlFAa05nYlZ9VmhEYiZKeSZOZT04WSpYSCFgejFWZ0BTdDtVXntAWVRkejhteyZ3OzdJcmlwYHc2dDRHLFtHQGV+LD88SlkhIkxlQ3FsTGBFc29MaW1GNSpZWWlXVyZoP04iaTkjaFY4dkVqS01OQlRIVXBQRiQlcHxddCVpbylOOThXU2VaL102NVYoQlhoSVQmV2d8PlBA'@;
put 'clNkbGYsVWkmdEciVTs+bUhYSCE3ZDR9XThtY0VxWCZKflhJMzw2S1R8UTgqQHljR3khIk9FRytLSmxGeEdFeTgqbk9eJmZKVyRmSz1RSzw7T1JPUDR8Xzg0JGswYFEkRks1U18sIitGPE4jUkhnXm9eMTFmNSlBejVBLDNsJGBGVD58MSx5XX5HLCwiMj1Rd2dtMztiJGd6Mms6V30+YylZXnxS'@;
put 'Z0ZXLz0jfUhedSkxX3xbXztWe2k4I29pd1BKI1FELngrazFSWVhBUW9KUUtSLGZBVVBodzhUbENOQ0NJVEx5VGVObmUreyQjPDp1JXVGUnp2dzQ9eERQfWxdUHBbRGlvKTBdeCRzNT5yNlVoImwkKHBsdlNybk4weTJld0AmOTw4KHEuK3N4VmNxV107NUY/IUlzeG05JGxEMD5BcE5EaDdIbChK'@;
put 'VHV7QlNGY0JVNnFNJkAvdmJRSmRMMnlVYSp3LGMrWHhqTHMxMiVmW2o2UVpje3V9VTViMUB1R3VHP2FNe0tCeDBSfC4ofUo/djpRMF92MHgjZDRYdGhgblpzaTI9K1VUfU1LPU8hbD9YWDJfam0yImxgREZqWCNBUF4jIyUyKUBUZ25hTX5yJk9UbXtze2BDLlpgRkw1PjZHVG81Pls4NFNXWnEz'@;
put 'LiojSzVCYV9EV2hhUFttWFJbXXMuNU1wU0pnWkpSVFFEIU8zMTxlSzx4P2MjZGNnRHtudShrLnFoI3AvZSxVPzZDLyF1ZSR1ciFxRnVhQ2d4dSptcWpza1IjRzVudWJgSXZAPV5nM2pBL0N9KSMxQU1vVzNNMVhyZFJjRTo2IkhadVkmbEBZfFpdY11tbmovYEwhSEYyYjpsOT5eIUFJczNibTJU'@;
put 'Pn4uKVtqX0xhVSE6VDRxKW1GNkl5Z0RPTzxJUXddZ05xfG0xa2lWfWYvbTY/MFhzMjx7WCx0Y3JhbVgkMWorcUhqOEckN1FSRkhDMXJBUGNGMjVZeEo0XW9wT0dsPHwmSDFRc2hFKWhRaHZCTTsxfWhlYGFDODpINEBwKWE5aC9SJiFGd0gjXUolJityRVJXUX0sKXI/QDRjfHp+eDQ0aiEkSGRZ'@;
put 'enJ5bkQzcUxaPmM9ZTk4aGhAcEhYZkE1L25wWllxYiouWCh0WldoYXRLIVV+NHcmY3E2U2t5IiU1NnczfXNzdV9qYTh5K3k5RmY/MEpNN2cvMk18Q15aRUx4Tiw0TTZIK21UW3U8T1A/OywuaEFeYnQwVl1mLCtjI0V2IlFBLCtaOV58VzZoPS9oPT5+ZERmdTZINUM8N1Z9P1NzO2tXfD9wNiNf'@;
put 'R0h2Lk9WL3pJKCg0NEpiaj1iKGVFWWJRKU9vMEpIIzcxSjF6dWpUXn5Rb0tUMHY0KUgpT1NCO2V2dVV7QGRVI1MzOWhqbnpTPzRgSyhbJjs3aWdCfSpoeSh0cUcyfF4wcHptRnR5YVJqcWIjdmpVVzBGS0F1Y3NObE03aWgrWDQkc10mcCwxcy5KYTMsamZGbT9nN0FNSSJiNTN6RmsjUFV1OnFq'@;
put 'I24iMEJERGltV0t0Sk07PmNxWTovQkBZImlUK2lIdl0vfVd9MDhRW3hzTUVsUzt5bSJ7UmAkVD5CJUIka3MxSGd4Lz91PGU3WUVZVnNgSyJoVVFbL0c4Jmc8ZjluXzsxeEUjNShuU29aezZCanVyRW1TQ0wiaDFIU1ZaOlcqbn1DMXw0cnJYJnFJOG9temMqPURrWm58Xmw1VVM4PnQ6Tn1+dDhW'@;
put 'W2V9Uyg8dnosLkZhIlssfVpORT8lOWV7bCUjc3lVfHJ6cnwvdktodXk6OXcmWHFKOltWez1BcmQua3lnIS5jY1pKaGlTfmw9PWUhfF5zOERjWGRDVU9gTCsveGdYL3AyezpvbXFRXllDdzAwP1JyYT8jND5AeDA0MGpWaTQxMjU8d0ppV1RfcVgjTXAjcVJYaGl+ZWM4SStSIX1fRihZVnNMXUxR'@;
put 'I35mfEV1K20zXXUpImIwKisybVJDNio1JDBWa2pUPW1fRFAsPlVwV0pbWE0qJT5pSU03TyNjNl48bCNxXzBfP21SMGUiPkx5JnJ6W1MvTEZsW2JAOCkrd0dYK2lgKWs7ZWc/QkE4Z01DbFBeeG1uRTk6PFZkJTQvPzBAfkdWbUF3OjRtZzNEMm5TZ2lkPyY+ZGRhQiVzKn5NTEIwRkBWcFJDX0hl'@;
put 'JU9nQyh3UV5oIUdHQEk9Q1hfWEUqU0xydVYyRVdFKUJwWWxFY0gxV1M/aU9TNT9NdH12aHtmfGQoX0ZIKyU6S1RPZHdaOyQrNCteWlh4KGpMVHpsRHU/bVFxX1ZTNEgzKH45cVc6c2l8Zko8VVs3SGZeN1VAcmNHK1ppRDJXTj4peFVoa31MZmJMMW8sdlpQIT9gKUg/NEA/SF9RNGJXN1lkODRm'@;
put 'ZDFhTEYpPnI3Ryt4TWFVP31DWnlDcCZ0QU9dMGEldCpLKV9oUywzLGY+UztGe3J2O0dzSnluSDZ5THZ4QVt1MnNKYSN4S0tHU0hlVk5ZeWB4dEpnUUQwSmlmNyljV2BGc2xnOWgjSUJUTDZtRWxuTHxpdWs+KF9lZylxcCFUVlp7KSF2Mk9xX21ieStfXlRuR20qISRDbnY5aVUrOyx0OGFyX0Iq'@;
put 'RmNSO0YreHRMZGF9PjhHRkR1MmxkI3tSKDxKTixPUGQsVntmI3VQakwzUDBTL3lhKD1VRTQ6WzxfKllXVFdmeyJFdVI3WGVmSHhkKlUsPT1YITJgZmV3ajRHe1swIlh4LFlLN041PWlGZktCfn5IUU5qTF9FQmZzUGdNeDtRb0NGTUJgSGdsfV9qTD5UPjtgemBgYz1bRTpASEMiKnBubEI2WEl6'@;
put 'aEcwP0VuTkVFUUkyKTl2NC97Qj9xY2ArOl5iXlFXJFV3dUtaUD9kRXk6enZLYC9rMX13bThMQTdFMFBLbG0hOSwqdlEiR04jfXgoJSYvdyMhM3I7IVNZSj07LkJtNXVPIj1qK0NlZ29SXyV5aCw8eSIxa2c3MF5aTnJbYTVeVUtlZCokQU1SPCJuc1dOaV1rb35WNlhxPjhWMWozZndzd3JTKHQk'@;
put 'ejopdSpxa1VxaTcmXiY/OHJ3YSpCL1hqJUdyWXJ1PnNPbCpTb3FjREEqUiRVVU9TanlaVCE8QiZgYFElKE1AQGFwaz48X1J9TXMjbjxQNFFZT0JwRk5ZNFN5M2JpPWpMaG5APF4pYUMmTV0qWnt9Wzw/YGhMXzcxNlEwKUVkU2pvIS98ezQuS2wzJk5FeWZeKXliZC5wKFQ3WUVYKXw+NHVvfH4s'@;
put 'KUxLRUl6L15YbkpbPmA1fTw3RyYxbk1iRDFvU2h6VHclVEMjcV1hQDp4ODhoKFM9W180SyhnZy87YnB8X3M8QyQmeXt+R2ZjUC4oR25PI1ZraSkpbl8yOypeJVkmTSNsaGkzSXFpLlNHe3BSe2BuQ3o0NWQ/LCRVfnltSDZsJkw0JSR2KndgViJuUSZLTjBgPldAfkxCaGY1OHc7a3dXcFBUeXdT'@;
put 'LkQoeHQ8cTJgZUwyMCI9fE5PciJHfE9Rb2tWUCV6TjVxVV9eMndyWmZlOlMleTxeXXVNRnN1Y29TWGhQRnhLcDteczBmNFhwTVVgVCU2KU49VnVLYCkjQzViWlNkNmRwQmJbY2VVSUdPQ1B+PSMjaXc9S3pBWVd0fGExY0BtUiE8flcjblo8VVRkP3M4eD5QWTxPUH5+X1d2bVtGZ00vI0wqI15v'@;
put 'SlglMjxGdUAxUF9SYHwwK18yWHp7MDhwIShCTz5YclNVJDovY3pudXAsJiRfSyUhTTJXQiQpTHJ+azxmRmM8SXRaP09WeGwzSCMjL2xwOyhpYnY3YldQLl8zdjZ3NnBnYk9FdyVoRDlwOFUoNlNwNDl2IW93SUMuJE4zZVtuY1QsWXhle046eG54bUVXXjAsSUtPcyl5M3U4cy5vbVVVOUEsfHhA'@;
put 'MG4kaiJhbypDLDldRV48VmNQMjdBYXo2fiQ7SVhubXI/eFNsZEpKP2E4ZyRPZ2NMMUoxd0AyT2VxZ1JbTypYI0E4YSwhbU9sQn51T2pmfGc7e211PmN4ZXVpMUddOEY7I1UqTlVjY2RSMDhhSk9kbjAkP3E6KCFNRms4Wn0va007dj9fKSspXTxSelolXztkfWp1JEJXPUlSVUI0XTdYL0A7I3U0'@;
put 'RDQ3LzpvTEV9enA1cyFGXSRQa2MkLz5FbSJNayYhNyNBRVR0NmNHIT0rZmdsdWFpbyQhbkZRQUApfnhpUFN1b1g4JDtiTWpkazJQcCVeI208Tzg6WjYpdSkpdU9QYGIlRz1FMipWN0ZHJil2JHtaSHo8RTdHL0tLTSteRTBBLlJvPi8mbmRBNE5sKWx4clZ8LDk2OFk+RjtTTW1ofmo6aWk9OUwo'@;
put 'NXZAOFlmTTwjNEt0b3RFWXl3elEkNG5JRXhbd1YvW2ljI1RSRkVaWClwXzYpI2tiUlNPSyx3PV80ay4mbkpRYVJeYVBSQiVHVn5bITJSSntQYDg7R0FkOjp+Z1dYMThqJD9ROXpiJE5+UHx8cVp+JXRbeD9ZRDwmZy83Vy86fXtUIjNFaXNrMjNoRCZfXmBHVE0uNX1re0Y3dSsqMDtTOWcjbk5X'@;
put 'b0xZfmokRmdVNjB1fEkjb292Xyw5d0RYUEkydDh+Q2ZwI1dPKnchdjImKUouZF1MTE1AfjRpKGF9dVJBWmZEYDpPTnpybjgkOn5COT4xKStqXnhmSjlLMnhNW2NmSHcvIlU1PUdHNVlOd11KWl5vMiU4KkRtfWFbU2UyOEFEdTV4PXRDREZxY1B4NzA9UjpFVXphaCJRTj80VXdpVzJVanFHJUA4'@;
put 'aGdvNEx3XXhvUTFCVm1iM08rZlZRV3o3dGNVSjMwey9EYyU3KDBZbm1TZzBNP0soRDsvZzwwUjBdIShZeE54NmZRdzIuNDcuOn1MeiQyWzEya1U6cnhlZDZuMWU0Jn09RFQ7YUs3cks1MHcsTl5uZlt9YGA6e0NTd1oyZXEyemFYLiZlfHAyM24jZyNMcyVUNSgsR3czd1I5PVBuOzpAe09kNWo8'@;
put 'WE83RkxbSkV2PWZXcGJGL0dOL0xXSyssSVY0TFYpZElKPmV0JSZGOm5WcVBDdFZoKWAleSN6eEp+TWMzVyl2dXZ0PHphL25FJixEe35bb3t7SFhFZCtTSVBNO3YiRz5kLGUybCJ8Q3hhKilrayJpSlIuQmsoI2VCM3ZzP3RURWtaJUxiOWx1bC9wWUMvTGlpV29DRFt9bCtxWGtOYWkqQnk7elc/'@;
put 'UUo+STpYPCNyQF48LlVTRVVjSzFWMmVHMyYvdzt8eXYzXnZ3b11VfWlkfWg5S2krVyxoVURZMUdQcE4lR2orKm89PUVxcV01Zmt7SlpxPW5QJllyQyZARVVwMHEpfHZmMT9LUz4+KTJfOElNJVZ4KFlTcGprZUg9azlvakdmIzJ8ciNFTG4xQ2NtOHpBfkxLW3VpTEguZ2lLc1c0MjBqbW5pcjt0'@;
put 'Yk5gLEAoYjM7TGVlOnIsJEx4MVVJY2JDOyM+OGpKXjJSTX5ySCFrNyhHKV9nQj1NYyh4cnhsSS5sMTgwKC5bSE9iJGh5cU1XYEBTcU9xRFZ+a1J6cXh1bXVNV2hPPC5fLyVsZFVgMUdePV15YFJnd3hMLjhZRkxfbjZOUWI+Ulk1KCZ7VWRmRHglPWlwYyMuJWFHL3wsMzEsQE4/a11HdzhFdTxe'@;
put 'VHZUW2pKelZQO0BvdUNnN2NvZDNeNk81Uy5YU0BqKnx6WE40VkspJVVdO0w8M2hSTTttfkR9PnNkdj12Znt8LzNyU1Y3d1ljY1AyNHIyWHJTTGZLPSh4REIvSnJxcUEuOTdiW0hOPkQsS2BuRSU/NG9bUCJdRTorN1tNSXNAQ1NHdVlaaUdpVGdVYmRiZkNVWDhGMj9oKitGalpEXyVGdzpbZVUl'@;
put 'VSk5OUFUX0dINXV+emtYbi42UiV9YShPMjZgXk5GVEF3SmRMV1F2TDBTIjZ4b0llN2RZRVdvOWY/O0sjdTg+dyMoYWIlcCsqVDskWlZjKENtazQwRGtxK3J1aCU2VihLTGBmZF9wXV16fkNzb103RXpeO0tESCU2eUgrRlZ6Wyh9IXd1M0woQks4ZH4zUTArK3BFYVQvfVREaFA5Mmw3Mzpsc3VF'@;
put 'NnZ8PHsxXWNvNG5QPTIsV3Rrb3UoWFVFT3FKLlFBPlBIK1oleVB4Q0BzR1YmJUQvZXBQfClMWiNPMGRMIiYqZ3tPIVBpJnFUNFpLPXBkKDVWclNqMGFjaVBpcyRCP2hwNXVFW0ZYam1rOnlfKCwiOG1gey5tT1teMWpSPWhUeCNTbSsvanN7PnRPRiMrdE9oS25IbCV6TllZfWt3aTtYPVFrZGh4'@;
put 'bkNXTXtpZnFYOW1OcGhdO1FxJWYyUUVMOWRHdnl5UV5IW29DJjY8WHNSaCguI1Z5S2Nwb0xGR2IpQXdFaC9pVjp8QmZzIUlDZFthT2ppKjRyKVVrelc1JjA0MW5QTTRTXjtMKlpMfCklaypLL201cDtZW2BIMl1UeCYmQFAvYCQvQE5MOiJKODZ1bjR6cV1SdyUsNChUNTN2P1Z+TUc5aE8rbEU7'@;
put 'dkMxelZyJDNAIU04X0loPzdHTVRSQSRfImNMIktqOiJvO0V6bndANCldSHV3O2xEfSEuSDBsd2Jpal1oVD0iM19rMEpqWmg+a2p6UU1CVl4qdj1RJXQzdXRHeGYuWy5ldT1FIWdqPT1CTGomaDxBViRmcitjdiJFaWlkJFk1b3olISZuTHYqUlgmNHRGR0heWHxjQUQ7RyRyRyk/cjl3aC81dkcs'@;
put 'fTpZQGJMVFZ9WHxMKndSTjxvYWNDc05lPXJme3tSd3gwPFRLLn1yZlt5ZFo3bkxvK3VvLmE3djwkM1ZHMWEyOFY4bDNncVY5VzRATTxANjcleCMweko9XilIOj5ZfTAyNlNbYEw0eDxnXyF4WmpgcSshOCNHOl5Ga2FUOHFDQU4jJntTRlVxTGtQVGo7VGNAdENGZm1rJEJPQ0BGIXg1V1lxMXA0'@;
put 'KC5BPGtSfUA1RD5oUFM0b2ZXY0NHZjdDTzIwemp3WWZpSkRFMkF+UCZYRl85SFIhJDJWdjdnVGpVPzR1ZysmNGRnYXNxKzN7OnlsbnhvTEhyK25pKT9iOSE5TSZ7Rj9xVCVdR0wsNF5yZyslS184T0s/U043fW44SUJKPF1wL21mbT1EUzEuO2hoNlMqWDRqfEJKRSo5NXB3K2hAU3BqJXtPK20s'@;
put 'fEYpfVI1WGM4e1hwPzg+czxXMltKVEQiajImKkYxT3QoZT91NlZkYTVFZzt4TTlmSCM3N2l0RywuTS5hXVByS2xsdGZKMEc1MGtALDM2djI+L11PMUdqcVZhKG9qfHA0WyV2YVJMO2hkPWI5bC9FUm5WJl5ofExPNFBvNkwwcSgyMytZQkNtXVlkKHZYZyooPWRpWXM7T11wIWhaP3tGZ0UrTiVE'@;
put 'dExuKk18cCNAKHgldlVHKHpzTl8jelBoOnJxWWE5W2xBV1k0P3F1WzlRPiRvejhealohT2l1cUNsQC5bckw+WSteNGxWTmtLTnljPWBvdUkrfj9HOm1aRElmfUhuWHNdM1VYWmlHfilOPk9FJHxUPGMuS151SUFFIXJ4Mkg3JW1WQTxbdilEU0tdcjxzYm9bUElSPikvW0F4XiZKYFFvZmRkM1ZD'@;
put 'TXVvViFPRUdIKUB1PShuJUlibnVvJToqKGs2WDNncWhKbGI5MExCOU4yS0IwejN9bzB8L1p3Ymo8Z3ljO19WKTR0QVNWRGUpdW8yN2oxXjl6b097IUVZXjJvM3krcU5+V2lRK35FLH5qRENEen4xKyguYy88a2RFb3YmQigze1RjeXRnKE94JV5RL2s0ZWovQGh5dmJMOTB+aSYldUBgI3dNMW4/'@;
put 'a0JEKCVBIz5Ae0ZoZ1chOTwmUS5OU0E7YzlXN3cobkFnNj9+WkkqeUFffDVVbUdRVjUkdDRgaFo9SnQ5OW5FJG4pR08mTip9NWEqUGV8dDc9cVVFLl9bUH4+PmhdUTR8WWtNO0NsJCREfm4pOHFgZSlSYGxFeUdLWGh0dToyQD5DXXpNWD8sL0xEflp3fTVgSnAxXkVJOWBqNDNRYik5aWMhc0Q8'@;
put 'YTFXWDxWJUpQbGk8JF1yLFolek5uNXo/QHZVP1NCL21jantpdm8+cllWNTZBQGtEUl8hZk1LbUA/O3Jqdk46KzVUeWkqMmcyJVFJSk4/WGBoclM3aFtZanBkMTwucE5mYElbO2pkcjY2RCtQal5qOSpUaFM8PVtZYDhKUn57ez9zP29DfE9DdCE1K1k/QFZYRXFbSWxoN0Mrcn03UUoxKm88XVlO'@;
put 'SF9wckVdLiFGT2l+emRZfVViJFNJZU45MV51blkifS9XJFluKWUrSnBANTopQC8mS3NiImt2Pkw1eXRlVUpgUkoyRTpPWGxBP117QihefEtqaDl4OD80UjElYjZ9W25UOGNjfExBY0ZUN3dMdlFiQXVadmNOZWhec3w9V3RQOitLNy5pZWFwd3YsR2VdRjdpPmkqVnYlZEJBXSRycW9HWCQ9USUo'@;
put 'Nl49XktNUml5MkhJNnJnO056T2pdTlZscz08fSZzejJhRV9Be1tuXTt5OmoxUVFFM0g6TlI9czRobjNxekdXPC89YXJHdmhQLElUVFs3IVFzV1pOQSteNWU+MnttN29Db1VJUkZqXWlmejZvSHJaVDFhUHU3K3UsNVE+JmclcU5lN3c8TiZudWI0MnxERU5DTVM9NFU/Vz09alpCbDAxd3NxLjUq'@;
put 'fWp6SUFCUihSJD9gYXVaIXlZMkNvTkZjdXkjdHFXZnxSMypNI0NRSyl6TGVoM1A+WF9wbiUkfmpOTTVzZkNlKmBfUT9yTSM8S1R5P3w4NmFDYHVlUioxVDM1RmRReD8xP3peSVZSPy9zfVE+SGx+LnhYaSZbX1QhJFhFJkRJVHRmO2I+QHM9aktEJHAhYWRVL1UhUSk3YSpZNGdWfjpNLypST0Mu'@;
put 'TSgkXlVsbD1tQnQrMShVdFNDTzglUTZySW5xUWV6V0psbGl7KjRvYENFW0kiU3Y4X0t1OUZLZ2ppJW08cjQxQ0NgUV9CbnpzXT49OHBFXVE6WCpwWlJFK2FDYnkqNz5CUiEwO1doZV9ya3xKMUltczIiZU5CNVsrOUpeKkdsL0R2XWhEe0N2ZyQxeWJgP3hXej1gNW9ofU11UTB4NTQwP0phN0V7'@;
put 'TUA2OGAyNmlXVTh9RVJ1RWh6SCwzJHQ7a3EkfXk/QFJbI2dNK2RDKWIzL1ZbWX1sXWJLcEJ4K2UlRFtBPio0YEppT0t1fkNmYTQ0OV5QXSkqejVweTs7PypaWjpgTylSX157UixnS2lHXUJnR1N1LFJlSWgzLHVEYkF2ZlRXQUZ1TSF5X0kyNEBlNThEaixQS2NkfHc7fmJdPG84M0d6P2pqNzh5'@;
put 'TDVmLiliYUN4I2BSbGc7aEg0JSRuZEhEIixSLm88R11GJmBwQldXTT8ke0lydVt7W0V6aUpscSxMOyhtW3ZzdFczMnYwcShtNk9UNEAzY2kqeVosSHNvJWlJMH5uKCRTfCpWM1VVb04kS3lHZHZ1dXIvOj47TToodyVxOGk8UWxPb19EcFIhbHBSRSMldyMpZndmR3M6QGFQaCNKT1NYYU9hd2xD'@;
put 'RlpjVU5nM2JEfFYpJW9zLDxvcWhSX25yXk1OcCw5IjVvLzlTfEZDVGA1WmtZUzR3dH5CfkdjazlFNHB5XkVofnV3KDk7ZX40XnFTSFR6Mjd3I3JHY2xMXS4hMWosYz99dEdCYXkzaWF8VWFEYXQ0Sl1ybjg8Z2xIL2w6bC9kY295eyhCeFVMXlBeXW80Yjs7T141PFE0WFM4OTgmIipmODE5Uys7'@;
put 'MDFkNHpqM0dlZnVmR1BET3FAY3ZFMWZhYFRWYXNqNlREX0U9c3JaJGN+WVMvWF5wZz5AblczMUs1JllIZDdsV1d0cWN3b0YuPWlGfF9POytCI0hZaUA6Vnp4QyZoRHBoUzc8cnxFRVZdTFspQ0I/UztJTzZjby4kfnRtKjdVbV1fbSxYR1IsXj0/Z0BlekhnaFBMTVErXyZtP0hnfTJWQDxOOVpD'@;
put 'Ik5MbjlpTn53V0hAUS80W0xsT3ZlWX1TbjlrL1o1RVJQJlVaKHh1QVZjKXc5bUM2OG1Pc2BybDQ9IyRsLzB5LDNSYUwsMmRDdzsjKkUlbHJeNiJDcnFlVGBQeCxfOihyJGZ7c0VvSVUsRlkhPTYwazUhayVUK2lraixCZWk7YjxJb3NDU1BjZV8hV1hGYy44Q2d0ZGZOQjxtckJLcWo8bnh0MWhq'@;
put 'QHU6fDA+diM0UFJVNjhJO3BHaUpsLHp0b3xJQm88KGdAcW1sMWZPOitzI2d4JlVMYXpxfVQ5Zyl9KD9eOjxbT2FzYjF5dGhAc2A4PG1jfSlWdnBjSnZMN0JJTSpMQXw5IXFMeE1DO05tcVtRcEZ5PVZCP1dOUFdRQD5jVCJ+Sj5sQWBYZDR5WXcySW9mbSJVV0NWOT5MSitaSnFOIl1heT0lX31N'@;
put 'Z31ye0RaRF8zPWt2Wl0jMVUpKUFPKHYldUUvWFNxYzVhLyY8LFYlX2hJfjteZUM3Y2RkeWFyVywhcC5tVzE8M0k7QCF3VGZ9cUtpKi97fU8vdDF7YFNzWlg3NkxHVmpwcFBqPElPY0V9b1lqIzo9MTJ7RWJ8NlVKT2JTUDZgekp8M0NIN35ge09RR10kVypnT0AxIUxVUWpLeGJTTXZzeVJ5PExt'@;
put 'bWsuVlhOLjVZL3NkekM/Y29KUE1RKE1jP3lCRG9WUH5eLn55TGoyZzl4d1M2YDFvOnl9Z0xLKy5YMTsvbCNLWCJ3flA5dTdKVERpfWBlfnlVJHldPkddLE0uNlZsSWxjXlA/K3NzUytaQj5NbSJ5SEd4cWYuL1A3b1N7TVBmRyU9aT0sSTdwYk8yOlQ7KnssVHpTeT9ZcCZfPlF8TFN2MSVjTjB9'@;
put 'RW10WTtKWjB0NUNHTypsZWAodT16KVU8cGhVcHt8cy88fWsiTyhEaV15UV80V3BSWkR5amtUU3YpcnwibkVTfHtra25ZaE86JHxoVDNDaXNffEEken1wVk56b1o9Pi5UcCQuTDRtY0tadzZGXSRYfUg6R0ImJUQ8Z0x5RStKZnUpR1t2RX54eF98bTdnIzF6eD5KYz01NXhlQys2VSxmQnlGS2xi'@;
put 'dStHRSE0LFUoQjk3Plp7LCJjL0JLT1o/LldBVV51dHtSPT1SNm50bDkiUi4iR2psPFZmXnN9dFFDMy51UCZzJFQsYVovazFzY1EmJm1lRzJfcG55ay5WSHFGYi80eGMjZTZfbV1XeTZaLl87LDd5aTt7MWJiWXlhfVBRelAlNCsjcllEQH1yZnMmbmR7WnprYWo5SFV7RmZYaDRtfVthRDJIYlty'@;
put 'T3NEL11AOUhqWmozR3dlWCZrWkxdWllhUHw6bi5sQWR6XitqaT9HP2Q0Z1o0KE93eyFdUmN9JjtkK08/SkoxZyZ6Z00zXWcyNkNEZUtkQWQ5P0g4aEwrOCtWKWpdSGoqP252QE1kbVNCI0tmOHJULyRVd1ZKK203RTE3ejRvcGdyWnU/eVRYWWVYPDQ3dSpCbnt0UUBVQCY7L2NmU0I6K0tVaCVF'@;
put 'Sjc6bXp1eWBVV0w6VC82THwpdSE7Kn1oY1hpfm5tJTg7LC42JmgiOWlpSFVLWDskPk4mRERrfWJiJm9AS1UwL3hhUjghc2lOOyo3bU5Je3QuZj5wJVV9I3Vpcms2TUdERXRSPDVfPlsqRStUX1soOyZlQiloZkBfPC4lOVoxSldpSmVfIz9ebl1eMGI1bSkzaXNAXSRDRjdTWzQqOj5vL345RTpd'@;
put 'dixDamBrRXo6SmVrOT5PflFVTT1fOmlFPDlULzZgNzNGI3xucGx0cD1lVWc8TTVgdjcvOjVoSEVDTE9JKCh0Wkd3aj81S2VjdCo/TXsmc2BdQHtiXjo3emduVGJLZSwkLypLKzQ7TUQjdj1Vcl9lXmNqN1tvam9wUHpANGAuVF5AS19UVm0qKCtbfHkzaCNSTERFUyUkK01TUVFvbUdpM3puJGNs'@;
put 'IUJ1X2xsS0d5ZHNqWEVaRjxmMnIzZi5+TD5RMjYyYFhJamFIR1JCUmZQK3lCSWZRUXVNV2A1V1hkWUYoZnN1QEcqVyF7ZlheXmdXX2t7TjJKSG9pcVA8MERNRyxjc002SGhZMkEla0dYRl1iVkRaanhQXU41XWBHPTZXZWZ3djR4ayhCSjlCdkdNI28rTHhNSnNmaypeXXJXWE1bI2cjcmEjaExZ'@;
put 'VUBgPE5MM2U4TWxzR0dhQTNBRllpQCRFJCQzfH5JZGNgQm1ydUVqNlF3bCpPQ3ZvN245MmY6ZExyczw3Pls2bF1rPGNISGlEeCM9U2V7Py45WD0kKEt1YFJIUWJebCx1IVR3PTYsQjMqdXM1JGV5ZXtydUEkZVAhXTdpVU4/XjZeU3RebSttJDNqVEdZQyJZdFg5JE9vX2ZVeHhBXShOYHJoYml0'@;
put 'eyNOK2BaZHFXUEJTPWx+Ylo4PnBbc0FdNWpFXiokTnBjbyU4I0t5IjVVbC89NjpAYChCdDNUallaY1Z6aVteTkAvPlRhLDRMcTVDNHlfVy5oVUAzY3ZFYXVuSDowT34/cSk9TWYqJiZ5WXBONihjNl8/TTVedUF+ZFQ7REorezJfSX42Vi9GIXFLNVteVz9ZI1dEeDZHSSg+Sjp6RmE+Qj1EekZh'@;
put 'a0czYFhbPV0/aTNdQFZ4eGpDfDFCKFo7YGdiKz8hIy5ELndpOUY9JEA8bl90fUs9bTI4R2g5eVZxaWpsMShUR0NTdUczfVNXYSY0aD9iJFs0OF9KR01be0U0UGNZVyVZWUdIdTgoP3IqY0MmNjxjOlJNPkhjbz1sY0VFRWhCfGQkZit5aylHPXIpQDhhWEZDYiowLG0lQjBtc2p6N2B9XyluRSN8'@;
put 'XmR5Q3YyP24seXdzRFlKI1opKStlIT9jXip5JVpPWFNAVUBFQFJ2Q1Ascjl6NlVjI2tXJEVKaUF8Zmt1blI8ZCNNOk5wdSZ1Z25CZGE5cT4kS2kjIXt6RV1tSmE6XWosRkAhPFV4VGBWUj5kIT5yRj9wLHB8KX5xOUsvUSZYITd2ZGc5VXtAbVtIUF4uVGZdVi9fXW4jY0xoKD5GS3lIcns1JGVW'@;
put 'V0VjfU12d2hjKDNVaXhXUGRRdU1JUDM8XlMvSXI4VDFEcEBXUmM+QS82TUwiMH5mYzBXWHJ7T199S2xYQW5Sa2AmZztGRFdefXk2RWl7KExzYVUqb1JMTmN1SjZLQGV9Tkd0U0Q9dmA1NUpqNkBzc19kJnwrdXhFVVQ2XmtfKSVePDpUTHR8K2YmZj9hclJ1PnI0cSUkN3FxQU86bikmeUQ9RWBh'@;
put 'TFVFaVI/KldDNyZPMC5RYCpKMiZwRzJ1VjJwdEg8R0tbcTkkOSxWITJPWVg6Ukdkd2kyUXBxfk86T1lvYlFZKUx6cy9AViZ2WHxyXiJXMH4/OlovZV1pNkc9XXdoajImUX0hTEdNS25ISGRHSm1jLzN6MVlkbSlbSGtGITxZaFlVNHtueEhBOCxhbVIoL3lWbS9bLHI9KHd4RGJHJWptN0t9Wmh4'@;
put 'VGtsantHb0RbfXhOPlJjbkhAez5FW2lGYGVvTnB5XSsja0UqeCEmOGg4Il07TF8oV31uOGNuIkxKIX4hJTpKSTtfRjl7WGxSWj85T1BnMS5WLzhSNyVdXXttJUMvOjkifUU1KzE0a3koYTlvQmEseCN7XiRwT1l9PSZDOCZYRDNbYWNndkYjSk9kcVtvOS9xTUpxTXtPW2BoVFtfU2I3OS5YKmQ9'@;
put 'NyRIMXwkNUE3d0RXOW9KMn0mIkF+ISZUKEc2IX41NUVfRE1kTEZVVUZLPypGRSwhRFlUODBOIXA4Z0tbeVpBMzZJLFcxV0oiLltIaTxgY2VnZlErUEZVYGo4dWJRaHpMNEkpSHw+OF5qc0V9aWBaKyY6ZDh9YVY8fnddaWtqPmgsbFtNMkpfVHU6ezp8a3t3OlUxc0RZNGtiMXI1RnMuYkJuIldT'@;
put 'bng6SD1ISGZTNyopNW0mUFMyKC9fRTZdL0FpMWcwbnUsS2xoXUMpcFAyTmtIUWRtNHk0blQ1PDBvPWtmNyklVm8yOmFkPk1jTHVDP3hbfmdIK3EzeihVLDVRdyVWY3tgWG5TeF9KNFMvPG06aj8mRWB6bzdfWUVZQTVWTW82YkxQIzo3aSZpfH5GOFVkTk5gMmp2MyRbSXArOV5AVFZnKU9aYGcj'@;
put 'P3IwY2tnTmd7fThGPjhucyxMVylYOXQ9dD5JZ0g0TUNCTX5gXnZpQlQxMk1JaVd+UGRQVVhUU0tgZXQvL2glZ01LSS42dE5DOz9UZVtNNiJRcnNjYioidVpuYiFDWk5TMTo0YmNleFlJL1NEcGA5RlVZN0VnQHt2TVBdSmJsMStPYH0/YXU2PCp+cUtZQEJ8MiEmcyhqSE59fVVKfn1QdSI4YCt9'@;
put 'Zj09MFBxZixCeGhhTGByfkZSSz4oaCVna2UpMlpfXURkOHN9bkh4QkBBfSFaTFc4cyhRZ0ZnZFsyPjdkemx9OUxeSl5hbjFmMzUpeWZkcFFUW3hsVU1SQDckP0VZazw1KWdSXXZHUGUlYj8xWS5AIURMUmg9aVlTKHhBLjUmbihyLFpmdEpjIkl7Rm5BcTRhd3t+SG8+dWk/Y0F3YFNPaUlebkl0'@;
put 'cDs8Kj0wNixbdVk/WCFocV9BUyNoZGI/NDdTZypvdDVrQjV7M10yZHEmSHpmPlNsUClIUmRnSHZyZylgXztQUXB1WzZ1YmZQMnl+KGQrP2RhSWhjYlZkNT5hTG8+a0NjPjEwTjo7SkR0Oj0hUDdDRCphfVomfWxeU1NPXltAQVk5aXZrKiFldzJ0UkhCVG9IWl8sLlNMdi5ocFBVUTFOWi8rczpd'@;
put 'Vm9IXS9PUGM2VT5jNDQ1OzVYaHh0XmhKckJ6ZHteXy9JV2lpeHBpNSMpOiIuPHNpRmMiW1ZMcSFzYXB7Q1tfR3VFSU4jOyZ4cS5+OktmJEZtPV1qLyE9dytAYmxGWzlqaH05Y1JlRU1JeDxIOHhfLGI7TiZEKj5dOzREJElFW1loQS8leWo1NzJJcEMvbnIldnxxJlMoWns1SntMS08lSzU2PHx9'@;
put 'QkkjSmBnL2FxVl10LEQoKiMvalVWVGw6NVNvT084aSIwUlRyNTxybldJLG1DQiwqcjEvOChzezY7LHA6SjAyUH00WTAzPXVmfXc8akFiL2ltdER0b3Qxajk3L3ddP0JPRE5EJXNvVWllZXFIQ1N1JlhAdjJnUVEvdF5hMHIhWVpGPy5CRnR0Z3FmdmB+MDdHc34iR2VSUlFwKDlHV2JDO0M0ZSxr'@;
put 'M01WZiVCY3YwS1g2SzRXMTUsZjMpP1lHM28rdFJmPEh2LkhSaF54cHo4Y1NePEU4Jnc3VDwkN3tZNyxQQz8zZ3xhJncrU29aREBXaTpEXkAofWo6OnkvREpqeFppJWghOSt6JnQ4V2lrW3xlcT9uLkY9PkwsfmI2dXBBeDlFcUc/I3guTEhbSTZ9dGRhLklEfEt5QjtXSVYxXSRUbCIjTVV6JEpP'@;
put 'NTMiVTk5XnpiM0RKbEBCfT1DIXw9TyYhKmNNUCZjOSZGcUtzfEcmRUVbQ0ZvZUkvZDY2Lk9raz9tS14lfjdkYHlbdVMyT0pNI3dARjlzO2pQLHA/YCU7W21gLGsvZmRsKTxxKT5uam9MSkVKejNCLjJ0eUpTO0tAMk9ORnNpMH0kfTk+b0FPWGJUN24pbXtEM1Ijd2okdGM4MldAbFdoYlF8dnVx'@;
put 'K3VrPnY2ZyMrOTgsclpMOTBLdG8rKUZ0PUM6KVkjWGNJWFRQak43PVtPOFhMZiVROCpjajlMZEM5UV0xSyx0KyJXOlpbSSJgdEowQzgrU15NPz15Q2RzWXNgIkk7Y0p1eHohL21KTThDZEJRbyMldkNQTU07SUx1SD13RF5QP1Erb2hxJF8rPEx+KH45Y0dyUilKIWozXjo8OVJxcGYue35mOmFn'@;
put 'TjRCdFldak1wZTRYbUVhTS5zWGhNWElTKz5BVy5HT2xCbGxIU2I5fldjMVB9RX1NWmEpdjZnMVhbW0QqJk9FQUhII2ByTkMpXW5iOGVHPSEiZzw8L2h0OEgsMjtvSlE3STVXdE09WWprUmNoPn4sN1p2JV52KDEjdzBHT15ZUXB8ZFUiWENKelA6NCpjODZzV0k2SmtjJmh0MDEzQmI9ak1FOzNX'@;
put 'IkxsfWxUaz9pYnd6UzZNfV98RX4oSDhsJCV0Qjs2bXxhPUAxVkBFPTJ5dkZQI0IsPiVTP2xVNGVCOHE2U3VPJjpBMX08Uj9VMHptTUQzR2J3XXdDXSszVDpseWQ5bTQmcHZmQDlJbGd6R2IkJVg2XSJCOTBDVElYSkF3cX40ckk3Z0VbaiJWUCxiWzNXQyJeVzMpPGhkPDNueltXcDF+ZWBjdCtu'@;
put 'eCFtclM6aHk2NDhIIyIkNTIwOW9XPjgqaDRQQjg2P057QyJDZGhweVhJXT0xUGp0RzlhQyQrT2o5SFQzaWdleGpLLzlzZWEqeEsqKUA5XU56NHlHK2c0SXVJJV1BMUVhQE1wK1Auel0yTnYoT2t8RC9tZk0zWiNkfEsmKDJrLmhUPDwsIUk/JHN3VFZROm0ma2Ema2tnckxTcXE0MHtyRV99eyM9'@;
put 'KXlqb3VSaVE/OD1VbCp7LmNjLkJ9IUZ+WH53ODxfKEJfcFtNLytINDZaenhSRDF1Yl1sR15tZVdVJHpaQXwuYG11Xitodm9JVkVQfE8qWl4oP2kkZCooOHVAWXVGbUViWHxsLzZfMkJQXm9uaFpCNXk8e0FJOm5uMTtPJT9KOzAwNHNgPEwmPCgxMU1eU1AvMWllQT8zfV9BZHtOYiJ9O107dDFA'@;
put 'Y2pIeVRnKV1dbHUxI0JEP3d0MzFTLkVgdDtOcTl8W0BIfkwmUyomWTBmWGdLamZCJnowbEUkbXpENEhNSnhMX0BGc3krLyZMU3MlT1QoRFtjPUJRXmEkUkFBNUpjWS51RmJsP2l0MFAsNXQxaCQxPH5uLkgje0JDZUMwSGpMb3tYYzF7fmdeb0tVSzJkbGddMjdmXXg8UDM4PkxjZFFZPzRQaEZn'@;
put 'dEpFX3p9ME5Tbih8a35Wck18RTQvL3RFUSVDQjg+VmR6UXVXMW1AZDZMOVNtYnYpIWg5UUJ3SWssQFArLCR5Q19YeGlLaFZraG4za3NSdTJfSWUqfF5+InokTEFiR21PRF9LOT1PcncoS0J7U25YQFR7ZWBAOzB8PT9MQGlNWFZyIXpGMHlJVX5VaEpDJERWKENPYiVBWWo1a2E5LFNzdXRFaSxj'@;
put 'cXUuSmVINEM+MXVxRTdDdilgeTQ3b3g1IlBpWEkzVj5Ba2l0JF86a2dtKmlyUj4jPFN+M2R+dk0rVFpWYV5fJVd+emR5X11sSCpTMXFRT1pSNzRxa0BPLGBDOCJaUUxpMnp7L3dNUTJxbz1peXFzYUNyWG9MTlJIM1gldyF1TjQ2KjhGNFt3MUB5aH14WTRuU3RyY1t4Rj4vRVYhKlg9X1BOZHNL'@;
put 'U045JTdbXzpGWzhMZSRDKXspSHhrPFF6OyJSZkNSMDZvSUN5c3x3am1rY2JZKVI1UilfXTdVUzNNKFZ1SHlaRS9WNjRHVDlkajM3WURYdHxPWWNQe3F8aC55dTAifm0iIjhMJVdhQmZseE8/fnI2NjAuY2BAUU9+aThJT2E1YzooMnJ9dlZUSXdnJiJLQCFkYE06VXVDTHpRRlpAPjM4cT9gcVda'@;
put 'aiFvL3k6Uj5bY1lTNUdeKWpuVSFGTTg2KHokeTsvbm9NNHQjV3xxUCY1VVsxaF1GT31eQV9LP3dRZGRLJSomaWR9TkwkQzdKOE1uUSlaPGJBRi4waEVuPXppfHVeOCNTPzcid0VLJSYmWStMJV5NOm9gXnl0I1lYVFk/bnBzRS9mYkJHO29eYzRrbmpWb0Y+XSUuMjh3WUZAI3c4WjZyZ1pLUGRZ'@;
put 'VUVLYiRROUpbfkAyLkRtRy5jaSJ0WGgiOipNWExLJVVuI3VxO2g8WU5nVixiKHksNmM2JjJHREhMZTFfNChZTH1vWSxFU0JFVVUuLHBldT4hfTYscUwvUDVnQGpgL3pUX3AvNz1OWSpaajpzYVI3IisxTWI2Ijg8RlsuTDZzKFJiTkZEej1iPmJ6OGtfJlR7YTVOQGMrKFVvLzU5JjdBS3hPaXpa'@;
put 'On16KFV7TmNHYCUzYFJqeTR5cVkzJF51X09QMWtIPUBPQSVyPlNAMCZVKy5xM2FmTjo9WyRbblFzXkleJChaU2M5SGUhRGNkImpCIjRRZVRydVRoTHU8TWdYNXNIIyN8NTYlenl6IX02XTVoQ0h9VCNScm8+OUFDeT5VUGNMWTw1aCRmTyUlPCEpeiMyP3RYamcmODRzckNXL2syc2I+V1U7cmI1'@;
put 'WGhfcnhfUnZFIXhTR0UpYDg+JlNxMGlYKytkd2BfWGl3PlcvOz4seGtlVUpHeWQlN0hIJUohRkVrcCh5V3dadm11Ll1zbylYZE84Nk9WWVJMRUtxWiJ6QzJ2fXh0X1tCT2tIMSslVl82Vm1jKm5XdlBRR3Q3aXxqejpNNFA8YjtZWUA2PEkyITVTRDs7MndDND1uXyhTTyNeZn5FJkdtZEhpbzZa'@;
put 'N1p6KWNERkNNVykkO0NlJVIzOmNOOVUyeiQ1OXh8YCV+PjpaQV1ANFk8fEhoTlZ6WC9IfWp2SGJ5XTwzX1JqPF44VGZNdG9YSVg5eEFlbEZkUWMiTE5eMWxMKzg+IlcufVprUHE7XnNARHIlUV8hKzwsPTx3Kj11OW1jQEdxbmtleGYvI1AwTVReOHRgY0xtb3Ypbit+OkJ2Ly56W0BSdjA6S2d0'@;
put 'PyU7aDtzJXpKeCxIUF9CRzw6WXIjRzFlPnJxXmEsW212WWNpTXAoeThSN3J9PVQ/UiRiXTEqank0UCkycVh2LmokTEtlV1hlVFc6X3dKeTNCUVl6OjY/UD0xZjpoTmJGb0osIWhMVTtYcStdNyVVeENCIWFzVk8hOXdjMXRnIzJWJW4xUkBXQjUxP3dWIWd9WSR+R1hQcXJwIzZSLnhQZFhbUFtp'@;
put 'OH45dnBMPj51YnduU0dqK05IW2FRQFc0Jl4jMlNjWXt6fEVWaHlaSGpsJltPZWlia1o1dSplOj99XjZNL217KDpMP2h7YUcyJDlyby9tUT1wOi5rMGtXJTMiMEg2JF85Ki8zdzJnRzxRVCpbKndwRktVYSpjV0EkRlttKjs5PjpAclNVSiU4KD5vZ0BNQSUrRH5zPHNWKXFQS2NfQlRuNkwqaSxf'@;
put 'fD0uI2grK1lMRkRFXlF3I0p4PmNIYERHKCNqMCYvMSVdcD59RkFEVFFUKll+P1J0Ty5Eb2tkNGorJSRWPDF6YjRYKzRpXUJLZW5LJTJTNXM1Ljh2SEg8eGQoZmlKPEliLzdDZjt3Qj8/P1Q9dVcmZixkIXI8UmNMb2VIQXlDVlMvPUdDeUMjUT59UTNuKmJnKGZCMm8wPjhtKDA/JE0rZllZO01M'@;
put 'UmNVLkdvOl5xXVRpWXJDaGxKTkE5WXtPMiVORGlmNkpRKDQhYCp1W3okPSg2VCYxNVB4YkNoI21IdWdzQjVAPjtTOCtNdWcwbkRFPyEoPl8yWzBwTEZ0RmxMbUl6YlB1Ok4mS0chK2UoaDY4K0VeNHBZaGEsR3xvKXgpYjMkNS9DNEx6eCtRNWx+WWdlQyxgLlZbOzs1NHN6aH5oNj8wYlhQPG1x'@;
put 'SDx+Pm4hdEBZTXNFVHg2SnUpIzQsT0dzLDl+RHFKa0BVW2g9KTNMbHk4O0BldkcvNjVlNn1IQ2NDMVdAaHhVfk1+Sz0kMHV5Ymw6V1EvUkpBPCN9ezo/OGRaMj1TUjZ0MFFodnBKaUhJWl1Zekd3U1hfMURLI1ZIT30+LjV5I1lARX0wfGNBN3lfTHlPdC54RFFhT2ZYSDY4WWN5clZmal5bdm5M'@;
put 'XmBCWHI1XmZdYyVgaDdWaUpgY3daNHlRbCpbaixvOF91PUt+fkloJml5ZzU8MDdFKm4yPG5EaDBqKlBTX1d2V3xxXl84O3omcE9ROlF+cyFzJGdCR1J4NStbYCUqYGNwQnArVCJhc0FeTjdablEoQyNMNVZdV0wvd1siI2J0NWA+RzNLQGFpI3VEKz47Nl1eaDxKOFk8Y2swZFBdM3l+Zi93XWBJ'@;
put 'JDU2QFJ7KVp7aXZwTzNPOlEvaD1hQy9uInRxXilQW2hiWyNiPVFvfT10e1tGNzZHRUszV2U4Qk9TWSZJV2AvN2l6TCYkRktzMS43fGZsSjs7UGc+VmRdN2olR3Yoe2llKi5aQ346LEVkSHA/c34wbHBlfl0vJVEiIS8mclZiQFVqfi5TRktXUnssYk0ubU1HVjNAQUU7RiJCVkRESzEoKmJUOSpG'@;
put 'TEFdQ2orJHE+YGs/MXUyLCZOMzxBJVZveW5VOUhvaChaMiZlVEhQU3RFPzFaIXVuI11lRClLLHFhOnNHUXA0cFVWKUllOC90P0hFTi52R28pTz86NjdkVyFZXW9bQlBaOmRJfjpxYm9GOTJEd0hyOi81eVJOOGFmQEczTkI5a19Na1JATEpfNCJaTTYhPzB6VEkxMkF1TXhJNGt9OEk7ZikkKFNF'@;
put 'S2pCMVRGT1plKDd9eFR9QWlSemBAYjdJQyIiQk00QiFiWTNCcEpyOCFSREl8YHY8dihkc31raW1NeXEuWzFpYShRdylxamE1ZkF4QlkpVHJ8V15BRFguM1I2QlsvZ0c7dy5yI19TbjVuQiRabDFkNFtPN1lNMDo8VHMyamEufW1sKDQ/NGMhTj1YY3RjRC4kIVQvL1RFOVMhW2xydDpnenc8a2FX'@;
put 'Wm48MUlvdWR3OndOYDtrOig9YTFHc1JjVFQ1YHhzZn4zbVFVZGl8Z3xQXiopW2A8NzVuYVM7UnhjR2RRPihbdHVqVml0K2RVQWFvZE1TcyRjVC5TPnZBQUtCOXpBQl1rXj5+TTtQTkl5bCovPiVbVkhvbWVBd288OD1IT3Y3U1R6JE17IVZuVGI9fUtXPlA0VzI/aF9tcVlHZypwYjAjfUdaLnhh'@;
put 'PFtoQk5vdztmUF42NXZ9O1RAMzZXZ04idVs1VkA8ViRZZzZvYkJScyQ/Oih7KS5wWmglNEI7XnpFTlsvdyZJLjljO0lKT25CW0dKbk5CKFRHUT18TD1rdEdnUmhLKWFycWFTJmtuTygxJEdjTjJ+VD9edyY8eSkyUVNGZz1KUHMrLlJRe18zVUBmKWNYU31nSlN1QjxZcl5vT14wdk0sfV5RZk48'@;
put 'WFkwJHo6bzhJU0BSISV3dEcsVlRYS3B1IyxIVGI4aXVMdy59a24pcEkkcWxpdF48fXJuNUtlbzVwSnM4aWEwVmh3Nk5ielpIMWxBMGNDTDBjKGNjeCN0YSxzU0x9VlhrdGt9SX59bG9mN0o6Z0c+fTVkJl9kNHA1SVVKKzV6NzpBaVg1SEZIbjB1TD8rQD4xSllUMVdUXjVRND95NUBtZDYzV00u'@;
put 'NFI8RXFpOVFCYHxXUlZ8XTk3SVNbLHlIMF4kVnJmRU54PDY/NDZNPUZNTUhBPmEsY2tdLEUwbVkxQ3p6ZHhjTUd5QGs9I3V2KkBjWDZrLDkzJG4mNmlwJixmem9yeTpCfWFTQF4iNltmeEhud2Z+QyIoQ0FSQT9aaWR3fUl9fEgjNCh2V0IwRGY5PUA5ek03bjJhJkB1WjQuRzkmZ1hMZ0VjeWw9'@;
put 'P1YmPCVFeDFKfX1ocG8hVFM3X2YqaCpwVk18XlZMbHZnN0duejBOe2U6RSNiYFZyW3lmdiU+Qnl0WEVIQUw1VGghUTBFQjV4enBMQno6NV8lNk8rRG8oV0NMZ2JrVmB8fkF1S2EsMnhsTjhgPkF0RSROUWVQTHBnIy91JCViNF9MWkhPclQrOkJfb3hSTDtYTnxSMHlII2BxZjB2VGokZWF5anNC'@;
put 'YEY6aXRzWmJiOVpqZkg0aUpwKXdkaDhKeWVKaDhEWio0bitXfGFHSzpSPCtKOkJCdDdtLlM6aj92RjI4MEEidTUlZ2chNGZ+bXF8azcpN2pQaWR0Q1ZNQiRfIkw0MUJDIz0xYGN7OVdpezgoOE1eI3FgYFI+VGsrSGVwIiQ4KFB6W3YmOzAyX2JLbVF6enc2XTMkJSRxcTt0dF5qNDN7anR1eDJT'@;
put 'eWE5TXRnK3kpSyt7eEBSWzptfFQyU1A7LFF1N3YsOTNZOUAvQWVrPXszNSVXYT1FVng+NERlQGFrNDZST1ZFWzg7bUA2YnswUVY1M2hhdkFjNkVTOVAmTzF0Y1AqeGs8SH5SX2JERTQkUWNTQE5MKEMmYXpKK3ZGTVMsR1l7dlZFS21aLGdlTWAvNUFIKC5DXkJMVS4+KENNZGhEST42Nk9HXVtH'@;
put 'QndrO1c/ZW94Z29WVlMpXl45byt+TEheXktFKjBuTzB9UGxgVEdHfXNbNFJGMTM1OklAeSFRYmMmbUBNeEFPeEA2KSYka3M6Xzx0bG1ePnpJMUJaZWhsZmV9MFVCdUQrbDdramsieShadVM6N1pldnBHT3M8KTo8ZH5SKTA3anVwWjptciUiLG81N1coJlAsUCkoM0ooezBdUFNFfHpMOXlKNF4l'@;
put 'QjVSUmN8KF5ue25CKit8aGY6UEoxKXBzOF9GWTI2I35jLEkwLmlmei9dPWlqcTspPlZbaGx8O0NYPD17XUVdT3k9b3VZbF01SUYhTUlXWUg+bWw9dTlyNDh3Mi5dUzhqUTUsOWdncnROP1pXXjo2Xz15Z29XOSI1bkZOeytQU11qa1hlMyhOcUBOX3g7TVVvaVBsaEtRXytsZ2UwU1Z9OnV3bTsh'@;
put 'KEs/cDlWIX06c25xKTFPWkQsK2wjbU8vaDJbNSk7bH1xMEYzT246MDopVERQSTpMITdURXhBNHdyZ3YoPC86fHk+e3BGTk5DL05fWEk8W1dKci9NeDluW3tXRXBiSl9yWz1AKjVIYHw6MDZPNWZaaDRaM0N7aE9EZDZScn02N2VDJDg9N04jbHRBVDtLK3x1XkpJT3g9TXlXQnhfXSwrczdaIS99'@;
put 'UzJOdiZPez5qb31jI0JjZGpYZHE1YUw/bTU8SGw6Tip5VUtNY1YjbkFReTo1IzkvJndzYShGfHI4YEs+V3F7ZWhkLz9De25zOzA9MnZyL0I+aH4rPWNpMVpQczM1JXJvIjgyPncqRF1bVXRUV2pFWmMjRVMjLERaaXwkYyhVKS92REs3fGs/dD18XStuOFkqek1DY3daKWRbPlBUWjw/VD18ZHtG'@;
put 'aVMkdnRkVWZyd0BqQ2dtMU5nczIocV57NUVveil0IiFeZGdoJWFhezs8ZnhoZ31pa3A1YD0+KENPR0NDUHBteTU9KzNodSI+czphJEZud1lOXmJvQk1CaE9Wem57JHBdUTtML3REVDZ1QnciLl1keFMici42SGBObnZeVnNIQ2A/MWVSbDx9MytxZmRdXiNfIyVGa19VXihsIVFWeFtTfipQXng5'@;
put 'VElyQT5pPkB7aFtfbklmV3g5cWh7UXgsOVZUOyYjRTZRenhzbDFvc3AjaiJocy54KkBnbGQkSWg4Uk44OCh+M05aalRNKjxUd3kxKShMPWhxY04rempDL2A+byhNUzZSK247cUJXUzQzJExsRDZkNFVUJXRoUzA7L1JERDwkOiZmIVorUEYqNmgjZTU+I2pCOzdDZENEbWpURkgyQzNQWkFtZ0wj'@;
put 'blZxVWk/YFNsaHF6V2N3X1F1PjlrPW9rK3NYYzN5S0s1aExFSi49ZS81SlMjJGI4bkVJKDxVWnJWSzcuSXF5VCtpNzh7PklrfEo2T35KbSt0cWFIV3ttPU5qLzhbZzRxWWJHfkpkQFZWbiR1X0p5LFtXVUE6Vihkfn07KVcoKU1END1OKWFjN3x4M2hySXlfOjVgZ0orPm4zMSQidl0uKDVnV3t6'@;
put 'KSQyT0cwdzFMa0JgL2ZOdDRST2pqZGAjOTVmdnpfYFN8X3khfmB3dmJ+NX0qTDY/bCQ3QlFHJDNJNi83fEdiQzkrNihzNlBmfHhuJjMmb29yaiEvaWJ4Pyw+UD8qd3tFU0hoNH44djZxZkNnQE0/MkVybSFmW1YsUkVHeF8sdVdEcFhuaEpbWkh6V0tJOzt2eTYsTS5INmNdcE9wOWN+TT5FWVU4'@;
put 'RkomQHUkL216ISE9Z1Y1RE8qUk9SRDpUQ2RYayR3XS5hZnZ2cE5gbltOSTg7dF01I0lrQSErREdeaSMlNzFKPDc/Vk0/ZnBCPDE/Tk8xVVEwXitlcXt8dHs/JTVMY1pqJkVRan1ZJX5jMm5wZmN7Z24jVF9XKG4pU2A0QGBoNUltYz1SdSY1aFNjb2xuLF1ReDBFfVAjRj5kaDVIP1V4PyhOckdA'@;
put 'JlQkKkIpLkkxLEdSbUdNSUlCSTRFZ3ZFLzx1IUdII2IhQEVfZ19Pe2xffCl2Z2lLaWouQjZ5YEckMzxMbnBwWVNvKyI0Qm1gPUpLU2xrdHlCNyp4PyUxPTBRcUMqd2p2bk5yc3haVjBecDJ4VnZ2cDB0LmY0MjluY2VAZmNYeW1UIypPJTlEYjtjNHZZcDBUcElIRip3NzVjRVg0WjYvalRvMT4l'@;
put 'MSZbVmwrQkNCVjcjKThEWjE1eVUlcm9PejUoKllFbGZ6Znp4emVhfUkqR3Z7IVJsI0UzR3FyaCJ5cUAyUn53Kz1IQ0ohITomX1Z3WChAT3ZSJH1gK2FfRD8yOys2RSlaakJSa3VpekQvfFJ7VV1HZ1E+KSZDK0U8JF5RaThnakFlTSM/cVlKKjJTd19yQXczUzZILEVdUW88VEEzYylubkBVam5G'@;
put 'Om10emU9MyFiNiYwfUZ5NktFb1QzRUxHeG42Ri9fL0lAUzFjYlc4TSt2c2xsS2kvYkJHNypLUXRjNTZxVn1QLCVPQWZbSmU8ImJPPl13azhONz0uLElDO0orSj9DOV1edVcsaWB8PjhGUFc9Rjp+bTg3MHB+THd3anlQXiRhS25eQVFVP2Q1bVhkVmIkSjRWeSRofFt2SlkhSmtrdm9QVUV0UFRf'@;
put 'NEFaZXx9bj9QVFFvRj1mJHR5Oi9rRWc6ZmkwZUJDK008fSh6TjI8M0FZTnUyPWhIMk0mPXlAe1l+TDxhJlZFWm9xTXclc3ovdGRVNG5QWDxJW0QuNjUjSig7bDNDc1dOLHoxVUh0W2VQM2UpOjNSKlJ8KHlZODA0SiZmcGE9I01FU2p+WlRKR3YkdkRAcH4ldC9yOHJ8IkUwZD1AWSQqfCY2XnM/'@;
put 'd2c5cGtxWmFhIng+YHU5TmxKZUllIl1bUnw5L3d6YnEjK31YT2E7dC49dEdhJjNiLm07fj1wbzl9Oyk/eHYiJC8udUM1MSlCNW8rM18sKEVuPW0/JUpMXkdlV2c1cG9qbjAlcD9qOjVOXUAzeHk9fUooMlNQeztaWnY8aEZoMERiL3tUK2IzRzBnYShXWl1sMWBDP09yNGgsbF5eaFNnP0cofUMx'@;
put 'Lnxgd0phdzNtI2VdNl4jInFvX1A0bWBDT30hXlc4IV5LfT5HMnJtMDw1VktCWTQzK3lTO1RkdFhRbDV2SyJeX3t6YC9KKjJvdjhVUnh6KUE7TXkpYzlSVHxHMVswJnFlRD9uO1h2KzBsWn5eMCNIPzcvPWJnak1kWkNgcTcoUUEkM15haShqSm9kdnYsU0NtNHBVaXBHNmw1VF5lVDszRzo8TkFv'@;
put 'XWVzcHcrZ0JaMUE1fDhDbihmJF9GSSEkKyt5RlE3Wz54P3doNWtTfVg+PjVwMDolOmBaQEd7R0AvJFokUzshUG8qKEA7MjdPTz88a0Jvej0+Iyw0Vj1RUF1WO1F+djFge2h4LlhkfDVBeGRZUlBJWVVxQUt9M0FkSjt8QyFsb0h8YnpITllUbn1DbHBIMDBbQ0NIaTp8aT8rZytDYSYyTS9CTmlK'@;
put 'aywoeDN8WD4rOn1DR1B1IiRMa0dUWlh9aGlkN0gvcz08VVFRfTZhZjVITGgzeVB5MH5DdTdHOmV8Xm0lbEs4Ul0ld0NrKGsyUlgsWn1qNFt8QEU4OlI9bFJUeys2KlEjbFBMNXg9JEkzVFMjPCEzdUUwZ3dtLDk8Qy4iSXRJUWpqMns8I2hmQTcvUGJpRX10OXk7RSRwO1U4Xzc3PUlNUnhzOFtW'@;
put 'PHs4biwwT0c9Km9DIXYsKmF+b25MO345dGdWI3dYJUJBI04pLD1KSik2W1MmbnZILndgIUZTKlt9K2NXNGZLWkJpJGFFTzNZV0IxUyVkIkNPcW0ve3AvKFEkP0UpMmtZcmNqJEg0TFYlZGk4Kyo8JGxYUkdDOUtRIS85NDcxSm46RFF6dmU/O1kjYjorYXImcFtBVEJRfnFvUzdOOUguMGNmQGsl'@;
put 'TGArYU9HaSJmVUw8MCk/WnF9SkNCKVVybXxbait4fTp4NVUpOXw9eUhYeltCdEl3RH1NeHJvdG9LcG5aS2dSP048e3hSJGJ+OT15Vj1rOUozT2o3XzdpbUVGRWk2bUdEVWxrc31JY0VZc0xlW2dnNjBZZT98TzpRZlsxZE1VVj1qVDkhdjd8QTBXbSV+QWZTa3wrIVl5PmI3dD9iZ2lMWVN2MVVz'@;
put 'S0x2JTQ+ejA1VHJ2cTliNHZZRSMuaHFhRXp6T1Mxa3o2OSxZNUt1XTR4PUNQcHZmK1BNY2x3QnVyUiJfbWNycGNEaGFETWpMR3tUT2MqZGJjMlt7OjNfMUZSTj1aN3ZJQX18dFROW3ZjdktUNFRdYEkwZHlUU0RNVzBUX3lgcUI6eSI3P1M0dXlDKCpCW1t2SiUxeWg2eStAVlJ2cTx4SDdFNjI3'@;
put 'UzU1JGQ1WHhKTHNCbyx7dEs8RFZxM0hTWUwiZ0ElJj4mNVBOMz5aYjJiVkApdzpHdipZdj95PjhDWjdYUHVQKCJIfVF3Y2l1cn1LckN9eDVMZG9OdSg+Wn4rfjtsXntUd2EvSkorZS5ETjBQbnAvU099aXpxeko7fkc3UkRed3Z7X296ZlNhfjJFNT5qdjBSUjFbLDo5NGRgPWk0TjljI2B1Ul1K'@;
put 'RmRfYzB9WFlRSiwqeDpROWo8XlVrK09CMEVMYV0zYThObDVyKVhTJDVQQ24lU21kcUNHPGcvYm9GaXV2ayZgeUJASSwqWXBPRTM7OFh8XnROeTlbZVlieWhZLCJpPFsqLm5lMmVrUkB6QXcsa2N0dzZgJUQmIkFma0hXeWVsQCZrMFJhe3Z8TXwsSyt4O0I1IjB4JCpUb21yelgsX08iRHxwVXxq'@;
put 'L0ZfIzlqJD1GUldvaT5VQGllMl83KFgwKTYobU1RJj5gSHx7Sj9aN1IqdCE6OC9WV0UvMlc5a0t1PGp0YnVMUzlKSUY2aXV7ZEA9b2d1JSg7QVElRWlhLyprKHFNIVcxLmFmUjhnJmZ6UzFOcHYyeDs2Z21He1kxJFdUNEt0WkQqYDpCXix2cCgiV01xTl86Jkg5cGpPZCN9YkJpQENJK2AzWl83'@;
put 'c1NOfkk9fFMreGw5WWBlem9yPFNhb0tHWCo8OC5JYlM0Il5WMCovOmsvJVlATTtiSWcyfm9VenQhL3NiK3pudEI+UTVedX1WM1hLYD9lYzxpMDtQQTc/TkU6Sk4hNTYifjxCREshRVJlSTFROlR1ST9KUioxTlYwI3B4aHNiNipNZl05KCNlRUhoUnlgXUxGKU54Z3hhPjQ9JlU1WVRudXdYYlhM'@;
put 'V1oxZzZFJilJQUpOWCNkTjFaLD98bStpXTlYbm9Dfmg9VEdZUUtqOC9eUkBkcWJ9Zi5VIn1XYz9yclJpPVhqYzguV2tBY2toSG5bZ2xdQjJULmlsemUlSDwjeVBLd1JTaSxpekdLRnE3PXI8Z10iR0Irfi9Hfj59TTNGdW0ycnJPcnc8Zn46JlhffWZYeTtWSkZBcFM/NiVDfmk4ZlEhOWhKfFQr'@;
put 'YCRuWTRvWXpULHl1OFt9UF99InJtQTpUbWZhMmdtIVJaRnBRYnM5dG1JQHg0eGpgSTZgWld0M2hhL31MWn4hc3I2elApRWt0b0JibXAydk1zPVtqUm1VUTl1JTtnSV5YbXQqU3pGNWhza11dW1t9T2A8WiRMZm1NNVtbYTQ/bDRnODRhXTU+diFpXiJyS3ByRUlmR1R6ZndrdUwham5zPUUoXVB4'@;
put 'dVRkem9UQzJSdSwzT08/JG5EeT92Y11oRV5LRWkhKDMxRV1YNWtxMEFRRUhESFBqPyZsM1l0XSFLTzpuaDx7akxVVUlNJk5NKUE3VkYmTV9lflJIdWxMRkhQREg1ZDo3cFNNSVlfO2NNNkB7KVY0PWNdajtuc2drNU0uY29ueyoodi8mUH4qNFB3U21LTEpGfXdWcnJ4bUtGMjBaSHJTcW9LUkk5'@;
put 'fGhyaV90RnUjUmU2KTg/TU5pYWZmbH1zcUYueXRPOVlrJEt5aWNdJnFZVWtOMGxgNW13Q3huJUJfPmBVLHt8T1RpcE5qNWZ7amlbPD50cGg/V2dKL3orMn1+WjU6SV5ddDgyPFIsdS98Q1IpZnVHOURqJlMpJDFhdUg3ISVHYFQ7JDp1eHRfTXM4WzBGfU01Y2NNQ0d1VHVdSD51JllsSyJYSkxt'@;
put 'USFdQ3xUXT9PL0cyUTppNEtCZTREWTJgSWJHSEohUypbZVg1cnp2OH1vXmg3azxTLk01ODpSTHd8RGQsTm91VWk3VCVUb1IjWzo6RnhSc1FqeCk3OVd6KilDMSFZP00uKy5AWGFuJXxEPGRzfTRHaGQ8NntGIV1Vbz19bzYzQF56QEVqL05BMjpJaVt7PFhWJUU5bSRuc2grLFFvJE8+TXRQcFtO'@;
put 'Mz5JOC8/bmZXZShaUVI9KiYweFElYkBNKD5vTzB4fj8wSitFZFVzb0ovbFNpamJZOSRldGhKYkQiV21vUEBPI0BibDklKS5rY0RMYHtoY2VWYD4hXTFLa2dTaTVqaC9aI0BZVl8vXmxAYjRfYEc7SDl5a2k9LkRxQEsjWnlIOHl5eEA8JnpDJUZObnk1KTNWYjBjbHlUcmBdL0FGIl5SSG5mc2lE'@;
put 'aClLWFU6XlFndkNjWCI5dEpOJWtsUzYse1MqeTFCW3ooRlh2IyRHSEtzU2p2cnBQOkcxcV86JF1uWjZkL3tRK2RuYDUkQ1NSa1YzNGBkbmlrektnK2l4TkAwU2VQXms4fUx0JDU+VTZYN1djRCtmNzdieHZZMjNQODtnI3o2TzdJPVEwKWx8c25NIUBhOCZJRT9yQDB9ajQ2Rz5FZSooNldUMWxG'@;
put 'WDBgaV5YbjhhZDlDeS9pazZtREgoS01xbyV1N2YhUzcxQCk0SyhXc1s8UCU7NHsjYDIzWiIibn0oe0A8REJNbjgvKCladVl8OkNFRGRHWj5bLHNSUlZ5K0pRODd7XkYhXjIqLHJNZ2VHaWgya34mO15IOkB4MGlzQG5jd0lqZHV+R0pIXzJbfX5hRWk9ciNVcGlmLjB0Z3dHOlhiRj9+Qnp9WDZ7'@;
put 'Ji5mUGd1NFdnZn5tOyNdQDRkb15YTWdqUk50KXw8bTtmIVRtUmx4YTNqU0BFZ1JmMDpKdStgaHVEUX0sYyp7I24vVFR0X0ZfKz5ERnlobVlKRnlLcHIpVyxyO3xLdCJ0KWhzQHQrQDUmOlp0ZD8uUDFOY2NCeDA0bjZ1XWlYRGBZJm9eNCViXW9SK3RqZ3toLzslcFVQVEVmc1piQjdeSUNFQiJ+'@;
put 'PEA5dWdYX1V7QFZPNit6fFdYfHF+YGheM3l+b1BRKiViaSJmNll1O0ZWW04kaGg2WzopJWkpTC9aXyFRdWJrNCxZPUNydVQmLHg+aU1DVUchLC4/SmtbRXFwbXk/RjQ9NHo4NyVoKHIieDNeLGdsTiJMQGtTLl8kLykyN2VNYUYxXV1FYVQpN2VVVlBIT2Btajo4e2M9MGZAQkRAbktiM08sUlV5'@;
put 'TT86fG5qWmxVRkg7YH5RckE/TSRgYilWcl5TT0A7XWVyRzVRNFN1PyVCSz8oW1dhX2BCQjRXQi5JS0suRE9hV0VoZWcuIS4jMGw/c1FzIyFYQnNKKn03Tz0+Q31ScStLMGsseVR6OWs5X1Qman0pSXp6ZitfI0U5dGxnIyRZVGFZUXwyQi85cHFUeyprPy8hanpQaVE0LyRNRTU4PVVYWy47LlBH'@;
put 'MS9zd2VKRVEldmFrKFZ9XTt7c0M+TVNCY1MsfWZ1USI8M1VFJD1xaVsmPXdzJSh5TjV4K105KEowUU5GVk1QVE4mSzlpWilxLkl9dTVMVTlFa3xMSGEkR3ssVnhKYjoie2RoSE82KlMuSUU6Wmt3UC5LIT99SSRZJDw6emxLNWRndVNSVFoxTU0pPkVdTXY+Li59VmdrPEg3N3BIcWpgR1YlL3Rd'@;
put 'dVgmNnMycUE/cVt4KSNEOWR6W1N6fnBoSCgqcHpVW11POH5tImkpJVoxXUJ1dU1waXA+cjoiXmF4NzNybEhoO187bX40Rzd9cXVgdnpafGkoMV49cyFqdHxyOm9OYnFbMHkiKGtNRzZEM1t8SGBwOU1MSmxffnxjQT5sWkJGbCJvdl1CdE0hNk5HdT9mW0VyLz92PGxRaDZ1Rm9aY3FXdHJKVDxm'@;
put 'QlNvPn1KJlhTeSJMc2JgQS8yRXV0dDciX0deVXkhYyUkSlojSV02ZDVsbyVbcDhoQW1KJG0pfSZlaz01M0l2ITtqcXp9dnRgRFY6TCtHdXYiPkJqSy5ycSIrZmA8Rl1DVTtvbCxPViNPUCZoaW81PzpeQiI3UlZddzdSY0FHWmg/MlQofSZWfWg2bUIycmJXV3t6OFdANktrbCh1eiZtI0Z9Kzok'@;
put 'a0k7XnB2YXZ4OHZFRT1vX2BAd3F0aCt9eCtnM15uWiVKcDpdPGtwO3gpcnomcDphYT0wKnRMbW14UiU1V35wMCxxZDxZb3VBNSx0UFV1WnEjal9+VERleGlJQXV9LDZoXywpQDYvR2I/ajtxfkUxX0hbdC5hdXsxdDtdOlU/L1BaYnVLJEBlKHBAT29peiFARHg7OX1mSSgqOVhzKjFjJmxHSFZ9'@;
put 'WVtocUFhKHltbWtlWyN4ZnZKKTExKTgxOE9QO2UveFVVYFV+JFE9TDtUMWBQZSllXiwqISNfcV1KYlVfSXk5YUdnNXxdcGtINnhXVVpMQl8oWG0vdjFaQjZVY14/UnwueX5TNl11MkY2O195Ilczbz01bDVaYS5DfEk2NHBWJl87aX0+bDhHN1NDdGYwel9oNCpYcllHOElQNkJQVFl6Iz5hXiMk'@;
put 'Z2FCY2VyVWM0UC4rNnBUdFtGcilpNUAmZmNqIUZWXkZITjNgVEREMXNbM09xNjchZGJoUEQkaWxFO1E9JkJELlE6bT1XZG89R2QjaX1SYy5BRCF8QipoOmFnOTw4QlZQbi9yRkhSaTRYOzxzTi41X2lNZit0cW0wZE4lYW41Xzc0T21APUlaZl9lQCswYENDPVkoX1ldWU5AKyhzP2RiNWJwandh'@;
put 'b154dmlTJE9GfWB7bEJJN19wOThxb3RUJmhVNFMkUyJDTnpNdHBrbDhxIjlbTVAjIXtWPXZhY1dSanwwd1gvZUNIb2h0ZjU5NnBFc2Q6a2tXdnc9MmpRS3RKSnw4YjgsUGxCWGUyNlh9W1dWY3JFVURTIUdgdyRrP19+WEV9YCtKR2ojNHJBLGclT1Y2X1RpIkcoM3IzKyZueWYyUU9keUNSI2Ry'@;
put 'UHxpbzpHWTw/Si5FR2laKVojM2IjbTk2TVZLSUg+VjlkQHtzJGRPcllpZ1dxYE5LVj98KzdzTH1BdVBzaX5aYTs9N0EqcG5XdEZ+UjVIfU5PNCtFXVkoOUtdV0ZJPDhDfThkdnVXdTFyanRXOGxLZ1dhYEhfbntgW1dkTDF9WTNubWp+UnEwQix8c0V8YWRnLCwyfHNxKD1payFaeG9KbyZLKWh3'@;
put 'VitXa2UwIXN+OzdtIWg0e1ZFNUJdUyQzJHozLHQ7Wk51VFdqJnl+RSR3VXFxa29pbV5iaEJGKGlVbUJGdnFmM2VmVEcpQjx8YH5lN1ZSJVdgcnJvbnQuMWdoXUJDRjBzeDEmeHU4Pk1wKkNRLG5HJjZPWSI3MSZ8bU4zfDBQSmkscS5LXjJfZGUvU3ozNiQxR1E1LnJ7NyFlPiN5dkArbmFEeko8'@;
put 'KiwlemNLaEJ9KmtNZ3N1OG13VDdEYzBtZnl9YEI9VU5pRGp8W0UzYDpeKjdfWy43W3ooTnNufClFfkJQQmIkMWpvd1JjXkNlcHxXM14+PkxQemNWLkVUT1FhSSopezp6PCUhUFUkRi5MdjEiKDo6UzEmL1RQSl1HT0ZIN0NQOHZLZ3h7bStSI080RyYxb0gjcyFnJDt6YUdzZUUlaDo7QCEpNHtT'@;
put 'ZWw4VXpVQjslVFU2TF8jI29YWDxKUjkjTjZ6fDhAMGJ6eyNfWn1FUlcjIntQYH5TOWVoL3VGZDBbO299THpxVFhTVj9qeE40Q31aaiEyZilVPUwwfXp3QkZ6VTFqRWxwcVJ1SEs2OG9lSHA1WDgobE94aWpOLmQua0wzZm80dGo9JmgvOVNIRTxMeihmPTtQNjRPQFE2cClJNjEwJU5KJltna0A9'@;
put 'dnslNXsqME4lUmZZQkpxK1ooZDVHbk9uJF5UTl9KfUxGRHdDO20rRH12dVlQdSJwRiI9NVFzPzdTZGk8a3AkQ0ZobF14JjRHWEFvVWEoY2ZaeCgkXjZYYXxwMmZ7L3Q4bFEjfXwicjhLPGdzNTBpUmZNIUBTVzJDW11MZDVROE43S3RGTUlkelhKNyw9L0wxZGlhMkw/UWc7TXg1MEIzWiVjUzhk'@;
put 'K30oMS8maXohK29NcC9jM10wcV19KS9IP0pEcyFIdU1AZ3o7ejA+TXEvPC83MERpKXJsYzdiOX0hMmFpNnVqU2xdJEI/d2EzUTY0R2Y+S09JJl5fKjpYNWRzfmpKRWVLVSRKR1JjIlkzfSJsSlglZ2AuWVMwX2tFbj1yaT16e3N4Jnx+RXEhJXk1T058akFTSGpjezFaRC46S051fWZ+OU9NM2dF'@;
put 'S0p3OWZJMk5Rc0RHUVE6dUclQS9KKWJedyN1Zi8sTnxDOnlrc0t5LmU6cnB4emliSVAvaiZWMSFpR0I7fDxnSzEvX0BqTF1+bzEmPG0weFhDIVBpMX5LVWdWfF4xOW9KaSNoMT5KV3xWVV1dQEEwckxpIS9jR3osfXVfWF9rQHJoKD9TLmh9OWo+elo4YyYpWGt9Ikg0ZTNwTyRlezAoJV1YQC91'@;
put 'NWldc3hYKT0lfmR6ZXI9UWFqNjghMzY5OlU+WmJfR3x+Vz49WD1OUFFgMEYrRXpYJjF8cyUzQ3xbISN+MHd+dzU+XmhDeHxWVj9oKnBxTFUhRFJgN3FaQGZgXjUoLjs5I2NaPzpdd1lVT0VEXkMpW1gsWnh6dH5DVi4oKnNkdWJQOVsqQj9vVXA8KyNTNHoscVlJSy54KXYkWlMyTE8yfTxQKkps'@;
put 'JGxaK29Edz88QWg2JTE4fDRFaFdhQ1lDVExfOGJ5fSl7TD5yUXMwWV9LcSQ8Ujk3dTxTS0t0filGXU9XWXNeNVFPMGJFW315aiU7MlZiPFtydm9+ZCw4IX5+NyRgJjhybikhRHVCNWNzZU0iY2s/Y1grTC9hcGkwRyJtc25vYSI+R3lZaXYqKC5QL3czU3NyX0pyIWQ7UlRdZnlLR1MzMlFeaVNw'@;
put 'MmI0fD4qJn4oJXRNUlVicGV5T1I5Y11RQF1EUkcpYSRbOSYwOTJVaCtmaURBQlc5QjZPSGo3Lilra2p3Ji9wI3xEQlluOF5JR0xpMktLPE5kWng/MWx1O2VBRVI1dlRYR1VIN2Epflg8I3hjeGhuemVqUCRVckxvNWxyKytweSQpSWE6TiI2Kzl5XX1ARlpeVk9gW3trS2trXzd9dVU5ciVvbmo+'@;
put 'WCUoZiFJKW1gb0VhVyYqS2ZNa3oqTyZAUjpTPyxhSVE/RDYrc3RTJEpgWjU4Mj8sPkpTbFRSKWg4c1c1KDZ9PnpOcndMfHIsfW9gX3lROE9Bfm47Mj9nIV5ESmhqNWhLakYzcVk1VFBDIUIvP1AjOU8zYUJVeStUPTdMekkpOVYjIyVzdD8wVyxDWiZtbUJ9Q3tNcHZyOm13JFJYTW9AfUwlNT5D'@;
put 'KXFycXZXREU+OXg5YFN5VkpmInJ9YlhiJCs+VDd4X0w9NVIqKExsO0k2NkZDTS9MXTAyQGk9K3Z3KWRSQyl7NC94IyRZYVpvSSYpLDU7dT9wYG5RKj15PmMwLERFJUNmJj8vU0pBIk9fZTk5b0I9LzcpN1R+ZyQxQHJDSjVIT3wwXz99JWtLMmIvKFB7TWJFRVZ+JjhDPXEzY21ebXNIaF05KXtt'@;
put 'amdzZz8rLiVfUTJnMEFfbmpLcC5AXWtAcExNJDteaSxrcj0uai5gYGdQKHNLdS4laVFNc0NlPE9GeTI3KldyZ3FCcm5yPTorZjdKTTtgfHVmIksiPkZGQ1RoLGgsMj1zP3o8WD81fF8mbkE2bGlQRGgxL15xV2VuMSQrNlZ+Q2tGQEh9RW86SiRuUClUZ2hMdzgzRHdVZyRKQTxvK0htaUp0fix1'@;
put 'WHBlVGp7bmxefGF9WzY+R0Mrd0RWIT02bSg8P297InAyQjIweT5SeGhNXVd5PV4wJDVjSV02MVByN3lbO0I6NzlFIkJTdlpCKCVaKlBTTThzPT93W1IvQz59O3ZaOTZGRF8oeyNLQGM5QjJ8b3dJV0EuX15VcUZNZXR9PlNyUnFsUSw7OWklOmJmOUpsUT5ZJkZGIV5LR1sjZDtnP1gyell1dWgs'@;
put 'Ljh2Pl4ySkAsSUhQYz9WX2BOOT8rPXd4Jk95OU1wcTY4RXFdTXdTNDMmZ095TCxma2FPd2EvSHBfRTJIO3hYI1BsRjolPXZUfVAkYmZ7SlpocllTJXteUzpdNEUkRSN1KURgK1M8bTRpNmtFUXIoNjAwTSxUQTpoSSRyL2YlWXQsRmxqbXNUMmZsX21CMWJCWX1NYnpYKE8sOnA0O3lUbmB7XV5a'@;
put 'SFkobUo1UV1AQ0FkIzRoViQ9cG81UEB5I1VzVmU2USppVHU7T2JATClXVEs5Qy46OTU5cDl6InlOSTxtZ21qVFVbWUkzSCVsbTFaQn4lS2l2KWAuRjdgJC9TRW09dF9UTXhMclRmcntgTEVacWt4XiR0Kjo1b0tKcFtPanRQaW4sVW1ZKz1TUmVdV0QwTmRbWSIwQGtJKVs+ZVhXOUc3XkA7KiNM'@;
put 'ZD8hbENQQDwjRkxxdW9tRUk8PnphIXsley5jX0B2KH07PE18JTdZKGUqYkUyZnZTfnBGV19bcC9QN0xHMntuYWlRQCVPam5vS3E+XjYiQUk7Wy8vJk9MbkJeNn5XSyQvN28uVklDQ1I0ZEspUVd2YXB1fi9ua1NHPz1VWyt4JVpxcX1rdHBlQ1JzNn5PLHg1dVo7TEdmT2pEMjRKPz5gNXJ7a2Ao'@;
put 'Jm88TGFnN1ZVTjUia0JBRXwjaiRab0lQekooaV48bVIoL1UmTGp7Tjs1T000fkMrMjFPREJbQEp6Y1tPc3xGTzZpe2Q5dWM7fjtXZ20+R2d+Qls8Wkd6dCorQ3JjLFQmREJ9VGV7NnwjL1dffEBQTGJJaHgsYDxGaFEjfC5pcGptbnJFKWh2Py40dnxkdS8jZXlBMHQ3ZEU9UyJdOnVCYCJZZDcs'@;
put 'azhIYCJNY05kS2EhSmpGLms3bUJyIlU+SGJrR0NJJUBaemYjTVBwUXhrTVVHZXtKW3dMZFAmSDw/IypGSUcle2l1fFksPWVZbkJIdTNTaW1fNF88eiI+IV1CUUd5bS8wO2pARzFjbSlFZGtwTEswLCJ8bHNJQjQ0by5NQmxkZy5bJHE9ZT88VHtVc2psY2tgSlpYfSguWVMhRWphQldFK1pyVFQx'@;
put 'RU1LaFt5bXo3NUhlY1BTcU9CSTQofDU0QGZmLGdVK08vejMlQW9MaWdebyp0eDtHJldTdypnV1ExfipVMVIufm12VlldMTJueCR3RGZJcjgubjZ1Vz80azNKZmlCdV44bWIyWTFSKE5WU3A7MlNOQXw8UGNqI31QXnUueV9QUjt4bSVPMltRWzk3OjE/YSJRbXNRSilQJTs4Vi5vI2JqUyhDR1Rl'@;
put 'a1E5PXdwPDxYY1olTk9wSkhTRmcqRncxOCR7TWFvI3NqWUtmJWVjbjIhPE5ve0x7VyQ5XjNzZT90ZVhjNHw5MW1PJFR9aSUzLm0mPFNZYzE1QVRqJUMqdExJJEhrMjRlUGEzcmVWQnpwMWB9YzF7RzZxcT88TT5GRjk7O1YrZ0F+KGJTJF1WbjM7IXpFcjV1UFJUIzBXdnlUPGNmb0BRPDkyOGck'@;
put 'NUA4NH15RSgjKWVUd0hycFIjJTkudWMoe1t4bDBQYTNtNkNJV1tnOml2IUh7fEB3TXp0bEVaUmxlbEVEJjZLTDcley9fbS5laltyZlhKbV9RUzJ2SnV4IkooO0JyL0g9cjV5aWAyaTp3WWF7LF48XXxMWExMUVVTRSpYXkNOWWNQRHI0Z2BlSkk6M3hxXT5kZ0xyZ2w0JTRYWjlQYy5+cll8US9G'@;
put 'eGJGKE5vbWprRnk8P2w5LkJYc1pGV3xERyo+ZiNiMjNJPm5XYWQhIkxsbylGNDFGW1c+YTtmLGVDMGZ6KnBFXXA2ayImX295JGVRW1IlQkdXQz1zKWZANjI5aSgsPVNyOmY4L3NxZGFlcjE/fXx+TWlkX24xUEAwSl1jcTtjSnVvWDkjZDxmXTchPDwyMjFCe3dIZSxsZmFfe11rViM/U3VILH52'@;
put 'KHBSd0pJQDQ9K0dqSShkO1FubS97bCoiVncqTTBraSNvQXBxcjEvNzJ3JlBDdjMxOjA5JTh0Z1hRYDxUJVNYI2VVLHE5a2lNKjYrSEdmby9SdzRYJFokeEcqRnBpXlZQbT1IJUM7dnwxYiFweGxRUVNrcE9KUnxCQzdNbkNFQXJqZGksNTZgejpGY3JxaHZYU0VaTmZER1FOXkc6ZUFIdVZ4Pjll'@;
put 'Zip9Pl81LEd0RC94MlJHWkckdT9APF9tNUxJMWFdVzU1OTxOT1FnenMjV1pCfVlGbnkxOG5RN34jVGxrdXZCK21YI2EjKVd9O0xObEkkQnk4W1k/YnshX3JtIz0uaWsrMTE+KkBgQF59aSkmfVZ0UVo9ZjxXPndUTGYuV3UlL1d6NHZaX2tgWndPQlJsNiFGYV5ydXl7Jj1icVp9L041PmNTOmRl'@;
put 'YWhSQzokXlRxMi5ySCFjUX1xI3g/NkFIK04yNFkwNTRWRyFuJUR8XktCVis3WDsrVVN2ZV4sKSspdUg9UmVrOSt4TyExPVNGaF1sbHtWYV4wOEs9cl5jeF5LJUMwMmlmQERYL248M0R7I1prdEwqVXB3QT1OLiZHKzc4Xl9qP2B5IS9tNjhtbUMvbls3ciZASVo7UF0mekUjK19NZHJvODQ5eVUh'@;
put 'SWU0Q0VjQkNnP0MzdUxHKUI5SXBzPSQ5ckFWWFNYay9qZ3tuJGhgdXljOVksRDhqLyIjUihhP0xGZml1LllZOUhSeHtBbm4udVdaXWpHPU4yfHt3a3NqK1g9aVNGK0BxQ1FFPjxsamIwRUdZVkJ4X0Z3TTNKeUA5ZnMhWmxKeyFpS2cqamMmQih5bnVuMS5fQihDbkdqLyZZeDtrZ3ErOGZBcTZL'@;
put 'TH13dGRse3pZOyYkWk1Yc1c1Rnh2NiNgUWdKWn1LRlgiXT8mVk1rUitDbGRNSzZsX04ySWhbPWplYyxwZE00M2VCKlMyPThaKiRCT2xCQztqNkdSfDg5QjVsNjVpWTRJWyJrSShmV0xAZFl0d1AoSUFbSElPOlVNcn1qX3A+cGNGZHk0XU1TJj5nIyp0VUZZLFhxNmg3djRuektnTmd6Kyo9fSpf'@;
put 'NW1ldnBDTnMqO1Z1M1E1ckdvKWgqbnYpS1UpaDVCRntBWW9nMXhsKFF7NSZqWjNwZV81cyokO2RlWiFFdW5gWDEqdCxfMXsvPHhSe0BYaiE1dl56W2xaeWFTM2Fwb11PTClhWVlyKFFuVX06KGRoMlZ8WjdYZSVDanJ1Qmc0WFkuYCtxOCt0MSR4TWUqZ2wjTVNaNEtTMytQTXA+bCU8XnZLeiE9'@;
put 'Lnd9Z2pTdmZwQztkSz0+T09BPWpRSD5RKSNib315eUtgWEVgPlF0ZipFfno4OlslTVIvMixBSmZKUXZdZWlZOS5AOkhYTVRGRm5jaz5RMXUxSSh3eD4vdnBGSHBAfT5zJX05LjpoP3BPdD5BK30lKiUrby44YHFOQSJrLzIzM3E3QVQrXWFnOSxLJGFvXnxaKkIqNihLZkdQS3cwdVhqP31YZ0g6'@;
put 'aF4+SnU2cjg2XTxdN2EpaHYiRGVwNzhIOzp1Sj8rMzo2UWVnam5ZfURRSFRIbS5dfjNydz5qcVVMTHIudWJAMzBXdjpWUHQhdnFfREIzUzlKc286PTVZO0V4Kzk8c3QlbjFpbyJiPzwyMU88NFs5VHE1MVtETWg1ViJKWkU2IzhYOl9Xdihrd1E0VXloVnhZPSg4TnVedT9ue2lhclk0fHVDSDVv'@;
put 'NkpjJSZffi5qLH1RZ0ZPPVAjNF1sTFQ+QF8mM0xENnQufD92Xmt1fTMoY2JURnRmSUhsNHNKdjAyUj4lKms3fUZiLzVkUWpad2NRcnpuc11BQiViNCwjNEh4b05dVVBlNyZkWlNzX3VjKTElYGJUYiJrS0dIVTAlbT9sU2xfTilqMHlyWUgkYF0kdSIsb24qWD1+ZWdYQyN9Q1hlJSFAcnYrYzZX'@;
put 'PmRrd2BhZjxwXWs/cyV0Q1RFJXV6YU9EYmZPImhZNTApK295Z295N2khOWRoTiZhdnZ0PXlSVG13TklNRiouMEFza044UnpVRjY6Lllze3JDK255emVkYyskcDZiKz51fk41WEwwPyNnOzdzPn1zYDA5QWs7UFZgN1NVP1pCYHo5dj4ycTssXmM9YmpvOX4/OUpQSlArW0kkbERRKnpvOCUueUhX'@;
put 'Jkt9NEgxaU9FW3RbdEVTa3AjQkddXiRVOGVAVSozKXRyTVFwdGpHWXV8V1U+UD5wLCU9MylQMGRgYEAjSU5kYTcqbFglNiQ2cF5sTi54Z2lGVTRdW2tiQk14aF1xN1gwMU1OcldlMDUhOnNPVjh8fl97REVOQSRjTT00NUZZNipaIV1IUWQ6Im92YTIhcDpYJjghVysuZD8yTElNZyk8IyZReD8+'@;
put 'OzkjQlk5ZyYpWSkpLDlEMU8xPktDQ3tqSDtodCkpI0JPTHFRNHI0VXlkQDM3Ym9JOkYxb2EhM0BEalZUWD5zPDR1PSV3WzUlSm5COkMiTF1FPGp9SUtxSzs9V0ZZX1k5TjpNaDdgWzhkP3ooU3k/NDI6cEs/anlJLjd0IXVjZzA3Sy9rSV0+bkl9ODdbW3g5UExheD42PXIoaUs2WFR1QW8sQHko'@;
put 'LjNYSnpbNjx0TCVKZiwwKGEvIjo4YzYvL0VzW1VGYjRBRWQxN0A0R0c8RDdwUTh0dnphIXpsVXdoOk0/NFYlOC81UUg+ekBbKHNYWnJ8WXFbMyNtXz49NC5oSHUjQlsqZEs4d0FEX1R3elh9MFo8WnxGQWtMO1hUWDROaTRxQypwWTJhRGFdUFFNMlpSISRGQE4vPWBpQUh4R0cudnJjejVPJjlk'@;
put 'WSNSKT9XIXE6W1dhRTdhVnxhdyZGXT9dZ0NGTEl+VypvP2h9P11JI1pmVl5jfm4uQXQraDU9XkJGRDNiWSlNSnI2ZUgzW3UvWS9YIjhOKHlpbzF1ZUBoMitQT1RnXVFdUFgwSXUkTnl+VmxMWE0jTClMJmRic3dHTk47Z3cqRHU+UE9UOGNSWGhzOnQ3IWh2SjtFa1NZRHxjMF17aWBNaGFbNF0p'@;
put 'dDsxdmFBeWFySWxEamFuKj85P0VsUFNSOjF8IXRSU3ImckdgP1AqZV5iRCRRR2RWWGolRzc5Qkk2Mz1WQz8ufG1aUHUhZTFPRzdMPUhhe2wkKjRdSm1KV2REZypsOVUxKHE+PE1VQlkkInBFNkFpZ2BwezFoYGllVCw2KmBINFp1QDQ2eXpqT0tMXTBFLD42e0JANVNQJUxEL1tkL0xoTUlEJFdh'@;
put 'VHEvaitfTERPbEk5ZGl1KCgucipaOyNAaih8S1JyKzNLTjY6OXpVLnhVRW5IbTtEJks+NDpiaGlYOzdhRiwxITF9ZjF6ej4sUEh8Vk82PCZxOUxuZXJxdXo+Z0FhLio0OmowcEU8THApYV5QeXtJd3NrMC9ed0RZY0E+ZzMuQEUoP3lwWWVnfjU7VyE0MW01IW5hXUV0TWhUY2Y7PSlSaEVLQ0hL'@;
put 'TVUyOl13YWAsN3tVdD5RdHRhKmpSLlNGPTQkKSYuJCE+PV5Ga3hCNGZ+SV43bn12azR+K3coWHlBSilafWNtRF92QHs8fkUuMD05bmVWZ2ZsL21TbjhRKyhEPyFSRklTLjc4PWF4Jm8xUjJAJGxaTGpZIUdxUlJQPHdzTkgsTEU1c0FZUCM3STE+ejRSc3R8e1gkZ0AwZ0BsMiFQaXhCJHdHQTRL'@;
put 'SXtUZEcmOSNYNzwhZVZPdnQmSTA1RC5vUWloUnd9RjF2WHF5SjtLaCklSWMvTHZydHpxPHY2R2shJj9oWDg1NDp1ZShuaXFdJStyensjNVtQcmE3NDp2emEuSmp6WVt+UixmYE5yPVpuNFApQ1JHO21KXkhObHAib0ptdmlMRXQmKmwze1JGO3koXkZdayxXeThmNkwycCVSV3ZKNmg3L3kpMjV3'@;
put 'QSQ8KT1jX3xqWihKb2MqI2ElNlEodFZbM1pzJHlLWkhANDlQIz1zZ0Aoe0IzRiokNVszW3Y8Lm46NjNFM3VLcyRjXmIyKz5fZWNYPjJ2UGorK3xPdVs0MWFtdWw6SkN7bC5bRmc5KzxrcCIlJGciYzAhQyFrU31+OFZxRjdSVDI4bDEuKCRibGIrQUkpfUVRfnFTQ11HVUxyOiI3IyZjcCI1LFF8'@;
put 'Szs2QHN2P0h4MVFNYzFxLllydl9CK2p3VEhDWWl5MUh9d3E3OUtoUy4uKkg4R3M2TytKQCU8VWZaTDgze1ZrSGpnODNhM1tmT1YxMUwkMkEvIyxKYCRkblZdRVJseE40RSVYWmhbUGp3cipRNE9gNy45TCF1O2EiaixeNlE8O3x4PWNCSzR4MV8/LHhbW1NtbS9VNSQmKkx0Sj13OzNDfVV8RUc7'@;
put 'YWBWbjJZT0Z9RkteXTBXI3o2WkpefUcrK3FZYTdaYkkrMjlxMUBtInBJdjI8V1ojPSt+IjM3L1IqK3c2MCl+WEFAeUxYJVA2ZWMrQ08iYkBKOmIsLlMkNUtXPTZXXVNVVnJCITt1PnA/fiE7IXc0NEFETUJENWA3JnMhdn1gaDR3PGR8RSFkZSxseCxCYi9abkRvTls2N05WXWhIbHMydmtLZlJH'@;
put 'IktxbjFjfSNab29DakUxRCxqZj4rRGZnN0lhInBhX3dmSForP1UzP2ZxUmZMcjtkOUw0TFphTTdsKUZqNkgmXnkiSTpHV141YHElP1ZTZ3JoNUJXJCxSTjhwXyNEeEBke1h3LkIzdklPLGNlMXI2UElDbVV+SzMjN1lNSlhWT3FgOXEibSZLOixSe1ZuOn5+KXZIbypwcE1ySWBGZDlLX1dMdygy'@;
put 'OEleb3hMWWB8Yk1dW3xjaSwrckx3dXkuS2d2SE9KanVnck1OeV5CWGddMGtBR2s5UmRoWn5RLkRHIzooWlIheUFTNHdoSSo4XyhsRUlHZilrMF10aX1FT31VQXNxLDoxc0tvJHA5ZH1laE4wflIpTXE1JXo1OjlfMjUoS245aW5dSztIZVZxQD4/STJPIUFjJmpoUkJBSXZmUHdWOjdBeHhgZ3wq'@;
put 'K0lYdzxreTtWSzVzbUc4Y246fTpDXWZsTCNWSERCMDl6Rm8zPTtiY1BBajB9K0UrdXt7KDQ5Y05USCNtPCN6djhpeStgOl1eQzxqT3d2XUtoS14mfHFzS3kiLj06R253cFVYNVcvPXdKbn1jVS48cENFU3FzR1o7TF1xOHR2TlsyUW58aEEzPjlCKUU3dlVhcU0laz5kW01FcGNFMHdNbnF7Jip0'@;
put 'OFZhbTZkREEyeyJDY3hrUUZYbTZ5MTs8fTJFcEgqR3Z9fFcsclB2YT80Q1gkRXBzbjJ7Y3ZlSS9Rfix8UCtiZyFmN30mfXNaQG9+WjwpPE1qbjZuWWg5d0ldcVNkP10qalVNbkx3N1dVYGhlQ11mWXNnXnF7KU08KVRxanlQaGdmelJAVSxKKDdQaDswfmxDej9UWGN4dUxbWGlSelBNK259VGJ8'@;
put 'KmZNVFp1eHc3REpTXTJXa0V3RWAiRmk9JTwwT2RDPkAycmk2VkIwckN2LnVLKzAiaDdRPl4jVk5ePzZCNV15L21YbFlQVzErVGQ6IUt5RXdfW3dwayVvVndmeF0sfGgwMSJhOD5GRjx3bXRUezwjSXswckI2Rz5XfDtqIUhAITttc2Z1WkpCPkMsTjZiJmViaU97LFo/RnRJSiNnT3BHIzUqVj4r'@;
put 'RkcjP2ZYU2o6UmdgU1NIdGRUZFpyfjohI11hYysuVV80PD9jPFtZcnIrYTEvfCQ2KlojO21iKXBBInoiUD4kY28jPTgiWlNHenEhQVlFIm91b1lUWExhbGhBeDlSKSpSdUNFdTR5PFYvVUgoRnlTTjBRRE1wPHsuZ30za2huSWJETTlyT3h6OWNfSEhpYmlqQigkRWc2O2x9O0p4Pzc5czMxaSI3'@;
put 'aihhRSohdl45fHUyX2R3Njd6Tn4xe205bSR9ciNCViNRdUo5alV5Y3x4Yj1JRVhCcnREZnJmVHx2I1lNQCNPLEhfeTZ+MSMrWTluKk4/cihEJHh9Om4yYHRWWkpjUjJIKHA0cz83OlF8PFpacnw8SHZ1fndINmkwUjc8eGI5LDpBNy5jejQ1IVsvbnAqPVk3THtxQl4qU35OMGBBSiFNeX1VWnlC'@;
put 'VV4ocVBiL3R2M3huc1ZPfkJxRkdeQnRCcD09YS9gSHU9fmhYdVZ6NjwpbnZnPmpOez5tMHR+UHR8K3ZSSCkpSC90MyxLNik6eW9jd0J7VEgxWD10Y0F4OlFjLE4mNDQ3S3dHT0Ujdj5naCIyJSYzZHYzRTRYO0dkYmh1XTE4ckBeXUJvLENvZWhTMkciIi5oODo8Q3J0N1hGNjNrWkQxJlJ3UF9i'@;
put 'NWkofFssRk5bbk4vJDV5JSM5VD9ranU3VUgkTCE3OntFKz5iYyl1Xm1aTClXcV5SLnldZnlgXXA9JlNvSyJZIzBlWCN8bDRxXl9aNCEsQGs+TWROLFkwU1E1W1chKXZKfFI5OHx8NzxvdGV9XUk4ZiNme2RCY3J+O3BZTFlEL0d1SlBlZmJoMywjQGdNJVFwUF9wdF9kc0EjeyY0Z3FvfG0hQF5y'@;
put 'LEt+XUJqKzFqLGZidjs6TiIsZl0/Wyx9UFRjW01dSkhpI1RPJTdJbGNnNmR4Sj16LipmbG40P21kM01dZXBpNC4qV2BaUCRDbGNuVGUlflBSRF1Gb11XTUl7LiNXZE0odnE5InxDdG8hPT99OWIvakJfMXhFPSsxS01hYV89KzE9KHJoWXZlPWVCTktRLnlUbkV8dm1HbmsqJSQ8W1VnakB1eWEx'@;
put 'MUN8Y0tBe2xvcFFALlVZaCZAWDB3OjhWN2ghWXB+OXFAPjYkcSs4PSh3XSJsPlE+eiozbVFWNCpDY2YyY1Q0R0R5fU87IzRuQGl1RHdOWVpgS0tZYUcvU0pDfVNKbmAibWtLMjE/K2tNaUYsMzdnPDBFUUUsR0xUSFNwQV51b2NmUyRpbWA4QjojRjs3QXdiRSFlKz1KTVRSbU9jVmhialdVNCRL'@;
put 'LFhrXiNWJWFPRltnTWRWaFFKcWAqQ2pePG4yRkVoUUpxYEQxO2AqLjxwNWBFPEQ2Yj17eF8jWE43cWVpVC8zemdTQXs5dDYhTkVkTGNSMG93IXR6I1VCeVlbNW1JTyJ6MVZqdTxHPnZAS0s2b2ArUG9Oe0x0M35gfUYpYmxgSy9pQixbRDFiaj5WejUmMzVqLHFJZ1J6dDRCX2QoSiN4OUFoMUc7'@;
put 'VkI1N0dzVCI7ZktCenM+VVk3Lil2TTA1JFtMeEgsOEAvfnJ9dG5GWWc5SyJVOzlZNj5QYyxCJjs6UV40dEB3X1hnJSV2b3ovfjhLUS5LcE1rNHo+fVk2bWY+MGdmSWpvSWwkJV09JU5PUiF3b2x2UD1FLkV2SWBXU0tlVCkjanIsXndRa01fQyJQeSxYcXZNN3xQb2VjO20vZlVgNFdERSNyZV0u'@;
put 'PGArc21tazNEZjFCYy9kUDN1VXdEZnN1bSpxaSVQNHBQWzM6UE9TREEpQC4/TiY/SC9JYWx1eiFfYkF7cEdJKFcmVUpQLmMuaW1vaH5ZJG91V3dsZkRDUDs8QGBDPXRULDJic0E0fS87an1gOyxJT0A5dHxIbl95dmooVWFHWG5MeGpObihya3VYfXI+OVBJMEU5dkwldDZBVTtKcyZ0Sl5FRXl3'@;
put 'SiRfbmQ0VVtbbXUiSjpOSSg7O3N9O0t5Uk9iT0wiVzU9Xl58UWl5ZSVjVzpLciRfQk41LkAkVmlYbnJSNXdSWCo9Q09nOWdlVjw3TV1ZPzloXTY5SDFALExtOSs8cUgsN2FoQmlgK1Z5VSFaLiZLfTQlayQ/cSM9bjlyKjlPQFZLcW9Peyl5MU5NRUc6Qml4KVJjW3VMNlVhMUBhXVgxSFV2NUN3'@;
put 'YkVNYy9DSUs+ZF5VVEZuVUk/LlB3JGleLDRjRl5VPDovJHosQiYpciQ7LllnVmA+fm84LCs8UCtuZGt+YDFGfXthTkQ6bTZvfFQ2MlRzLl1fKSVzIVVjK2ZmR3RUWiwqWEQ5cH1YM1teQm5HS2JZSVJGV1g1RD9jSUNTelkvdmksRGdWW2VhNCVVTmMxRG5CcU8ub2E0U1I8dSNxdEQ2VX5Bekci'@;
put 'QFEyMHlhI3M8YDNheHRzOFRVeSRnUCtJYFU4MWZOPmZLcnVrUE1zSXR8bS5EcVZhZjdxUylxYDIpYjEuaXgxZUxQTTtXYHIpfFsjdGApO3F0VWU6QGdbYVIzbm80alV7QllpWklCKXspJksyWXJFJmBPTjtGdzBEZiNCaCEvT3VDdzdeeSw5WntsQk1xQGAid3tHdVdRd21kITBiWDR1SUwjMWVj'@;
put 'PDx3d3YyJSwhfkhwIztYZlcqaHBidC98LDY2fCxLNFJaZ2lHb08iQyp5eix3ejJoYXNnUHl+Kzh1P045RU1dLiRlcGl5JFQzeVUld1dvOnIrWE0zaHJ3QCE2JE9ocDBpY1Q3b3Z7I0VUWndJY345fUhbb05BRWtzeVhffjg3Yms7XzZ9PGxwIntnPy8+V3lSXnBZfkZCM2pvSTBXeHFhZ2pZXUZE'@;
put 'OWtvajUqfGB5WWE3TEFyW3IxdmRZIWBOTWRHMVkucVpbalZWI0s8VUZicDxwOFllXiU3O3B1aV8sPktbaFh+TXIjM3Rvek9ROzI1WmYzeXddbUU6ZTlGYigoNDRMZiNdZElEaUlLT15WUy9RRl5VKFY7cD5Tbn1xX211S0hlQkpMLzRENmF+ZVA9dCM1PVY0NlI1K1BxQ25JNDVJdG5kQmdkXj1f'@;
put 'VThHOEM4TEBLKCVEUkQmMjBfYihXWmI+ZTNHTyNIMil5NCshV1goczBYZUJgSHlEciNMWDtwIThsSEs+aHwrT1FJT1M0dXBoakRpPHoiYFFPVm9VSHxKQnhHYnc1SERXRkhHbWYvI053SHZ3fV5KN3UjWihKRmUzWUE/W2VqekQ3OCw1d2BEUHIjeWJbbUV8OzlSels7OEY+WmpnSnhAV0g8MFhg'@;
put 'I2JYNypYQWtfRXRHTyxMaUdvT1N7SWgzdTV4eUEwM01FaHY5SUFtPHB3PHMxaFYydlBTQl4qcWo4Y0RpMSlHSW1lWj44X3VVVDV9Y1FrZ09NTHZrMEdOcittOWJYWEhSY3F0Sks4ZntDM3VkeGkiOXJRQXxXYkVBekQzK1trS0ghfERBcEo1WEtAaHlpTXp9b3pLZ3c1WDopc0V1L0t6RDNhRlFZ'@;
put 'Okw5KHJaIkgsJkd6RzFAajdRZylrKGksezsjYHh9e2khZXQoLmlITHRWajFzRj0jQihTUjxDSDhEZSJWfl0qRTVsbnR3a3xAOGtPfDtINTp8fXRLSD0wZmRefDV0NTh+MHl3QDtTNTFXalY3Z1k0aSZddGl8bzkjNSZqe09OOENAdjdKWj1IT3pSOVZJfTAzTWlMP1dfdyF9YU5aIiZRQWY2dkBd'@;
put 'ZlY1dm9KYlc7NTdEZm1GOTFiOFE1dVI3OGlHPk1mWHNTYnckTVcvTTtwa2AiQHQ8dk8zdzw+VWpxamQyLHFQYy9lWDt5Zzw4PCZIZnl9Sz9KXkZBY3U7VE82MDRIKzE4cFYuVDU6ekVPdnEwdzh2KUd0UGs1VU9hZ0tLQFMvW0xLM2AhWDEwWmQrcXRGWGViKjw6YD5rSD5NXig+PTMqZHAuM19o'@;
put 'YU93SFt1Ojhld10zQWlKTzM5VjhOO2ZZOSR8QGlHWVJlTVRndTRJTyhrcmV9ZS84MjE+NEU0Z2kuKHplSWAxQ0xWXj09Uk1zV0Ipe0lUT19Nd2Bva05weFR1TXNnVlsjQ2I3K1lpImE2WkghSWwhXzhDfSEmOihwKVptNSN1eS9CSC9CP0lVTVJAd3VQTk1pOThpeihbOlpSRGBjcGM1aDBlNWh8'@;
put 'dE9vU0QsRjRfeD5EWF1DZiEkSU42JDhvOSJINl9QXyNHPkNvcVJYeUMmX2dAO2JEWDBzcilwNVpsYUM5bSVjZ3NEPjlYNVduR1tOb0l2KXFMalpeO0N2Wj9GV3F1KGRlU2l0TGxucTM+cnQ6N0VLOGtgcTEyNTNia35GcFYpUW5DP3t2NDh8eFtNZVZVdzNGWj1jVF9rb28vS2EicjRkNz5CIkhu'@;
put 'ZnptNDR5WXl8UD1QZHpXTCtfKCNUVkpZRlM2WForb0M/YH1fSDtoIzFQe0BGfVhjK2djXlZ2Xzo1dikjPW1YT1ZlfSZ1Qi92JD1ILmY+WVVlXlAwVGN1VEJ8fVJLZWBpJE96X3doNHdWLEtOVVZCL1c+NipQTTlXVUtZNl5IXjtmdWdxeiU3c3xMe1B3JFEvVFVJMDklTCZldFVPS0pGUER4W0si'@;
put 'UXh9SmorWiIod2BvfnMmVnZXIUk8VnkzMUsrcHp1NnIxaVdPMCN3VT9ARnBHYXA9ZTV2bkBgaTd8cHVvRkVhR21JZ2ZvP0xVKU0/UVhYRExpQkUlLE4xUlEoMC9GV1ZJOGpTYWNbdCMsY2Jvb0RWeGdifnpoUEp4JnMqc1hQVzZ+eX5zJD98c3x3OjJzbmAmfCE7Zk00X348fHQjKSk5b1teYHol'@;
put 'dDZRY1tIW19YeXJZVVZqTUB+RVNtdFR4SD8iPTEkODB2QGUkMTh5eWc6QVYjMXxfI3opd28lOFIoYG5raitbQjR7WTk6LHpudlF9OGlATFZddFE2cXlWNWFIczRjPj9gSkVFaC84VzZiUz85bEREN0UwOWViKEJGOV4uTS9OMVpbUXV0X0h8UDF0VUhQNWM7NFltI0cufFBBdXtBS2QzZlVWSH0i'@;
put 'W3F6YUMzRUdsIyxeTTwjMXRseihYM1opYUZhRyFpKGBiamZiOTI+KztRLDddZ1Y0eHtyUGt5NFNMNUpMT1JxcnBmSSp8Y0NyaCVIeyZWeCUoc0UofFdfMklPKngoJEVsIk5QdmQza0xwY0JKalVNJE1DWiJxTmkhL1JQQUJBUkRQeUA+Qmcpe1MzIjVMZVIxSCR8K2A0TGU1Yzc5S3BnSVlrK2FD'@;
put 'bWdDQ1dKXXk5TXp0SV9TUT8/amZ8YD8mYUNoZiZAVko/cnU1XW5HSzsrJlFEejkvTFIqSDUvP2pKbWRNXWhwKkRmeXVPUEFCeHVhWTBjekRdaEROd3UxdE1IeXdWWFV6WU9bQSFZJmEjKGJEXWh4QjlCT0JVTmhOPWhvdXFJcSJQR3shMkt5JmgjcSE/UGl4cTl3Uz8qdCNwUlJQR2xHXWdWN3xY'@;
put 'NlQ2JEZ6en1dSWdfXjYpZ1U1OH1iPWk0Iip4ImpVV1dqUjYxW3JMN2VEdm5zaDxpS197InRJam00ajBkT2wla3lKPzVTcmZbOzhaXjA+elZ6KkskaS8hSVpNWjFrLHZ4Wk1aS0gsKSpETDQofEJ7OyxWVXJUXzM1aDFIXzgvTyNdUUVlczZbPnIrVT45Yi9uPkYoNnV9amxURUp6d1hLR01OOGZf'@;
put 'MHZqcElIXXJWfDlrVVRlZXJXYXAhKU5EYnxbPGdWbEJXQjZmPUdaPzZVITVUYy5sUzVWZlkrXS95clMpWTkzX0lSUzdyRCJ9IlhMajJhWiFVKGMrUi8uWGh0Mi5bVz5iPjQ0dnEiN2g6O0NiVFp3RFgvVjZ2dld+V3UmfXxFPl9MWDl9aFMoa3MvLy5oI0w8LExFTGl6dSY/TWNiVGp3WDNtRlJ+'@;
put 'LnNGS3Z5XVBEJDgheD9fNDwhLzI5IXgmTDM5OUVobXk5IXhbXzl0aSVHXzI6ekhmaTxiXXlReWEia2pzbTIuUWJWTHJTUUZkJFQxPTsza3YpclNYP2hsajc2ZEJRSj18eD0qclNYP2hsPHciJDY0Y3QjUzdqVFt+WDQuRik6LmJlJjA4XTlqN0xMZXIpYnFSPyFiN1h4WHpnMWhCS0csXSFAJktl'@;
put 'QWswR3tuU08wJGVjc1QrPk9SP0BOaWdzWWoqWV5WQVIvUF53VjJqWk9da1YiW2oubiVYaWJFS0Y5WG0+MXs2a1QhWmZLcCRFKDtvel87VUBadXIqTX5Bfig5RnpAQEIocEpYJTtEKUB9KkZWIkskLGUlMDRqaTNdZ0dBfXVoWDpRQ1hXLlB7Jl9JazIsIk00Y2Ikb1FIbztuTiUhWCNeJVVdT0Zr'@;
put 'e05VPVhhZE9yKyNOJiQ0PFUka1VTMTRiOjF2LHxOTGFpaVs0NjsiWEYlaShQVUVZW0p5fHh0e0d8WSRPUnVARGolNDVzS2VebmFIT0JUdiMiQGErWDJENjNvW158alZxdWt6WlJxVVhvSmQ8SU10NE17dUd6MHIiXSImPjQ6SzRuKUM6aDdhMmJrW04xWT5rTmIwP2N1Ji54V1FtVjNmT1cyXTF6'@;
put 'JWFYX3NTPUdZRHxSJFAvW2ghNmlvRS8pWWl3Yz49ejFdfEorblg9fGNFYnkxPDY6NGtBU3pBKWpeT25kbUQwUiEkLlM3PCxDLzU9MFtZZGU7b3RiTnlMVWV0NWY6SFRGPXdPKj1DMEc9e0dweU9DMyJHWzFOS2ZBXjJPSnM0LzFmVHkheTQ8L3lbd2I7MC83QCx0cyg6PWB+RlVZbClPYTFffnsy'@;
put 'UzlXcTFgV1hMK0VUeCpnfkI+Nl9BKH1UbClXUih0VHh3MWhweV9Kd0VvcVoqaTNrWkN1dF8mO1pZP0RzcGo0OVljfCNDb0xYaXBCUE8wMTU0Lm49ODQ3OWZEWDN0fD51bkBKKjBNY31dIVFhQ0JdaVo9aWwxeSMkTWdZUSR9SWNdWj9tI19vdzg9W1pkTkp4aXR1RUtuN00qWC9Dckp8MitQKGpo'@;
put 'K1VyRGxOYlg8IXN1cHZiUF47OzhVODNCXnpDZiFYSDokSz09PmxNOyJ3XUNJSWFge1hiSFdpWUV9RHxlaVE4RXs1aktJSiV6W1NPXSM8bDFhN31IPGZMYGVTLkxkbG1aTlJGM3Y3M2lVdlg3OEwodHJzRUV3dW9Oe0MzdSZDXmlWamtBO2hUdm9vRVljRGZHJnUybnlRXkhydlg3OExrYGFMQytA'@;
put 'PiNme0MzdStDeXojKzp0V09yQkJHRSs4OjouQFNeenJvcHNvbVY4aUdETkREa3RnfDV2NUpZbV14ZDBlQWl+YVhEKkVmRXpBdy5MJS90YyIie0ZzbCU4flh8JiVlTykmVCF+ekxHRz85dUg5IjNESkZJOE97T1s5TXR2UTM1Qns7XXgqY1t0bS4jK3FSPVJAaWwjL20ze1NjXkUrNks3SHdSMW5v'@;
put 'bmZxb0VNPml7QGYwYF4yZUNbVmw3I19OdE9SMXA6LEs6WzEzbzQ4fVk6OENrZ3JHUDk1W0g6cThHd2JFczA1OW5bLzVNWk9yYVh0fHJXU3s4e29aPU1lNlVaVyQ8eW5WTUQhenE+aEpdXmdzSCYhQiQ/RyhgNFJWPGdgdGlrdV9KX15Xbnx5NVhkfExvYHEyb0cofkIoNlpnej5RaTQkd2xxRStQ'@;
put 'U3ZbcWdpYGQiXVkzRHN+XltXKmtmb1d6RVd5MyI7JHBlYUw/cTI0XXo6OCNdPVo4fCFfMyh8aCp9dlJ9bCs9OX4yU1BGd1h5NWRjWjE4U0BzSSMoSERENilddnVwPE04d25jUWNXe3olQG9tTllZU2M+UlZHKnZ4O0l7KTtCNUhQSDYlQiNsQUN1R1NhfHhjUSZNbUdsMCUzUV9tQk1VVy9RUytb'@;
put 'bihgVyhBZHVLUCxJdXlZJiRFZnYyOk5wTmcmUmEldnpnRWBDQER9KD1QV2k2Um8vemxaSCZzVF13UGNTSkAqZ2dlK1dKQD9ndTU/QFU9YVVme2tlPjMiM1ZZI1YqXURPeF45MDssJT0/byRFWylMRlI7WUt1ZTEhI0N9ZX1oJlsuW0hkSnA1X0t1e1ZVVkNecm55NlFQYmojU1dUKXN1Ujd8JWU5'@;
put 'WzUmN248RFg8XjM2WnkpUT1jNFY0dCFhWls2QlkrVlVnW3UiKltQaDRtbWUwd3cvUT5EayhmMjMrcUNAYUg/Iml9eHRFcW4wKTYqPkokOU94JlRTdSpUVkI4W3FOOyg+SkA0ckNfPlpOdE1zQ31FREJodzBeR2hxd1ZocnNpMUhRZTlPTHF1dyJYMWVMaVd7bVg4SDlgcClyWnV8dEpRT2JlbHIv'@;
put 'K3UkTm8kKndsSl44QXtYZUZ+LGxtOTMmKyxxMyVQU2E0bGw2aEVGZlU1JWFUSUVddX5oIU48fmZ+XWp7PUJJSDM/RGNjKnVfNXtUISspc0NCKjpeTj1McHp9ZjhMUFc3blRrcyhKMFFlNEdSYkgyfSMifWVQfEhXd0I/W1FFbCNJTS9ZVGtLaFFKJT8yNTspd3tVXVg7WF95S1FlMmtSPHB7WTQ0'@;
put 'NUUvPHtSK2RGU09Md3ciTDsqVW45XzFgPXJfJS5iKXFfbWtfcCZgdCw9Lkx1cVV1NDNvdHdaX2k0RVhpRlVORGEoRXtgdjReeXFvPm1RN3VYek93ZVQ4USNtUURDbH0rPCQ5V09ITUskRVkiRiFlbVBVdypCUURFWHdsQkduYVc2YkRTRFdOQFB2JiZeQHk+K1ZmR01sJVtEVDZhQzksZDRMMyou'@;
put 'IkBnUlphQE45PHp4MmZPRl9ddTAoIkN9XkdncEZ4Ujh2altpJTMrdG1vSDc5YG9oKzFkNG8/PmBAKy5Fazpbdnc0aCFrfDIqOGkxTlE8QFNuNiZbKyR4cHVjb3VIc2VtPmAoRlMrLyReQzYkYXModHBQZls1LztpcCRiOCJzfX1bdCRsJXV3e3M0Pm59b35sSUJWQ1opaTM2alMjdUhWQzw/RkM8'@;
put 'RHNPbnMlaVIlazBUZlQlZGM6Y2cvYzc+fSRPeUdxR086XklYX1sxQ0RZI2R2Y3NqZi9HUTxxaChDTnVAXTc5OTpxY2RrYEpQcjVVSzZMOFNneUMvVW45TDA7MmVQNmk2c1R9Wi9+MGlCJTd7QkIvUzM2WztnfC8kVz9UISY0ZFZQSU9LX0FYQ35uOixPKm8yMHBwQSllO1o8IWtZVn4zKGQrIWhj'@;
put 'JV96M04jeUB+O3hDc30uZWhwbSVVUzs5ImZMeyJQazx6dVJUciYkZSEkQVdEKiUkI2swRV1POFEzKjhDJkQmRCZEJkRMd2ZAPyY9LyUmIkM5UXg/SGxJbDxaRGQ5YUJdbk9zTjM8IWswRTVpSHVefF0yLzBlO19mIXEiK2NWfEcqNHw4N25MZnA9V2tZO0FtRSQqSFpwSGpFJDtWUUd0eH1dKHRx'@;
put 'QCh0UXVqWFliQEYmMkYreik6YSsjL3pPJHkuNSY5T0hXLy56Q0YuKWE4WzZlYCErXShLeGxtNFdhZE1WKFpXYT0+Yl9yOG9bOC57czRAcj9dRmZYYzptSEhGLFRVfVFAPDg7YW01W1g6WzwsdG5gbTkhfEVqbjhAQjZxazBiKD05ITQjdSR1UzgiKGJobXNUIWI+SmclQTVoInU3cyFofV1Ccjll'@;
put 'M10sL1I2clVqNWpSSShLTXpUSFhkbltYVSVvNEwzeyNoL2pCaS4pJTZhdjBMYn5xbDVDVG0lJSUseCU9Zm1YaCtZQ2NzazlvcztecV5lQWR5Q0R7ajJJNHQuWSViL3ouc3JsWDdrOWB5S0tGVzxmIyY7bXN9ZmovLjNufDZoWlVTYSF8WW5aVWg5NSNKeD99S3MjYEJnXjpdbHsiYnAuWTc0UmEj'@;
put 'JDVodVcqRCsqXyJLRVV5L0ZhKVQ8dXBoeEBeamd0RXdIdiRDXW4kQ11+Z0V6UXxJK0FCdDx9QD1eUitRU3grKWBLR1huOllrSzRoYltvW3F+YFY8fWBIXVNyMm5vVSFUUz5qMFNLeDY8dXA4KmxwSHB3NFd1P1JlWlUxKSVXb3thcGkzaERJSDBHSX1mRTV+JE8uZ3B2P0syJHBuVXpHdjZSLD4u'@;
put 'W1JGUVJEbkdYUDNgcm07JjJMY1kzYnxIJVB1YGA4dmN6NnJVXTxgS35yMEcoXX0pS1Q5ZXZ3ZTRUeF8oZXxmeVohVy8sVHRoeFNCeFFpIng0cVNzPV44QzJEc1ZEazVDdW1uZDchO0B2e2B7Tl8xMSVbQVpdbX5iVXk1ZFZ5aHNfSW1MaU1MM3ptbTk8eDwmOj1fe08vdWZQPTNIdkBkTlhKYiwj'@;
put 'fihyV2dKb1A5U3JBeXQufW5hKV8jTVsldH4kWkQ2ayZZbGhua1Y7ZjE1d0FyWGQkdFJ8ajtHMT1ZRXBOM3lVNFQuTkZLTWVlWUVpWHdZc2UmJS9ESD1pQzNmQFJiKiVlLF0/Kl56eylTYnRacn1UNC9YVWZ3LCpiVUQzJV1hVVJ5cEVLY11yWCVQZTk7SSZ3bS9EdHY/OVM0cCl0dH5iJTM9Z3Uu'@;
put 'VlMmUlUjYTg7bVdfJmo7PUZQcHMzeHZAbEtsUzdPZGY/bUg4JVArIT11eTJnOSQmTkw7KHc/ZSVeYTFlIlhqVWMva0JoXz5aUit6KmYjZzlQOCsxYXYlNzNvZFJiImJSMnI8e0h5TFRJS11AYF1iWzRzSG4yQ3hyQW5JS0khOzlMT3lzT3t8Qmw6I30ldHVeQD1rOnt7e1ErfDJdbWs4JUE0Ol5Z'@;
put 'U0U7X1tJNWpWY3V+QTl3WSMmeTouIVViSmc4OVFlPURaeSlxMW8lUXQ9MSJ0Ui5keFtZNldHKH5tdmZ4d0ZnWmZraHFqaS86W0V4YmxAUUp4SWFXTyNRbUAvMFojcmcrL2VEdC51cyNaJX1mL2UxIXwrNX19ZWNlMEo0L2kqfWVjVUdvKXJzQ05WPyl9a0lFdU1JeFsqV3oxfH1kZiRhUGJyYDRo'@;
put 'YixlRCk3JX1rSSY/OXU8Ojh9a0lLfmVjJih4W0h3M2hibGRILGA1Vy9RcVZad057c2kkYT9ieyhHclNOJVpnejBnKy8mfHJfa2FROTIicU9obG83TjRaTW0jLncpQjVlMEB7KFB6KldGYyxMWilDT115RTYpQkZhMyxAdG9MJHwrNTxMaHMjWkxhRTBYWWIxJnwqTSlnRmN6amwwWFkyMGdGOmU7'@;
put 'Rk00dCU6LjRbJU0jLExNIkJoI1VFOys9UD9AQVgpXWx7PGh8RCtXcUlBfXBRQUNZKEkwNEJsfGVSPkA5dUhbJn04SW1gZVhCQDZ9OElZNVlYKk9BeX11aUhEZ2wxP15lT1JXUXZSPFhSKk9ON2NFfn1mL3VXV1dRdmt8OTQvNCl9MElxYGVYcFEhR01KLywuUSVnNkxafE9SQXtlWDMpbnxPUi5A'@;
put 'OXVRQ0I/NylfMDlHQjs/fTBJZ2BlWDMpbXxPUmBgZVgwYDh9MEk5Pzl1d2Fkc2FFOHw5NGQ2I3xPUk4qZURXbG1zYnh9fWYvVzE5fH5RPyplRDh6TVB1REswJGE6Nm18flE8QDl1c0dETytXNklwR2xhQnU2PkVHK1dkbjVFPGlwZ3spXlc3PCokMmFueCtvRVlgY1pXUkNATSFbOHhWUjRER2NO'@;
put 'aVlqR104eCRRZ01YV3p1KkxnWllsQ21QR3tvTTRhKUxSR2NdKGwjdzpnNDNSPWA7WTp5c3xsTUhEJHxaUTtpaHNIeERpKHRDMHF6PkBNJUVFdXNIeDJnRmNUJWRQQzBneDh1N3xaUWxYb3NIeG1xUzF2QEROMSptczBhO2ZAblMxZiRbJDVbbHtdUDtJeGs3Xz5NJnx1UiFAOXU1NzNEalVieHNZ'@;
put 'ViYmK1godlNyLCtXJklBfXBRPkB3I1RXU3ZnVm40Mnp8YENqX2tTT2hFQ35WbEg4cFE+QGVCRHt0S1FDdXMsc2pmM3NpRVNwe1J5WT9yWEVBLCl9VUlqNXh1Y256JX1Jd1hrNDx3ZV5zaUM2e3Z2R2JgSTBUSF5XYmVgW3gmakh+VzdlLERyd3tfWWg7RFElNGVXNmg7RWNdbiRmOWp3JS9KJVt9'@;
put 'Q0opR3JCUXdYNFtjSWtgWm1GcnhRI1FDezJiVmhUNVRXSXZwcUQ2NV1pJnlGTHtIaDwyZ1hCLk0oWlFGSGVGb08yOz1xMDN+YkdkZTFrZF1FISJ4WiNoeS5WbFNFJEt3MyRfQz9EKVlyfFE5aGYoOHN4USI2KDtmW213ODJDSVJaOiguLm1oU1VJRXMmQ1ZYPDFwR35Nc0RvJXtjRWBXdHBeR0ta'@;
put 'czMmQzAuN3AsIy4sSGVvdDhePXh6QEFuPHBgKihPLF5zQDNDUT47Q3B8SHVfKmo6O0MiVCh9U1s8XUpBQjN0VENfWjNsaURRNSxdU0FGKz5CYGR0OlZEQDpLKWtRS0FVdFozbWdVMzVVOXhNJTdaRz5kXm83YFEkNVNQVSNbbzRUOHRpZGU3JjcrOUUsNz1tYlQ7SjdzZ3F5N1kmaEs9d0xMWXEx'@;
put 'Pl8+dnZ+Q2M9PzIkX250OEo5ZVBuUG80QXlDL2hSPTloMEp1cT1DR1J2Ljl3cVEhPUZ3Oi9mOkFYbXEmb31nb1tCRjV5ZUwkVVg6LClMQDx2Pi4mZD13Kk88eFRVdXE1YShDOWUodXh2T2QjdFlwVTpQWTp0ZnNCK2Z0aWVBR2Q4IXRPc2VVbWI8RHJVPz13V007YFQjW3FtQnd8U0w1VW1vd14/'@;
put 'YVdWJFdvSmIweHZBQy5dP2k/XmdmLywjfSxme2BvIisldEtRYiNjVG97K09tYTRpfFUkeiYjTiJQfmtRUE9fbFlHbVomdzR1M2A8Z0RZaHosLCVvdzhkN0ltQTBrcEQ8QiRwVGs/OXQhN2J6eFc4b3V8UG5OJSYoUCg+eHIwOm9YPFsqWUJzQ1VwejI3Tkk0bltBQSgzMjNxYmd0dnZ6QEs+bG8+'@;
put 'XXw/bTEjZXJPKzt4MENBU1p4RlsyVVJwZEUpaDo9c31DcmQkIi9RYmNVaGM4MHN0XX5SfEszZEFNJm5SNGhxcz8zQy9UPDJee0ljMWY/NERdWGBeWH1xZEZhezpOWD57WWZ1VTBTMFlgeTxPNWZucmc+eEVOJW1RZW5wZz0hSkhZOF5mYl5HVXR8KiN1N1t1bGFoZihaRmJGWGopd1gxS3VfeCpl'@;
put 'bVRQU1JWbU9oclQ1VmI5ZiJPIl9OejMkQkBWPXpFYkYhISlfYkImcGRWdEJ4JEpPU0hTSl1vUUlVNntfN3FycyFlUkQ4SEF1OklNYyZbMVhNOGQmO1cyNSo2M3MhVyhDS2ZASXZ8XmBrWFRddHlodGJsR1BBVW1MX09xI3BUaWliRjt6VV8lI0tGeUxPJXUjcFR3IyJEYj10XW0kKHJQLDwlNEs2'@;
put 'MyIucERDMyJnST80JCl9cERFaGNGP3ZnSk1ja0dVWGlZaz5CX1h7JWRMPHR9LywoKWl1ZEIpOnQrSi9LO1AlZldLLHRAZVpZV004VzBubztyZipRX0pvWFRpMGs7aDpWZ01MNjNxJCx+QTNJVGJ8Wm8+T3lAXnNqUXlKKkdKRThKSyw2WFs2ajlRcD88QDhGLGlke1hbdTNoeSJeKktCYTViVE9k'@;
put 'O3toOno+cEhHI2xHWSxeVkZ4UjNjcFkpNWp8SyRxRFlVaHJPezc7W3JlPSkqP2p5O2dVVjE7NGh9ZjQ9dS59ZlRfK1ZXZmZUP155QE4leFU6Vyk/MjUwfUdOWj0odkdxXTx0VkV5RTp6QCQ0WW88V1FSenlRQX5ze21yczVgWiVkXTNDYDdSbX57eVU9PVZORTFsaUlOUloiTCZdLjRqLnZIQiVL'@;
put 'K0JbR0s5eE55Qi4sK0ZQcD8xPEJAMl1eVWhkIWxsQEN5fmpFRyRoNF9XZW4uN2BmZSx0ZFRFPnReIXU9QU5BcFJuLF8qaDpCJEpUU187I0pUQ191Pks8ZmJgfTR2KXIydmI9djJpSWFVYjMoQnMlOEM9XU8zMm9oX1IpKm98PkouIVskeFcvTzdnREpENW1fdEhCJEdjNmJjeDAwJGtSRT9LZVte'@;
put 'SG9sS09TUHwhQiEkX3U9QCNVbTMkUVN8JFN1L10leVtKe29bXjZBYF1iP3I8fXtAb0AxMlt+JmAjZ1dMaEE1VG1yd1kzYmU8VXhta2ZAJEYxRjs9e05pe0MpUlsoIyNiOXs6MC5fKGs7dEBxeWpnc1hTfEs+Zzh8Ol1ScmFWInlPRmw5bVJmbHMiU3MkWHtyL3xVM2Z4ckouV01xTk1nPH5yfSg9'@;
put 'M0RVT0pBfXUkL3Q8aURbZ2tGQGZNKUs8OTYhRjswUUJQL29dcltxZnNETF4pRDNocVQvaUszeFNvcTUwXzwsaC5LdXFvRGt5XVlzIiNLUjVxR3FeMypvIlhTNG4wemBIbihFOThDR1ZAWzFkaXB1MnteKVVvdGt4RUlNTDJaQyZFWis1PUh9KXxITGElXV59e2d+TmFsUio4ZGkvKUo1WGFKSyg9'@;
put 'ZWtQO1l2T0ZVbGlDfG1laS8pblVRLHYvQFciclBfKCNLVnlxVSl0WW1pTzJiKjUhUjpLPWgkSzwwYGlCak4/IzNLaExuKUZRcHMoXTB5ZkJ3eyZyMzZDXUp5LnMwVk9zIzNwekMueWpYJVV7LDApNzJMdUNjRUh0JW5VRUVFe0NLaj0ucTBUNH5DSzFhYV5RL11bSTMrU0NWWDA8emxmNDI7OHRk'@;
put 'YCsqfj5tcjEyNH0xXS5VVXo/LDJiN0p8VV1ANUI1I30/a0BCdypHKnpxTi5SLyErenI2c05gYT8xcT42N155MnxtOjs2VTFYb10vcWYhJWNpelNiMmQ3SSNuZkZxWytCIXAmZiU+Z25RRUc8IlZPajg4fTFsX2w/UjBJP31yT2h1dmc8KDkucCxROTh7WnF3QywpNHFQW1AvY2hgak84VC98b0do'@;
put 'S1I1IzRESDluV3A9KHZxfD9STlMxMG9yWTVQbzwia21hSSJ7S2h7YTorTGtOYCElLjs+fTZVZjJOYnB1RlI7b3Nndytia35UR1M9TEw4bVJwLHxwOW8zaVIhWGBkIXpJYUVXdjUpYWlsSm9pYWA/bT8wTm1+UVZ8S0t0dlYrKFgzKV9ffVNhRUNUX25uem8sY2lrbTtHSXFNQ1p3Ri9YbTUrdVo3'@;
put 'RihHeWosdG9WLGk2RXRfdFNQa05QTiR8Xn0/Jm91Wy98KW1gKmEvYnZnUz1MZXBefFleLHFiaTBOfk5tTHNnJipgYE9beEJmfmQ9TyFgXXp5UWI6MnNVPTJBL2UxRjU8am5hI2dWXnYwNltKPDxMVE0jUUN3MHg6MzAqYXF+PCtVW007RFNvRUtNT3d4Wik3MDZJYVUmbmxwPXdqV3Y/ejhXSylW'@;
put 'ZUJKbz1GKDNoczVBRy5sQUhEOEJIRFphVytFTTZ+Tm9dLyFKIj9DY24rIXx4SltqK2dtRz1pa29dL1pmTH15OVtYPVY8IU4oSyIqckFkPncvS3wjLzspXigxeV0kUnRyW3FjNkRPUkNSWmJXSno5LnBeZ2htVllRM0JPKClPSCUmOWdob0l+QTJzanRPfndASWEmKmh3I0N1VjQrN3s3S1tWP3J6'@;
put 'ZUtuN1V+JksmPHtBPixacmAiLzg1b05kaW91SmhIbVUhL3Z8QDRsdn1YdSxtREdYblMkVl99Ry8rKS58U0IubzxNeXVbQHAiKERlXiV8WnguRX4vO2FoSTwqXnxybEMmKnVaN1svIUZ5NV0wKSxgPHo9d1pwJT9NQGc5MGIoR3F7Rnlfdl9zV3NBZzVFcGV2bUYoMG1QXilab2tCVSJKMG5dei97'@;
put 'TlpXRyx7T1s6RUlxdmxWfDd6fHwlXSNWbUxQbVU9MG04PXM+MG1zPTBtW3h6biwwSz0kT09mPnpJWzNfYXA9WnZPTTs0XW9vNSxYMT1DbSxhP0s7bmhIanp4NGZzUWc5ZkE8OUs7UygmbzQ0OSR+UyVoMVF8b158NEMjdnAiJSwmWnNqbnkpMCx9cF4/IndOPyI5bV1DW11sNiFvKjduPmdQeUYm'@;
put 'Xk5pU3N2bEsiRF9QOUd9R3MsTjdVSlpaZX19UjhGe3hBSzJ2OHIxN1VeODNALnhlcyF8VXQ7RWQrKGVHXmI4eHs5O1pwdCEhdTJPXmtiOF5nLF52KnZJbCY6fU0pdm83d1d+MDVJRlJndk1SXiguTXdqckhee1dkR2FJYkR+Xz0jPz45d1pwfHQ2TV88QiU4OSs4TStLKS9+bHJIZyx3Qm4+SUxg'@;
put 'RGdQOWtlXy94OiNzOHpXNHo+Qn4vfW9wPShqdFdYInNWWj17YjxaMTJfVzN9OU8+VU5sMGR+KTNsczZzbFpeRVNlYSMyXmpaPDlXVn5WMSo4d216ZiYyPFs8Uzs4I1JKaUZBXmQ+QTxHTDZGTT1BaCQhKnY7QF4pcWBTO0l6Y2tjO31GbEVgMShDIUdbW2F0Rkx3KzhTVFMlPX5OJGcsMSkxe215'@;
put 'M1ZNZ1Qma21Uak0lVTo+VmUrZHpMX3t9OyslPHFyP2FjKSMhNTV8YHtYK0J7fXZzbTZXZF90eTkla1IxSlBjaV8oQyMxZGk/QltVZDJ9UTErfDNFMFg4Z31eKk9hR14sdyw5Lnp3RjJkakZSRm1SQXdlfU5GdG94NGEoPytNYzFgX0QjW20hMV1vVXhDXmtJRnl8KkdLSDg9b041PEJMYkFlb3Uk'@;
put 'LjZqMjFBbXNwR3N9R0ZTYWVCdDxyMW9eKlt0fl8paUVCNSI9OzdAZldbNzApNldwfi9DOGdIcmU8I0VrM3RkIzkpLkV4RWs8W1M5L1NuXnBnfXtLel51S2A2YkVrVjNTSklmNSEscm9keHBQJHtKZmZ8alJ7fGdDSVtbPXcycG1tNC8sKyVWb0s8UzElOUQ9fHQwW2Fddy40OWEvSDhPPXwkTXs6'@;
put 'eExsfG9AYWZCK1ZzOWZLWG5EWmRrN2E+Lj4/aXx3OCQ/cXFKQGQmd09PNFMhSl1gNHZnPyQsd3B9QEQhQlN6a0Z3OHtMNio+YWo8N11jOmoqUjdtW3thdGpRbmQ/V1VMbk97Rix7b0s0cX53KFRuYUlLY0ZQNXFZPi9vdkhHNGBaNnZgfX41cCkvPWw+aHg8dy5zZl8waE87OTtxMjlDLl1HUTwx'@;
put 'RTdXfj96IiZGQG98QXJMMEhbI1RdM0tlTlJjV3BGWU40JFVoP2tATn0sL3FBPXRqXzNLZUwzOz8xYkZQMC5zMUFqTEZYLzU2QGYkcC97JEtNSSwySDNxajErRlJ5MTBqSW5TPDAjaks+QE5+JEkjQHZeNDskX3hqPz9KSlJFfH03MzhAUyFQMF99MlI1fX1UYltPKTs6IjN2PCJrVWtFeGsxMCxp'@;
put 'QzozKXdETHU8V2JBU1hndEBlUDhXTDJ1ZzswUDFoWUxlX01lJjRtWjxpZl19WTtVVGVxZTNGbENrXkV9JVhgPih8cj58JVN7KHBLOXhgNFhnJSl4UkQwKy50M0dxfHJ2Vjs5WChWYEFFZXl6ZUxVYnpHRlQ0IyxjcGUzYl53SG5ddz1XcTRtU1VIVjtdJj1NS2BtKlNDIylMQi8sOG5QUW1xW2w0'@;
put 'OXJGbFdsX3hEcixgSCpgO0IkWVdeKHR4PSlCUDxsVHBPbEwhWHQ6c2w4fmViaWNpJEJxYHFwQFREM2A+RiFtcjhbTVhDLGxVWnVpRy9LT1gmQzddeHJrdSJvWSooVnBRS0wyfk40fkBJN3NPVFFlOE9sbFFUY2tsTCEwbEg4bWZ+aTd8RC9HWV5+KnE7YHI4NXREV155SS9YMFpoSy8ldltxeD9y'@;
put 'UVF+QzFKNEFVWVVUdSR8STM6PXM4bjg6b3lqeUguc2kzJWshMUI8Jiw6L2MsbDFlUFY9V2VJUH0sOXMpYDIwIkAsOFJEKkRHUCNgMl0uYC5XMXV0UW9SP2x1aj1zLEsvWkFGMU86NjtzbSRsVXs+aShLKz84XXcyezZsWVZrRzAybHY8QXAqcCpQbnMpKVB9dS9RZDk1JFlwIW8kb099SGVka1Jv'@;
put 'e0lNWyElVFJjcHBtdStxeTxnalcrKGxya29KfGd3eHA1VTBVYmg0L0ppaHFhcFhaOWV5bF5bT0B+L0dyR2MrNygqTSVfRlE+YmwqZldYQTdNcy98WjVZR142NUs7PTdocloofmJ7U14jQWZ8TCVXWk9iaHh2PHowPUBUXmFVXnFDLi9TNT4qVmdhd21ZZjYuIm99JmI2dVRNW0tPNEsiS30mYUpT'@;
put 'VVhRVTFnR29zP2U6XSNVKnNYeWN9cX4hT3kqNHtPMyZCXk9Xam4uL3EsOT10XlE/QCMhX3hic3BCUShFRnFuNjhwRD4wPWxMWlR1UyswJX1FTzwySGkyOTI7aHlsblpjVV04Jno4UT45JUdhVytWdjdXO3xhSV1EUWxLaTN8d29gWCwsfmpaWiZYIyFdMkgvUjVQM3oqTCFdSiIyUl0xSi9xNUY3'@;
put 'fWV2K3lrOjJZJSRadjZAKzk7KHgmMWM/RHR2ZEBlW31TcHkydyVVLnE4LGY7RWZ+cUgvRl1xQVhROFRYdms9ekJQcHUxVGI2cUVYfCw2eX5pYXhvK19efD49fC9GOitzZGpYfFZXbls8U2Qubyg2dHhYMVspJUppaE98al9UcGBCZTRhIytPMXNtT0VpLzkqJj5rKmVhYHJsIUN2Nm9RUEEvJjJ2'@;
put 'cDUlfFdTbCMsa3ZgNnJdLFJmSkVbOHwyNn1DKGgvUH0zIiRJRXhJfEZFK0dhWVUsTjEsczN4KGw6K3J1JiUjaWZfRG9ndmQzQyV8JiE8PUMvbGZ8TFQ0SzJReXRJfmA6V0QvJGV7UF98YCZJe1pIaXw5dFopNHt8TEIrekZRXjNvZG00X0tVeE91Y2U4PEMvc1UjWnBTfjFDNiEjbz5AOTdIVW5X'@;
put 'c3N9ekw4Ui51IVFlQntzW0JqPG18YVdnPHZ0fHluYm58dkd5Unt2IUBbcEIiJiFSVS81Nl9GW31ORT5GVlFXLGQ8XXxaIz8uQ2IiM0lIJDY1Q1B+SlQhXjtOS1BeLmNbPmw8IV1LdUhwenw7WyplZHZAcD00JFB1dXk9RX5uKCZnVFQhJG9jLDZ9UFVCWiZrOGdAXSsldlFFQztoPS4hfjVqKF8y'@;
put 'P2o4NWVaYWMoVH0+PVtwe3F8ayU4SD9XYGlwMS5JPU8mdDAlfVczPU9xI0YjR151WVEvbnFEN25ZeDpOVyxLJC5PNSZ9cnhRPyh3aldHOlUoTmRSY1AuLFlsUn4heHJObixRKVVRaWQjPWkqSzw2UzE+OHE/P297NXdRNzRzeHVfVFQ6cFI5biljMihSMD89VWlfIl1WbGZ0VTI8WCxDdFMvLD1i'@;
put 'JEkhPUp2SkZJZDt1eC83XTw9V1JXbUEqL1hrW15tOEQ4M3BLUzRzKkpmOzhefCRlMTRufTRDWEZLXkcoQWBVanY0bCVYIWtWJm9xOEJPYDo0MkVJOUhAKW5UPk07eUQ8fUd0fnFOXjhpQT15TTlRS186OnRWO0hhd2F5dVdmJT9WbDNPeHUlNGlGb3F2ZkM9R05tOn1Rc014SH4lRW94cD0ocjoo'@;
put 'RGs8KT8qZXdELkVWYyxSfWRrVSlCYkdrMTpbNVZWPT9jaDlldX5xU1A7UnxAIjQ8Z3ZOIWU2Z35xPSU4XlZoeW9dXkk7UXI8eDtXbDR0PXZpM3A5PGlVfVhAQnI0IzdXSmc4My9bM057azp+fVl4e0pgW1FudXs+b0IwUj5mOThIV2l3SDxWfV5BIX1HZnVsc2l1WFp3Rlg0fU56fk97IVdoaThD'@;
put 'U0RZVihuMDUuPFQsKTRGdCRrWntkaCRrUUx0Tm0lTmZzJkByYjZjJUglfHBKQElqNkheLlUzcjE8dGdWRVdFYGdzPShDekJNTT1kdWhQeTY6VVghdk59VlFjYGVrQmJMVlIhdl8yYDB6NiZbPUZxNGBbKXkqQjthLkk5S34iZFB4aWcrZUc1QlBPYGN0IyZaYW84clQvaGBBSVN0RjsuIUZnJE1G'@;
put 'Z3IjUS9vfGs0PU0/V01IalhzSURhMnVYZCpBcUAmdmtDcnksWEdYN2ksNGZreF5ZMzhCbnA0XjI0Wj00ZUxAVGl5JHNASXM4RWI/eTQ2eCY0XVhBSls0NHpjTyZaNmRBSU48ciVQOkU2T2lpN0RwYTEpTDFPQ3hNekZOXWxxJXg4SnheTX53eHpFe0xBYV9+ajVheiMpXWIuQTVLeXBlQXIrOjtC'@;
put 'I1ssUE9IX08vZl1KZTNkRDwxUGMrPS85YHVTKCR6Z2ZEcHdKXkQ4fUNvVCNpXS5vYmUiSStmeyUsLEpybV5DT25OO0A4YDFOUy85b3pXQWgpW0hFd2prMyFqc2I5SHpGMls7PVUoWntNRlkrZ0sqOWRfIWhHRnpeKE81OXdMIVtIRj1sYnZ7RilpVVczT2VDcy8hSmYqY304MSpIMkpvUSREdFZI'@;
put 'TzM3fjF6MXoxbCMzN1FnKExEeD91dFkqeShCKCh2KU1RTVFNUU1RLk1jR2JFVHdaNlMjZU10d3h8cztWTVh4KD82TmR3O3FLTDlIPW52XVtXdVgkZ1B7cyM7KXNYZjw3YXZqPkR7TnhENls/eE41ZjF6Vk1DZGl5dV9fPikmV1ZEZmBnKWFmJWk3cUMlaGdtTjhbZE87KHB0Yjk1YCk+blRYeFk1'@;
put 'OTpvTm5pIkREbTYlQngqRyUsOUg6LGNwbnYsRitEP1czcSZNbW95aDRRfHdpZkY7eHNwJVZGWk1eZS9hYXAiW1g+WyFBZkJ+bU46alI8fFtlZT4pXkA5fSN4Nj5FRk95TjoyZlV6Qyk0L3FgUF9mRFVTJnpFSl5DOGFXTnl3XyMsND9yYGc7OTojYGlKRDJsdXNfXmg5TFhISTxsXWosOGlSb2pi'@;
put 'bVtXZ2BhLF5ZaDkpaX1dJCJrP1AmMl01a35FNlFHOVVvXm90WWJGN3QjaC85S0A2MzlXNyMmZU8vIzErLjZRNTl6REdCKHFSPzVdLkRzLyFKenguby80KDMwNXRzanskP3M0S0Z2dX1xbjljemtCMjhTZz5dXUxGeEZ7XX1rVE1xWCJTd0Z1dWMsK3Y8QzVDO1R2WzR3c35+YGxfWHUkMWt8dCFX'@;
put 'Yng5Qj5QNVlnWW1PakhJRylBKXdabDNXQ04mMUNpTCZbRjZZakw/Q0ZnejQ6bHxfPnJgU3VQR1t1RSR1P0AsZzB0Ni4rT2ZafUx4ZCNXRUQpdyw3ZzR4YHdQR0dvWUl3I21kSjh3IW50ayt7MzFAM0tMPC8vT05tSzV4KmJJOHYxa1Y4WjViRzgoXV9pNDQ6YlsuNllXezxQJVo9YVVIcm9nTklp'@;
put 'W2RiMjFTUG9lYllEWTJIYkBoXiNVXV8jP25ldmk0Z3hNQVV8V1ZVdmdMZmM7aipMOTYleDc2VSU8LFg/b3NnZ1VES3YqJTxaVUkwaXh4MTtdfSlmbjJnMW5JLH5ZRVFJMm0jPV14KkkvUVpmXiI3I2RSTG5xUCswYzsjUlY3KEg5R3diRXw3V252S35kWzZFJXZjJHZXSDRfd0IvLkBba3FXSWB1'@;
put 'LyM1KUNzRzlGO250Wz1xLDxJI0M7N0s/YEYuJEN9bEJJJCRPbyIvZF1kdktobm5QTGV2R3UsQSksMDdkM0w0NT5FSU9PQ1hAKmwmcCFLe1dKeU9jKylLV1lXSnAxOUkke3RZbkheZWZXW0hyQUhFbjM9cDRSO3xAcFQlZiFHfGViKjduUGZaZW5WITJwYmprJUc8OHFlO0ZYJT1ER1BQbkImKlF+'@;
put 'RFkrVndsNzZVSDthZFtkdUhQVTBKXkQlZTI+QGExVzNDUX41PXl3dmNEZUVATSR1NH4mO3FyVV86cTJifUFic2JkNDs0cClXU0tlPyw9R1dCPDpiW3RkUDs1NDtwQSQ3Pzw6PWJaOGMpKkgyc1FUdmohO0FqOm8qLlVENG12UzY0RV1WeSpGdmxoODcyancoQ1FhRWtJM2ZRR3pgJjJQVF5SeW8k'@;
put 'dSRVbXFvVCVVUlY5b2NfRSNbKlhIT2BHXTpaT3RYamE4JGVRZSxTRDg2OHAyc0ZYJGdQe2hbIX5EPHNydkQhVC5QWmR5PnR7PG50Lj5GNGhxIjh9bkxhVyFETj93dl1xSTBtWy51SiNdOmZtJjRkfHBIQHVmfSVbcS9lcmdxYkQsXyY7WEJebEB2aCg5Qj5ycyMwQjxQZjRXP1U0MnJFV15ad0R0'@;
put 'LCkkeFFwfn5xUElmY1VTT2ZTKHFSQiglXypEdmxtJTZ9VTsjJktkc1lWdTtEVG1eVW9LYnJob1ByaU4jPTRXbWh+VSNYTFpoOS9kOV4xMEdIb3tdYnojcSo+WkE1WTdaKEJXXnwwRjAwdytRcUdQYThWakc0MTNkclFPW2F+fW5lXzs3dWVSNH0ob2pOKn55VEBpLiZ4WCV9W0xBcDM/X3xNK2VT'@;
put 'dT52Tn50PEU/e29EX1s/Il5LbjxoNGR7TV9zLEJwJkVRdnd5MVJYIywlVU8kaGcsMVljcXE8VGckaW9JZEhDSztMPF9ETzh1b1Z+SUtMV2VNPG1YfTNHQmZSVUU2eTpiciZuVmZQOz97VURWJGtPRD8/U0YkaF97dDw/XkhOJmEhWGY3U0MqZCRZdigxQVQyWkZFZ3hOZXUlNVFwYW8valhMO04j'@;
put 'Ii9sfUFWJTc8QXJmenJGOyFaUFR9VTZkN0c8XnV3aCRabFpEQzdCRUdzNElGViJLeCFHVWFoUFY9amMmKUddJG4hSWMjZjVPW3xjaDlBNF86JnUhInRaYC84VVFGUU9BUkdHPjxkKVteT3M5Ij4hZTkrdXxCR0hRVXRYKmMrI3dIQURvKypNSVUlbFR2KU1hZSk6QXJdTHlKY30iK2hfZSh+Mzgl'@;
put 'Tn0mfD5EckhdcC9fVTI7WHJIOnhPP3whdGVsdVVDSiZeeDshS0AhP2l0VUMycmFmeF09cytJfTVKJEdxK0ErYEtpJSxefFJSeiZEJFJRJUhIWCF1P2VbQj1AYG1qZ2pXM2p8cm5QVFArYD5ubV8iOTI8SnZbfGd1aUMkeiUsdU1JUXczZ24uenQ3Ikd8YilFak49fnIuO1ZzXyhXcllxfSNtRGpb'@;
put 'RTthIU9GUmlDMXM2LCR3OkBMK14lV3Y4OnU5QntiQk1uWFF8V0dOWUU2VXdoT0psSX5Id0Qvd3luejlGREYsbzQhcHJEcyQiUSM0UDxiZn5XclFtS3ovPXR8QXsqUC9vLG9VTyZZZUtlIXE3WyYwbVdxYFAxdDRFSVB3JTowJmFaYyM6QkJDPG8hRzdCNklSOUFeY043RCFUM2R0KnExK3ZDNzlX'@;
put 'NWpYODtkNnFvc1JLJjVUbkZibmNXfSRrX1RlND9TMChiIk18NTFJL1hHM3BdQ3hRTUVBL3J1e0krTERhRE9gKysvQDYzMSprUzV8TVhLKUZ4Wj5bInREWE5fYVdLa3d8K2ZSc0Eybm9iSShGYCsubzhGUFBhcD1qLkgiWUlqcj8uUT4sYTAmQnYqO0gwOkhPN1t6bmdXW3xrZ3VgPyooYCk7N2VM'@;
put 'ZS5NRmxFUClTcUh3K2hubCVFWzU0bnF6cmRxKThsWWprd0ZFTjcqfDUvbmdVWXt7b1l1YjhUbDE0YGh5K3Z0d0haLE1WelIkfn1TJCpkKUw5cHg3JWN5SSo2UWNRbVZKWHZ8UzBfITdDXyh2JHhMeEQuRURWYFZ8UnZbUi9+JnQoIj4uJV9+RXxKNE4hMiZrNF5NKU8vOXQheDF9bCwreWElR3pv'@;
put 'UTc5fll4amZ9cyIoWmkwNSpoL0Q7Qi9lZSYxQnZfZFFpeVQmInspdV1FdD4wcHhhO2pqOEZ+MHlsMmdMVUVtOyVCMEApJTloMXEzPyhVIWg8MVdfcTxYb3BpWF9nc3N0JD49VyZ+JTcyfVd8KE9sa1soVSNzcEVSLlFeaEx7eztafXN6IkhNcUdefCZHXkgxS3FbXSRWdHBiYyVobV57VDNIcSVu'@;
put 'YGxdK1tCPip9ekJeTGhzSnU/RmFBV01ZangoU0RJRzZPM1gqLEE0IzJucSxuKzhAVzxeRFo1SXpEfThKKFNCS3V+XVZ+NCt2SHs7SHtuTXdWInsxTD9qSD9aaj1zQ19YQ3VENkhlOV9RX2A/Zy59NXZ9VGBLcHwwTCJVTkA+dnNYP149OWAsQTRMMjZZbil1bktvUER6Zj1jPD9HZ0dTOH1kXWF8'@;
put 'TF9dUDAhfXh2QHcxX2p8TzIvOX5PKTI+KF9RdU9eKFY9XV9Id2lwKzRUJlBlQ0xvQDNXK3lVJDpDMTJbWCpzcHcoKXhmP3B8Iy5VeDUhVCNkcyQyeH1ocHs7c3J8Xn53K2JSZCRybEYqLms0eTleVkBdTldIPy4ldnFMRyZ+blA1I1gvMDlYJmVNYTBrX149P0UwITdBUlgraHhkTXxdXSVBUEQu'@;
put 'SXhqSkZRX2JQcEdHbykqUzdoSHg0T3ZoaXhwTEI8VCFteUtMPDJmKlk5cl14K1JuNnU8MixDPlIsQTw9QDl+c0tQKFQpWmpRQVJxMUtMM3N+PlliW2oueEczLkk9QVt6Q3s7XSopeE0kOHBVNzIvUFFQMn59aiVEVU9md1ZBWy9LeEZWRX5RJktNJGt+W1pgRjBzUUY/djIzPls9SW14Q1Fwe0Vp'@;
put 'LGgyTmAxYXBsb1hQJGFXP0RmeGV6ITZzOltnaE80aDhbMlRdWnFuLnh+dGdgKj52d3BgVmNlJC9rbHJlKHhlRjZTdVQ+PmVNbXVuIlJOTW1JNy50PjVSOlZ4QXNBcGBvMltQNEBWTDYjQmcmY3x+R0AlbnEvKWpMeHheRXcja3kubWN1SGRHWmBNbCw7YE0oe3U0ck4jKGtyL3lgLlJDTXgweyFZ'@;
put 'PyVxZmhxIyhqbFRvUTlybUMyXkFxWyE/YWtZayZxdUJIRVl3R2ErY20jT1dnQCNVd01TQl4xWSl2bmk+ISZ2MSlrPmE7cHB4TDcmJk9FREYxOTsjeWQ2ZlNkK3phcUdkTCtvcktVdnthYWRESTZKL0t7MTA/MG1BJXU9MV4sJjJeQkBBb3AyYG1OUExbKlUsYGsuVXRIalRyR0N6UiZaWDF4aGNA'@;
put 'Sz02Z297Ql11SWpNKD5lJDFtPjMvYHdrO3B1ci8+MHJ1QC81UzNbUSFEbX0kMmZANDdNX3V9a1J8Y2tVc29BP34oRDI8UyYvcio8OiRZN1JTenRFMSozNiRTODc5RUEsdzg2RXAxeGx7bTdSdylDR2NgbVQueSpjbXMuajV4MSlrJkV4a3IudHZAUnBdPz5AV2xnMGUuZWQ0XW99X2l3fDJeL11u'@;
put 'JnBmOjA3enA1KyhzO14hYi5CPENnY0VrTkNYZHhxeiZoUiEmcEksISpfIW88aUpmPClaaSR0JGpXeFI0TSxyJiV3bVU7elFFM1hoblE7UWJRQTFUJEc9a302ZyVHS3pIVSpNTDYpOzJneilrcmQkTn0iQnNOSDZBMG0hWE49JFRSPSQ8Om5qamc/JEBZNWJ4eFhuQz5ldSJuaVQ/PT14QSUhSjtG'@;
put 'b0NBTjtxV3hLdiElYWlBeXZVIjk1JmghUldfRH5qQVNsdz9rbXsvKmZsXys3PSlFMUpnaTRSVlh1fHFkUytdXyI9STh+eUBwaDBYMGlGPzVAbUtTVXFSRXhuLHR9RF1NXlQlKy5pPkl9UkR5cXpEK04sPTFUJEElfWtzIi8rdHVYLmRLIk5LaGVYdndseUszdVNHSiE1VHI6QChPak12ZzQpQkBj'@;
put 'QENbQmtBU1N6Xm5BU31NcnhaV2Y3UlVgYjxXcXxmUyNHNiQsOnh4Y3NeXWBjaHgjUXRiangvdlJhTn5QKFRYVHY1Jl9pN3pfSXZwTTUqLE5bVEk8QV9fVVg7WklLa2AkLEpteSk3UWBqOUwkam9hXl1ueHBxW2deZSVHSX4qLCFbMCxdV2A2fVlFbnJGSWFqaGwzXkQ6NT1FWXxwTj4sLiEjUlR5'@;
put 'RFRhcygsIT1xZE9Ma3xnbEc0YXt6YX47PHlwR0N5WDBTPVdYc3U0fjBhOyxRTkwmd1lZKnshTzs1PntxWkJxWzoyN29tLkBsMi4wbytZc0VDVGwmRWQ3QDVxdE1iN2hdLlchUzYrPTwmYF1AbFc0S35TL3FOSzowY2YjQmIpOGk4Q0FPbjlLOmlQP1VfQz5kbFQxLGQ+Rj5RZkIoJmIuMi9BX1te'@;
put 'KWpdQl1ATn5zNmF6ZXNaLHR9YDJ9NjhTclpnWlFFcHEsXjw9SCkrXmpLalQxZShKWWY5Vlo+cjhrVzthUm0lbGBhWDVmO0dvKFJAdkI1ZmU4NixUWUhWZFB5JEU7MUluMWNaTmhkbmR6TjBsJWwqdS9+bWpePCM+KiEoT05rJT1yXkBvbGhOVmAyfFdgb0BSJlhuVnxPbkQ5VTt2R2tBaywqcU1z'@;
put 'd0FAdWN4I34xSyNNVSlwYnwvPSZiQjNDM1BnOTNQcFNUUlImb3RxTyhfc3FRU2ZWZndYfXZbJVkxWkBfT3FbLj1ANio+c0JfKWMjKnVPRjZZMCohSittKywwOWMoKiZyTSx+PSorU2ZTbyEhJWl7XXdJMEZIdGJjNVJkZUUrOGJaQkhhdk9uTSQqZCEoSShVMncjTH1wdVJsLDVFJHBnLEBnXWYx'@;
put 'Q2AhQHBjcEcybTZ6aVAhWFBXZiVQaTt6T0VKPWlPUmRFL0dgNVh2byx4ZlVtSDJ5e3ZeUGs+UiI9bmFGPGJjemBwR2UpViRAMHFAPmw7JW8+SzRVMFRHeERyRzE2b2Y7OW1mWiw1cFp3T2heTXk4WDlKZlM7QmlwcCYlNSxvOVRJaHhjaDRsKD1+YnsjYCYrdW1gIykrK085Z3FyRTw/MXY2LEA9'@;
put 'LjBzSjZrbCxSPlUoNFhyfDU9dTloImY+U2hMe2JCTXFjMSIsL3tEK2FJTF41cTYqZWdieDkkPEB9XUpfWldfISQ4R3wsSFAxPHtZRE5Hdm1MLjMuaEUxbXJtYTtRdldefHReLFM+Wj1JWikxLncsSXlgWT5qeEN6XUZkRSlLSHVXXVl8RlspfE9DdjJXUk1FPzBvLF5SXnYxKUFRY09IdTRFOjM9'@;
put 'Vzs2VFNPTD09b3NPbzVBOlArX2s/NGZgbmhJRywuUypPQiZBaCxtLChZblJtXUN4UVAxOH1EUCY7MzAqVmd5NTFhWFFDZDEqRVA9ckQ3Pll5TkYrPkdLTHx5fStJb048IUVtNkpGLzJuITYhJHt6am54eGR+dFRtWXAoJThZQyxgeTIrPnpeTTddNj5EdHI5c31dcyEkM0JqbmBLOXVzcn1zUHEx'@;
put 'USV1MyQoQGBEWjBRNTVVJSZuVTBeSHM0fHJMWUYrfl5iJTIhWH1JN05LZS8qS2B6VWMoeUIvOHY8O0QyUWVyfXI6LE5Ufn54WncmVChqTFNMWFFKPDp5NnFfQSs/RXA/cFYjdX5ZREFPZlo8Q1svSS4mSnE8THBzKCw2fCl8VGN4XltrOnl5el0pVSFxaHd8cns8NiFWWDEmM1RbfXBzcmguRm1N'@;
put 'enl6Rm1TXl1iTCQzXThpOH5CT0I9QD86PCVWaS47Oz5OODslK3Y8Qi5Ba3ZWTnlCMnRFRTJCLkFrOGUiMjRyIlZFI2ElTzt8e01hKENuJGQkLF1PPTBtcm9PI3pAMG1jajJbTD1IflBrJCZhOF5zM1N7cmQ/MHJgSTMrflJ0VXpVOGBXNkpxJmBDc0IraFp8P2g+QGZzI1dwcS9NJUQrQVVeJURi'@;
put 'N2o3JkkyVi4oenI2Jjs+bDdVejt7UnZAQXMxI30/NUJ9UzxwLnNOd0VjYkpiVS5OT1RWK0JAaS5YaTJCdGFUYVtAOTA8MCpOY0gqWWRaQyJ2KGBOQyJ3RGVMdlppIWw1OipeREIrPEJlRz53ck5sRH5BJWM1MTNSJSpbRkNBQUFBQTpDUGoyQUFBLjMlbGN7PDYhITNUJkEyaHdAfm1RP0JDOkZs'@;
put 'Yj1IPDphITJ5fGkzT341P2QwMj9KfXtXez5Vdmo3amRDXz18L35gMz9AeXVpWXxnM0dxVE1ad2VqUFRIUyVoMjFVJD9TdCZAcj1VZmE4e1MiI0szMHJkSmtkTEJEZnhhSi5ER086SWxoe1JpNVgod0VyLFQ8WCF3JVFRaDNLanBodygpTyVyMjFiRW97VUg+Qmw2QENeQHxAR2hFXjR+fWdzbnBj'@;
put 'cmIyJSV+QFQ6JXUzbXNvNF1UU3gqV052NFJVaTJnUFl9Z3EpKm5XJE5vUGk7aVJPOFdLJFF5OUl5Zi87aFE4LF5FTj44X0ZSRz0/ayJxPV0wUCRiUCE3VkgjdVJbZXw3dTY8Zk5bN2VZdm92QUpePHBmWVRib0VPeX0zN2xWMytCLj4pPTljVmBgcUhdXjQ6PUdydi86LzwmUCw0dTxGOiJhOXIw'@;
put 'dkRNQjcoPWJ6OXhEW3hEbnxROz8jfXUvbXtYK0goa0trdlRHWllPSztHKWljSz5heDQhOXdvcX0lL0Q/JmZvYmdkfC4xZ2Ipa2tjW3tma0BqaCVHZCViZFh7P3NQYCxYP35KIU9UJTVtRD0pbSx3YlZgXy5AeTIjQ3hDOFloQzZDeSkqTWs6aTA9cHMmcmtddmdVTzVEZmo4b3tAY0ZAejFRZjZn'@;
put 'NE1hJTE0Xmk0VXVSdnQqbSpbXXJ7Z0dGbSEjQWN9UGN2R15uOyVATkckPj41YVtON0tHVDVRbl5QNzw0KVMkP29tPU55M31RL1hvekdLJklxaStEJlNbZltvfEY6Z2J3IyxfQ3F7bnJwI3w4LmdPOTRDSE9eR2Vve2o9IXp3VzZLYXhWb3EqZnpYLylOJj4yWGFRTF9vfGpeQGtZe2smMmhwTyld'@;
put 'X00pYUpobVZGMGVlNV98aWRLTkdOaSgoVElgV2NSTS8sJCM9eVMoMWROLl0jZGBnJWtIRlJ1fUhRd3xTSXB0cCFTI0B4LEsuMjt3WzxbRDE6YygwUiZQcSJ8dEVAbHN9WkIwdl1ePWo+aGlbZiVMZVRBRUhdPX1aa1F2PjBmSnx5SHwrP3pAMXBsaXhzcnZtOStYNXhtPjFWfGpLUV0sS3R4L0ck'@;
put 'XjErP0d+Wi9CVTNBb3tgdzVmIzZiTlhqRFlbPF9Ob0w8ZVMvdj8+MDt4OjYmfHd0azkvVEYpR1drOlM1Vm50Nl1GeG5hIiFkfXBEb11yaFRFVmhmTyM+Xi9mfTAhZioxU2BMNSFdO2htQml+IiUvZjM0ISVDdm5BdXhlc1M0TWUyYXpSPWZvfUMuaW1pezdQMS5+Jk5Acnhbdz1kNEQxRXhVT3Vd'@;
put 'cTw9bnBLWnRKJGFURFN4NSkjSz1nPHghSEp9OHQzTF0qJW1vXThzekpqU2NGTi84Tj9heWJaRFMkTV1PezNqN0JLJjAse0wiYFRieVkzSGJjcFJCSWJYVjVZPG9+Rk5jfEYkYGg5Zy5jXjZsTXdYemdZT2FCRmBmdmVJbXVqVmtUUmxfaj02I0BHSX5BUXlGTlpnLz02e1hKfGUxN1hQI3BjbCtA'@;
put 'NjRoTWo9T04uTnQwKnR0NHl0TDohOTYmWXRtOWkvZV1fOV1TV1ZbOCI6YHJJT2UjWkJ4c2theltmNUVAYC8xezczbntYVyNCXklzXT8/Z3ouXT5DK1FlNSkxOypgLnI6M28zJWZyIlFqMG05RkpETHBkJk5+Zng4ZjtKN1NRdm5LbXp0U3pUUm5KNngyMCxkUVRvfCVwdFIlVWlsZlIheTxYaGVQ'@;
put 'bVJjVjY5Uiw/TGVPKytOW2k5QlpaaW1YJm0oIjQ0fWxHWSZ8Rndsd2V2dDBGaGh1MWFFVFZ1PnA2Rkl8SWw0REE6PWJZLEtXOE1jP2Y0XjJ0X19+XXJ0al9YR00pMihnM3pbN148bm9MR1tiZF11LihWXWQlXjM/TjpTXkI/XylrK1p0SigjdzpMRU9lX2VOQ1F5elZFXiZeZzNGWiM5Y3l3R1cr'@;
put 'dVdMeyRta0hiWlRDMiNpcWE7QTZvOkZIMUw2VUsoRCkrYytwJXlsI2l3VkhCPihdKVJtd3s2b0gqJiEjaTk+cWMmWip2R0B0fXo7K2g+NzcsXWUjdnFnNVZHPzk/Xm5mfDNvPiNmSj9PL0RuP2MhLyRMcXhwVl5oaT84RltfKHcuZWovNXchcHBtKlAibVFZQ1dmJEQ7dnY7cWtERTB7WmBzIXVH'@;
put 'JXc2WkhBMF9uSWUhcypSNnFfdnZDYVhtMVJUV2BEPXgpeU5hRSVXdFdqcChWYGpRTl9VJD1NfWt8U0QrJHIjMy9pOX1sRW8yMVo2anZLbTl7fnduOnElJDh5JT9SOFc5YHpdPmhvMFBrcWpWRigiUzRLJFRCYXs1R2F8eyg4OEYkTVd3XSRxKFltZyhTbGhLeDd1LklYRUdrQHgoOmleVG1xbUYj'@;
put 'eDJ8KFJddG92eDplbmIpbD1JSGJuMDtIWj9lc28xKVRKVE81ZDo0M2BHfjNlNGxZcW9jZSJye1ldeTgrVWV1RWdCJiluNXhhUTxNZyRLZV8zcH4qYk5idFgmaXY4bWxeO0c9S1Y+NC86YCp+aiw6Q1Q4WFVROFdNfTZENkdAWDp4LF46cWcmW2NUSX4zKyI/Zyk9RlEwOnl1Z2Y6T1BgLlFAK3tF'@;
put 'VHkwJFJETiN6KSJxL346OCM0ckhATXxqL2RHaGxYWGk/dWZVR2YhSWRPZVlBJkQjUCM4L2hQK1RweH5aWUs8M3QrO258MkYrY287fi4xMU1+Wmx3K0VRbTciVSRzO2F7QG97UDlOR0VrS0wxeDJqXVI3Z2NgZyh+OlYqTU5FaCFabncyaUUuKCYsUCRBSCxsRn5pMnRDVVtNKDp9QF40aHlFaHA7'@;
put 'ZH5aT3s6bmY7emQ/fmN5UD9RNkEwTUU8V2hNLFdCbXlXdzlkIXsuJll2c0IzS1E+N0RrWEV6KjN5WFZJTjxhYjp7YTprVyxLeSV9Vj45fHU4RUZzMUM6PGR3STVQbH5nTHkmbEBGKmZiVTk9ZktVZ21ybG5EMlM4azF0c1RSV3NhOTNpfjJPJXpBZlptZlE1PiQsJDFDbS9bcGhGYm1HdDRYIypn'@;
put 'LC9CZCRzU0lCejUqV3ovR2I9cSFUQDNQQlBKYSpMVU1fYHZVc0lNYnNNUXAiNkZFV0JFOFVnLyhKUEVEdHMyTXw0N1kyWWIjRjFPT2pXNWV3N0VyVW8mXXdULHdwSG1aJXpDIUhHOW1CMSRVWS9XbWc4SFs+bFcmcEFxfkg1enB6MEpwT14rbmJrbjpmLz9DVzhIfG5mcVIwWzM2OE5Fe20lIkRB'@;
put 'RU5kT1hVeFg0ZUImdW9iNzdRajpBdjlOemAhbmByaXVNfn50RCVKTXFbeGkxeD0+b1l5dHdpZnAlcGVENUVQXyZAbDluYm9mKHw3d2xbQFB9WTBLPnRSIm5kYXNCbV8qNFUoKmUyc0wkXXozSWZqb2ZnbV9IZl5SMShqeS5jJUxnczE/fVlnQGJNZ21gL045c3dIbkEqYkhDamp1QlNMWXQ5QXpI'@;
put 'bktQdn58VzNVaFk7clpMNVhGJitGNmRiNUVFMShyWWc0el4mN15EdUtWQD9WczhfYGlrM3UoJF5VLCkyTTVLNV1lbCRgSlc2QHIlfHZySG55SjFDIXRGT35PeiwjMklxdDwuakxJO014RXNlNF5rc0dhKz1rVWpeWlkkREBRNltJfU12byZGZkclSldVZSUjSWMhLz41RlB0OlErWj9RUFYrO1co'@;
put 'LyNTQU0xN3U7cWlje358PzY/QF1xNk5uOkZ+OWEjQ0JsdysuK01xSzJfK0c/Z0x3bE09QmpFMyl5azQyY3tfX0pVU1VZR3NFVEg+ZiVFNXtfKSQqUD5fbVpGcz1CdyltOyR2Lnc0bUtqfGxkJSNSJEN0Mi83dVpoeVhITUQhWCJ3WC5yXntvYikrYXR9NGV1NlhRb0x5VXA9KVg7TktMK3hnWElV'@;
put 'bGF4LGdOVEokcFYvUSIrc2ojR0J1PVA5XWFZemlqWzp1c0k5RCpSSGsyPn50OCFPeERlZHZpN3kmbVhPaG0uLiRvITVKd0kzbDBlRDJ5TU9xN1Y0YFJALEBBOGNfdjBheD12IS9YejNQTD41aCJkMnQuSj8/YXhFfThUMGMwbltPTFleeVZdTWRXXXxKdUJBLmxbdjA4LFF8anpeSEhAWGozLFYm'@;
put 'fHA+PEdxPygpYCxbL3ZfXWd6ay9DWHYiJU9pWjA1X3YwNWcvRnVkIy81ent7eDZ8YmRIMFkvWUkjUEo9PjBAWDFZaj9ZeDp4JSR4cW01ZFg1ey96O21fPG5qR35hZkgxe3hoL3BXI09XJFVHQH5NdDVLS012WzFGckR5X0x4WyMrW3R7YVFfIyJgdmFGayRDIUZ4SDdAQHsqJUJFe2U6bHhmSjQ+'@;
put 'cmgmdVVHb28zMjFraEIzMlpIYjIzKyNXVyVZM2NqXjhBMTJqZ3M4KWFxeXV2fD8sYkhAPmY5WUBSQVpGSWZsZEViU3BGdylkW3xnazMjTlJFJntJV1F9YD0/MF4pZ0MrSXBtbjFTT152QDxkbSsmXkg/QnNmVyV9TSwhVlMmVVsvfVlseVQiP3peVl02bzcub3RQaEJYP3pwZDYoL1Z7Q1hxKix8'@;
put 'Nl5IQjlPdzBpOSVjOkg5aWg2SFhxKCNebFhlb2FQVmNselhmSnw+dDZQYCJzZihLSGhpd2A8aWVFQEZpTixBLmhWUVJfSmw3fDV0UVowcEJ7M35telsmV3x2KCovaDMsS1RbTCRjfmUsMDN6bEVqb1N9QHRwc1VYYlhES2V9XzJWOWw7eC91YFVNR31aYFRXdn1PPFJvb0A0TWF6RD5bWSlXUik7'@;
put 'T1Y1UyQ9VHoyaTd7PDdbL0JKOEpaM3AmWFIlWjB2bF1Oe2Y3VmFSZlN8WzhrbmA9ckxGKENKNX41N2FFMiQ8bkNtKk5bZ2Y3NyF8K2hmVikhd2xXZD8+JmEuWSUjY3MmWiUiQS5oM203KHdgQEM3KHx3dWZIMWhpdClKMDZhPzxvbz5CZ01eZ2EqN1BMNm5JcypoTXpeaW4iN312TjhGYyowKHt9'@;
put 'Kl5pWyh2O2MxP1o9X1YhTk0sUG13Wk5OO25zSnt+KFMpS2wlMkt9TTBiLmMmOGVRPFVlK0k+ZE8pZjt3Nk9sPyxIfHRBfHNGdDN+NSYqSEdUVyxJOCZpfj9oKXNWSHNEL2NSZ254fV5lRCpoIkhkT05aLH5CY05yIUg9clBzVVJZMlRTKHhVelN9dHR8NzdXfEZnSD8hcEZRSmgjI2IoXV8qLjsr'@;
put 'eS42NCpMMFddeUNLanA6MUckZDZObkJeSktdSzBOPG0rIWhhSi9PLldvZUdkZylWV1ZLNko6OFJuMjUiKDJEPWM8KEljfGBfVVh0QE1hLGFPYVlmJigmUjkxWlI3OioxcCJ+dSE1LGJ3NV8uZUR9ImNnT3V7IVZkd3ltWWQzN19DaHFmQkBicklwPng+KUdnKWt0cVV+QiZiNXo6c09KL3N1ez81'@;
put 'L2BIe1dpRUBfVEhQdWskKzlQdEdlNzFNMiVKajcwfWouW2ZDdDJDR1BBLHJZSDZIcChKMCNIfl9bOj1yNzZIayY/WWB9fmd3VjUrXUwqdGA6aCFEXWhhI2c0QihRenMjSnIjWXBnaTlJYywmZTsxK3FRP1Q1SixAe0sjbGcsTXc2eG84W3BiOSpJKH1zTS5lcEMrelQoX196V1RMOHAuJjFycjA/'@;
put 'PChKXUg2TyI0aTVEMFtFPHMhak1vTEdTZlg/LnoyeGNML2Q7a1NgeURGUzFQTW4qM3Mwc2FSNH5ebnNdaFRhMmdrVkM8e3JlIiQraHk5SWw9amBpcWt2KDpxbEoqN31+c0xiNng+NUxvRUh6ZiZgUClDRXdFZjxbRn1ScCtBWFZDflFbdV5dfF0hPDRYLys6TGgxMWhWKEY4Kk9FKnJMc2xGTXcz'@;
put 'X0k/XlBOa3h0OE9Qck5peT9ufWkqaERtTj8hJDFjbil3VyNqfTllTHBbSWsrMGJELzEqPEg6MFJHM0o6VyNGKWRlNF1STzp7WF0/eSU+OmRPbT1NYT4oenRIenN0NVVLaTsuXkgpfGVNNnlKOTk2Um9PISsoeEJdNmtONTEsXSgjUixYd21JXURWcS95M35eWXEqJCJJc2Y3alhVJkg8cislNlki'@;
put 'YGVVdEkmdCJ6IloyKSR7dVQybiNAPUhoJl9CIjMjZ3JwRW9DJGV7JjZWc2R1LGszMndKcjZPT3hodEoqekQvLGs9fndRXSlHK1FLRUlJOUV9bUszUV9oMnE9Y0llUjY1ZlsxUm4+dVt7clEuUSlRfUg2aDFibXNhQmx2TWMmPkFEZDdpc2tKIXtiQGk0NiozfEN1UUBRYnA3Z0EhMFpAPnYmXyZE'@;
put 'Y3cleCRZdGU7KnZdcWRAZHchSnhiZ29KbjYwTW9uYE8+aTtPY2NQWn19Qys8bnE3Y0MvW0AhWWtOTW4+IVl4bUh2UUh2Xm1dRChdL21Cd3tEcSxCPUVqRD1yU3luNGElX35yMjFYTFg7bmJhZWRYST8zby56Rj8zO0RoUl1aUmlKSnQ+ZyFMLjpKOFlDIj9eRSZuVyJWOzYyL148eUMxL3haUXF0'@;
put 'ZFg7OipGe0o0aTpAWnFMZm5jPEAzIV86STE6ZyR6ZE44LE05KWAyfmo8K0AsKnZlK3dZQXQiaTQ0ZHc4dlB8KVE9XkpgZHlIWTR9VW48WVthaUAuW2NucmQhJX48ej4/VGVHJERCIkZHQlB4Mk04OixIKFc5b2c4P1t7Lzp5NE5RfFpLKyE/cGgjdUwsQ3FbK3BtJmtzfFFZLDgjLmYzM2k9PFdT'@;
put 'S1E4VyUsJSkvcFYlNldAVTZNd1VmTz1iezoiZnZoMn5uSyllUlA7ZkJZZFNBcngwUEp5SUNTJXV8aGxCKWNfJUleWTBvUnBrKlReOUovfG1DYS9rK01WUEg+bTYhMUNBPT9Uamx2KCF9dElEIllGTHlCVjA3fGpaUEd1UEMkPDkjPig4a20vSCkuQm4jaVZFYGIlX2swejY1aF1NejIjY19KflAj'@;
put 'UXdtZ0loQGZfYjl1XTcubHUlW2tjc0Q9Vi9DMUZHYzQxLGdBJWtKYH1UUmtZK257MCVLRzR9dnpTbVJmLl8sd0ZGeyl4SVoyKVp6eFVEV0xRZklqKkFxaD0iekhUXUZWMGUpXXROMUk3RFBmREtoMDsiIXNUJCJlOVZVPXhIaHhGVDJuIV9TTSQyIWN+IiwmJD56UT5PJCh1b2NGMjJYKmBiUn1b'@;
put 'UFphaTFoMkZoYCRJMC4yYjIwRj9mZ15MVklxO0hlRSsvN1ByWk8vXiIzKHove0cjQWtGKytqIyVdVDM7YDtIKXBwIXYjRi9oIywleiYuJEclRDRPPyUvLikwJTw/UVlsSWFFWlRSYG5mSFA5U1NSOD8yInhWcV90SSpMXnVnJklpT1Q/fXNfKCFnJldAVDZpcmJYYG0sK08rNFs0OCJOcDplUUtO'@;
put 'T241X1RAcVd4dmRGXSNqcT10M007OE5vNGdCU15oeF49OEhtJUsvQTtNX0ZuR2clbTJGPWZGR1BmSnxua1B6TWw4c05EallEcW93VipRTzNEKShKO0RaKTJbd19PKU5vMSIwcTdBRDlrU1Y+cj5IWzhDT2AoIzBvJjo/V1h3SWUqcVg3KF1UVGI8SG0xMEBrUWIzeDpHMkVFJUNNQVhzanlVdiFA'@;
put 'UlUhTmh6fmc6KC98c1BVYG1MZ0ZUSTNndTxrZCx1PW1pP0syfU1VUEF2UEsoYzBjVyhVTlNZKnx4LE9SZCZ7QmFWflAsfXlsP0wzfiFTPnVQRDd7OSxuUSk6SURSZkIybG5ta0JDND9CU1B2YEw8fjV5N3pLMUUoVjYmS3AkaVhQWEgwMU4vJGNYeEo4Q3lBRHE/TWlEbjRCJTp3VUNzY0RPbEdl'@;
put 'OVBRRyU9UEY/a3c0VUxuUV49USx+W2Y3Z2JDJk1KVUhrMGkxJl12MVJteHxOO2YjbmQ5OjV5UzE6NCUrS1V+QWxsXlVeW2EqOW9WMVJgcDBvbDJASjkrd195V19ASW9wPn5Tbjt9eUhMcWMidGJHS0tVT3F0bTFaQz9eeDVTSztWfShQZmchUW97NlVxVDcyXTdWPT5JV31RbzlJNV5kcGwhTWkm'@;
put 'WjF7Q08hemVAdGMsP0RaWiokbz13TFNDRzpuSVRMM08lR0xWKEhBKUlYNDlQejFjeXpffl1zNzZyNUxnYGk9T2RwQWJhJUN9JShyNEo3PWZmW0EjR042THl+KXhkQ2pVPUhjYSk/WThHW3NoX01ASzM+e1p5e0IqZkUpMGg5YU0qITl3RGBgR3YqQkBNTGNmMFZ1QjJxdjFgTUlHc3YuJHBzdV9o'@;
put 'Xl9vQShEbEo5blg8Ti91PWQuPms4RSo3RSRubUhibUMyamErdT5BemQ2aTpQJXxLV25KfDFCV2RaemslU35ndzpqSVdSMlFaeml5Y0MzVWFDQHwuayhbdGw9bHk1R2xURE0sZWAkVHh6IiwwcFB1OGFYTDJaJG5TP2k6dlM0ZmhVSSMxb3J7JT5MelJ3enVAei82K3g/I01oSihheWppaHZyNHFJ'@;
put 'fjFROjxPJE96P356SUswUFcwdVhAVD8xWSRgdzh0WHYmWCJycDE9OG1bfW42XXJMLEBOPnhTOlF8SEQ9Zz9UbTc2cTo+bF5NQWBbJWo2ajlyfnI2biwjcmladCs/aT9zbiQjY2VOeExJNChgSWUvTmNDcll2NEtlUk5mKitqdGg0eEBGVnFwJip5eDBoKUN4JXpSUEVic3pte3heW2BKeihvYW8x'@;
put 'cEYofERGX0RhdmtNPHtEcW96TFFWVlpKXnB1K0M1ezhOfnFaODR7NHpzW2tDPihleUV6NDpUQiF3YWMuaiVdUV5baG1VXXF9VD0rTVFVSTEmT00+LjZJeTNRMHhuMmh0NDVpO0QuPDJROWd9O1ZOX0didHA0c042STxJTUJ8Ym9SfEIucVlGUjomXTpWRUxsZVtPeiRqbThUWS5YMXtPVWp9c3oz'@;
put 'RndQVFBVQWs6cnI3em1ZYXZlYzBJa3VnUzd9TmdhZ0pXRWswTUBrZj1qbmguckYySUNXLEJDVTs6P084fXlAU250ZDU8WFpVKG4pOGwsej1wMHVsVy9DVHZhTzJ+WUEmK1pLUlR2bHBhQlFgQzI+cn14Y0RSeiN8RmwmbitEayh8JjguKmVRd3xHLEJTRGd7RjI0ckE+I2lJJiRONGJ4MEYlYCsy'@;
put 'WC5ocnJAJEVWV2RSS2Z2YklgXjo3TD5MKX4mMzBHb146fjskSDV1XitZKX4jTXluSWVkcGhHeEFXLDk/UzohekBGR2J+ZWZGfiVdeTc8X2N+cGVBezRxQ3IkOChhWVExNmZYITxnP00uI35mPFc3W3tYNHUxbWt1WjlPaSZEUk46dCRVNCJ9V3cmKn0jKXhXRkFwcV5GTztCWzpWaXQpUX1UOyVj'@;
put 'd08xXj5xemRNUnxyNmxHZy4/MG0qRiQ6RD9dXW4qOTpZd3Bsc1pRL2UxMnQ1I3hEdSU8XWVGcy8yKUo3ZjF2c29bcGVjNDV7Sm48b3EzcXMjdlRtM053YS4hc2cyMVMhbk97XzNAKikjTlJXIm1bJTwlWj12QiQ0IjRFayVDPCo+VThFMT58ZzN0WSt1ZHw8VGA3VHd6SF9FWno6clFCeSZpMlhU'@;
put 'byN1YUYvTCxUWGk2PWsmMjdvR1BKKCsyeUxTSXBieiorKC87STpRakNdVi4hXnAodywrWXMxeVBuI3dwVTp0fSxafERGWGJ+QmQlXj94Sy8/JXpOKlI9QH1XKSQvOylLJFA4R3tHJU4jUjJEalkoWmpXOmIqdCw2TnBWRnBTdjdbZER7TXlFQSswcmU4e19HP1BWbF91OiNCa1ZrST54YiR2Kz4r'@;
put 'OERrTll9MXB5K3ssO3V2KnVQOHJsdEVONSxYMjwlNytBVWc7W3YlVzx9PWx0W2NpW3lfaUErPFolfUE8KmpNW1E8d0MxPUE7Y0Znd1JGQEA/S0ZGbn5GZjk2UXpKIm1HbEVufWZeNnozMXRLbzpNYCo1O3NANDVgIko+ak87PHFNZjZ0fldLJmM1JS4yYDIoWCJQPV8+K0k6QGNCIVBObyhjUE5I'@;
put 'RitLRXxqY019eU1tbE1DZDgoKHJTYERIaTFaIngjMklGZVI4Oz9OO09XRilETHA5T3UseCRhfW5JVWo5bmdedHdvVH5AIkYwKkUiSyFKX3hUYTZLcHN2Q2hNdkYjTG56S1d9QVNQanwoRzNkMCJuNjRAamQ7MH1nVjw8K008b11FZF5edGFpbXNHcF4lI31udyx8YjV6Tm9BbTB6dElHM297Q0xA'@;
put 'aURAUHdzbGEyZXdvdFl4a19iJUdNN0FON0QhZTklXVEwVGosdzY4VH5ydEp7eiZrLz8/KXsvTkdrPmUjQXltZGNzX3wwZilmYlAsYjBTZ1UjfHtvTGZzc0ZxUjk5bmhyR21Zb1JecU1oaDh9NyUwTHZqckMoRHQ+JXdmYHVSYzlgXkl6NXUoOHowYFFPVF4iVStXSWFGWWB4OzJaSVRiUUFOe0sr'@;
put 'YE9YPkZnPkAkUFQiYm1VakRMcUd6SHR3Nll9dSt3cDRxK3IsYzFXTjtCciZ0JlV2WnRsRUgmaFp6SSo8TDlLbig8YlU+XUJARGpvSE4zcj1la00mV3ldPVgzeGhjYzt9dHRrUzQzYGIyfiZdfWVxXjteRllTVXs3dUVXI0UqQzxDP2tgIXB7bUslNFBiYmx+RjR5MD50PkVpXVFwfF1BdmVsOlA0'@;
put 'VChFS3RycDN3QzNvSjReVEpNYE5jaE1QLnhNSSVdNmEhWipNa3NCPCZQYEBBYnpzK0ddWH48bSRCYmx0Zi93O3gpT2Mmek8pP0ZjS2xea0MmKlMvbWVkLypOImhZdU1pOW9Rby8vekUoRGpqUUs1Ry9qUHpyaUxLQDwmUndmeXZweE03RSJNMUw3QiNgWkYlUiViaERaTUwqOVEvTVVqYkpoZWZ1'@;
put 'aHNuYiFST30paE1BNWtZTUxWVWRKQ0p2eWN+NEBPa3k3Mi59T0J2JXEhXXBDRV9kMEhfcXE+Ym9JUyg6RCZaNDtbXz9KI0tdayopWkpLZS44VWRfZiNeLEBjekpda09iSCFNPl9VXSwzJG4kZHhHTyNQaSRlZHxBPFd4UXA4Pz1gImE6dlpPelJbe05LYUAuT2NbfCE7LCZ2b0ZvTHRCTmQ3Qi88'@;
put 'ZDZyS1gyaGFbJXgwJG89PiUvOShhTnJrPldhdS9Uc3UyTHRbe3E2LzBxQUN1bnt8JFQxU3pLa0puMU1OdUdsIS9ILkNwKTMmPkk+WHxGWihEITAsQyx1XXF1a24jXUBjV1M+YjdZMisieVFYKTJOfU5bPVcxREgrd3RXdShRL1M+Sn1eQVAzXTVZcDtFUDN7aHA+UHpiTm9IPyQreUFYL1ZObzoi'@;
put 'd0UmKHZBKkcuJHhGXzFLNy9KSHUsOT5rI148YlBgV0w/UXdiUyU8Tm4xQDZoQ3tucC9zY2xWRlZHMzhOYTNfb0R9fXE0V1VmLjR2YHFjRGcjQH56QzJgKns9OG5FOHNQNTwxKCxzTURiOFptK1FOMGNgMzlpIUN2Oih8JTlUTyRrNDBfbFB6e1gwO0RKe1ZhfFk/VkV6dTVjVDl7YSlSYipKPDR3'@;
put 'Oj9sVzJFemRiIW1YeCVNeXckIkM7UixEZX1pW0h0I1spcSJBWGhwJGhrJWBYSmlVO3V2YE4qdHpBYWMwdElke1BjRHF1WzpvWyRtcyV1czFiTG0oO3pCQzJESEtBI1RiP3BAU0Fva2hqYFBlRzZPREJYIm49Mm04S2VYbFRGMVliQVJ2NklzO2p4TDZOKU4/L2JiYDJ5NkFjNiF0JDtdUUUzJjx4'@;
put 'W0BUIi9SPzVyJWdAbD9TfUZwOkJ6dWp8WkloQ0Z4Rk9WUmp8K3xQVndSXTJbSFs4QWJeQ0wmeFR+fUV3VDdpXkw/aio6TW5DL0g+fTBOIUY0PXFBSzt3S2p+YmRxW0A0Jm5VV0oocHV9InIyQlk0ZWokbXcrJTVleTt7KU82OT8pT2Y3QC98eT1oVzBkM1tLInckaS4pW3VxUzIob3h+Tk9RQlgl'@;
put 'eEozZjMwZFBvNnB2NG0yYkc/SChdPCpgZnAwWVhqe3xhWVo1NnIzNyhkZU5mZ21tejNyRng6OUd7LlhxMUNyLC4wfHBlNV8uJHY/SGlCbHNRPDBrXmZqe0IyJjpOWXBgS0pyZF1vSTVWKV50Y1omPj8yOWouckUlfmtOLn4hWS4veWwsfCZUO0NtQ0pFenhfOTpleDljKU4rUkppODl4RCYsZ0Mq'@;
put 'PEt6UU1Zd3RyMy4pWVROZlB5NWRYVnhjUGM/e155RSJKNmpELGhXS1NPZTNWKkpDeDZzcEd3UyEzZ3A0ZzxbUlB5cTRLO21UemV4Sl4wUC9vZFBNQlZKcTtmezkuYlJ6UzRRQSI4MGEhTWYsNmhiI1IsbHF4O289cER4MVpDMSo3LkRzMF8oPyxddlFMY0lhaTpsSHw6d0FyNThbU1JuSiJHXyV6'@;
put 'TUEjYTVoMCRPJmR0NFBRJVg3IjBpMUs2MEJFcVY1Uy9fXUt3PX10YF5xcz8hLFExO3BoaUF0el9+YjImd0ZUcjp+PUNJdHxgc3tAOmJAVkQqbz9qcX1Hc31gLjYoemYkaU5eVmdWP3hFMV1qLDc+c3dsVHVaLGw6Q0tNfT1ZJUoocy56TStnVUA0OmU9LjVfWyVTNixDKytRLz1fU0JbaFhkYnY8'@;
put 'ZEdSa1VuPCMuIypsPzZMV05PdlFhd0gpQlQyYFBgTU9QeDpxSXQyQzpOXSYyQjthJTtlPFF8WFBwX092fEdgal84M2V8YlF8SzUlcT5sPXsqdzFoJTouKVtBWFBvX2BZRVNrVCQ7R2wzUF5LLyJTd15CV2h6c1I+XkU2cmRkXndqYDxkcXAlUUZgLiFnYTcoUk8rY1FbTDpPR0JGWU1zN0cmLyFW'@;
put 'OlBCTkE5WUI5NSQ6fjl8enBqT09yQnc/d2JvWkRiRml1ayZ+PSp6clEsKTxqIWB+c21aKFlSN3oiZGw+RnQwXkQrJXN1QnVPb1tKfUVrKUVJZl52fmYsWFVsZF1lS0RJOCp4blZaNUVKd31nOUA7JXRqcmhZfiJAKUdxNlJlNjhKdSw2aUdNUys5dFpnVFMpUz47cjBCN0s+ZCZ9OngmQS9dK0t5'@;
put 'Um41WDc3YzxkcWV6U0FOdWZufnVFUCssbXBMTk8oPEUhZmZqPz1NdyVFRVBuMFdyNCE9QyV8TyJMeTR4dmdPYjlnK083I3lifkhGLCZ7KFpRXXAzIk5WbyQxWCFdRTlFYm97UGpWWF5DfGFqJj8ve2hIVE0uLDo4bDxRYnR6K1pqa1opWUlfKFJRczt2NUopRno+Ki5ifko8dXxbd0ZCWjRGTCZz'@;
put 'cTJsL0ZSTW0mbGNAPn1UOiRJUTleJEQrIU92ejtnUzRVS1pQelIrOSJ8YGV1c2NKUkllbV5LWGp2TnQ9LFU7aiJ5fHJ0UmdKamd6Zms2bV9RdzxkUWdKI29rYDhiUjtvZDZ9dG1hbTBueCRaKVBIeCh5Q3dqb0Z5JSN3SHg0MzspZ0RWOykre3xDK1lJJnx4dE9NQ1h4QEVFdWBZUngrV2pIcCFD'@;
put 'VUBvTXxkfSRPal8yaUhzPTZ9Z1U+eG48WjZPInJjcyFPY1ljRzhaVHJIfiQxdjp1ezNyZzRpaUZPZDVPNCYvKVhNbz09ZXt5Jj1WfTMrM09VL0c9UT5RVS8iQyZDI0w3XzFwVWBsbkNNZE8jLmg+cEJCSUJOIUpBMSNIa1JRKjdDLlEhOG9KdlF8RiV8MD0hUzY3ciZLX0xpU1YsRixDUU5nSVck'@;
put 'fjp6JC43WFp5ejY9UFd2aX10MEp7N0ZxSnhMUjk7JkZ0NV08cUI4YHJqYiUvejVpLlpObzI8TTpuSUVnQjRDV2M5d3ZQZ0JoP3ZqPFcmY2RSPXNzWDMqUU54YnBoM3B6LE4pTGheWTsiaytdREd5dGkiYWU+bnF9Wz8pMFk3N3hTZy9KKH4lTURWQXZtRX5rVGRXVkw8QzNHPTVPSFhXaCYjemlA'@;
put 'PFM3Z0VJOT95Q1BlVTR+SVdoRi9SS0VXWj9JMEx+IUkmLytwOUo4KFVAdWxCbGJeVyFHWnVxK3kxZEBWJXxgPnVteFlrOEtoSG0rMiYyQHtbImpKaTlfeWtGKHY3fU43OndYIUo3bDBWUj5dY0xPRUgiSWRjOjhgdTJ8cjBFZ1RkbEZdPE8meCojPS4mTktDZnI7IVp6QE9ffEVXKmxqazFzdW1C'@;
put 'Ynw6eFd+XkpqXkBLVDBRPEV1OCk8dFpYcmk9M1A5ZypEI0xqS097cT5fbSp9VjdRWUB8PjhpdSxSZk1IXlArXVckNG1xL2pYKSZJXTRQR3A/ZDJALF4kQDUzflpKMCRTZ0hNKWI0MTgmJC9vbmpVL19+X2EweG9CVlI9W1QsNG9Lbjd+SDI9YmAjXSZwcF5tN1hYIWskWHxZT1ckLENrQzwzaXMs'@;
put 'dDhxKXdyNFI4JiY0dk10XjU/enF+RVlEU1ZgP21QSikkVnM0eEQheStRUXBZdTxtdjx6YmA6OX5qZiYwSD5gbSszVkNpYX1xUUYjJF1bJF9Ic2l6K0t8R1IoY2xHZlVuY0lyMllCK2BMKnVyZ2oofkRwMmdTSjVkOiFQY2BVYylGVXJgfT4kaGhnYHxjU0Z7UEtQYnIwaiNlPkp6OTJeJTl0Pmlp'@;
put 'aXRfXylyPEouMjswJCR5X0l4JGxrS2NMNCR+KE9VZDhOUXZZQ2J9fDY1PV8iTkVAJlpvT094ZTwqeHY3K0g9bVElZyhuV2AuazZMNygwSyRoczg0JEBkIjdMenBPW3E5VkR2UTFIQiskSnYkTislaWViOj93akZve3hybT1xbHd1LmM2LF47Ml0hWTVrVlopK1hbcWM9P11Hc3Q1NCp2RzM8Sigj'@;
put 'O0o6KnlOeUF7ZlIzREdUKW9EQ3c8dHo8aUhfTEBjfTsiQG1BQWBMXWlwUUh4NDwyO1F7dzlIKipMTSx2eSlbMyVhcHcoPCJRcTF9SyhqaGtnbXxjfksiPm09aSY8PUgmenVmdixNTTkqOnxlNiM7YUpjYmxxRmd2WlhTP2pvQnEoLCslQ0x5OjRHdzZyJStuPTkvMXdWPlc8c3ZJPC9KX1gjWl5E'@;
put 'RSMuLmdQJHZgVDYoNUVINXdCTT81JSU5R2NANk9yUkt2ZD1vTDx6fl9AS0chNHw4aUhjZ0ZrajBXRT1qWWFZNWcrQTQ7em1GYnlaU0peQ19lWiNWKmV+fCp5Zk5paFFkXzlRWFdZOTFSeC8/RU5VXzAoKjI8dXBtVVhnOmNLQ1YiQFF+IUU3LDZQJGdAbWZgZSR7Z1diKCl9UU8sOTN4b0N5I2ow'@;
put 'dFQ3NVp6WDd9aEUmW29STFZZV0VnbWF6alptWGFBcVA+bmNwKkhTVmVENyJsJi9Wa0Y/PUdnS2lvRT1PPjgvJG0uRFk6Iys9MmdkQGokJm17LFlpU3AhbVp4ZHxhNSMoI3Nac1JRUUhnTiR2VGIoSDN2QV87fm1ZfEQ6T25wVUkoS09BPSEhOUw3TXs7V2xOOkQ4TX1HWiY7SEA1Qmx1b1F8OlFn'@;
put 'Wm4xaHo4VVN7T01yI2whRnxdMixTcEQ7ODEzIkkrPFlUeVlyY1FHfGdofkJjb1gsWjhqUWxlOjByTUNpaWg8LnAyTV4vODBYelQwMV4ufSYyVmN0PyQjfn0kRXQ2Nno9LjFOYSJFUTQzLi4udT18ZVt5XVJpeEtTN2MvJX47PEhaP3olYCQ9UDBdUCpORHAqIVoqNkxVaXFBXlRIKDIiRVAsWTVr'@;
put 'RWZESlA/WEErSVVUNUJoeVIwUzRoeTFQMk9ELkplZWZaTmRUcCRPJDdOVyNue1B8JnVkRWJnJXs5XmxdPloiUDMzWyZpMHAxey5JKCxuPWZKbGheQm5lLmRxPDh5bH5MZG18ayo+b0Q+MktaSmVNVH5uP3o8OkwwYDJJaUJJSlpvRzZzeWNPPmlkMEdlSFpMV0NuN2hIfnM6TV9wPz5XQm5mKkky'@;
put 'e05ATn5UR0FIeHl2MT0kVWJiXmZINDkjWmlmRCUvNDtMT0VPfH5AMXwwJCx6Nzo5IU1gfCNqXmF7OnFjMyxqQi83UU5fS11qMyZjYCU4UmlxfSoxRTdvZHAlV2xKb1NBJjlHVGBNQHNOREc/PGhmL3A5JlN5TVN1O2hVfD9Gck95Xy8qSU9rYj53flMhNn08YS41YWNwO0Z5QyljT3pYT3ZmU042'@;
put 'NF03N2JbITNkX1M8ZCZufXhCVigyYyJhYFdYPT1PXm9Kc2V1X24pKE12MnBISmVWJEtfKl4oPzlbL0R5d0had0ZSQ2h4a0xIWysjPWVIN0YxfH0rbHJrNWZLJVZNYiY+UmgmPkBjQ0BpJTddSjlrP1RLR2I4RFgzJXY6KFhyYXJQeTg5KF83ZFs/S0ElSXZZOz1NRy96LjZoVHNHQ2l8PGJmUEIi'@;
put 'fCkrWGMyeHNALDpRQTBWQDsyfEc9UnR1a1IwQSpTLHF1M1pFPCwrY2lEfj0sYnkkTk5kX3suJmp9JXNdQCsmLiVqZExtS0d9bVt1N1pyc3wzRkpqa1V2OXI7TiJhKiVLblVLP19EfFVwWGFTdGZMRzhuOSNUMzVEP01PeXs5bWMmO14hRTRWOXd6YVliQCNeWyl3cmhHZEZjODM0Qnl8cD0qRXRg'@;
put 'L2ghOiZDLitFO0FdKFFyM2smR2E+MTlvOUMwKFtXU343aFFjU2puN2ZtSGVCYmtlZXs6OE5ae3hUTVpOOiEzV190YlJ+QCw2TGYyVTRvP3hMQGpSQiFSaExOKGdoPjp5QnNOelRAM1JIMHNWJFNwUF9+JTdEMU5rV1ZXRkZJdUE8XjpNd01JL0xiRHAzRk5JM0BicSV1V2dIM0ZyIV5gJng1ZFZb'@;
put 'S1IhdUBVRiI2cHlqRDJ3Uno1MzMmLHt4OSR9TkhMN3t2eVkiKVMhKCZWSGpBYGxxVCJyOCRxQlR8MUlZRzN7OitJWXQ8Pk4lNE85Q0dBfjNyZU0kPj1KWSMmVkYiaU4uZGtJNCJObDNIYlZ5QnAzZWdkZlhxN287KHJhNkxCcVY1eG5aIVIpJElVLkc/LF0/ZSw1Q0d3ZFY/dWoqOHkpU35QU1JB'@;
put 'd2FlMHlxR1FAQSUoK3lNM0RjYy43MmBlNmR3SnlkRztNOSk5dnIqfUdwKDAzanNGRWRUQnE+b0lWPHc/U2tbNVd+TEIkZ3EvUyFMUnh0SkhqdHx9O1dhOURSQEVlJTJvMl10YnYuJFBVIVZmUStCQDtiOCRlMXJobHh4SEhUKTM0QiUyUEA/QyNaOD9HNXlUJVFSXksxZmh6QFZNTyFCK3lAcSlj'@;
put 'T1QiVX0zVSlBOzBUIUJgUCQofl9LL2k6RGYjM15ZOFhRRGIxWnpIcH0meWZhcUl5ZmJpbTcuWURxRj9MN1M8Ny4renlBTGZUblteaihJKyVbZCIvfXk7Y3BfKEtIU3NAOCh0Xz9QYHF2RmQmYCkjbTwkQzgjI3FxfD1WdFNde3xpNFY6X082YzJSZV90SnF5SCZed2cjJWNQYzluSmlUbyo6eHVF'@;
put 'enAuPEw2Onp8Z3UjbSlDNkgjRWAlO3RHJDlxNShHfllWQF9tVEYwfCVCU2tbWnAwR21yfExZRkBpWjEzZS5SOkNCd00oNipmSlpWSltqQylVME1+eUM9YGtVYVhUWHVmLC9bS009UCxVUnc2IlRJbEN8TkNSO01UN0tJeGhYOHplVW1ybkJFSEoob2s/S1c/ezQ9KUN4XXVoeXBPOk88cnIoSG1p'@;
put 'QXRZQ1dyOD59SVUhUFRYJERnKzQxSntPS20oNks4RT17diYqQTQsb1pMeWZMQzhJTk5EMERBfWohYFErb08xb3A3czhEaH4xVUhbLiJ1Uj17NmtHWnhOPnghPClCNy9sfkBway4zPnw2Y11TYEA8S0xFJXI9T0pKTVVmQzliNTxKV2tuR0F0JWIjNktBYGAySyJeRG82fW9SZHZvdEowdyhCTyE7'@;
put 'fDpRbjxOaFtmNHFjS2F9OEBUTHZhKn5MZ00xMlAuN1VAYHdlenIoR18pVGEoTHNNe2lWbU8wTyImdmgubiMhRD5PXiFafHApfExlTn1WSjAscV42aywje2NTckt6WVNvflpoSnEvNl0xTTR6dUdpOGlibEB9blQ1Jm53LmQpNEcmWXVQYnBLPj9LVzQ4Nls3IVB+Yn5yVmxmWk9mIklpMitVbThI'@;
put 'LnBxRnVDWWk5bHYyLG9SN29eZkB3VzBydmI/JSl0ZGd0aHhaUnQxTWdAQHVSWjx0UF1SVmpHX3dUdXAoSUQ3JiQjay4wbVdRPWtDWXh2K2JKZihXW2tEeEpSJUQzMzMlUmR0eE4zLyNIb115IkZrN1ZLXUp2aWdKe1JqaUtdaWZeeCV7cFlOfkZzO1hoTlR8Liw3OEkpX1JqVlFlL200JXpvMGQ0'@;
put 'XUBTZXZsWDdoTjZXUXFnVTdleFh9WXp8cm9OYFtCaVJKLF4vciJ0ZFQ5ZHM2c3hKNUpaKkxVKWp8fDBSIXBUe2EvRTIrb3xfe0ZJU2ByUj0zVFA0NyV4cjRHUD1nNE1JM2xpYmFrWFpGNy48MFpZOnx0b2IsVU5wbj4sWVcpPyMjOlZEKD1VWzN0QlFzWVZtbl4vZnx1dnJ0Vnt5ckdfS04mY1F2'@;
put 'Pzp6b2Y5OF5pRk9yeCZpQXFYNzxZVUw2fEBnc2VoaltwK0MkUTg5bzFlZ0Yraz9+bj8iQnNrYDBCVWRPcWJNQjpmJGxLWiFLVn5sN1kwXmU9TnM/QjoyKnlPLDhfQHlIQzVRKmwsYTlKKyk+aV1uZ2tDIjArXUlFZ0l1NFM8U0RJdUx6Y2Z+ZU1EWDJ+P1Y9bkYoa1BzJVEvMUEkKGd5VUFyOWpe'@;
put 'ekt1N2p4R3pYNzpXXkFNVCIlLER0USQ9SyxLSSZDdUxAbGtFVnFSPmFpLzs3aklBZjUrKjBgU0s/THI3KFVFRTk2SFgoPEhqPl9CQyV5c3VhVjZFTlBPPXdlRUYxKkghemA+fnZ8ZXpRO2BpITFZWlVHcUZHI3h6WyZrV0pKNyZCMXhMMTxlY3BEUHp+cSo4dyQsSXFvaSlAPWFubXwzQjAzZzg5'@;
put 'allnWFROQ1csWFp7NSwkZE40XmRxem0xPlp2TUxmMXEqUyRZN21DfXVnLnEhYWh0OmdUUWcjMTJwfDV6cV1yW1JbUGkqXVIzbGVNQ1U4cGlXVXR8anxpbGxgbDB6YTBaZDc1I0RqSDZdaGMmPWZiOHpqVEAzOkNZL14qZHVualJwRiVZRXt9PzAsZDwyZTVCV3Q/Z2IoS3RRTVIhK34mcTB3YUpf'@;
put 'XyhAcWNUZXwoTVtlI0RdSE1NL2spbTNPWktnfTZHWlUwTHFYISYkc250K3Y3VD85a2lVezF7aXE4UTVDdCh8TmtNJS5jJFJMKyJpbiE3YldnPlZAREpiUEo7dTFmcyR5fXpYWllXTkJIM3EqI3pDPzFVSEhQM01qXU08WyluRXdiYlR2Vm9lUm87S3osaj40JVNIQVpaNV07IUd5LF9XVE9WZThH'@;
put 'SVhnMXArPyU4aVBbWFpncGIjbW5tM2liT1AwR3FzMk9wL2k2KFp9UCh4Lk9FYkZTMGVfN0U6T1BSXkQ8U00rcVd5Vlo+dUVPfl5hOV4lInpfQCQ0eCpsWlZkWCImMUosSHd1cCJKb2M7YVJBOVtdfnZZSF97UntIOmR3UTpuZWRSUzJpO2x4UVl8WThBMzosZG5PaE5LVkNAdlNKY1Q/NiVYKlEk'@;
put 'TyxXK2V4M1hNK257UHB4bERXXVgkaWVwVXUyYE9aYj8xO245d3RtVGdpOSs2WzNIcCJyQUViIV44IlFIczRsb2JSYSJqelMwTEY7N2h7Mz08TkBVOW5zMzdwT1lPfGIkUkhifC4peWNQPGI7Wy5ZZTEhS2t4SURnIUpyKkNBSyVMVWovfSt7TmwsPm5rfHBJe05FQnNGKXF7NisuYjAwQHByQ09f'@;
put 'Jm19RmJtTHZKWz4kSTFbO3ZhdHV4JmImSXJ3cWdWKkw7YENMKHU/UyZKU3pOO2k+XzY4T0I/OXlgR3V5UHR1VyVadj8hK3A4OyxmZmFZe2NjZEIqNzkuZChXd2FyX0UoflIxV29gY1sxU3xQWj5FaUhwPjssJntWYWwhOWxLODwwTjBrY3lSRXhnUGg9elhrV1dPcUhaJXprL3g5clZ6NWM7MFFj'@;
put 'eytWZ1dpR1dTOn4oLC8rIkdPQ3BWLFF7YUQ5fUxeQ0t0Kn06JFNhSW9KaW1te01JWTxbSkppQnhZVDVXYX02fjhbPTZjP0J2UHx3LmwzWGNxUCNXPzRfK2oxPTxddD9Xa2opT0UhX1BUMnFuPWVGVkBJX1YxeDZNcU9xW2J4cnFfJWRwQFY2Yit3WGBDKVR4eT5KcTYvOVYqT0c8aDQhJFEoeGJS'@;
put 'byo+TD80PStbbCpwVj0xU1U0MmNreE90UENQIVljOnQkWS5YMiYoP0UidFAmTG4oSWozQCQ0OjFXVkRFNTc1S2pYeXEyVV1XcH1QaDwsKXRMU2hURDJ0LyxgIkImNz9vL3FILD0jTGpBVV41TCF4NlouL1VebWhYayN6WG8sX34/MUZtVXVOalZERjglZm5fUDV8R2NXKHt7XjpJUzBxKkxQfkUp'@;
put 'JShOZCh7anpLQDI0Kn0mbHhHblU/LHFEa2BXTyhWdnJhSC8mbjdhIkd9LFAwKVBiSXMvcVZ1O21pL3ZnI15+OGNzNmpyQ1AwJmlRZD4wPC5bMmZ3Jm4hemcmai5lOnc0ZVs8OTpmcEojMkMiJShuVmBTOiNNSikvP1IpcV4pNWZ1UHEpLy8/OmAkPCQhNmtRaDpTWDY2UmY3bis1XX5aSlNsTmhp'@;
put 'amU1Y2AvW05NXWsuZiZGNV9rTzRCQ3NJPFs/UnNGbShLdWw9OEBANGV3X1Fjb2UpOWdIOjpJPmhRKCQselgjUDpYM19NZSM2PVpkKyQhW3U6c28oKk1xMnw7SV00QUk2cFZbL3cjU0Y2UFpGMH4/Lyt5OGAveW1QeTNWbFJrZi4pd1h4XXovVzA1d0l3fTY2QVY6X20rQ3FXUXBHIzMkaikmYiou'@;
put 'OiZJPVMuS0IsPVdFMHohZSUuUn1mW0o7dyFqVyx7SUZuWjFOKEtfR1VENSxEL2g6eSE7L0JtfWkhLFdhalh3fHg0OS9IJDxbMXlgPTxORCR4bV9HYEhEImVQPDRmSUA8ZUVCOTl8I1d9MVgsQkIsJkQkKG1OMTlXRVMuYD0wcWM3IXQ5SFs3JUk4SXRtVjc1YG8vUyQzRzxdPHU5WEo2NTpxKV0l'@;
put 'aEA6NXF2d2NgJE8iSXtHdmlpSi85LlBJT3RvXjxxI0xGWEEmYmIhb05uMjgmXSJkKjQhfk5Ke3JSfCtkRlN0QzRuK0lSMXwqTnVbVUkuSHheTzZUWjQ4Wk42TH1dXUlEXiQqLGUjZFJlcHNoUHkrY21aYTJYTW44KiMqQll8T3gsQmw3QiI8eE9BVyl5MCJDblc3ZnM3VXd+Ynd1YE1GOnRyc0cw'@;
put 'TjBMVG9pMCJGR2UzQDAjP3syP1kwK2cpZTZWUWRaOFU+V00oe0VoLG4wNzZlY2lpTjh4VVM/UDhvbXshUk9HNngvbVlZJWBUMXZ4Yl4qclgiUkQ3TShtNU5WJV9yYyxML3kjeUJlVXk9b2BrfjNGZXAlKSIrRTNGT3RjeHY1SmZESixvOCpILk1fOUVUMFNzKGZFbXo5VkMrIiFDekEjdFBYWDk7'@;
put 'YWVHfTdoKCEwMjo9eT4zZy87OTAxR0ovbTIyXWBvJHRFdS5LND92ZjAlUjZEY1YrN0puaihfa3FfemdIYntCSFB6dSovRmQjVmpqRjh8fCEhVU03RCludkxMOUIqXlVXQVN3djMxdjhXWFN2VW54bjRUSTl9KEppXTJNZ01hIXtwe0E8aCQqVmJ8TSwkPThhVGFeVlpgd01jPkIwWTpnIX06Z1g1'@;
put 'bFgoKlZhYSo1dndMfGpsQyVjSih1SmpIW2dCWyh3fCYsaFhxQ0VDRnxRVTdxYVptJHh5PTFbZCIrWCRdL0YyezlTc0tqRGhWZElPOWFXJUkxRiVndGp7OEZrMDZhNEdOfkZSUzhaWHxiTCxLekFtN1JtaXkvcnZOYGI3aUAkZlo4PilBXUNxb0hXX25pSWUmVl15UW07b25ENkBBNyt6TiVgZCRz'@;
put 'PVBIOkgyfH07MDQjYWVqVDZVaFYuSU1xbyQ1QHhNZV5JRlsvXVUuIWdqQnJve1R2SSRHZzl5YCFgbyM2Ii42M2ZkOjpbdyJSTTpbLnV8W2dyRTdFeWpjRSw6eVJbek0ubiNzMjRERGVoI1dQO1dlb25vYU49KyM9YjomUmw8QzpXYmNAISoyeXdCU3lQUXo8JnVPJUVwQzAlUDhLTH56SnwyKkV2'@;
put 'UnQ5fGpnRHp0VCVgJVQjSFVTNSIwNUBGYHd3YWVFISxbN0xyKmJMZk57W2xVJHxzJURbQV1AczVne2RQbV9SYlJ3b09QOCptaUZOPGs5NDRMeFNmcGZ3Q2pkT290JlUsV2l3fE1QaUU6fDpZOyhqKUN9WHo6emFuWk4/KUk9eTFdJStKLGVlRXlxZkhhej1ZOnY8LkJXYnJaXTt9PThWSUkjUiI5'@;
put 'Z0omMGhESF0jcXlpd3kzMF17fGRAbmNaMSNyaUhsbG41bkVjZjtxKU9gT1h5TEAiMXJVfldFSyw+X1tJQUtLSjxSVT1PcnZ2cWtbWFAkfS5lVXlYTkRVcXs2P2FZKj91OXZRbVttd0RvTk5AXnw/QGM+TnJRN0F4b3dtR0VSLHcoJDw+RHRaVWhKTTdEK0YkRylXaH5fXllRMCpkdlpmK1tzemxY'@;
put 'XXJaQ0s+aGdEcCMkIkVLPktsSkpQQHcjSnp5VjNGe3czWy94RlQkbzAqMEg8eXliM3YiUSNeI2c9dUU7Lnw3SlQ8WU9dQSRXL3JgfE9KcEAycVRvcm9XcCkrNndtR1FGSFloJDc9aDpJPjh1bHt2dXN7Vi8kdDV+PENlOjJkdlZ6PFFHSEZoOEtXe0hsUik8S05AUV4vVlAkejZvIlpEcGFlNlkx'@;
put 'eXtVXUIzYkBRcW5gd2pBNGJGWSttZS85VndfWCkrYHE8JCR5InY4NjUySDBIREJILD48eG90SX44THBraHQxU19oaTFMKHxQVHAuWkdnKlo+PmxzQFhzcm1sSUNaQ05QUGUydD9aWVpdZDE5ND9bb1hCdSY4TSVXbzhdRkhvdjdnPnk/d3VOXjQ+VnBPdllUW18iQU1UTXU8VmQ/W3U3UjhDTXZz'@;
put 'XyYqPiVEWDFHOj98VXx8PmxnTnJqR0JDMyJbdkV4fWgyLEtCVltdcmUrdFcwOjlpNXpqNEtAeU5ZSmwhQEQuKnJqcS5oPWFFSlhITXc1KHcmYD45ZigvTmZFTCtPY3pOQDdIOUBDJUsuTmQ4Q1FHVyhCLmk+b2ZIOVdeWElWIjwxOlpOe1F0JDBabmEkQSJMRTIjUXI5bkVzbVRbdiJ2Tm8uLncr'@;
put 'MSg3MXd3cTJdKCxLSnYmdTw3YE5tRWFNZzhKKVkiZ2I2ZiwwWDJYbTVLLHlAVXFoY1pXflo/eTJdcVU4XkVUNVBAPmAsVEgxLzdqMEZvaCJrIzooenRfTmF4VCgzc1krTVp2WkwzMUB3MiZWOz5eSTtJSl11Ykg8N0hfKltUS0ptdE1wM08oTWdjUHsifj4rSm5WIU1MbmRHZXlCaCZEb2c7XmpY'@;
put 'fHhrfXY0QkF+I19pWSV4Ylc5MjVAV0E5cFEpb0JrdmdSLGtmJnshWihbc3pDWCJuSFJuLDtZbW9kK2s0K2QsbnF4eGZ+dmFJSDZhMFp8NVNZNzMyc2Y6QjUyTURpS0AqWGQqdjRgJWZsVHVLUChQekovY1l2Tmt9SHc8YVpuVj4xO2VsLk5GVHM3I080WWtxWzw5N1puN099PUF7SVUrK1B6Z18/'@;
put 'a2g8cyk7cjBPImRBPSo0cFVpUnIrPCQiYkJ6Ojx8UHhgdGB5fWZvUmpqZypDYUJqLnVCdUx7JltZKnphNS9qeyxPYnd5QmIvMWtOJTA2KTQ+bDBUb0hbUyg0NE8jZ15oMT1bJEQ6WkdBfGxLKSZ1I0kvVT4wcilpVzt+QEc0Wj5zbGRXWWY5IU0oSFkhVU9Fe0Jma0w/QUM9SV9AfislTCouVnQv'@;
put 'QlBrNGthLzlSN1kmTkUyaDtLP3kofDp7TWIvXWtzd1I4PUBiK1hEKlVuOCxmfXJveU9PUVo5RWN6RTswJE0lNSg0TWN1ZGRCWkhyNEtyOk5MQX4+X2xWV2p3Qnw9SX5xcWA6I0hoJn16a3BpIV5zNTIsajhKKT9MUiU0V2YuM3lRPUxFYFpiN0NfM35XJl98LEReJmEobWc1UmVuJC46NF1uYFNQ'@;
put 'NXhgMXsrJElwPUU+Tm10XzRKdWslOnxNVytVeih8Vz5BfHpQP0BxbD9WcUUyPj9bS0NJS3NSPSg8UW9iXT4zdHlvcl0mKk14TXFFM31maUxzLnc4Q2hEMFl6L2dUaFNCR302TzhXKl4vfVhZKCo3bztNYkRQPV9AWEMiP3JXZz0uUDc9cFNdPVhNOT8kIkNbbTVnZCMjVjl2a0p3TishRSkvZTI6'@;
put 'TkQ+OnZOV2dmLm56KUtLPGMlZXFnK2h6dm4rNVFKI1pHQzs0UnB7ZnU7JVJiW2BrcXNsMG5hdjB6PUZQPzxTez9ZLithPlJEMWFZd3YqeFhVXlZ4MilFayRuW3xGLDNdfGRXYyo6ZEhhLkc3KlNbNXpLX0NVeHRbQzxkOyQxRSNLYWhWIjssX1RufHF1e0NAKFpuV1E7MlsqakhdTz1DSGt9KjEr'@;
put 'InApKjpuekAhfiVaaE90fkFUI18iRF1wYllvIWV7WSojVkx0I15ab1decTA5VlMuclt+NkhiOUpMQ2FZbG0uWmQsRSMrIjlfK0wjeS9CTXBffX1fbVUuTFNmZT9Iano7PFdvNDpYTiNVNjVsZTomIjxrNkRpY0wmUk96YztCfS9KSV46JHZDe2NgfV5eMmNCJCQrRlg/XXQzWWRBXVomU2NzPSRk'@;
put 'ZGhCZCE7M0d7TEpFMDAlSTROYEMwSjcxRX14VXF7cFpMMVlVfHhidGxJQmdhP05TZV1BS2E0cXhmMGole0VDRHpQXVYvYVkjISpIOXJCcnAweHNKZm9KJDchQzBCOk0mV3EiRzQ4TFYpJiVKI3h3PGdMfCZNfXhpRTJtPXF4P2dFTU1lPF4hTzxFUWVrZ2psPEpGZiI7Qzh9YU92P0d0anVORCx3'@;
put 'ez80Jml6VHhGdzlJUFM0Vk96VlAuJDZ0YXBhUGZwemo3KE1ubywpM2BAdUBjS0BHYlBPVjUoNmx8T3QwbUxvZDQxT1NMM0RIdDc5VnVheFJFUUtpTSssXW9bMm4+UFN0Rit1VD9bJTcvNX56Xj9aOihxKzQ9Kk8xR1hdVXZJR1J2R05RSG97fXlxKml2RyxLL3slNXJfLythc0FQQGUzJnsrLzdv'@;
put 'TzIuYm1WbHRpIzhyelVwfDdFen4sX0l5e1UpWFoiLDQ3NlF+dkFecjpebF17Tmgicj5VcV9TQlg5MU1URG9aOjkqO3llXzA8XlVkM15JUGk2V1c+KiYraERaNzdLKH4iNTFmSGk6Xyx8SWF7UF4mI1k4Oi47YSZdczVATD03RiFXPXlfKXlBcmU9VUolITZ9ZHd+WH42bEZJNF8/RiYlMHdeLGRI'@;
put 'KC86amd8YkEyZDMvRjZeUWApTCRxKGpIc1dvOU4kQEkrWEJ0UkFkcXptaG9jNG0mcnt+JjRoO0txQiM0OyFZIlFubzhLOEJUITUqSEtYLikrZERHMzV2QkR4ZHxIc04lNkJHc0NCQStaWnQuNC94YWhJSUZhTkhWNmd+Wm1lQDYiQGd8TGFoeEJlI0F1I3JuTS55fFEqY0RkPnA+amczJj50KGsu'@;
put 'Q0p3Z2hAKkZCdl8oUGcmV1NRLkRNLzFxPW1FdXhdLDVvfkBITX17MX1KaTFOQjVMYXtjZjspVVheL2V4Wmw9MWl2QFdrVW1kRyhYTHg2eSxrQS5+dSw1QilEbiMlfV12X1tgbk9Vd2JkckUuKDhMcikxV1NxWCVwQjJNbSxgezZXV3psdjA2Ml55NGhJMz9peGNEKSYkOmNMYV0qckJjRXpgVzhT'@;
put 'NGp7PVFLbUZOQEpxbVVBT2djS3tUWChOOUtmSjFscjIvWG0iZlRBJDpbM18veUBIIStyWTM7SUd5V3pCP1h+TXpLek1IODd2R1piP3d0LHN2ITB+ZSFONltQSXhwQjdkJX1JQVBUQE5ZTGcyY2A/MWJaRFtkUDB4RSxXUmk+L2RtTi8sdGRGSDVjRmNZa1haQj9pZSMmcVR1Zngmc2FDa3BAUE50'@;
put 'JlkwZz1jVnJ9az1lV3JARFlvM35eTFREOlRoK2pNITtwXTNBPCxBYGY5MjszOXZ3RlU1RiRkRlA5Sk5GU1JxNmh2T3J+YER2flpNWFt7eyo6fTElaEVhbUc9aGE/fHZ3OWhOfXMhTmtXfkc5fVV0THV+QEcvPTs/aG9VNEAyUyliMk9XaEpCL3VBe11QQG9AKkJ3YGNkKmVyPEB8Kz1HYFBhS2hy'@;
put 'RlZzdSkrb1NDSHYydSZPeyJ4ekkycU5JNHJrPVtkTDphI0dHXSp+QksiPSp6Qko/RmwvQV5wPisiUz58KjZOKilKTzVsUDh4bHJ9Kzc/WHtORWlGYX0uO21OZjllfklScCQoQ0Zqdz5KRzlBO3IzTHByXi57TkZkaEtiIl5zK2ttPl0mNVVNKT17clIpS0A9XiQ4WjtbYE9hOTh5cjlOQHV+VEha'@;
put 'SzkwUDl+LnNrK25kNVYsWHByZ0c1MHd6SWJ0NzJ4W0c1ciVnMmxIa1ArfX1wJjBVcjssLmMoSVE3QjkkJH4xfjptKz10dG8qNWJMO2d5TTkoI2p6ZTNBNEkvKEZxV3VZP10uZTRZNHEiVkA5bWxLSm9oQzFrWXA/a2tbWnYzUWBKQTAyVVgjTVlBZD96Sz9HPykhNWxbUUVbSmtmKnduXiNjSHtz'@;
put 'PGZkV0tGQCIqXSJMSjlbO0pCJCFRTypeUHp1VkBuS3dsX28ofWU3SnFiUkI6SmoiUVNkZzJhOCVHVEYqVVA6U11zXkZDXztrL3dnWUZuMyh8UXJwVUR5QipiYWZIfU5NOWp6fkVFXT5DKEk4JXYpPm1naVNpVi5+PFhaUW8sdkddYVpnYW5LQnpdM3B3fEImM2clM1FFfTVRcyJKeWswX2VAenJS'@;
put 'LE1CR2J1aFM0SUdRMzElUC40P1s5ZlZPOjQzPmp1RThHQnJ6alk7fjZIKCJePUpXP0l7Q0VARWRLV1ZDYkNBJTlSdFt6QXFObz5qN1ZtU1MvMjg6Viw0U2d2QmQsdSRBN3V9YVRGcixdIyF6QjVHJD9BYzR4IlhDL3tpJlJKOWB+fDd9cEA7PWUiWFtIMU1fSl8oTkN7KGFgTVZ7a0Y2UEIjcTYr'@;
put 'ZiVwTEJjamI7U3prJX14ezssMV5HSkVTaXxjRiwpKCM1QFNmcnMzWCJlYzlKOkRDaEdFb1skdFA8S1ZlUGFxYFhKI1NxMiIpN2JaUSJheWgiQzQsUldmTExBbXZfRzQjcy5eW09gKXgqaiVMKz1bTll8WXZRXnI8PHt0Z3R5IXhnX3RyUyUyNkJiRDpDZno4byM5Y14wRjdyO0JxbEJybHo2VUZv'@;
put 'fjZ7PlNKWXJIdTdxLGI2fD1DWExOQFh9YiRVTV97PU1CX3VjTyUjazpTO2YsRyV1cikodGl3QiUvPztMcFJlNlovfllXdFJXITBqaXRYIThKWT99ciVBP0NNbEc6TyNtXlk0QkYzKVA8S0A3RHMkfUw3QUlIdVpDdlcuOTQmK25rNVF2XihRfXc3TEtxflBrXjx1emJpQENJX3xZemQrNGphY09N'@;
put 'b3Zsfj9aPV56M0A0LC9BKSsjIm84NDNaeml1LHpte1o9ZTA0REt3Yj9KPTVuazpwMDJANypIaVJjRkNVKW4jOHNIQEF2SXkvJHtQJS9lSF00OHtiWkF2ME1+bTlYRHdbR2lDJD9fSixvezIpU2ZaW2NpU3t2VFhwbHddXUdbVjN7JVU6ZUMzfEhoMWljdzlfUTRBIj1QOzJvdXh9Iz8iI2t9VjZg'@;
put 'ayFKLmtaUG02OmVscj4oUnpeXksiVj5lYUp3N0cqaFNnLnpLajNnRn1LYiRla2ElKS5pIXx2X3p7LitsJWRGbkk7JjQ2a0pIKW0iIVhCS0dTdjFfZlpbeGNjYGBkUlgqRD16bnd7JHs/R11RUHxJVFUkL3BKNlklPihZKEwiczIuO0BJMU15eS90dHNlfkBDd05jXWlyO1tYQUk0WCNTYFRDOWl1'@;
put 'Oks4SCU6QUhWdHdCQDUjOXRQU1FtaCNrNFpHKHlib2FsYGVIa152cyUwM05YWCglPTJUY11kU2kodDdyYGhxOStydEdFYygvZzVtKSUhI0Y6PThuMk5UcW5YYDd4SEdiQGJRK0JHSUZsZSZtTF5EaV06QWpfTGZkZXBCPT1BeVB8RWhXbGdgYDxJQHs9d35xTXIxWn5eKUtlT34odklOXUdoRzxn'@;
put 'WzsqJit6QEhCdj81TT43MkVSJEYvO1A5aUtFdWlPQF09UnVCX1Q9ZFJ4TmJRdjd7VmM9Zl9YQEpzblRRQnVNPGNVcDdaT2c/emBuLkIjUGV2Iyk+VTJnI0tQRXBnaDJdKz1wVXtsTGF7Nn18YlJHdTpNfkRXUilkZmU7Tlo4UDBQKSZgP342I2ojNEU7e1haOTg/Z2JnKFc9P1FtYylDQCR6THx5'@;
put 'V1g0UHwrfm1uW0o3RVRrPTxuUVFuYWhqWU9wXSk9aHEybG9IKkg2QE09XU5dLm1YPU9UM3FbM2ouK1h2JUpMV3JfTEo6XzBzaVdndzdUTEN+V1Q7NkJrLyFGQ1Y7RHNJNCZDYWp+K2NhaHBNRjVzdyFUIWx3QCslTUA/dXZ4MUlndis6XT5dQH43SV4zJlFpRyl8ZUNeP0chMkB7PWYiLkojcmAz'@;
put 'cGUhcX0ud0NuK0NtTGlWLlM7alMqQFZvNmhUIXk1UkZlcXFLSldybmt1fj9kTUczY3JfLlMqPDppMzomNncmM1BAWTMpdFpiZ2w4UjJrS0RNPztLZ2BFV047S3RoLlRCQilkN3xbM19NckJDem9sRihCYis1Nl9BPXhYNztgQ3dJZCxKWCJZWS9BdS5oeyRXJTlYVnhgMCJDayQyUnd7JmpnVk5o'@;
put 'I2c9bUIrQygidlkxaEg9ZmpUOl47ciJrS3JuP1hnVHh8SE5jayRsMl9UMFBqI1Bqci5FcjFXR3pjNCx8PDxbWytNVEhHdUxfYiZvblczenJAOGQ4bmlQaXhrXk9vJUozUnpqSGJkL2BITUx2d2hmaDAwNGhFfTJLbjFZNTgzcDFwQDFmbUd1Q2JQcU5qejxkS3M2UUhOLkBgYD5GWH45fUA7OCJZ'@;
put 'X3UhIXArUmguW3YuXVdyLj1afTFicWZFMUU7YWA8KlRYYmE5ZGpYa0xTYlZ7dW1dJFNrO3wickAsclNtKT5GKDheaWI/YSVMZC8vTj9WdyFGO2VHaGNIdEsjfHs4NSxFQldTW1Z9fFZpeWBKWFIkS05pSyN8RTokXW9bKnkqblp4QWFYWkZtfHVEWEUoaGZLTzFMZiR4dUlIeiskO0FoK3UjL0FQ'@;
put 'N1Z7UmomYVExKFpeXk81ZyNwaUA2YSlKMV4yeEJpcHk+P1VEMjQsZX5aTzlBJV8yZFB0M2xiPDUwL2Y1VHNgIThTPjoiST41QCNmQiNJOG9nPTY4KVcyT35qWU40VGZuOEVGNCVLdmBSZGpAMGJoWyNlJFRSYHRUOlhyMFdbVm8zTGY8P2B6IltaKFVIKyo/aTRFUSh+RSVSN2s6LHRbRSJjY0tq'@;
put 'Zm5JTVQ5c0NUVmowUzlyN3hra1FpUjtiIX5PMTxKKUh1MUNiMmFoakdMOURUVF1Vb0t4OGcrT2RVUW1gSmYkKnF0cF9jVyZGelBvLztOSDZjdDBnU2pYIWVANVZ0NkwweWo4VXtrbjBVZ3B2Ujt+Jmd2RHtIa0U/d0VxbjN4L2EyUiZ9aGdHd185fSVIMCF0b1c5fmE/fi9dM3RxfF9mIiErOTsy'@;
put 'N2hPTSssaHpDdV0hJFdfNWtZe2l6PWM2UndlTThWOlRQKDtZfik/LDghXTZVQjp9RGN0X25TTUZBbiVOYmhLVGQsJDZBJlBNIl1EQ25GRjAyfnUrWGxqdCR0R2tvOEg5byVzInAuUVA3MH4lZHpZOjh3KUV5YlBmd1RoXzlrb1I/MFlbT2tub1Yoa0hzfj8vKl9eRiI0KW5xcm4rSjQrTlVfZG4h'@;
put 'XnNJL0B9JWZeKiFyOTRsQmU8TDg2TzI/KkckYEAqWyF4I3ReXXJSVV9gPyp3RFtjS0htSWI+TT9EWS5ncnVxYnxrXilZVnFmKCJEVCtXTGV5R0VoM2liKW1PYmlNfV88MV51UHgybDldY1s6Wz4zLlN0TnVUXjIrNnIjdkgxTkxqUzdqflVDOUs/PlltLlVWNV8hNz0kZC8jdWlQK2Y0NE50dTd7'@;
put 'RnNucVppI2kkL0gkbHxGeUZ0QnA1cixGZTkjOlBpXkNAMEJUIWRzRmFeXy82PUY4cktkOk9uI3xAUTNiV0Z7MF8jRnN1QXJscGRMOzFJLHo6PV17YCRqfFVdTiFRZFlMeyFgIW4mO1s9UVJJM0dxSE5EN0NrW2t2JlZQdE52Nz9NVGRXWj4mOSN5d01vekAqZ0NqPlIvITl5XiRoZ2NOeWUwM2go'@;
put 'aCJwTVI0RCYiZkJWP15AYEZFYyVUMUVxLDxJdX4vb1Y3K0lTa31xeSw+OFB6XS80cipINSJoRnw0ISg+bTBvNkpkK2FFN1lfY146K0BLbTlmRkUrRE9VUHRESzBURXQhRDJVNHdQcmZnSThWJVZxeUNBPDNVK2lqWCUlcHpkOk4jP3sidWRSVTswRkxLcmZUY2RyXlN+TmBLVyE2b0ttbjROckho'@;
put 'MSVJWypLKFpfWzw/Imx+Vk9Ne2FbN2RFU0pMSCwkUEB8aHBebDlVXj17QXUlWEsiRWg0Y3YuQ10hUighdEltdFopOGp3TVdCdEE5MWxZODdSXUElaX11ZTlaeHFOXnZFalU7Pkg9dl8yKyhockRmSENOeCNwLGVuKkteISFAfVI3blA4YUkoeX5Efmk+R11FXjtQNFNZaXAiajh2NHpaRCtLcG44'@;
put 'MVsxJVI4YDFOKHgjeG40MVs1d1BXeTpoPSI+Tm1obyo4Q2J7UjB6fjxEMlZ4OzF7dDViWk0qJGZDWWYzSCFqKT9vbXxUantBKkAhMXohbEI/P3pFSDVbVW5dRzhuImBCOFEqSnd4YVJVa3Nfb2BCRHs1U2plfCl9cmQ5YmtvfjZTXUl5alRIWG1HZUsiUk0sWVpeUm55ZUxJfS4xSzE8SEsidXMs'@;
put 'JHEqclcoeXVpKHhPczh4LE5ockpvWmZfakooYDlURTshTDZ0OEJCSWZwMkdxeFQxQV9tOSRqRDt1K0RgXVJbO11YM2dKQjdoZzcpKz5LYFNueEh6WjxDISFlO0VCYzBCWylJLzdEMm4kSzQ8ZzBqOVhGUzFNZ2NmL0AueHt2Wm5AUj4oQChqZDh1IUFFLDA8K0okblFNYUokP3pqVTl0SGRyRTN7'@;
put 'WktKYXMkbWJsNzosNEFeUz0qTFkkeUdKbUQoVHJUZ2xaYmMhSkVOTjQmTUF7Wl84ZTohMn55UX1ZektVUTFaQjIlSiF3RyZ+b2Q/T010PjIudCFBWnwlQF1wVztrT3F3Y2xjSztzeDcsSntnRUA3aFIzQk93OTsyKTZPUSpvW3tBNih3JVV4NHVqOWs6a05kcjtLZz0jbjJfaX40LmtBSWpHfVFC'@;
put 'aTFrJE97cVFZTy9sOHZ5TT0rT0poQFdgZEYiOFRHNW56biYzJE8hcmUkW287WTp7YDRwSUl0VlIucys/YncmJTZ6SWlLW3xRXi9XWFlaMXNDTkVgVCl0IVNQODhHTyphezEsWzVKSlJnUThnPGVuIUtPcW9RRmguYlJpZzh5OUp+Kk1EOGV+K1ZxKmV4LG01KChKLz5rWSVJXXtjWEVZcXtvPzw4'@;
put 'bWd+Jlp3Q2tDW1YoLyYzeFYpUVdWRU5Wej5HVUhpY0w9MS9hJlh6RkpRUTs2Mk5mY2cpSzcrUDB1M0doWD5RJEsjLGFWNCQvSEd1LDsmKkViNm5yVmJxPDR9WFdhfD9mQEBRISU8elpJLDZDMEhiWkRrbEt6cE9kaEJVbUZSKUhDPUhrKzpDTCY3VygqP1hnZDBzOGg3OVVVVihYM2F7TTxTRCY7'@;
put 'YExocjNIViI8Z0heZDt2cHdiR1YjPHFgbH5Ha2h8eiMkRz5tSkNjRjNpfW5xSUBvR11uRSZPNHtDeC82Y1FQY0lXIXZhSnxsPDxdJF5xSHY8Zi9XOV5tKHwqZVAiaGtdSCl5bDxlIVpdQ2Y3VDlDaW5wTURVe1NVUTBVYyVON2UpTntQPkZoez43JmJrMDhgbnAoUSo9M340aFZtI04mVzV6QjBY'@;
put 'ZmFLNH1rckl6PjR4P3pydyk9NyFReXt+MWsxclJVd0hGTitBdmtQdlNHWyNhQTMjYXd3QllhMT5WVUhJP1deNmF2KllYQG99Q20xfVd+ODpUfGxQMTg5cGV3ZXo6VHVkZzFoYixqSUldRUVAMlg+IXpBZyRCYEJ0c3JSI0RUdylyLjpeL1ZQQF5TNGQ4Vyo2IUY6IVhSSmZoQGJbIUYvQFQ/PEUk'@;
put 'fmt9eHRULyErdiZkejxsUl1acWBwTWlzSUYoZnFrTz0/R1RyRU9HXk4wdjhHTiYvVTxaOkUpXjJYMz15RSFKNmQ4SkJpOFlxN0JQJlVAfHZpQEswflk5RSlTeFsyS2MsUCZIS34xZVAuMX5KYGRIb0p3YnEwJll5JlhyWD9sLi89bi9+UWlsNStoS0AkdH17KG1yWSZmNlZtKkBdPW9vYyI2NmM9'@;
put 'Im5ANTNhQGpjc25+O2J5SzdKKVZ9VUAmeTYiYXAkaUtJJXh+V31XKWcjY2BAK15fc2orL3JQRk9RNi81VEIxOGJiVWlpRkkieW8jfWgifD5fSzgpTG5aUTczcnxadkxeZ11VZ15BWFQ+U09eO2QqUHw8XjY6PkVTIS9SRyJNOG9YN10iQ3VjaT01L1Vld3F1bUZ0IV4+cEhLYEpIV0o9S35rUzgx'@;
put 'fGJMPixSZC5iMDFDaGpbaS41V0wiRnlFdT0mXkYpYys2U1cwfn1UPUxTMGslfU86TjMkUEVNPDA9XTp5IzAlVXJMODVNLCNWU1dgei9wYGBPfX5YM0N5UyF3QS4/c1EuI2R2MHoqezFgP2U5cykmaTZXfGgxZmx0cTJJbmRDczUxfk1LN2FrS0NyQmQjVlg9eSxPMUQqcChlJjwlWUkjLjo8e1tE'@;
put 'OU5pITxQbU5eajcrVk9YRSNmWTNhdDlAbm8pfTxGMVg7dUY+X1FROy4kcXUiXWp9eiEkTHMwVU9lVStlKVZvPW5CcDd7PDElIlE2JXw9JTM1T3V8NyI8L342ZyQ5dCF5dTxUdDFJemlyV0tEY01LN3tfWSRCbXpOczJILiZyU1cmNFJzXiZDRjt+ZzlLM2UpcnJlTl0ybmdmPkluZDZGZFdGTSJD'@;
put 'Tzd6QTMhWShLO3xNU30sQWh5aXhKdj49O2xnblV0PToraz5CbHEpUDs0WUldOUt4eHd3XjNuYzNkeih0PmNzX3VrfC5gTDNuJjR8aSNYQTR7fntNO1ZQUnNEW2I+ej9FOnVfWFo2SF5HY0NVcEZrMzB6bHsyNFlqYyEzKiVsNm5zdyREfHdiTCg8IXNwbUQ3PmpBOXJIfDNhdDtQbjIvb21jO0A5'@;
put 'N0R4fnsqYiNqezRiJl03SDhVMFVfaVo1Qm91My8iSmN5RXckVW9tZ0U7MmJ1cHdBcHMwJmhiJlF7O1BFUzNyX1oySjxTPnw1TSI6YyE/JUMyZD1RUyxVKElaeiRgI2JkWWs3MllxOHxfaD5seCE6ZnEiYz1+cUZPWFs8W35DVDxzTj5JMnp2dEhucyJmcFU6OWouWlR8SnhqPDVwXjh4SmRlKmBM'@;
put 'dVMiTTA3RC9FQiFiUVBYbDtIWm9kU3g6P14jaDVsQClLKUZiM1l5L0NNfGNXMzBrWEA3YSU2LDxVTWd4akNXSX0laVAjTSxYLl0xOEF4TThnQksoRWlYd09yMk9DaUBESmhDZiVea3VwODthaUtYTnx5Z1teLmkoOU1OfHpxaSNpRCpATi9MZlJrXkxQMjRodylhLn5eWHljMGs2UWJQVCsjWmIk'@;
put 'QGkmb2oyU3NoakNBaTQra1gyXXN5YVMwfVd0MDsjOyk0RXIkM1dqWnQkS1Q5MUg/PjdKc3puVG5iSzI4SCt0O05VfWs7ek4zImFuKV15TnEyaWloSlpAMilKVmFUWERieEYreFVZa1RMVV4kQVYqJnBueH16PVViOXx8Wzp9JW58Im0hOHtsPCl2PSxYJmhdT1ZOLHFAaHlFQC5RPmcvbHd2TyQ/'@;
put 'UTljOTMxOjRHV1JFL1MwcUhtZnRkb0hfcTV5Pj1eZTg3YiFIcmBvOnAxPzhMVD1NX1NbLH0mLmxSUVJ0T05fOHAuNn5NcjhMMSxSW2IqL15+VzVTKDdTa0s3U0chND1ycVcuMzsleUorNXh0cjZpd1QjdWhZfTlKc2F4TWdUPlJOQj9VbCplO19ueXspNFkjLDZaNnZGaygvcy88Qzsmc25zO0Bo'@;
put 'TT40TzcuSVhjWS9XZ1QwNUVfYzV2bmhiNENVOjtjUDxxST08a103KVYlWWh4WjR4cyx7dE1xclU6bjRTTTopUWojVFJSUl4kYzwvYD5zQGx8ISRVJE9WfTZeajozWX1HdHQoMmEvcGJsQDtOeE5MK3NLNXdXLjtdQ1VZLil8JixzaFA4L0Q9Ikt3az5EaDg/UjIsezFvM0V3Omk/Ry9lQkNEQVZL'@;
put 'KEBhaWRrQG03N24zRyhUIkdoZTsjSXhPa3AwVEBEYD16bXlHbFNhZTxQW1YzVkZfLy4jQi5SM1pAVk0jZEhidHEiMSVpK0ByZEJiRzt7elpYJnFGL2NaYyg9NjosQG8+VXxGRDw9RGFdXn4rbz86Zj16fGtrNno2KzJhQi8oVztuYzg8M3I1Slo7PHZGRF44Rk0zSCQuZ3hdeDdIeXdKIjVPd2Yp'@;
put 'MmJKMmkuM3BpUGtPUyZjbWQ4MkFVeC8hUj43flUrTlJnSmtwQjZMUEJVWkxgNCs1M0Z4NUJ3diw6QjhWdV53aTFQXV17aTsmUiRgJTNUIns3YTd2OChhbDBSV1l3dlEoIUd8XlA5MVRkVGdLYUk0XXRUKURQNltLZ2g1IWJwIVNXWndhOShpWnRxIWV6SntWMyFZP0B8JnZVNlN6KVYzNjZPdG98'@;
put 'TyZWP2NfM1lvbnU0YUx6cSU0dEd7R013M3Y6IyUvOnU9eEJIVGwsbyhGRnJ9Y3gmdzN5Yj5sI0pweF5BUG96I254dCx+TEBWZ3JXUTloaitjN0VbVE11ZCRFYWVgdklxWTsyNiVzfVkhQnh0OWpRZCNwOXBVRC91IThtL0Y9WVMxZ0NZUy5dMTQkdEc4XXtnfm8wVjA6blsyNywxdFViOmRDOXpY'@;
put 'fEs/UkxxYjVmK2Y+WmhgKHtSODAmezo0dWpZYHdxJXpqKDVhUy42RlRrYFp5b3V8aGMqdkhoRW5JeD5RIXY2STYoZ0tNfnJ6eHZ5WG1IOF5ZL1cxW2RqUl5bWWVkcn5sfjd8R1NBUGFOfThLKmVtPCskYnNTbU1jbiV1N048Qz5iSjdiKVo2W1ZHUCttcCg4ZTl4bzcidTNoJmMmbWI1VGU0Tit0'@;
put 'ZDZFR09ePTJxeFRuPC83YHcudixsc0RucUs/ZEljNXNod0Nhcl97IUhRLz99NTsjbilrJSY4KFpAVVgpMnEpJlt6Z1BQcVJ7PCpIN3p4ZjRUZCFhYGJfV1sufm5BMmY1NEBzP303MzlhNkxPYiQ1Om9acjRPTlgqVSQ/MnQmM001VmN+cWFUZ205alZ1WmlLOlh+YVY+YztNQl94MVdYOCxybTJO'@;
put 'JltvQ1B7KDBkUnd2MXtpNG58UiNlMnFuezw7ImNTJl1+cHp1R0xIOm5gQyFFPj18NGMyd3cuNlI3ODpeL2Z7d1IrXnYkSmB4bSNWWFE0Z1VKVDZWdFZuVmFnMlIrSl0vYDcvaywqWWhoJUxsR0k1eix6MngpbXViT09kYU52ZkxFdH1EdH55NUQ6cXB1emVmb0BgTHV8VkgsbG8/KlRqMCFjaSIx'@;
put 'SDFBakshMkx+UFJCMixFLz9EYGJbO1d4T18xTn5DfCguMipnRD8kSW8kW2hxRjBdcmkkSGlWT34qP1dgV2J+O1IqV3p7I3o+N143VjRXRUswfVViVVlmbm9aR2lZSSM0dyltTUBTNTNCX2VGeGBkYCtqOHZTby5TSXA4Wm5TRmclQjFFZVpyYytAZDd0MFs0N3xxc25sWCtZe11BKTlQQFRgWU9j'@;
put 'eiZlcmtIdH1+eVBZdmlPYGEybU0uRF4pN2p4e2ZpWjtOYXxrRE9WcCoybHBiKz1gOFROR09NVSo8WWdER0p9UHNfMjRhdltFSSJORyk0XmooZ3tuMFZ0NG11Rlt8UCtSOyMhdE5bZDZWUGdVYWhdWlBrZz5hLGE4IzFdYntlNnYyPFU/LmxFX1Y2PUs9ZyRvbjVaOnBhPy9xeDE9QjBZVVlxOVAk'@;
put 'Q0h7QzJYeCgpYjR5TiokNmtyNElBaHtwJiFNfVpVclRbU34xLjpHSiooNlEpUiU7PWZGUXtOWSlSSl9YfDl2N3lgPmJXUkBab21vaH1rNUZnbVZeVUU5KD5DQkpzZ1JjXUxVJTpCJl9IdCpSWFFZcD1zOVNQO1lefTNjSiJYdV4ySTpkeCN7XS5Pd2hXeVZ2X0A8PTtjfixYWHRsVFNrVCVyTTQ+'@;
put 'Vi9nUGljek1lcn02Lm0wcl1ueFZ5MSxGbyFbWTQoTTpCXnJBM25NeXY5ZzQiMVI0KHllKWtIKGY5fUg9PkhsRVBZVEJ1QHlNPiRGS1cuLnFBL1tMb04vI2YlVE5zSGRsXUAuano2V1NGUSZ7JVU2cWJJSUUjL3JXWT40Rkg5LDNSNjl1TlJxZ1A0Lz12RUdaNXhSeHUkbFlEREduVzRMZGFjelZu'@;
put 'IThaJCwqOj0lVEEhQypsX3FoYkN6a3ZbKjQ0VDFXJld8UElsUGBTV10peWU5P34qUjB8SntfKGE4U2cuMl9GNmZYKXxNVEZESy94WjY0RV5uXmRDQz9HbDVHJkUxT09qT1c/XmNoIUQmOTxrWWYpIytgQ3FhUz9EZkZPbzBNL092cFl9UWE4NTFYNTJVV0p+Q2lgQjVbdGheXUQqTzY4LDsmQVoo'@;
put 'VF1hPThJMkdLPmBgLHdHWFlZRU1Kek41MVsuLk46aTcxej8hN3UjT0ZeeTVCdm1uMWZ2YmtNPTwxRlJHQnQvezhQUzx1Imh8cVFvLC85dy5GRWlVe09hZjpMZ0QkIUdyYkcwL3FNRm12JUs+dHRzYyolQFRLfU1qeVUzXzZIQG5TPkRiYHl6fko4TSFCU2UucTpoPnNoQz1sYiVydHt3PlBJXzRB'@;
put 'dnJMSHs1TkJwT31AYX1ybGNmVHNvfTo6USgrOlpJLmgkRV1rMmZAR0FaYk9ndygwOTZXY0tMZUoxdzspU0lwTVl2YWQiPGcsYm50Y3R0SVIvVi8lLjxNI3tlNTZ9c0RpOCpXdEo7WWJYN2lFUm5BP3UlclcxSlk2SzIrLEVac2EpL2E+eyVzITRmKGxENWx4fnlUVTltO2g/Nl5SY1RdfFQwLyJq'@;
put 'OVVWPVBuKzsyOiY/Z29uVzw9TUV8SXVoR1o0NixqMnp1UG9RJm5KPmdXSmxXQyN4WUZYeEwuQyhRMUJBalFSUGdRMnNvUVtnJXlQV2xeJWZJJFtBMjx2NXxrPVpsJmJATE1Lej8jYTBzUDguMUQyTHRaKXwjJmwzUyw7QiZqNV1fP3Y9X3AjM15WV3F7fiVhSktWWklHdSx4aXQ5YUlOZDZ4Lmkx'@;
put 'fHA1Jk5GSXswIXQzaX4qOyxoWDBmQFpJemFlQzdheyF9Zn5nfChsNlROZEtaZF06UyM5b0UqdWRJREMyIWN6MWBoZl8wLFJdX3BKWGlRYEVLNnc3V1hRaXhSJmU+d14zfmU8VF5JZHx3RGF7W1ZqSSxSXnJfO35pUiFVMTtWNFkmOyl8V19pRV9ZV1QzfVExNUlybiFCOXBzKX1kbEN7ZUgwell+'@;
put 'RlRxeE09JjlsYClOcU9OI0pkWz47IW9ub18ibHJRfjY+bipibUl+amoyeXZeZUM7eXAsMl0/NG83OWgwZ14lLzlxX0ciP3N0Vj4ySCgvenxEUUhPeTdyMXdpb0w1ITJKc31EP2VmTFFQQ0ZZXzYxOUpeNGM+QSxIVjdrTnFyVUNCUiYmS35nT3Uldmo/UjpwVmRxUyNMSl83bWJJViNtPWdBO0t7'@;
put 'YW9dPHdeOyQxLmxnUnpOMzEzbCtsZCQ/fU1+S181TU5YQDlufll7YWpufmYsYGtya3ZPayV6Zj9ERG9tL2RgZDtIPH14RUc9ZSV4SS57UjdRKTc7WUJ9SCxqMFhufF1FbkhmWnRaPkxmUTtybXUxKjVWUW4sSz47KUxQeFR4dktDJnZlaXJHdXdhYS9kIihZUXpbeklQWn1Wb0t3OC9oXUJxOEA/'@;
put 'MHxpKG1gfnU6YDkxUXZlX3dmbHZ4Y3Vpajl+TDclL0BQPmR9I2spcngxKntCZmFVMSkoJGFkJSN1eiZGZDhlYTJkKjhfUEszMn4jNUtJOFQ9NmUmcjI5YypGMnIwe1Bgd0IqK0IpT3dEI2Nkdls7RmpOLEVoeSFwJnx9OngyXTh8KCFBOFMiQ2VVOXMscT1lQn1jdzY/RHQ3aFBCZSRnQWQ9Ll8w'@;
put 'KTY0WiosJWZhZkZ3Z2IwYGxsbUR0JVRqJkl2NDQ1T1VDKkJ+QlhMcVJpZ09+IVp5cGpoPiJdIXU2PDRhLyZ8dT9URlVBSUIqIjdMalVAOmw5anZVVmx6cU5YZ2lFTDJvfEJVNGN0ODFPMjIxKVNqZ0guMUp3Y1Y4QDhOSyoqU1kwLjovRW4sVjJZMlNeOilXL0FhNCh2Ryo4OUQkNSh1MzFbNkg4'@;
put 'TiNMKEA6UHErcDlAKnk5cXQzOCRDU2huP0c7clUzfTk9JjxxY2JeK1o2RCl8QTMxYkxbMiVESVY2aVkpRktsKzlEbmUpPm4vQ0xyIWs6ImhvQCJHe2BmVEtQdSNPUEcxTEsqSXoibzplMGJJKTM+alF1VTZKNTAoQmBsN3J1WGJJKFRpPnwuOS9HQlJLOGd4dDp7ZWVBfS5zeT17NFtfeWFXLz5u'@;
put 'XSl8JT1wSSFPdF1CN2Q+OWpTcl08LjAofC5mPTVlXyY0bGArNmNlQSpRdUJxUzhvP3NyJSMvRjpkampfNSYzR11odCQ3UWAxQE9PdTclXmtvU3YsfSo0N1VDPj59OD1YeVU0PixkOj0+RXgwXUEydXAqR3djOD08SVYlJFpkZlpQQCx4eFBgRGk+YDVGVlFIY2JDaVgjYkM2KWUsX2s/enIkRFZI'@;
put 'XV0wWCt7TCtpXTFeeTkpdlZiY10pfXJVTUZeeW58LkQ0L3xWfkM4eGtxYXR9OWImLEQkS3JVNis/NmEhOkUzdDBFQ2FUbGZSdDBrSTteODRQTkxgQm5gSDt5OUdEfiErNmd7eTQse0lCbWM9TjAiJUtnSlFUMjs0OC5gWSlSaWxqUTIibDxbVz46MDFNfF09dmxlOC98KStrLmp6X097QEQzX0ti'@;
put 'SHt4LG1xeEE4dEJDMSwlfVksbkwzZVM0ciQkV0NVRjwwcnlVI109cjtgUEZMT2g6ejVSQz0sUU87Rz1mLGRial11XnZyaylReURKKlFXUUxOJDF+PF1IRzZvPjBGc3wiVy8jOU1ORjJAVElZYCo0Tl1lOFhxPGV4RnNEKjd5M1Z9PjosRmlyaXohKE8xP1FnMEZxeTo9NjlsZFNeJjhAb1ZFczFj'@;
put 'NDw2fX01dXNlRU1aLjw9LCpzb1NJWnpCIn50X0wkO2B4JThlK0Q/UU44fUl9dT5GZUI2ZkJmJWtuQFh8PExIWmQ7UGkrVDpgTER+KXZMfHB+bFs2REJJMXMkNWRJUlZdTFFdQloqL3x0KU9PcFVqM35TeTh6Q1djPHhrODBGXX0zbFdGZHZHWENBbFFqIzg9S1giQGBgYjZSWXUsZVRHSzhWSTVZ'@;
put 'fT5MMztZVTFmQHgqLFc4Nnk8OGdSJSgkclNwZVsxZk9fJk1ASiEhWVEhJnlOU2Rvcmo1PmJpMzpdQzZDfm8jd1gxb2I+Qz9KeEQhNXVDJlU5KDZ3WUBHWk0sIXdSMCx7O2M4Y3tCRCsuMGB5VFVzN3YiRixveEVFMUo3PCRqcjwxbH5ubVNLRU9sbjdpIyF2W0NWRSt4XikyUHYlLC8yREd5UVUp'@;
put 'cCxMdzNVQlBJezJFc3w4SDRrXmhHQ1NNNmQ1SmokfHw8SFJ8fEAyPnBeLz1HdTAuUmI1cmttLnA1YTQqVFNxcUFUS1hpLFlofnspRDRxKGUwOm1oYzZYLEF7S1JbUi9gTT99bkh5SFpGNSQwMzEwZChRKTo8LGlOQWEjaTteKUUmOSNtZn53XSNdLDgoQGUpWXdPcHwxSmo/WH1uO19ZWWFxVVlA'@;
put 'NSQ6IUwqeTM5JVVeKy57XlF+YlJiMVJycWYqcU5sT2RLbz9sZ1JmKDcjcmVWSWVQfThbP2IhO2Uhd3VDNlRgJU8oSk43RDZXWnpTeUU7eis+cCxkZmF9MWUvMlIhNGlHZHBPaHBFOis9eTskLysycXdqdktHX21LMjBfayJRJjFJYVZmQ3tjYnU2ISUkcUR7I15vNT1PO19YPGd3Pz9PeSxoWXY6'@;
put 'UCRBKT1Bel56a1V3KzhkWWciNzMrZCpCckBdIzU5RSY8SX0wNXh7PyRDRFAibmVacyMreGw5X3lZRTJfc1h7ei99SH11dSFQdC5TViM0RVpGPXpwKzlmTjcjM04sMnksTzxEX311OlBqNz5gWXg0O1giWUg5YX40a1dGKz9iWU8lYXJPL0k7eE55aD1iUzRLQFVtbnNxXnksSSp3OmsmQjVuU0xN'@;
put 'Ykt2Lz07RUZPPlh8Rm5AKmMuL25AWURyKnl2SHwhT3hmWlhMLjQ4KmFxXV1zKTRXSDBoPyQzOn1Bfn1UaDhTTDpHTHIrUXZQKSVbejc9NyVocVM+akg2dUBQTHIhIVpEM3pWOHlMezR+UWtkQFJMQXo2VzZ9IXdkYEMxazU0WCsudXh8fipSYl4xVTciX0U1fVN0NnU0bXg+RyxyTjpWYTZ6SD5S'@;
put 'OFh7TUtqYTg8fDtFe0oqIShhMnU8UmF+XWp0LlcoQSNLfjpjUjFEKDl9VGZwYDp4XTRfUXVHfEB6c2N3KzV7KjRpPFA1ZTpIQCVLOGNvfC8/YWdYezNXdzZoJWliMSErdyV9R3o1bihFSjxDUTFSbWJQYWQiRyxmJSNjfDhyW1BZdXxEeFMvOGA5Iyp0TFh+aFdTU1tYXnhfMzZTc0BJQys9JWxq'@;
put 'fDM5JVFhOjNUJDdrVjMvMWhNak9wMnlaQT07JVR7PSM3IntGRzkoZWxnYlM4aUZNWihPJkNqanYrYSN2W21gVV0/Q1hgZGZFUWp+Skx9fF9jISUjUCxJSTYlaVBYbUkyaXc0LHZ2Si5NOk19Mzs3ZVFhZmJBPio8bWFoYFtbJkRASio6OClNdmxPL280KGEhSSg9PWJYbkwsWUp9K2hgXjwqLiF+'@;
put 'RGk4Ok9KJENERGJIZHhLXVg4S1NAJDAlXkx9TDlBQ1pTUT9YaHlddkNscH4vOjQmeigqWCVxJTM8YFVTfUVaMGIsSWdGSmhuVFVXe1FuQl1zPTVLI3Ryd0VZVFNvVDZVM29RI1BnRmgvdn4wbXldVz5ILjZVXSt6d2NrJnx2Z3UpTTRPdiM4cVlbcXBON3AyfXdSbz9mYCFuKlFjRDBwV3dVNmlE'@;
put 'UGIhcUI/bCp8KT9WXSR3eTJQL0ZAcXlobls0YFZjbG9ReWA0Y2w7eCRqekYvVjAscSFFbz90I2tbOkQ4LyFOMTtYaVhZRl0kam5eNEUvUF51SVlkPGkrLHN0ZnZ9NlNPeWdmYnduJHFvcGFFe3gufEp9JWFZY21IS0R7REtsOlRuWHJOWyN5SFpLMkA2Xm5TMGVGO2ldKkt9R2dIalsmQGUpTzA7'@;
put 'Ym51ZH5TUHFAUVEyXXtZenJIP2FhSU1CZGdDVyNUI3tbVVk+UShrQyl7KkxlMGpzOlF+Wm5KdFRbJEwzcSQwQXcwY1VhIlBaWWVIXm01IzBhYiIwZyg6OyhdKihHPk9fKitFc3J2XW88VHlHMkNpWlN2fmFpO25YOjB1XXNrYDloa25jdVNYaDtQbkE0dlUmJm5gOFI5aGAxSEZgTUBsMVR3K3Ns'@;
put 'U2BtPFAkaF1BbyN5K2A2bFlsVUNYPzJRN2BWYFdIKz44OklKVm9GXXRCcU5HTGA+Y0RxXyRKU0F8fnJ0c2JSZ0FQeFc+JGExSTAlKD41b1NKWXBlVElBbUduaVNoSncucn1yNkk3RHMyZT83TTA8SnFNdjg4KTh5bGspblpmTG1zdVslNSVeR09feXp9c099bDcjUnMucChAW3twYzF3L05KXURt'@;
put 'SipTaFIwQHkwRDIoW3FNWHArdDlFU245Nz9CcSVsKTRhU3E4RD1zflBoMzcjanRlQ05UUF0+QnIlaSo0YVMmUSwkZiNVWjU9NUxlQkdkbEx8MDJeZE41PGRII30pJTZyfCRdcD5RN0xHZmwvbDgxemR0L0owTWd7KTk2I3IrcDFyXVhmKjJFN1UlTixVbktsU0FDVkFTalg6dnxKaChkNzdhXWA8'@;
put 'UzhXPU5NSTduWktwQn5ST2spTzRELCFreUY6bVVZLzgwSHlyYDojJGp8PmVjVDZGITN8JXo4KTY5SW97TCFYdjVzQjI+dm9dITsjcnJQQFJAUXElfjJnI1pLN19WJCkqWyNsZ351OEZtSFg2YVVRQEJVNjlfPCZKen1UPFpGeHtMOms5LHZ1dmZ8TV5XUS8xZ3BPI3JMcS9BSzhvXSNFOTErUyo1'@;
put 'RjRie14rTm1OcnRPajN1Z0U5QmE1eWhyIThqVm58UWVPX1BDY21mL2w7TEhCPmV8XyZLdlJ1ViZFRTMmYmVZbjNMQmJQKzFoMX0rOnw/Ny46bF1TemAxUVJiMzMrfkxJY080bE4uPSReclVSTDRzW2x1WU1vekgyJlNieyV5KDIwTll6RCF2K1E/SGN2YyIvUTJwbzJBbCtCbChncHVhMGJeM2wx'@;
put 'IXAvblFxL15rMlZCbEh+IyFFUWVIenpoVjE/cH1mV29kMGE9ayh1MEpeVHRNNldXJXhMOComMzVqK3FBRzdCM3UrO3VvWHNoUnVxTSZjMmVAKkxOdldJMD46QFp6bG5KcXJYbWxpUDp8NT4hZmEpSCMwem1fK3UxYG84dnIjJXptSHFbWmx6P041MCVVdThIIWVBKFVhW00mZzNGK01MMU9jbHA1'@;
put 'YyxsWTVDaTJPQyZEc01TN2dGRWhRQSw1IVBAZGRPcjxHOjhINmpKPUIoakE5NiNnJlY1Q356TlBke2x8LF13ZX5SYlZ3ZWQuX31oVUtfJERZXXBRK1R9YT5lNVAsO1dsU0NrU3RAaDVqNm4pSzlecVF6MXteQkp9alFueilkcX11QHVWaVo7QERJPiFSeGEwVyFwbDUrMmtlaWsyZFtMZCU5WVE/'@;
put 'ZGtTI2d3VSI8NUQjbWk9dH57THoxQCtreC5KVHBDeUx6PC5FUjohRVRfQER8ZCFfQUhMWT4vKDFXUyNGbVJhUl9haUglWWMjfkc8PHxofGhNRDAjJSZgUUNsfk9LdStxbl5qJG1oNXFAXX1JMkclI057UHgock9HPjBjL3tCIjNQRkJtKzRyIlMjNGdaS08mfFghU0hZMyZ3USxEaTtXOlZhXkYz'@;
put 'JmM2IyRVcWQ/IiZmajZ6fnA7UGpeZGhYMnwldFVHPE0yfU1YOD1eeGsqezxaU3FeU24xZ24jbTtlcmZnLkkuczE9YD1QK2xkPTMvPzx2Ukl6SUh4JlpvfXVeV0BwO1sjdl04cjJ9RD0yXWJ+eXx4NlZvaHNqOGdARWl+QV9pckNTRVhzNV1EO0ZBNmdRJFFbN2dfNWhmPGYxZmBFbmJudHRtOWdf'@;
put 'PzVpVjklX35McFdXMGB4TkheQDxfcDRqYzFpKjBMJWh4LjxyfihLW3Uwcmcsb3JjOUpUJX1IVH5oVGdDJT1CTyxFLzp2V09YN3FRZDVZZSh+NzxibzR2YShuZ3JLLyNHbikuQTdHMHcqalF7azBCJHNMUXZCP28uTHBOTyMxTV5QOkNFZTl8ZFBOMkUyJTM9N0Z9N1diTCRPMVc6WWdxdyFWZGN0'@;
put 'aDhoTWxqamZOMFBWRDJ4KUU8Y3pdNDFJW3FRUmV2dDhbI2kidXlFUDJDbzV2dmBrY0tAZEFJbilHRUMjMjFGO21SR3ljQDJ1UEJ1dVZIYkl1dVlKVVVTMlg1MjhLQi43KkpUaSRzbiJsKHl+b3Y+blFWUjBrZUkpcnY2VGUrdSphYWlOPW5tV3J4NV0+OTI4WHJFQjNjT2ZiWVVSMVJEXlhCfl05'@;
put 'L3YqKyNlQSM3aUZuTHhzQ0hZV3pRPEsrZkIxT0l0bjMmOEMkYjZ4Iip6dUk/SmQkfDxaJj1MQXdkeygxUlR0dVQ1RDN6KHA3WzI0UzsmI0lRLGR3JCVMZXpiLEt+RkF1O1FYRX08TjxKPD1bNEdlZXVxO0EwKlYxOzpBUlBmd29pVktlKyJmXyQ4XUk5a1p0TWBSSkB7YklLNyR7QXF+SV8ha3Z0'@;
put 'elFwYlo/W31DPk5ocmQ/Kz5kKX4xRVNrZzBOYEB3RnoxYU8pbmtTYFdrMyxRdF1fTWh6fSFrbFEkdjhga3F3TClyX2YpQltdNFtsbTFYaFpjWjglcGRANk16RG1qdnIoMlBhfUl4PjcvWU52bEkifjs0MD5KMyElUVdAd1VVUzxMIjheOHUwUT5RIWNGbjNTVTgxe2lbXSFbPys3NUx2NiNCW113'@;
put 'eGovZmE2RFZ9R1M9PH5SMCkiWWE5a00obCNrIX5JX2AwYkA9NS5afT46Y1dmMm1NQV4rJmV9Q0AoIUFac3pFQ2NqVF0yIlFvK2Z2KEUlZntwNTtMY3x3Sjh+SE1MPmNiOT1COT9TMlVnTkFtLyNCcVYyJW1IZGBIQW0hUWtHUmBySFo1MUcoRlBYIUVPTkA+Pk5EI2hyOS9zQXFNfVQ5bU9wY3ty'@;
put 'dXlfSz1oTHUlRmEoI0Y5Plh5WC9WMWRmKEpWcEM3dTZqS3UlREw3XnwoQ3tacWdOJjVba1Y7YVtRSmFqNko9clhUekh2ZnplMjp0al5tY1BdcTcmK11OcSRkOjtCJFcyYWF0P2JNWDZlKXcrK01ZOzRGIUt0TDtCSlY5UFoydDw8fEdGcSRJcDF0Q3I/cmRwcjFaQUhrbUY0KiUrTzMyLCNiIWxK'@;
put 'PD0qUjRnaH5pW3hsOmpLXSYhXixCRGcpTzFvZWQxUWFfdjJ5T1NfJTFyekhnUDBTYy87dn04S0dvYEJrQkQmIkRTe2BbSXMkVC9dXVFLVDwmSlBqWG9UYmYsJn02Xno5LF50cWUqXWZicCVHImdbd3JTKjFJa3lrXk5zOHt0a1J3UG99VVp8XkRldlQwSj5PJkVAO1MvMmBgO04iJVN2M2EuaChD'@;
put 'UyljKnVFOGFSXn43XX4zKzAoamJWOHZpaFU9aTY4JjRbbn1iU1Z3KmJgJl5neERgJkhdMjUmTFtdbC47QDQ7YjtNfjRPPypUVjdYezV6RlgheHpRRm07IkN2Z2h+Iz5YXkRnbEp4OWJQdntATUI7OVUjNiNWeVtseGZbTXtzPnFMak1GTUgkaTV3XVRLcGxkfiIqaTRiOE97aE08SFpxXldYNi49'@;
put 'blI7dzIxeEZ6Vms2V2xGQkZOYWcrU2ZPUEBYdiVmP3RJfU1JP2NBXWNPaC5Jc1EqJFZZbyNSPTBCbCpiaDJIZjZfNjdzJX1MZi8hM2VfJSUpdiNDSSIzSmJ2Yl5fZ3UjLDJlaTN1S0ZIJGtnIVZAW2V3VGhkKWdLOl8oOFd4MWZocXFVTS5pbmFhYV1GfVQ5bkY/XyVeR1lUe08iYnV+cXBJZXVn'@;
put 'PnBlZ1hATzNrM25PeUFneGNBJT1FIXF7LG1PMDI9bDhPNGZBKnx2LmsiIWBZYWA2d3FSJVUxUEJdb0xGaXs4WGMoNjNRNlRvUnBaNG5eSClzKyt8Y0wsUSMzVzQkdjhYPmpHIjN4NnM7OWM5Wj0sRWVfKCpvcWAxbEF4WjU3QzYjOTp9STZUOClZfVt8T1RNdGRvS1JpWH5SWjR6WD9aWHtldHRM'@;
put 'U08kdTVQM0NvQy94S0M1RURNWCFFcl1JQ2tAPjJYS3BXRnpIczJtMmo0TiZQRGAyUltuI1Ntez8mKGYwZy51cFVKUTcsIyM+ZWhoNHd0Lz9+Uil2M2VDKCZxfjskWm1XQWspaT54KFslMig3WTJpTkc3Z1M2Kz93a0UzdChYZUg7Z0c3IzNsNnM1V3VKMytPW2JkLClse0o1WjZ0cSN1NEhIXld3'@;
put 'd31USUJeO21aOl0+LHZPLywuQFgyYipwZDRJPHJAYng5MVtnQnwzaVE9YjxsJFVvRURJKmpHcGV3WXw5WyguZzB9Rzl+bG8yQiNne2E+RCpdTS8+fkF8IURMYjdsM181ajMkQkBLSlZTcWt+eD47em88VlBsfVcrWl8sQGhScjg2TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6'@;
put 'TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIx'@;
put 'NmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6T10xNjA2YjpObDBTYjJiJTlhJkJCLy86c2h+Jk9iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sMFNiMk5iMTZiOk5sQjdiOk5sNkB+e3QwKSpkMk5iMTZHeVdsPDoiM0Y6'@;
put 'd1tBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3Jb'@;
put 'fCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iMzI3Mjd9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0Ev'@;
put 'IjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3w7cmo+IjN9VntyR3lMV3tyY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3N0YhW15AXi9uS05lfFo2MSx0Mmt+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5l'@;
put 'KDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZf'@;
put 'OT5lKFFkRSsoaDw6dD5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfEhjLmp+fjJ9UXxyby9+UXxRL0RdbUI8QzlGZkwhV2h0JiImIiYiJiImIiYiaTZGczAwb3l0VHphZ2YsKHAwPSIjS2AiJiIm'@;
put 'IiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJxdCYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImInF0JiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiYWRFK15oPDpzaH0l'@;
put 'N0h+bj45KCZ+O2hoQm0jOXBsTFphJUdOS1t1bzJDOUQjNzoxLFUrZUd5PChLaU5ecWlWVWJCcypZPEVIXUBSRjl0JXk3SGRyWkY5dEx6cHlyXyYicl95SzxFWTFdVjZDPShWcVpGOXRyX3lLZEJgPktWNkM9KFZxWkZVbys1OEMiZ3xLYHBJI2RCYD5XeGA+S1Y2Qz0oPnY9OylyLzEsVVkuNV83'@;
put 'Q1Z8NyNrdWFKPjgwVjVOVntmSCNDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpUzpDV2FhVVoqMmE2OVBIP1YsTHUjS1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxD'@;
put 'WEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSOktDamQ6X3t2aHFyPjkoJn47aGhCbSM5cGxMWmElR05LW3VvbEZfTyM3cnZHeVIpZ1Ixe0d1VVUkQ3EqWTwrLHFvbEZfQ0Nqel9CMSZDTEtodVVYd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczRrMFV7WGUo'@;
put 'VkE+VVFrajBYMDc2R1MuNzQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1NhTEtwMmIlUH03PSxzPF4pKF97RWlxcjJk'@;
put 'fFVTLnpPKFNGMixVMjY2U003OjEsVWw5S0teNG91diF5RD4saktsZkd5cGNXKVk8YSpZPCtCLDZ1eTdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO09EbEJMTzY0NWliTmQ8SCQ6VixpNWpWPE8yYyV3N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RS'@;
put 'NWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7T3RvKmxQWzRdem9NfmElfiI8XkopX3tSN15waTJNZHJsSVMxe1BiZWwyYzRSMXsuZ1ZVVFo/Q0NqU0gjMWFyOiFLSzQ1cXV2ITN3diE9T1JiZ0diUjxCYjZ7TXJPK1pMYXtjeHpXMFs1Rk5yTytaTGF7Y3h6KGQ8OkJTalBENHVLRk9OKzFoeTJYP3Aw'@;
put 'WSkyS1ptN3VDcGt4OD0jakImKD8xP1VhTSF9MGFRfDouY3tjeHpXMFs1Rk5yTytaTGF7Y3h6VzBbNUZOck8rWkxhe2N4eihkIkB2O2MuVTtNW1d9em9fQmIlaEM4PSg0Nz1xbHdhQDdoLlk8I1NzNytacitZPFNwYEBvUXNMR3lPZCZpTl5WLHFvVjE7RiVFYjZxdXYha2xrbGtsQiswalkwQ2R4'@;
put 'P2E2UTBoJjkxLiVbNTc9cXlye19dR05qTmE8WThycllFRWhQJUNHTmsxIzFNZXw1cTF7MGppPzArUlVLOEV9ZCZHbjNeTE4zTUdSUCtHZ0V6Vml5MldpYWFWK1Z3W08jR1EoSFRRKHJUKyZqen0kPUU4WjYhPEh0cjYhMD9VYTZfVixWd0h9LDN9OmJ6OX1BYzBqTW0vPGhoe2wjOX5TPWV1Ml9s'@;
put 'WS4kSFMuazdecHM0bkJ6Wyw8QzdGTnM3bFRDals6ZnZHeXVkJWlOXiZEXUBHV3dQRSsqN2hSMXtZRHBvRTR5bzhyRDc3PXF5fjo/bVZTcT4mJjxZb2g5QFBVNl8pdzV1LEB4KkBkXyZDQHl8KVs/Yk83W1g/b3FdbyRHZDhIJWY3LkMySV97bVQuIWF8LEYxV3BSP11YeGlMcFpkPDswZHxKQ2B5'@;
put 'fDhEUG9xV25CIlkrfXA2XSlESzRGZlZ2fE5tNGU3OzkmNFVmY3doP2V6fmQ8PXh4flZPemdDamY8bmZhYHhQI1lkOkkqWn4sckd5OnZiait9WEA1YSsrPn44OFd5UlQzRjRxMz9DeS9DN3V6MCU5eW93eCh5WlBmNjNxLGZ5JEE4ak99P1R7OjpNZDI9VSs2X2JnR2wiZCJ7YlZeT1VMVWA3N2E4'@;
put 'LD1bYjhhTzt8MDAkKUcjKUtHMV9xKXoxfGJ4RDBUXjtmYklrSEB6MkwoLlMpKCJNTjk9I0tSXnVicSNFSzEvM08mViQ3SENNST4mWVBOTjlaOzFRIkYwZSVeYXtIOFZgOlE9OHQ5KCpLNE8mP3k9Z0VuOTR+MGE4aFZ5OTxXb2l4N2VSMXtzdkd5WylnUjF7SHVVVXZGcSpZPDoscW9ETG5aeDc5'@;
put 'RUxLPDluKlk8eUgsLE9+RmZHeV5lKGlOXjFHXUAwc2FSTn54NzI2VmpOXkpvYEA6S11XS0todUB3diFrWiMxYXIiQ3BvXmJMS3ghZCpZPDtTYEBTeTxMQ2plOyExLFV8dFVVRmpbd3YhT1BHZjdHYzFES21mKUFfRkorZ2VzKUh2RWpgd3YhbGF4MSxVeCMrQHs5YWZnLGN5R2pFXmJhTEtXIyFT'@;
put 'Zz9tOUtLVyNvdXYhe0RRaFpNUzt+dWBAOzMkUEUrL1BMaU5eYDx6ZDdOUURQPD4jaDgxKTo4PWdVUExncylgSHkjLk1fLng7fW8xSW45Rmw2bGtNTWBacGw4Xi5+O2h2TGB0dF1sflcvUH5JRjw+IyNmNWxGZnkjcXtwa01eXTEuJUlZVlVLRVVIQ2pbeWVSMHAvSVdVS0U4SENqW3lLaU5eKHRg'@;
put 'QG9RZmZHeXdYfFgoWSpMVylZPCY1K2ZARiFqUCtHdlVVdkZLMUVXKWclbWorMWgwKVo7MWhAL2hNQC9bOGRwPCx+V1JqLlF8SU48OyFvWUhOVDpGZj0hO0hoPzJ6IV00Unk4RlUzdWd8TCEkcW1aaSZkcFJELDBAeVVZKzBeR1Y8WDZzTHRKbEQyaVoiUXRsX0hdRD1AKzZ2WF4jYU5gZGdTTUd7'@;
put 'WjY/UzZJTjxbUypGYElFZmZqWVBMZ2NsNmxrTTI7d2d4P205L113Png7ZmozIVluY1BFWU9RQkdFMUJ3dyxCKipqdWlvSmclUFZvOWVRYHUuLCVlITtkPmZpWCQjSElfIV9AaHo/aE1ZMWh2IV1UVms+aE1hTUkhTEVUJm9ZaThAbCJ7cCgjSF1zZEUvfjZJcTk/OSYrUHhfWWJwJSsrMGpxMmxM'@;
put 'Zy5EI0pnO3gjZ1NIUndxV3pddWdQfldxTU1vdy9aO2NqcVRJITUrL31TOlp6SGwrbDFpS29gbkp3OXVVODFpTDwsS3RMUn1yMSwoSSRpRzdLO0s5TGA8ZTw7IVlAZE0vTD9SNCEjRVMxcnhRRWxGJWUxejMsZVhUUilFVWpDeXBacGhRSl1GSmxbdylZfXVKaGJNVTF5I0JUNkdgSWExb0lkUC9a'@;
put 'MUgldk1eYX1ESzgzI2ZwYFs7TSooWXN7PEwuKCkwaE1HQiMwIkNhViUwLFFIMjlaP2VZJk9TejZMZGU2Tm1QbihOY1IsMls9eT53MnMpdSxvQGgpbE5wIlJtT2RSPE99UFB6WmB6OFAzOXBab2o/SXdlKTgmIX4rK0Rie3UqXysvXW1mJXpLeikleTlXfUtAWGAlX3UsTVlMfi57Ynw/Syg5fT8x'@;
put 'SHhTI1oyXXxsUStBaX55V2JMJXh8X149SE1XKDk/PWNUZyJGZVAlWl43QElzZiZ9dUQreEovTEkoUT5QfThxPSthLFUqTXNmJi5Cd2hoTXlmdn1dU0RTalAhfHM7YSxRPT9nRiw5SHhfe0pyd1ZpaThlfFY5QmpIUUsqeCssVlJndmI4fV4kTF4zKmtfMHFhcmImVjMlck1QRCt6MD09OUBnJiQr'@;
put 'TmBqIX5fVCNNayIuXWFNXV54dWo6UkVmZyZCLExXKW0wPVhvJE46cmAhO1VYbGZzJnJbenVxQyw9dzohVmA1aksqU2ZSeFdmeGh2fTFwYTspXl88QTRscTtkOC9WNXBZK24xKlZeOiRWb2xhcmdtbEk+cSV1LGBYcTx3Xl08VDwsWiNpN0A9YTMqK2p9TFNuMXRjYk0rXl9vZm1SNm02MCg/YWpV'@;
put 'LHwhKUBiISIlMX1OP3YqcWhbSjQqYiw5JjZxdFFFPWReISFZMzxic2wjIVhNMytEcGZSa2hdWypqdFFraFArZHlTIyF4a1VeNj9hIjV7PWZWcy8qR1I+PyFnVV0lT3pUMj49d29DUCZ6LlBlaihxLkg5e3xAMj9Xb2l4NDwiJUxePkVlXjZAPyFpentsPjJjVE4jNFpFX189OSE/a0Rga1NsLk9R'@;
put 'Tm5Vdzw9I1N1M1slZGYyNmwsX2Qvd3FUSjVneUMmYmVPIV56WmlAcD1bVjs3PF4hSjl5O1QjNStpOD9tVC4/TlEoRlRSd19ZMzw2cHNwOHBYc2Usb2ZhblliRU0+M3plXj0iaVdeOXJ+bm1Qd3ImeVo5ZWxibkdmIXhPOnxUdVF7JDQ4OjNvdlhDIWp1OXBYSCU+SV9aKEB9RDhwZnM/SzFdQV1p'@;
put 'JmhWZnEhfFlldDc6eEk4TyYuJSw4NyRUI0RvYlRfP1QuQT5lLEY9Nm46bEt9cyRmfC5uNTxSVW1vYElyfSJ7X2YrMjU8OFY/VnhlVDwjWjd6eT9qT0pHMXJ6Wi5pdjlVTWtocFlmTjF8OCsxfFRSbGt1OTtIMmo1bXpRSElRKGM/YHdAPV9aeW13KnF0PnJVVn1wMHooJipqbXBWXnBmQF4rTUp9'@;
put 'Vz0xTj9ZXzs0ZjYsVVoySDFHfWpZcWR9PjgqTWRObGt6KTkzUCYyRXxsM2ZibiFKOTsyVDAsIT5XOWlzfCQkK3JwJE5mQDE/cClEaH4lRXlbIXZrfGk3LGhUdXE1bUxzX1llPDJ9cW1jQFYsZ3wmZWhgejxxa3A8KyV8I1h+e3dYUGN+ZX1MJWhpWV5iTi5rQ2BuNXBQVTFiT3ZZMzhTKkVxTyZw'@;
put 'NyN1QFBJJXdHNUxoZXJ4WnhIZnp3eiszJGdfWSNeZ2JNYnNwSmN+MCEhTl5bX3UpJVk/JThgU2NuOSYmKmUoeGckYiV9RnYrakRnKkpPPSIlNXwxM2txKVp2LFluX3dSPW8+fiU/JT49ZW9rLjtKMjU0cDhyN1REOUtsck51MzxJbjJEfHc7XXdVKjIxPXg7eHlHUGRPJT19OjVCJXsxfnA5fUYj'@;
put 'OXRyenJLK2JicHkzJiE5fWsoMzN3XzVeO3hEJkFRe1NtcFBPPD0xKyU4UmVBS1V+dX1YfkEmVyJKc1ElIUlncFRNUTl8ZnB8ZSxAP2FQZjApJXQkelRwcFBPVyVdRVBRfmZEX3ZtZm43LGpmQTFPJXhnVG12UStCUGRPb3IhV2BtPUdLPStIVjZfRWAjSnFFKXg+cjRwbSQ5JCNINSQ0JGwqe14r'@;
put 'P2V9I3F3UEI+cSVFeHxZOCZJMDwhIUg4SFR4fV9CMHBrPD06NER5STFDJTA5a2BHZnx7XSU5R3YpSTFfKkNxQ1E4QCxAe15nJlM8cDc3ejkkZE5CUW5mSzhkJD4pRmw3YU9hYF5hXzQ+YjFXOXBzfElhX0V6Q1B1WX5QaCE5fWVOO2woUWNASDEuJXYkPkghOVBaK1FvNWV8QG5eZ0RZYVF4ITQs'@;
put 'ZGJnbVJlUm5La1F6RFRQJFdzckA6MCIsTihPci8mSTBJUXphaGByZmpgTzxBPmJ+NjxkfC5ARS9kLFc5Rn1MSjtqd14wNXltLCVYbTRQSkcoJUhfQmxIXztueilLPjczeTAxO1o5T2dAcFBgLGQzNmMkT2U1JG1aRWdSe3VzInI1P2BZV3I1P2JhWytRNDE2e0drcTdyI3M1P3MsPHoocUFgSFFC'@;
put 'bnllMmJDPnUhQSU0cTVKfFlaLDUrZXNxOTpqWVpYPTxFIixdaWV8VEouZCY4UDsre345ZioqOzNUQnZIQDRKaEBgWTc7Xj1ZQCpyKT0xVHJwWCZuIXF9UWB1eUJoR2JSQ1cqMXlmfk9lS2s2LE8wNE5qJG1+KD9lalBAZX1nfDVLeHkmeCZ4Jng0VTl8NCkhcUt+QlFxfTN5TXp2R2QrNl9TTC5y'@;
put 'Xm9pP0ArPC99ZllxZV5kbzs4fl9zJUt6PC88RHwkXUlGZXlZYF1DLm1gcyV3LFQoPnpzZiFTfXBKa2JaSFE7bE9aSTlkcWt6X1tNZUwlN2xte3MlbnlbUnB2fG8xXV9jKClITXM5NTNsKiJfMT98b0hJODVqSUd+JjBlMXJgXjVJfHcrcGtEVn5nJGklUjc7TiRtMSVtfTNVPEQlWVYmcjNmNE1m'@;
put 'aG1XWCVVfTFIeTlUclR5YCZ6LGpUXSVNeihxcjxAXnpJLzxIJjtLRyhkfXIqOnpxZiQwP11lMUtobXhPKEBfXi9oMUtoI1pfWV5bc21rLCs4eTtUP3NOIlBkJjhxSV9aUF9SLDJMXjE/c05nTjleZD4pK1shUGd0TFBnLDlIUT9fdyx1U3tmQiNfKzU4Xys3ez49MXFdO1JFLlZiZ2g8TmUyWTt9'@;
put 'TSFhJixhQnhwSkhuI3M3bThAQFJGTzcveUBAdGNPeWZjUCxleWZjUEwqWSwsOEFJL24lbTRQMlldJE0oRUp3bVVJZWc8SWEkJFJZJVZpeW17XjZeUCV5Zk5rT2d6MkYkKCpGMkRJcGYlUlklfT9hXjByMzZASCZVNiFweyQpYV4jYWsuUChUUDNjSzhrLnkycjZBMjRNMUdiTVlWO2wlUVBaPz1x'@;
put 'eSUlbCQmZVZaVmJlc3gpT3peLkBLMD84UFglMGxAXXtJfWgoP09rJE5IcTtsY0BQbWEsSm9FZ0EmVU1QWnw9Wik5IXJHMGU4K00hKyk4WltwKT9+VWtHYU5PWlZET3YxKUVGZWoxLGVLcEA9ZjhSYjZSeVVvZiE8MU5kRHlVb257cE40PThSLmozTXpnLFZAK08xOFIualRnIk5HJCptKHo2WDRx'@;
put 'PE8oejtVP1p8ZGJ5IWEmISI5O0lgdVdWYmB4Z0x0TSUmKUksUD02ZVcrMSsvTWRQU2UiTiZyOVBQfEokRTQ1SkJhUD9AMUEwcWZpUDxANy55PHdWP2VZJkBfZClbVn4keDh7OiwzXSFSMDlARmZNMi97WlEmZEwlKX1OMV49M2E2cWEuazhCaDV8SVR3Sld6UF8vO21hcnpfNmlga3ttYG8+Wjx1'@;
put 'OXgoRVluLHZCL0dQZEEmb0JdJSxzenNQcTROWk1ISUJxSDpJUEtUTiY4JlJlJjxBJnhmbixHUV9kYm9hajFpQSVMMjR5dCRdL3ZhS1ssNWBuaGVkKzVmOXFOb2w2TGRDcDdQRklSeV1hPjdZJFhaInVRPzg4d1JlOEArMCtZIzArTGsrZW1Rd2U+aVlnQSZvPEFuQ2AhfSgxXSE6JWQmZWgrSnMz'@;
put 'dixDX1g9WlBKJmliIXNBJm55LDsmK3kpfC51JFdgT2dKXzt4Ikgmcl8qUl82MCklKjJXJkBjRCZVJUJ8Ji9ZJGtZYW4jSjA/JlErP0B4OiF3UEI+TiwvXktxW0s8UjYsQnx6IVpATjZsUllzNXxvLH4ldikjUUt2YSwyaF1wMVZJPExmfjQhJT5IdFEjOmQscDB6WWxUYzdiLGM/Zm9GMUQ+STlk'@;
put 'TlZuQEVwYWt9emhGPWIsKz1fWjc7UmwiQE0oYT9dWmhULyhCfFAmIUlgXTA+bDcpdTteIlRCSU1HZWc1fFgxLj5YMSolO0AjMmFLIlBCVzRtTXgwPjY1eyNrWTtrbCEyezFBNFomOEU/VG0zX0xKfXBNXmheLGFHU1NFeztIX0V4On59UzRtSiRlamArN1AzKm5oQF9weW9mMW11eGZuRT9JYGRx'@;
put 'Vm0lbTgrRjEyalgmWlJ3O2gwLD1OWTc7N3FSbXk5VSowK1p3dTlFfEVtZkh7Wjc7Nl8kT2R9fnthP0Q9JX5lc2V4ZCRseVoxfHMyOV4mM2hLOTpqMH5QaG1ZSGgzKTkqQU10KWx+N0cwaT5lXzY2Km1IcHFHOkdfNndRXlFCZix1KlElbDc8d08mOXtaUDROSVA8ckNAKT9eK2IsXitZYW1qOnpi'@;
put 'OWBjNDdxMkBfb0cpL1BOYGluUEwpIUBTa3dmZFQ3VCNlb057SWksOUA2OFd5VG1SNntVSUt2WUk+WzBmbTFvZG87ITchQUkrNUQ5Y0BbZT8xdlo0T2dqaCxyN3thaCw3O18xLl9yTnd4Y2hAOyUwWmkyOW5QYSw3dVk9byNhRGFQIWpKNW1QKU4uOUxeR1E6ck8xS2gvQGV8alBzeGFQZ1JTRkF8'@;
put 'a1kjS3hEOlhdY2sxNUQ6W05AOkBAXmFAJHBEcXdeWVRlM3dhQ14sPHA4PHhgaWZLPCFMRms7SjguWCQ0cytsXXsoRWBEZDc3JCk6amZyVEZ7WWU8RXkqaT4ldSw5bEMmVmBkS0o+eFQ3aiYoJUhyTTV1QTFIKy4jRT9dWmVmVHtRJjQ4Zi4zTiphI3tOdkZXeWBvOmk2JU9iMEwpOSUpP3gkOV1T'@;
put 'OHBLI3AxaGpee0toTSN7cDdjb05rbyFDOXBIMi9zOS5rYl8kcGJYVXlWfUgle2s1cW03SShpbClKY0g9VTcsYDNDMjp6dXowcWU7dFR8JUZ6RkhCZEE6YW8ke3B3KHlyIzp6THAwJW9OYlglYlkmNmhfZlkmWEMhaigyOHVrSzBgSipoWk9YVHlYNnN3IiVmTShlTyZ9e097XV47NmgpQmIxWjVt'@;
put 'a1AzJVIuWy9yWndSdikvOz0xSTQkdSp1bjMvW0ArdjBGPTEwTXosXkArdjBFYGFqUCsjPXpaOSUoTWpeO2RPUWl9MnVtS3crTiFDYz52JTU6cHYjIzJEVis8QS4kUzdeZXNhanpgVTBBRS8rIWF1Oj0zTEowLF5mP2UqTTdMNHZhPj15R0BRRG1abSleJUgkWjk7PEgrU2deZSxsJDx6MUtbdCRA'@;
put 'LzlqNlJXemB6PGlTYmlaNW0vOXVxPFZSRD1VK0l+R2xeI3JUNXhQZTssU09eVTxsTFFEPiVnYDY8fTVgYiZ2JE0mK3dSPHlyI0pXb0pQdyU1IjVyLGhdeFpJSno8OSUuZCwwaiRZYCU1IUxWSVpXP20scW56cyZ2ZzxyJWI/ZTVAVTF9JFZgNjgwalBzTFc/NjhsLzkxVXk8NyRhMnBLTjlIUGdw'@;
put 'PnIrJUhNUG1SMFokSj1PZzBAWWZDN2RZcllmTlZQS1BkWWlecDxBcHBAWGF5bUlkVHpJJD9WNXczZGxmVHhbUnlWYGdvcWR9KWdvcVFQTisoViFOSjVkWXhtLnJSVz82Qy9AIS9qNlJrcHs4N3o/YTRxanNdLkRdJUw1K3RZajNRO3M6XVVpVHtQKz17NlVyKFZ9UE4rPyYwMDtkelk3LEFgVno6'@;
put 'cGR3O2RoLEx6JDlmMUM6I1o6ZU9mcT51SFhNYSxNOio7cGh8a31HVV4vJSl4KzhNOU5JWyFePTFJXyFeP3t3TW85fWg3NGojWTdKMGwyY1Vlc2FrSH0/UzhkWV8lVmY0R15OQ1skXU47KSNZMF1WQT5obE8xbmZJOVUsZ2Z+OFg2ZnIoYVVgS0V6MFJXPzZzbDlRSmxVUC86eFR5U18ldEBwMH5e'@;
put 'fDFhLjdWekNpPTA3PFkzVk4mOiU5QDY1RFJBNGBiUEUsZjZeczptY198dXkhXT1VSCk6en1aNGJkJC87ek9iMEhAbV4hbz1LbndJSnlmaWh9VlMlQUlVYDM4bV4qci5yOXMzbXc9Jj9EcU1VeSFJaG1walBsa2d3UiZxTS41XzpZJnZacHxrcmpQMSxpVEApdjBzZmskOHZTViw/cGohSiUhI0pr'@;
put 'fVBuUUY9R3pnUjs+Jkh4eFh9U0k+SGdnamQkSFRCWUglVVZrLmVzMVFaMD5yZXB3fUlANHtDcVshSj5ZP3I+Pldhc1VWTjlkYDYvTF5FbnkqNV9AIThTO2xkcS9tNWdjVk1RQj5CTWhxbnM6ck1QXktwdkUvT20zKXA8TkA2QGgkVS50OXBGV0RiczxTIXhlSWR6KU1EOUBeZmBePT9ZalRjUDl2'@;
put 'TyhWSlZrRi47IVBrY0BvIS97MWhsOGFUYnFfVl1lW25lXjAwMUtQVmJyOF8jamJFInZtaTtYKHZhRmdWZXFjcjhfQCFPdnIpM0tRJiRxaGB7VX44ODd4I1MrVmwuUXpVPWI5Q2xxMismemImWjxQK1ddRnp6MGB3PSEvPGRyayxmeylLeiRBOEZ6PHokeHN6TShnXXxATF0ocTl3d3JTPjlpWzMs'@;
put 'MT1PZlZSenlSJGQocTB5XWxqTngoK2FKSipvVkhvKj8qelopem1mSTlZOnZaYnI3cWlvIUpEeE1iM0tUYEdAbyRVXiV8UmZvY1ZhSzhzbzBSa1Jdbj5URXwlVlYqWWhbYnhickRXcFY9VnZhLCNqdl5hPDYzdVpAS1MsYUBYPGRnTGpMMTtILjFbX3Q8e0t+dU8oPlZ1UTYwRl84VlNrQ1BfKlIm'@;
put 'JVlVK0xRQmgxamRxIXwuP002OyVaQ04rUiF1USM4KXIxJFtlKDAwVEp9RHFlOG48e2xJPEhfRWdjLHl5fT0wK0Z6ejBaJkByQlliZ3B8RHF0eXNORmV0LHgkZnxvZiNILmp2K0lYRCV3UCRWVT1HbzFfez9mTUlQJkJEbTtsNXtdPSJodSRYaE9eKHhnVlR9eTJNamArRXpFeE9eOG1sJDJoI1M7'@;
put 'bFElVz1CTGQkJkBEIWpzMj1ZOUokNzhuSC5GWE1IQDEwZGBiZTAhKGQxeU5ZUWU5fFNJYk14Z2k/QmBaanJ5MDlnd0JLKClCQDZuP21yQDE/P20yUG4wVTF5ISw/IX0+IXUzRW9lO35tLjU9en1qeCtfXktqWWg1LFlmOj10YCRqQVZ8e1hUWSZtTUUvVnpaJmVqaT9WXkdubzBhOUlMV3Z7XjdW'@;
put 'OEc1QFordyU8emt4ZUk+QG4hQD01TVhzJF9AK3JKZCRJaD1ENSx9cG0vMnt7a0k4flIsPFo4NSl6MGFROGxddVt3TWdlYVVLKClXMSshN11mcTdxY1RGIy5KPkBzJlQlT2UpP0ZmL24iOUB7PEY0bGhQSXJVVCYwSm1IV1EmN2diJiw/O1JWcnkqMUl2PUR4LlpgPTBtUmdVZl9bKmpISUJfYlFN'@;
put 'KzNnQUVGeSVxWTFfanteeF5mPFpzTyY5M11RSGxEJmwqVnchbit7dlpvPnFreFQyX1dNMCxoMUdqMl5KXzhfQCF5UUEla3B5ZTA9XVo5JiQ5eXV4aC8+NFh0KC9wd1Bmc1ZlVmBUPUVnPmlnMXJReHVESXxJOCxBcSFKSzkmcnlsWWd+blVUfSVBME4xYikqU0RJbns6bSEsdSRbZXBAKz86JSNf'@;
put 'NWp+cHdQYCEucHdQMHBISXg8MDt9JGYmenB5cHxtW2U4LGZ3ZG8vUWQ2b215MkNAciptZmVORT1qJFtPLjl7I1RmV34yMDY9c3pgITRVRWAzaFVtckBVKHtpZ3RRYVUoYDFlLGNSI1ZaUFkqR2QiTjYzIngyPT99JWpVYSUsKXE6OSEsMGhPZSV8N0dhUUVsXy5UJntkWlF4IWBZWWgvams4bWt7'@;
put 'XndtUX1aTklySmtCX1ByTWhXemtdQV0jcUhLIyl3UlNlUi54LChtPjEiXncraTgjLDFoMUBrOGExMDlmcmImdXFlRGtebGsvK0RuISZ2JTx6SksramhNM2d1PThRKm02PXhoZzEzKSZ4RXxRXj5ANyxNMUloWSZBMEZ5UFlvcTgsN19ZJn1zQi4kfHN4YFRwdkQrSGh1bzRwczk+T2dOWVZoYGN1'@;
put 'aFJlamQ/WmFPc2E5cjwqUWl2JCxlYCZQSDxQWSQrS3osUTt9W145dTcwKFlGXztVVGxNJVdzNn59OGdXQCVJMFY0M21hI3xnNzxNTjkuSlBaUzlfdXxhOjI+MUh1OSIvKDxIPS9wSTE3MkVUPm5iITRqYTEjUld6NEs5UTpZd305OVEmblM7Wn0wLmQ0bWc/KTt9ZjQ4fTVRKGI/JnhIUC9TT3Mr'@;
put 'JStQV19AXnB2SFl0VG14MnBWPSVqbncsbS9MIkh2KUh4NSsoISk9TSF7XyN7P3gje1NRaTgmbEM5WXNXQEVHZXllSVEmO1Y4VkJrfVZYXjdPQXJ8WihgPU18U0YuOXp7NkAjcFNFYnhxQW9Dc0dgQUBkOSMhWDFmd1gxQyN9blplTm41YUNgQCsrfDNsdywyb1hdeyZxWH5tOHByaDouZGAlUmlW'@;
put 'YWJuUlptRnwuMH42MnFoOnRfcGpkUE1AKHdMTXVZKjdoWUFve19sI2YqQjohaVUsN1Z0RVR4fE5aPSIlOH1uM2NnfTZjJWU4d1AwUWQ+ZiwiZ0hoUGhbQF49ISFyRS8ybjw4XyVqWXI9XW5wJiU+Z285Yj9ZbjtbeCxTPXxeWTV4ZSw4Z0lfUFhzdUo5ezV8bSRMOnthaFRDLng5cyQjSFY8d19w'@;
put 'ajRwPFZhUXghNlJuYE9oYW5XPFBoPz0+Jj8hYm4qUFEmYGF7SW1iVXcuXkJgNVRKWT5nRiw8MllRMCg8ZE9RJilFeCNAVz0sYUJ4ZmY0dUN4VmBWbmVQaGozaGxqUD1NMT5POHB+JUx0bUQ/Z2pOQ0UsMjI+W3AxLGFuZXNtO0xoOiUkeGdkLl1AUzRtfG1JOSMyIiV9X34weTlCaiNxfjApJX5e'@;
put 'eGVLOFEoYWdlYVNAU0lIMTY9dSR7X28hPn1ucCJIfG1qUHIqamVKPkVxZFBTZW9eTjthUVhDV2JObitKNGpWbj9tdHFAO1JFKDhvJHJxOzJTZ31eX21IaGQkZV09IXVRQT53JCFKPDIyMC5eWSV6PjQ8fXtIK3MqR3J7LGRAKWk3VEByc05mczxydiNTUGJvOHI1NTBZOmM0KVUxWW8yL149QCpB'@;
put 'XTd3fixGMX01Kk8rbTRlXXtRXmkwKHdbLHwwVUtGcVVpcjpyMGhWTlVLUkpZUSs4UWd5PGJdb01AUCVCfTs+LzRlQGcucGtYRiQvXWgoWk9pNSkuQipVVC9nekF7d2p9ayY1Ki9uP0hxI3RZdix3QXNBSWtwUj13PS5hNW8qbXF6ZiV0Jl8zSip3JEVuZnNGUz0sbTVaeTwoKXY5YlVIVDJ1MmJB'@;
put 'RzE6aTFbJVh6Z0YqVnh8VWQ1W2NIYlp6UEYwYmczdFQhV21VSVJUNi9XV0cwUCM2SFloVHpuS2NAPk5Wek04eCZecTEsTCNbMlNOM2NHMVAyL1RRVlAlPyQ1Mm1mTEQjOGl6cF15ZiMwVUt7IVtfJGUqaEV8bXBkYll4ejU/KW1eQEQxX0siTVBWUSM8QT5jYlQqZH0yRG9oVEciXmN9WWFseGRH'@;
put 'a20rJilMfTtoOF9FbSw3dyhLP1huenZLKCx2UFc9Kjl3TTc0Lk5fdmIhLDFJM0JAbTVCOFc+RSxYbzAhbUdaSzArVX44cGIkNGZ1IVo+dWZjVl1+JSNHNEwsYUoqW05kWjlNP1BeT1c5I18vL1dWUUA0QEJQb3RoRz1baTcqaDYwPWBOQ2x0UFEufT9tMWgvOWpVbV9kK3IoYDksdmJgb2xkc0ZE'@;
put 'I35ncXt+KCJfZUt+VzVsVzxCdChvKz0xQiJbNX5aYjk0OGZ8KVptbEVdVCQ4MC9oZyxhQWB1ZDgxQz8wUEY5TD5SdFBmSytmSG8pLkUhVktYQlY3blV2TW4kUVoqfjI/U01mYFtlXX49cU4uR0xxfm16bjRhWmBVQXQxPUdMP35yfSNUSWMuKFg+L0tBdFZEK31Yel1+a3BzfC5Cfn17XmgrPX5l'@;
put 'eFZMWGc7JEdKKFpqaXBWZ34yKFNFJUB3OWt+KHVmbnRNS3pHSztoZT90fXJtdz9UcyZaPCEyMDZSPih+QnkzOkk5JT0jSShDQkhOVEkzK0BTJDBYJHN1eyZfZ2NhPXoqMFtNLiV5OWB3JVkvM31WUnpET3Y4Ln4sXT0yO31XenMoU3QjJDV8eWh1YHUob1A0fXBYdz9xJTp3ZG40bDdDfTtSeVR8'@;
put 'fSolfnZhKT5rQFBRbHNqSSJKbX5WeXIoSV5QUWIocDgzUTx8XnVaWyVdSW1wVCJ5MT0yKzlfV357NElPIkE0YltGbU1RT2s3ZGNZd3dGc1dYV2Nxak9kY1dxekRIVVltTlZkL2BDdT4xO3tPem5SRks8KHk3Ri9CWip4VzdDJm95ZFkpd2J3Vypma1Imfmc5PHxue2VzSV08c2pZeFt1MCNnWz4q'@;
put 'ZWJ8aDZUV0ExSiZ7QGBlVGhaYFRFaXMiUCxvJipnOTN8XlNdflElRnFXMEBCVVMvLyQlMn1tcCZzYG1+fls7WDR9UU8lV2NNdmFON2VtJWZ8KTE9WDFCZDBNVztCQiIudCIrNn07ZDNoMVQ7Wi5tZCNmcSJKa00kcz9benk8Ty5jVn5obG9XRTAkdHJeb0Z6fD0pcX4rdWNfSEh6MGBlezdAYmcj'@;
put 'Ui56cyFFLn1pMjZzI3hLY11aSjR6YEBkZm0rNztgIXVofGFCI34hUGB+eWpaIzNERXhDbWk5XnlJNThZYUBMQW41bFMvWCskPGl2KH5GNytFeShuWUxTZUZBNG5nWWk0IW0+UT8vajV0azVaJC9taWxUczpvclR8dj5fJSt9c3gmYFVZUDRPeGo1dXhha2paeGJeOTlfbmAkZXwkd1lFZzVSO3ZJ'@;
put 'QSprcitrRT0wYGhARH5XU0A0VzNkQGZGOGUpMzR+emgyUip7Szovc1YwTS5aeFlUWGd+I2AjYF9HQGByM1V+XzJjV18lbVZfJXN2SjJdNVlNS0M9JmJkZEd4OEl+UkBIclh0SGg3ZHMvaVAkbnVfR3IpQ3I6en17YiFKU2kqYXljPFYwaTNkOFk2YnY3bXpDdTBwTHomVDo4VzBvQmtpfHpGLys9'@;
put 'aV9QREJ+R3JTNE17eDVWRlFKTi9seDtrMEhCeWtfIzQuOTROSz8oNjBAaSJXRTJMIiZbM3FATVZ6KEIiTEY/R0tyQGs0aTEpbnBbNH4icyh6c1t+cDl5YkUqXWRsbz51LCM9LFhYa2M2TU9obG9dVi56NHgxL05VOjFUJUBQOVEoK3swOyNScDhYXU1lXWRJeUNOLGhZKyoqRn1Jb1IqNl54Q3os'@;
put 'eGUsNyNHNjtrKUhnUnNgZ1U7aENdbGd+QjM4aFZzKj0sbmt2JiR3QWkwSG5rKDFaSU56fFJALFl3KVdqVjMuJDMxaXlFRTJgamwxcmJ7V31SR017L09pVEY9Tlg9JHZxRSgxaktNNlp0dkdFekVBSVh9Um5CZltdXihPVDJrKTRkTytOMCttMEp5L1d3STBEQilmcCp8Sn5ZbmgiX2YwTVklcj9v'@;
put 'dUNbNmVRcU8zUU5Td2s7TCJJJDNdfnR4OlVKPzRqfFJNS1k5NGV2eD4ufkk8XkxMKll3NSpZZVBkLkNbO250X3skZFZVI24oaEhXOzI/Qz5wQkRPajVAcl5qQzJvW3NTTC5tU0RfTlNMLkc1dGcrT1BTPD5FQE9LbGQ6NlNhbDA2LllIJTdUZ1FnblVtPXVXPXVSLEA0eTRkTEJTOmUjT0NGUW9C'@;
put 'SjtobjtvdyskflRBQm5KJWxUM2MjPm9IdT9KMTQydHpJbkolbHt1dGdhU1JveVhiMElScEt0em9MRz8hKUlUY1VnVG1uNExQWU0pbFVvLlp0Q3I0Q1pCU0tHT2svWjQjMEx3by4yLio9dEI2QXgqZSU2W2UvQ3R4R1pCVWtkWzdpaGRoSGpnMTQ4dFZeMlcrIXg9M252dW5FOEVDeVgvN0BQW1U2'@;
put 'bk1Nd2IzMlM3b08ldytQQ2xMMztNJTg0IjRfdCsuSXIwMyxPNj9GSkdiW0F7RGcuWEBIWFNVZiw0RF4lJSRwVX1CRkdDa3t4cW5KdSFmX09Va05jLGJJKXsqR0pdInB0SzZdInchUl0+MiskTy94VSpCc0NxYnwoTUQmV013cHQuQEtTJVJRYTJqPjpBQDBkQnlBQT8iRjFBQGpnMlc/TURNYzZj'@;
put 'JDxdVTNJPyNCWHlIRVVZaFFiOW5uaiJLTGB0NmklZ0ZIQEp6Qz9OZyRvQVlDL2BubnVVfFVwPls/RkR2WSt6K3pMKXg9V1VXdChCRHhFRUE2ZyRjdHlXTSxmIjNJKmJyP0N5Vy95bmxOXlZ7WiReVWM6VzMwO1FYUXs2cyt7KixXeENdcDAubmdoNEFbRHZWUHhTRE0wMiJJbiY6NmVaQHdeOUFJ'@;
put 'JGMoM0Z2OTw9b0AyVnVneEtEJDRCTjtvUzcvVD8vRk06Nlp2OWc8Zl98bmJOdGZFL05fRWI0Ny99OVBjInlVRko5IW1vbk8wO0lTK1RDMzV9NHt0I0JgfXdAej1+PiZ1VUM4S257R0V6PWJAUSI9YFJJe1VqOjBie3l4RyJCQmAwVXdnamMhKyNDeUl+VjhSWXpwLiw+SEJIRk4xSyUyNCVHLlQs'@;
put 'aXt7Sm9DW3Ndd11kTitEOWAmZ2hMV2hmZEVAZCN3bm9va1FHMVl6YVtxVTp5Z0pwYzo2Ilk4WD4sXmFkanVNTyNoa2pvUyx0WVVbKXV0YnxWOG89VEJCN2VrbmM/PEk1Wn1NRktFP2ZCSEZWW25icS9FTG5PYTM7SUVRKSl+TURLPlR8KEJVfCh0QXNtYHBDYG9iZS9zbjpFd2FudjF4ZCNaNHlY'@;
put 'cilUYWZISDchLkhVNEIzQ2pmUDMjVGd0OkF7SWswRzBSL0YrRnlvPUFqaz1VLCxPTVUwbnhKQEc3LlFjV1hLTntEe1VISFlAclpfSjhSendMb08iR0FPQX1VRiVidHRiI2ReU0RGUG9lemwiSSVqP0NLVFVtb3YzZW8vRGBQLz1JLl46RzAjW3ZXKUIoR0lOb1d1IWUlWGtXM2F6Y0YyVHFLOT4x'@;
put 'TkZHMmFHT3UrOHZkIkhrT2dmTVFSOCQ8PDhmbzp4bkx1MENBZW5RcFJGWz1KfD5xQyxBLmc4PE1PeTRrP35kYTNbZCY2RzM/dHdDZWlQSSVnUHAlJFBYbENKRXRoNHM6NmMye3g+Mk11S0ExUE1fNVpUYz95e0giT0ZQaVdZazdrcEBKWn09IXA2cWd9MlNsOlJAX1c0Q1tkKEsuXlcvaXR5Y3lV'@;
put 'Ql9xQz12fU1kIyRrOG4vaCFrK3BzM0BecytmSHZqXT87UElKLCRHdFNEUDtaUTxUVHRFdXhHSjFzLlUvTXREQipkVmhUM0BUOyJEND9NdHpdcU8vYDZ3KD5GT0UhMjFbeldQQVN4TUZeVDlETCNfMkUiaVkuWC5YYlVZdzkwaCRPT11vUkBrQ34wfTxbcC9vbSJ9SjMsXVR8Vk8xO15zblZ1d09N'@;
put 'Ui5rayl3RHElTCl0d0A2JmslLjlufHBaLD50XzB9clt6dmJIJUBQc1I4ejtQei5xbnVVfEEqVDtXV3ZNRlV9JGdHTz5bNENDQn5nNDtzLj4+RlgwTzBhOmBZbzdVakYjNEhiXUd4YisrPEQ5QStpJGdHJSZXbk1hSHdvODxtbkUiNF1CSiUlYzJQMk8vSiw3K0Q6cX0jZTJrMFc/MEJHTUR2YlpL'@;
put 'Ty9hdHBPL2BRQHJwQy5EUzI8WVFhY2Q3a0BLTyNJZFUuXj1Ka0RiVTh4fU1GSHZuJVVaQFpCOHgqQjtvPU4vVGwpK0pYfntXfmg3YGk9TzMuPkFFSXRTRChqWHpSOWQ0bHR9OjhEdHdMLzlVZy5gRSNrMzRqdXdDQHN6Qiw2KFtbNkA2KFszNDMzcSIlRElXfj1iI2MvPVswKCVBMk1CUzA8UVNi'@;
put 'NEd1NURPRSNkaCNWb2J1V3dxWW9aT0xkW3t7blVbVGRIY0sqflYqNmBQb0IwZEt6VC8qL0B3Z1pAaTA3d0Y2JiYibm9DMENPJG4majppPUJEYUJBNH1NJU4lJGdiN3BhdUg3aCsoQ0MpXVRPJH00TFJ0ZFJaJE9WaTAoVF1GYUZIVmNpa3VrYjZPSkxvW0BtQHNVXXtjOTo+MkFpSitZKk5Kb3BM'@;
put 'fEE5MGVHPFV8MGpBITZ3NjdlS29VInAyW2VzR3BWRlUoeXF6TzoqWnBme09EeVRvV1hVSnNVTXk+bzB6RzNDRCJnUXZzVndnJVtoQklINUIhZTpvenptbjdbelhPNzc0RTB5JWg/OnUpZHFAJkA9RjA8I088b3csNUVMTnMwYl5rVTY8N094U2AjPFAkVGMzKF15Z1s+Rlh+UF0iRHVbUGFIU11h'@;
put 'XSgkYFdHRFpNOVZOMSJZZD90Ri88UklHfTBhL280Yk1YR0J5WUVzJGcyOldAYU1nWixPOyxUcmwlSUtZJUlsSTdQM3goT0JMREpGWktYN29AalgvS01YeD1rQF9NdTVLNVRJW1JRUVRAREJyRXJ+UlFbMjg1VTFoaEoxa25FP0d5c0BJWWorSXY+Z1ZCJSRBVVprZC9mfFtRd2AyU0NDYlNVYyJX'@;
put 'cXQzVklrUjFGSj1KMyg1QUhKNC55OlkvMy99LDVRfXclTio2eldAQkRHTXd8cnpkPFRWWGd2QnZodFZLQ3UrT01vQltQVjQyIWZUQipOTE9VT31bYkIsQ35nQ0srW0VBe2RjVylJIjVhUTVnOGRjNHQsK0JJV35kXnxzJT0oODdka08zcEA2Q11QaVRtZzRuYX06STdHMXdHSEtRMmFwL29ZTllK'@;
put 'NlIpV0Z3PmVSUHUlR29IKlBJay9qbDBuJWxuZyk2KnRFP0N4Viw3TTc/W3BbKUkxP0okcllFUWNFPkVrKUQsTy9Rd2YlbW5rWDpCTUxUVEBrUmNJLFJ3fUNXYXt7dUNPYzx5PDF7eU4xT08ra28vRVV0MH1SOFJMTCRnRiVCdH1DeW1qZCVnYD5NQWFKYW00RXdhfHlCMnEyYTpIYl16aGsoLkVX'@;
put 'QGtSOWQvWSVYKSFGI1IqMWM4fHhUL3kveS9DdF9hPFJGK01Nc2p9WktPbGNgTjY0PnRld0hNMmEoKCRuOkViR2xJOiEyb18wd2cpWzEoV0ZURmRQYHFJSzg9Y0AmQWtEWEglTi5OZG9dQFg1fDR0WCxDXUo/Znw3JGdDMyRYR1YucDFeTj0kWE1TZSNlNHs0eDNxbzFeQFVVUThfX1d0YCE6Njpo'@;
put 'Vltoazg8MDsoMnVfdHVNMWtsKztPNUt4aUl4RXk6PjBDNko7RGwkS28mTENQWXplR1BvQnZ4eGFtVmtwKzN1eWVuYlNvfkB7QUJFSzlEM2pLZkhrZ2wrZ3YsP2RbI01IWi5kQ1BKUTxsVkspWzlYJHFnOGxVMW5NWXkqP15wOnsyWlhsR1pCRktpb2E6fGFjV1FJbyVATXAjdm5xPyUsKSx8VzNe'@;
put 'S1NqPXlVVXR0RFFGOl1Va2Yzb0xiU3xRSTJ5OnFudW98eHZOKzZeelVANnUvdjZFYjI5REhiL21vbjV0KUM+QTtseGdqNCJMNkgzdzdvIWsqVFVwX082SF8jY1VPN3dAIkFxUiJIZ305QmFtfU0kVDUrNEQoVntaKy92QEMuI0NycjtsRTM8W0J2UXlPZ0pRajljL3RvXS5rM1Y6Xjoudj90KGJH'@;
put 'K0hVJnluMHEyLG5BOHZOfU0mTm4rRF1URHFIZCUvNlAvIUJTK2pDTlRyfmc4LC9pKytaKkcoWGpnXTZ4KDJ4OXJHPGZMOnt2PllER2t5blJvdCxGfVtQQWA1YHMuUT94cGIqd0x5ZmguPW1BQis2NW5QPiwzXm4mXiJiZzMuJXpxRHRAWlA9VmtGM0xYNm1wVDouS1V2QDxJV2FpKUdKcy47Ym4z'@;
put 'T3Uod15naGRpZHpuXmIrYlclanFuRWtvVntLe2dIVWxzLnhuTy5YV0A0UWdmSFpJNDdIdzRaTnhHMmpUYyVycXxfPm8wQ19ZdTJId25jWio/fHJ6TzNudiYyMD0mKSZgakQzIzU/dzZWRzlKQCRycXMrQExAMVFhSzFrJEMlcS82Wytva11XIkElTyRjVWskIW5zKzhIcEs1XjQuSiViK0hTbX1A'@;
put 'emZrJC5GdDxdTERfcGQlWlteNilUIjMkMyJiaXRpelNUaFg9RXIkJmJwVS8pWkF5dnNAW0dbMnRvWEY6TWAqU1FVUV5qdlh6O1JRcy5KJUl2SDhhOChgbFYlJHZuKStgTTFtRXYzXjdeMUZKaG11fUVtR1hKNmslYCVYUUJ3XzEpK0RgN2M4OmBoYjJ4QF45RXJyP14heGtkXWlyciUzbSU3aypG'@;
put 'UEIoVkIwLkosP2xWN29oTCVCVmt+MmkidmRlcHZvLkpqKGwuUW4sYFovfFRNUnhNJmZ9WXtVO2AvNnByaEczdCFZVikkN2tkM1U8QmxuPTRLJUhVIUVwUnR8bjNrZC82R2tPdjNRemAhOnliZCVkLi5UIktCeUlyWXpgOixeMns2KytbTylCcE51JHgsLiZucT9QQkJDUWdGJV0odEEuUzFiaCRp'@;
put 'NiVCa0ovNmM4NlZ0M20lTSV6PDA9QFtZQ0EzWkdFSTpxZHIkQ0AzNHh9ciwqeHhHSk5TcHY6b0Y6eEV9aTl0Tnl8PCY2LF9UU1A7ZHhdaz09VFMvNi8qX25OIiFZJTpwWkBrOT1AWzx1b3lmZEU1ZUhLQDlYOU8jNj9eLl5Rbz56Lkp7VyU6WGNDWD1ASzJuazxAZzBpay5BYVtNM1VKXzIhPW1B'@;
put 'O1VJUXg9Rz9gP0pKIzYxYm5dWi9qJG8uR1hDMzpURVs+OlRTe3t0dFFYWVs6TTJUXj9pPl17RFoydGBiUm5jODZgVW8+ei5KcFIoVigmLl5Rb216LzJCR2g9d1clQD46I09pV1VweltNMzN3NlsmMztxbFQxL1BhUlNpeUNVZjN2bzxXVHY2IVREa0RYaXBkVSxGT2BzM3w3TT9RXn5afUYhIVQ/'@;
put 'fk9gRWhNL11+VH0jQT9RZH4qXXZ3fn4ufWU7K2UqPix+WntwXWg2c1csflB7VCkvQ0EiPH56fUc3UnF8fkR+WjozfWB+eHwlS1g0JH54fWZBNXkkfkVwIn4iXzVTInNqfikqZCtfc3J8UjZBdD5+XV9xUChoInhmWkhvQT5XPiVkZX4yNDJIIW9pY2YvJCg2KV89Rno8bzxvLjR7PFUwPG95V2I/'@;
put 'UiZHY09jcFs1Qz9gakVBIkV+WiRdJmJpMStnY3Brbnp5NiIxLmJJT2R2VkU4NXRXPn46X357Ql1CIjZ+JFpPPTtNa0hXUmVxaVd+NylaY1gqQVl2K15wdzpDIX1KQFUkck9QTzBTIV99PTR1SmJtdlJ5dFcyfDg1dFcuNDxoeT8paHx+S2JBImlzRzZgc10kOnMuVH5zOnNyZV9zaVdoNF9zNX5h'@;
put 'ZkIiSWN7a1BhazNISDU4ZXF6fGNgZS84fSV5bWJLfWFQZmdGL0c3Ri9KR2ROMUVKbzlyUkwzIjd6YnYiU0loKmZBdFNEYzIyaEFJZSRxcHM7ZnE5eGdNJFdWe2s4UnpRKFo+RyVmdj9TfTgoOiEhQjo6ZlldXjhvVWJxK2J6cGJSKWc6P1dfTDs0Z3s8NjlNZSMzO2ZbNmZATF03Mz16fj0md09n'@;
put 'ZyphXncrKD1gVHV5emhqVCZkPT0qUXBqMl4iJDVzVShkfUpmW08qQCZQdWZwSkx4KVlmcDhZfEJZSzVtYSxhP3FrQnw6X3sjRyQhX0l+QF1MUWBAUV49fX1hYjZwSHkoWGchOFBQLyt3cVJmY19Ac08rSVtHVnd8VEs7Y34ldlBJVnIvXTRWNmBRSV1oOU0mY21bJmNGQV0/ek5eUFQ5LChdZzJ8'@;
put 'V2I8fGlMMWszbVE6WDRwTGUzS2J6NXZsMWI+eCFZOk9VTVdEJVcmZ1pVbEAoajFbLFNfOzFFYFVTXlt9RDg3aWUmRzlLRHFRSSh9XVV2Zi5pTXt6X3ZmeHE1aU5AUzFmZUojQmI+NnE6Xj1yPnQvIz9DTl5VR19lbzlLPT0jcVdGdktPXlBUXzZONmRAbHduZ0BsL3cjaXE5O2RSTVlXQXpjeGpV'@;
put 'RSNuP3UhQnJJJXskI3M1S2p+dmRNK0RvVC5JKyVxX0A0dlssPixVRjk5U2JRZk1XSFZaZiQrVUZ1TjdWS0B0PFQkYmRoMl8mI2p5ZjQhezl6SFpnQVc0bU0odyExX0g1ZyZkPVRUTjssZixwKSU8dHZnTXEsZmMmTGJXTnI+UTpQZE8xd0toMk4lKS8lektsb05GPWVgQiglRyEzYTBqT30/QnNa'@;
put 'NnYkKSQ6JVlfME1ZeU4kU0pZcz07bCpeIWM8cHdgWTZ6YTNbUkMxXlNsTXpVPWJ+K3dieCRZJkkra0dMYjA+SV0pPTg+fCt3YjI+JVAyYiIvIS9TTSM6JSFaXmx6XVN4LD8laWJ3IXtVfDFsMX1nTSFrW3JMWX1aemlmOEh8fGZVIj1rXTpwL2ZHd2B6cFBAJVE9NmFOci82RnphMVBnQlZfbSNa'@;
put 'cEp9PV4mUzopIWMmUUU1bUByNzpSIWdSW3BvancvOjwvO00hJlFPNjxdI29xfTt4VFl4N0ZWcT58K2VSIT8pPWsybWQqMT5lb0kxPDM+I088RzMxYHo8RzY5a1tRPHlWb2hwXnNASltxQDNWZCQ6MzpydyFFSTJWRX57TS9oaSx2fkldc2wuUVZuKltpMj1uZmh+aURfeyMuPE11YzVzLENiUSlu'@;
put 'VVJuQGB0K3BrWGxMJVE9NnBqPC5tfCVsPV17P11kOiRgVF13ViNmKHRwPlF8a2QwJU8lTV54LC8jdXlPZyVMeilePXcqazdySmQkRFYyY0F8blVWel00X2RXb1UmPToyUi4xYXVHXW9Tcik3dj5rfm1haFhnJFUyRTRWYF1QWklSb2pDZixTejAzcV9bIk90QDM9NlFIJks/O2kzYnhSZk96MCkq'@;
put 'XV5pfmNXd0BMTCpyT0xINXtsNWIvb1tiMV1WMkcmbE9NZWVzKzkxQnZfcG1HJnk5L2pePWhQWmJsV0ltZVZGI1ouWlZPXzFaZXpGMTdNS19oU3F7aWU4YSwuUmJhcmddL19NRWZsImQmcXF7aWcmLnNhRmAvOEBzLzEwZ1k2OGpkaThEVTYpU3ZPYlEqS3hQcmc1QHteMTYkU1owc2E2M2hzNzk6'@;
put 'M0ZlW2coem1damtXTjxwXTxiYWpzTysoW3JIcHtdL3A4NkJRaDFHSFZGXVMmY21WQWs3aDtrRUVUKWclbW9UTl9Iako+WDpwTk8xSD5dPWRiIi9MOmJkaCZjNk0oYHc9OiVKOGFIZ0I7PHk4M3xPNSQ1Tl0qQWA7JFhUNzZbbHwlbCovZFo/TzF0SCZEYE1uKWprfDZDfjA8amt8S2FWIVs4SVl5'@;
put 'I3tqTnpgWW9SLiJnOlhPN00oaGJScGRQTUBEMVFiOF9BUiF8WUAiJUE4e2QwNy82MmFbPGJhT2RCJX5OQi4jcSJkcEdJJi84NUJRaE9yMl82XnZIK1FgSSZGNVY5a3hNdSlTfUA4SHE2VUFhcjNzOzsuejldVmN8V0RTI01xTnIyX2NYYTxKLiYpc3R3ZWhzcjBSa0t8RTohRWI6Im84QD9Sd30s'@;
put 'PENsMD1mYEtRISVMYVlEeTFHezM9YSEwUDpmeD4xSUVnY2FGZ3MqO2QvO14hPkBfZzpyIUxfPD5wLGYoLz1VcCo1RC47fW9VUClZcHA9NFFxIyEwRnkvcHp7a15Nfl58MWVLOWQyYldscG92dnF4Yyg2ejVzWXcwR0BIaTFQTEg1TjZOWXxrWU5EVk9vPE5MOkIoJUdeTy9RRig6eldmQWVdZXFO'@;
put 'JFJ5JCJPUWlyOm1sL3pQZFFpcjpae0Bsak5JV0IvT31+Vi4vM10xTiFxZylNYF07MXA1bGojbnFfQDNDUCFjNjVAWE5oR2RfJHVYMnc+XVohMUcmLGlmKjAqeSFXXVhJXnpMclFhdF1mb0M5UStSZFZ7WDUkUGgsSStWbFlmSWhMJFlfSUBfP1tkSThrW2RiWCVHRTcveDBbZ0I1aWBUelNdaDhV'@;
put 'ZGhzPX1eJTRVMzZkbk4rKlBIfU9nbEt6c2RldW8pVm12LDpAJnZSUyxVXk58NWMsc2cxTm93LF82QCNESWI2LjV9OjMrVU1yUXE9Pis0Zyo6IXF9Ky9NJVFPNlJIOCY8KytATFImLlMwdTklajdhe2tVJngpODlpezpYTXEhcXchWGRZJjc6IXFwaloxZWxmVl83QE4oQDNPPWJDYksjWnlKXzBQ'@;
put 'ZDIyOVRWKlNRRGJRST5TZ3t5Nj0lUi5lYk98aTk+JUBCOG9qMGFJc1pLO3N6T1BkdXFXZEtmVDpQPXBtK1osKD4pa2ZJNWBRN2pWdzh1PWxqI0BTYnpbbkhtUWglQWhHfEkuO0dqdXJAZjV6eiM5JUV4RG8hPztrWn1OXlssQztWYiIvKHE2Ul09YTlsckNNa21HOTsreCE2MENwU15CbEIkdmd0'@;
put 'ez9QSlJYPXkwTShoc2B7UmspJVIhMTFMPV1TV28iJVBtcnVrWSJwckV4VTJRVHghXV4lbnlScTRaNGVGPXBrPD1FenMlQilFPilrXkM2OGI9Q3gvcGAheCFCfFk9SCZmcW9UNjxdVUNFYUR8SUlWdzNDPlZeeCx3IUdqNDhuZFgjfmsxbWdfeTxzIVg9SFphViRuensuP0tpdiloXSNxQDcmfG0p'@;
put 'Nmd0PCV+aj5HKUJiKjt+TUdQPl9yPWYoU3pqTTpmcGYhSyg5VS45dnQ7dmE+SXMydzhkQEUjXVlMcD08NzN5YzUrWWh5M2FWaF9NNlRyT3FQYEB1fTYmSks4b2pTMip6YVZJUHFwYTs4dzA9U2c8ajhJcUJoISRwcUtkQ116Rl4kTys8c2t7PztwJkFldiVVR1ZeZT16ZldNJVE9P0t7cV8pOm1a'@;
put 'c3NlSzhrKFYmUCRxTXI2ayhSRzszbHE7ZElKO28vYkNeeWJ4OmMyTmsyYjleV21fK3p6aiR8TUg1LCx7d3ZrQWEhcGEsdjB6MFBrOnp6VV4lV2x+OEAjVl58MH5yRHp2OkBhfms7Tm87IyVSLiIhYE1MTXtJKDh9QHNlXk5yaFIoJC9UdmR3UkMiNXxNZ3lfdmdzSEAsNT08PHpqaGQkOnpSIUs4'@;
put 'USgjKkdvQTdRKCU3I05ta01vZGU8U2xEOVFlcWBwP09sNDYwWSZ5bGJufSxxZ0hLMDZQaWZxeG07Ok1vOzhxeCRfKW1HKyw7aWh0dmhiIi8halpuRyhVPVFdflAzY0R4LmNjJWdtWHNxTjJ2azFKa2lgV005OkRfeCFdJm9XczpOfTxtI0U6XiU7fGJKMjNtWjZ6TWREfE4qNCkpQWxDaC5bLDF0'@;
put 'aCJaUnUhbFR2V3JAbWpOQy49ZV8mV3V+WlsrTEVQPDozUiMyMDYwJD87ZT9SWSFBbCx1O2QqcnhnMjl9TFQyXiZMb0tKfXBQeWhWSGlNeWhWWjw6U1A8Pj9vbVpuKlgpMllGJjFXYGg4RS96I15vbnc8VShtLHFZRlpANmM1K3d+PV4zJSNSU2VZJk5xRDpCNzpkWTh5ISs1dj1BeWo5VD1TPHg3'@;
put 'Sl9tMnlWZCE2L04xYmVYJWhmQ35paFJ9JU9pLGcocEdxOHkzZHE3cWE7PXRpPzBaPjFMOnkkeCM8ZkdjdXowSyhWWVBEPnRiT19QVEJ2WT17V3tnc3ZHVkJWZ2FPcS9mXzZYNnNMdEp0fGVzaEUoPSQ4cnoiJW8sYmdZRk1XIkRLOzIwWT9bKEMrZShFQCpqZnBMWWtia1FoIS5eVTE0OEI+XWJ+'@;
put 'NnhHMXVKX15meGJ2UT1iTVpMZV9aSltUcWxPTj4sO0F8ZiZRSjlRJDJhSzNZZCZzTkg0ZU5eQmsxMD1sMiIlbXc6IXF4W1JSLm1Lam1dZWBeJmxKencsbHlfVnB9ZDd9bk8rXzZKX15mODM8R2ZWei9KNVJeRkx1OTxTbHFaZF1aSSU+Qi9dOSZLJDkvO3JaJEk0ck5GZU88JCtYMUtoLFphX0go'@;
put 'W25HJmkmaFZ3cTdeSkZyLz5wZF9Fa1ReQnZlVmF6VS5fXmRQJDI8O0dvbElZVndxazVUZEM+KzB5M1hkdlMhMWpvdUshM3AsQzs8IVtJUSZEMk5QTyh2UT1iK31oOzRVNG1DW191QW5abnBAIjVbLHE7LkoyZ284OngxMDFoI3FlO2B0WyV+aiwlWDFNLFdvNThmdTxiMGw/b11efDUyfVBoaGkw'@;
put 'K3FoPWlsJFg9bU1vSilqST8kajU6dGwxfHxsWm1Wb2VEaTshcSMlXWB6TWF6aDxqUlBnP2VyTUUxSWJ8QGd8LGlkVGROMEwsLnA4RWpjUmZvR1Zne2l5d3FzOn57NW0vOUlLJnxEXlMucU0hJXUsPHdbZzYseTxzIURJK3BUbTJOamVAWll5PSFxVGNAY0tuWWR5NUteNFY2ayg+LCx4L2JXUE8o'@;
put 'ezErQHFoXzwrbElrMUdgb01xKHErbXoyaCg+LGA6NVBsXnhwSmF+ezd8M2EzcXJHcFBxPnxPPWJ5PmBAKUQ5emVSRmVFTUt4RG9JUnhRMlE9Yj9vXnYocE15aFZqT0J2Sl8hU0gobSxbbXxbPWpyOnVvcik7ZDleTz9+TUVSS1ovd2AmRXFWbnFtbzhHbnM+QCsvVVooZ3s/bSxNZTgyJXRVe1l7'@;
put 'JEV5JHIqQEwxWVp4ZjAqKFlNSGQyOzBbQXkkcD5MPlFQUjtNcURxZHEmJTBUVzIoNS8wcCw9eVhJIylgJjdSYEBMPlIhcl5OO0F4aGxvbWtQN0A0Pkw+LmVJOSRdTSssLnxQWmIrP3lJSCEyPjRlbzBSIT16YmhoZU1naCN8XltuQUhpOEEmKS9IbjkjI0hfP014MSRsMSZweGVjOzAqIWpJOTVQ'@;
put 'fEAySjRsdHJLO0pNcTllXUFdMkA1LERnJXp9cGZyNmwsZDlALGlhbkVJL2ZgZzhAalJdZTBwTSghKm9mL1FmXzhdO2tBMnJgKCMofUcxaGIwKnVLans1YVspSmNINH1QfDAvKWZ5aFZmKjdeJH1aRHNwSHFBRkZfNmF7KCNAVCtxaztnIzQ8amQkYTpIOlUxIV9VU2RAL24wO2BHTnEzenkzfnA0'@;
put 'cEhJZz8/WVtwMz4ycEsoJCF0VFokfCNLcU1ocz09a1FFaTtgaS5pQEtHfEJ+Sjs0aXU5QkAoZVI+ZntRJVAmRmIsOFkkVmBjS2UoLnNHPmI5a102T0dYKVpzLCZ4SWd8ISFqLGlONlJmaXZ8UEkrYilae0JPTmxNc3tafEBIJiNMdVlaKGxvXypNemIxOiN9OnB2KXokanpzWkt6JE55cjpDbjgz'@;
put 'dDtDbl5pMmIqVnpPL2htPzY4Q2ZMcE82Qyg1R1lqOEBJS0ZTNE5FakxwRShAUmdlUntXZl89bzxlYDpYISx+UD1hPTtyZT89TmB6ZWZmKjJpMV84MmxxME9odlM+big4bl4wbVo3KG9reTl4NiFUMjpydWx8W0U+YTExZi9qcHIoU1A8Z3xYeS86KjtQcEM5UFp1Tk57P3lpYTVte15Te3FUPWJu'@;
put 'czJsd08yekY0a2ImKStibmBxeFsld2NKYVcjZCQkME5vNSRyM3hlZTtYXURsaFBCWzI/QGxfNkY2TjZ7ejBLLG1RcjFwUDVpYCRZWXFNaFldfVo4bnplUCUpXTlAP1JNc3RPTzpaOVk/I3EmUkRQaypEfCtwdEteKiw5OUtEcVRnJFVoXk47O15idnNKMGojWWZkJGJCYWBhJnZYZHUsLys2ezJZ'@;
put 'fXs+OjdRNU51Tio0WkgkSCpiflBIVk9VV3N0Ni48a2RsIUArVndMZEY5X119O0hrOF0rSVEwRjo/Zk9vOVFtZGQySytAKk1VfDY+WGp9MCRaYm9qWyZmbDIvWyYqXjUjbjAvOF9dPDs3US9OTXAoa1p7IzV8aEQpSFhGdWlVPDteLkNsOGNBVEhlQ1hWe0MyKGAkN1AufmgyYnNEbHdiKSkmUjNK'@;
put 'anlAe00wI1BGUix5Vk4xWSlPLGRuZSZkbD1rT3pdJlg6KFMjOHM6T2FEMn1HbVlQJWQ6QF8rM3dLL2svTWU2YTB2XjY7IyM1PT5pe3opKixlek92UitwUjVFOzdRdGg4MV9dSXxVZDUmUmQ4Iy5reF5nWXRhP209fSNkNzc/YiQ3eCZ6UW5TKmptZFZ7KGpCJmFSUGU3d1pIdnwjZEMyY0BvVEEs'@;
put 'aSNhVjIvIWpbMEo4aSxYWjFtSiFnX0s2WFdIanJnLnRSMnVfL3sqbFlUPGZdb2JjTV4xVko2QmIoKmdyb11OXyg9NV9QYD19azdiRCgweEs9fVYqSGtMZFM+NzFRMCFsd2NpQiZdO241dSklIjQyPWU4Zj9TJWx3N1FMK3FvfSNyZzZCTiZ6US5kUWYuXTxhZndmeXErN1FfP11TKzttbHZ+c3JX'@;
put 'OSpeNmU1YTU2TTpzU3RTfjBxZ3VKXk04Oz9mYCxGMUVwXzc6NWJURX07ZER8Nj13KilsTzFFaTU2PSxgU3ZTdlMhMTwjRT87a3kkXTdpRHs3aUQrOU42dTkvXl88O15tTVgkL3pycHdnaVB3aCglQzxEMnIsKG0xcUdrO2wmTGEsKClXLl82YkB9Zi9dN1FlVCZsYXJoVXN8W0crO0NNfl1eNnc9'@;
put 'dTsmOUE5KXh3c0J7X3pbO0coUSZeWTZOcFR1aHxAXVp8SVAmaSZ1LGVsTlEzOSs5bkBzLEFvIU5mMkcxcikiXnxGIzYsPXpuVDhiIXRmSjZqeXx3KnVLUjFWU3BDfTtMLEFzZCtpQzdPPyFifDRvRCVrZnJ9R1owJkBDUU5fLjolOHdWU3BbN1hAMyhxIU52fDY8QnlGODNAOlZOMEx7PCEwSCh1'@;
put 'eXx3USNnNk9pcz94OF9GOVR7bUR6QXhaOU8sUj1OXWZxOjlwQ2tJXzJ2JjhQREpwaExka2o2ZT1RUCthVjVNelV1YF03KzxXOjROSHNjb1ZvdXUyZkVUSiNlcyJkfittOVE6QXZRZGoyTChBfEkhZTZnIVJlZygiT1hTZDNjfHtkc2Z4fn43IXU5OkR9fjdwamUxYWd0SD5mVTgvX09FOGE5emhq'@;
put 'UWRqMmV7QihxIWZ3WUBITX1wck0/ITx6OGE6UnZbMksqdyJpXzdpRFokTmRDJHomd014YSNpNlFQPn1adCRPMV0kUyU0Z0I7eGUzbDNYTzEvZDgrTWR+MGZOWWcuamU2LitHJGB3SEBOWWduZzxPKjFPSm48bnpfK3EkQH03L04oemxsYyFqYjwsTnksQFd3KlBtcTAhe3xxenM9WjFQUFFQNSk3'@;
put 'QDZhTn17MFl7I1MucjFndTAoJXk5MEs7MDVqbnYoWSJSSFFfYV1SXl02bjJDMl9yRlZbaFVnS0s1b0JmRHpVeDlzOVFxKXNiKVQ7Wl9KZDB6MWhTKE1WaGBGalFoVSg6UytyWnEzdi93N0BualoxXT1OUUA9RnhPWD8xNF5fYU1XITg3Nlg9U0k4TjglKCE4QTV2L3did0VNa0pbOnt8eVZzQCs2'@;
put 'd3E4XUoja2BjTmI3a3lFZVQhTXlfK1o8NGVJdzU5WFoyXltzbFZoYEMyaGBiQiZgaiw7SSpgU3k5Q3crKz1CVU9eflZJKismK14zayt6PDJIcFgpX1p+OTMqdTNZPkleUSZJKytmdXMybDdhUHBbUkpRSXs/bUcjNGVAPylqdlImWEA2L2s0PjdfTHt1U3N6WWxRX1RdNTY0PzRwNU5Nc25DVF88'@;
put 'OzdRMHJmNiZSPjg0cShhKWw9M0lsNSZWcnJ7cylmNnJ7X108Ozg5Y2gxI0Z7XiZROlE6UGR1cTFPQ2ojUW5dKTkiPTw5T0w2OH5TPWV1Ml9sWS4kSFMuazdecEFkIloiKiJ6VzBpMkQuNyYhN1h7VmpOXkNoVlVKfG91diEmdmBAZT4+SENqe2J4MWFyWmlTblFfQXxLSXllKWF6dDA6ZnYvPEIv'@;
put 'SmZQZVBKU2RDK0R5O2M6RHE6d3Nbek1OalRANGZaNShiN3tCcFU/bCV5UGUhPDx2Rio0cCsjJWMzQkhkYkxaYS90clpyZ2p6IyM/RmpHUUF5Vy8jPm1fU2NrWE9lMl95VGJrQzAwe1BNSWdYTko/YCF4enUxNT1Zc29BdktAfUtlQUtPOXhMbXJIN0xgfH5ERVBeMj5KbHw3U0M/NVJPKzVSXWY9'@;
put 'aFkiS2gpayM6Q3VvN0hHc3pROy5PYURzNGlzUGI5UXFhSChvRXdnKUxmUmZaMUJhTD1mRC40SU1sXmVwK3coQTooTns2VlQuej0vJEBdZjZLLllZMHR4bjR1SXF1aFlkW11mXlAwY2taV3g9WENSYXltcU5FQ2gqNFMhSUoxS0d5Nz1tNk4jTi9TO3hEa1E2X3d3a2NpUnFPSWZoTGY4Pm9uRSwh'@;
put 'PDplN1BDQ1JIT00wemc8TCtXNUdzMV8wZz5QN291Ok9HOygzYGpeQG5EWmxzNU4mIXU7W0o4UURhZGxuckNzY25FTjV1TkptRjtlMmlDXnVINzQ0KlRFenVhdSYqU1ZOXiQ9MCQ0N1NTXTBrUjhSJCpTfkIsZDgqdy4pI155Y0wvZiVRd2wxSkciNlBmdVdjdkUlQWhTT3k4Zz00fW5CVFU/NXJe'@;
put 'UGlFQzpdUW1PRjtZb3FLP1p4O203YkMjS2Ipck9GO247ZTYoeVR6ZTdiQ2IlfXJsaGN7S3lfdUNmcS9VYyNFdHpUcTw4KGVzWip1JWdFdzc0ekpjMlg7QjZRO0E1TEZgMTdQSTV6SlVDQmUyL1M7KiIpYkViNVk6OiYpIkNTNkU6Ml1DTiUpRipaZCk6JVg7UF9EYyMzXWZtWlErPjdQLDd4LjBf'@;
put 'UXpeZFA7RyxbZF1ZaHEzV1ZvYChIdChLOT9qRiZ4UjwzN1FqZTJ3RUYzYWk0Qk9yPFVpK3hfKlVeWDFvUFZAImRIZDhXak5ockIiS0paMW88V0FXKjVvZ0JNUGZqRk9pcHM8PF99NkZfNG9oeEhJcnsmaVFHZjxZZGVnOk9WdixSTV5GRXVxQyQ/eTovTkFrPzd3Vix3aCo9aHt8KTgkOmRbQHR1'@;
put 'MkxmUGU2IXVNJkxCWnNZYXBsQkdPJUU1Z0JNQiFqLzcrUmRhcGh0OChhSTI5di9uWn1KNXxfS3FlTnUma0RsbylSTVRGNjNAUVZgZkpzK1BCIT9MRnhIdkc7UzZJRyQjU0dpJFRkNXlfaDg3OkROQS4uPn1EZz9JWXFsfVJGJVNZeEtHSmVEQFFeUFpxait8PnJwbHdGKjFpMkFoPTxmKFtgUmh0'@;
put 'JnxlOHVCP2k6aSNlQDRZS1IsR0opfS5HKSwufT9kTlBQYmhTTjxTZnFgLkd5Qk9OPnh5MTlTMTRyMWhsdzFsMndvKipCZklFYzdTRkteW3d2L2Y4NmR2YmMpezIxUkYjRnE5UVIqejB+OXBgeTFjKzQ6M3YzZC56fiZIUFJBeTt9cUApZjcmQk5pJUByamZDN09adCZMfkx3Lk5jZ0pnRHJMYWR4'@;
put 'ZmFKampUeXIve1JQYjJgW1JEOHdlRnV7QU5CI3woMzc9OmEyaXtqV0I0bjhZRio5dCZPOCNRUiYzQlN8SlpVOmEyaSRHUjJJe35+cjg+eEIxV1g/SSFZXUozT2hBOVtwSD8lcWBnVSshMllHRiRHT2YiYFFZRXJBIlE5eGJzdX1Fay42VjxySnA9WVpYW2JySSF8KTY3fmFhQzVVUlUvayIwV15Q'@;
put 'dWlQLGlhJDd2L0EuMmR7WF11Tmw9Y0I2TiNBWklHUG1pTXpPeTl1R2oscytkI2I/JXdIVFk6TCNXYzV4c0hARXdHcXF4VnRWVUoqRkZhTElZUitRZ2FWSyR2fUBpeWdFR0RgdUI1OSghSSNjdCssbT5jLlJvdUd0fFg8RV83VEYkdkBzSXl+LFllK09qOipIdix7N3tbKy8yTE5jU1F5O01CN2J4'@;
put 'NChTNVJwOmg0MUU+JSQkZjwhRU9CKFM2ITNtSTU+MmxacnUrb1ArYyloSix4UlksYnM5bFpqNjh3JXlgUiw1ai80MSR2ejhxMDJAJUlfQ0BBKGN7djAuXWoodltDZDZJckJKdW9tWSlMNXFqeFNGI3pHUS5NSGdBP3RCPGZBfTEvdEJmYmsxUFVWWDd2OUxuMH5geFI0KUZ3RGY7JjpeIUZqZV92'@;
put 'ZDlaTHZEKjUidGxmRDZXe3YyZFh5MnNCKyhxdTZPY01+dG5lcSlYY24re0A1TFllfTQxdDkwbm9nOn5ITD1wW0ZYcTAoNSFaMF9YZWZbSnQ9PDdSRF9qbjhNfkxjTUVNYy8hImI3cE1sJmVyLFgjdXM0ZUVsfX0pSDdmOkssJlRSSCJ3JCtgSmFpUjlLJFVSeEMmV2dnezB+UjZDfVEwQ201d21B'@;
put 'a1pdRUskYThGTiUoW3R4PU9PM2dVR01AJStxeiI4dEx1T3hKVFhTanUha1cyU2ZMeT0+V2spNVZiSnlCNUcydCM8K3RQTCwzQiY0KHhkOUp1NjZbLzRXezBgY2BYSEQ+bFdvYSF9Uk9YWVFmYCRNVUdTWnIyTC9SSl1RSmdvQ0ZofCxVT09wfmBGVl1CSHY7ZltINkY2UkUwTlh9UkJ1ck91Ry56'@;
put 'Om9OT1QzPGhpXSJ5MS59WTgpITVVRHdaMVpkTEF1TlhyUjQvMlVtQ2gkMS8jd2AoIjlfZHNzP3JIZ2hsdCMqWjh5K3xDMVU3YFgsTmZ4dkcpPEdLaXh9Q0M2YWNqK0NGZGx0QkpETiRBU1l9TEl9WXNMWFM7eTJMYSldcGI/VTJAQWk3ITViayREN3QlRm5OP3BhRXdKLlMvKnsmKFFkenFCfUpl'@;
put 'KmNFSkcjU3UrSD05SmwhfWs3KFlAXkNPKVtCUEJdKmZYeWNWUSR6XXVNQUBHV0RgQS52O3EmQTFXPiU5UDRvQyRzKU83YVN2YGpMP0QodiJDJHc4W2dXXihdTyJ5N3syWytDJHtGTjkqaUp5Nkg3UGp+IUJVUXolRnp0UCU6TFpNKzZvV3BpRkxPbGtDLk93Qk50JnRLQVZ7dCtxV3EpQ0skcHk8'@;
put 'U29XOm13b1d5MjkpWyp6Ym4veEIhV2hYUzc0eUAsVVhQYWJhO0FmdnUpNFo9MFlXKGBiS3gpeVNIdFdFKWZRdCZkTUpCMkBvdDw5dW5HKVh4NHhOKUV4c3NAJlJddzdOb2Y5REQiUCJfTnhze2kxTCVXM1s1eG1HfkxsR3pPTTc2NWB7LCsuMTt5bkdXU2xBTUBsbH55P2VHU0NGUHU9ayxHVkJX'@;
put 'dml9eyt3WHdiOnVmRE9HKltjPHF4NyNObWo7WVJ8IWIpezEsQHlpJXkvT19bYjZJa1ZjeTlWdF9GYilxZixPMHg2PVEmS29PP0kyQ0F1Wk5WVCx1YlJIS3RpTU1JTEx6dklIamRXWnFQSWtSQyM/KTM1N2ZKd2dGNCxfMS91MXpZbUZqZDhrJFlnOUNjRGZYeDVufklkYF5IMClmS2UlSVdMME5L'@;
put 'P2MvWnczeG43SXpuZTg2TXhCI0w3Olp4c0srVylUeGQ+QEh+aHQiRmhsWU9BO200M2JOQUw9Tn1jMzIjIkM4TGBkS0hoST1RZSVvV1habV18L25aR0ZtbGVadGxTOztjYHZSMlhSfWQwND15VCUxMEl+YklEWkorMUQsT0x7akhANCJgSFBxJmIzNzclNXk6NyJ3Z3xtMG9XdGMmTWJfLy5jLDZz'@;
put 'My5UZCxgQT54V1VJQGNkb208MFZZKUUmbzJ0PDQkVXlbO09DUmtIKXV8YDFsc2NLYDU/fFI+dU5DaXVtX3VXLlNaYCh2Iy5PPEt9RFomdHRMKjkpeVVDWlpBKkhHS1JiXi8+aEI1Z3Q0L0xUcTRpVzVTSTd2fSZqKmE5YWN8MnAxLHNgWEJFPX42QyZXYnBkL1t0cTF7ZHpkMnQyUnY1czgyXTBF'@;
put 'VEthJHxkNTU4dXxfQkFVIjJdX3lTYUlNMkc7YygiQXh5WXxlUTsmL3Q1PytWSFM1SEJ5NHZXK3UxZ3lKKHB+TTY0NGMjV2t0enVNfm08NjZHT3VFOyhsbGE6dmlhfDo5R1FbYytleEQ8RTJ0fXpIP1tAOiMyVl5uUDJRajZTTXRWS2ZiJX1MPStNPEMjR29SJSNpdzhDSHY3aE5nUz52bktMVjVR'@;
put 'UzhKUXczX3BtZ0J2bHFPMiF5OjpZN2Q/P0ltLyN6T3F5YWNOUDA1MEcvUmQpN1cvIzJWbDVDRmYmOEVEbUB2P1dRKGEkZmx5REFRMHY8OmBaNlcpWGVvN3VzTWNYeEZLS1g2NERIUk5NYiVkWFhYPUx8V1MmNlNMZWZEMmdPUFphWjlNbVl1TURLWz12JCFaeE5bWkRaRT4hWCxqOWVJeFp0QnBW'@;
put 'c283dX50ZFo/NVh7ZUNYKXQvMkw6OWVjTGZnNXk0S2BeUCF9NXRjQHBbfkQmWjJ7YWFoWm9eYG8jN2QsOiNSdF5jcUIraUw3cC5oL3x6RnsxbCJGUzYyKS9sUDdzYl8+TjtSai8jUSQ0RTE2cy4vOjdYNys2aSU4MWw6MS9gfDk4RVU1ekpRIiNST0dXb0F2I3ZFSi5BSl5QYm5seyJMc0UmOVhF'@;
put 'R1lSOSh2eDZTdVJzQyNEW2BJOHRjX3ZWaSJWXVcxbzRDTXRXQ0YlOVhgSVhEYkdbRzxZU1BGQkFRJU53bHlpN1hZNDRZd1dhcEEpWFlERzVnPEw6cW1PTVkkVzlFPGhbWTJSWCU5WHk/cEhyISssXlB3MX5ZZTRtT2N7ZTJMXjtGUEIkUzBMfUshTEAmMl1GVXwyMkxLb1U4OlVMb05NbjQ5ZSlb'@;
put 'KGEjdXAmNDZvS0tAWEo3fGU4aFMwZEZCQU1ObyVwbVQ1ajV3P3pqWSYyaEMlRXpxPSpqZ1ZsWDJIW0lHOERMYShkKnQpXSFaInxLNjllQURVQ2EqOyR1V2ZxU2E+QkN6UGUrIng9ej1aMVdjMjM9azE/fCZIUFF7JHpYJSZOcmw9KWBwZ002W1E7WSlkTWZ0blpNTUpbUUo9RXp6UUAuR3dIfDN6'@;
put 'TFF0SXtFSTRrRDdvZ0pNWWNeR28/MUIyNmlmW2oxLlpbLkc7Q01pV0tidHo6bEJ3K3NlQC9IUEFEKVVMVHdXR0dtPDZ1bV4zekNKKHsmJF1DOShxT11kXXl0b1o7REp3V1FudlhhSkVGcHRISi8zQkElW0pPeDx2VEwsTlN8SS5PMTQwfFVURUdibEdAMVhTczh3QjtSJmZHcWN+WTI6WStRdmt9'@;
put 'ODBdY01CYVY0NGNZImMsRWdkdnBNY2daVmE3a2tzaCRCTUYjTElYKTl8d01NfXZUYykvT0VRXzh2Z3ErdkZgMUFldkAwK0htRT9hd0Z4ZDxwKEpUYHE6VkdDX0NeQ0ozeklwRF4+bTBKc0N1JSRsaGN1KWtsYGpnUmR1UFQsLktlTzFkXkhXTWhFZGw/Q0lMVlM+T3JAeHhxPXUieDF7ZS95Mi58'@;
put 'ZVcsbFRjR0EjPkZudSk/TmleKm9CfmJHPXoxPCMzYSxYU0M3TiUpJC84NFpiOUYsRyZUZWNDSU5KJkZubnE2bTA4alhYTU8oUV5MU2hCKmNxYktKbFcsbERhQFMmQklGRHEqeUJGd0d0WllHPXtUdnlPY3daQElkNGhYRlF5NStFO0N9RFkpSlY7KnVWSltTdjlCajc2MkJEQzB4RDwwaFBrP0F5'@;
put 'PXRUbTNqJnJPdklTb2IsLC5PbiIhMmpDVCwiMHluUiljQlRqaWEmMGpnTkI+V3oyU15ORU0pUkQjcDpodnQkeTk0VCxdTXh0RVpweEZEIWxWQnU2SFo6V3oyeSMydXNuJTRRc2dEVHpNOjNrNGpgeVZEc018MXNTZURJYjgueD9ZLCRTemkiLyFZTS5vR1VFKTQmTkt5SyRCbG1pazFxKUwuIXVS'@;
put 'QjljcTBfYlV2aTkyYkchbEoqdDUlPz9zMHhVbSttWmFrOkNyWVomRkZXMGxCVG1STE9tSjNHR3p0R2BMbTBJYXhLJHc0eXFQdCZkS2lVSUVyNjRHYVQsNUh3dEleQUFFOj9qSHlPRzdXRHRrME9OdihyRUlJRlo2cXAzNytfNk43dixNYjNJL049Lz9qQVgoUG5HVWN+PFgjbVVuQnBaZCwuKSFa'@;
put 'cUJIQTpnUE1NRXtDOTQrPGIwcHdeMUZNc2NMa0BJPUJVJVdHLEc1MmZVTFZEIzA6RzlOdzpIdkRvNlN4bXFUImUlZk1sOUcvSXc0enBEVilOemMjI0ZWVzVjWCR7alc4Mlh3emhQfDR+WEtDdHRWY01bKyxiO2dNa0RWNkBIQWBXME5wInB3InxxOEx2dXlYQC9BIWEwJDoqQD1KIjl6OXsvTHYu'@;
put 'LGMzcSFJSSU7dnY8Q1UiRH4xZGFTIygoQnJTTzdvNTVZQ2wvTG86dCphL0RHLmQ1JT5JZng2VjV0WCl+Wz5DeHBzZjEldUlAQGtTSj1HRFpZdlByRm0hbFVsOSpFbk83KW5lKTxxMWVad1J6dFo0c21lOWh4KVtAZW5KJnliZltMcFVRcFlQTFBkak9HeFpoR0tIUSxlN3ZHPmwkTERsUXV2RXMj'@;
put 'Ol8rT29BU0E7WHIyPmg+TX4xMlhNS2Z6d25BQXApUHBwTTF4fSROSjZ1eHpEZk4qdStTNlZiWHwvPy9oM2FaVHRuJUQhNkRrPmxLaW9nI0NIe0w/ZlouYis0T3Q9dGAjKnF8VTQoZFJlc15DOFJwd25uPmxJP1VPV2VySXYjRSltaDdBVHdZcCJKVHZ7PisyOnlSUGJMUzc8aUdBPmxjdEUqdix8'@;
put 'OVcyM2teInNzekRWcDhqd01pZW8he2tCdWk9KDdsPWJQPmwuKG80JVhIdyVeJEFxRlpCOGklO0UpJT0mbzpWMSklRi91NytgaiU7RFhFKi9vfDBbWnFGJTovbDE6MSU3UjMmP1hhN2VzPkIpWDZ5KFhrNzRKJVdQb3hNfjVpdDhfRCJyfG0iYCMiMV5YM3Q3eWV2WDtHIlFIazAkY1dUb2FkRzVS'@;
put 'U2wuPEFnKTB5XU43NEovTzdkT2lUTmplXTZVaVYjZFlsOWhFJkZ4LHBkOnc5IT91dFZtMl9TdGYkamtxO2Y9M2tZVi9hNDZnMiU3UisoRFA7Y0AvOlc+aGdKfGVURj5sK1c7VHYsfCl+TDV3cCFdQUYpOmdWQzMlWSEvX0hbfmw2S2d5JVpaN2Q6VFg5NWZtbTp8Qj5hXV9mV2w1Ijg3RFZKYXdl'@;
put 'dGhwRy9wcyp4ZEsuZ2xDVFgxLjZDQ2xaTXBCRFBha2c1KHhOJk1HJG1Bd2FpTUBgS288TDdXLlRALkFER1ZIcEJtLlV8ZnhZQVJwRUxpTyJ2Wnh0dVFkOUYmdGEpPTV+UHc4X0V8PjFJUE9qRzp1SU52RGpkNE5OdmFdNVtaRm1VYGhEUjIrMkkxJVVHfmpnU09CSHpyQnBYdEJNLDJHL2dpREdv'@;
put 'LEhdXXwvR3tXUiRFblpeYXFKQD4vSW1DMDkwNj5WYUNFb05KcWFyMl95S1M2KH1FSFtQaUpWLmtLQ2w5Nng/dmU1eFI1NEs3O1NFSHZWWmQ1NjRLWEJMcnp2a2svaX5lTEg7eWddezxSWmFeT3kuRjd0dEVnWTBIKTdBeC9JJUJ1TEdLJWdhQUxWRkJxMiU7NilXdWA/RU1wQkNNLnY1UD06eDxl'@;
put 'RykhMGE1dT1jekw1cVlMPnVgI01YfVU1XX5GaW16MXwoPGZ9aDQ6UF1bPStGKDY3WnBHXz59WE4qLGFsOTh2KTQ/KCFrTS50OD96azxRVEk3MGBAalsjeChVRCEoW0ZyQ3ohXTVgI1dsM0o7W3pYTGIyaThZIjl7UnZYfWZOeys+NEkiTGNDdG9hK1VpWVloXSNCSWJYJUhpYTJLS0Z3Zk96TmU0'@;
put 'KHg/VExIZVZ7Mj5TZ0F7WE5DPmU7OldOI0o8U2xSSTByQjF0PX1GQj10OmdYTXBMQV4+LF9xODMoU2MzNUx4ZHw9MGdGOXx5YHZSOUNFWkxPPlYsK2dpXjA2SUlzaTQ7eWd5YE5jVCwwR1sofmVYXXV1T2cwQVQ8P1RiNXdtfkV9SWl0cXojRGVdQD5PPCFCVG04Y05vPClfcilmXm1dIlcmRVMu'@;
put 'T2JBfUFlPHBGVFhqUClBanpBfW43SyRrX0V0fTQyRVZKUWM9Y25YUURhNGEuOSFjdWMwYUdkLGp8MUIoLz11OiEkI0doXig5ZDgjUUFQSF9hMWQ6IT9Pcj1Wd3dHJkEuaDlWMTRwdVUsfGRAaD1CbUxkL0g1TjFaWEM2bTBnWE5qe3ZhNXB1Pz57RiJqT2tJN3w/WztgSCliOjU3YSNne0piTF9E'@;
put 'OiEsYX0vNTdHSiZObkxNaTw3TFVVLG5Ofno2WzduVkopJCZEdzZqdCpYRmdeYTNbQTM7dUx0dyUzaltRODdqcmFZc118QkdPU2hwNTNpUylDUFRtR2U6eTZ3S2ErOFh2TEFTQjFXOk9ZNToiSTxVRUV3bWVla3N+PmFJTTNqIzBLdDRLW1pCOktDeG5QYj1UY0ltPCUoUSEyUjVFaH0xSGpwUklR'@;
put 'dzRqWUJgKy5Ec090I3FuOFlLQCZsaFh5SmBRd3U9N0FKZ3I/SndnMypzekpUa0xdJkkybkVmI35ER2QqNyosVSwjRmJ0IShXWHF1XT5pK05CRip1WW08aFhwTEZ3WGN3SWlOfjFgKG9PQDcqbFhlOkx1SSpIUShOQkAoVChZR24wUW58QmxhaExwdWhYcCVmYGxFQmVfK35JZkBGTX55O0JTdUE/'@;
put 'TU07aDFkfD1YMkNvV0JeREd2anhXcUlNaWNaJFhRYSt4MDl5K1FiTHtjfXc1bzohVy9gOVEyJThQdShONGN1cHozeWNDMX5kSj8kfUZIXnQoX254NWNmODFefVclWlJDRWtrOH0hc1ZzNDhkVzVbRGN8Lm9VQGxTPUJAak9pSU4oW0w3SlgrbHJoVkV2V3xLLGdVejYxRD1ramB+YGVPdFI3dSFj'@;
put 'QCpabkMkRz9FVGBbUTs9OmEyaVtEZmMyRm9bVFM/OG4ycEwkR2peNn1rMCYuSnA9WXg/LkZHfkF0RVV6Kk9tRSU6WUIkM2Qkflc3aSVUTiF8MjdUP09Ce34pI1hDUmZ7fkppZHYqbj9+Kkg0TCUobn5kYWNld35MOCg9V0dJb2BDey9LeDFFYVBONWNbeHpyUS9YXm9uM3xWMyhHYixYW1Z+M31e'@;
put 'eWQ4MEsscjF+em9CLElKQiN8a2NNdip1UHhYLj1DZ0tdKT19Sk9wRE96VTxWW3MiYl9ARGkpOnQ+bVlzOzV0LjVGWHVDN01PQUtFZEZoI0hUVyNNIztUKzZdUWk6eXdLPjQuc0pWTylmTXROJWA7ditRZ3lBSyN3fCx0UyFsY0c6V19eUUp4aCVFUiomKEpZZHRVT2t+SjcwKUg2YkVGRXBJTyl4'@;
put 'WX1AZ05IJG5QfEhOMWlOUSVTbVQrKWo5dy9hYGE0Rm5uKU5rKyRUbG46TFYyIltRKCNtNz9+P2NdS1dFWWhWSE8jMlpDczQ+fll6KEN1TWhwI25Ndjt8bEZKS1d2bV1nNCptfU1IUHkqcSlPK0JRSGAreXlpU0hHIUhoRFpOVThuaSIvQ1kvWChpNDpiPUlvZyNYbFtTUzBXO0pLWGlnZ2dWMDl1'@;
put 'cG51dk1LfHFBPEQxWnUwN3kkM3VBSGE5SmNTeWF8Ynw8LCkqMHdmSEIvPCRjb2YsLipJKlhWXz4uUXFCYktzYWtvTmx+dk96TFpxTVJ0Iy5RaUM/cEwvXi9wcFpaUSthIm5PIiJGblYlL11HRjA+cUZmNHZSQ3lPXzZRRD9UaVpne31Xc25PJHNKIU9GQk4+XkM3M2V2Ol8pOTVFM1Q1RTBNfTJx'@;
put 'JX0yKFgyRGM3KDlKd0RWNHpBVSpDZmhMT0A/bkxsemdLSEJOS0kqS0BlaVRpWElMXVYjOUJNc1UvcTpYWT1KVl8wK2dnbj11eDldKDVycFtiYDJUM2lVYGkpVmZEX2BBKTlzdk45RjMzMUZxXytuMldCQlV3NGJoKyM/dDR6OFlTeigmZT84PSZHVDssL0B4MWxMYyY9Ryg4RWNidiNfZy8oYXl5'@;
put 'YXUkbk4leTE8eGVYUnkueVR4aUFtZ2plXSJzKk1EXTQ1KFEzb2ZRYCooZHhaI0BJaShheT1LIyptX1R0R0J2Tk1SXU5pS3E+UTd8dkl0c0wkTmJYaXFhVjhyMChvRDRGKHE+S21DK196YzVJME9COUNFejs/ei9GNXBnYjJAdnRbSkhqZDUrcWlxQHs2KERbQHh9eWV1cGBZU1AsQG1zVUIvOnZq'@;
put 'cXxmMCkjaC93P1ZEZjtfL248Q2pFOChiRyVFUTN1YVtnPWhtKyY1L0R7RHIvQSY8M1UrIVohe213dmo1I209THFpYSReIjs4fGJ2eFtjaTdbOUp6SyVVcisqMzZEXlsxTEchYHM6Nkg+cV9XfHtKQkFGRzBIL0ApRS5UbFpqUXo8P20sd2U5Q3phN2pPJkNjVWcrSk9tYmV2JSIkODRNbW1AeiFa'@;
put 'Nj1UN2ooJCQzP2A+R0Y3R2N3bVZsWU9dPSJHaDVDX0wjXntOZH1SY2gyV3p4QGxMMFoqYy4uUV81WW4/ezQ1a2hJW0ZAMn5jfUo+Sjx2STk8NytpUnkuWnpiYjw9eTxFU0NlP281dEZXSWZCKiQzIytPQksyNFIoT00zX3IyV11fekRheCpSQkIwOUVWclV0dHQ6RFBOcCM5VSpMUnJjbkF3e1Qy'@;
put 'SUN0XlJxdH1FfEtZcWB5ZEolQ3lVSUlzJktVNWdgVGpMNj5tWE9BTlpJXmEoSnc0Z0p5WF5gZjxycnhSLmRrQHZ+eTJUKFJVI01JZys/M0doYWslNXI5dD9HcXo0XTIsJEZ8X2suMjQqKVtWWT1Oei5kbFhXRkAoJH01M2c9YFlEZjRnP1lHVnh4fE4raldKOypyfkhyJTskPT4qZkk7MSs0W2VA'@;
put 'I3VGSiJCJHFSe1FRazVMaUs+WEhsW3oheVFpRU1ZbXNXazdweG4yS0RCN2poPWVTUCtOTXdEY0I/RF8zfExENy9iQEo+YCZLPHg6fF5OanVsVnxpWVdtQj0uWzojRltYMEdxYk5iQiplQm9MdDVydWIlKUZqUT1HMngsO2NVVyhnVGJeIihTUyFEOEEyMylBfCg9V2pyem5bS0FrMilNUDAsfE9t'@;
put 'T04yTj9bbCN6RHlibEIoaGdUM2R1ITkpKjAjRE9+KiNRe0goPyxvbTlxNzBXaWhMQk9oSE51XTxMKF4lJT1JeyVgSkFja1FAJlNQSz9UKUFePEVBdjI5Mnd1QGkyWEA+VSFNU25SK21YVXVxTVQ8IXZ2Y0ErMGtGN11fZ35bUU8yPjd5UD94cHRsMz1nN3ByY2h4V144cVRSXj5ASjhLfS4hWF5U'@;
put 'M1RzRVZ9OkNXUlJSMEFWMyo8M3ZHdmV3OSsrYSxpek52UXI/OmJUVFdLOGQ+S3t4WS5+V3VTOWcrTDo5Q3lqS1hDdnVKQ1pjUlc6N0gleXVwd1N8Z1pNSk0hd2R4bkcvdCppa2phbz92dSkiZ0trbFtrdS9AO2RacWc9JGsuc1guOE14N1dKL3pYRHluaFN7W1EmdndCfldIVnhGVSZJNzR3OSIk'@;
put 'UHwrYix8XnZjXV95fDlNTVd8V05feGojPSlhMnQrdlQ6TEVdUUxTejF5cVFjSilTTkxNazgjdn0jRXVWX01jMVt3IVgoN1ZgcUtLZ14qNFovVEVZOi9ATyRJY3spZ1Z8UFcpKCIiKTVgfEQ7JjpvPSppKixmMnp7ayI9d0VXPmZzIXVURTx6QnV9WyRvbSFMPnVjdz1jTCJbJilmcGUiajlVJW1O'@;
put 'eHkjciN3fHk0PCp4PHFJd2RobGc5KDpsWkxAMWVgO2prellJd0FbYEFOc3NnXiYpd0Iwb1dZOmkkbVFpLCgsezxpMzFwPXZFPkY3Q1NLTFtmfWx+SzNeeSorKDFeUjZJUCg3dXwyT29acyNSQFRKXSVUZHYpPHt0Z3hWcyghY3N0SUV5YDFHbmpOInkpQlohKFhteHJUejQjcWhaYEB0KWBXYUda'@;
put 'eFMzbnNANF12eHZaIjtrfEZyYmI9IktRfjpUNH1kKjE/WWBNLHlYcklzeW9EeiUvW3pfQSFDZyVYYmE4YWZ6W21MT1o/JHpZQlp5K19KbkJXUT9wWC90R1kkaSY5akM8YlgpQnQ3Y2V8UE18USp2XkhZVnBCYEU+TEN+elgmJDVQV3pzdkRhMClxdDg4WWd1QzM1cC4lcnQ4YT9tOnVwb2NSUzIz'@;
put 'Q0p5eyhnQ3liLnJQTys9PHImQ1NGfVc8eH0iW0FHQ2slQk9RVDk7MHY0R2g1a2FyOjFAXl9XbV07akZqWT1le2xzNlIsfHMrTlNpM1VkUFhHIk5oKXN2KE1OZ1hHMndBIn1DTWdvNGVqLFFqKDZqdz0oY1U4RXt8VDxDXSlYfHFtST5YQHtZdjduUE4mRk9MYDlwPlNOPHFiNC9WS1daWno9KnJO'@;
put 'eHRDY2I6TSNMc0pGQiJeZGwpb11fcD5uKVE6OlhZSHBGWEdMP0t6OywpQm9JalUrMS9DX0Z7M2pLJWdMbWErSCFKVTRHSkZCS0xESjE9SHlfLi9QVzZNKWlHfEZFWEt7L0gsRSpYSDRGSlpNfGBCYihjayRVLzVhQ0xNbjwlb0xmK0skVGZEaUh2UlBXZyhAdCtXSD5LTyhvNTRuQiNOZnd0K242'@;
put 'SkNbRiRtcmljLjJYfjI2Q3lGe1RvMkUmMG4sKUlOSlZjbiMsZSZoI2QvNlhdZCQ3b017R01Ne0BHU0YiZWJkb0tXVWk/e0dofT5PQFBFXWZjc3tyMT1PI2tDUktVd21bQUQ4VWM0e1JiRVlkRV9zUFNvRmAkNWYuO1M/WHpYIjJ5JVhec0clNUVvSXR9JVh6OV80VSouUWZAVjVDOXFhdHR0Izhq'@;
put 'K2NnRkY7fFdDe0ppZW1fIV9YcnREfUNaKGBrNVQqQ10lN1BXME9ENCZ3dDlMQHp5QiJULzFOd3AiclNITDl3ezI9NXVdPUc3WCFhWWYmTmI0K2d+X0xWWHFuK3hNLnlWN2xuMjMveDE5KTB+cCNWaSpdekdPTkRlfT1+KngrXyVjbUtdSDRPfGJwY1l8SyEiXWAiS0ZpZnBJaCxSUi8uZ1dBPzRp'@;
put 'fGUoMH5GUEtiLDJiZk1PK2k3LiJpVU90Kl55V3QlXltpez5uNS5FdF03ai5kSDNGaEJkcW1IPV9LYDUpJSJIRE9UIXQwTV1RZzlnWmJbQyled3UkR2ZaQ3d1RG1sQmZldyl1ejBhK3FUIzd5RnFJNm1zS1hnbCh0YWBJZ0U2QG4+WU5CdE5qc2lSeU1lNVZaJFBXbFtDKndBSVh3aUVFTWk0NHlq'@;
put 'Vkw/NT09SDxAJVphTmoxQXpiSmI8YE1QU0ViTG86SX4qNiRmOXlxL0s2ZT47IWpbczFZYThFJS99TzdFIXRdKlUzNmshcF0sJlpLZXoxQ0s8OXhocTJxYyYkZXN5TV5Hck9GNmVhP1FweSYrXmlXI2EkNis9WyZIfEcybFZ3S1IiRit3ciQ+flYjVFNxU3FUJj1WNFJXSXoiY1A9UVdJQj5MPm8+'@;
put 'LlA5PzxfNXNoVGExfHp3S0hGcU9xWGZTcHBwSzZaWGd0VHpUKS5+bVd6MGdHJWI/Ryh7aXZRU3J9X3ZrYk1kODA9MCF+bV9jc21yaUtxWEdrOEUuRyx2QHYzXzs9K3Z7Vi5VXzUlKHd7XUQwIn47fVFgOyUjLDcwSyw7QCV5OkQpO2FJL2w4SF4jY2ddQGk9N31BRktWIjorN1ElaiVjZ0RSTUJi'@;
put 'c2JfQT9FYGh1WnVaKyI/Q2BqbmU9XVNKOSZNRCslUH14eVsiYG58cmcwdlArc2tsVnc2Wl1ifmNCSz9Qey5nSStWIypMZH1hJksreCtwU35mWiJBJVE5SyMrOzJ+ZmsmcmImLzk1XWpUe1UvSTFrJlFuaVQ8OX0vfVhRenJxV0BLSEFqbn4kKHJXOW5oXU5QZX1Nc0d7XjxfV3luaHY1KWN9TTc1'@;
put 'X1tKaDA1c1ZIRnFPKldyaWs4WWdpT0dJI3d3Kk4wWWc5TkdJQWRzPUhqUlJ7STh4fns4Z3NRNzVAcHF8QSFYek9BPHhXUFhTYko+Xj9iPVBmPXs/ayF3TT1RLGBYc2lGUCgzPlJsMlM1PyZtQTRvd0ohP0dZNDZrKipuK2NFfFQ/RzpuRWFhPyhOQXViZWdZcj01PyhKcj1pKSZtLm59L3QkfHl6'@;
put 'P28kSXBbNHEzOm4jTE5VVCkwKU09WUErPmhKcFJXWF5CMnkhUkhCSzA/YFArOyR8REhpMEhNLG5Db0dnLld6MGc2I2d8PExgZj04JUU9b0xne2YxOHJtTG1sI2ttXndXJGNPe1d0SSpGZkwiJlI6WzNzQDFOYlIoQ09eU3lxL1RLWUxRQFpGcW5HXSltJWxSIUJBWTRmbGFDQCxzRUp3cEl5IkQ2'@;
put 'M3Nyd2VucjN2dyEkSC4+cCZeclspPiYpbVZnPWlbXyU7ezxwY216ZHF5c3l9eX59fVQ5aSx2Um1NLiFKSiJXPEpJSmBAdzlDbiMjRHkrTHEqPVVBezZXNkJdLERzcX5JS3pqTl9PR35NRSNURjVqeiUzM15lem99anUvdDJSTyZXe2BCLlV+WjRIMzZmQkFlZn5XMihBfkJuSytWaFl9MllMTHlN'@;
put 'TX5vSFFnZSlkL0JaY1VIJjczRDg0YHhJUnZHWjJGK09lUiI8d3UxJmk3SGohPVApb1tENV9SWXtiT3ouT1A1JXkmaSxhNUJoND9efnhvfSJwL0l5YyhOSjU8b3ljJiQ3NEJGVlErfk01OnEpNn4yQG5yKmNIPm5qKn4yQT14O3VXMjhybStsYikobUxnfDx6bHFtJlI6aWQ7Z0MpTj0/KEpUJl88'@;
put 'fW1GU109eDtXJFg9MjgsK2JlfTg7eU9nfDxuSiVFbEdpIUBTeiswYmFvcz9Xdng6PX0jdyRHVCJzV3B9JjNLbnRheGI7TXZ6fkNjVlEwZUx2Nz9vJktMdn05RDpyWlVGOihiL3VDR0o3Wk1Yd25ITHkvOkZsZGl6cWleSmY9WDA4VHVMOCRDUXx+WH5YQ3FPYlUySipiVzA/RVY/O2g1YCY4MEBT'@;
put 'dXAvTko4KXhJUjMqPj9bX3h1fkRJcyhOdyFULF8lNip+bFlyKEJ3IyR8fCZYW34vWGluP2AxZSp+enUkTU8lV0dsbiFDXz5mfEB+cm1pbmt9UGd8c3o0IVRffERFW34wV2luLmBVWyl+SnMpPnRbOW0kfW1EPn4jVmlucz9eRSR9YDVyalQzSHdzdlBWOGk3MylMPVJmZ1NOZj0yaF5FP09tMkgz'@;
put 'QSVWRUNvc092SVhCe1FiP1JNWHEsPkoieTR+SXp0Z3h5WmI5LzxQVkJSck9XVCJoalAyWmFvLDRaRW5JW25zT2ZJfGo0JHpmW0J8NWhoRkJnfj93MEB2WG12WUxOVTdfRzAxTjI6ISlFcik+XSk9MnQrQH5QVmlubz9feCN9fT00XkIjMEBBdTJJYlo6QEVNKE1PMVNNUSYuNTx2JV9Uazdrb1s3'@;
put 'Umx2eit+fjJKYi5XMF1EYVNKL11jbVRmSiZ9ViVXaC5JUWs1fk1OMXlQZX1LWzB7YzVQIyxJNFFbSGQmSk9rI0Z1N3pGMW91N3pGSSNdczYwZGFiPi94fX1VPTRFQ2JPeF46SUlBImUyPThjVEIjaiJSYWxdXnZpVHF2cSE1NzQ3PiMuYDIxQ3QyPG47ITIqU0Rrd3hefUwuQH50UCMzSSpfWW0p'@;
put 'PE9rZW9TfisuVE0sP3VJUi5jPnV8SUs4LE1PMSE8USYmWysvNUpdU3tzLys+NU5kVzI5c1VnYW9xdFh2STFePit4Zk9VdV4+ZDw0MT8ub1tCMkI4QjtUUzNgUEhLbmx0ZWVWW0lNa3UuWnNwakkzSTplMVUmMzcpTSwsdSJJRCUmYF9ZZ3BNLCh1WFI2bTIyZUdhSjp4W0NBInljdWA+cXI1MVov'@;
put 'XmkrOV9VcyNGWTw8a0cuV1dpeWc+THZWNyxKQHx1NTw+dkxVMn5LIkZwW31fVXRkKygreGBrWVg1RitDJSx8QzNRUmpWNC89W2BzUltkKyhxInM2fCI3IzN2NXFVLC9HWyZgT05xTypHJShlVzZqblZWR29dMjE/Lm1SKyRzL0ZaIjFsKU02RXloVlVGa0VYMGFER1NFb3c/Zi5vW0hhPy5ua1FY'@;
put 'IjFlSip3Si5vWyVvfSx0eT4uOjV1YF9ZdT59YzpNTS5dNk9KRlh6UV4/NWtFQVgmMEV1Uyo/OmhhQytNVyo4SE5HL08+aXBuR11oIzIxX0VOL0B3dlpKSVJdYGNIbCVqME0oPnhZO1pwd0RYUl09fklLKT4pKWZnYH0pL2BzTzMhVDx8XyUhfk1UcihndiFUIV9ISSl+SFNyKHAuPTJmfG1yP3Nm'@;
put 'YV9TJDBEXnJnUn0xMGhNNEdLel9JdiFVNkc5XW4mbE8hWCFve19JLGVpdiZddClPPHx0MmFrRiVleyQ9IyU4YkUsZjpESDxsW2dlLCg1Qi9+fSNmc34lbTdkV1c4X1t6c1ReN017fDp0WkxRdklWQn56Y2V+TCF7SC9gSXRSfiNIXktlM3YoQE53fGgwKH5GOkY3OGBScXJMR0ZYTCMkWUBJMVR8'@;
put 'NkhlfmR3byhkSWhuTXZmZ3E/SElqfDcwV1cpcGslMT8hOyV9ZWFKNEptK29PL3c5cnxgUyNzJDFRcVRdKzs6fVVyaChBeFFxcX5xcGZfez0jUUV+YjVQKEZ7fn5lMCloaz9ORzZ+MXxnKEwsbUl9ejNZLn1HKjl9a0dXKCg6ZVdzQS92Mi87TXY/Yjwxc1U6UTl6c0BJaihHT1JxSn1AdDB8UCki'@;
put 'fWd0LH4sJHx+cmlgfktgfn5dcSJzNVZ0V1tGXVg/RDwvOns0eDR5b2E8L0Z0XmtDQDZIaTE3TXErOUdTez11KD45cSJzLnxVeHJ+Wyg9UXA3M1ldczQ3ZVc/PmZuKTZZKl18QjZofjt1N1R+bDFyPkJQUSxELlZ6M2toQj89ZWp8WTVzfnI8IWgkTVJ8XUNMY1t0QmFxfTswVFdyXWYkbHNgWlRF'@;
put 'RkJKJl0rdURdc240MnJqdSloZ34+REB+MFY8UVZIVXh1XVQ8dX5rQTxzTWdCSFRALmw8UT4sVUI/P01CXWBBQjVzL3lTKCFiYH44THUoX0BvMXt9dz8hc3hnbElid0JhR0BiPFZ8Kk1oKHg8Jnw2fTEoaXNwbmdzKnk2Pld8Y180SCJzT3QpaFI/eztqfERZan46STNoXU9FT2I6MSFxX3grayhl'@;
put 'YCg4ZHM4RmNzJnxERTk/JUNhflBkfX4lTXUoSltuSX19dmkjc1BtbElReEJhMH06SGRzM3hmbj99XXAyPmtfY19LJUhJeCpvRjZ9SENnfil4In5+RHUoK3swWlR8LjVrc1ouUTR3Y2QrfihMTTp9cTVsMVgpVUJLeyEsZCgjeTM+UGNRfEAyKWhZYHI4cX5oSyNoTlZtSVl6L2l7c0JENXlIdVkq'@;
put 'T35aOGwxZClVQjJ9SENoc0BoUyhUYzJya3YpaDx+PSs9fjd3bUlqOmJNVmBLXmxXVCY0eSN1WSpec2xDJSwzYGQiLn1fITY+VnwxcmNNLyZmW28xfn4qU35+bjUzWTJ9RSpsc2dEUjR9KU9qNGBscSVzP0UlLG0/M0E0fGVOIT5SalF8WX1zL3Bzc2NoKDMzSWMvWSR0SS4qT218LClVTHN1NGw9'@;
put 'fjshKGg7K2I4KV80MVZMNCskZHBzfT5ET1B7SnlsXyp1KX0pc24oKzNRZFZ9bGc7OTVlPDJhQzJyIWBge0xMZFg3NTRCaXNeZ2JtYjl2Xk4ibk5fVilGX2g4WUJgVlc/TWQ8Wl59V0xCZj88SC9TZ0FnTT1WWC4ySTFYZ3dqfj9TKX0kXjc2NkN0QnFuPkk2XU1saFY5e1QrX1IqUTljcnR1NGRC'@;
put 'VWwqUmRtXnBoN3d6NSojQCp5cVlrYCh0ajwxW3tEQFRSWDssc0UrN2h4L210QkgpSGZwX1pSR2A9a2cpQFQmZ1Z+Y0FdanZ6PFdCdDVWKypJSnE5NC4vOmxSXy8vMX07JnRTR2NqfXVTSm5ETV1uYm11ZUo8SVIyJSJSRmcuOE1ucnZNfTJodHBEd0pIWF1GVEh5PEpMbm5dSXg0eSpfWEtDQWts'@;
put 'RyxMIjlHUXhpelBqRUM2VE8wRkVzWEY9SWRNPEUmfVE6c1BlMmF8fEVDKz5ha2tQQyFsNkxSNTJENUJFWEhFX3VEem07OU1XQ3EvWVJaWjdWfH1eMT8uXV82UEU0TDhQRzFxRDo1aShyNkVWPDhWfTR1fmtXNWZ0TldHRTVgfkM6O1Zqd29zaDVYeDxROVppVTV9ZUddKWw/dlFIYDZOSmxrTjgu'@;
put 'P31xTEBWQHR6ViFCVTpmfmRpd1t6IUBqJENmRWdffmxbfHowXjFCIm9ndUdbTHNjO08iSUEzNyspKGhJTlJyQmZEKnlXJT91OkdzWTdQYFN4PXtEQUdvW1d0SjQqKipga1J8UnUoU147P1h8SU1abW9NfllEMCMpQ0c9PntKWypwYC9ZTjlYTy90P2p0W010cklQR0RpMUZpVGJ0RTRvMXVHKH4y'@;
put 'eiw1OnVIXTtDalAhI1AkKTNaPGFGVn5SNUIvJCEoSDVjJjFGL1VEKW9hNFd4ZU9ieGRHZHR+JlQkZmwzMyl9QGl7M0NIWHJVK1ZvQ0hZNDMuKkhJd2YyQF88dCpfPlJFYzlTemQpfTA0XlZgOnxPMHpKTlZMTmMjIXFAOHdbVmExUT88dzFoUHBbQGJEWkxodGp2YFJNWFVGUzdVRUw0PUNHW0pR'@;
put 'LD9AMW98biMvZ0Z2TTBjX0pCKmBGWW1Tfi41LztGaEFlKnVqXSwqK2JWXWg8aFR8YDU7UTEubEJZe0dKQkZZUiRHcXw3WV1JNC5dP3ZqYGp5dSV9UT1HNmkjfnRlTEUsTHw1JEclfFViaiN+QE19LlNRNFlgYHpkJj42WXtyN2ZjTXdpdip+Q0QqZn1EWCM6VzJpfmEvL1YldXJ8fGImYkljSGI2'@;
put 'PCRrSXdES0B3OUcmK0k9L1YjOnhWcXx2NnNzaFpHTUtiTTZqP0ohUWhiUD5fR052dClQI0d4KEZeITFUdVF+clArQVU5W2FEVVg+cz9EQEFvcmpAYXdmYlg9Q3BJcSssZUFxQ2ojKCVyeDNnJXxVO2k6SVd1RVtQK0hfKDJbMSJCakI9MCsvMEpQR1lSP35pSE9zckJRQVlMVDN4NmJTYUMhXzp2'@;
put 'NlNXU29MYFhBd0IiKlQrb3EqXXdCIjo+d1t3Zj1TZDpCLytsTGc0flRrcHYqQWpEYUgyKF4kNHBiUHxfMVFCWCpQNk5gUnZefFIwbmtXPVJ7UVJgSndHd3pQWUcvfTJYQTRkZyZRdXhnX3RWQUMqbzpyYj8sJG5iRU9ddGA4L1pRQnIieHdCJV57ZjphTE5KSC4mc1RbNDFte2N4LFJIRFNuVEh9'@;
put 'a2QwSXQ7UjMvLGBEaWtFRyxlQEhJP3w2R30pKEZPY1Z9aXRfclc0WFJnWSt1en5QIiIuVDpuN2RMYCl1RGJ8Y0hWRiskIkxYfV5XQ1drRjJFX1gqTGNzQjJBL0dBJE1PIitGa0lyNE9pMU4sSHkobkVMOm9JKFh5KUtFLGpsc3lXXjkxaTxPcGF8ZWZCZXEkPXVZdWlUYWJ8a3hJV0Z1N0xGRW8r'@;
put 'NX1QUFpyOHJoM2YvNVU0KVRXKXEvZD4wUi9fRUtDfm5vRU5lSzVkQXxyKTJ9NGl0ZXVhKHJJOklYLE51KlJVInpYcGAiI3NjSlp3QmRCTDpPVylvJFtfS0IpQEhtV3hjekUza1RIUSExQEkxK3wyU1ghb3U+Rzp9YGg2ck5MZWxQTTlJKT5hXT8ua0VSal8yUzF1RCJ7Ik47Ymwrfk9QfnBMRS9S'@;
put 'KX5ga2NLbThUb1JyejchdjxFTUhDd25xWWlDYVl1b2oldS4qKiVbKipzcGpNcVpEOTdLZjQlVCJDRlhIL1ZXXUs1ZnhKJixHe2xQOiRodDBEIkwwQWBWRiIlSSpZNjhwUCt0PH1DMUVYOE00WEE0ViIifEIvX31GYyRmN3pGRF50Y0h1W3E0XSEheXJ1PkQvKiIzLyV8VW0jUihlT1hTcVF0eFhj'@;
put 'cl9JRmEpZ0Y0bzpsSEY0KjFYTzwsR1J3e2BqVGxqSEJTdSsoRENWUWdERSJ+QVl2WWtHdTZbIixyYE5rYyVXSXd2dWpQI15AUVpyZnN4QSQ5fXE2YVNGLEMkN3lteDpJdCtHZHJZT0E5cn4zK2NgS09ENT5JN0tCNHwmT1NpVUU1Rmw/VXhjT1tXO0EhIiVrNlNkbU12Kml6S3NFRzdoKkYrOkNi'@;
put 'TkBDa0Vobj0wVj5nSmUpKEI6KH5DTE4/Vlp1Zjx7RS9CIX1ZTT1WIXZfZ3lLJE1wfnNfPFZ+eWBbWzRwfDQ+YTJvVn5lZTtafjhaZDB3PD1WeFo9Yk9rJVlVNWtJLngsbWZlLzFEISYiMHdSUF9JK2hVKUJTV01bKHNVb19veCxyUSIycWAsan4iYyEqUFd6RVl2Q1NsXkFOQVspVCtPOlc+aGBS'@;
put 'eGlJSWdTS0R2V3RrY0dSSjRrOWteKW43L29ILmtARzMqfXBFPGNKdH4sZUI8NGh4UzM6QihYYyNyPypPWT8yLEdDb2ghR21zO1pqVXRCZkduQkE4MnkmYXtyMHd3NCtuQ2dobjRJTTJfSTJPSzdDYD9BKHw7VE9YNXBTIiVzVy99M0VEY3ZONWovSzRUQFh6IWNAR0p0UEhtW35AYWI8RGJ8e0Vg'@;
put 'alpOQlluTmBTMUJkI3woRlg7P1dqbipFZlB6cHo0KWRGSXRFRiJDQENBKz5xbE9uWDNMK2FVLzJldVVWMCI5bU5pIkgsS3VhdlhCXVVWeF19ZypybiFSRzBZIzQ4QGl6cCw/RjJMNCZ0RWYkR2lZbn5RYyNNa0VwJmYpSzw4Zl4/eENBTWMsPG8+WX0udXVedipbKWgkUz5jS0Y1KD52XTEpRlBT'@;
put 'fDhNMm9JSlM3Lzx9UW8iM2VObkJdKHYxPnM8QTY8MzpMUDJ0PyxYWW58XkwxW1AidjVvKEZ9M21DT3ZHO0Njc2RSXzM1QDl9SEwkOGcoLm8qb25FZTJmaFZ4RWh+P0ZxXS8qZ2haK35jNH4uc0RhP24jemt9KWNbT0V6SWYwUXFESDY8MVZIUmlMdF9PRE1jXzZWRCE/YVZ4bzNHUE5bJmAqOmhq'@;
put 'YUBNRVUqeD9qVz8zdiRAfVFnc2ByP3YiYU1pNHlXNUlGIVBCRFdYfD57emZUa3wpSS8oI2k2Q29gdE8rLCNqLDJxX11RVTx1Wl9ZYjpiTFNLSC4uS0hCXXIsLFVSTyxfayNneHdJWWNMIUN0KFBYKmZ9d2ZWYlA0WHszP0EubSVCQm85fnkrOzhRLyJhNGRhMWZndltyfSQuSXtAej99bkwjcmNt'@;
put 'R21rZD8sXkUyQDo7ZWFfU09CaFdWRXRrVlJUUTVGRXQ1fX0+QzRCWXp8fEwyKTV9TXUiM25TPmt+fj0rR0RuRDUvTFRwLlZCcUVxMSR4MDNsZSRHODdqeSZ9NT9EPS55LHQ+aDVuYUN5QT1DayV5LlsjTXp8fSNZfmdHa3ZMdDVVVUdYWXwyU0thTWJedjl+IUh5QHIjdnw7dkVpIlY+LD5xcyFr'@;
put 'fllERTE0dHdRU3VOcytBZ2k4WSVsZlcyW3NrZHRbUHJ2YyExaHRQKm8pKHNIUmxZIVRrI3BqNCJaWUdiZjlfP0lEM2pVX3w9RX1APW0hfW1DSmBfcElhdFVSTEtKISR0aTVPIXw0diUqWjZjfHFQZmdrSDMhRD1vaFc6ZGB2Z35+JT9eVVY9aiJAfEt1OnBaZEcpZj19ciNSMHNIP0RVKlp4QHc9'@;
put 'O1FsVzwrIVQhc140O1d2eGBoRDNKSjMrQVd6eWp9NWVGall8Kj57QyY8bmohXXN8aiRQQEFJfENDeSxfKm0zeV16RFVRR1RYQUVudTpEI3VUa0JsLz9UfGRuMzojbTJkaGdKfnBYb2A6RHYrWDRpL115NmpBVjkwSy9uZzt9PXhiKz8rdz06fSFPY25KMCZ+eVgpcyg0QFc9O0xVZ01eLk1SX3h1'@;
put 'KzgkLk9tXz5JNzYxPSxlbTBwQmZucEJUKGhjb0xlZl1tKE1XKGRjK01FMW1OO0lHOm9rZHdfMT9IJVliaGFnRC5fbWJiam1pRGk2U2B1dlNXTFpBImZNdE0ib3RWU1NoJXA/KVhOMVYlTHg4VSY7WE0zPzBHSytBekUiZGBOb1hPb188XUh1NEglalRmVXc4Kk07dEkuJDBzdylPQD9qKnRHdVch'@;
put 'bkJyTEt+a2F6K3c9enNtJmJObFplY0A1aV5QREtPMSVKRm4vYnZYOUUlJUUoWGw/YnZQUUF3RWNFVUt0RFVMR2g0I0BFVUtCRGZFME4vYnZoIzB8P0c5UHpuLkJ0VXtFS2khPjFbKX5eLChfY0h5c0N1O0R0WjFGcDR9dkx9WGtNTEQ4RFU5czRzYStyXSpte2NeKXNDc1liK2JdWFFQTD0+dz1k'@;
put 'V30mRSVpVzQmRSVMVWQuQzNpbTB5VjpDMyx9bXt5eWR5RSV3fGo6SUxKS0hvbj9EdEdiSjR3RiZbUld6XVskS1t1fWk8N3dSV3dhSG9BYCo2UEB8P0FGNH1QO3l5NHhFJS4oVXZ+eSJLITQxRWlSOz91YlkodnkiVzZ8IWEueS5kQ3NKSUhvW191fGBGfUZdRj4pUiYxZVFvYnZnU3EheXk7d0RV'@;
put 'b3x6YUlMS0hIbztfWGtSKH4uNm4vX00xTEx9PUJLdXM1WmErXVt1Ym5nY1coWyI/KTltdlU8KlsmTnhwW0ZLfV51Wls3SHBQb05LemJqIV00VGRsOCRoem0zWFA2RG89dz1RTFk9fn5wNUZPQX49TCQub1srXyNnW35hR0xjLF9AZFt+S0dMYytfR2J8WE0ve3wkWFhiLEJ0VUAyYEk5VFghVVRo'@;
put 'QTJFJWs/YDpQW344NHprNH5SbU0vU354Q3JXTE8ydVhyPmZNeXB2WXY5bSohbEZJXmQwNTw8S0wxXyZbTzJbXXwpflhXTS9bfFlgYHN+dkc3anw+XiZGc2QjbXtMR1pKI092UFE1ZG5MOE1Yak9Kbi9hQ2h+S3JXNHE/Wl1nfipxVzQlYGVeIX43S1c0JGAkPSF+PVVbTHgxUWd9TU1EVmo5XzUi'@;
put 'a0VUfVl2NyooflVCbmhtdVt9cFhYQk9hOCF9KCNANV8zPSE4aDBZc2ZmMGFiVXFXKilhI3J+QXBXNDhgajBAfkBFTGMjXzs4IX5XSlc0TFNFdCZLO3xTLD1+OjI4X01wNT4hQ0FSXnJSUXFXT1tSXXpDYTohUEh4WDFyTkVwZFlgcVVlbEZFck9NbWZlbHcsS3pPPmt1bU9SbSVZTkw2QWJXdW0o'@;
put 'e2RtIX5eU00vUn5pZl9zX3VHN2g3SExZNnJtZHxNNT1+ckRMYzNfOlAhfm5HVzQ2THBzfXc4fFl2QyRhZTNQMV9YWUB+e0NMYzBffH05flRTTGNjLzRyLzF9XzlNPGlYdUc3W31tVF9zfix3ZDd9QlNfc0hCe18oYS56OFJvX3FOWVIhUlU2fndlbF1WPm5Qc2d4KDEwW1l8OmY9fltCTGN1X1Mz'@;
put 'OX5lUnBMKGtudjJqQSIzM3t8WXZ3e2tgUjFuS1FOITh4U21mYTp3ZThPI0l4Qkxjc197cjl+T1JMY3JfZG05fn5RTS8mfEdyYHN6dDBbVnw4cF4ickRlbTdgI18yYW1ALj9faTlKWkRxVy9AaT9dMVNbV0s/dVNKczIubjJgPV8+RSQ9P359MEZPVnwlSz1+P0gjfFVoY24+KVFDcVc5QDZmJn5+'@;
put 'QVc0L1ImfnZPbWJgT00wemtAfn5AQ0g6flUjMFs/fk5VInNmfmJXYnZadSJvSEglajE1Z2BdcmdgU3IvcE40cjNrP2VPR1pdaTUpKnU/fmRgXXxzVzZ+K3pMYyV+SGtNL0FsWDRkfUVyMX5rfjh4TS8oPiFDcVJHWk0/V3ZQSVhPNipAUF5afmtPc0dfTEIibzlGN2pLcVE7aX0wajpyVEQ8Kk4k'@;
put 'ej8wU0daZ3RLNX1zQH5bfTl7JixvMXRXInNiLEF0Kj4ifiRzPiMpaF5+a35BYFJxPn4lfVZleShiPzkyQ1RaTltrfi9IZmR+VyxMY2BzPG56Tk4yfn46fTJ6TX5nMS59XjA9flBAezdEQXQoaXMwKyg2Klozd2hOZnwrP00uVnVqUTR6fjt4OmtzWzJHP0srJU9dfHduQHNbMmx8JlJydnprL31X'@;
put 'KDtKaU8/LiZqaFZeMCF+Njl6a3pzQEoxUSgyW2gqVH1WbD1tclJXYCtXPkpTSyFtKGJVPz9MKjc7SGksSnt5Y24+ejg+UjdMSDRIL21yKUAreDlRUE5iVENuOTkjUig/NldvK2w6Qz1+fEgvfXl2N1ReeTFUbH4xVFNgaUg/fmo7PnpvYj4uYkkkMzNRe3M4XU1KVChUQzZ8VWhyVyN9WyJxV3l+'@;
put 'XjhXNE59IURYNElgQjZ7c29dKk9dfiE6Q0gsfkU/PnoqVUEiYDR+eGRie0pXVC9feG0xP3QhdUdnPVpaUVRMYzguPUcyYFBZXn1pbD9zV1RlelBbWHcvfCU6VihzbXpbUFsoPFVXc21XNDJgMWVmfmIuOEoxYERBXn1KKVVXRCFuV0JtJSx1MjBSTltiRS98TyoofkIhZF9BbSEkdTI6UE5bPkQv'@;
put 'fHt0cX5+aEtMQjxxV0FUbWJZLjlHMWBYd3F+WjxaWncyQU5OW2RHXn13IVI0eDJsT159dSFgczF2WkcoYEdASzola3V8dVorY2ZaZT9GTUdaWU04KXx9RWJZRysoYj8lTUdmSm9nP1YmRUVrLz41aG1PNSF+aSRXS3csMEVISWZnInV5Z35bSWdUVGNnRjF4NXpPMSl9W2p6cCM3ZVEmcStseG98'@;
put 'JWkjeShoRkF+WyhmV2svOTw8fGJmV1tjKkJ8flQ/I1pfL11RPFYobXRVezBeUSFhPFF2R0F9YSNGeFdLaiJ4RTlHWU5NRGApOV8heSxgbncjWUYqZ3c/SylOcU1HWklBNikwUnJydn5+W35gN1k8eWY9cSNUUXdpOSpfTytJZXorSVBHcD55Ui5hLC8raGU/NXU1Snc7M2piYFgwTSwwJW5KaFZP'@;
put 'RFFSJjM3e3JjY00iWHI/OEIjKEV5NGVKYF9GLzEoVTk/di5zflF+eTNKZiQzbClNMEk6OGxzQWxzUkAjT0FdamZZa1BMU3R8a1trSFp1V2ZZWH5LRntvem8yb3R6PXlHTmpPJFI4XysrRGIrY0xSYj8oS2xVNGsxJVdLamE1SXpbZy9oTz41TmlTRmd+fDl8X2ZLUjE7VmxURyV5aFI3eUApdWZ0'@;
put 'UVtYd2FEe0QsZzBZNzVSdX1CX1pHSiw9NW5uP3t6WEV3RSh1IiY/TFVoeUZHMlhLI1RfWDNWQysyZ1AzaT8qWmd9MztaW1dTPk5lMzguWDNwb2lEU1J9Z3BWIUpKP0Z2UzsrdFhWS1c0LmdnMj08QHdTOHp5YW9yQS84KTJlblVSJWExVTEoYko5aGs2bzd9dndHYzZ7Y21hO0J8RnpvdkdQNj08'@;
put 'XmxfbSQwI0UzRzF8YXgsIWxoTW5AaHp6MHZRRFl5LD56XlleeEhQQ15nSUhkXyFpIS55fGdoYjkjdUtMRWhbdyEkcSw4M1RYPVooPyYzaDloST1aLmMkU3JCaE8mM1AmfD9OZSxfJUMrbFAhLixsQyZyIVVeSiMpaWk/Il9TOClySXw6bHVxdTc8cG4rfG1bcEBeV00jRV8lZnJGQHI+cWsjX0co'@;
put 'OXtGRDopPkhEWS4lSiNSUEZUVT0kK2U8JjhGfkBdKDtkS3BQbjxTUU0+YXtzOWNqYGljMDBoUnBCUSZRPytgKHhQSVN+dUhmfThIc2d2V3IiWng+SyRqbFk9OFFvOE4rKSpRUjRwQyZmcnpdSjlJS2dOTiNFYDpZOCxsMiliNjBGX1A2PXp7ezZKQysuMnA5XllJU0hRMyU8bmtJLnlabU4rSk12'@;
put 'KVc/YSxrJHNASUshNzZHPDJhMWVdYF0pbTZla1AzTTc4V3pedUVvQmhRRW48OH0mOCxqSn5AXXMkbmY2OV89Pj1NVDgyTyZ0ezFqUXJ+MDxwdTl5PV0lNXw4XTA+T30pO2F2UERZUyF5RWNvNDdEP1o2LlEkaU91JWJsI19qLF95QCgpMEdON1JIZjclMSolOClFXSMyOUw/b2V+dHIsISFaTm1R'@;
put 'fEJ3O0QwaitodiVacVh+UmZucUFtbnsvP3lwRSMkYm4lTENbJmArQ2g5cEZvdEglaC8hWmxnTiohcG8hY1N5KS5hQk5fSDV3fklDIl1EZjdpZHAkTU5HWj1oIX1aXik6I01+amR5TUsrKV19Qk4/dCNaYCNxRlg8XUNlIzNOVSkkU2taIkYjekpvWTApZ3V8aXk+ZkM6WzlzNWRsSmZRMiRabXh4'@;
put 'ej1sYFMiLHttTDAldy8+QC5SY1tiK1pgI1hXMHY3VytjeVAkP0dPWz56V2xFTWFNeTdXYlgyV1cvPFt7Qj1uY0VVdEhVeXl4ekRqXXp+KHl5LjQlPXZ4YDhiSXhCYyhpMD81eDJ1RTojNzhXYW09X3lzdXhOMTp2UkVgfFA6dXh6RGo4MXk5dkYhQlhPOW9XWHQ0OWIpRjdGRkBHYXsvVWJjdl48'@;
put 'Rm1ydDpGbGhoRkw2e0haVFhxMlkrWkw5dnlkXnQqejgzTHJBPk80I2VlXk5gdHh6VWdTVEdYNlI5bF50ZVUuRyE/VzB2T3UlY2JkSkIqWXFHQjgudDwoP211NjRATW5DenkwPW93aFQxSlU3dzVPQ21ZI311T3UlbSVlP059MEhrY3dRcEJpVzZATHZZSzdVQ2QibyQ1NilaezRSQzU7YFlJMTpg'@;
put 'UTZAd3dIM2JQTjA/NXlMfklLOFYhQTtGKnA0bGNRV3s2b0MvNFFqbVpiWXpFaT93MmBRakhvbX00bkxOYDBZIm97KWUjJFFddT1UOV9Icm9tfDs8LDVNaGw5NXxAMUxTUXpOKCNieHw3SSltaFkwWDNRd0B6U0dwTHttaHRjL1RhSj5CRyM8bFh2K05sdihCTkJnRUg9KkRLTXoweUlKNF1WIXNu'@;
put 'L29tQihuZmx+NTkiK2FCWitaRUNnMnk5NHlkXj1KcGhQbz84SEo7KFBEVXRrTyZaKld8UlNlXnwkREtaPHlbfUB1VU48dCJYMFkib1BqUHYrRDJXI2RMISt8bDYqYzRYKUZpdFV7I1o2QTdDIzQ7aVFPaU5Rb3c+eiwlVHtlUWRtSEBoNWQ5SlRYaEVOZytCLGR3T3RVZUdDVF9uR0gjejNiXjd6'@;
put 'IilnKjR8YzEvK2VlWlhveFs2WFc2eFQ7PUcrL0ZxSSF5OjA2KUhEYFFwKUBRcCkzaGdPJlpsV0VTVDskQUdSUFZhQilJQFFlN0kjZE90ZzJ5c0UvUzg4VWs3eUFqJmFLQ3ZoTDNXTlJ0Yk8mWlZXa1NUO3xMa045KFs5Rk4wV2xReHhTSD1KZWRwenFzaWtrOCE1Rm0uPHk2bUhzXUcwLCg6W2RK'@;
put 'TnBZSUM8UXopUyUiZDBQdzd5YyFdMT4+IVAvY3YpQ2JrLC9mRTN2dl4sZEU7QU9wMjZ2YXo9ek5Yamh2PyYudy5GLCE1NH11R3pARHBCemNwektzP3ZfNyhYISooIzVYZXUpU2RHeE46QUU2flt2W3hERSI7PnNQdkxbOjRfMjw2RmxPIV8wQ2VaZTNYYlBCSDdTP14wYlA4eUNkIm8pbzcpZEsq'@;
put 'Tnp0fmwmSy9qZ2xFZntYR2l8YHVPdFU6Y2U/T0YoOUR5UipkNGFdXnZPV0RaezJ1T3RVY0dlP09GKjNaVWtIZmBAMn55bEhQIi4hP21PTyFfJTs7OyRZLkRyK0s8dE1zTHJicEpta3A9OV8lOzhNVTI5V10wdUNjNzBMMC50KnNFN1NJaHIyZiZTJnBKJjw4I2h4T3VbMmFNdSVXUk12OCVGVCE3'@;
put 'dTJQR2tLMzd+UjpHSV1hTE1hNWJPTyFfbTwoUiIoWU5sQXUwN2Y3Xj4yMFo1YnNfYj87ITtDXz4jR0R1fkZ4NVR4ZHosbldlWTBYM2NjZT87IWMsKTFleHBfUFd7ODp1MlAvQGt6XUckR2VxVG1TdXF6aFh0dHk5MV5yemxyKXtMIWJSb3UuRzhBWFhfOF5gI3ZLZDBZIm9WU2MjdVowRipob0dQ'@;
put 'eTpkNlNaaU1GR2tXaCVadUw8KStlbENwaGxLaUxGRkhEQjI9ZlFjQUpLLFhlWTApZ2NjKU5yaX1lYUYvKzNPSCI3TFRUOGV8KH5RYk10VUtpdzhXeUF3dzZeWCsvY2syNlJRXkhPbCFTSkJ9KSRFe0heQ3t1RSk8OjV0fU1aQHdKdml8VXxueGNzdWFjd2FFTEhQbjRQdnVFOiNFclJaYTJrQCxo'@;
put 'RUhGImYyRTxUKzxPL1tpUnFCRS5sU2Z6XVlqdm8yfDl7VXpsUVlTcTBFRCpRV184WUUzQyosJktHTnx7fCk7dl5kXSpxTmBpZ0F3Y3FEe25gZERzdWIzTkRNTEhffXJgNlNoL3FVPmgsVGVKP19yaSZpY3E6XUdaczZwSDdOdlVGTmJZc299ZGpiNlsvYStZTjdedSR5bzBOL0Y2fltQWll2WmFH'@;
put 'bX1TJWNmWjR1fFA6NndTN0YyUWcpSWF7L2Z5c0V6MH5gSXdZezZ5eVYscF46QXVBS257Wkl7L2FGM0kzbH1yUCFLbDFobzdRYiMoal5ecTxZZHkvZCk7KHRbX2tOKTVGVG5kaTZ3LmRPOHlEbzIwenRrSGFBejp2WCNbREt1QGRscmo9QXR0aTAqQiR5PDxkcTRZd3VvI3ZPdSUxTGNlJE1sTi4+'@;
put 'TXk4Y2A4bDRMekkiN2M1Um9kSDYxbjZsXWFeOkZCPnIuSWRlZnZvI2JjbGhIKkpoSltLVSIpSWlxU01hTXlddjlffkRqeWlBQ0MyUnNPfVMjU0Yyc2RZdVUlKTk0RCpfUkoydUtpP2ZaL0hPQU9XQDl4d0tMXW1oR3VLdHdjLzIhKFprI1tPNSVjdjBJaSF5MU46N14sIjB8VUE6cm80Q0pFaWkl'@;
put 'On4qPDBgdHt8ZkpuPHJpaHZuUUBfXnZMQT48NyhyU0tEe2tFd3l1KDRqWT9TUnhxbEgpez4zLEc8VkZVKiFlfDVoTFhxPGZtJmxCalRTeHVFRzt+YFN5PVthOjZqJnp6VyYvd1F2P3VOLkl8cV5tW0JhaXtSU200OiEpe21BLkptTFopeCozI0hUcDlEeDxTS1BvNDVtbF8pUG86dUx0XlhJQXg8'@;
put 'USQvRlpxVVkrWlVdVlIiYyhHYC9gS2R4O2YlcDE6NFkzQjt2ZGZzMz8jRGFsZyhYXzc4UzVBeFE+YUNLPEx4R0dndCJYKSh1cUBPdTVGdj83Y3B6U1U7LCtlInZrO0JaSXRXeFNnZjVQWys2REgxRVhPJlpfSi5razgpNSl+YGVrdkcqMj5DcFBUZC5Cb0RMaXVtNEBNJG5yM3k5di9CInNKX0Zg'@;
put 'ayNdSVJ0bHZNI01FRU9OQmQib0xYWXYsd0F9QiIscVNOK2gyKDwpOzp6dlN2eT97UVowV0ssRmU/Uk04eUIiN0B8Un5COiRga0E4S0YmUEBEViFIYXsvUHkyRXlIRTN+fktQJDE8UGspcVpfZGBvLGpFZih2NWNwemJwaWtrOFlAJX5gZXd2VUE1MSI+LFU5eCt9P3ZWQTlmK1pSO2YyeTlCej19'@;
put 'KWg0MzFuckN0IWNDcWU2WG1rZlpMUE1hajlIKmVxRnd9QEIiRV06RjhGSHpebjkjdlJEUTwjQjVATV1bMS8rZUJ3cX5uSToucEVhL1tNVGE8VGZeaEEzW0Nhey81LnhFeUgiYH5+S1BTPC5iNiEkUEhYPFRDZXdRYnZaTyZaclVFU1Q7fHxCIlJ1K1kxQzwpQnJmdiFmYzx4V1VkK1osLzYxeTlG'@;
put 'ekEiWWxBMFlYQ3VZVXdDKkAuST9XWjJ3dXh6JjJiWUloSk16fEF0d25MZktVK3VRTn4wci55NiQ4d2NwejJvaWtrOFpAJX5AOTJ4N1crVWhGZS90LHBvPlk6WmJYK1ppLmYyeTlGej19P1FTRzlMIl02Ok1mZjJeaCEwPmM7SVkwKj1NdzlfLkdfLEIiTD1GTGhMNTomYyZMaVIrQmp6alczSnNp'@;
put 'JEdkeWl3UXtJKmR4ZU9NZi5kQHwpaCYjNExiUmh3PCw3OnBbQiJhLFV2SipMJnYhcjBDM0Y7JFlpXX1EXkF9KFVDdFlSTUQ9S1clTDokTGJxSSZLLnQ+TF80QnptJmgjZU1HbH1SVXc/Ojt0IWRHYURAfiohRS4kOkI9eDZGImxjNXYvM2ckcjhpcnUmVylyPkFHXlI3W2BDa2VmaFZWSkszNG9q'@;
put 'aSlVSUddbHU0MjR5ZXhMZTJEISRUP1gmd3kmM1l5VWFZL05uVDhJVkNAT0U2PmUuLnAxTmlMN1NRdFUqaDw0cWNWeWdtKkR7azIpeFAiPn16eDcoTTllNUQlX2Bre1I8QkQyazB6NyhNXUB1LyVUK08vQiV0blh1XXxlX0x9MSx7RnZBYWdCR1NJT01FSUhVe1c+MXNnUVNaWVFUZyhXJiRjdz1Y'@;
put 'czJ3W3ExTjVMZn4/ckkjdz92PVhDaDhYVyJ0dTpIWE9yKjYiWTRxY3I9OHJOPzJ1cTRwekF5Y01tNV5GUGtDYSVHelhlT3U3bFhZUH43Pm9dakFNa25JWWRCaipQLEBaO0NndkhbeGA0Lkg6NlkiQkpNPkpFdzlYXlJLemJWIXhtZSVIR3VaQE5KaEpiYD1uP3Y8RV5LczBtZl8ibWZgOiImOEd1'@;
put 'b2J6MXQ2PWRsblpSUWhKczpfWWh0Q2VHa19FRmczKEpmXTpjY2BWdWNvdWxaOSJ4WVY7by8jOmJsInpuWEp0X2tAUloiZSZdNiY6biVwbzZTUno4WlFCZW9VKDQhaWQqNCtxe3Z6K3trfS53TGdVdEZBdj5AWT9IN0hIWixZIUwjd09IZSo0UlMrXz14WkdkXkVXMCh3Ykg7TGBqVl1QLCE5W0BA'@;
put 'QEZdaSZ7PmZ5JkBwJXQlTilJZ1JySXdpVE5Bdjk/OTQ1RkBJVEtySHdmX0VfTSVkc2ldclhEcnZsbUt6R0w+YUpLekc+RUl4YXkqeW91VGRNYiIoZCQ7T0Q2P2VXYUpOKHR3ciVgbW53MGEmUmhXS2ssTT8saGNZcmkrcm0yZFg4SyhtR208Q3soejY8dyw0VGF0aG53UlIkXjhrejp4QihZNmlW'@;
put 'YT9iLnhbRjU6WFg7aClUbWE/Wjs3STAvYi9EeEI+L2J2LjZORkBpISNMbS54WkZGKmJYKDRlTXtNblJYWDcyX307UnhNdlM4Y0BCZ3xCWm43dmE1Pjt0R15WTil+Xkg5I29Fem1eUjNjYSpJTHk5WGZAWWBKe0p6bThLa0pscFopZzQ+WTUqeEl5Y1FbRDJfSCN1RTpAV3cjSSMpTWl5YSRQLnN1'@;
put 'fTQlWjRHcSJvNFNKRWA3I1RPfUsscGhUO202YzlPKWo2ZHMhdU5fcTdOPkZlRV88WzlZTHhCVG02by5XPEZ1TFJfaVJgKC5rJWR6MngxR1o5e1ciKWsvUnl2bjtNQjNqYzEsV0dHMEk3eCVgKWsuQTFhVG1rW09gQWcpR28iW0xFIXlUfjRhLkZTJmdbUXl1NChCdGpYSGU6YUZnNUN6WGx0X1o6'@;
put 'O3VaZyp7USQ3I1h+SU81dHRNbEhBImVyR3tLaGN1O05MXnVJKXIjaTNaKUR5NDhJNzp6Miwud34oVFgzOUVGfjRAdF9TR1I6dmw0dzgoajEweldmejQpbl1KKEhQQyk6RzhYS1lPWkFnWGNQcFJfYVdLdEg3L0YjPT4vLCxOT1BwU2hIRTNdQjxJMHwlfUlNdSJlPmxkMmh1ditaVlY4dFB9ND06'@;
put 'TXlfUzkxIylrWkpSbiVhM0NpZVNGeE5YNjJzQkYoInlRZ14lOE0hSytoMEN4LmVCQEx4RzRhLDohMldmTXROWE1pWEY6VVNOV2BtcXhJVEopMU5Yb2A6KGVQK3pCUFQ1KCRCQj9oYkswQCh1JmZ+WDV6VVkxPSVabjAwVU5oMSJTWXBJVUBLSWc2ZWBmcTBVeSYkQihGZUpTUT5Cd1VlMm10UHBC'@;
put 'ZDxRX1cxXzRMM2tTZExpTSRUen1XNjI8dntoRzJrRVZ0KVdHbjpDQlBuVDAuSVI+Yz4vKCpjRXt1P0d+ZERhNT5FX25ORlIvSEZJTjUwVz83eXFMS3lpZE5bQ1Y2MGtQVEtdb0x7dCsuR0gkU0FNb2Z9ME1iYnZ6Nyl5TGsuYzxGWUxMbVohdXQuaXZMe3Q0Uz15I1c3Vi5PSUlqdjREdEc6NzQ0'@;
put 'c0VyYkZKSzo3KEAkPj5bNTQ3YCliJUxIImBAL0Qzbikyc04vVTcvb11qSEo1UEVsdC53IXBYJCJhbFF3fjFiL0JgMW5YSjFFTSZQVCw1JHkiLCw1MVFeWDlCYWtDRm1fMjAuV15WZ2dAZz4vTjNRNXtDUytmN1JALnwkSyxEfHpMW05BPz9HITQ6XXE3PWNrTEJCRFBZP0l6aixVJWM9Q2BAVSE+'@;
put 'dHZ1TTUzMFIzcEYuV2NMZS5XUEcwMCNoIUM0b3xFNlZjMlsvLGN1R0EsTn1QNzRxLi4rX0FOLj8paGVhTGhFbl5AMDZuNUhzIj5APDRTVyRaYzEvLiojPFZoRnMiO3JrTEBHQURaNkZrNkswMik3L2B8NnRCJi9LIStmJkM0KG16LjRPY2RXW0RZanF1bWtBRz9Nbj81ZENhZDhlZT9bezB5OiQv'@;
put 'QlEmIUx9bG00TihEQ1kiOiR5RUUmV2c5TC8yMWtaSVolMVtQfTRXRGN3PnZLfURNMC5TRHJqdlNqISJJMCliQjk3UEB1YHdqbiIrNTdxWms+V3JaXUJbcysuUlg3SF16MlFkNCJwKUciNTR5TGs1Zi4vVmlRZiQ7NnlWWzs6Wl0uUHxYODptK2Jlb29OTDxBVntBZGNBeEJmPl52UEM0d1VZQ2Rb'@;
put 'N1YhU2hfUWpMYC8rQE1NdGBvQE19PUUhdll3Mlpfa2RgMkx1Vi5ofjpCOiFhOFhdWCIkIm1ON3xKd2NiK0FbVFgxTjBTZDQwbT5PempBO1QwRyhMMXZMTUk4N1htdzF9On4mPz1dbmlaPSJ+fEdIVVNKQk19Tl9TbyZhYU1OMSY0UE10aVpXeHM5P1RQYUM2TUJCSCMkWmo0OGsme0M9cVdATFhr'@;
put 'RSNOUD1aNHdhNDgjPW1oVj5PbFZRLGE0MksxdHplWVosLDo1RUJPRDdXdW5KSX5GMVBpfTcsb01MdHtDbF53WUJkWClydCwjVDAzd09QaDFaJXsoWk4lSms3TkAufHZJakhMTVYxXXZYZj5QdldGNFAuXm9VND5GTixvTXJMT2xkbEI2RWNodD1ofmswKFdjSURKYlJkKXYxb3dAdytkWDRjOSky'@;
put 'azciUjc0TXhDOmkqTEQ6VHRST0JHbj9nVDxySFs9T2hiTTpJNjFbQjFGM2NNPHI7anI1Z3Qya2tnR0ReLDcqRTFeVm5+LmcmWDp5eWRyQzJXRm1USGRgQDtKTXZuUmRDQ2VDQVkjTjo3dTpEb1tSYUZEZm5iXig8d3Z1OXxkKjRgeERYZFh1LmwpYHRWXjxFWjVYYy9zUGRYZzNIP3hNWFgqZUM3'@;
put 'MjU+Y0xGNzpOWEZ5L0I2Kih7K0J2b3hCKyY3I15obmJvTFdvUnN0WDNXMjM8RnpkK2MqSz1mYXVxXnFMalBreTw+bDBTMF4sIXc6JVlXQT49KFUzTDUxYjYxJHZCZlBlWl08UDc8MEczVWxHUipAVFlASH5dXTQ0K2FlR2ZbQ2Fuc3hXZjkweWVLTnVGYWFYSEtHaUtFUnQuZWFaSTw3dmovLE5Y'@;
put 'LEVING57RXcuTn1mMjFJUUopTzZAJUJkUCNYbGdNTHpSTUNIPXtCTm40SU88Q11jOTR5YnFYXWtNNTVsdlQlP3V6NDllL0MkSSJXfUZWMG5KdyljIlcpOGV6a1hQfThXQ0pkNUVNSEZGdj82ZTBbI1RoY2A5LmJEbGF5fGtWSjdnVUxmP157aU1SeH5UfWM+aWArUTsxIW9SWjRbQzZYeEU/aClr'@;
put 'S10rRG5UY2lyQyFrI2RpaU5jfHc2eUBCbTZ4fHJGSHRWN2Q/aHF2UDk4SFAzTDZGPUxiZSw3dm5BVClNaG0rRCFlVlpnM1A/YV1kIkREMlIlLGBBdnUzWiI1XUk5eC5iOVhCdFIkQEIrS3hbREhDZ05jeyooYUwrMyMybDNMT3RpNykzTWMxKUx0dGZQZlE7d3dCek8/QnhPY1FbaSMxX2FIa0o8'@;
put 'VS4kdjIhMVUkcC5bLGcubzlUL0RBdUcyVyJdSX1Lb0o5e1JHcTJ0RkI+UGdCbm4uN3pJWEJRNiE1UTtUWHZQL0dDV0FlYVVGdlF0N3l1SEdLUz86SG82OGQwXmxYcUZXb3t0Pk1qO1tacTQlOz5DZXxYWkw4bU9DSyVZSll9T0BoXUVBUiZOQ1BeUD0xJFR4YEE4fUtoWjtreyspRCVMdGVAaSFF'@;
put 'YmRaRntEQixjcH1vS117Q3BGKVcwRCRPX0hPaWY4ZFMjRlZWPGlKWGtEUiwuQlN7ZEtlQ1FPYWRLQ3IwRnR1LywxIiZOWGU/PUwvKiFNZTJvYX5RJE11MjtnaWIveXJqP0plSjpvckRgeWIsbTkkREMhPU4sTld7Oml9QWtLOEAlO24sU0N1NEtPMSVmRyFHZSVaLm05MnhLUlhrN3JqSCQ1U0ZK'@;
put 'WGhzPmw3TW1uMCl+ckZkbFIrNCokXWVdKkhNNDtWWFpjZXRhL0BRR0NRJUskVGQ1eDZGKU5AZmtrQ2l4c1RtWnRMaCxEISFqMVl2JkBuc1RtSmp7WHZ2O3k3U2BXKDpPIjRsNFpdOnUqYXFabGQ5I14/Qzs5OkUrQXlDWipCNSVQUEc7eit8ViRMK3t3Q3M8Vz1nVWFuZTVoNzIhaWNFQkV6S184'@;
put 'QV5XR2xvVihaVEdsZ3ZqaWlJSVh7T0Zud0FRJVpUZ2ZsQyM1OmE0MnFpVGo4WThATD11QDxvVy8xaW5eeCgwb210OEBMPXpqIzNgI0FaOEUza21GVElJb3ptbWBfWFB6W3xhbEVpYkQlbGUsViQidDFMZitwKis6MkFfQyljQ2ZRO213W05jd05jdzUiRVhObHNqPDFsWDxXdVlEZ0dUdmpWS0NC'@;
put 'QlBQTltMPXlDallrbTlKaX1fayFNfUUvOWRiOVt8NSQqaUNBdnlLWHR1Vzl5cG1BNT00UjFiYWUyfVFnKyM0NGg5NFZLekt8QkdHVFRwYl52Ykx2aDhMPls0dlQzJWQvTW5UeHUiVFBlc2ldQSFPRXdPNzd1RF86XW4rSFBvN3pjP1YyPGcyZ0xuUmd0OmBIUGtIZjI4LzMhLmNxRDo+anopaTdl'@;
put 'X3ZDQiNtMUBhbHtXITQvWl5lXkNjRE8rd1NzNFpIKihPTm11S1BDTnFTXnRHMG81cEgpWUthKCw4ZVBPY2NVNXNTejo8VGFWPkg/dltJUXZZMDs6YnZvQjlZc0FkU3dxbSEwY0pSQjNdQFk0dihaO0JsQ1o2fGdpcExydWtFLkxSdjJXQUFBQUFBfmxnQUVNUWF1NVs1eEQmSWlvbjlXKD53a3Mv'@;
put 'fWM7OE55NDkqND1eNlIhPHUhU2hGdFJeQGhxeihZfiNONzx8TmxCRiF6Im1ZN242MWtwWHdIeEBWO2RPdXcyZSk4TDFNRlI9c3kjaGEoXzU0I1dwZFFKZUI7K1lmMn1KOjBKbit4ZlRDZV9gTW1bJTJXSkU0RFFSSnxFdn0uLGo5WGRlPiloUkJRQGR5ZFgmT11LNX4/bXNKUVBzP1ZGPzhMX095'@;
put 'a2koYWZOSz5sPGl1RiwvNio2YiNEZyVCenNOKU9eR2lmOXc/X2tFb2UpXmghMUUlU3p8LmY0XV49Rj4mJX5WXTVzVz4rYCI/UiE4IXEyRTA9dHQ1YmQ3bStFeC5AP2k9SyxtWUQvL1NTRkRWLktDUU15dWpac3N+M28vL0s6R0I4c0leUjxSR1lzVmxqOlU+VllzJmF6OSs6JGMrbV11cHJZRzRM'@;
put 'R25zbHtQdXd2VT1lR2pudEpYQG9yRmVeeD58d2A6ZShGUyQrZHdTWXI6YU1wUzRZPkJFVUp2fDVidWpXcGJVNWgzKFNyTk9NMS9UVkpDM0khfmV3P19wKW1AfCptT3pUdGwxPnFVcHNGdWNpVUJVOTRCPDNOQG9hSittKDFvJixRV302cEN3LzZbI2swblhhbChyJEpAZFo7b18jb1EsdX50e2Jl'@;
put 'SUcpZShaL0AiW0cyQllUO3YlaDImbV5GQUhOZkVkdFZtZ0h6U1J9VlZ0IjxsNSttMk81fHcvYn0ofnBFQFF+LHRCdXYvQF5xLH1EYU9mXS9bcEZUJW9RN2xIS0tUUVl6aDB+S1Z0aVUmSXtFaWJVYmE/aldveFI2ZjwyeCJodXlJYEkjO0lUZlZ6fmhEdCpvdFVdX0EsTmR+djhyOy9YZy56Tj1w'@;
put 'LkFgRE11M3JufS5QK0RpeTI0W19vW31vRnlbT0UsX3NuS1NpdG5zOjZQMERnZT5gc1doXzc6NWRhV0NVK0ZgKUwrKD9CTCVSKztiZHMzXTlzZSU2T2dCe3IjQkU3Xz9vR3VpPW51VWhEXjZpI1NxJltmeW59b09CdUVhYTs5PGtJRnJ5R2hkVltGS21VVGxZNDZOczxETXVqd1NaXSNqbzc0cTIk'@;
put 'UUBMU2JwVDhJRlh5aTx4KSF1UC5QZEB3X0pte30yKV9gYD9vWEVGNypDc24rVXFjOmxoYF5CI354dGVLITkoIVMscyhTWF9xejQmflRudyQpQV5eal5gfE1iZ04zRXpOI15neEpSQDdvW3EqOypyMEVrZEt4ZGYhfSlBNCUyLz9xeU5Ifl5PW15DZXE9ZHcjMzhkWTYhTUM6bDkmVjBnYn5qMDpb'@;
put 'ckhtUXdieloyeW5TejV0dV5bfTt5ME56SkV5eixTbEQuTng6ajY4Nl9eWHNCOUJ3a2I8VDtkaU41akQkZ3NGdCQ4VDAvYnluZU1uSDh5OSlkfkkrT21OZ1NCfFNbTV8+Vjladz1KNSh9ISR5OkxTR0xyW1p9PSs7Mz08QyNSUmlkUl5TfiMkJnh2ZCFINExJfUw/SzI/OEJVc28zUEVWd3wpcD53'@;
put 'I2IlKkphQFRCJHQ6V3lvKS46Mnl9cjJQbDdycjZPU2lwfEpPU2JdIVJtVVZGN0Q0fFNHelJtfTc0OWpzQE0yRXEmW01TTCV8UCZxMGpHRi5sQDZRSWo3NF0+ektxSD5pJihZdClRJXQra3tJOkcsRCR+Zz1SKi5pYCYmVGdJJHQ2YUpqKW8yRUR5aV0lNEBwbSl7eT1+ZWpHYFRnQk9iTjdZWEdo'@;
put 'I0V3U0BaS25pdFlMOVh1XTRZbUxLXit9e0QvKn5oKUoqbXFKW0dzcmtkP214QUlfMS5iRlM6PSV6dlgqfnReOkA4U2NXTnFSR3c5d3RIZjFLQk85XjBuZTtBLFYlflohO0g3eWF+WiFtLn02TUNXYWVZMGA7bWAySGw1aWVhQmNESHIhdXovdHUzRllFeGtlejpycyZPayhsZmxyNyh2UXFUbytC'@;
put 'WSlnJlJdY01MKGc4aklEVnsoOyE8SDZTPDxuJnprU0okMCEpamUvJVImaU59O1dEdk9rVVtKL3YlSWw1LC9iUCoualBtSXJlOk5nd1tfPWBYWl9gPjZeQnVFYVt7fF5ndUVuTiRYXihEPXkmaCM8M0dWK110RkcrelRpLiNZbXJBV3MpKHg+UTNSRl1Jal8yQSR7dHFYXU54ZS8kOnNfa1B5NixL'@;
put 'e3I3PzIxO3hebHR4aHRCP1tbIXpqX203RmBnKkMhNUZwcno/O148QV9YMTg2TCg6LnBHQlVCYENmVzlJW047eTsxIT10YXIveHk/KTFpV1lPNzAiajtEIX1bVyM+VVM+O3xMb3lJPmh+PzIlNzMlN1BCVFtEVGI9YW9WcmxQbUNtJkB8JGdZXmFsK3kyJjk7MDBUWDslZ0ZaRChKbXQsSn42cnFn'@;
put 'XmlteD8wRTl6R14jRE8xSnExcSUxZjA3KWRuY15xeUt9U010UiJ7QjwwI2k2TWY9eCwjODU0YChDNVd0WWx5L005PnIyRDEyKV5VZm9KYi9GSjA+bkA7Z1kjVm9rZDNfbF9xQDBUdHksdkE/KyQoQy4lJHJxUHAlOkJMMWcodD1IKHJbOklqdzk3IjU+ZSNoO1lRd2ZLVU8se2EpdkAueH52UDtf'@;
put 'OFFyYFE+U1lwUiIzRk1YLjhmcEpdfT5ASFVDdFoyQUMmTF5WRHw6TGpyYlh4Qiw/W3p0OXJgRX5eTEdPQkg/Rlh+Wy4kelNTMHtTM3pHa1YieSh4UzRtJkAuVzouOE8qZzhNMCMwVTIwMEt8dCZZTlV8bEFhQ2BkIU0sPXNfNW1DfnE/aFtaYFBse3F0JUAmZFJXLjVjZ2tWKGEpNTlsPjdqUH1P'@;
put 'TkksZmw3b0didEhOUz8qLHJkTGxCUmtPSFNTdXI1RWwoLGxNK2g4IXpuMSQ0bkp8OlohKWMkS3MzYWJLdzpSRmo0cUkySXUsImVvZFNMOD5KczhvfX51SkB6WWxnKyptOFojayR0dWRuYkF9R2BhLnRwcys4aWIjNnQoSUEhJVs4bkReelIvPClPSkosdld8TSU/TW40ejhneU1kaTExRk9uIThp'@;
put 'NnloRkZgKCwqTWltTyQjflBlUTgoaFBlQHUxNjU0MSpjbW1LMWhaQ0U5VGM3ZnMqOzZYNmFyYVVicXZgb1s/WihkS1gpYFIjSHFlKkwuLHwlZkgzXUUsdG19WVolYEAofmJAMS9xI3t5aWR7RUkudTpsMV07S1YkdWdRSFMuam13RTFrSEBVfFhxI2FQcCxLVktDbys2OUdBZy5BXUxIK3psbSY3'@;
put 'ITElKntSfkA1fCFhNFhtZzddLDtIW2FrNGBANShGVl5CZSshYThARUo1MEZeL1hzY05NdjQvYkdYTjllMkRkMV02I1tWMWo4OjIzd3BPNS8hKXxMem1kWj4zc1FOLy8jSDdqV196IVJmUkhCR21mWlE0NlBMZmhidXpvO2B8MU93VWV6Ync9Rn4pcGQoJmElfixJfCYjJXNMMUN6a3ZBOj8xSUp4'@;
put 'RG4hLlZKNCNWXVtbMDttS1VDS1heP0VsRE58Py52RzVuXTRwLywrbDh6M2dgQmh2YFV5SHRIaGV2aFZqYCNPTGQ+MSxAIi55czYkLjUlNStUZDY1bzcpcit8Mjw8LF5IKjtVTy5BNzNdR0NFWUovQDpRQHdPcFF5Zl5lIltkUFpOb19kekB9MGZuIjpPb3dtImwvRn1iek44PztyVmhZYmI1dj5o'@;
put 'ZStEbT9uSzImVEVxfGpuK2xTMn4uRFlWfmB6L15fJjpRSWdmYzQiNWM+ZnEzOWVSWy4mbXpxN1Qhe15aYktMQjgwQUl4eVRyXToobzdeZTZKUlpON15jd0spL14ub2tfWyljTnA/K0xVeXFMfCModHVUTmk7NWwpRz9sWGtsdSUkfFJtdy8sWGpAJTBqc1ZmNVMxW1hzLEY/P0tFUW5sQCt0al1T'@;
put 'W0Avc2ZVO1ZfIXE2LEs9STl5fnhneH1pPX1AcDd8PnxTWlpPUlhyT2c3K25PXn56Y2FFQ2d0OEdXd0t2cF8+RXFwJDtbKXloTG9gXjNkTlZvMlY/dkBrbyNyZ15NND5WMGVHWTVCTExHInpqWTVKc1t9WUw4fGs8cDtqNGZVfGp0Sjw3PCgpNVo1Qn1pdXBhKH01QC4zP2IwZ0JkQHtjMn52cys8'@;
put 'LFU3JntFbVFhVmNDcVJhMCtGJVc3MjxNM2BKZFZ+VDclMUp2TnZyKmNXWHlMWkdOQGolblIwWjVONH4zdnxveGsqJSNaK0FHVHFkJiJuTSxLTykpNkhCZ3FCUUModyhtbTd2N1FvWnNxSVFxZ0NFITxkMn1kWHwxSiw3Z1NvVywrPGlmRHlPVU9YK3IrNFpKbGVsNCFCOzA2Ql1SM21ZMnBvRm9b'@;
put 'alYhTVBoeHVEdHhxUkh8djtJWDxKWU8uSzZuV1hHRyRNJnNUYn1iN0JUNE1NUHQlYXBzLkZUfkVuME1KXTA2X3dWP1ovWTtzK0ZYQUF+fWZEYn18c0k1W3tKYSNXSDEjVDE0Rzg1WTlLJnZSVGcweVpTcUBQQXklaDxRdUh7MiFRSkJtM215aEcjU1BDfno7NjgrSnQ2Sk9qck5AUDZzKytGSzpq'@;
put 'NCpoZlFCPlBWPlJRcE1MdnpoWU5sc3o9QER9RDl4OkhtUmA+dCw2Yzt6UHVVITVhaGlxdEFhY2BqMnNuTkI1OWhqa1owejFUJWpDWHNpbWtpRGhAKUMudipSSiJXOkozXiVYUSEkIV11bUhUbDNNbSpGPmZOZSx7NnVSUVchME9CMkZTb3dxNUNnR0VQcE5iX0ZBamUkQlI+I0twYm0sTzxLMSwi'@;
put 'SSU5XmJ7M0grVGB6YzFAW3pPJCF5a1VCTTFhLFNOcEY/OmQwcWZpaWhxUFsxaXwkazpXTE41MzgzMTQmIXVZMCkrYDRwUEp+JUBiaS5heV5dWi5bUFN8ZC5bciJZImZ6UHFdcnhrQXAocV9OY1RhbUUxPFJBYTd6aWh2IStuKTs5IW5iTnt+cU81fV4seF9ZXihLTE84bDx4LDxYQ0J3LCV5MUYv'@;
put 'bEB4NzQ9UUUkY01jTk06S0YvOU5kdSxJL3ouNV1peSZpQjNyekVWeSVNfGdQczh+PGxYNzhycS43QWRUOCRddVQ2OFsyMGxCaUp9NGpUKSZ4L3lUeWNjcDxaeC9rTCFRNHhYRHolez5+aVc9SzV5cWhmK0M4YSsmeDNCKWpGNyFnWmVrM09IU3BaYCRWeiosPjV8MlZmSUZ9WTBCeldoTz9VLk1Y'@;
put 'PT5yWmZpTHd7ey8vVz9vJS5FK3xJe3skaztTUl96ZzxqaFA8S0toZDI4dUw0NDJ9bFIlXmlMX1AqJD8hNTExN1tXamVfRnVqcjBsVH0kXz9ZJiFeczh7TnxETk94Uyo3VDROI3FddTJObTI5KzZWS0VoLDJYUihkPC8wYTJzdHhUSHRwKXgmPz4hbj0pSWA7fE50OSlETGt0Mk1kLmxWKnUjNUIp'@;
put 'NmA9bX1yaU0hRXtzcnE2KVRzYERIUHFLbGZPeWo4WXNfYTNJMXt4SWxsTHZ5Smw8Lm05MHIyRi82ISJkaW11NGRaKDVCISVRJjA9NU9AWVUiYl9kOnRVUCJuWWRzUl5Ya1U3SV9uJD9kQjxZNGo7dkVtfE8wbiJZPzk2MFpDck9kYjxpQ1VkV2w6Vl5+WDs6bC99elF0ZU9VNywkQ0RndHJ2IlZI'@;
put 'KXs7KXpWVmNRYVosa1tCaWV5YWUhZGI4anVjQ1RPTDZ1WFtneys3TEdpcF4jSk4lSiRoblMxclckSV0lW3EoMzZrPkIvd0Q2RzA2cEMuKXk9WT4+ZTxDKlY4WmFZN3k+NVhIe3ZXcXNGbHN2UnJ2UTN9KnFPcl04KTJQSiFXO0ttMXtDKitiRXgvNlc9QWw1NmsyPGZKentecGMqK25kYVMqTWBf'@;
put 'YX5EaSJiUFhDYmx9eUx9Uls2JDhBITUpckgiaEx7a3claCl4MmxgJis8dHxxVDxWZmIoYFtUKnsrY0g+Lyg/ZjBWa0dkTmt9OTlnTEtSVj4rI2M5NjB+YzZoVW4+TjlkWHE5e0ZPbHI8KX0iLj5VSWouQ2Z1VGBiIVlQMzg6S1o0TzVWR2YzTVs+dF9oU0ApOEhELjp5KFcjdndPbz5ScCZ+XzV9'@;
put 'U2J9IU1GRCFhIyNgY0lLME5kPV9fcnUlNzgzKnU0fG1bVTZyR2EpSUxbM0I/VXdpKFZ2XzxKPDNEZyVRcmVPWi5MR0ZVJWRuJSosSVFWeEswPV9ddDFyIkVSe0tFKitdMGV8JF9bR249c01Gai87YzRGck5dYSFQQkhYbTN1XkB5RE5HZi52QTBiaWFeQz9tVXFsQD5SMW9EUzZxJXBHM1NHPipS'@;
put 'YXlJOXtleih6e0hAbUV9MFEkemUzeWc9M11mPjQ9PTxDc0dhUGArI1tYYjF2PF0/dl5LSCxmLCN3QzxgOTl7d3BbMHRRNipafTc2QlNMLHMzaUs3YzksVi5ra3V4bDk0XXM0WXQ8bzIkUVE9PSJsNmszR0IjWGhNLiVPTkpod0difV8vVl05XjlTUHRbfHZ6TnxjZlNnQkQvNksuOkE9RTBScVcm'@;
put 'MD9VZ3RjSW4+SV4zfXtJfHNnInQva2Q9Vy52YDt4KDZBKypmUiYsQEBOUUc4N2swNGooNldjV2M2U2R0Qyp+dUp9ZyJQMXo5eD52OUNmYmpWKDQmUnNdIWVufldPcGBiNE1fZUx2T2VZdXMiOFpJfkc2TWN2S2w6WWRjS3xqKVlbX20yUlV1OGJHMkEvOTdKRF5UUXQ7SV0zXSM7TS9pfmlibml+'@;
put 'X3c6RF48OHxyI3hXKy5SYDZLcUt4PUR+LjteOlVTY2Rte1lBQ1gmY1BRYHgzNzI2fF4qKTIqWXpmRzt4Vm0zdGFnOXs0Mks4a0JuKCxvdTl6fTc9OEsrfj8yNDl7YHp0LD5uaSU0XSMjWyNUbGVmNW1JUVc6e1h0YlNmen5PWUIqKUwmUkE7VnleSilvcmFMQkhGTClDbTwxfl4zTDV6LFpObDxf'@;
put 'ezhad0ExfmBfPFl8ZzZbWUZGMlo2YnR5ZHNbbCgmVUd7UCVEcmtbfTshbmNCVT5oRXF7JkQhNWQ5bDFvZXR9L0lWTCM+dVZaKml4NU1+aFtKYFN3RSlxYyJ3ZnhkXVhJLkoqbHg/UXU+NzVZX1pJXVA/RSpDe1tWa1ZGS3d0UjN0MlRZYURKbzRaLm1uJGNDUCVbPkVEZmxNYmEyImpMNEVFPC5U'@;
put 'QVJ1KyV0KmxQNUVnPnIuVix5bXBOQVFnblNeNWVNfXglYEQ8WGJ0PmY8IV8zXzRDI2pdalNpJlllNjV9NzZRc2JWR1ZpOmFTWUZ+W2czWU97SFZebW90M1gmPipOOVdCcCpJJThUOT42ampYQEpJLmJEfUw0KlVPckVLNWBYQm9SclpLVVNqYihBMlddSz01eHMmPHdPVjA1M3I4NXhQbU5aQW5L'@;
put 'MCUzYyt1T0UyVDZZaT56Yj98KXE0JThkcEVVWTJKZSpnND0hI008JV9WdFs1ck9XO3MjPE1ZPDNLQEA6S0ZiXnI4Si5Zfnoha3F1MCtjWSFtKXgpS0suX2Z+IVIoJlhySSU8O2AzVTJwSW8iLHFeeHhyIXckVSM5bTs8QktRNGA/U3EzeWd1dFA0QmhrVlB0QEtgNVRsSXhrZ2M8XSg6TndCYDRP'@;
put 'QzpzJWVLYkQ+Jl1zVCh7WiZMTG92KEZITk4kUT5VPHMkbDx6YnV4SU8wd19PJiJMOHtuIixMaGFpSFp3X35pTT4vIWtnL31ERmozQ0c4KjBjfl9XfEs4MzNXdElJe0V6VHkzbG8qZys4Pzg3TS9IP2h4YmZRVkpsMFgmWWMjXkozc1VTJUwveXwhQnEmMWNsY1Z9Zz15aXJ3R1VkVzd6IU5CSTFS'@;
put 'T31scn02KkwhTD4iSVhMM0Z0ZDw+d2IvbDZ+WjgvRENNRGxAQit6RmZkOFdjUlpue3QrMkszYEt2fjYwOF9JT0JkYDB3eWh8allUL1MuJV1pX2dqPWQ4Nkg+YiY2PHVYLD1CZGI+PjhjeVYxUyRAfiViSzkjZEZbVVdrYjkzVnxiOUF5az9qOEgodHlLSDg1RHR9bSZeb1NQVmQ1aEt5T14iLzJ0'@;
put 'bCklb2k1ZGd2YltoQ3QhVytham5eUkJHSVJXaURldS5lM0h7ZFJlYS4vIVo6UDhqQGFZaCVBbnU3aHgpOkxOO1lYbSFaLFsoVXp0KCs1OlNZWUp3I3dCfXEpOyhVOGdeTnxseSprVTpiOzh+TEtCam5lak00QlpnZnM3JEdHTnEwXyw3bU9KKz1sMGZXajhhN3J5P2hudG4qWnhgJW5MUkImZE8w'@;
put 'Qjx8UStWYltLdjIkWk56dyhyNT5JO3VCIyQxbkNGYVRseEZyeVQqRVc5JHVXdD5WXiMkb1Aya2h3VjRIQEdAL1BzTXQ1NSw9Q3VKMDI/e0lQNEtnQyskTXhkSVFzQX1FM1AwYlVJKCR9fls5c3V6T2tSOH5UNzFEWXJjUHlBJk1SJEtEYD1JWF1pS1clVkE2NlV1R0MwNyhWT2g3VX5rPWY9dyU9'@;
put 'e1dnIy94TipHTXs6Kkx2ZUNzYEJBQFF0VkVPR2BEM2ZoSGtZTkp8RnUpWkxsSVAkWH0yaD43am92PipANTQ+ajAoRy5+ayZ0QUdJJFA0dyROIUlLRD5vZTtfJnNbKDtmL0luQkV4bVJnTSRPSWImcCZXUUlJNW4jK3lPR05GdEhfYV5aJD1hdXV0aGVnenhoKFFwKj56RTF6dWZnY2pgXmJQU2I8'@;
put 'QlMyW0wuVCk1bEN9WyYpYE9xYW5wJGNNPGU/bVp+cD9yNH10SWtqfWomU1J2TU46MURyVyZHNzRAb2p9ci9tZC9dZElCYnpBU0FveHpHWWduV2w5JiNGYFd1Ym92fE96KlZ9fjV9dWUzMzkjOVJTKkk3OWolLHlCfEhlUWY8bX00RFl9T15nP3I3S3g/VypwSUBKRUhrels8bFh9QmkxNzNlZkxi'@;
put 'OnBBNSxfKXZkST9BMXFiRW1tZXVbNDgiaXYvREwuZHgkPlQ2S2V8XUdUPCYzejZZYiUmITNzOEJrKUAkL0U3U3p1RzM2W0BMdy9dTDlgaiUvflQ5VVhpYV9HSzZZRzFLPmVIX0JVOndmRGd2YzEieUJwSG0qfk1IcCJNeGp1bWh+WTI0ZlJRbyEvZWVyOz5QbHVmOypeKVBAISMpVG9mfFtmXzE2'@;
put 'QXkkRm1AXUY4JUJ6cFV7NEIxYE17NCU5ISg4XUJOKU00Sk5NX21qakQlYTdgcVkwTHFQIWQqMENfZmpET2B4aH5nSSZpOCF4T297TTtWeHQqdGxhQ2xJUjg8R0w5IlkmVmltdlkqMyZPcVVTQn0zd1NxVE5NOGVZfG01MERUSVBfSiJ5JVE7Q0JyOEFodHM2WUY9eUxSKiF5MUIqPkVwJlJFYURR'@;
put 'fi5+eEtHR3RMRFsoKz8lSVopIUpjXlUyNXxrWDV0KX4uV1hFQCt8Q0hlQ3Q2QiJgM2tvUWZJXmFkUDRuT3M3VDNYZDg1ekw8WnlpbVE+Q1sjRnZGZ107cXFMejNIa1J0flMhVztvbkQ1L2cpUVY/KzlaIml0N05lI1pCU3duNmtoTlp1NWBkd3E1SCklZFNURmByVzVfZz5kVDgqLiV2QXR0MHpV'@;
put 'X3ZhaSQ1PCgzXzxrV0MuWWZdaD5UJW5FdUNmRCY8Q0pwQzFidXRLSCgyRm04O1F0UVllUDZjYmNVMyVyJEVRbF5dYEpNblBIalNKVjd7cWNkSUFgKmgoYD1dOV5KX3J+bkwwfW1pRVUrazpsdzxpKlVFT2N9RGsuWVlNRUMrSnUjYy5LJndrNGc1WWwuRyskKGApYjV2fGBgZkN5WmdnUzZoW3U5'@;
put 'bVR1MGtGLjxnU25lIzlgdG1bdUpKLyY2U18/YTohUj9wZUMkUSwsK3tONEFARXdnaVhQciRLV1dvRSF0Wj5+OG5JMnlWfE04c1hBIVZwUFg9VTdCT2llNFp0MWQ3OVZKbnYiJCs9UXc9WCFoeW5UdF1aRkQyYl44MUA1ZUw7b0F3ZTlbcHVlTmNEenNxNj1lYlROOnJufjVhS1l9ckNaWWZOaVZa'@;
put 'bzFkYz9eQmolPXpid1MyNSwjdj9GVT0pRTJ8KGd9N0pCQTBMOWlIU0RAbysoZ0tWNUVKS251Rl4kNTUze1M9JG5XKnd1LC4vZ3IsUSsyI3cudUZTfUYlYG17VTJUPX1KP3IwWl4oT1IkL0hTbz9ed1p4KFJgW0lDVy99SilwZXh1cE83PT5oezJ4THouPTNja1Q3VltdSF1wdHVmY0U8SzMmOkI1'@;
put 'NTF+aWIzXmREQj16ZU1wVC4jYFpAbnRxN3dyMjBLNX5zb3drcyE6PjZfIW9aKEYlO15UMmNZfT41ck8zQW9oOEd6SXBOcFk1VFVWaHdKWUVNU05+TEptYWQ0Tms6PGMrQ0RzNGI3VndhRSJeTyt6TkVTJmtSfjBhbyZNe3pDcXRkMUR9VjA3aG04Tmwycj0uPjR7JjVza0VRODA4d3tAPm4+XlV5'@;
put 'c0ZDOiZqYCtQOGt8S1pfIlVhVm1tbikweUIvdXclellxVjZFNDNIXnhsT0NOfUFXYWIrc3VkP1AiOCwoNDdfRXpKJlkqNjI6dE88LHNGKG9TR3doeCp3PFtpQCQxLmY7Q3JtUGpsQDwmVGhGfVd2djVfcWwiNl03WHtTODxYIUpxe0NZLDxUa1UzI2JhInZ6SC5EZXR8aWRDUjlqbDduV0liYS8w'@;
put 'RDFwNyNxdVtbSXFKTThgKWspJEdIPG5aR0h3VGM/TDxHPywxd21fSjpkYkU0cXJnYC59S1QucSVicEo7ZnY2SS9dYGA3JTxUPU1LWT8kaS87Oihxeyh4e1JFS1t4Z2NMWH4hRldLX0xKZHAxcn0+dCE6Z1ApdiVxemI0WHhNfmtITDRnVyRHKDxgMExQJVtHPm5WOFZAeiVOPE5YXWxuYU08Qzci'@;
put 'eEs8NjhVP1dEJHJHd29aSGdzfGdsRFBXaVJYIihAX1VAOzVAcnMqaFQlNUcwX1srPStJa0A/cEJKP0MuREtXenFmTkJLVTBQNEt1alM8WXBtOFhKYnR1Pyg3akI8YHFvWDw6WG0jckVbPjJjQixmbUphI1VJJkY5IyphNyp+eCp+TTFjO0s4IWFmLiR0InpdVkw1UEA/cGFDfFVaVHY+eWdPSFZR'@;
put 'fXRFemNsK0MlcSg2IzJkaSIuWlNgL0hmKWoyKXdWTGpDTSMifnViTGR0SEZNUi8oYWsrVEF9XVJ8YmM6cTB8V1JrdkkuazIjWmg2cHF9el9UZFNhJEl4P3EpJXp7aVosN35zLDNmKkp0O298I2RdIy5sUiJRTFlAXVV6d3lUK1gzfnFOPC57Ykdfc3U1O0tqc0NFazFRM210dEV0RnxpfHdsPjND'@;
put 'dCsqISh0NjVCYDYkIzZ9SUB6OHg6K35JO1dBSXteJWljOTduZF5pTGZ9fWNRfXcwMWppcjBzPmdoUmNZV3t9TixDJkdHcCg3Qjd2QHolLj1kLGRHeiMkWUV+RHwocn1WTnhhcz8lfUZMW2hDPz1PTUR1OGBiUFcqX1IsQXRaKHg2UX06OEY6LjNbR2Z7WmV5aihPWi5QLnlQfjQ/fiwuU05zIntz'@;
put 'VUttbDglQkF0flpXRm1NOFtDPzx5eHJlOzk/KnprKlVTcT1PcVp9S3BVaz1oYSplW0ZBVmpiW0hUTzhXPmkwSkw1bEgpSlY8Q35xYTUwdFExeD9HQSVuTUBGRWQrdXJTSiEpX1thYmM0Syh9LGlHRWx2cWAsJi95I1JAdG5SUzp5OUp8VXQlWFdbaVg5L19LRDkrfEdNfE9MYjRAWj5RYHdnYF0m'@;
put 'TmdFLmsieEpbaDxnen1vcUd4NTdjJWpFRGZQQ1s4Qlp0IkFLKHJVVSIrMENtJDQvV2lKP3NddyNSUW1OfU5QQE86TmFGZ1Ava0syO2ZkWj40IT1AZnJ7T1ZzMlhTX1pvTV9HP2tuSWpQRFUpJjFbTSZ9eFszYyh2bS9aQSRXYm5WbVBUdjFiazNfSntOMSxhd1F7bSosIV9vX1BkdWZ9bnFsQCUm'@;
put 'K0ldNWwlcTo2Vj08MV15fnhLJmdRNXE5YmN3PEFCVygvdUN1MFpCdDQ3UUQvbXtOcXRXQjdrayp1KilWSzB7czFkdW9pdFNpL0BwTld6N1NtcDg4XnAhTiM6OnV9UUIxajQjIzB9VGIiSzplXz5reCxYaHp2N3JJfnBqOUJYS1ldKzk0WyRdcTlUYWkhVDJRaHEkYnFkIlBAJm1DKn5yUHhbPStU'@;
put 'S3c8Z1h9bGM0QTdld3t5WGtUWWYlIyMicFRSezltPyxYSHh9UF5mZyomPHNoYEh+NHVicTtHby87XU4mI0NKNl9acUxUP2t+PlRUYylFME1oIy5kcCZPSjtLfSJIbE57L0F2YjImSFZ+TVliLkFgdmxVazl5dWN8JCx8PFA/JSJAejhsVGRDV2ticyh8T2UmMH1XbSssYWdLZXBGW3dudUQ9Ul57'@;
put 'WEBVY0pMWThbMHdnQENqKGhqV0d6IykkS2dxP1NGdz93eH0xMygqdGFsMDVGSyQsdV9bQ1g7bV1jP30xVHZ6Xi52VlJsWXFqeXB5NkdGdGhGRVU5U0pTbjFZKmhQRyQ4RHNLJj1oYSpTPy9YU2B4cFhkYmZIbls4NWpFcWJtRWtmPWd6IVhDW2l1KS9VPmxXfl14KH13byhaYyN+fDhBUFMvZnRD'@;
put 'd05Pa3xie31LWF4jNnNCTzorN3N9fnNrVCI+UnI+eU4jR05VIXFAeHhzUDhmcU5rJDh4fkc4IkQuV0teYUlNJWpGJnJVL2JQRFt2akswM0Z3dW5UcEM/L1Z7SGAwUS9DMzw4P2MzfWFkTSwxXyt6b2kuVHBpQGdwXVh5JmBsTkFGNWxCdShMciYrZ3JXfEpLMkN3e2wiL01gVWokPlJPd0UoZWlf'@;
put 'LF9UQUV3eisvTUclSSR9Jjk/RTRNJntZOlZrfVlhfFBJQCVFbXlZI1lPTzB7YzxRRVh3I0FrJDlvO2ghVXdWWmt4PiYlXjs5ITpYbDBfV3lPTnA3OXhBSCheLzVQbCNuSGFNXVViZy9PdlBKRCE4cnpQSlUlIVZNJj1oR3lac0UzakQzXT5TWXRDZyhJekxWQ3A0Y0FxOzhCVE11IWJqSUhIcnU8'@;
put 'OV40SnVBQD1vMWZ2bVZKcWNCVmQudF44VU0sS3I+NXVAZyRzdnMyL01pOl9oKiomLlZmK0JjZ3AmKX0rW20lcHFMenQ8ZUZaTSEzW2NieGlgcSwsIStiZVJWe2NmOFAiTFArWF8+QjBYUl19XUdVeVhhKn05OWlzWyw4YUxHSj4pYDpYSyZgUFRPRj97UTMyd3c9IUhKcXZtZS9wODVrWTwxMGBd'@;
put 'M3V+OV0vPSVYUiRFVU4uMlpuMjNxMWlzYXRLfFQpJFcsdyYiUWkxTGchbVpzdExRb01IJSkyVUMjIT4mMW43Lm59LEUvYyp4KmJNT3pzZ2Q2K108cW1FLEgjMG1EUi42VGdEPExXQnsrOTJLPVl3X21KLGN1Vl0sQkp+W25QUW9TO046VzNLMTE+L3M8VUk3Rl9CJH5Qe003NS8qRzo+L0pyL1RV'@;
put 'TW84X2d3KTk8fXJMJVJlUXh4UDA4P2NEbnY1d1l+ViFCTWpSKmc+PVpqdWk+Rn5XRylqYlF4YlIxOU43Nz9ubnpYaHhKaTlYWUFZVTYuZDprSXA6bTJ8V3A+bzA6RTtRREl5Il9hVW5JKU5la2VwPVMyOFNsZnRwOlckSX0xJklnP1hqVF5EW2NYXzVSJiNbd2NNY1MlcypAUE80MD19d0c7VyRU'@;
put 'SyEqaUN+aExPR1VsN20ze1khLjxmMjRrfT0uR34/L2dzbndnLl89PCRzT3UkSCJ1M0hhLyJzeDc2bjE3QHI2aXQ2eks4WSFrIkVxZUI3QC5JbXB0aF5mQG9MT2JefUZbQmA1dUA1Rnc/QVRNOEIqOyVXMmAwM3FdSjpubys+Lz1LZH07PU9qYUo3dVBhOUoqXyUpbzBON2dvVlM2IyRyW3E9e20x'@;
put 'Y3lpciVIYk8wTDNVOERTL3JDOjM2cS9bYEU6MnozTFFEOzo1bDp7N1ExbWxmO3t9NHw/aSFUPnZ+fXFOPUdjPkgiXTBqOChqK1RXUXxucztOclp6aWs6YnYlK2sjKmxJRytxIzd7OUBKZTRgaUJwWmMvcXAuTmJlOV1kPDQkU0VzQH5XP1dZVWxKLyxmVSRpTWJMKjwmaCN5cHY/KUJGSUAsO05Y'@;
put 'Pm5damVMb2N1JHhtdkdfUXtLPUpWJl4rflgxOilAaXdjWmF0NkV7Y2NOT0FBPE0xWzZiTDNtJSlIWXI0Q3IyZEhvZCp5KypRKElrN2c8MTRAXWpENiVkdl58YlB4eFA2RSoubldrMypTQ31PNjN1UHlzTTlAIU1YP1RtUz1WTV5zS1MxOV54MmUyQ0lZb2MlfEVrR2A/LjJxNkx8PVB2RFZrLGBr'@;
put 'SWJYc1lDfjRCeXU+O30pe3ZFTzh5PU5bLCM/ZnxZeVt2cmR3JElbSz5iJE1Gfm4oTXs/TTtXOCk2diNrbjV9UT0+U3laVnljcz0+QV5uaT17RkYpODNbPzVJOUpJM2NdT10jRkEiKlZ7a3E+RTY1MjBhdUU5bGh4X2RkcHl3YW0+JkZyYihrVG9TdDVJO0JdTFA7V2ckSyw1TEFlKz5RNEcwRiJx'@;
put 'KD9OWX0hVV5+R015OEEseEo5RHhGT3dJVSNEdSspeikkQE9lQ1RUb2ZMMV1fSTBsPC8qe3NiZShvbE5eYGorSDxpRDB+bzJ7c31OVkhNMXAsNzxGRG9mKn1wU1pANF1keTlpO1BBbWlgbl9eVCxyJl1La3h5WmAoR1IvKyN2LFRYL0dyT2p5NkR8bn0mS2FEYFhhcDE0WGJxZGMwI2t3anNgSVQm'@;
put 'c18zP0hxeHJsPG1kLEMhUWtsRiFzOVVvJGNNXUAvOmZlQEQkWGBDWXFnRW5CaXdhQ0hOTUkvKlphcE4vP3lXTk9yM0dneGEiSzFlXTwhMiFZKz0oQnF+aEN3MV81aldAW1QjdTVfPC54Jm0mam1lLzhLZnklcipHT109NEBlfThAUTI9RSIjaG9kfSR7VGcpa25zYyh7W0p3V0pQNHwzYlhsQSVz'@;
put 'c1NwNHR2ezNiKWNIPlZ0dyxZaUZqJWJzYV1iJWJGVFQ9XjhTMU1HK2RIO2ZnSVsvOko4Rks+Wlgye2xeSzNzSigkJFhMNlU9bUEwOmBtU0JOSChCbC9EMjY/Wn1qS30kbz1LcklDYCQiSWJgREZBcipIMipiZkloOm49JFNTMzEhR2c0dzNYK2tWJVchVHhEKVN8Jn5nJDtdbm5WUWdad3h9fnlN'@;
put 'LyQiIWNnQDh1TkptUy4jKSQ4T2kqVUc6XUorK3IobUhRWEVBN2p0SXAyalFjWk8iJCgzIV5JaCpgdWBxQ2R9aE9rRkhMejZKLFtJa28xb0JDb31XdHZLRTBdek5IRyJxRTs+QiM1WlB5fmU5eVJAdkRoTDhOZmg0SVF0emAhaT5ELnJHPlJRTG9hbnFiYVdjIiphRjNCMU40MFImTnxwZ1Z0d3so'@;
put 'ck43ay4+fURXQF9sZ2xrYSVsakI1JDxITH1+RCViNj10ZmdzK1Vqc0MjR0hyMjMxT2smN1okTWg/JUwhZ0poS2dnZks+TEpkNUxuK08ydWxMSFZwX1lEMCR2X0ZqT25uIT9iL1JCIi43ZW5iNUAwbWpvJCYue20mWFg7VWpwWUBjVn5GNVBwXjdaPzIiWlg4T1srbVAueCJMPyhgdHQoalolWFBg'@;
put 'NSNpKypbV2YkPXpNN2wxSllGKm4iPlN8TXBPckxKd2B6TkkoZUR+akRAUEBxeV9RX2IpYjAkUjtgZmx4R2cvZlBpdTNhTzNuOzZTWnU7NipfQU1qVFs8QEBoXUkjVWpRXUBTezpHeFRhQHZoZSlfUm4iV3IzW3FUOjg9UV9dUSFFbjZiYEkuMisvfjdrT0YvanUqQWkyendlXWNMQl0uLmooJCUv'@;
put 'OVN7NmpKSzVbfktPSXl8NmdJK21sVT9jX2ZWUTcoTnBDaSU0YXgmVngxRXxdcD1sOUhXKSsseXFyXWM8Wy98an5FQmtwSSRQMTVvXlQzUSNLTDMmWkBzPC8jci91S3gweF5waXExQC8xRGhOVGM4Tk4ofUNWOkpqMSRteD0yMlMiOUQ1QEFKMDU4PkApSzpvK3FYfG9MPVUwJTFuXmZ2V2ZaJjVD'@;
put 'fWRTeD87fFI8KSosVjRneV0sdEZuUn5xYVZucSphe2F2VHUxPWR6cVs5TH4+WFcyQTltN05+SWMqYG1OQmV5X1ZOY0VhRWVPR30+Pi87fjR3V3ludTNPMjdaLmxMcSshXnZxfjVrJCEwSiNMXiUxfkU0ai5GRXo4YGN0KiM2T1ZHZ188ezl8UThjZzBXREBGaXRlKkxzSnRjPVhyd0RTVD5KTEZp'@;
put 'OyF2JToxal5mSVYiOV8mPnhEV11uRVhPenRRP2plR2xDR3gkemtzbjwmMDxWb2MoITd8RGpMVUhLQHg4YDFPVmFJQiU0PG5qaTJHc1lhWlZfRG0oIWN9LHlQTF4xeDFzMXB4JlRNWkxOR197em5le2Z2Q3o9SnRPY3csSnIlRVRWISRyKmdlaCZ+dUIvNlY8bUBSJTkuNmNhNC4jIilSSjJ8fE00'@;
put 'TDgrUWRfMW0ud0JhUzd2PVpZXTs2SDNJOWNmVH15UTFwJFJNLyxVPitbJEVrR25KQURCWzEuI0xdJGsoeXpJZW1eb0M2d0R6STJUc25mZFd1MzcxT31ucnxOU0x7bWUzVWByfWl3UEZkX1RQTTg3Kn55NClUeE1RXTZHOG8jQnpkNnI+TC9HN1QzR1FBeX1lZkI7QT91VktpbXcyKmtvYW1zUEZN'@;
put 'c3o7eVA3dFE/dDpeOT80UUJBMVhtKnYhYUR+SV4qZnZSQ1puSkMvRlUmV28kbChHbkR7KThsb1ZzRjM4WldWcyg7eipJUUFCOnd7IVhTe2UhW3VoWGF0I3QrRmMwS3EzTCFpRX4vO1ZsXjQqaVh8dHR2M0s2YTZPWSNPJTVTcjlTT10ycj1kKGxkOUdSLC48WEt1UkhFIWImTEk5em5fen49dyk+'@;
put 'VFFALG1JSC42fDA7VnhPXlM4QjJFSkBUNkczVXZIYnhJWlBRX3hydiw7Ij5ANSRVUjNIWTNLTExBPm1HdC4pLz41W2k0O2o+NklYXkNBIisvNVskSShhfVJ2c0pgY343d2skeDRufHRmUVAlc0R0eWJJflJ9L0J8Skl3NWhjQVVybGcjT2ZhLnk3UGVBamN6bVk9Ml5dTTx8UmpOOE9RXSh1Uyh3'@;
put 'dz1fXmFtVylfOkI3WCR3QDxCNVdaPm10a290VVB6Jlc9TE05WSo7Sjw6WyVSOlY3M0ZPK217Zzh1ez8lemgpYTEzaV1+RFl7ZDBDViR4Jnw5NiomRml6WE5IWHY/OGxtQStFR05nJHY4fFJDZVRrSmlnTWxxd2ZfRGxmQUFLRmB7dyksPFg2ZVgxZy9QKlA5dlRsTSkwS19NVCFTU21KQ1BiXShh'@;
put 'KjFKM0pfRCFeLl9GbCJwWDlXSi9OSj9dV3k/TzNdezZ+L15tckUwZGFOOn1eaWtKXShEJUd7NSEuLDNQRS4xUSQ/WEcsIUhBJW9eKUJhLCVxMFF5NTojMEg1YztzKU5QRD1jd1FQd3MsWSJdKyk/Ul08NSZvIi9CSV91b3ZxakVvJGpbL3wvZmdbTSptd0NwPSFKJX5bK1JvPTUhdSFjZ218azlT'@;
put 'UXVxKyQsSXxzfl9gLGIuN0Qvcm9yVnomWHNbZ2xPMUJkZnxOZjt6ViowKTNjTlZ0fUYzSFBDdWkyKGBHQj5DTmxHVk9+Xyl9WG9HJUBiMj90bjwzV2xiaD5bcnJPS1pSSFdzZ0liPjFHOVpbWCZAT0NzISREYSgpTyxaTGY3UFprRjk3bzBmbjNVRSgieSJZSVB0dE93LkR4IWQ5d1M+N2dnSWFC'@;
put 'JGZsKTIuJjJpZi9HWWsofDFde21QezE/NHRbODZRdTZYJTY1dDolUWhXdSRheU91SUhOYzklLyg4alE1JU9WelNZWEQwYnVXcHVxfU0mfSpnd2U/fHNrT0BmTiVkP2I+SiNQQj1WflUsPHBqalVpQW1mMzxtTDtEY00uZUV9QVtIM2ZmZn4kSHdnV2N8TyFOJGVpYEN8SyZgRnomTlFvRiVpN35h'@;
put 'X3cuNCR+eXJPLj4+KSthOyE0SUhAKEhuRjVHaEdbZUc/NHI8WFQpWF5ASHxjMm0vc3p3ODYpeTduJXIjWXoqaDNLW2FtdlZqajwyOVk8Jl5oR1s/UGx1XzAiXzViJjVkbEcuKCFNNzE8eDsrKSE3M0ZgLH1JTnhCYS9IP3BNOXpJb3ltY2osWDQvYlhjQ3xOMzw4cUcpeXxJMSJJSlhTQVBre1Na'@;
put 'QFpENUpTS095XncmSyosRip1a3dlPHt6VE1TaDFrU0pOXVc/VWMrX3FqcWZpLDR+R1ZtS1JEaXt9RktkTU5dSXVROWpkSjdKT3xbem5vL196cTVFbU5DWGVbO1FDRnM2bE4mLGd8aSw5W1Ixdm9GX3kveGQxeyhINmFFfWV8LlF0SWE6cWwmQiNFeVMsYWtZUzJ9fmRSMm5ialNTc2MkKD8+KFg+'@;
put 'aTkmVH4+VVUjRzVIPU0pbX0ufngyQzhWY21ILiojOGI1dyx4amhGZj11VT18VzpYa0Y7OEIua2JEb1pIK1k7NGk6fWl0RzZ7UiQzJUxFJX1Nd3Z5I3hRWFU2QW4qJDlfTkZvd1I4VmVVfCtfTVc/Ui9gUHpnZiZFeVEsLFssW3t6Q29ERkQ6ailibzx8aFp5JkU0ezNab0xgdGY4WFtSdihxR3Yy'@;
put 'KkB1WilnUTNnOyQ5ZThFRnw4amBKVyJyN0syOi9lPnxoJDFCLGBUaERTL0U9azFQdTh9SFVfNn5oUmpFKSFnLnNwXyVXbTdRaFZaTTdhbGBseDV4fnVCZUJZZnFVQWlsTGJuYXxPN2Jjekorb0F7cVMhRFhSO35RMlN1YEopM3UlUkhvOGtfSD5fN0hFQUpdPWxsdTcmVz1MWT5RNVclQC9ZPi8p'@;
put 'STJmU0ROZ3MmPlhWfCRyKXtCVjZ5QnhPe2B3SWtbOHhBY1ZAOH1FUEM0ZClPdEQ1O3BeMDRoSU0+bjovNkRpUH5fRkk3eTZLQHBdNkl4LjRyMENudDZNbHMpeG8reEs6eHtXKGs3Ul1bYC8udz13Tz5QNDRAPWNlU0Uhe15ZUlFDQjNKMDFtRFdvP3JkQUB2cCtmQHVAb3NhQUd0VFUkWzxXSFc4'@;
put 'ITYlPXdvJVc8cH5RN2olZXA/dFYhVEJJamhldTtRP0tATXJgMiRFS3AoSFhbeGAzXSlyVTFCZnt8VkZjO0N4ZEshSFZPMkpZJT5sQk15RF4zcSQqRS9SbWhrfDk0Xy9XMVVnaS8yT2RgZlRrXmpxblA9cUx6TSk6aGo5UDNsN3RPM2EhNkI6QkltWnAxPV1eJiUwNHJOZkA6KlRWa0lZMy5wZUFP'@;
put 'cC9RYG5QS2VWeCFSJHNxOF1WY0xGIUdUfFVENTtoWHBCMG5dczE9RD9LfUA5MTBLPiN+Mz8ySWZMMT8zQz03UlZ3P1pJcVJtKnV5QzA8OGdxOXNYVHovLls4aHdmc1pVXUhYajEpWHpCKEM5RmZyR358Wmh6KjxURG8rKU9UeCxkYUY4RHNCWUIweC88cyUhTjpRRUpYfTE8Yk5IMENJQlVJdipe'@;
put 'WWdYO1thKzd9OFdPUW5bfVI4cVsqb1RaX0ldTzA9d2olaiNHVVlOR21QMz8kWypkZldvSTwkYTZIV0A1PC9gIyROP3VuTyQ9O3dqTTF2NWMvbGwmOFNGVU9FNDgjOX1vY0gmTnZabn1SOkVLQ0gqemdjc34rdFtkMEdkKis1Sk9aQEVXbzpeb3Y/XU1qamgsU1ozU3srU1ZvSmApIXU5SGAlclg1'@;
put 'TmtVM0RUWndYelM7fGk8VnRySGc6d0Q1QWxOQjA2eyR+ZmR2MF1FdDt4Vz5XdzlZNnZ4M2VmTyZocHFVSkx8I2AofXV9UFU6a31lITxKaSYqa3gsWU55JUoqOUBYKStZJCVoclteeHlfITpJZVcwUXtnZ2BqbjI1Wis6aXpKa1oicVFFc20rOER3cFspMjw4Yk9MIVM9YGAiQlRjeXMoVj0lLGht'@;
put 'QERfNjlnY1ciMFVYUDw2TjdhXUJqRi8zJVl0d3JLa1Q7cShJWDhvKyZZWG8oZn0qXjd6OFVsQzVNSFNjWntlWWJ1RyZiaTVBS1d6fng/MiQvI2NMSGlvcU5MIUEvSyRMTntpci5iUCFGXnNnOShZTEV4QTIvW0V+YjEyNDpWK30jbkdmZ0lEMj5LLyFpezJzL0tJc2syeSs1QmhIJWtvOG1ScX4+'@;
put 'aWJOJkp0PHA6fV91WCtLc30uQlIxWWo6M30/VUZeU0ReRXlpOXZAKC5LQk9GWWYhUmlMQlJjcWxyYjRyLzNHfms0eUBSZ1IqVHp7UWEqMV0zRF40eVB5MUpjeHpYUypYKzVFOHB4eE9nbmpoLGxaNC92IVJGOi90M0tYQEs1LjxbejQwJkdaYW80NSRxKjw0emhFUyhfIzc6eUlNSHhVbio8WXQ/'@;
put 'VHg0W0c4O1s1TXRoYjpCalBRTzszM2JhXzZAaHgpV3RqbSNqI0ZDTHpBen1xYmZ+SV45IzBzW1JrUl5LKyNxa2ckK31kbzV8Q2UpLm0wOTNUUkpjcFp5KjUiSVdte0M5eiVbN1UmPXRUQ3EmbXdEbXw7fWB3MGEhXylUJlc8emxuNXE9RnZ3LlFrayxfRFNLQ10mNH5FZURDTjx6Syk1dlk+aD1N'@;
put 'Ynh5WFBRb281fVhmL1kxOVZrQyh3MHQ9UXdBXn02eDhvR2RaLD9+U0cyLypAXyted1h9aCJDVTpbKzcuO1ZhQnE/Z2o6TE5DVW9MWzE9O35nKlBidi9Kc2ozUzp2VTBtIko+MFRzZkgsTG8qOy5UV3xJLH5hcG1WfmdnRDV3PCM6PVdvPVU7QztGOjtSOXVMPkdYZXU0QTY2K0MqYzlVMWZVTGhD'@;
put 'R0lEYSZUKGZwaTtJTlAwOWM7SkxjTy5IQDAyWj42fTJ6TnIycGM+VWI8aDR6QTEuSH5mOzd5KilnTV04Vl9ZOEI5Z0NifCZpQzcwLkZ0S3p9QHxYdDNFPzwhcSlbRTFgJUJXVCRfcVhYS10jO18rPEUvcjkjVGY1Y2lpLCg0Vj5LKGJoUkR9P1pVKipIU04/JkQhbjNUREI+KDNsOGx6Zk8sO2w/'@;
put 'S1FGTE4lQmo8KjpVNyRKT2JKKFUucnBwfiFsdiRtRjRbLDspUTxAZFVAZis5ZDYkJmUiTjZ0cnUveVlyM3tGL3BGWCJbdix1eSZZfXh3fG5BcntwLERlSTFlT19GSnV0MnF9ZUtvIUB1UXtmKk5peUlyUXw+QVM5RSlrND5EMD5jTmVAbkRwYSszeSJsYF9TVzg5V1hhMTxFMzYvejg3eXpWRFR9'@;
put 'KFI8T2BZeEQxSCZ7fT1hV3VAYmtWaVRVWjY9IT4qPG50P0FxeWVeViY+P2ErLCVuezRFMm5rcTc+Ui4+azAsT0pTX2NAeFtHcnMuI3lTYmsxN1FTOCJUPkVOe3ZAMkk3VzM+cXlbTGgrcDlIVWc6OzJpeGZNcD00bD1qeURSIiZsbn5QL0lycFhrPzlqOzIrRGI1aD1sRnRfeEo2bE5TQFQhY1dP'@;
put 'W3J9YCUhKTozRCMrSjxAVGRNNmohIT5bU3NXeVVKUjhsJTEwXjwjeG5Oazs+KXpiQllfSjEqOCVMbWJudjlgK14qJmJjSV87dD57IiY/WG9YKDR7Xl97UHNTMXdxWVJgRS9jK3l4YXE1S1VkWSw+Mkwye0FbRUQ7Rj8rJmtYQ2lkNU40JTxbPm5bXVUiZEdwNklgRz5LTSwzRGJhJk0pdnJKa3h+'@;
put 'XiZUfilFMUM3djNOdWlQQkptT1gzNztlfnc4JiJzUVgwV0l4d2ZdQSQhN0ArfHkvIklNMXx3anRfKDhDZzZkI31yT2FfOW5DPEJKfUpwOkIucTowQE9dfUhBeTEqZDMsbUZ7KjNkIzxkMntLPX5+U0ZuKEQyb3s2U3NtcFUrcj1ySiZiNDs0NlVKcyNIeFg6fmt9KyQ2cXRTb2EoaWtiaUZAWH5W'@;
put 'IygvZDRuIzR3TDNFOSokfSVOcjJDXiJHIUo+e1giWFlPQ1FfPCt8WS9aUG5HcH42OngpWXBkWiUiQls3cSVkVCo1Z3dXKyV3bCFtR29vYTNsWDYqR3pCUDhsaiVAbEhlYl1wP2gkIUlybkt9fDA9ND1Ca31ZZ0BRdTs8LzFhbUl8Y1g5cGxNflF2ImR+XmhZPWBbVFF8VHV9WnZpMCNVeGVfQkVi'@;
put 'fWdOVH5zMEhpOyQyQlByKGNgWiJpMjZKbHlwLGg/KnAhakwjJSF7MnpNbFBZVzkkfjIsbUY8Vjg/PXdQIXcwISEwcldlSSFINlMkeEk1d3xEdEcwRXdXRl1OQVplN3V8Vm97QXZgXW9uajFBYz9fXXJNeUhWRFdtZkk1SmFXPytLI1BkbHRGKS98WUkzNTR+Wn4ueUpQW0kuPCM3OkZdXVp0Y1Ij'@;
put 'dkUufDpZPTFAfjxMeEcpQDZhI1VwJSYpQTBAdFdCJUlyRn50N21hR3YzYjp8M1N5UEh1aD86ZnZGeSI0QmhdeHY+aiRXeTl2OFk4YmRIZHcudHY2VCJjbWxwfXNCdm4oWHpnSWEoVWE8RkQ2bk5EcEVyb2cjcmttLl8lfTFHfHhAQ2YkZjlpXUhoJGlCUnsmeUtfZn4yZ1l4QClVVHA2MCZUO18x'@;
put 'ZG9nJndKJkpfTzAmfnI4QHQudXhTNFtsOTUmcVN+Jm8wIWoySVJRcnRrKWY0MWhsRU5keCg+MFQsZF9rdi54dlYvNjpFP3dzOFNLKT8mI2FLcDA9SzN+cWwvc1JufDVufjJjOlpHYClROUlfTk4yJTY9VCUkYH16YV02Pjd8L3YhU2NVNkVzVlA0Un15QyVxLl4pTDllPmo2aj9TZnhFa2BMXSZN'@;
put 'ITZZU1diez1fSjsiNjF3czUkaH1YOXtwK2FeRUQsNjFuPzUzVzMrYzhrOVp7ZE9xUXA6YS52KVNNT1Y9bEZtJXw1OUY0Wy9OXUIhQT17d3NKbm52RFJyLkh7b05PcWc7PTI3amFlYTF4Sy9NN2hiVWUzOXIjOXx7RC5TXm5LTWs5LD9Te3BAJTxnVHl4JXhKKXpVWm9kXk0xTzg1dV1xYjdoWSFU'@;
put 'N1Q7QFAjfHVjY3pLfUUwLn1hdXlGI0olL2NdLlU5NnpZNVg9ckVwTXBIKEIlZmc3dFN6U2NKREpxREpoOSJtWUYrVTFUeHpFMnF6U2l1QU13LkZrZkspYVlMNyokMDAiWltkZWhEfX03LyIqfHhtTypFOit6R2EvY300Kjk7c0E4Q3JSWT4xd1c5TkpkVzZZaVl0NClKc0szNjdATlIsKExpZHJt'@;
put 'bnhoejcrbig4cyRmX3FrSj1FP1t0L0J6YSFidkM9UFQuYEltXmBwLFd8TjkzJVAhMS95PmFLbVNtM3hgP0Bka2NLK0hCX2A3WDxpJjEyd3ciI3dxcSVxN2xwPnYoW2hBWlNoZihxVihJODg7Tk9tUXZ5fXtkaXMkMjJ4Zz1kflMzd1ZxcDZXc09raVFpdVk1SD1wYj5LNi9WZD0zQWFGYD0mb1Yh'@;
put 'SElpakdoPUV2Uj5Pez5kNjQ8cl58Uzc6an03YEZbT2MzPDZeSiFPXmQzImF3NkEvUzkpTWxeV1dTSUovbiFxSk0/dHk+S2BmTHpQSDpUMG1ZKWNBa0pFb3d5bmVmemptQ3x0ZlJmdEA4NzAjOVooMXYyU0J5LDU8dT9nejpBJndNVzQ7WUZjOSRQcE1XZTFNYFYvdDNPWDFoU2E/V2djdlh+VlVC'@;
put 'fDZoe2t0TV94eTQpSStiISM5bkNYX2VVfGs2UlpqSnZVRy84a3VGfn5bdkg1TlswRUdBfX1WYGsvcGpkVGNtQDB0TGplcWN8YU8zMGhmZ2dxKD1CNUsiZzNhL2o9VEBuO2phMWB5MFBXZmB3aGd8eXxOKD88MF14W3puW2ddQFJzOGsyfXdRN0JuKS88a1ImUEcxfDxGZnk7eTB9NlhMSnxYJm55'@;
put 'SkZed1FeXnk5VmM3TCJVa01wOXtWImB7d1JlMC9eZyZBRC8sZFJoIy82RTJeQzhkWEErZmtHNV9dKytZOUUkOHt1RG89LiU8TW4wd1B7fChSLERYeEByYkdoNjp4I2NMIk9PZz8velJfZUUzLFQuQH0/SHhCZTM0T11hSW1OSz51WncvbCtYSjNeUFZBdU1OWzJIPD5JfnNHcXlEMiZNNEdLPnU1'@;
put 'OFs+ZURESm1tITY7LlhsWl13VnZBJShhd2A7d3dsKUxSTkVbIjtYIztDM2NuNGRaMDV1RCMmNjJ0Xy89bTwrUXF7a0ZbSUtvKE53K15+I05AczU7VFZ9QmxWbX1gR0tZbSx1SmgsYlcmMzFqZ3ZKdS9kNEB3c0BIIXk3aEgvZUUrKyhAMmNkaUM1Jm58cnd1WFApU2kjYSU6RkJ1eVZ0VlZDdz1E'@;
put 'OGNeM1d0LFhFQDolPWR2YFdJSHVjN3VecUBPbmR4LH5ndHVkKVslN0xdR3ZdYXVWOHRCSEUmejRXRzpKKkdeT3p3Q3JKLG8/XnlhdlFBUn1fdzFYbU5WM2R1JC96RmpoQUBPQitkLj9VKiwiL0JXU1BObjI7OFo8ZSFGRnp5QDhjKGhnNEFVTW5mKF40IVd7KmpwUGJBdHtPRCgqUHlObXRCOnRw'@;
put 'dUJheFoiL359aTxgRTp8X25nW0oqTlg9MF57SSJwTkJhTzwqSjdiNlRVIz5LbnBASXR3c1dfIj9SfGp4WXNkfWM5am82MWd3KltCWEpifjxqIWchNDg0OWw/bm1sWk95USpgM2JKZ1pAaSJUPW0rYT9dTklTZjhbeWNPbUxNbVVWcCs9bCI/YmwqLnlVS3RvdGh2ckFXND1Wan1FNkB6aTMoaykv'@;
put 'fS84JmVgVzdyUWF9MXJCX25Ebi84RzZQRzNVLFFOdWI2ZmMyTkpaTSFfWiJbd1ZfNipnRklAPiQyK008T3ZbQUQ7SUpVPG4rYWI3bmUmU01ndlpASyNlJFZgaD5tfUdPWG5gdC8uT11Uays7YnFRKzQ2WzIrQkI1Iz41aipdPS5JIVcoJEJCVTYqIzo3TlhGRS9bWlNhcDckeypFQzcldVIoeClS'@;
put 'N1pEWDdtOmZVfHZ+MC9lcTMyLi97ak49aWlPJFRANSFqZEFmfjhIImd7Vnk7LEpzSitjYitBUT9qVm43IXJmRCVaLyg9b2RWZ0w3K09ubWRMcixyK3tbMXhwMXVpRVBxcX0sP2k+SiJnMjlTV25GYXJMNzt7PD9mQzVSanl+YjNDczYmfjFmRG1GQXpgKEVgUWdAeU1tSjhpdF1+JkpyfTt+el9u'@;
put 'MEJHX0cze05Nel4wT3RjQzxMMSo1XlcxZylRYWw2dX46a0dyaXtvKSpxRE8pMDI5PE04WjQoXXY3OUJQP3VsSV5eTT4oYnVJUXcueno8VVhuPltZJT9fQlpwXW5hVkpoWU0qa0RrUiZ+IylEdT1SaSJTREwqSjs8aFI/KX1LSDVkV2BVK31gU2M6KGVzbmhFdl4jNn14WygoenhuLzB5PXsjfEts'@;
put 'c04ma3FLPFhCUFdAOXl5RVV3cD9FLjJgIm5UQiIsO1khPVMpdmo1KDoiWExESUc7Y1Iqd2dNIUpzVnVAcHs7VVFEczt5akg6O3NUUkt3cjN+dylZdjN2ZmpBdXdzYVdFRkwwQ016JCxrbUt2LlJGUW9HUC9RTSprPj5fcT9VaXRbR3N3QmAod2ZrZ0ksTFVsOCV+eDhVT3duU0M+XktAaFZsOUIy'@;
put 'P3pHKFRWdEk9ZVZPejBje0Q4WVJ+e34kUz0/PSRuTmxndE9PNDQvXTohXTdZLDNAbjtsOXJLeFlnPH5XPkBCJT1JOWZnYDVuMFgqMzdUUGwoU3NEQnNxWGd7KlJoPkVvOWhWTmZBZTR1MzBGJWYqZClCJiQwN1lqYjRmaUtAT2ZGTV01YHl+aFhlSCtTRD1SPlFxNHNzSlt2MUslLiZ1VDdSW05x'@;
put 'QCRsYS9DYCNZTUg5JileMlFgT3VPZDFrRzV6Q3dmTW9UaDd8Nl8pNiQhPytQRzRgcXQwdm0ja01dYkdYXTp4Sz0yMXVpUFA2RjYxOzVedU8iIl9LUS52QnxpOT0jJCplJnF1WGIlcWJkT2psO1V2QSJwMyo9ZHF0KTMyc0BeZy5XOEtnaTp0OWd+KjtnSXdDSDt5WkVFeEcjPTkvTkM4bjtiQXJD'@;
put 'TmNodGw+SVt3YWo7RGJifEpjM1EoLHchWG4/XmMqQls8Q0JHInJmfWteM1dkOSZKc0VRXnZtSSI6W3NpdUZNREhpYEJDY1J9S35CfWVzX2x9NzhIUD05MWFBTyYzNSE8UVtTa34pQmx+OCROcSZ0PiNAZ1cvUDxuWCZUS2AxbFk0SVl2MVB6XUtsek5zaVsmKEE7RW1fcnojKW1sRXJsIX5LSU1S'@;
put 'a0did099NXdDfHZCVUNmTVVXOXBSUF1LYk8uKjN3dCoiaVFzNlh4Nmk0ck08SD00UkRALiZ+IjNBaj9bT3k9TEF3L1N3aiVMJDxHM21QUW09W0lheV5gd1FieGJdfDYsbXVMQEE+W2JyQCIzSGd6QlMrWjtSIlR8JCxhc14oLFJ6N1k+Z3opK3Z5ZCZOJnNxPkBMcjh6XXROU0FzYComQHE9QlJb'@;
put 'TGA8Mzx5I157Nj9XVS4zI30vc0U6MFpLci9SNzxkQ2FLUkM2TjsuWG1uI0RGPi9rRVRnJDtaNT0+TVcxdX5dZ3cxfDhhQHVhQF0oUCZmeyNVLjhgKUtBRnUzdHNiWER5NHQjUz00JClLOXpYMzgiTmc0NFJIM0wwMHNjdEw2Qn1vcCVjeCQ1azEsZGhfQF9faTR+b2ZBMyssPEpZMFE1Sy4/Z0Ij'@;
put 'QXdJQWdxPVBYWGQ8VFFeY1hbTEdpcEM6bUlRWldmbF0pfmojNyYoSSpNKl9COWc3a0c8RVg7UyVfdWNwfi9TZytAYTBqZWZ8JDF6SURrOmVmb2Z9LDUkXmRtczs/Qi9SKiwkQ3xWTjJSSypmVWchUnAoUDY7Wmx2dV4jcTMjXmcqcF1yPk1gP3pjQnptbjw4KHQ9NXJffGdLIXwyVHR+aVl4OTpq'@;
put 'NFdKdE5ZeGdxUT9MfkBGREw0IU5YYit5dnkvKW09Oj05O3Uuazk5U01oRk1hVUdqMEpkVT1bMWNiZmVAdiZSSjhtWmFsU1d5K3Z4ejt+czIpWmkyY2x1OW5vXXplXlBZbGQlWHEhOXR8cHpMay4kbHl+MzA4JVgpR09fY09QYDEjWChiWytaVGtdPnFyK3BNfnFpW2xFOlBQZmJsbEN8XjFuRGkp'@;
put 'QThwVWxhdig0NzM9elZVfGM1T2NpcipZJUMzO0c4Pm95bXtqVkxEMD5yMTRDJFN7d3BBLG5JP3NNTmdyZTJ+VTNveFlSMk5yNVl8MDs7flElTmRZMiM0Y3FpPjwuKiZfaT47aSJDRWAwTiQ1SiYjNmojZDhkKUc9SEVfMHZ9Mkx2WmYlVlAxSmZJfUBRTi4rWWx9K3BFRmt1Y09IVWgvfCIsbXRM'@;
put 'NVYuNjt0a1NnWH51bjRqWS5hJHIoW2BdbzNlUDVqWUFYJS8rNEpVXVJBQFt2SWN1MFljVlM/S3szaDh4I000bjZzJUJhKz04cnZdPWgkV3l4cyQ2Szoyb21rSChlRFhkQTQhQGdpbH0jIVREKSJvMGNXPjNQYCtNbDxFVndTO0g5W2N3WG9ZfHlmKCI3Uk5VTDpkX0wmR1VUSVpudylmKXMmYS4s'@;
put 'IT9QZUlseXR8K1VmdGZ+Q2B7Vj16PyZzRUlxWUtQWE4pRUw6SSNqXnx5U1V0dmooO0Z2KF9tTEdgb0k4KlhyLFlPe29JcUddRTU6O3k0QkUwelNYSjwwSis9JkZRXWd5NnhDRVVSVElQQip+PUw9VFVCQFt1Tz8mW0huT0hKKFFOSWM2QF4ieExxND4pWEZMejU5XU92TXhgRGUqRiRjKW5UclB7'@;
put 'cSxUNWRqKzg1dj9rUUdYO3FqInxJND5xb1ozNiohe1lIdEEjaCUwdmBKM21PfXApYzpjeEp8OUJ6cyxOZjREW0JQQi49clk6SGx1YG9MRHNzci9HWGE1SVd0Vl0sU0AxdDxkRj5nVV07OV9UfGxXLmBVSylMc0RORHF2enYqQmBvTkh6aUo7dy53ZFpDb1RqMWI4KjYpV3ZXVDlSSipCPjJCZTg8'@;
put 'MnJoNEpIT2NhfDwwTUJXeGg7ZHRHZWpfSUQ8Y2xJSzgsfTc2bSlbMTF3NlNzR2Q6JTF9aXZ0bGFoV1YwW102K3lsfk40YWshUiRvZEY/TWNrK2I/X0g6WzU2TV9ZPWBZazh7dTNBdGo2MztiUl9pTiQ2T2JzeGVUeXFZKlpDLHlCcCh2eD1Hd0JoZmVePSVRYkBQVXVNUG9pe1FLaFc4NXlJcFAv'@;
put 'KDFTKE9TJlhXd0g2N0MmLGhWKis1Ml1JVDJReyhyOXlTUFh0dCE3RjdyN0FPLlFYZV1uK21KcXxWKU1OeEVuNFcxa1F1MkRtcWksdCQzSyhtO2puKU1pa05wc192OGEmcyIreXpZKXJZUSZBUyJMUkRETyw8SGNCUyJiciNjXyp2bXxjIUZofDYiVSRHL1BqfHJCKFEudXI5V00vL3hbLDZ2bHJl'@;
put 'fmg8ZXMjQiZ2PT0rL2NPOikqMj1eWn0zTCVCJiplMD5tQSNRPzpgS29OOXNKN3VRUVVkKE58OUxTVkZ8OGx0Qmd6SHoheDd5LmxZQzV4akdsYVVBX2pTbzREKUU4SX40KTEwd3dMNkkvW1R3LnFsTixNNUV6LGU0R0pmc2g9MVszJWZvPXBVQkBedHR0WlRfOTRzNlBvXTphKDVETk5PY0c+KX07'@;
put 'YntgMXhQRHdNO2wsRXlYdU9FQiplTUVOMDMhZHVKWkl1UHROKGJFXkNUJkdeWVUodXwqOSsxJmI6bjVkLCRZJj5udF9DW0AoXj1yfml4MERsJUtGdXNfaS4rRiMyaz8iTm50blE5UFg/TzZZK1RpQ35lT3treXozVkFEP25YJTo8bDZsdzJ2SCU1R2N0Lk8+UlVwN24pR0BZa3hrMGFeSCxpbSNP'@;
put 'O2g2JChtPShjZCx0ITNoeDZ8KXpOOCU5fUp8bU90PG5LYVNQbVhqRC9KQzJZalQqQkw2UERiIUMyUy93PCRCVnM3QSZBRjRWOmNRWkNAdG4hTzx0KzooOi56TCwlUXMwaWNGQjVfRyR6djAmRTZnR3lBbV1+KU8+L3EpS2NKISNsR2dxZ2pEa0BINEwmPj8/R05WbHh6Ul4pN2x0Im5RLCE4RERJ'@;
put 'aWtAMzZ8TExiI24oc0tIZHt+cCMpOFFtRzVDN09PdVl1QVc7eVhJdkdrTzB2PXJsVm04fnFSWkhZeStJMSFDM249MCk3MnZSR3dKXnEudkY1ekRwTlt4NDBefTB3a21xMV15dj45PXMpYkEwIy5aYX1XdzJPYD9OUDJYbXN1ajRRY3BTOkZpeTQ8Sz90eCk8VVpBeipGVStWflJjWS5tUHtRZHhq'@;
put 'cUN1PWsuVSZIKllxR1k6Qys3TSYvdGtaQkZ7fStPYk1rIl9GXzAlVmBGczpXN0FHcGM8Q3V6fWU1anI1VStYOzMsdVhxYDc5WTZDVytteSsvUClIWEQ/SFs3ViJHWE5rWj57Xysyc1IqOWRHViVLZE4qQ0lrdywyfiMhSm5xUiRYcyIhPno4MUpMTzo4UlR9fS9XdVZCa1EhKDxtSlYqWFFyJWt8'@;
put 'a0hmMFo/UWU0UEgyeHImKHljQlZGJSRCV25fLCs3fnBJbnxjVndgejosO0lPMWRkUnUrYDJuXz9sUWkseHFbQiRsT3pYQU9rI3sreDlHOlFrUV8wRHFEdy51K3hPWjRTPyNQIVc8Um84YF11ZVl+LzssRVEmJVV4dG1mck1vP2xEZFc+dXg3Pk1KcyQ4Xkh6NzY3aURVVDApRWc6dVFnRmwkazZt'@;
put 'WUJQRCRMdl9rdWdUTXtEdCtMQnpJa0U3MiF5Ymx4X30lXy9sI1EvdEhVYD8yJlhBWUYlTlROQ3IiPiJqaTE4cFBEUE9+SytGay53Y214dnYzVltEIXpudTVxRTZxPlM+fCp4RTdMalFZbGtAfCIhWVBgbyVobiQramc2TXtGb044M2UpKDloLlJfSE1lK21ISUQzcU1jM0x1bmBGWCFxRk8/JTI8'@;
put 'dnRQTkhwIW9pUEx6L3BPUCpaRVJ2cXM6aVhEX1VoUVZCald6VX0wZE9tT01jWUx3cj41KXFiUyMpOztFTSVRUl4sPysqe3U/ei5LS0d4cDs1bn5QP1VgOmF+dSt5KCNANFlJXy9qWG1jJXpvRkBxaWp4PTZrZkVNRWQ8PE5Iez8xbSRrV2pkZ2RZLGBkP3RdcyY7MiNRejk4bUVgT1ZTK1BQck81'@;
put 'LG1Pc35iMDRba01Mb0peTi9BJk5Bb19qW2pFe004a2tQakB2L3g+TX16RilxWV00JVFiO1B6PU1uQG80UTA4dW05amsvOzFqJVJzTyxoWjJyYF58NyVdPWUmSzFsenoiNzxhaXomdjp8S1kranxqaE1rd1ZiIzo7ak5POmFSdSt5P1cmPGQjclUqYHFKUy95TGg9R3dWMUxpXTB1TT4hPF4hWV5y'@;
put 'QD8+eXNbZzBfZTJSYUJCQW9HJjllPGklOkkuVVpNcXNdYix3Y1g+W0NwaFcsWVVVe1tqYlolW3g4VS9EZnxoYW5PY0N8JkkyWn0oXTZpJFVaZ2tLazlFK3tDNXpISX5xYEVkYj19TEldPk04fG51SHxATng/M29WW2E3ZzFvTSpuMV0qNk9oQDFfMlVJUHFqenBTclouTV4iODE9dzR1YU4oT2pY'@;
put 'b0FtQnxbRE5AXzhZb1l9by4/NjsqQzNsTEVxe3s/ZVlQbDc6MFl4Rz86MHZnXXdqc2ZaZmRPWjppbUJwK1BZRERJfkZSeyxpQFdLb2cjYXNjQGpaU2tvejskMiF1c1kyNkdYanI/IWp+WHdRX01MK0Nrfl9Jdkk+UGwuZUc7bHs0dmZJIXs8MFUuUUBRL1NfYTNaaj9QPl1YTz07XU93YypuSjd9'@;
put 'MUxydGsjS2xPdzhda2tdPzZ1Lis4SmwoPjptUkMoQzRFT0p0IzR1TERMWWFnOUY+V3xMZ2ROI2Qhc1BgejdlRyNUTW8jcU9RPD0wfjcqeWU/QVR7byVPPV9EMX1UfHIiaSw1eWE9ZGxCPyZ7aXdKbCZ6LD5ne3VIPktDe1EjamxENFBTOTswVilDWio/Pj54RDdEOEVhJU4qQlplTmxCUnRORGMx'@;
put 'cStrRX1UdlRdIklPdH5JKlY+RlRzISIxVUByZ1RHcyYzbjhddXVrfmJDKXQmWmBINmU5VFk5V2xoY090U0NlL3ZHN3E7Vj9ucCV+X2UqbWNSekFmZlorIWVrZ1BLMkEkT0o1dVUwXjlzN1FZK1EzPVhudV96LEhHIz4zSSN0LHdHOjpVJkFQL1IhJVd9ZVByUkpgUk5SeFE3MXxPYEFDKV94TXtU'@;
put 'dmM8YXo3KyYkanNJTHFMZUpYYSVCNXQhYSptLlcleVB8IXRLX1B7MipAKFg+YENjaFJhT1NAOlZxN012aDN3e01TdkpfVFliPiU8dmZncG5oYE9vcnl2ZWV3MCpnRVJ2X1UiTWZUTmtOIjZbPkwyVUA3SyF3dUYyNlVaQU17eHZIT1czdUFqSl80PW5oQnZuVjR7cE8oNT1aRiohWzlqRlt1aWpr'@;
put 'LGFiTHZYXkQqWmtWfUxjd1dLNV9FLDJmfEIwZj1IViN3O3dSdEo6aWd3Vz4oZklRNFQiJkJKU0M0LkssNmtBemhiSTJnbGlUS1VvT1c9Vlh9UkdfQ2wwNmJvSio5PiwkTzVPcjE0YHE4TVdXOTRFQ2grVV9CcShNX2x9QTRpTWtwJll0OCwvdFVqIyM8cU05eX0heFtbIVA4LjhGYj5mb1pCUjZ8'@;
put 'ck93c2A6Lnpnekt4YzoyciJLM2paP1QpWF5yPDpaPXg3QThgJHJbVGthPjExeTFlSyVgYjMyTEFNbGF1Y2opd1BqUkBWc2RxMkJBQ1FETmVYTU9Uej1vOG8/Jk1yXndhaGJlP0pWI0J9dipNQFk1LEp9TDx4TUgrL09jMikicmQ0MGI/K1BiNHpRaD5hcCYjQmR4U1lUWmRXVmx6fSk2WDI8N289'@;
put 'JCVsLyxGfDtydjhgOXZ4VyM1RGRdfj44LHclIShIVkp2aEJmLmlgM2YpZEZDezdYSW59JihpVTN9K2dKKzJUNk14Xjs5eHkpQVd1TlRlUENLYWYmNVtXW2JxLypSInBaQ055MUloXjY4SDYmZ09pTy5JTHo2QktWWTc6K2wlZT8xS0lwT0crbk9mTip3Z1BLRzJ0bDRSJVJ0T3A9fEJuTiN9SnRg'@;
put 'eWlnOm9+dz98ZTNHLCpKN0hpR0xYXXFxZi5SUHQrZz56OFJuNVM4ekswbkBLUGhaRjlZbyZTKkksS1RVOUc4OEZhRjJEPikpdHNfNHdZRTVyJEwoV2Yyb04mKWJob3BKRkVgeDRweS5xOzZZMng1YHF4WEg/fCJ8Ky5CQ0FzfllRK1ZNYkZwP2gkfVd3MSRjSjtJR0oyXyM/SW46fSo4bUp5dXZJ'@;
put 'YXFBVEAqOjBvdW9sT189cml5RCV+O3xRYT46RWdtPlhYWTpxYjZLb1NnST90Q1M+PEY5WllMJWVuVldAKTV7Q0dOUjQ7fThIfFFZTlZTbSkvIihiU3RMOk0qPUghJm1oUiEld3tUQE1LTkoqeFROUF1VWE98NEJzfSFFKEY9K3lMIl1BRVFfaHQ9T3EmbSFdMkYqWnhEIiFuPyE0ZkUuSX18OzRO'@;
put 'Q11sUWl1U2VmcXI4L2tOKDphPnJFbS84KVtlNkA3OTdIanlkQm9Dey4pInNTMlRvUixHMzlSV2wwdCY9Wyg2SGg4WkY6eGlOX2NCOnI6Ok08bUdwbmQjYndIUiM6OTZIaDd5akwyVURHLGJwdlF2YXU6JllxI10mcC5qWih1bztwKkVhcHNQWnMzdTV6L3F8JGBHX2BkJkwwXi8+OGtpR0pEbF16'@;
put 'SiRkKkQkVXdUZkRWL3p9a0BNcy5hbno9IitVVj5XSyZKOkhjW0lTVTVSO19WRz5vOmUwbmg0PmV4cnxJLkpSb05OfT5MfGJCIyxOSitGSk9HPzl5JDl8ODdAcWcvYFJWXklPclFsVz46R2o0MjVGOFFGVEhPVTRvdH5+YzI0SkwkSj5jRk1oeSNqem9bIVNQez9jTDRkemp8L1k0ZlBhamdRanwo'@;
put 'djttSXchPTBXTVk+Si80flZOL15wX01DZGNvXXRjP1IoZ1JrSTpXSUU9eXo2VmVsP2UmU2kyXl9tI1E4ZGZsXWl6OThaSng6PyUvWVJZPjBPSiUmQUR5RUplfitWTyZmVWtBW2A+R11xO1BCRmZAMDdHKHJiQmlUaSFNR0FOJiQ0b0hWTkx5enIwLjNNYkJ4cHoqTWh6UDtqYWJLI35RQUAxdUwm'@;
put 'a0AiYUgqZEohVDMmZSpfYzpCREhwZCYxV3pBd3xMZm0oS2cpKy5oZ1ZbUyt+cilDUTp0RSRbMENBVy9scmA2bVptTmdBfXUhZHllflNLe2s8TWtAVjlvWV9APCRyKV1aOXkiT0VLO0FHSHkrLk9JRT8mMChHZy5Ndz1OTlgvcixVd1d4fiMyMjJpNlk3cVZRWVJ4dmVnMylWdGx5Wj9sSzZ9bUZX'@;
put 'fG54fUNTS1QyRXxJZWk1NGthQG1sZ3pVd21YYkc5XV96a2wxYVQ6Rm5bdjA2Vz43UjZPIjc9Yz5UPC9zVm91THl4OS5eSipnVnYlbnR0UCx2TmBZd2tKWnY+MkZNcnxPd2NJc0xvRC4yb3FMaUVWYUUxRi5oKkg7TXRfe2MkeFZQNTduKC8pQmVBM3dmQmlbYlZ3L1NDL3s4bzJ4ViwoW2xpZiIr'@;
put 'SiErOnZRST4yN0lZQyptNUV1eV8/dCJvdnp+TF4zImEzbz0xaCZtSnZ5blVnemFZOiQ4WSt1cGZON0tNRFtLbSxbNjU6ZkxlU1JFbkR6T2dQSDw8R0V9IUcoXW1qP25LfTlBQjB7ckc4T0QpcWgjKnRzMmpkUjhKTTsoIz12OVZ3RWQ2U15WQnVtS0gwVHlHTFA2VVM3bkljT2JZQzJ5VGBfLGRK'@;
put 'VXg3MElEN3dfTXkxZkplTkpoQn4mWVdbLkAxRTBfSj4mOSgkVHFDaV08aHYrV09VdiUqN2Q2OzZoWXt7R0ZYM2NsIldUbk54VVhLR29meyt3cDc8Ni4pYlFSaH5JaXBsZ1FWO3BUO2Y4eCkvKUVSQ31ROk1iRWR9N2l2QTgwJjZ7IUczJDtdb3tWN19rOyxQb0ImPDNWKWgvKlNYNkd+ZWckekFW'@;
put 'L1hOfW0oS2Q+eiYrUjs7c3xGcXAoTnB7SGMkWXBxSllHbFoocV9pZEdxLFlBOEt1NlEwSmE/eys5SFs2d3FaclVaM3BAO2NzcGx1YGlRKmd+VDcmKDVfeTc5dnFEWGQ9XiM7XS84Vi8+LFZCNVReY1ZXT0JsQ2wvY2ZiOnZXfHRWREY5UGNSWkBfI3pETU0qS005IzZGXVBTb1QyUnwvNnZqOXJr'@;
put 'd2BUITA6NGRmMFBaP2gkI0h4TiNnYUZtSCNiMTg6eXFnSW4rRmgvbkEqaFJbXSRydUZALDdMLks8aT5Xay5fbXVmOlhNfDA1cVAjNnlzTUtNeGs1QHQ6PCpOLlM7WSxFXnxdUF94bEVFXkxXaGJYZ0dKTE1XSGByeTpMUnA9NVA+d0cuMng3fU9AZipWbWRVcHRISDF4N31PUSNVNUdhTVl3Ymg+'@;
put 'XnYiQ0ghJSt2NHZEJldLWndCXl04MyIre0hDbjg2LzxrUWFQYGw9MDorITh+LyhZN1JuUlVvdjNbWnRTQXIqX11jY1krTXdmRkswcUxDe1Fle0goIzo5eD5rU3ZCaHNZbSNbVjBAQk1YWHxYVlg1UXdXOkNnQWlATlFuWDJkTG5Iajk0bUBWNF18aFd0aHA/PFZ0ZEEkcHBxQ18+VFhAQFM1bEhv'@;
put 'fEhuPzpjM0RgRXFEWzAuUlJ2VDU/cmJgRmFzeVQ0YDx1ckpuL2J2JT9HPlBsU1RlZEluQERHZipKZURtWmMpQno0UmUoc3sqUSVaaktrYEgvcnMsYHtSJnxXK0BWdGM7ZUdyczppej4mQiZCPj86TGsqKj8sUlJxYGZ4SXc1SVtFQ1ZjJWguUWJlJlt6RzNzQGdfKGU4JW97LktlKCMsPnJTRilx'@;
put 'RXY7JEZ4PDVsOCRmc1l4dWo7bVBmbzdlZ0BWPlFdXUpIP1ZbO2UsNTR3L1tac15OWWA7YjI2YkA4Xyl6cU57biI5I3NweTYrREtyeS9xdnVednUrRDNgdV52IkNmR3xxUEBqc2ErQ2I4XihLOi81ZVg/T0ZxL1RLZTVHZ2s+PXhBJStSJWBIeHJnQkIuJWNCTnRbUVVFaSxrRV55NlZ+aThZRioh'@;
put 'dW5RdylsZ19fITlfIT9EQWlQR0ZlPnVSN0wzUWxyYVlKaiY6bihOQCIyUW4vYnZLVV9gX1chTX1nWiY1TH5MdWlyX0BFOkYiRjtWIyhXI20zLzhJaHpfWkZmdHwzOXpteGJqdF8mKUVtanZvcUlYZFM4KV4pTi92RV55L0k/OW0oIkhBKXRQOXhHLnExPWRtOEBQR2wmaG9ZdUNFSG0rQiFaNihT'@;
put 'MSk7d2U+eklBOC5HOXJldm8qcWtKOHhJQHFwck4pOXBrRDIzSHIrPl5lMDYxekp8K2NVVDJbXXhuOXh9NkxkZmgvMFcyY29oaTRxUzo1SG93aFJ6ImR9W0pLZyYoXzddM1pJYDEoSkdZITRaL0NKWWM+VFR2THdIbl8qI1JENkBRXSVVL0glP0cvSUlLeFdqa2JyQEtldj9BUE9lV35EJj4uP183'@;
put 'VDwpOyZNKWEybEhGczJTMipNQ0FlQExaZyJFbjlCVkVYL1dmdlVHeVRiMnxreCspN0pgQjhEeDdOcHJQekYmbiplLE1vSVZ0cU14SD1Nb0NYVFIrM2Fudj5qOUwrQnlUX106LjdNPWExJXV1cmBeISVvS0omTHIlayVrWCRSVzlCTlY2KDxkVGJpUTMvZGFYJixaVWNhNX5ydF1SZSNxbVEzLz5i'@;
put 'VT59Zj04bk99Rzh5dCYjWUhwdyg7d1dfZmRsUVR8QV1ZeSNdRUNeM1RNXTIyRXFmbzAoZG9sRFUhcV9YJkpNcmhyZ3dkPVE4PDhyZCU+cXQ2biRCTnJockFUNyNwN3BHYy81O2M5JlozVTIpOkRRJnZffWR4TTlyPGxWcjkuUjs1SUBxbWBTRTlwTncuYi9keVpxYVZGTDgkZV57Rl9ve25xYmN+'@;
put 'O0IoKWl4U1I8R1crNC8/ZE1COFIqbW9aYGBQaXArMTpLTm08YGRjZntIdFg2Xz8rXTVlTG54Qn03eS5iaChSLz8/emg4YW1HYFY/ZnkzXkV5Nn10Lyk4QlQjUWZiQjg5RW0uOCZidCNdaGJ4XzxYQ3FUQEEmOUUpdUFnRXxwUm9lTTNqOGZkVFl6fTFQMGAyWXNFRGBZS0lCMyVAXjZqTGhsd3dZ'@;
put 'KEcpJn1NQ2g7T2I4QFt3cTlgT2dOLmhENXNbdC8odEswek5iQkRhUClfJGFeZF1aTj8yI2MxZnduOW5HXzNCUzVDQ2xaYU4/UE88RU4rOjBITmlXflBiNUliQGZXVyhQbTguT245PmBDbiRRWDxXZ1goYFtwKjVkeGcmRHY5JkhuNFp8VFgubnZAfS90bDFfb1hFbn59fmRmQ3hRbVRNfkc6OUhf'@;
put 'aHYxYFdAX05iUzFaLHUmQWU/Y2VOYW5jK29wfT9qVnFMZ0VGck9OaXhiYjl8bGZIYjFxL2svMCxxfldsSj5sbjg9b2FkPlo+ZUgyLHc4ZF5tdXU+ekk+JmY2XT5FMV8kb0hxKWQicCJMckRdI3UwOXpSa1BzTmpCdz9YIThCOntlWlRhWGdCPlNkTC4kK00+MEVBa0A8MC4vJHw4K2lzPSs0SzQ8'@;
put 'TnJ2Y0l8Qy5kTCMrPUJsTzI1TTdtNkF9OTVJZmh3UmJXQjE3bVI+YGthZVleLzJJNnNRamFLPSsyNDhmT3J4KkpFWjxLQm1PI25+JiJXMyskSFBabXgmMmRxZj94VDhwOEJYXnBDUG4vZCovazN9PkJrTCZVekd6XyxTRDVTSXtaYnBeR3c6SzY4Qz5zQ2MldiFeLkhVNk1VdjhjNzFAemYlPmNZ'@;
put 'Qjgmak8iT0VVTHpwMCovIzhLZHIlS2BOY0s+L3BlSXZuPnVzNkg/YypoI3A5KSEsKls8bXlgY2YhRFEjU19XbmB5ZGdNRU5KPllWYColUUcwPWhLaT9dV1tsUUdYd0M9OUlGQkA7ITRLYkdUKGpoWFskdjRZOCFwTCMsbylsJjh3Lk0sUC8vVSkpKnU5Qi5PdyVyVGU9MUxsTHVGMiRxVUJOTTFx'@;
put 'OkhYbCRAdDRePEpFZ3FpaSw7WFF6LGtaNV9kdVV8VkJALyRaYChmZTtEOHUzT0l2JUxhInB4c19rQDUzfUUkW2dRV3xUP3Y2dFFCLnxscls+PXlQYUtzSFR4ezp6PUQmXSZHZm02dEYwRHIsMDouXjwkLkUlMSFhblpBRUV3fkFDfDo6OzE9ZihyNVM+eGYmcFBgRXBQLilqMGU/UFpXOiFzRVM/'@;
put 'PyJUQU1gVHpCTHxyRk5HdUZDWTE4Yz1WLilWPDpVMllNN0tbdC9fNHlLVzFGfjtrMUkoMVdJMzJNZ2B4YGdJX2hvSDUvSXc8Si8mfEZCK2FhJmA1MWZBfnZOTndMQWwsSHoxSj5kXj5ZNlcxN2VlaUdrU21hZC9mR3NKJEh7PSZCOFZ8TTU0THdaeElLVlJ1L2dGMW86YV52a24/dT8rX2xHK1Vv'@;
put 'c0FtcSgwYz9EPzlwOjFbc1RwdCUsUXBUNyU5eUlfejJCbk5NNWNGTkVgP2lHbn1ZaXQ9PDwjVUouV0tPPXE6O1dwJE89aHU6dy41VyxyaitaIjwpT3heTShEOmcuPCg4JTkxcz5SZC5xd10mS0BgOC9EPE8rJm1AJVVrcHdIaXN0ZSQwPFlAU0NjZ1ZoTCtlbHoie1AkUUtte1RkTGlrNkBoRDdu'@;
put 'emYuSm4hQDFMYj9EPmtPKkIsWEk+d1VDX00zfDtIKSpxUDwsZW19aDMqViQpWisrXmAoZlFkXUYmNE46eyR7P0IoTiFFK1ZpWnNvV2N1czQoRCZ4KlZRMi4pRk4pRW1EN3g+T1krO108THVafC5GYz18ayo1WWpGfEVVKXh7eVFmdF8wM3YsIm57VjsvKkZGVlUpKkNRejJAZUMqIWdxLihuYzEo'@;
put 'JGwjTmtALjMoQiZGKH0kX0x8TmtObnlUN2dpc1FPQ3FoSl9UQE99ezlMRW5kITs2c0dWeEsjTXJba3slW19qRmVzZSQ0SUI4WyglLH5xZVokcEZBXmI1TDBlfjdVcit1LElvJmp1OTZXYEllSEk8YD5namtSRSZWcj0sMjghOllhMEsraHVaJjBQaXB4RVB+PSxebHNufDUvZ0ddTGtOX24hKVZk'@;
put 'bTBgSCpBblAmJXJCVmcmKisqaUooSk1rPkgjXlM0NTcrLGMsU0cjNjRlczl9ZFRuLjQ/W1dnJkZAPiU6aGZ+aUc3LCM0NGFHSD1qKF96dDw8UENXcUV3en0ybWBnfStHYk1oZmI5QiFPMT84QnMmSEIoSDVjPnU2JHsyeHkia25OcC5nVil5a1BXK0UlY2ByL0hxPHpwZnw2M1QkKC5kb2s+YEJG'@;
put 'ZCZVL0Q+KSQ4bWFJXXwoKGIxI3A5Rkg2MjVBPW8mdmhOd253Oz1EKGF+MDJUNHU2dUBqT0BWY0dNQT1qaWA0dW9HU0lIQCF0TT5iX00rbV5ZPipeSVNYXkV2NzkhTFA1cjBPMm1EVWdaYFQvcGZyMVYofXRZcU9EWWp3cXxxOUdzcjgxUmlUU3VoQEs+e0dFYV5fbTAzfThySkM0UDpzOFtDaiVD'@;
put 'JmtwYjhSXmgxcXRiMFl3WU8oOkBCeHxXK0EybTFWclk9Zy5GJUVKUSZNVF1bKFB0V0w7LGMvZGs1WDV7JnZQVGVFJVpHY30vTEJWdSZJbyx7V2QxJEhLdn1EK1BBbHFEVW41TkRQKkQ8VyYpSkNaclVkPCJYamgrXmQoNntXL0ZWWT1tJD4+QExWaCJGXmREPk9Ub3FzW10lYVMjQzIlUnlKK187'@;
put 'K304aTYwS258OzFmYGNtWys4MlRoOitIZVRabXk8R25bRl1aLlIxKX1CTiZSOkFxYih4I0xFQiEqRGx8Rkc0UTpuKE5HfXl2ZnxhaFQ2a2F8JG9oNVhoS0UlO1FlfFA8OmUyaX16JXlrdWM4QiZiRVZDUHxgKGBBMT48ezFUT3JDdnY5QHJKQT17Imx+NmtdJnRTaCs8VDBMeERoNl9zR3RWSz01'@;
put 'NUw/azJTbl9ZJCRpTnByOz52VGB3MlpIcUtudnA0XSh5KEJxKlkmZjQ4LEd0MWpLZ0B9Szx5fWI6Sy9qSkdMSllTOl1LXTgsSU8mMkdhR15eMjcmZkB9Xj5iTWYoR35icX5zO2VvYilSJFZiNH0jcls5NlUoIXN8fHJKTnxfPi9WV2lFUmNxbDRAczVgcT9yRVBoQWsxITMmcV9DViI2XSNkSWd4'@;
put 'R0QhVjR6L0ooLClGXmw2L3R1XX0zYEIhKH58fWF8RWMsfiRULmkmX19GfktjIS9DY3xVWzYqNjllVmYkYnNOUjdUSzpyY2EjfXxiXSNpJVFESjBSU35Re0FHMlFNIU9EaHFlcC85OSk8a3wjbFtgaUdoKmFrLnJ8QWBGa15zd3NKaCY+aFdCJFg0PlFMW01CQ0grPiJCYm5+PnU3JXNUWklWSmNz'@;
put 'KVg4SEw6bytvUzQiLyJEMz45TXlrMzVOXyU2VEVofkl7Y1I9O1kyOTJqaDJ2P0BHfk17PjQ9O2Q/Ml55K2BbTTs+Ln1yfmY2YDRMX0toIzs8dSZTPD9YKS4qXXtWJDw4JGlXVjYoMEpQO1twNlIidnF+OH16aS90YX0me1FdZWF5MSgweG5JOGBGOip1SFdMS2RHfV9MZDRoQjtCYXlIfmBXTTxR'@;
put 'PCgpbDFoIkx+ZjZ9NUhSTCpzZGJBOWNzLnB9c1JaaDJ+eT5RbFtQfWNSejlFKFE9VnxdW207PztRMjkybmgsc1lGaX0+WyFwbVc1fWV8Iz4pc3trZ05nbntdKkBhbnMxNDFQVnlTfCNWWyoiX3N1fmBxfCNEW2IkVVcifVJZclc6ZVRhQ0gxWV4sQXgwaHxFUFRWV1Z8I0k2PnR+I2ZdZUxMIUoi'@;
put 'Zl96ZSVENSs+c28/dEUkX3pkVU5YYGVAfUcoOCl+JGRUI1s8PyosKFJPdmkvemlHMEAxU2RSNz8hTHZWSChSN1lkLz9mbFJFMD5VWG0qSHY4IiNMaXRqREojW2g0JXNZJChScWp8fEU/eWtSPX0rMG9fSGpwdTxSNT5bdnQ3NnEvXStvSSZ0YWxRMURZZ3IxaCFIPi43ZStbYSE5by5qO28jY3Q8'@;
put 'QWJVRWFSOGdrR2ovIzdvSW1YYWxRMXk9MToqVF87IztheS9YN257SUNWWG48VXlHQnhiI350LklgVUszIVZ+aHEyOUNQaXdDfm5kRG5XIkR0YDZHOXZASStdNkd1czU5RUhzSmUhW2o5cExIZVFfRGkveXxaRHNfPjxiNmwqX3w2Z3wjUWkhZz4wcy9yKXB+QjxmJSQ4XTR2OGtGbjlOSTkvR2tR'@;
put 'MStySTBMZ1ExU0g9YDpofkJSey40WUVQaVoqOH0mISM1fkNmZkhFeldDN2ElWWc/VXN4cFVoRi5MV1JlRkcsRk1RL31DSHl0PzZHUmZVMzVSWlpCOTFhLEQ9b1dPRG5QODFMSUA5R2pbRk5zLkJyV3g/VDl1cFVja1krcDFoQSYoWVsoOWBOTSZlUT93c0dYRE0mZVFnLGtFPShRRjlnTWUpJVps'@;
put 'OmBLe2YlUFB2UllEU3E5ZyQiQCg9KEBKWEJpM3ZVIiZxX2YlSFBqWC50MixIOlRRaTNjOVYzVXE5Z1p6UyRwcEldN1h7dHAlJE1mUVksWTdgUEpiZFhbMl03Zz4xZjNjOGoxW345WC8pUz9iZXtNbSxsblZ+YStkRlpuYmNrVGc+ZlExKFN2N0ZaYURlUSREViwoVFBZU1pINVhKd01hYXFmd0Qm'@;
put 'VWdWUmMpczFCLlVnVklYKFRbOGI0OzsuamdaTHlGaFExJSMhW345OFtbUjVVZlBjTTYka104OFZoJDRscDtaejEoMzk1IkNOUXd3WEhNLClbSjBxdFZFW2gqQm1wU1VBIXhEYm1hNGA4MixUYTxvc0khVnlqP29kd2VNT0V2RyMuZFkyRn56PUxRSmVRSSwoW1pRZlF5RHwwWllwYVt0b1V7KWJ2'@;
put 'MWFCZG9VIU1mUUUsJmt5VlF9bFY/fTxZQn1wNCVaNjVWW0s0R3c5aj99OjlITClWa01yY2pRQD9bTDFWI0xaWH1iRSNVRCZSd1NebjQ7R20kelQqcHcjL1JUMDE/R1Ejakd3ZUhkUz9sVzlXOlVsK3tLYmM4Zmg7Z2c2XWZHY00hVlgybjNoKUR0ezA6KVg/eERDdH1qMUhnbCYjKzpfb2JQTHo2'@;
put 'U0glRGRKZ1RIRjtdWmEjLmVOW1k7bG5AaENtQlhqUE1BYHlHJGp1L2JsOW1aUyFQUEh1QytKZkB3e1dhcipHNFk/SEVQWyhqdEs2PlJIaXt9O1lpelUkK25HUzxpV2s4aERIezRNT0s/fSQ6NE9HeV1ZWW8pVFBoWX4uKlFHdDdvZ2I+WGJFLlNkJTI2bFhDMVZbZzIyKzZCUTEkdVA3XzJrbEpM'@;
put 'ZkJVOHpaMWg3S1IvMUxyPzZbJntUMVFEVmZrWWtWN0gsRXQ8VzA2Wl55cXVKTzl5d146QiUlbE5RdkkpaHE1X3l1elozQjp9Y317OVhIVHsoKTNFaEVOP1M5dXViWUhIYWFyUG1GTTZwWldZeEQrLzxmVlZ5I0NXL05dPTpwOWdMZHk0dE9hbHRPMWt0bkhsMnBALlFQa0ghKX42YjopY0MmQWV0'@;
put 'SSxxKSU0JkdIOGY7QyVmQWddYGMxIkM6RiY9I0Q4O11oMDY3Y15Ld0Z4IiE1QHUkREVSJGBURl04VmlvKVlGUz58THs9ZjdZSSwzQnswelFSbXhiVS4wK2coNzZIenFBdjFkS3hWezZweHImIz9dL2IrYDFbOz4scCZbLDMqeENfLGE+TTdHRXNST2B8WUtsOjIxeUh8cTJOMF0vLFFsSF8yY0A9'@;
put 'KHxLMkQ+TnJoaSl1S2d+QkRgUl5bL1Z0a3spWC8yaFRBOG9vRmhARmZwdzMoQjc2T25xUWI6QGhdZSQ3Q1BtNzZRX18ldUVxfCJnUHtRLGBbP11SQGdbaCJHWFpveCtWOXk3N1soR29OMFR3eFMpJEVlQTxHblBfa0wpZXtoVCl4cX5PcHdhdTF9MmMuZTc+VTdOVmMxOjdpUE1EYmFTU1lWfXFe'@;
put 'c2hqYnFVVzphSmAhWXM6JiZxcDQlIlFae2wsWztjTnxoNXFZZzFqMDZTfVt7MSRlSiJkfD53MSpxUSxyO0hxRE0zVCU8WTJRbCpXWDJsKHc9Rzs1ZjlTOX1JaXt7UTZ5V2Q6Unw2LERxQmFRVC9zQ1hLaXdUPEQyWkpxc2hsZ0s4SWBUcEJxbGJyPnxhLGpqPm1WblZEPiU0Il4qLnluUzU5T21D'@;
put 'VzI4cktQL19Hc0pPKiNRXytOTV95WXJmKWpweXhTWEl3KywjUV92ST9vbnxfYV4vVnRve3EpMlRUMn5kRzdDTCJFKCVCMT9dTXArYEYoblJ9PVpdfUc3UkwmJEp0U0tCYXxCYFpnWXdBOEJqLjtMWT1nOih6SyhFN1tUS0B7MyRYezM6amliMUd2enNwbWYza05KJk1yTGtFanl2bHN5YUVgLjI4'@;
put 'UzA2Z2dPQDcoZEtoZGBBPnJzPGNJfkBuOWdnaV9qW2U9OnAlJFFFayE7VmpidztvNzs4P2VkMHdsWTdvXj1TVSVPclphT3h4c0xbT1pOX2wsNDg7OHlGMDpoPiUmTWIqe3ViTD5gRUFlKnsrLHImVyMlXWAjUnF4YF95Z150XkJpYW08OmwjfmR3eGlwU2hERzg6I0Y7bShhKTQhRCxxRWRTeVR6'@;
put 'cHxlYD5laDxlN3MjYm41LHB7V3w+WSo/NDlOPkZ3I21uSH1HQCtKK20hQWohTEI3YTZkcTQlTWJGdUlMQVZGZSw3VWlfX3d2R18+VSVlQ2lNQF9yJUNVSXVJbHVyb2RJcHpMYm01RFclM0dJfmI1VTdmPUA6ezR5LjhFbEw7OmJRbitfcFFvI3pGeHZIYkUmZmYwNnhBW2VAO3EoLGNZLEouI1Vw'@;
put 'Iyh4N0NaJj9JV0tTfXVLOklhZHFmMSRfS3ksa3dZe2hlOzJIe1cuJjhhKEQ7aHlWPkgyIl4oOH1HRUdVcTE2d2F5WHpoP0NTZWBBcCl4PWJVRz5oOC84LExFL2Y8Qj5fOSxMfU5zdz9xeE1QeVdhR0BpVDM5ZTdiNS4rWSZtJkJ8NjkyZWAlLlVFdUJLKkhfJmhNfGs2UUR7fHRHbnQmImQyKkIo'@;
put 'e1pXYjAsUjsyUCtgZls1TTpwMioqM1d1UV1QSzA2MEdKcWdjVVQ+KDM8bjlPeFkpb25LcTlaPmZ3OzAqfmR8TUZxUzkwYDR1R2V4P1FmNiRKeGdyIXxHa3BoRzlWI2pSRjRPYis7THghWGdyQlQhR0NFWkpSMFFJJXFZan0vS2VfQF83PjdPa2Q+bXdocEh5YnFLMkVpa1lLd3xnZk5FclFEVWV4'@;
put 'W3xLO2NhaG47ejx6OUo3aHBTaCFGL1BucyRjIT1NWGdeJDZuUnI3cXw/ZU44d2xYMEp9aHNtLjlxYG1uMjZoeFsvZUc+IT1iXnF8fEc3WmgmMWN5YX1XfnFtZm44RStsNy9vWG5qL3sjcE4lRXg1Vj5tPlZnaVRLeSl1WUIvTjBAakdvWjNVUjdDM1Nxc1suN1haUHtGQjVRTXc5JStjRn4hPVQ7'@;
put 'eEdvcGdjQ1g/cUZZSEhFRD83dGp8OHxeNiUpU0AwKztvOXxHWil8dGJJRz9kMX0vTmxjQUM+X2QpRCJrKmIjJTQmJUdvYkY4UWwwWmlsRHRLUE9gNkBpVFJiSS5GeWE+KURWLy5HeGBCVkdxLFd9ZSVXS0xGTnZXIUZ1UTJdS2skNixpcjcmW3A4SF5bPFpxTm5JX08xS3FINlU5PzRWKykxdn01'@;
put 'dy5KeX0lQUFbUGg8W3JTQTNYJm1HPTdmUnZfOmlNbjV+bjl+VVJxTUghIlsmfGN9a3xKZntHeEh8QnFBZU13ZTFseWtwUWt9ZipoR2A4ezh5Y15YdFF9OyZZNHNnLzdacW5Nfi9xZXF7fHglZExlMHtuXXczKjYqViwyXzoiOExeRjxKXyRVPWc2amIofHgkNk8lNXhwMkQ4KFY2QGw/JiVBOkRW'@;
put 'bUppdTZWbGIkO3FPZSxvOHAqWXBddEtnQS5iUVg+SkU8LkpUKnF8I0QmQWVyLEFTU1g0PGNJOWowNncvXkt1TE5HNFo1VVJqRVJPe0B5YDguWikpLC4wQj1rZmVOK2dRbl17ZFRZKDVZe0NAei40Q1A2OT9oO1dKKVRwQF5UP2I/emdiOCN9RHIseE96OUsyIWJsVCZGITB2V316Z2JvPXVTV1c7'@;
put 'OjhZJjJxQHZTKkMrVDs6XlRxQEBgUT9mVjs6MU5CMj5DZyw7YkFTS0YhMFRZMTl3PDlxI2B+Ujt9aDk+QzxiYlJmR3NEJShmYyFkaC97eE9EOz85ZWUwRmd0VTM0M3ZvZl5OPTJwfnsrbTZIWDJ6cklNKX5AXlcmZ2VSPGIyUVlIZiU3Qm1ZSkJMR2ZxNSlqP3Rgdn5JLkBAfkBINmI2XjQ5cXk5'@;
put 'InU9IUhoNEQmVTAjQlpmUFM/WjArZWEpYURCQWI/Vzo2SVUzLytgYXBHPG8+MTt0KHFMbDB2XlZqUEk/VG0rZUcpIXw7ZV9dVV5kLENgMTBCWTUwWUJZOTNnTkpAMXcjQG9vWnRqSTpSM3cje3p9eiVZclg5dTtiPkkkRHBiPklJRGZhPzFAMTlkPz91LzQ/LnBUUFNgSE54aUNaWzVYajtQQ0FA'@;
put 'MTQ4byUlRHY3K1t9akNOVVh0R3F6ZmBmZSJOdXYmTlgwNXYiTTxyMW52QDtyRGRueGgoL1lUV1BPI1FvJXMwWWBQPmJ3Xl90VX16SkFfclZuXkVwOkI0O3pGdUAmQU9wQEM/SjRWPV5ZJU1fcDU3TzI/YlVIQXpaTEo/c29mSmk5PHVgTyhyc0ldQUFOOFd7K341QzU1cXszL3h1ejt2X00iNCla'@;
put 'Ryx7LHUlIzxLbyJBRihMTzFFIkp2Tks1aH5vbj96K1psdXVAI3JPTUIsWExncj9iIilXRGAzK0MsVHV4MWQ/YkZifXoyWkZZQjpQLHsseWl7cVZIKFIkWitbTD9yWyx4K0RMfUQ5djpeWyVOU3oldm4qWG8/Vk9SaHxqVEJ0YGFRb3txZkpCLHVtc2pnRyM0ekEpS3FWdEVBTkVtc2o/LyNnfk4q'@;
put 'NG9iOUw6RiJaV2N0aj8vRzFAMVVpcVZvRDkzXjc7dWRETUoyIih9VntKKXI2WFpkUioueEJOT15pO19+V3c3dHhmZ3lCL0lDSE9HYDIweUB3QCg3aCxzaTY8RXVXX0hOTj0/VkIxfmtBQTBZfXtLTFg2cm1FQixMc1hodWpGV0RDdkBGYyp8WlFCYUtzJUQwR29yd05mMHdvTV1HbVtbZnIhZUFH'@;
put 'ZGUqblpYe11+Um51eDtAMUxQWE86Lmt3KlRBYkB3IWV1Y29iKUdNTSEwbz0zPD5yc2pudF00OXEuJHZTVTRVTn1dIiE1SUx3ZC96ZzxYMG4/eltZe1ZNTVVxV0omIzMhcm1GTX5Oans/TzpyakAoeiN7JktgczBHcmohYy5bLn0jXVtnQDFfYDhbWEphRTI6cnBYJWtzbl47PzxOKHd4RHVgVmRv'@;
put 'TFUzaEUlM11POEshMEdYSn5xJE84PFRBYjxZaVdxQ0d3VWVOKzxiKUdTRmcsL3x9K0I1alg9IS9NOUA5bkd0T319K0I1UVhuWGBONzZxMmZGfEc+RTxuaGMoWmFdZ1U9bFF+SjE+OHJQezRKPkNeVkZMIVQmTiQoMkR2K056IUxKent7dXdtOl92QldZNXhkZmV3fXFPdCRDKTFYOHVZTzFbMTN7'@;
put 'NCQ/Pyo0T2suJURUXVJqSnhCbHRBLk9JSWwyUStkM0wsKW1nZVlwdTImM0tQUW1KOUYzdyJfVSl2ZXhkN1g7d045d2NSOSpZdzJ2bSJDSUg+bmpTPitVTS9BZWdBZjMjV3NPOHQoI2RQIlpGcmplY3cvbl0yN2hdQEE/emNYRFlPNy4oWz5iSihXcmplYy5bPUglXmBlckhsXjN3eyw5PHdaUCNE'@;
put 'K35tfm9afXo8cjZtT24lPU0pUjZbYy8rZEIrK2Q+UFp7X3p8V0hWInkhZXNhPCpCSmk/dGBkWm1VdVZHWlF1eyxiNEBvQX1BKFdofUVAMW1CJFtvRy46OXYoVXRFOFlmUG4rVFA1a24sbkR5V2BOSWQqeFBqIVtgZnpJSyhYdkN2VjNxb3RqPXlKYkgxRl56SzFMLkBxNFU9JShLdjo9ezlKTSpG'@;
put 'QytELih7LEx5XiU5QyorUEAmeXtQWCQuVFlbWXdRaENHY0VYXUhofWQ3OFZNKUlpPWVhOldeMWJYMFM1eD4rJFZNcmJhKkE1WTF2OmA+Tm4qc1c/KCk1PiNbITc5bXZzNjc9ez5VOnQiNUdoXnd5KGdFYkJrT3FAZ3QuM0toSCNWZiksOUQ2XmFsU15FYWI7Qj1ndTh8eyEpUWJDNEtmVkQxflNo'@;
put 'fHlISSZ4P09Wdjo8NjJkQDF1OkBvfXwuWzRSakRAMSpgOFsofSRbYl19K3wzSFh2NDRbayU5eykpfkA0UyJ9d2hUUlFAfUlHISRfPkoxdFMoaFBYSTV0dHZMPEJGejR1SllpPFZEMWhtM0lfVm8jeFl2KTdYImombUAmQTxobnxfOnpPWiJJelJkU1s/IkhLcX5JdjIlUTtDR0xdbnpRfGxXYF1f'@;
put 'Y1MsP1dUe0tPSSN0d0NYWnc1N0VrUXtPfEB+UjtNJWd6U1R7Y3llQkBvWDpZLnM2bDxEWX1dJkcuRmJ5MTReLm9WNC92TnJqL2IuWyFgNmJAMl1PTUcqb0VPYChyNmxIaTlSSlRKbCJuSShSTitpL05ZPlBhRG0rKkkqcnNqKy5GX2dFOkA7VCtucWJ7K21LRDVqLmVUV2IhYmxebEZPRWNWMCNS'@;
put 'V2c4RmM5QkAxbmQ/byZ+aWFofkB3YFFeO3lBd3dpQzB8djhsNGdqTTN+L11OL3xHV25wP1pLbmg5VTQ0ZT5RaGtFT0s/c286TVUzaEVkVk0zV1hXVzlWUi99K09LQzVFUn16ZFVLNXZfX2hAMnROb0chME5qUkdVYF96Ull8NEZdTVs0eyw6TCgoUitOaC9qQzVOdTI+YjJAZ1lOdUR7UkdyUnw7'@;
put 'cjZzQFUzRjBnTn45S35LKUhTWTZ6eVVXOX5iczh+e25Aen1URFl0Pi8mOjtfen1UU3VZJjtiWz9rd05iP3ouVEdZRUpSP35GKVMlTVZLa3pnYiZicz5ISCQhYn5qYEZLPi5XK1RgVXohcSxwaXdlZSl1M1RGWmJmP2JnQH5AVEs/bVNpOTMhSylHOSw4JDckI3pgYX14RSxec1t1Q0glKmE8OVt1'@;
put 'O3VPVitzYkQwXSkjYHd6TVZYbXtYIWU3OXFlakZOPml5bmVmRm1YTF4iIW5dVDVEUXcxQDFlOi9hXlpvajBOPkV3UHAueyxaVTVnO1kiSzRocH5YfnN9dyh+QFQqXnE/cjIseyxhJW8lN3pAMVVqb1hmWH4+VmRhSmk5IUs2cmEkIj5WZC9NJWdEU1NkUmJLOkBfdnoka1lrW1tDTW8rMGtOW3V6'@;
put 'XjsmJn06fVkwKUAkP3t2WyFZUjd5UzhGOnNrNGk+In1yajFuKVtZMnBJfjliK1ZSNGBffnEuZHxCdU9SRko3fl9DVnhIVjZ5ImZjTGpzaFosJSF8WjBUNEJCMGMhX35ScXkwVXpbPGlDfiEzOlNoZyZISSlROUFmaCg2aiZfbVBUYD5ARnUpfFhvJSk9fUlNIzdpSFddZTNLY3pmV3wlOUdYbjFw'@;
put 'RlR9akFVI3JfWClQdE4wZkEkQHZJJXhdeTRGfWtpSiFUMzd6RSNQWmVEIit+MUc4X1c6Tm1wbHsrREwqU0NjM0JyJm96QDEjYTtvKVp0anlFKDRsIlRTLHVVIVl8TTxwRiY7IlhkaEhzOG10fV5zOlVkRz5qV2BtOyV1VnFMRyp2N3ZoQ2N8X254Rm5XKzN0ZX5yXXZ9IygoSiIhfjt8LnhSTGx5'@;
put 'TU8+aiZoXixRQmw+bFV+czoyMDhpdkFyWnE8O1chK0RJfUpdeDQqZEs6OStpZktMWTYzTmwuU11qe3Q+O1JsIWx8fig7OyI0IXp4fnBfa3R5UTdSNVNofHFbajZzfj98cnd5RjRRMygjSWloK3lsIVlxVjZQeEAsbypsJk5bOG1SciJJNFRIelQ8Jn0kYnwjIyg0Qn08ZV1pMzI7MXM7fHhIMyos'@;
put 'WzMuIk5mQEokIksxRF5FS3t2MjI+VFhVUlN+OXIqdnxdLFl6OTRYSUYmYCxVNEYvP3EzT0QqcUQhNkMsIUw8OX0mTUhMa2AjQTA5VmtYRmFdJSJwQ2t+QS5hTXp8ZjU3dnEqaENwX1Eid2tmaGd4YExwP3lwUFdVR2whTX5RTyp2SypQLnRzPFZ3Qnp5c2gxRCJQRH1LQnJ1VyZaSEBYb19RdlBM'@;
put 'SDwvYWh+fmUxKjx9OWkzfWQ9cltqODc8cCZsL0pKJjoxZXlIJmBhO0oiKn06YEhnVDR+TmlObCFQfjRbMipSfDl6OjsmNEAxcCZqSntsYylGbUY0T1l4SzE1WSxBbGNzImV3a1tzTCY0Rn04X3xAUCZoO2V2V2whV3NmMGwhVShaSnc6UjReXytVe0xRQF9qfDMhWVYhYXxYTD5pNV9UZFRuSDhB'@;
put 'MX19QTIuaXlfXlJnXyhzPl8iM3l2anx4dGlCZnpScUlpUiNydlVSY3w3V3RGN3dwQ0x9JnFLL04/QExLVjZ9TnhaKWp3Y3M/LGx1bF9UZC5lTEA6LGVzI01iK217VVJGaHh7WEZrXVMzcENQfShxeXlSYGlwOiZQVntTYC9TWCg5KFdlVF58dl1PVDRRWDlxZiN9PmAhSyw7YTQ4SlkmJC5TRUFA'@;
put 'UXZtaHpKKEV4XzMvUld6ViIkZm5AfjxjeztVeGJ+WHsjNF1LOCFhZmpWQzErJmpbSilUX243ckpyfEYhIkJhe0NnLmVZTCJQQHwqaip2NipILmxzYHxeSTtRKXNqbS9DcntQW3p7bHUjcm1rNk1LXW42cGs9XjdZPy5FSFc0UzRpdFp5fUZGe2pgV254MlQ8L31wcn5mKmBIaXZGY2A7MFJKazB3'@;
put 'aXsmb1hGQmhEcCl2TFZ0c3VdRlhkWDtbUVdFQnRMQzQzM0RTQDV0Z1N2RG5iPSokVzVuZ2dkRChuNnlnR1pWNVtnQWUhWFdqSH1zVTM4Yj18TDFiYlh5PGRmI1IrUy9VNz5LO0Z+U3VuN00hPTgkTXBUZUlXal49ZUVJWDFbK2teZ3YvW1s9cT1IJGtuPFkwfUpsPiM+cyhLe31Xd2JLbk9ONlB4'@;
put 'Pj9ZK0pZM1ZnIzN6SGZ6UCtUVSluJmwwRj46aWpCOGdbP2pnc2dvTHdhL0Q4TXM/azo2QDM+P1ZuWUNUWSs0QFNvVGk8UlQvRTR+XWJsVkovKUkjOF5ifV8oej4zTVplNEpnUzojWT9UYVRdJGFpQVdzQG1pVVhXWipnO2JScDhsJF4uaV96dVZ2NjBxWTR6YTExWG85THpZamBeenk6MShsam9R'@;
put 'SFV5WTxlRXg8PHR4Nl0pWF8qUypKUkFzPVsvPFpfbSVrRmtYbHg0KF9RK0ZnPXpdc2pRYzdBaVNPSnNqaVgyOltyY2EvMklbfHlbTHdhP282aih8P09uc3gwMEBRZ1RxZzk3ZmNDWzEuLyghOUtDZzIpJSlXYCl4IU9maUhUVmpsT35fXnA/Vi9HLDIwWmwpSkk2PSNBcDBuMnFtaiREQil6TCZM'@;
put 'Lk0jaWtAcWh8U3xQRXVfIWl7QGNgdC4pXmU7QD4iOyVAK3UmMnh0W0VBU15vQnVQczF2b0pvai80QSVfI2FeLGp6M1goIV1oZXd2U2BdIStvd252IzI7eW5icyRLVlNBODc9RzpaZTFiL0JiMH4jNnA3Q2U7ZmRQVzRZfXFdKVtFbDcpdW46fCw+V19pMEVtZDUiJnshKEoiO05xU2NtPDQ0eiY6'@;
put 'QUFtO3U1UWAoOWhVdj9gJCRGP183ckZqcG43XlNjNHJINjExZWMpT31MJkc5NVZBJnw3KkQme1Ixbzt5M2RMcSVALDddaWl0Oi5YUCFbe1BMZEhTMCZofXFib1FbbVlebC9fZnspQ1NNdmd6LlFCRGlbO0tQIkBtRUgjX2wmTiVBZUtUTkNgLnViX1ZSNiMqQmpXNT5PMk5yI1oxdS54KDF3Myk8'@;
put 'L2Y9M2Q2PGRwVUB1LDgmSW9zP2kpXWYhcClTb3dIZFU/aSxdS2oyXSp3ejYiSzhRZ3ZwQDNiQDc/MUI2d3YuKyF7TG1naXJNODshdG89RiFVJldoLktUQz0/Y29HQmZpeWRkbWVnN3F+ISEhUGwiIkQ9dF0kP2NAW25QU0UlYnUsWyRPVXtXKmB1PFcxPkwwOGlyKFpnbi93Qm5ROisuSiZ6RHZG'@;
put 'fE8oS2RUSytGRTl4P3xqLlYlJUcqbyl2VSZAIXZgfDcxJCUzdnReQCRvVigxfX1JWmU+ODQ1aFdkV0x2TFYlP29vQmFAI3ZhQ04qZndRL1J3SlYzbSssO3UkVDUoSkg7WiR1KnBAWV57L2tKUkE3In52WiZOdk85WThKc0hvMi98QCJTNjQrInhdJndhJnkkaC82dix0LGl3KigiOEdAW2JvRURk'@;
put 'PUUvaDVDdjJXa0g5W1Y2dE43e2dCQjt6VWRTKUFINFJpUDdxIXZKOm43MVsjRiRIXmM9YTJHQ01yY35DKyRNLEIhMSxmalt1M19TOXlUNEJ8RGt0ejVKKjwmLkh3OGB9Py4qXygsaFJSeFJYXyNeZFM0cExUOGA/L1Y2XTAmKTBzbGZbWmBzRlIlOlhgQjZBL1V0VT0rXnRjOXtHMWYrJlldb1NN'@;
put 'djhPdEVeP3RxKDA0WUdCL0BbbFBFLD1yRiJIKUZZNkpscFcvKiR+RCJOOX1abjl8czx1YHNaW1JMdFZgIWpEcW0seVFld1hSPnIyYzU2MXJWQlVfTFRwKCgrYWRHT1ZPUVEkWWZaSm4sMGEhdiVATSFoNjtHTlojNF5UUWhHSyF8NT5pezJhYzFYKSRoPTZMbl11aCZAPywlci9wdHxlU2ZdOGZZ'@;
put 'MHQ4V1FGV2FDdF48bTgjOkp3Qkh0d1k+fk5Ddy5KbFd2WXtxNnA7Zj4lIlprR04yJGt4Jjc8OChpN1E+MXtOaE80NDlXXW5sZUJ5cFhmdFRgVlRQX1lIbCU8MDQzV1tTfDZGNiN7SEtObktYJj9DcXUzajUkJlQqazI5Qyo6TikmTCE6PjgoIXw1MzRNL0A5UipKI0FmR3AzNjlUViNgZVd9YGk3'@;
put 'eFVpNjQobXtac29VO0JldiU4XnlLeSVYWkFvcU1IWjRZMU9yYVt7elslN3tfKy8jWjFGWWowY1V7SkRgIV1lU0RgfC9PNSQuTC5zM3xTLDlHNyEmbnt8NGR9RDEwciIyM2FtdndBQ21+Q2VANFprWG5lVVk+XlQkM2VIKTM/fX48WFl6KypXMFssNHxDJFU4I1V5OkZTYjkxYVdWQkJ6dzdgV3w7'@;
put 'UW81TUxvZiV1TGk/TEJobzc0Jl5sYHR5QXc1UypsOmlqOU9mT2sxQlVZWGNSU3ksLGNsfXhpTm9WZi9CRi8jZlR+ZDBWa1t5PXVkQm52Um00WUV6V1pLNCJXa0JuekQ1Rk8wJmtNQXhieW4wLlVELzQ7IXJLZTEoRTZCdUl9S0kzV2BXdCEwKlcjeVBfdSo6UF19NTt3VkZyci8hcjhMbXc8Qigp'@;
put 'YCQ0QEBlYGU7bzNoXmVZWTEocGV1SntvNjlLQjU2dkJrbyREUCtPejl0K1NzcWNMYFEqT2N3dilZcWhtMnddZ1tsdi5tOj9wZVUpK19yLjx3UCxJP0xpfj9hfG14QnIxYzluRHZ2aURdbilARHF7QGcvcHFwXTlYV2tsY3pdVWpRdFtye0hYJlVJUFlTR3c3JnpSYz9pZjU2IypuL2VfKT1JNzRO'@;
put 'ZT4qQyslNzZ3RTVWX3E3KiU6STc2VkIhdVdvWWU9K3A/aXwzPFJHKlF8Myk3dEptPjg0LFt7KFV5cGJScE84SDk3V0lGOG8vPSRleCVERTp7Tjd+YHU6YkRwUG9MLzV0ZW12SChdWDNPPyVGO3kram8rMVltQTNYLjAxSyE1QSVPSFgiSWs/P3RQbXBgdi9iTWxxakZLKzpZI2duX2A3SiJHSjt0'@;
put 'RjMhPkM0bWF4N24rNz9eK1JFQClhQCtqOEB1bVk9ZUFpczQrOipGQDZXL3Rnfmpgdl5XeHlwTCNxJnYhYzBmI1FZZW18VCYpKU4jdXN1OU1xXiFiZm5AVlZPe0peXkQiX2FDeFpUQ3AlTENWPUJCaVF1Ii9qY1FkOjBhT0lPJXxySjFvPWRDPnUzal52O1teTCZ1WGNCKShtbG5+WVFBNXNuRjF3'@;
put 'QSVrNElaWCVFezRNKXt0UD8yQkJ1bXFTJFZ2TztzNH1rRkYhLGopfSJHQGdTMXhaOjl7Slk2QX48Xz8oK015M1hjO0oiM0NYS19aZCZ+NmpQfHkpb2VmNVpYMC5VRXlgPSxKKCNnaFRsejQ8cklaODopPHRZOXBHLDZXZEZhdGBlXldfVSY5PURabjZlYCluR3hRK0MzLGtGeUlRPHxkRm96QV19'@;
put 'YHZCcSxpKFJIIUxQSF5uSG9LSDVLLG82dCMuLEN8cD9YcWt8KTVyKzpWWzU4aHhAKjJZVEwwLGAzWV1EMSZpX3RzSi9HZmZLWmpyIix8dDxINVIhXmk6KCQ2KTw1I0VWN1NoeD1BLkV1K3h2fSxedFBheHs7fjIuVlV0PWUyYGtGIXFpInldYyN3Vjh1U3NtNi43aFIpeW5Xe3tkdHV9KkxZMnVf'@;
put 'YHpqUj9xYTRbOHxDZVdJK24od1RrLjJZZyouYk5CQ195Qjt9VjIqL3IpQyNYKyh9SEQ5Rj1MfD80PTtjN3g2JW1OQDM5e1JGMWgiLi9ZRkpjcVRhbSFKSTQ7OihGPFU0SF1PZyxIdG1VZz05Q0JbOjtOOUNHNzsvfHVDT2oyX0g5VHF+RDx4andKPzkyUVRbTmwxcVpDcF81N1BTP31zI1pXO192'@;
put 'bXs6X1JabnM/cWh3JG0wPih8WjNNSV1PPSRzQV1NaEojMGhjQ0s9dV9FLlM3KlJlLzN0I3hZeTZsYjRvRyJNKW1TJklRMT1nRTEyfDxXWmFMVSx6NXt8TlE/PUloM2hJVDM1UCksWixDMHAqaF8iXkJXclI1Plh2KC5WN2JdXzAvIm9TLzhuSzhHWlZ4Oyl4fSNhVlgpeiZjYm5ER0owKHxsdXsl'@;
put 'RFppMlJva3k5UyJsRTZwa3ExXVM8fCUwVTNVM11IbUMvXmlGYjVfXTgoK3phdzN5VUtIRGZoLyJnYFdXT0FqKHArYzB1OipYcjwuMDNVKCxHQT5lKkZsLlpxVlBaSlFXWEwsWiNuODlDfllFcGZCWT1JMlAmUXdBe3FLakVPMV4kckQxYHNub0JKUGg6XzEhNWckPiZ3Z3gpYHZYWj5AIjJGYVA8'@;
put 'KmAhdjBXMSFPPHNqXkNOMyVxVlF9RC40ZShka1pVWV4zV3BLV1VAVStpPWM8KVR7SUMrYyVBKVdrLzQ5NlRZeHxpU3k4UFIrQ3hlLkY+W3dAYCRrK2hkJEFPWjxCcktgNVQzJW4mc0xEImVMSVBqIlQ2ZjNyeXJDLCh7T0xfR3pfY3N7fSN9U1Y2amdCYCZgJWN7QVM+bndOQGJrdTgwZ0Q6eDdV'@;
put 'dEcyVD8+diEuP0A6fCY9bnQwVWRkQHwjdCxNbVhafEYxMVlWWDVkT1NMQUwwXm1UWjN+MSx2Q24hQExYJGg9RkdiQTZMaDQlXjl6Z29zTExOY25XbDQreTk6M3laWm1+W0loMl9Hdm8+QFZSc1gsVG5gU2U3Pl9yRi9IInsvW2poYXBpejlbPytpbHpLYnl7TSgyPmZdOHVxN3hNKmg0ZS9dSCp2'@;
put 'TVM6eV54TSJTVF1PLFpHZStgYi5gcVc5bkQ6VCI2Ultxdj1sMHA4MEJoYGZ6NVs9R0VZTX0xMEJ8QTNffjRiaCZMb1kwTDR9biZUNjdMfW94L3FSWFR7ZShlKEliW257YWQkNjldalohcGg4TzprZCtkPWdXOEhSMkQ7Ij80UHYxcEl7VnpIQTA/eGU9T192VV5fMyFqWyNWWCglLkxjNnNVPjsx'@;
put 'eEklS284Y3pIX1J5OW5jOzF5TThZMzc0PFJOZVgrUHEiVSwrY35FLm99IlZ+UzA4e3FjfjQzRGJQNDFFbFVqfHhiRUxqXVskQE1CL2JZRjRQb1Y2WWY8ZSpOIVk/O0haXk46YCNdNE00Uip9dUk/dEBASUw3JnV2NXF5dG5oRHltNzxOXSIsNCQkJlVHezdNbXxFPjQiWDJ8fW5QPml7VFI5T3x3'@;
put 'Tz9bT0lDdGN4MzQ6IXZvfUM/WCU5ajlOdGI7ZShuPDM+aWNVWDhCfSk0ZzlCI3xZYHV6VyUuTk5MU28kfShOZE0wMm0hKCs1KH5wWT53Vkl3aElfcDV8QEwhVF1jKD1uMltZTW5uPlVsMH09Z0I4YFcob2Q5Olk1cGpoOT9EdkFfPyYkMC8mbHkhZyE9amArXT4/bGBkPWB7bUkkS1VofHV7XmVb'@;
put 'JjhaMl80VyN9OV4pTXZYeTdrJmVPLCwmOVtBUH14aUoqJk0oViJfcCYwaV87XVQ5diZMM0dDcFk0TSplUXdEMkBkfktCVzI1WS5YMHhtMH54X08zfTlufWE3QjVyQyVoQzJPfkRAY1QwXmVDYTt+U18iOUA4PWV+biEpQmhAVVFyXmV8Q1RYNHxAYlQ7U2ZVTmhsV3Z2WWw4aXFyUzNoKVBeZjlA'@;
put 'P3c7b3I5a2V8ViR3cjx8Qk9GLmEhY1UlKDglc2ZDKDE8Lkp7cy5NOCs0Z3U9Wk4yPUhFSEpyOHdyQ0ZBImc9dHd5LF1WZ2tnNEA2NkdZRlRndDBgXXxHZWg5PzdrVy5bJG00LiRMRSxqNHAoVkVEUXF+LiJCO2lZZ0xVLjd1UnRebHEsZjNlJVEsXlRyaWY3cjwuNFdtMn0zKGBgQCorUEk5KDA/'@;
put 'SntQM3t6IyRlREI8ZjlPOiV9aiUqJUNlPlRaOEkmISxnQnZ9O2R5NnV6bDdaQEhaInBiP3IwJGc9SG19YHxkTWJaWGs9enMuQn1rSmNTZiojKUQ6MDhGcjRDPGJyfWR7N1haTVV5OlZCfTUrNypTWiZfI1hIfFRiWHJWXWFOc1Vdbypxb3QqfGM4KSN1Yj0zajRoJXpiNl8wdSUwSzlaa2BLZ1s1'@;
put 'O0hRITtCQF5dSDI5fnBnayVPLmQmWFt4I1FvXik5XWEqdnBXKENHJHEiPz4+bChKUEBAaVVEb0JfdHEocFN6NWJ7dSsmKjIseHg6Q3oqW0RTYV5jV15yQGVYQFAiI2s3TG44Um9vZDRWQjRpMmtxLCFrQm03dFdEQFU6OzFfUCNnfTEqOWxxS2YiKjBUPyg5RiJiIlA9Xy53XnNfWGcxQmxXWzt5'@;
put 'JTh8PE9UTGpHeWQocXhKZzd4cCFMfnszc3J7WjVxW3tFSXBdVClVZ2NmJiZ3fWx1K3Nqfkt3eFBsSzNvbDprPSlhOzNOJkcyXjdMOnRNUFB6JC8zJHxGcFImUDlqc30xNTN3VDR5Yn1uTEZ6PiMjJWokSWgwflBgQl94LHo4aEdPMV5mczB5I1VDL3NUaDJTfi5bMUgkISRCNSZNUHg7QicpKSxD'@;
put 'd3x8KEN3PU9KZSh7d2FzbUJpbmFyeTpYVSxsb2NhdGVGaWxlOnZvaWQgMH0pKSxDdykudGhlbihsPT5uZXcgRFQobCkpfXN0YXRpYyB1bmxvYWQoKXtDdyYmKEN3PXZvaWQgMCl9dmVyc2lvbigpe3JldHVybiB0aGlzLl9tb2R1bGUuR3JhcGh2aXoucHJvdG90eXBlLnZlcnNpb24oKX1sYXlv'@;
put 'dXQobCxhPSJzdmciLGQ9ImRvdCIsaCl7aWYoIWwpcmV0dXJuIiI7Y29uc3QgZj1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6KGg/LnlJbnZlcnQ/MTowLGg/Lm5vcD9oPy5ub3A6MCk7bGV0IF89IiIsVD0iIjt0cnl7IWZ1bmN0aW9uKFcsaWUpe2NvbnN0IHBlPXtpbWFnZXM6W10sZmlsZXM6'@;
put 'W10sLi4uaWV9O3ZhciB3ZTtbLi4ucGUuZmlsZXMsLi4uKHdlPXBlLmltYWdlcyx3ZS5tYXAoUEplKSldLmZvckVhY2goRWU9PlcuY3JlYXRlRmlsZShFZS5wYXRoLEVlLmRhdGEpKX0oZixoKTt0cnl7Xz1mLmxheW91dChsLGEsZCl9Y2F0Y2goVyl7VD1XLm1lc3NhZ2V9VD1mLmxhc3RFcnJv'@;
put 'cigpfHxUfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIV8mJlQpdGhyb3cgbmV3IEVycm9yKFQpO3JldHVybiBffWNpcmNvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJjaXJjbyIsZCl9ZG90KGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQo'@;
put 'bCxhLCJkb3QiLGQpfWZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZmRwIixkKX1zZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJzZmRwIixkKX1uZWF0byhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwibmVhdG8iLGQp'@;
put 'fW9zYWdlKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJvc2FnZSIsZCl9cGF0Y2h3b3JrKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJwYXRjaHdvcmsiLGQpfXR3b3BpKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJ0d29waSIs'@;
put 'ZCl9fWZ1bmN0aW9uIElUKGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIGM0KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gbmxlKGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9SVQoYykpLnRhZz0icGF0aCI7dmFyIGg9SVQoZD1jLmF0'@;
put 'dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KF89Yy5iYm94KS5jeD1fLngrXy53aWR0aC8yLF8uY3k9Xy55K18uaGVpZ2h0LzI7Zm9yKHZhciBXPWQucG9pbnRzLnNwbGl0KCIgIiksaWU9Vy5tYXAoZnVuY3Rpb24oRm4pe3ZhciBGcj1Gbi5zcGxpdCgiLCIpO3Jl'@;
put 'dHVybltGclswXS1fLmN4LEZyWzFdLV8uY3ldfSkscGU9aWVbaWUubGVuZ3RoLTFdWzBdLHdlPWllW2llLmxlbmd0aC0xXVsxXSxFZT0wO0VlPGllLmxlbmd0aDtFZSsrLHBlPVplLHdlPWl0KXt2YXIgZXQ9KFplPWllW0VlXVswXSktcGU7aWYoMCE9KHl0PShpdD1pZVtFZV1bMV0pLXdlKSYm'@;
put 'MDw9KEV0PXBlLXdlKmV0L3l0KSYmRXQ8MS8wJiYocGU8PUV0JiZFdDw9WmV8fFplPD1FdCYmRXQ8PXBlKSlicmVha312YXIgU3Q9W1tfLmN4K0V0LF8uY3krMF0uam9pbigiLCIpXTtmPShTdD0oU3Q9U3QuY29uY2F0KFcuc2xpY2UoRWUpKSkuY29uY2F0KFcuc2xpY2UoMCxFZSkpKS5qb2lu'@;
put 'KCIgIil9aC5kPSJNIitmKyJ6IixkZWxldGUgaC5wb2ludHMsYS5hdHRyaWJ1dGVzPWh9ZWxzZXt2YXIgYTsoYT1JVChjKSkudGFnPSJwYXRoIixoPUlUKGQ9Yy5hdHRyaWJ1dGVzKTt2YXIgZCxaZSxpdCxFdCxKdD1kLmN4LG5uPWQuY3ksdm49ZC5yeCxObj1kLnJ5O2lmKCJwb2x5Z29uIj09'@;
put 'bC50YWcpe3ZhciBfOyhfPWwuYmJveCkuY3g9Xy54K18ud2lkdGgvMixfLmN5PV8ueStfLmhlaWdodC8yO3ZhciBjcj1sLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIilbMF0uc3BsaXQoIiwiKSx5dD0oZXQ9Y3JbMF0tXy5jeCxjclsxXS1fLmN5KSxsaT1NYXRoLnNxcnQoTWF0aC5wb3co'@;
put 'ZXQsMikrTWF0aC5wb3coeXQsMikpLG1yPWV0L2xpLEVpPS15dC9saX1lbHNlIG1yPTEsRWk9MDtoLmQ9Ik0gIitKdCsiICIrbm4rIiBtICIrKFplPXZuKm1yKSsiLCIrKGl0PS1ObipFaSkrIiBhICIrdm4rIiwiK05uKyIgMCAxLDAgIisoZXQ9KEV0PXZuKi1tciktWmUpKyIsIisoeXQ9LU5u'@;
put 'Ki1FaS1pdCkrIiBhICIrdm4rIiwiK05uKyIgMCAxLDAgIistZXQrIiwiKy15dCsieiIsZGVsZXRlIGguY3gsZGVsZXRlIGguY3ksZGVsZXRlIGgucngsZGVsZXRlIGgucnksYS5hdHRyaWJ1dGVzPWh9cmV0dXJuIGF9ZnVuY3Rpb24gTkplKCl7dHJ5e0RULmxvYWQoKS50aGVuKGE9PnthLmxh'@;
put 'eW91dCgiIiwic3ZnIiwiZG90IiksdGhpcy5sYXlvdXRTeW5jPWEubGF5b3V0LmJpbmQoYSksbnVsbD09dGhpcy5fd29ya2VyJiZ0aGlzLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSx0aGlzLl9hZnRlckluaXQmJnRoaXMuX2FmdGVySW5pdCgpfSl9Y2F0Y2h7fWlmKG51bGwhPXRo'@;
put 'aXMuX3dvcmtlcil7dmFyIGM9dGhpcy5fdml6VVJMLGw9dGhpczt0aGlzLl93b3JrZXJQb3J0Lm9ubWVzc2FnZT1mdW5jdGlvbihhKXtsLl93b3JrZXJDYWxsYmFja3Muc2hpZnQoKS5jYWxsKGwsYSl9LGMubWF0Y2goL15odHRwcz86XC9cL3xeXC9cLy9pKXx8KGM9bmV3IHdpbmRvdy5VUkwo'@;
put 'Yyxkb2N1bWVudC5sb2NhdGlvbi5ocmVmKS5ocmVmKSxKVS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksSlUuY2FsbCh0aGlzLHt0eXBlOiJ2ZXJzaW9uIn0sZnVuY3Rpb24oYSl7InZlcnNpb24iPT09YS5kYXRh'@;
put 'LnR5cGUmJihsLl9ncmFwaHZpelZlcnNpb249YS5kYXRhLnZlcnNpb24sbC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcykpfSl9fWZ1bmN0aW9uIEpVKGMsbCl7dGhpcy5fd29ya2VyQ2FsbGJhY2tzLnB1c2gobCksdGhpcy5fd29ya2VyUG9ydC5wb3N0TWVzc2FnZShjKX1mdW5jdGlv'@;
put 'biBqSmUoYyxsKXt2YXIgYT10aGlzLl9vcHRpb25zLmtleU1vZGUsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzO2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbiYmdGhpcy5fb3B0aW9ucy50d2VlblBy'@;
put 'ZWNpc2lvbi5pbmNsdWRlcygiJSIpKXZhciBmPSt0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLnNwbGl0KCIlIilbMF0vMTAwLF89dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5pbmNsdWRlcygiJSIpO2Vsc2UgZj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLF89ITE7dmFy'@;
put 'IFQ9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyxXPXt9LGllPXRoaXMuX2RpY3Rpb25hcnl8fHt9LHBlPXt9LHdlPXRoaXMuX25vZGVEaWN0aW9uYXJ5fHx7fTtmdW5jdGlvbiBFdChtcixFaT0wLFpyKXsoZnVuY3Rpb24gRWUobXIsRWkpe3ZhciBacj1tci50YWc7aWYoImluZGV4'@;
put 'Ij09YSltci5rZXk9RWk7ZWxzZSBpZigiIyIhPVpyWzBdKWlmKCJpZCI9PWEpbXIua2V5PW1yLmF0dHJpYnV0ZXMuaWQ7ZWxzZSBpZigidGl0bGUiPT1hKXt2YXIgRm49bXIuY2hpbGRyZW4uZmluZChmdW5jdGlvbihGcil7cmV0dXJuInRpdGxlIj09RnIudGFnfSk7Rm4mJihtci5rZXk9Rm4u'@;
put 'Y2hpbGRyZW4ubGVuZ3RoPjA/Rm4uY2hpbGRyZW5bMF0udGV4dDoiIil9bnVsbD09bXIua2V5JiYoaCYmKCJlbGxpcHNlIj09WnJ8fCJwb2x5Z29uIj09WnIpJiYoWnI9InBhdGgiKSxtci5rZXk9WnIrIi0iK0VpKX0pKG1yLEVpKSxmdW5jdGlvbiBaZShtcixFaSl7bXIuaWQ9KEVpP0VpLmlk'@;
put 'KyIuIjoiIikrbXIua2V5fShtcixacik7dmFyIEZyPWllW21yLmlkXTsoZnVuY3Rpb24gaXQobXIpe1dbbXIuaWRdPW1yfSkobXIpLGZ1bmN0aW9uIGV0KG1yLEVpKXtoJiZtci5pZCBpbiBpZSYmKCJwb2x5Z29uIj09RWkudGFnfHwiZWxsaXBzZSI9PUVpLnRhZ3x8InBhdGgiPT1FaS50YWcp'@;
put 'JiYoRWkudGFnIT1tci50YWd8fCJwb2x5Z29uIj09bXIudGFnKSYmKCJwYXRoIiE9RWkudGFnJiYobXIuYWx0ZXJuYXRpdmVPbGQ9bmxlKEVpLG1yKSksInBhdGgiIT1tci50YWcmJihtci5hbHRlcm5hdGl2ZU5ldz1ubGUobXIsRWkpKSl9KG1yLEZyKSxmdW5jdGlvbiB5dChtcixFaSl7aWYo'@;
put 'ZCYmRWkmJigicGF0aCI9PUVpLnRhZ3x8bXIuYWx0ZXJuYXRpdmVPbGQmJiJwYXRoIj09bXIuYWx0ZXJuYXRpdmVPbGQudGFnKSl7dmFyIFpyPShtci5hbHRlcm5hdGl2ZU5ld3x8bXIpLmF0dHJpYnV0ZXMuZDtpZihtci5hbHRlcm5hdGl2ZU9sZCl2YXIgRm49WlUobXIuYWx0ZXJuYXRpdmVP'@;
put 'bGQpO2Vsc2UgRm49WlUoRWkpOyhtci5hbHRlcm5hdGl2ZU9sZHx8KG1yLmFsdGVybmF0aXZlT2xkPXt9KSkucG9pbnRzPWZ1bmN0aW9uIHBKZShjLGwsYSxkKXtjb25zdCBoPWMsZj1oLmNsb25lTm9kZSgpLF89aC5nZXRUb3RhbExlbmd0aCgpLFQ9KGYuc2V0QXR0cmlidXRlKCJkIixsKSxm'@;
put 'KS5nZXRUb3RhbExlbmd0aCgpLFc9WzBdO2xldCBpZT0wO2NvbnN0IHBlPWQ/YTphL01hdGgubWF4KF8sVCk7Zm9yKDsoaWUrPXBlKTwxOylXLnB1c2goaWUpO3JldHVybiBXLnB1c2goMSksVy5tYXAoZnVuY3Rpb24oRWUpe2NvbnN0IFplPWguZ2V0UG9pbnRBdExlbmd0aChFZSpfKSxpdD1m'@;
put 'LmdldFBvaW50QXRMZW5ndGgoRWUqVCk7cmV0dXJuW1taZS54LFplLnldLFtpdC54LGl0LnldXX0pfShGbixacixmLF8pfX0obXIsRnIpO3ZhciBRbj17fTttci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKE1yKXt2YXIgX3I9TXIudGFnOygiZWxsaXBzZSI9PV9yfHwicG9seWdvbiI9PV9y'@;
put 'KSYmKF9yPSJwYXRoIiksbnVsbD09UW5bX3JdJiYoUW5bX3JdPTApLEV0KE1yLFFuW19yXSsrLG1yKX0pfWZ1bmN0aW9uIG5uKG1yKXsoZnVuY3Rpb24gU3QobXIpe2lmKFQmJm1yLnBhcmVudCYmIm5vZGUiPT1tci5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09bXIudGFnKXtp'@;
put 'Zihtci5jaGlsZHJlbi5sZW5ndGg+MCl2YXIgRm49bXIuY2hpbGRyZW5bMF0udGV4dDtlbHNlIEZuPSIiO3BlW0ZuXT1tci5wYXJlbnR9fSkobXIpLGZ1bmN0aW9uIEp0KG1yKXt2YXIgWnI9bXIudGFnO2lmKFQmJiFpZVttci5pZF0mJm1yLnBhcmVudCYmSmFlKG1yKSYmKCJwYXRoIj09WnJ8'@;
put 'fCJwb2x5Z29uIj09WnIpKXtpZigicG9seWdvbiI9PVpyKXt2YXIgRnI9bXIucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oWXIpe3JldHVybiJwYXRoIj09WXIudGFnfSk7RnImJihtci50b3RhbExlbmd0aD1Gci50b3RhbExlbmd0aCl9dmFyIFFuPWZ1bmN0aW9uIHZKZShjKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24gbUplKGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KG1yKSxNcj1Rbi5jaGlsZHJlblsw'@;
put 'XSxfcj1Nci50ZXh0LnNwbGl0KCItPiIpOzIhPV9yLmxlbmd0aCYmKF9yPU1yLnRleHQuc3BsaXQoIi0tIikpO3ZhciB2dD1fclswXSxPdD1wZVt2dF0sY249d2VbdnRdO2lmKGNuKXtpZigoT249T3QuY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFlyLE5yKXtyZXR1cm4iZyI9PVlyLnRh'@;
put 'Z30pKT49MCl7dmFyIEVuPU90LmNoaWxkcmVuW09uXS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oWXIsTnIpe3JldHVybiJhIj09WXIudGFnfSk7T3Q9T3QuY2hpbGRyZW5bT25dLmNoaWxkcmVuW0VuXX0oT249Y24uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFlyLE5yKXtyZXR1'@;
put 'cm4iZyI9PVlyLnRhZ30pKT49MCYmKEVuPWNuLmNoaWxkcmVuW09uXS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oTnIsUmkpe3JldHVybiJhIj09TnIudGFnfSksY249Y24uY2hpbGRyZW5bT25dLmNoaWxkcmVuW0VuXSk7Zm9yKHZhciBKbj1PdC5jaGlsZHJlbixPbj0wO09uPEpuLmxl'@;
put 'bmd0aDtPbisrKWlmKCJwb2x5Z29uIj09Sm5bT25dLnRhZ3x8ImVsbGlwc2UiPT1KbltPbl0udGFnfHwicGF0aCI9PUpuW09uXS50YWd8fCJ0ZXh0Ij09Sm5bT25dLnRhZyl7dmFyIFByPUpuW09uXTticmVha312YXIgT3I9Y24uY2hpbGRyZW47Zm9yKE9uPTA7T248T3IubGVuZ3RoO09uKysp'@;
put 'aWYoInBvbHlnb24iPT1PcltPbl0udGFnfHwiZWxsaXBzZSI9PU9yW09uXS50YWd8fCJwYXRoIj09T3JbT25dLnRhZ3x8InRleHQiPT1PcltPbl0udGFnKXt2YXIgJHI9T3JbT25dO2JyZWFrfW1yLm9mZnNldD0kciYmUHI/e3g6JHIuY2VudGVyLngtUHIuY2VudGVyLngseTokci5jZW50ZXIu'@;
put 'eS1Qci5jZW50ZXIueX06e3g6MCx5OjB9fX19KG1yKSxtci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKEVpKXtubihFaSl9KX10aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRFbmQiLHRoaXMpO3ZhciB2bj1rcyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZCgi'@;
put 'ZGl2IiksY3I9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYywiaW1hZ2Uvc3ZnK3htbCIpO3ZuLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBjci5kb2N1bWVudEVsZW1lbnR9KTt2YXIgX2k9WGcodm4uc2VsZWN0KCJzdmciKSk7dGhpcy5fZGlzcGF0Y2guY2FsbCgi'@;
put 'ZGF0YUV4dHJhY3RFbmQiLHRoaXMpLEV0KF9pKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIix0aGlzKSxubihfaSksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMkVuZCIsdGhpcyksdGhpcy5fZGF0YT1faSx0aGlzLl9kaWN0aW9uYXJ5PVcs'@;
put 'dGhpcy5fbm9kZURpY3Rpb25hcnk9cGUsdGhpcy5fZXh0cmFjdERhdGE9ZnVuY3Rpb24obXIsRWksWnIpe3ZhciBGbj1YZyhtcik7cmV0dXJuIEV0KEZuLEVpLFpyKSxubihGbiksRm59LHRoaXMuX2J1c3k9ITEsdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NFbmQiLHRoaXMpLGwm'@;
put 'JmwuY2FsbCh0aGlzKSx0aGlzLl9xdWV1ZS5sZW5ndGg+MCYmdGhpcy5fcXVldWUuc2hpZnQoKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIExUKGMsbCl7aWYoKGE9KGM9bD9jLnRvRXhwb25lbnRpYWwobC0xKTpjLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3Zh'@;
put 'ciBhLGQ9Yy5zbGljZSgwLGEpO3JldHVybltkLmxlbmd0aD4xP2RbMF0rZC5zbGljZSgyKTpkLCtjLnNsaWNlKGErMSldfXZhciBybGUsaFFlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9u'@;
put 'IFFVKGMpe2lmKCEobD1oUWUuZXhlYyhjKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitjKTt2YXIgbDtyZXR1cm4gbmV3IGVaKHtmaWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVj'@;
put 'aXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIGVaKGMpe3RoaXMuZmlsbD12b2lkIDA9PT1jLmZpbGw/IiAiOmMuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PWMuYWxpZ24/Ij4iOmMuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09'@;
put 'PWMuc2lnbj8iLSI6Yy5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PWMuc3ltYm9sPyIiOmMuc3ltYm9sKyIiLHRoaXMuemVybz0hIWMuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PWMud2lkdGg/dm9pZCAwOitjLndpZHRoLHRoaXMuY29tbWE9ISFjLmNvbW1hLHRoaXMucHJlY2lzaW9u'@;
put 'PXZvaWQgMD09PWMucHJlY2lzaW9uP3ZvaWQgMDorYy5wcmVjaXNpb24sdGhpcy50cmltPSEhYy50cmltLHRoaXMudHlwZT12b2lkIDA9PT1jLnR5cGU/IiI6Yy50eXBlKyIifWZ1bmN0aW9uIGlsZShjLGwpe3ZhciBhPUxUKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7dmFyIGQ9YVswXSxoPWFb'@;
put 'MV07cmV0dXJuIGg8MD8iMC4iK25ldyBBcnJheSgtaCkuam9pbigiMCIpK2Q6ZC5sZW5ndGg+aCsxP2Quc2xpY2UoMCxoKzEpKyIuIitkLnNsaWNlKGgrMSk6ZCtuZXcgQXJyYXkoaC1kLmxlbmd0aCsyKS5qb2luKCIwIil9UVUucHJvdG90eXBlPWVaLnByb3RvdHlwZSxlWi5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQg'@;
put 'MD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtjb25zdCBvbGU9eyIlIjooYyxsKT0+KDEwMCpjKS50b0ZpeGVkKGwpLGI6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygyKSxjOmM9PmMr'@;
put 'IiIsZDpmdW5jdGlvbiBsUWUoYyl7cmV0dXJuIE1hdGguYWJzKGM9TWF0aC5yb3VuZChjKSk+PTFlMjE/Yy50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmMudG9TdHJpbmcoMTApfSxlOihjLGwpPT5jLnRvRXhwb25lbnRpYWwobCksZjooYyxsKT0+Yy50b0ZpeGVkKGwp'@;
put 'LGc6KGMsbCk9PmMudG9QcmVjaXNpb24obCksbzpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDgpLHA6KGMsbCk9PmlsZSgxMDAqYyxsKSxyOmlsZSxzOmZ1bmN0aW9uIHBRZShjLGwpe3ZhciBhPUxUKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7dmFyIGQ9YVswXSxoPWFbMV0sZj1oLShybGU9'@;
put 'MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaC8zKSkpKSsxLF89ZC5sZW5ndGg7cmV0dXJuIGY9PT1fP2Q6Zj5fP2QrbmV3IEFycmF5KGYtXysxKS5qb2luKCIwIik6Zj4wP2Quc2xpY2UoMCxmKSsiLiIrZC5zbGljZShmKToiMC4iK25ldyBBcnJheSgxLWYpLmpvaW4oIjAi'@;
put 'KStMVChjLE1hdGgubWF4KDAsbCtmLTEpKVswXX0sWDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIHNsZShjKXtyZXR1cm4gY312YXIgUlQsd2QsYWxlPUFycmF5LnByb3RvdHlwZS5t'@;
put 'YXAsbGxlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdOyFmdW5jdGlvbiB2UWUoYyl7UlQ9ZnVuY3Rpb24gZ1FlKGMpe3ZhciBsPXZvaWQgMD09PWMuZ3JvdXBpbmd8fHZvaWQgMD09PWMudGhvdXNhbmRzP3Ns'@;
put 'ZTpmdW5jdGlvbiB1UWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtmb3IodmFyIGg9YS5sZW5ndGgsZj1bXSxfPTAsVD1jWzBdLFc9MDtoPjAmJlQ+MCYmKFcrVCsxPmQmJihUPU1hdGgubWF4KDEsZC1XKSksZi5wdXNoKGEuc3Vic3RyaW5nKGgtPVQsaCtUKSksISgoVys9VCsxKT5kKSk7'@;
put 'KVQ9Y1tfPShfKzEpJWMubGVuZ3RoXTtyZXR1cm4gZi5yZXZlcnNlKCkuam9pbihsKX19KGFsZS5jYWxsKGMuZ3JvdXBpbmcsTnVtYmVyKSxjLnRob3VzYW5kcysiIiksYT12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMuY3VycmVuY3lbMF0rIiIsZD12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMu'@;
put 'Y3VycmVuY3lbMV0rIiIsaD12b2lkIDA9PT1jLmRlY2ltYWw/Ii4iOmMuZGVjaW1hbCsiIixmPXZvaWQgMD09PWMubnVtZXJhbHM/c2xlOmZ1bmN0aW9uIGRRZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihhKXtyZXR1cm4gY1srYV19'@;
put 'KX19KGFsZS5jYWxsKGMubnVtZXJhbHMsU3RyaW5nKSksXz12b2lkIDA9PT1jLnBlcmNlbnQ/IiUiOmMucGVyY2VudCsiIixUPXZvaWQgMD09PWMubWludXM/Ilx1MjIxMiI6Yy5taW51cysiIixXPXZvaWQgMD09PWMubmFuPyJOYU4iOmMubmFuKyIiO2Z1bmN0aW9uIGllKHdlKXt2YXIgRWU9'@;
put 'KHdlPVFVKHdlKSkuZmlsbCxaZT13ZS5hbGlnbixpdD13ZS5zaWduLGV0PXdlLnN5bWJvbCx5dD13ZS56ZXJvLEV0PXdlLndpZHRoLFN0PXdlLmNvbW1hLEp0PXdlLnByZWNpc2lvbixubj13ZS50cmltLHZuPXdlLnR5cGU7Im4iPT09dm4/KFN0PSEwLHZuPSJnIik6b2xlW3ZuXXx8KHZvaWQg'@;
put 'MD09PUp0JiYoSnQ9MTIpLG5uPSEwLHZuPSJnIiksKHl0fHwiMCI9PT1FZSYmIj0iPT09WmUpJiYoeXQ9ITAsRWU9IjAiLFplPSI9Iik7dmFyIE5uPSIkIj09PWV0P2E6IiMiPT09ZXQmJi9bYm94WF0vLnRlc3Qodm4pPyIwIit2bi50b0xvd2VyQ2FzZSgpOiIiLGNyPSIkIj09PWV0P2Q6L1sl'@;
put 'cF0vLnRlc3Qodm4pP186IiIsRHI9b2xlW3ZuXSxfaT0vW2RlZmdwcnMlXS8udGVzdCh2bik7ZnVuY3Rpb24gbGkobXIpe3ZhciBGbixGcixRbixFaT1Obixacj1jcjtpZigiYyI9PT12bilacj1EcihtcikrWnIsbXI9IiI7ZWxzZXt2YXIgTXI9KG1yPSttcik8MHx8MS9tcjwwO2lmKG1yPWlz'@;
put 'TmFOKG1yKT9XOkRyKE1hdGguYWJzKG1yKSxKdCksbm4mJihtcj1mdW5jdGlvbiBmUWUoYyl7ZTpmb3IodmFyIGgsbD1jLmxlbmd0aCxhPTEsZD0tMTthPGw7KythKXN3aXRjaChjW2FdKXtjYXNlIi4iOmQ9aD1hO2JyZWFrO2Nhc2UiMCI6MD09PWQmJihkPWEpLGg9YTticmVhaztkZWZhdWx0'@;
put 'OmlmKCErY1thXSlicmVhayBlO2Q+MCYmKGQ9MCl9cmV0dXJuIGQ+MD9jLnNsaWNlKDAsZCkrYy5zbGljZShoKzEpOmN9KG1yKSksTXImJjA9PSttciYmIisiIT09aXQmJihNcj0hMSksRWk9KE1yPyIoIj09PWl0P2l0OlQ6Ii0iPT09aXR8fCIoIj09PWl0PyIiOml0KStFaSxacj0oInMiPT09'@;
put 'dm4/bGxlWzgrcmxlLzNdOiIiKStacisoTXImJiIoIj09PWl0PyIpIjoiIiksX2kpZm9yKEZuPS0xLEZyPW1yLmxlbmd0aDsrK0ZuPEZyOylpZig0OD4oUW49bXIuY2hhckNvZGVBdChGbikpfHxRbj41Nyl7WnI9KDQ2PT09UW4/aCttci5zbGljZShGbisxKTptci5zbGljZShGbikpK1pyLG1y'@;
put 'PW1yLnNsaWNlKDAsRm4pO2JyZWFrfX1TdCYmIXl0JiYobXI9bChtciwxLzApKTt2YXIgX3I9RWkubGVuZ3RoK21yLmxlbmd0aCtaci5sZW5ndGgsdnQ9X3I8RXQ/bmV3IEFycmF5KEV0LV9yKzEpLmpvaW4oRWUpOiIiO3N3aXRjaChTdCYmeXQmJihtcj1sKHZ0K21yLHZ0Lmxlbmd0aD9FdC1a'@;
put 'ci5sZW5ndGg6MS8wKSx2dD0iIiksWmUpe2Nhc2UiPCI6bXI9RWkrbXIrWnIrdnQ7YnJlYWs7Y2FzZSI9Ijptcj1FaSt2dCttcitacjticmVhaztjYXNlIl4iOm1yPXZ0LnNsaWNlKDAsX3I9dnQubGVuZ3RoPj4xKStFaSttcitacit2dC5zbGljZShfcik7YnJlYWs7ZGVmYXVsdDptcj12dCtF'@;
put 'aSttcitacn1yZXR1cm4gZihtcil9cmV0dXJuIEp0PXZvaWQgMD09PUp0PzY6L1tncHJzXS8udGVzdCh2bik/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxKdCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsSnQpKSxsaS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB3ZSsiIn0sbGl9cmV0dXJu'@;
put 'e2Zvcm1hdDppZSxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gcGUod2UsRWUpe3ZhciBaZT1pZSgoKHdlPVFVKHdlKSkudHlwZT0iZiIsd2UpKSxpdD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5jdGlvbiBjUWUoYyl7cmV0dXJuKGM9TFQoTWF0aC5hYnMoYykpKT9jWzFd'@;
put 'Ok5hTn0oRWUpLzMpKSksZXQ9TWF0aC5wb3coMTAsLWl0KSx5dD1sbGVbOCtpdC8zXTtyZXR1cm4gZnVuY3Rpb24oRXQpe3JldHVybiBaZShldCpFdCkreXR9fX19KGMpLHdkPVJULmZvcm1hdH0oe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3Qg'@;
put 'dFo9TWF0aC5QSSxuWj0yKnRaLFFnPTFlLTYseVFlPW5aLVFnO2Z1bmN0aW9uIGNsZShjKXt0aGlzLl8rPWNbMF07Zm9yKGxldCBsPTEsYT1jLmxlbmd0aDtsPGE7KytsKXRoaXMuXys9YXJndW1lbnRzW2xdK2NbbF19Y2xhc3Mgclp7Y29uc3RydWN0b3IobCl7dGhpcy5feDA9dGhpcy5feTA9'@;
put 'dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiIsdGhpcy5fYXBwZW5kPW51bGw9PWw/Y2xlOmZ1bmN0aW9uIHdRZShjKXtsZXQgbD1NYXRoLmZsb29yKGMpO2lmKCEobD49MCkpdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtjfWApO2lmKGw+MTUpcmV0dXJuIGNsZTtj'@;
put 'b25zdCBhPTEwKipsO3JldHVybiBmdW5jdGlvbihkKXt0aGlzLl8rPWRbMF07Zm9yKGxldCBoPTEsZj1kLmxlbmd0aDtoPGY7KytoKXRoaXMuXys9TWF0aC5yb3VuZChhcmd1bWVudHNbaF0qYSkvYStkW2hdfX0obCl9bW92ZVRvKGwsYSl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMu'@;
put 'X3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWB9Y2xvc2VQYXRoKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fYXBwZW5kYFpgKX1saW5lVG8obCxhKXt0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9K2x9LCR7dGhpcy5f'@;
put 'eTE9K2F9YH1xdWFkcmF0aWNDdXJ2ZVRvKGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBRJHsrbH0sJHsrYX0sJHt0aGlzLl94MT0rZH0sJHt0aGlzLl95MT0raH1gfWJlemllckN1cnZlVG8obCxhLGQsaCxmLF8pe3RoaXMuX2FwcGVuZGBDJHsrbH0sJHsrYX0sJHsrZH0sJHsraH0sJHt0aGlzLl94'@;
put 'MT0rZn0sJHt0aGlzLl95MT0rX31gfWFyY1RvKGwsYSxkLGgsZil7aWYobD0rbCxhPSthLGQ9K2QsaD0raCwoZj0rZik8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtmfWApO2xldCBfPXRoaXMuX3gxLFQ9dGhpcy5feTEsVz1kLWwsaWU9aC1hLHBlPV8tbCx3ZT1ULWEs'@;
put 'RWU9cGUqcGUrd2Uqd2U7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YDtlbHNlIGlmKEVlPlFnKWlmKE1hdGguYWJzKHdlKlctaWUqcGUpPlFnJiZmKXtsZXQgWmU9ZC1fLGl0PWgtVCxldD1XKlcraWUqaWUseXQ9WmUqWmUraXQq'@;
put 'aXQsRXQ9TWF0aC5zcXJ0KGV0KSxTdD1NYXRoLnNxcnQoRWUpLEp0PWYqTWF0aC50YW4oKHRaLU1hdGguYWNvcygoZXQrRWUteXQpLygyKkV0KlN0KSkpLzIpLG5uPUp0L1N0LHZuPUp0L0V0O01hdGguYWJzKG5uLTEpPlFnJiZ0aGlzLl9hcHBlbmRgTCR7bCtubipwZX0sJHthK25uKndlfWAs'@;
put 'dGhpcy5fYXBwZW5kYEEke2Z9LCR7Zn0sMCwwLCR7Kyh3ZSpaZT5wZSppdCl9LCR7dGhpcy5feDE9bCt2bipXfSwke3RoaXMuX3kxPWErdm4qaWV9YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YH1hcmMobCxhLGQsaCxmLF8pe2lmKGw9K2wsYT0rYSxf'@;
put 'PSEhXywoZD0rZCk8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtkfWApO2xldCBUPWQqTWF0aC5jb3MoaCksVz1kKk1hdGguc2luKGgpLGllPWwrVCxwZT1hK1csd2U9MV5fLEVlPV8/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke2llfSwke3Bl'@;
put 'fWA6KE1hdGguYWJzKHRoaXMuX3gxLWllKT5RZ3x8TWF0aC5hYnModGhpcy5feTEtcGUpPlFnKSYmdGhpcy5fYXBwZW5kYEwke2llfSwke3BlfWAsZCYmKEVlPDAmJihFZT1FZSVuWituWiksRWU+eVFlP3RoaXMuX2FwcGVuZGBBJHtkfSwke2R9LDAsMSwke3dlfSwke2wtVH0sJHthLVd9QSR7'@;
put 'ZH0sJHtkfSwwLDEsJHt3ZX0sJHt0aGlzLl94MT1pZX0sJHt0aGlzLl95MT1wZX1gOkVlPlFnJiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7KyhFZT49dFopfSwke3dlfSwke3RoaXMuX3gxPWwrZCpNYXRoLmNvcyhmKX0sJHt0aGlzLl95MT1hK2QqTWF0aC5zaW4oZil9YCl9cmVjdChs'@;
put 'LGEsZCxoKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9aCR7ZD0rZH12JHsraH1oJHstZH1aYH10b1N0cmluZygpe3JldHVybiB0aGlzLl99fWZ1bmN0aW9uIHVsZSgpe3JldHVybiBuZXcgclp9ZnVuY3Rpb24gQ1FlKGMsbCxh'@;
put 'LGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24gZGxlKGMsbCxhLGQsaCxmLF8pe3ZhciBXPVhnKGdsZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbV10pLF93LmNhbGwoYy5ub2RlKCksVyksaGxlKGMsbCxhLGQsaCxmLF8pfWZ1bmN0'@;
put 'aW9uIGhsZShjLGwsYSxkLGgsZixfKXt2YXIgVD1fLnNob3J0ZW5pbmd8fDAsd2U9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSxFZT1kLWwsWmU9aC1hLGl0PU1hdGguc3FydChFZSpFZStaZSpaZSk7aWYoMD09aXQpdmFyIGV0PTEseXQ9MDtlbHNlIGV0PUVlL2l0LHl0PVpl'@;
put 'L2l0O2lmKGQ9bCsoaXQtVC0xMC0uMSkqZXQsaD1hKyhpdC1ULTEwLS4xKSp5dCxmLlVSTHx8Zi50b29sdGlwKXZhciBFdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksU3Q9RXQuc2VsZWN0V2l0aG91dERhdGFQ'@;
put 'cm9wYWdhdGlvbigicGF0aCIpLEp0PUV0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIFN0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciBubj11'@;
put 'bGUoKTtubi5tb3ZlVG8obCxhKSxubi5saW5lVG8oZCxoKSxTdC5hdHRyKCJkIixubiksZD1sKyhpdC1ULTEwKSpldCxoPWErKGl0LVQtMTApKnl0O2Zvcih2YXIgdm49MDt2bjx3ZS5sZW5ndGg7dm4rKyl3ZVt2bl09Q1FlKChObj13ZVt2bl0pWzBdLE5uWzFdLGV0LHl0KTtmb3Iodm49MDt2'@;
put 'bjx3ZS5sZW5ndGg7dm4rKyl3ZVt2bl09W2QrKE5uPXdlW3ZuXSlbMF0saCtOblsxXV07dmFyIGNyPVtdO2Zvcih2bj0wO3ZuPHdlLmxlbmd0aDt2bisrKXt2YXIgTm47Y3IucHVzaCgoTm49d2Vbdm5dKS5qb2luKCIsIikpfXZhciBEcj1jci5qb2luKCIgIik7cmV0dXJuIEp0LmF0dHIoInBv'@;
put 'aW50cyIsRHIpLHRoaXN9ZnVuY3Rpb24gZmxlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiBwbGUoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRn'@;
put 'ZS5nOmtzKG51bGwpfWZ1bmN0aW9uIGdsZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScgIicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3Qi'@;
put 'KSxfPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4ga3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gXy5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdl'@;
put 'Iil9ZnVuY3Rpb24gbWxlKGMsbCxhLGQsaCxmKXt2YXIgVD1YZyh5bGUuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW1RdKSxfdy5jYWxsKGMubm9kZSgpLFQpLHZsZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9uIHZsZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9'@;
put 'Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciBfPWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLFQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0'@;
put 'ZXh0Iik7aWYoMCE9Xy5zaXplKCkpe3ZhciBXPV8ubm9kZSgpLmdldEJCb3goKTtXLmN4PVcueCtXLndpZHRoLzIsVy5jeT1XLnkrVy5oZWlnaHQvMn1lbHNlIDAhPVQuc2l6ZSgpJiYoVz17eDorVC5hdHRyKCJ4IikseTorVC5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorVC5hdHRy'@;
put 'KCJ4IiksY3k6K1QuYXR0cigieSIpfSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihpZSxwZSl7dmFyIHdlPWtzKHRoaXMpO2lmKHdlLmF0dHIoImN4Iikpd2UuYXR0cigiY3giLGM0KGwpKS5hdHRyKCJjeSIsYzQoYSkpO2Vsc2UgaWYod2UuYXR0cigicG9pbnRzIikpe3ZhciBFZT13ZS5hdHRy'@;
put 'KCJwb2ludHMiKS50cmltKCk7d2UuYXR0cigicG9pbnRzIixmdW5jdGlvbiBGSmUoZixsLGEpe3ZhciBoLGQ9KGg9Zi5zcGxpdCgiICIpKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uc3BsaXQoIiwiKX0pO3JldHVybiBkPWgubWFwKGZ1bmN0aW9uKF8pe3JldHVybltjNCgrbCsgK18uc3Bs'@;
put 'aXQoIiwiKVswXSksYzQoK2ErICtfLnNwbGl0KCIsIilbMV0pXX0pLChoPWQubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBfLmpvaW4oIiwiKX0pKS5qb2luKCIgIil9KEVlLGwtVy5jeCxhLVcuY3kpKX1lbHNle3ZhciBaZT13ZS5hdHRyKCJkIik7d2UuYXR0cigiZCIsZnVuY3Rpb24gSEplKGMs'@;
put 'bCxhKXsoZj1jLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKTt2YXIgZD1jLnNwbGl0KC9bXltBLVogXSsvKSxmPShmLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5zcGxpdCgiLCIpfSksZi5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuW2M0KCtsKyArXy5zcGxpdCgiLCIpWzBdKSxjNCgrYSsgK18u'@;
put 'c3BsaXQoIiwiKVsxXSldfSkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBfLmpvaW4oIiwiKX0pKTtyZXR1cm4gZC5yZWR1Y2UoZnVuY3Rpb24oXyxULFcpe3JldHVybiBfLmNvbmNhdChULGZbV10pfSxbXSkuam9pbigiIil9KFplLGwtVy5jeCxhLVcuY3kpKX19KSwwIT1ULnNpemUoKSYmVC5h'@;
put 'dHRyKCJ4IixjNCgrVC5hdHRyKCJ4IikrbC1XLmN4KSkuYXR0cigieSIsYzQoK1QuYXR0cigieSIpK2EtVy5jeSkpLHRoaXN9ZnVuY3Rpb24gX2xlKCl7aWYoIXRoaXMuX2RyYXduTm9kZSlyZXR1cm4gdGhpczt2YXIgYz10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gYy5lbXB0eSgpfHxjLnJl'@;
put 'bW92ZSgpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9ZnVuY3Rpb24gYmxlKCl7cmV0dXJuIHRoaXMuX2RyYXduTm9kZT90aGlzLl9kcmF3bk5vZGUuZzprcyhudWxsKX1mdW5jdGlvbiB5bGUoYyxsKXt2YXIgYT0iIjtmb3IodmFyIGQgb2YgT2JqZWN0LmtleXMobCkpbnVsbCE9bFtkXSYm'@;
put 'KGErPScgIicrZCsnIj0iJytsW2RdKyciJyk7dmFyIGY9dGhpcy5sYXlvdXRTeW5jKCdncmFwaCB7IicrYysnIiBbJythKyJdfSIsInN2ZyIsImRvdCIpLFQ9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZiwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBrcyhkb2N1bWVu'@;
put 'dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBULmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLm5vZGUiKX1mdW5jdGlvbiBPVChjKXtzZWxmLmRvY3VtZW50PXt9LGMuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24obCl7bGV0'@;
put 'IGE9c2VsZlsiQGhwY2MtanMvd2FzbSJdO251bGw9PWEmJmwuZGF0YS52aXpVUkwmJihpbXBvcnRTY3JpcHRzKGwuZGF0YS52aXpVUkwpLGE9c2VsZlsiQGhwY2MtanMvd2FzbSJdKSwidmVyc2lvbiIhPWwuZGF0YS50eXBlP2EuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2NvbnN0IGg9ZC5s'@;
put 'YXlvdXQobC5kYXRhLmRvdCwic3ZnIixsLmRhdGEuZW5naW5lLGwuZGF0YS5vcHRpb25zKTtjLnBvc3RNZXNzYWdlKGg/e3R5cGU6ImRvbmUiLHN2ZzpofTpsLmRhdGEudml6VVJMP3t0eXBlOiJpbml0In06e3R5cGU6InNraXAifSl9KS5jYXRjaChkPT57Yy5wb3N0TWVzc2FnZSh7dHlwZToi'@;
put 'ZXJyb3IiLGVycm9yOmQubWVzc2FnZX0pfSk6YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Yy5wb3N0TWVzc2FnZSh7dHlwZToidmVyc2lvbiIsdmVyc2lvbjpkLnZlcnNpb24oKX0pfSl9KX1mdW5jdGlvbiBJUWUoKXtPVChzZWxmKX1mdW5jdGlvbiBMUWUoKXtzZWxmLm9uY29ubmVjdD1m'@;
put 'dW5jdGlvbihjKXtjb25zdCBsPWMucG9ydHNbMF07T1QobCksbC5zdGFydCgpfX1mdW5jdGlvbiBpWihjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAs'@;
put 'dHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpu'@;
put 'dWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlzLl9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlz'@;
put 'Ll9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIgXz1NVSgic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImph'@;
put 'dmFzY3JpcHQvd29ya2VyIj09a3ModGhpcykuYXR0cigidHlwZSIpfHxrcyh0aGlzKS5hdHRyKCJzcmMiKSYma3ModGhpcykuYXR0cigic3JjIikubWF0Y2goLy4qXC9AaHBjYy1qc1wvd2FzbS8pfSk7MD09Xy5zaXplKCk/KGNvbnNvbGUud2FybignTm8gc2NyaXB0IHRhZyBvZiB0eXBlICJq'@;
put 'YXZhc2NyaXB0L3dvcmtlciIgd2FzIGZvdW5kIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9ITEpOih0aGlzLl92aXpVUkw9Xy5hdHRyKCJzcmMiKSx0aGlzLl92aXpVUkx8fChjb25zb2xlLndhcm4oJ05vICJzcmMiIGF0dHJpYnV0ZSBv'@;
put 'ZiB3YXMgZm91bmQgb24gdGhlICJqYXZhc2NyaXB0L3dvcmtlciIgc2NyaXB0IHRhZyBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKSl9aWYoaCl7Y29uc3QgaWU9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIiti'@;
put 'dG9hKE9ULnRvU3RyaW5nKCkrIigiK0xRZS50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoaWUpLHRoaXMuX3dvcmtlclBvcnQ9dGhpcy5fd29ya2VyLnBvcnQsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci5wb3J0'@;
put 'LmNsb3NlLmJpbmQodGhpcy5fd29ya2VyUG9ydCksdGhpcy5fd29ya2VyLnBvcnQuc3RhcnQoKSx0aGlzLl93b3JrZXJDYWxsYmFja3M9W119ZWxzZSBpZihkKXt2YXIgVD1uZXcgQmxvYihbT1QudG9TdHJpbmcoKSsiKCIrSVFlLnRvU3RyaW5nKCkrIikoKSJdKSxXPXdpbmRvdy5VUkwuY3Jl'@;
put 'YXRlT2JqZWN0VVJMKFQpO3RoaXMuX3dvcmtlcj1uZXcgV29ya2VyKFcpLHRoaXMuX3dvcmtlclBvcnQ9dGhpcy5fd29ya2VyLHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIudGVybWluYXRlLmJpbmQodGhpcy5fd29ya2VyKSx0aGlzLl93b3JrZXJDYWxsYmFja3M9W119ZWxz'@;
put 'ZSBEVC5sb2FkKCkudGhlbigoaWU9Pnt0aGlzLl9ncmFwaHZpelZlcnNpb249aWUudmVyc2lvbigpfSkuYmluZCh0aGlzKSk7dGhpcy5fc2VsZWN0aW9uPWMsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2J1c3k9ITEsdGhpcy5fam9icz1bXSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9rZXlNb2Rlcz1u'@;
put 'ZXcgU2V0KFsidGl0bGUiLCJpZCIsInRhZy1pbmRleCIsImluZGV4Il0pLHRoaXMuX2ltYWdlcz1bXSx0aGlzLl90cmFuc2xhdGlvbj12b2lkIDAsdGhpcy5fc2NhbGU9dm9pZCAwLHRoaXMuX2V2ZW50VHlwZXM9WyJpbml0RW5kIiwic3RhcnQiLCJsYXlvdXRTdGFydCIsImxheW91dEVuZCIs'@;
put 'ImRhdGFFeHRyYWN0RW5kIiwiZGF0YVByb2Nlc3NQYXNzMUVuZCIsImRhdGFQcm9jZXNzUGFzczJFbmQiLCJkYXRhUHJvY2Vzc0VuZCIsInJlbmRlclN0YXJ0IiwicmVuZGVyRW5kIiwidHJhbnNpdGlvblN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInJlc3RvcmVFbmQiLCJlbmQiLCJ6b29tIl0s'@;
put 'dGhpcy5fZGlzcGF0Y2g9eFUoLi4udGhpcy5fZXZlbnRUeXBlcyksTkplLmNhbGwodGhpcyksYy5ub2RlKCkuX19ncmFwaHZpel9fPXRoaXN9ZnVuY3Rpb24gUFQoYyxsKXtyZXR1cm4ga3MoYykuZ3JhcGh2aXoobCl9dWxlLnByb3RvdHlwZT1yWi5wcm90b3R5cGUsaVoucHJvdG90eXBlPVBU'@;
put 'LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aVosZW5naW5lOmZ1bmN0aW9uIFhKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5lbmdpbmU9Yyx0aGlzfSxhZGRJbWFnZTpmdW5jdGlvbiBKSmUoYyxsLGEpe3JldHVybiB0aGlzLl9pbWFnZXMucHVzaCh7cGF0aDpjLHdpZHRoOmwsaGVpZ2h0OmF9'@;
put 'KSx0aGlzfSxrZXlNb2RlOmZ1bmN0aW9uIFFKZShjKXtpZighdGhpcy5fa2V5TW9kZXMuaGFzKGMpKXRocm93IEVycm9yKCJJbGxlZ2FsIGtleU1vZGU6ICIrYyk7aWYoYyE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlJiZudWxsIT10aGlzLl9kYXRhKXRocm93IEVycm9yKCJUb28gbGF0ZSB0byBj'@;
put 'aGFuZ2Uga2V5TW9kZSIpO3JldHVybiB0aGlzLl9vcHRpb25zLmtleU1vZGU9Yyx0aGlzfSxmYWRlOmZ1bmN0aW9uIGVRZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5mYWRlPWMsdGhpc30sdHdlZW5QYXRoczpmdW5jdGlvbiB0UWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5QYXRo'@;
put 'cz1jLHRoaXN9LHR3ZWVuU2hhcGVzOmZ1bmN0aW9uIG5RZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcz1jLGMmJih0aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9ITApLHRoaXN9LGNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM6ZnVuY3Rpb24gclFlKGMpe3JldHVybiB0aGlz'@;
put 'Ll9vcHRpb25zLmNvbnZlcnRFcXVhbFNpZGVkUG9seWdvbnM9Yyx0aGlzfSx0d2VlblByZWNpc2lvbjpmdW5jdGlvbiBpUWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb249Yyx0aGlzfSxncm93RW50ZXJpbmdFZGdlczpmdW5jdGlvbiBvUWUoYyl7cmV0dXJuIHRoaXMu'@;
put 'X29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXM9Yyx0aGlzfSx6b29tOmZ1bmN0aW9uIGFKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy56b29tPWMsdGhpcy5fb3B0aW9ucy56b29tJiYhdGhpcy5fem9vbUJlaGF2aW9yP0thZS5jYWxsKHRoaXMpOiF0aGlzLl9vcHRpb25zLnpvb20mJnRoaXMu'@;
put 'X3pvb21CZWhhdmlvciYmKHRoaXMuX3pvb21TZWxlY3Rpb24ub24oIi56b29tIixudWxsKSx0aGlzLl96b29tQmVoYXZpb3I9bnVsbCksdGhpc30scmVzZXRab29tOmZ1bmN0aW9uIGxKZShjKXt2YXIgbD10aGlzLl96b29tU2VsZWN0aW9uO3JldHVybiBjJiYobD1sLnRyYW5zaXRpb24oYykp'@;
put 'LGwuY2FsbCh0aGlzLl96b29tQmVoYXZpb3IudHJhbnNmb3JtLHRoaXMuX29yaWdpbmFsVHJhbnNmb3JtKSx0aGlzfSx6b29tQmVoYXZpb3I6ZnVuY3Rpb24gZEplKCl7cmV0dXJuIHRoaXMuX3pvb21CZWhhdmlvcnx8bnVsbH0sem9vbVNlbGVjdGlvbjpmdW5jdGlvbiBoSmUoKXtyZXR1cm4g'@;
put 'dGhpcy5fem9vbVNlbGVjdGlvbnx8bnVsbH0sem9vbVNjYWxlRXh0ZW50OmZ1bmN0aW9uIGNKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQ9Yyx0aGlzfSx6b29tVHJhbnNsYXRlRXh0ZW50OmZ1bmN0aW9uIHVKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy56b29t'@;
put 'VHJhbnNsYXRlRXh0ZW50PWMsdGhpc30scmVuZGVyOmZ1bmN0aW9uIF9KZShjKXtyZXR1cm4gdGhpcy5fYnVzeT8odGhpcy5fcXVldWUucHVzaCh0aGlzLnJlbmRlci5iaW5kKHRoaXMsYykpLHRoaXMpOih0aGlzLl9kaXNwYXRjaC5jYWxsKCJyZW5kZXJTdGFydCIsdGhpcyksdGhpcy5fdHJh'@;
put 'bnNpdGlvbkZhY3Rvcnk/aFQoZnVuY3Rpb24oKXt0aGlzLl90cmFuc2l0aW9uPVZVKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLFFhZS5jYWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6UWFlLmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIFZKZShjLGwsYSxkKXtpZih0'@;
put 'aGlzLl93b3JrZXIpSlUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDpjLGVuZ2luZTpsLG9wdGlvbnM6YX0sZnVuY3Rpb24oZil7ZC5jYWxsKHRoaXMsZi5kYXRhKX0pO2Vsc2UgdHJ5e3ZhciBoPXRoaXMubGF5b3V0U3luYyhjLCJzdmciLGwsYSk7ZC5jYWxsKHRoaXMse3R5cGU6ImRv'@;
put 'bmUiLHN2ZzpofSl9Y2F0Y2goZil7ZC5jYWxsKHRoaXMse3R5cGU6ImVycm9yIixlcnJvcjpmLm1lc3NhZ2V9KX19LGRvdDpmdW5jdGlvbiBCSmUoYyxsKXt2YXIgYT10aGlzLGg9dGhpcy5fb3B0aW9ucy5lbmdpbmUsZj10aGlzLl9pbWFnZXM7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLmNhbGwo'@;
put 'InN0YXJ0Iix0aGlzKSx0aGlzLl9idXN5PSEwLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dFN0YXJ0Iix0aGlzKSx0aGlzLl93b3JrZXJ8fG51bGwhPXRoaXMubGF5b3V0U3luYz8odGhpcy5sYXlvdXQoYyxoLHtpbWFnZXM6Zn0sZnVuY3Rpb24oVCl7c3dpdGNoKFQudHlwZSl7Y2FzZSJl'@;
put 'cnJvciI6aWYoIWEuX29uZXJyb3IpdGhyb3cgVC5lcnJvci5tZXNzYWdlO2EuX29uZXJyb3IoVC5lcnJvcik7YnJlYWs7Y2FzZSJkb25lIjpqSmUuY2FsbCh0aGlzLFQuc3ZnLGwpfX0pLHRoaXMpOih0aGlzLl9hZnRlckluaXQ9dGhpcy5kb3QuYmluZCh0aGlzLGMsbCksdGhpcyl9LGRhdGE6'@;
put 'ZnVuY3Rpb24gZ0plKCl7cmV0dXJuIHRoaXMuX2RhdGF8fG51bGx9LHJlbmRlckRvdDpmdW5jdGlvbiB6SmUoYyxsKXt2YXIgYT10aGlzO3JldHVybiB0aGlzLmRvdChjLGZ1bmN0aW9uIGQoKXthLnJlbmRlcihsKX0pLHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24gVUplKGMpe3JldHVybiBj'@;
put 'IGluc3RhbmNlb2YgRnVuY3Rpb24/dGhpcy5fdHJhbnNpdGlvbkZhY3Rvcnk9Yzp0aGlzLl90cmFuc2l0aW9uPVZVKGMpLHRoaXN9LGFjdGl2ZTpmdW5jdGlvbiBaSmUoYyl7dmFyIGE9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpO3JldHVybiAw'@;
put 'IT1hLnNpemUoKT9mdW5jdGlvbiBCWGUoYyxsKXt2YXIgZCxoLGE9Yy5fX3RyYW5zaXRpb247aWYoYSlmb3IoaCBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpaWYoKGQ9YVtoXSkuc3RhdGU+MSYmZC5uYW1lPT09bClyZXR1cm4gbmV3IExoKFtbY11dLFZYZSxsLCtoKTtyZXR1cm4gbnVsbH0o'@;
put 'YS5ub2RlKCksYyk6bnVsbH0sb3B0aW9uczpmdW5jdGlvbiBZSmUoYyl7aWYodHlwZW9mIGM+InUiKXJldHVybiBPYmplY3QuYXNzaWduKHt9LHRoaXMuX29wdGlvbnMpO2Zvcih2YXIgbCBvZiBPYmplY3Qua2V5cyhjKSl0aGlzLl9vcHRpb25zW2xdPWNbbF07cmV0dXJuIHRoaXN9LHdpZHRo'@;
put 'OmZ1bmN0aW9uIFdKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy53aWR0aD1jLHRoaXN9LGhlaWdodDpmdW5jdGlvbiBHSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuaGVpZ2h0PWMsdGhpc30sc2NhbGU6ZnVuY3Rpb24gJEplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnNjYWxlPWMsdGhp'@;
put 'c30sZml0OmZ1bmN0aW9uIHFKZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5maXQ9Yyx0aGlzfSxhdHRyaWJ1dGVyOmZ1bmN0aW9uIEtKZShjKXtyZXR1cm4gdGhpcy5fYXR0cmlidXRlcj1jLHRoaXN9LG9uOmZ1bmN0aW9uIHNRZShjLGwpe3JldHVybiB0aGlzLl9kaXNwYXRjaC5vbihjLGwp'@;
put 'LHRoaXN9LG9uZXJyb3I6ZnVuY3Rpb24gYVFlKGMpe3JldHVybiB0aGlzLl9vbmVycm9yPWMsdGhpc30sbG9nRXZlbnRzOmZ1bmN0aW9uIF9RZShjKXt2YXIgbD1EYXRlLm5vdygpLGE9e30sZD10aGlzLl9ldmVudFR5cGVzLGg9TWF0aC5tYXgoLi4uZC5tYXAoVz0+Vy5sZW5ndGgpKTtmb3Io'@;
put 'bGV0IFc9MDtXPGQubGVuZ3RoO1crKyl7bGV0IGllPWRbV107YVtpZV09W107dmFyIF8sVCxmPXRoaXM7dGhpcy5vbihpZSsiLmxvZyIsYz9mdW5jdGlvbigpe3ZhciBwZT1EYXRlLm5vdygpLHdlPWFbaWVdLmxlbmd0aDthW2llXS5wdXNoKHBlKTt2YXIgRWU9IiI7aWYoRWUrPSJFdmVudCAi'@;
put 'LEVlKz13ZCgiID4yIikoVykrIiAiLEVlKz1pZSsiICIucmVwZWF0KGgtaWUubGVuZ3RoKSxFZSs9d2QoIiA+NSIpKHBlLWwpKyIgIiwiaW5pdEVuZCIhPWllJiYoRWUrPXdkKCIgPjUiKShwZS1hLnN0YXJ0W3dlXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PWllJiYoRWUrPSIgcHJlcGFyZSAgICAg'@;
put 'ICAgICAgICAgICAgIit3ZCgiID41IikocGUtYS5sYXlvdXRFbmRbd2VdKSksInJlbmRlckVuZCI9PWllJiZmLl90cmFuc2l0aW9uJiYoRWUrPSIgdHJhbnNpdGlvbiBzdGFydCBtYXJnaW4gIit3ZCgiID41IikoZi5fdHJhbnNpdGlvbi5kZWxheSgpLShwZS1hLnJlbmRlclN0YXJ0W3dlXSkp'@;
put 'LF89Zi5fdHJhbnNpdGlvbi5kZWxheSgpLFQ9Zi5fdHJhbnNpdGlvbi5kdXJhdGlvbigpKSwidHJhbnNpdGlvblN0YXJ0Ij09aWUpe3ZhciBaZT1wZS1hLnJlbmRlclN0YXJ0W3dlXTtFZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK3dkKCIgPjUiKShwZS1hLnJlbmRlclN0YXJ0W3dl'@;
put 'XSksRWUrPSIgZXhwZWN0ZWQgIit3ZCgiID41IikoXyksRWUrPSIgZGlmZiAiK3dkKCIgPjUiKShaZS1fKX1pZigidHJhbnNpdGlvbkVuZCI9PWllKXt2YXIgaXQ9cGUtYS50cmFuc2l0aW9uU3RhcnRbd2VdO0VlKz0iIHRyYW5zaXRpb24gZHVyYXRpb24gICAgICIrd2QoIiA+NSIpKGl0KSxF'@;
put 'ZSs9IiBleHBlY3RlZCAiK3dkKCIgPjUiKShUKSxFZSs9IiBkaWZmICIrd2QoIiA+NSIpKGl0LVQpfWNvbnNvbGUubG9nKEVlKSxsPXBlfTpudWxsKX1yZXR1cm4gdGhpc30sZGVzdHJveTpmdW5jdGlvbiBiUWUoKXtyZXR1cm4gZGVsZXRlIHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkuX19ncmFw'@;
put 'aHZpel9fLHRoaXMuX3dvcmtlciYmdGhpcy5fd29ya2VyUG9ydENsb3NlKCksdGhpc30sZHJhd0VkZ2U6ZnVuY3Rpb24gU1FlKGMsbCxhLGQsaCxmPXt9KXtpZigoaD1PYmplY3QuYXNzaWduKHt9LGgpKS5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgXz1rcyhudWxsKTtl'@;
put 'bHNle3ZhciBpZT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHdlPVhnKGdsZS5jYWxsKHRoaXMsaCkpO189aWUuYXBwZW5kKCJnIikuZGF0YShbd2VdKSxfdy5jYWxsKF8ubm9kZSgp'@;
put 'LHdlKSxkbGUuY2FsbCh0aGlzLF8sYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6Xyx4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIE1RZShjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXdu'@;
put 'RWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBfPXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhp'@;
put 'cy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIV8uZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KF89dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFn'@;
put 'YXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz1fKSxfLmVtcHR5KCl8fGRsZS5jYWxsKHRoaXMsXyxjLGwsYSxkLGgsZiksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIHhRZShjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJv'@;
put 'cigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkxLF89dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRn'@;
put 'ZS55Mj1sLGhsZShkLGgsZixjLGwsXyxhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gRVFlKGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJu'@;
put 'IHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIF89dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxUPV8uZGF0dW0oKSxXPXRoaXMu'@;
put 'X2V4dHJhY3REYXRhKGwsVC5jaGlsZHJlbi5sZW5ndGgsXy5kYXR1bSgpKTtyZXR1cm4gVC5jaGlsZHJlbi5wdXNoKFcpLFlVKGwsVyksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpc30scmVtb3ZlRHJhd25FZGdlOmZsZSxyZW1vdmVEcmF3bkVkZ2U6ZmxlLGRyYXduRWRnZVNlbGVjdGlvbjpw'@;
put 'bGUsZHJhd25FZGdlU2VsZWN0aW9uOnBsZSxkcmF3Tm9kZTpmdW5jdGlvbiBrUWUoYyxsLGEsZD17fSxoPXt9KXtpZigoZD1PYmplY3QuYXNzaWduKHt9LGQpKS5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgZj1rcyhudWxsKTtlbHNle3ZhciBXPXRoaXMuX3NlbGVjdGlv'@;
put 'bi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikscGU9WGcoeWxlLmNhbGwodGhpcyxhLGQpKTtmPVcuYXBwZW5kKCJnIikuZGF0YShbcGVdKSxfdy5jYWxsKGYubm9kZSgpLHBlKSxtbGUuY2FsbCh0aGlzLGYsYyxs'@;
put 'LGEsZCxoKX1yZXR1cm4gdGhpcy5fZHJhd25Ob2RlPXtnOmYsbm9kZUlkOmEseDpjLHk6bCxhdHRyaWJ1dGVzOmR9LHRoaXN9LHVwZGF0ZURyYXduTm9kZTpmdW5jdGlvbiBBUWUoYyxsLGEsZD17fSxoPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBi'@;
put 'ZWVuIGRyYXduIik7dmFyIGY9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIG51bGw9PWEmJihhPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpLGQ9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcyxkKSx0aGlzLl9kcmF3bk5vZGUubm9kZUlkPWEsdGhpcy5fZHJhd25Ob2Rl'@;
put 'Lng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLCFmLmVtcHR5KCl8fGQuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChmPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBw'@;
put 'ZW5kKCJnIiksdGhpcy5fZHJhd25Ob2RlLmc9ZiksZi5lbXB0eSgpfHxtbGUuY2FsbCh0aGlzLGYsYyxsLGEsZCxoKSx0aGlzfSxtb3ZlRHJhd25Ob2RlOmZ1bmN0aW9uIFRRZShjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3'@;
put 'biIpO3ZhciBkPXRoaXMuX2RyYXduTm9kZS5nLGg9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCxkLmVtcHR5KCl8fHZsZShkLGMsbCxoKSx0aGlzfSxpbnNlcnREcmF3bk5vZGU6ZnVuY3Rpb24gRFFlKGMp'@;
put 'e2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTtudWxsPT1jJiYoYz10aGlzLl9kcmF3bk5vZGUubm9kZUlkKTt2YXIgbD10aGlzLl9kcmF3bk5vZGUuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7dmFyIGE9dGhpcy5fZHJhd25Ob2Rl'@;
put 'LmF0dHJpYnV0ZXM7aWYobC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyksYS5VUkx8fGEudG9vbHRpcCl2YXIgZj1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksVD0oZi5zZWxl'@;
put 'Y3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpKTtlbHNlIGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUi'@;
put 'KSxUPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO1QudGV4dChhLmxhYmVsfHxjKTt2YXIgcGU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSx3ZT1wZS5kYXR1'@;
put 'bSgpLEVlPXRoaXMuX2V4dHJhY3REYXRhKGwsd2UuY2hpbGRyZW4ubGVuZ3RoLHBlLmRhdHVtKCkpO3JldHVybiB3ZS5jaGlsZHJlbi5wdXNoKEVlKSxZVShsLEVlKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bk5vZGU6X2xlLHJlbW92ZURyYXduTm9kZTpfbGUsZHJh'@;
put 'd25Ob2RlU2VsZWN0aW9uOmJsZSxkcmF3bk5vZGVTZWxlY3Rpb246YmxlLGdyYXBodml6VmVyc2lvbjpmdW5jdGlvbiBiSmUoKXtyZXR1cm4gdGhpcy5fZ3JhcGh2aXpWZXJzaW9ufX0sWWcucHJvdG90eXBlLmdyYXBodml6PWZ1bmN0aW9uIFJRZShjKXt2YXIgbD10aGlzLm5vZGUoKS5fX2dy'@;
put 'YXBodml6X187cmV0dXJuIGw/KGwub3B0aW9ucyhjKSxoVChmdW5jdGlvbigpe2wuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpfS5iaW5kKHRoaXMpLDApKTpsPW5ldyBpWih0aGlzLGMpLGx9LFlnLnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9u'@;
put 'IE9RZShjKXtyZXR1cm4ga3ModGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgUFFlPUYoODg3MDApO2Z1bmN0aW9uIEZRZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDI4KX1mdW5jdGlvbiBIUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4o'@;
put 'KTttZSgwLCJjbHItaWNvbiIsMjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixqdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIE5RZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21l'@;
put 'KDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJkaXYiLDIzKSgyLCJpbnB1dCIsMjQsMjUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJpZXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCku'@;
put 'bGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LEZRZSwxLDAsImNsci1pY29uIiwyNiksSmUoNSxIUWUsMSwwLCJjbHItaWNvbiIsMjcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksQ2UoMiksUmUo'@;
put 'Im5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gVlFlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjgpfWZ1bmN0aW9uIEJRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwyOSkseHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKDIpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLHllKCl9fWZ1bmN0aW9uIGpR'@;
put 'ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDIyKSgxLCJkaXYiLDIzKSgyLCJpbnB1dCIsMzUsMzYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJr'@;
put 'ZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLHllKCksSmUoNCxWUWUsMSwwLCJjbHItaWNvbiIsMjYpLEplKDUsQlFlLDEsMCwiY2xyLWljb24iLDI3KSx5ZSgp'@;
put 'KCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoMikuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gelFlKGMsbCl7'@;
put 'MSZjJiZxdCgwLCJjbHItaWNvbiIsMjgpfWZ1bmN0aW9uIFVRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSgzKSxmPVZlKCkuJGltcGxpY2l0LF89VmUoMyk7cmV0dXJuIGgu'@;
put 'dmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsanQoXy50cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSkseWUoKX19ZnVuY3Rpb24gWlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpKDEsImRpdiIsMjMpKDIsImlucHV0IiwzOSwz'@;
put 'NikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMykudHJlZU9uRmlsdGVyKGgsImNv'@;
put 'bHVtbnMuQ09MTkFNRSIpKX0pLHllKCksSmUoNCx6UWUsMSwwLCJjbHItaWNvbiIsMjYpLEplKDUsVVFlLDEsMCwiY2xyLWljb24iLDI3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgy'@;
put 'KSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBZUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe2Nv'@;
put 'bnN0IGY9QnQoYSkuJGltcGxpY2l0LF89VmUoKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuY29sdW1uT25DbGljayhmLFQsXykpfSkscXQoMiwiY2xyLWljb24iLDQxKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoNCk7'@;
put 'Q2UoMSksZHIoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksQ2UoMikscHIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiBXUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzMSkseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlTm9kZUNsaWNrZWQoaCxfLFQudGFibGVzKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9'@;
put 'KSxtZSgxLCJwIiwzNykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRhYmxlT25DbGljayhmLlRBQkxFVVJJLGYsXykpfSkscXQoMiwiY2xyLWljb24iLDM4KSxOZSgzKSx5ZSgpLEplKDQsWlFl'@;
put 'LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksSmUoNSxZUWUsNCwzLCJjbHItdHJlZS1ub2RlIiwyKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxv'@;
put 'YWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSxDZSgxKSxSZSgiaWQiLGEuVEFCTEVVUkkpLENlKDIpLHByKCIgIixhLlRBQkxFTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLmNvbHVtbnMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBHUWUoYyxsKXtpZigxJmMp'@;
put 'e2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzMSkseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4ganQoXy50cmVlTm9kZUNsaWNrZWQoaCxmLF8ubGlicmFyeUxpc3QpKX0pKCJjbHJFeHBhbmRlZENoYW5n'@;
put 'ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsanQoZi5saWJy'@;
put 'YXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSkscXQoMiwiY2xyLWljb24iLDMzKSxOZSgzKSx5ZSgpLEplKDQsalFlLDYsMywiY2xyLXRyZWUtbm9kZSIsMSksSmUoNSxXUWUsNiw4LCJjbHItdHJlZS1ub2RlIiwzNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7ZHIoImNs'@;
put 'ci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLENlKDMpLHByKCIgIixhLkxJQlJBUllOQU1FLCIgIiksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVzKSxDZSgxKSxSZSgibmdG'@;
put 'b3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiAkUWUoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLEdRZSw2LDcsImNsci10cmVlLW5vZGUiLDMwKSxqcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlv'@;
put 'biBxUWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBLUWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDQ0KSxxdCgxLCJjbHItaWNvbiIsNDUpLG1lKDIsImgzIiw0NiksTmUoMywiUGxlYXNlIHNlbGVj'@;
put 'dCBhIGNvbHVtbiBvciB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gWFFlKGMsbCl7aWYoMSZjJiYobWUoMCwiaDMiLDU1KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSkscHIoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGli'@;
put 'VGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gSlFlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw1MyksSmUoMSxYUWUsMiwxLCJoMyIsNTQpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgx'@;
put 'KSxSZSgibmdJZiIsIWEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uJiYhYS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSl9fWZ1bmN0aW9uIFFRZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSxtZSgyLCJhIiw1NiksTmUoMykseWUoKSxOZSg0KSx5ZSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9VmUoMik7Q2UoMSkscHIoIiAiLGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzBdLCIuIiksQ2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxDZSgxKSxvcihhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVsxXSksQ2UoMSks'@;
put 'cHIoIiIsYS5saW5lYWdlQ29sdW1uTmFtZS5sZW5ndGg+MD8iLiIrYS5saW5lYWdlQ29sdW1uTmFtZToiIiwiICIpfX1mdW5jdGlvbiBlZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQp'@;
put 'LmRvd25sb2FkUE5HKCkpfSksTmUoMSwiIFBORyAiKSx5ZSgpfX1mdW5jdGlvbiB0ZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLmRvd25sb2FkQ1NWKCkpfSksTmUoMSwiIENTViAi'@;
put 'KSx5ZSgpfX1mdW5jdGlvbiBuZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZG93bmxvYWRTVkcoKSl9KSxOZSgyLCJTVkciKSx5ZSgp'@;
put 'LEplKDMsZWV0LDIsMCwiZGl2Iiw2NyksbWUoNCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5kb3dubG9hZERvdCgpKX0pLE5lKDUsIkRvdCIpLHllKCksSmUoNix0ZXQsMiwwLCJkaXYiLDY3KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgz'@;
put 'KTtDZSgzKSxSZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCksQ2UoMyksUmUoIm5nSWYiLGEuZmxhdGRhdGEpfX1mdW5jdGlvbiByZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjgpKDEsImlucHV0Iiw2OSkseHQo'@;
put 'ImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykuZ2VuZXJhdGVHcmFwaCgpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMykucmVmcmVzaENhY2hlPWgpfSkseWUoKSxtZSgyLCJsYWJlbCIpLE5lKDMsIlJlZnJlc2ggQ2Fj'@;
put 'aGUiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIGlldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gQnQoYSksanQoVmUoMikubGltaXREb3REZXB0aD0hMCl9KSxOZSgyLCIgTGltaXQgZGVwdGggIikseWUoKSxtZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxqdCho'@;
put 'LnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSkscXQoNSwiaW5wdXQiLDYxKSxtZSg2LCJsYWJlbCIpLE5lKDcsIkJhY2t3YXJkIikseWUoKSgpLG1lKDgsImRpdiIsNjApLHh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLGp0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxxdCg5LCJpbnB1dCIsNjEpLG1l'@;
put 'KDEwLCJsYWJlbCIpLE5lKDExLCJGb3J3YXJkIikseWUoKSgpKCksbWUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxOZSgxNCwiIERvd25sb2FkICIpLHF0KDE1LCJjbHItaWNvbiIsMTkpLHllKCksSmUoMTYsbmV0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIwKSx5'@;
put 'ZSgpLEplKDE3LHJldCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNSksUmUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxDZSg0KSxSZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksQ2UoNCksUmUoImRpc2FibGVk'@;
put 'IiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxDZSg0KSxSZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiBvZXQoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw3MyksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gc2V0KGMsbCl7MSZjJiZxdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24g'@;
put 'YWV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksSmUoMixzZXQsMSwwLCJzcGFuIiw3NikseWUoKSxxdCgzLCJkaXYiLDc3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMiksUmUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiBjZXQoYyxs'@;
put 'KXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxKZSgyLG9ldCwyLDAsInNwYW4iLDcxKSxKZSgzLGFldCw0LDEsImRpdiIsNzIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO2RyKCJtdC0yIixhLnRhYmxlRmxhZyksQ2UoMiksUmUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxD'@;
put 'ZSgxKSxSZSgibmdJZiIsIWEuZ3JhcGhMb2FkaW5nKX19ZnVuY3Rpb24gdWV0KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxKUWUsMiwxLCJkaXYiLDQ3KSxtZSgyLCJkaXYiLDQ4KSgzLCJzZWN0aW9uIiw0OSkoNCwiZGl2Iiw1MCksSmUoNSxRUWUsNSw0LCJzcGFuIiw3KSx5ZSgpLEplKDYs'@;
put 'aWV0LDE4LDQsImRpdiIsNTEpLHllKCksSmUoNyxjZXQsNCw0LCJkaXYiLDUyKSx5ZSgpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5ncmFwaENvbnRhaW5lciksQ2UoNCksUmUoIm5nSWYiLGEubGluZWFnZVRhYmxlTmFtZS5sZW5ndGg+MCksQ2UoMSksUmUo'@;
put 'Im5nSWYiLGEuZ3JhcGhDb250YWluZXIpLENlKDEpLFJlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gZGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5yZW5kZXJU'@;
put 'b0Rvd25sb2FkKCJQTkciKSl9KSxOZSgxLCIgUE5HICIpLHllKCl9fWZ1bmN0aW9uIGhldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnJl'@;
put 'bmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLE5lKDIsIlNWRyIpLHllKCksSmUoMyxkZXQsMiwwLCJkaXYiLDY3KSxtZSg0LCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksanQoaC5jYW5jZWxSZW5kZXJpbmdH'@;
put 'cmFwaCgpKX0pLE5lKDUsIiBEb3QgIikseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLFJlKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KX19Y29uc3QgZmV0PUYoMTY2NzYpO2xldCBGVD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcs'@;
put 'aWUpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLmxvY2F0aW9uPV8sdGhpcy5ldmVudFNlcnZpY2U9VCx0aGlzLmxvZ2dlclNlcnZpY2U9Vyx0aGlzLmhlbHBlclNlcnZpY2U9aWUsdGhpcy5zd2l0Y2hGbGFn'@;
put 'PSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhDb250YWluZXI9ITEsdGhpcy52aXpJbnB1dD0iIix0aGlzLmxpYnJhcmllc1BhZ2lu'@;
put 'Zz0hMSx0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJsZUNvbHVtbnNSZWY9IiIsdGhpcy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNvbHVtbk5hbWU9IiIsdGhpcy5saWI9bnVsbCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0'@;
put 'aGlzLnJlZnJlc2hDYWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmxhcmdlRG90RmlsZUxpbWl0PTFlMyx0aGlzLmxpbWl0RG90RGVwdGg9ITEs'@;
put 'dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhhLGQsaCxmPSExKXt2YXIgXz10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtkLmNv'@;
put 'bHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoXy50YWJsZT1hLGZ8fF8ub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxfLnRhYmxlPWEsXy5jdXJyZW50TGluZWFnZVBh'@;
put 'dGhMaWJUYWJsZT1kLkxJQk5BTUUrIi4iK2QuVEFCTEVOQU1FLHlpZWxkIF8uc2VsZWN0VGFibGUoYSxkKSxmfHxfLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSksXy5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKX0pKCl9c2VsZWN0VGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVy'@;
put 'biBmaShmdW5jdGlvbiooKXtoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3t0YWJsZXVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGFjb2xzIixmKS50aGVuKF89PntoLmNvbHVtbnNMaXN0PV8ubWV0YWNvbHMsaC5jb2x1'@;
put 'bW5zTGlzdCYmaC5jb2x1bW5zTGlzdC5sZW5ndGg+MCYmKGQuY29sdW1ucz1oLmNvbHVtbnNMaXN0LGQuZXhwYW5kZWQ9ITAsZC5sb2FkaW5nQ29sdW1ucz0hMSl9KS5jYXRjaChfPT5fKSxoLnNldEdsb2JhbERhdGEoKX0pKCl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1Bh'@;
put 'Z2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnko'@;
put 'aCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1'@;
put 'bmN0aW9uKigpe2QuaW5Gb3JlZ3JvdW5kPSEwLGQudGFibGVzP2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQ6KGQubG9hZGluZ1RhYmxlcz0hMCx5aWVsZCBoLnNlbGVjdExpYnJhcnkoYSxkKSksaC5jb2xsYXBzZVRyZWVJdGVtcyhoLmxpYnJhcnlMaXN0LGQpfSkoKX1zZWxlY3RMaWJyYXJ5KGEs'@;
put 'ZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC50YWJsZXNMaXN0PVtdLGguY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYnVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGF0YWJsZXMiLGYpLnRoZW4o'@;
put 'Xz0+e2gudGFibGVzTGlzdD1fLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVuZ3RoPjAmJihkLnRhYmxlcz1oLnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaChfPT5fKSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVt'@;
put 'bk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVl'@;
put 'T25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksR24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFy'@;
put 'Y2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0duLmxpbmVhZ2UubGlicmFyeUxp'@;
put 'c3Q9dGhpcy5saWJyYXJ5TGlzdCxHbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LEduLmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhpcy5jb2x1bW5zTGlzdCxHbi5saW5lYWdlLmxpYj10aGlzLmxpYixHbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsR24ubGluZWFnZS5jb2x1'@;
put 'bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PUduLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50YWJsZXNMaXN0PUduLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUduLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNT'@;
put 'ZWFyY2g9R24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0IGQ7dGhpcy5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQ'@;
put 'YXJhbXM6ZH0pfW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFnZSI7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdl'@;
put 'LmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9u'@;
put 'KCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7R24ubGluZWFnZS5s'@;
put 'aWJyYXJ5TGlzdCYmKEduLmxpbmVhZ2UubGlicmFyeUxpc3QubGVuZ3RoPjA/YS5sb2FkR2xvYmFsRGF0YSgpOnlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpLnRoZW4oXz0+e2EubGlicmFyeUxpc3Q9Xy5zYXNsaWJzLGEuaGVscGVyU2VydmljZS5k'@;
put 'aXNwbGF5TGlicmFyaWVzKGEubGlicmFyeUxpc3QpLGEubGlicmFyeUxpc3QmJmEubGlicmFyeUxpc3QubGVuZ3RoPjAmJihhLmxpYj1hLmxpYnJhcnlMaXN0WzBdLkxJQlJBUllJRCksYS5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaChfPT5fKSxhLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmli'@;
put 'ZShfPT57YS5vblJvdXRlQ2hhbmdlKCl9KSxhLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoXz0+e2Eub25Sb3V0ZUNoYW5nZSgpfSkpfSkoKX1vblJvdXRlQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KCgp'@;
put 'PT57Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5jb2x1cmksZD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5kaXJlY3Rpb24saD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZWlkLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5tYXhfZGVwdGg7'@;
put 'YSYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLmNvbHVtbj1hLHRoaXMuZ2VuZXJhdGVHcmFwaChhLGQsZikpLCF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpJiZoJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMu'@;
put 'dGFibGU9aCx0aGlzLmdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGgsZCxmKSl9LHRoaXMuZGVib3VuY2VUaW1lKX1uZ0FmdGVyQ29udGVudEluaXQoKXt9ZGlyZWN0aW9uVGV4dCgpe3JldHVybiB0aGlzLmZvcndhcmRMaW5lYWdlPyJGT1JXQVJEIjoiUkVWRVJTRSJ9b25HZW5lcmF0ZUNsaWNr'@;
put 'KCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLmNvbHVtbj90aGlzLmNvbHVtbi5zdWJzdHJpbmcodGhpcy5jb2x1bW4uaW5kZXhPZigiXFwiKSsxKTpudWxsO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvY29sdW1uLyIrZCsiLyIrYSl9b25HZW5l'@;
put 'cmF0ZUdyYXBoVGFibGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy50YWJsZS5pbmNsdWRlcygiXFwiKT90aGlzLnRhYmxlLnNwbGl0KCJcXCIpWzFdOnRoaXMudGFibGU7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS8iK2QrIi8iK2Ep'@;
put 'fWdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17U0FTQ29udHJvbFRhYmxlOlt7dGFibGVfaWQ6YSxkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCl9XX07cmV0dXJuInVuZGVmaW5lZCI9PT1fLlNBU0NvbnRy'@;
put 'b2xUYWJsZVswXS50YWJsZV9pZCYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKCkiLCJ0YWJsZV9pZCBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKF8uU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1o'@;
put 'KSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChULFcpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2h0YWJsZWxpbmVhZ2UiLF8pLnRoZW4oZnVu'@;
put 'Y3Rpb24oKXt2YXIgaWU9ZmkoZnVuY3Rpb24qKHBlKXtpZihwZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1h'@;
put 'eGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIHBlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFibGVOYW1lPXBlLmluZm9bMF0uTElCUkVGKyIuIitwZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgd2U9cGUuZmluYWxmaW5hbCxFZT0iIjtmb3IobGV0'@;
put 'IFplPTA7WmU8d2UubGVuZ3RoO1plKyspRWUrPXVuZXNjYXBlKHdlW1plXS5MSU5FKSsiXG4iO2lmKGYuZmxhdGRhdGE9cGUuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IFplPWYubGlicmFyeUxpc3QuZmluZChpdD0+cGUuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRl'@;
put 'cyhpdC5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKFplKXtsZXQgaXQ7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayhaZS5MSUJSQVJZSUQsWmUpLFplLnRhYmxlcyYmKGl0PVplLnRhYmxlcy5maW5kKGV0PT5ldC5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKHBlLmluZm9b'@;
put 'MF0uVEFCTEVJRC50b1VwcGVyQ2FzZSgpKSksaXQpKXtpZihmLnRhYmxlPWl0LlRBQkxFVVJJLGYudGFibGUpe2NvbnN0IGV0PWYudGFibGUucmVwbGFjZSgiXFwiLCJcXFxcIik7c2V0VGltZW91dCgoKT0+e2xldCB5dD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7ZXR9J11gKTt5'@;
put 'dCYmeXQuc2Nyb2xsSW50b1ZpZXcoKX0sMWUzKX1mLnRhYmxlT25DbGljayhpdC5UQUJMRVVSSSxpdCxaZSx2b2lkIDAhPT1kKX1aZSYmKFplLmV4cGFuZGVkPSEwKSxpdCYmKGl0LmV4cGFuZGVkPSEwKX19Zi52aXpJbnB1dD1FZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9'@;
put 'IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5pZGxvb2t1cD1wZS5pZGxvb2t1cCxwZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cGUuZmluYWxm'@;
put 'aW5hbC5sZW5ndGg6Zi5idWlsZEdyYXBoKCksVCgpfSk7cmV0dXJuIGZ1bmN0aW9uKHBlKXtyZXR1cm4gaWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goaWU9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Y2FuY2VsUmVuZGVyaW5nR3Jh'@;
put 'cGgoKXt0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgpfWNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKXt0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdy'@;
put 'YXBoKCgpPT57aWYobnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtzd2l0Y2godGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe2Nhc2UiUE5HIjp0aGlzLmRvd25sb2FkUE5HKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMuZG93bmxvYWRTVkcoKX10aGlzLnBlbmRpbmdSZW5kZXJE'@;
put 'b3dubG9hZD1udWxsLHRoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmJ1aWxkR3JhcGgoKX19KX1yZW5kZXJUb0Rvd25sb2FkKGEpe3N3aXRjaChhKXtjYXNlIlBORyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlBORyIsdGhpcy5jb250'@;
put 'aW51ZVJlbmRlcmluZ0dyYXBoKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJTVkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpfX1tYWtlR3JhcGhMaW5rYWJsZShhKXtsZXQgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ3JhcGggLm5v'@;
put 'ZGUiKTtmb3IobGV0IGggb2YgZCl7bGV0IFQsZj1oLnF1ZXJ5U2VsZWN0b3IoInRpdGxlIikuaW5uZXJIVE1MLF89YS5maW5kKFc9PlcuTUVUQUlEPT09Zik7XyYmKFQ9IlRBQkxFIj09PV8uTUVUQVRZUEU/Ii92aWV3L2RhdGEvIitfLk1FVEFOQU1FOiIvdmlldy9tZXRhZGF0YS9vYmplY3Qv'@;
put 'IitfLk1FVEFJRCxoLmNsYXNzTGlzdC5hZGQoImN1cnNvci1wb2ludGVyIiksaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsVz0+e3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoVCl9KSl9fWdlbmVyYXRlR3JhcGgoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xl'@;
put 'dCBfPXtTQVNDb250cm9sVGFibGU6W3tjb2x1cmk6YXx8Zi5jb2x1bW4sZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpLHJlZnJlc2g6Zi5yZWZyZXNoQ2FjaGU/MTowfV19O3JldHVybiJ1bmRlZmluZWQiPT09Xy5TQVNDb250cm9sVGFibGVbMF0uY29sdXJpJiZmLmV2ZW50U2Vydmlj'@;
put 'ZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaCgpIiwiY29sdXJpIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYoXy5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFp'@;
put 'bmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6SW5wdXQ9IiIsbmV3IFByb21pc2UoKFQsVyk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaGNvbGxpbmVhZ2UiLF8pLnRoZW4oZnVuY3Rpb24oKXt2YXIgaWU9ZmkoZnVuY3Rpb24qKHBlKXtpZihwZS5mbGF0ZGF0YS5s'@;
put 'ZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBh'@;
put 'ZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHBlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0i'@;
put 'LHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFibGVOYW1lPXBlLmluZm9bMF0uTElCUkVGKyIuIitwZS5pbmZvWzBdLlRBQk5BTUUsZi5saW5lYWdlQ29sdW1uTmFtZT1wZS5pbmZvWzBdLkNPTE5BTUUsZi5pZGxvb2t1cD1wZS5pZGxvb2t1cDtsZXQgd2U9cGUuZnJvbXNhcyxFZT0i'@;
put 'Ijtmb3IobGV0IFplPTA7WmU8d2UubGVuZ3RoO1plKyspRWUrPXVuZXNjYXBlKHdlW1plXS5TVFJJTkcpKyJcbiI7aWYoZi52aXpJbnB1dD1FZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoi'@;
put 'KS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5mbGF0ZGF0YT1wZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgaXQsWmU9Zi5saWJyYXJ5TGlzdC5maW5kKGV0PT5wZS5pbmZvWzBdPy5MSUJVUkk/LnRvVXBwZXJDYXNlKCk/LmluY2x1ZGVzKGV0Py5MSUJSQVJZSUQ/LnRvVXBwZXJDYXNl'@;
put 'KCkpKTtaZSYmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soWmUuTElCUkFSWUlELFplKSxaZS50YWJsZXMmJihpdD1aZS50YWJsZXMuZmluZChldD0+ZXQuVEFCTEVVUkk9PT1wZS5pbmZvWzBdLlRBQlVSSSksaXQmJmYudGFibGVPbkNsaWNrKGl0LlRBQkxFVVJJLGl0LFplLCEwKS50aGVuKCgp'@;
put 'PT57bGV0IGV0PWl0LlRBQkxFVVJJO2lmKGV0KXtjb25zdCB5dD1ldC5yZXBsYWNlKCJcXCIsIlxcXFwiKTtsZXQgRXQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3l0fSddYCk7c2V0VGltZW91dCgoKT0+e0V0JiYoZi5sb2dnZXJTZXJ2aWNlLmxvZygibGlicmFyeVRvU2VsZWN0'@;
put 'IixaZSksRXQuc2Nyb2xsSW50b1ZpZXcoKSl9LDFlMyl9fSkpLFplJiYoWmUuZXhwYW5kZWQ9ITApLGl0JiYoaXQuZXhwYW5kZWQ9ITApKX1wZS5mcm9tc2FzLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9cGUuZnJvbXNhcy5sZW5ndGg6Zi5idWlsZEdy'@;
put 'YXBoKCksVCgpfSk7cmV0dXJuIGZ1bmN0aW9uKHBlKXtyZXR1cm4gaWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goaWU9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Z2V0U1ZHVVJMKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5'@;
put 'SWQoImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcixoPW5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChoKX1nZXRTVkdCbG9iKCl7bGV0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo'@;
put 'ImdyYXBoIiksZD1uZXcgWE1MU2VyaWFsaXplcjtyZXR1cm4gbmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pfWRvd25sb2FkU1ZHKCl7aWYoUFQoIiNncmFwaCIpLnJlc2V0Wm9vbSgpLG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5n'@;
put 'KCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0U1ZHQmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgic3ZnIikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldFNWR1VSTCgpLGEuZG93bmxv'@;
put 'YWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1kb3dubG9hZFBORygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe1BUKCIjZ3JhcGgiKS5yZXNldFpv'@;
put 'b20oKSxQUWUuc2F2ZVN2Z0FzUG5nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNncmFwaCBzdmciKSxhLmNvbnN0cnVjdE5hbWUoInBuZyIpKX0pKCl9ZG93bmxvYWRDU1YoKXtsZXQgYT10aGlzLmZsYXRkYXRhO2NvbnN0IGQ9KHBlLHdlKT0+bnVsbD09PXdlPyIiOndlLGg9T2JqZWN0Lmtl'@;
put 'eXMoYVswXSk7bGV0IGY9YS5tYXAocGU9PmgubWFwKHdlPT5KU09OLnN0cmluZ2lmeShwZVt3ZV0sZCkpLmpvaW4oIiwiKSk7Zi51bnNoaWZ0KGguam9pbigiLCIpKTtsZXQgXz1mLmpvaW4oIlxyXG4iKTt2YXIgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksVz1uZXcgQmxvYihbX10s'@;
put 'e3R5cGU6InRleHQvY3N2In0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKFcsdGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSk7ZWxzZXt2YXIgaWU9d2luZG93LlVSTC5jcmVhdGVPYmplY3RV'@;
put 'UkwoVyk7VC5ocmVmPWllLFQuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSxULmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoaWUpLFQucmVtb3ZlKCl9fWdldERvdFVybCgpe2xldCBkPW5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFp'@;
put 'biJ9KTtyZXR1cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZCl9Z2V0RG90QmxvYigpe3JldHVybiBuZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4ifSl9ZG93bmxvYWREb3QoKXtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2Yo'@;
put 'Ii5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldERvdEJsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXREb3RVcmwoKSxhLmRvd25sb2FkPXRoaXMuY29u'@;
put 'c3RydWN0TmFtZSgidHh0IiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX19c2hvd1N2Zygpe3dpbmRvdy5vcGVuKHRoaXMuZ2V0U1ZHVVJMKCksIl9ibGFuayIpfWJ1aWxkR3JhcGgoYSl7dGhpcy5ldmVudFNlcnZp'@;
put 'Y2UuY2xvc2VTaWRlYmFyKCksdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMCxzZXRUaW1lb3V0KCgpPT57UFQoIiNncmFwaCIpLnpvb20oITApLmFkZEltYWdlKCJodHRwczovL2RhdGFjb250cm9sbGVyLmlvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAxL2Zj'@;
put 'MS5wbmciLCIzMHB4IiwiMzBweCIpLnJlbmRlckRvdCh0aGlzLnZpeklucHV0LCgpPT57dGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmlkbG9va3VwJiZ0aGlzLm1ha2VHcmFwaExpbmthYmxlKHRoaXMuaWRsb29rdXApLGEmJmEoKX0pfSwxMDApfWNvbnN0cnVjdE5hbWUoYSl7bGV0IGQ9'@;
put 'IiIsaD0iIixmPSIiLF89ZmV0KCkuZm9ybWF0KCJZWU1NRERfSEhtbSIpO2lmKHRoaXMubGlicmFyeUxpc3QmJnRoaXMubGlicmFyeUxpc3QubGVuZ3RoKXtsZXQgVD10aGlzLmxpYnJhcnlMaXN0LmZpbmQoVz0+Vy5MSUJSQVJZSUQ9PXRoaXMubGliKTtUJiYoZD1gXyR7VC5MSUJSQVJZTkFN'@;
put 'RX1gKX1pZih0aGlzLnRhYmxlc0xpc3QmJnRoaXMudGFibGVzTGlzdC5sZW5ndGgpe2xldCBUPXRoaXMudGFibGVzTGlzdC5maW5kKFc9PlcuVEFCTEVVUkk9PXRoaXMudGFibGUpO1QmJihoPWBfJHtULlRBQkxFTkFNRX1gKX1pZih0aGlzLmNvbHVtbnNMaXN0JiZ0aGlzLmNvbHVtbnNMaXN0'@;
put 'Lmxlbmd0aCl7bGV0IFQ9dGhpcy5jb2x1bW5zTGlzdC5maW5kKFc9PlcuQ09MVVJJPT10aGlzLmNvbHVtbik7VCYmKGY9YF8ke1QuQ09MTkFNRX1gKX1yZXR1cm5gJHt0aGlzLmRpcmVjdGlvblRleHQoKX0ke2R9JHtofSR7Zn1fJHtffS4ke2F9YH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQzApLHR0KG9hKSx0dChXbCksdHQoRHMpLHR0KEpkKSx0dCh2bCksdHQodzApLHR0KFRjKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saW5lYWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIi'@;
put 'XSxkZWNsczo1OCx2YXJzOjExLGNvbnN0czpbWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsx'@;
put 'LCJjYXJkIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciIsImQtZmxleCIsImZsZXgt'@;
put 'Y29sdW1uIl0sWzEsImJpZ2xpbmVhZ2Utcm93IiwibWItMGkiXSxbInR5cGUiLCJudW1iZXIiLCJtaW4iLCIxIiwicGxhY2Vob2xkZXIiLCJNYXggZGVwdGggdmFsdWUiLDEsImNsci1pbnB1dCIsIm1heC1kZXB0aC1pbnB1dCJdLFsibWF4RGVwdGhEb3QiLCIiXSxbMSwibWItMjAiXSxbMSwi'@;
put 'YmlnbGluZWFnZS1yb3ciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsIm10LTMtbmVnYXRpdmUiLDMsImRpc2FibGVkIl0sWyJz'@;
put 'aGFwZSIsImNhcmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsibWF4RGVwdGgiLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIs'@;
put 'Im5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxb'@;
put 'InNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNr'@;
put 'IiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9y'@;
put 'IiwibmdGb3JPZiJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWzEsIm0tMCIsImN1cnNvci1w'@;
put 'b2ludGVyIiwzLCJpZCIsImNsaWNrIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiQ29sdW1ucyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsxLCJjbHItdHJl'@;
put 'ZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwib2JqZWN0cyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlz'@;
put 'LWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiZm9ybS1ibG9jayIsInN3'@;
put 'IiwicG9zaXRpb24tcmVsYXRpdmUiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibGluYWdlLXRpdGxlLXdyYXBwZXIiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJmb250LXdlaWdodC1ib2xkIiwicG9zaXRpb24tYWJzb2x1dGUiXSxbImNsYXNzIiwiY2xyLWNv'@;
put 'bC1tZC0xMiB0ZXh0LWNlbnRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCIsNCwibmdJZiJdLFszLCJtdC0yIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsInRleHQtY2VudGVy'@;
put 'IHBiLTEwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwicGItMTAiXSxbMywicm91dGVyTGluayJdLFsxLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtZW5kIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIs'@;
put 'MywiY2xpY2siXSxbMSwiYnRuLWdyb3VwIiwiZC1ibG9jayJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwibXItMTAiXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwi'@;
put 'YnRuIiwiYnRuLWluZm8tb3V0bGluZSIsMywiZGlzYWJsZWQiXSxbImNsYXNzIiwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25JdGVt'@;
put 'IiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsInJlZnJlc2hDYWNoZSIsMywibmdNb2RlbCIsImNoYW5nZSIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwidGV4dC1j'@;
put 'ZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImdyYXBoLXJlbmRlci1zcGlubmVyIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5l'@;
put 'ci1zbSIsNCwibmdJZiJdLFsiaWQiLCJncmFwaCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1WbigpO21lKDAsImFwcC1zaWRlYmFyIiwwKSx4dCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5sb2FkTW9yZUxpYnJhcmllcygpfSksbWUo'@;
put 'MSwiY2xyLXRyZWUiKSxKZSgyLE5RZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLEplKDMsJFFlLDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpLEplKDQscVFlLDMsMCwiZGl2IiwzKSx5ZSgpLG1lKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSxKZSg3LEtRZSw0LDAsImRpdiIsNiksSmUoOCx1ZXQs'@;
put 'OCw0LCJuZy1jb250YWluZXIiLDcpLHllKCkoKSxtZSg5LCJjbHItbW9kYWwiLDgpKDEwLCJoMyIsOSksTmUoMTEsIkxpbWl0IERlcHRoIikseWUoKSxtZSgxMiwiZGl2IiwxMCkoMTMsInAiKSxOZSgxNCwiRW50ZXIgdGhlIGRlcHRoIG51bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBE'@;
put 'T1QgcmVuZGVyaW5nIHRvOiIpLHllKCkoKSxtZSgxNSwiZGl2IiwxMSkoMTYsImRpdiIsMTIpLHF0KDE3LCJpbnB1dCIsMTMsMTQpLHllKCksbWUoMTksImNsci1jb250cm9sLWhlbHBlciIsMTUpLE5lKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1'@;
put 'dCBlbXB0eSIpLHllKCksbWUoMjEsImRpdiIsMTYpKDIyLCJidXR0b24iLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubGltaXREb3REZXB0aD0hMX0pLE5lKDIzLCIgQ2FuY2VsICIpLHllKCksbWUoMjQsImJ1dHRvbiIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdCho'@;
put 'KTtjb25zdCBfPSRpKDE4KTtyZXR1cm4gZC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChfLnZhbHVlKSxqdChkLmxpbWl0RG90RGVwdGg9ITEpfSksTmUoMjUsIiBSZXN1Ym1pdCAiKSx5ZSgpKCkoKSgpLG1lKDI2LCJjbHItbW9kYWwiLDgpKDI3LCJoMyIsOSksTmUoMjgsIldhcm5pbmciKSx5ZSgp'@;
put 'LG1lKDI5LCJkaXYiLDEwKSgzMCwicCIpLE5lKDMxKSx5ZSgpKCksbWUoMzIsImRpdiIsMTEpKDMzLCJkaXYiLDE2KSgzNCwicCIpLE5lKDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLHllKCksbWUoMzYsImJ1dHRvbiIsMTcpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gZC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9KSxOZSgzNywiIFJlbmRlciAiKSx5ZSgpKCksbWUoMzgsImRpdiIsMTYpKDM5LCJwIiksTmUoNDAsIkRvd25sb2FkIHRoZSByZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSx5ZSgpLG1lKDQxLCJj'@;
put 'bHItZHJvcGRvd24iKSg0MiwiYnV0dG9uIiwxOCksTmUoNDMsIiBEb3dubG9hZCAiKSxxdCg0NCwiY2xyLWljb24iLDE5KSx5ZSgpLEplKDQ1LGhldCw2LDEsImNsci1kcm9wZG93bi1tZW51IiwyMCkseWUoKSgpLG1lKDQ2LCJkaXYiLDE2KSg0NywicCIpLE5lKDQ4LCJSZXN1Ym1pdCB3aXRo'@;
put 'IGEgbWF4LWRlcHRoIChzcGVjaWZ5IGRlcHRoKSIpLHllKCkscXQoNDksImlucHV0IiwxMywyMSksbWUoNTEsImJ1dHRvbiIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChoKTtjb25zdCBfPSRpKDUwKTtyZXR1cm4ganQoZC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChfLnZhbHVlKSl9KSxO'@;
put 'ZSg1MiwiIFJlc3VibWl0ICIpLHllKCkoKSxtZSg1MywiZGl2IiwxNikoNTQsInAiKSxOZSg1NSwiQ2FuY2VsIHRoaXMgc3VibWlzc2lvbiIpLHllKCksbWUoNTYsImJ1dHRvbiIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpfSksTmUo'@;
put 'NTcsIiBDYW5jZWwgIikseWUoKSgpKCkoKX0yJmEmJihDZSgyKSxSZSgibmdJZiIsZC5saWJyYXJ5TGlzdCksQ2UoMSksUmUoIm5nRm9yT2YiLGQubGlicmFyeUxpc3QpLENlKDEpLFJlKCJuZ0lmIixkLmxpYnJhcmllc1BhZ2luZyksQ2UoMyksUmUoIm5nSWYiLCFkLmNvbHVtbiYmIWQudGFi'@;
put 'bGUpLENlKDEpLFJlKCJuZ0lmIixkLmNvbHVtbnx8ZC50YWJsZSksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDE3KSxSZSgiY2xyTW9kYWxPcGVuIixudWxsIT09ZC5sYXJnZURvdEZpbGVMaW5lcykoImNsck1vZGFs'@;
put 'Q2xvc2FibGUiLCExKSxDZSg1KSxwcigiIFRoZSBnZW5lcmF0ZWQgZG90IGZpbGUgaGFzICIsZC5sYXJnZURvdEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxDZSgxMSksUmUoImRpc2Fi'@;
put 'bGVkIiwhZC5jb2x1bW4mJiFkLnRhYmxlKSl9LGRlcGVuZGVuY2llczpbeHMsWmksQnUsV2EsUzAsQnMsT3MsZGQsZzEsRHAsa2Esb3Usc3UsWnUsYzIsVXMsSEYsRDAsVDAsZjEsTmYsYWcsbGcsSzgsbjNdLHN0eWxlczpbIi50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlu'@;
put 'cHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5z'@;
put 'aXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9I2dyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDE5NXB4KTtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2JvcmRlcjox'@;
put 'cHggc29saWQgI2U0ZTRlNDttYXJnaW4tdG9wOjEwcHh9LnNlbGVjdGlvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21heC13aWR0aDo2NzBweH0uY29sdW1uLWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5O2NvbG9yOiMwMDB9LmNv'@;
put 'bnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gMTIwcHgpfS5jb250ZW50LWFyZWFbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNhcmRbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0gLjM1cmVtIWltcG9ydGFudH1jbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17'@;
put 'd2hpdGUtc3BhY2U6bm93cmFwfS5ncmFwaC1yZW5kZXItc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjEwcHh9LmJpZ2xpbmVhZ2Utcm93W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjBweH0ubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS5s'@;
put 'aW5lYWdlLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MTJweH0ubWF4LWRlcHRoLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnRvZ2dsZS1zd2l0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXttYXJnaW4tYm90dG9tOjIwcHh9fSJdfSksY30pKCk7ZnVuY3Rpb24gcGV0KGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwxMSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VjKCJ2YWx1ZSIsYSksQ2UoMSkscHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gZ2V0KGMs'@;
put 'bCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTgpfWZ1bmN0aW9uIG1ldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubWV0YURhdGFTZWFyY2g9IiIsanQoaC5tZXRh'@;
put 'TGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gdmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTIpKDEsImRpdiIsMTMpKDIsImlucHV0IiwxNCwxNSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChW'@;
put 'ZSgpLm1ldGFEYXRhU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsZ2V0LDEsMCwiY2xyLWljb24iLDE2KSxKZSg1LG1ldCwxLDAsImNsci1pY29uIiwxNykseWUoKSgpfWlmKDImYyl7Y29u'@;
put 'c3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubWV0YURhdGFTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIF9ldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21l'@;
put 'KDAsImNsci10cmVlLW5vZGUiLDIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBqdChfLnRyZWVOb2RlQ2xpY2tlZChoLGYsXy5tZXRhRGF0YUxpc3QpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7'@;
put 'cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQsanQoZi5tZXRhRGF0YU9uQ2xpY2soZi5t'@;
put 'ZXRhRGF0YUlkLGgpKX0pLHF0KDIsImNsci1pY29uIiwyMyksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoMykscHIoIiAiLGEu'@;
put 'SUQsIiAiKX19ZnVuY3Rpb24gYmV0KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxfZXQsNCwzLCJjbHItdHJlZS1ub2RlIiwyMCksanIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiB5ZXQoYyxsKXsxJmMmJihtZSgwLCJk'@;
put 'aXYiLDI0KSxxdCgxLCJjbHItaWNvbiIsMjUpLG1lKDIsImgzIiwyNiksTmUoMywiUGxlYXNlIHNlbGVjdCBhIHR5cGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIHdldChjLGwpezEmYyYmKG1lKDAsImg0IiksTmUoMSwiTG9hZGluZyBtZXRhZGF0YSB0eXBlcyIpLHllKCkpfWZ1bmN0aW9uIENldChj'@;
put 'LGwpezEmYyYmKG1lKDAsImg0IiksTmUoMSwiTG9hZGluZyBtZXRhZGF0YSBvYmplY3RzIikseWUoKSl9ZnVuY3Rpb24gTWV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksSmUoMSx3ZXQsMiwwLCJoNCIsMjkpLEplKDIsQ2V0LDIsMCwiaDQiLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUo'@;
put 'Mik7Q2UoMSksUmUoIm5nSWYiLGEubWV0YXR5cGVzTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFhLm1ldGF0eXBlc0xvYWRpbmcpfX1mdW5jdGlvbiB4ZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI3KSgxLCJzcGFuIiwyOCksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSxKZSgzLE1l'@;
put 'dCwzLDIsImRpdiIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLFJlKCJuZ0lmIixhLmxvYWRpbmcpfX1mdW5jdGlvbiBFZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDM2KSgxLCJpbnB1dCIsMzcsMzgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv'@;
put 'bihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikubWV0YU9iamVjdFNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikubWV0YU9iamVjdE9uRmlsdGVyKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdNb2RlbCIsYS5t'@;
put 'ZXRhT2JqZWN0U2VhcmNoKX19ZnVuY3Rpb24ga2V0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNDIpfWZ1bmN0aW9uIEFldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIzKX1mdW5jdGlvbiBUZXQoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw1MyksTmUoMSkseWUoKSksMiZjKXtjb25z'@;
put 'dCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLHByKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBEZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiw0OCkoMSwiZGl2Iiw0OSksSmUoMixrZXQsMSwwLCJjbHItaWNvbiIsNTApLEplKDMsQWV0LDEsMCwiY2xyLWljb24iLDUxKSxO'@;
put 'ZSg0KSxKZSg1LFRldCwyLDEsInAiLDUyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kYWJsZSIsITApLENlKDEpLGRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsYS5jb3Vu'@;
put 'dCksQ2UoMSkscHIoIiAiLGEuZGlzcGxheSwiICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIElldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlIiw0NiksSmUoMSxEZXQsNiw3LCJjbHItdHJlZS1ub2RlIiw0NyksYmEoMiwiYXN5bmMiKSx5ZSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9VmUoNik7UmUoImNsckxhenkiLCEwKSxDZSgxKSxSZSgiY2xyUmVjdXJzaXZlRm9yT2YiLFVsKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gTGV0KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWFjY29yZGlv'@;
put 'bi1jb250ZW50IiksSmUoMSxJZXQsMyw1LCJjbHItdHJlZSIsNDUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSgxKSxSZSgibmdJZiIsYS5zaG93QWNjKX19ZnVuY3Rpb24gUmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDEpLHh0'@;
put 'KCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgzKTtyZXR1cm4ganQoaD9fLnBhbmVsQ2hhbmdlKGgsZik6IiIpfSksbWUoMSwiY2xyLWFjY29yZGlvbi10aXRsZSIpLHF0KDIsImNsci1pY29uIiw0Miks'@;
put 'TmUoMyksbWUoNCwicCIsNDMpLE5lKDUpLHllKCkoKSxKZSg2LExldCwyLDEsImNsci1hY2NvcmRpb24tY29udGVudCIsNDQpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDMpLHByKCIgIixhLk5BTUUsIiAiKSxDZSgyKSxvcihhLklEKX19ZnVuY3Rpb24gT2V0KGMs'@;
put 'bCl7aWYoMSZjJiYoVnIoMCksSmUoMSxSZXQsNywyLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MCksanIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBQZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM5KSgxLCJjbHIt'@;
put 'YWNjb3JkaW9uIiksSmUoMixPZXQsMiwxLCJuZy1jb250YWluZXIiLDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIEZldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDQyKX1mdW5jdGlvbiBI'@;
put 'ZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyMyl9ZnVuY3Rpb24gTmV0KGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxwcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gVmV0KGMsbCl7aWYoMSZjJiYo'@;
put 'bWUoMCwiY2xyLXRyZWUtbm9kZSIsNDgpKDEsImRpdiIsNDkpLEplKDIsRmV0LDEsMCwiY2xyLWljb24iLDUwKSxKZSgzLEhldCwxLDAsImNsci1pY29uIiw1MSksTmUoNCksSmUoNSxOZXQsMiwxLCJwIiw1MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoImNsckV4cGFu'@;
put 'ZGFibGUiLCEwKSxDZSgxKSxkcigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCksQ2UoMSksUmUoIm5nSWYiLGEuY291bnQpLENlKDEpLHByKCIgIixhLmRpc3BsYXksIiAiKSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBCZXQo'@;
put 'YyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZSIsNDYpLEplKDEsVmV0LDYsNywiY2xyLXRyZWUtbm9kZSIsNDcpLGJhKDIsImFzeW5jIikseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO1JlKCJjbHJMYXp5IiwhMCksQ2UoMSksUmUoImNsclJlY3Vyc2l2ZUZvck9mIixVbCgyLDMsYS5yb290'@;
put 'JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIGpldChjLGwpe2lmKDEmYyYmKFZyKDApLG1lKDEsImRpdiIsNTQpLHF0KDIsImNsci1pY29uIiw0MiksbWUoMywiZGl2Iiw1NSkoNCwicCIsNTYpLE5lKDUpLHllKCksbWUoNiwicCIsNTcp'@;
put 'LE5lKDcpLHllKCkoKSgpLEplKDgsQmV0LDMsNSwiY2xyLXRyZWUiLDQ1KSxqcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSg1KSxwcigiICIsYS5OQU1FLCIgIiksQ2UoMikscHIoIiAiLGEuSUQsIiAiKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93QWNjKX19ZnVuY3Rp'@;
put 'b24gemV0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzOSksSmUoMSxqZXQsOSwzLCJuZy1jb250YWluZXIiLDQpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5jdGlvbiBVZXQoYyxsKXtpZigxJmMmJihtZSgw'@;
put 'LCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSxtZSg1LCJjbHItZGctY2VsbCIpLE5lKDYpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuVFlQRSksQ2UoMiksb3IoYS5OQU1F'@;
put 'KSxDZSgyKSxvcihhLlZBTFVFKX19Y29uc3QgWmV0PWZ1bmN0aW9uKCl7cmV0dXJuWzEwLDIwLDUwLDEwMF19O2Z1bmN0aW9uIFlldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kYXRhZ3JpZCIsNTgpKDEsImNsci1kZy1jb2x1bW4iKSxOZSgyLCIgVFlQRSAiKSxxdCgzLCJjbHItZGctc3Ry'@;
put 'aW5nLWZpbHRlciIsNTkpLHllKCksbWUoNCwiY2xyLWRnLWNvbHVtbiIpLE5lKDUsIiBOQU1FICIpLHF0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiw1OSkseWUoKSxtZSg3LCJjbHItZGctY29sdW1uIiksTmUoOCwiIFZBTFVFICIpLHF0KDksImNsci1kZy1zdHJpbmctZmlsdGVyIiw1OSks'@;
put 'eWUoKSxKZSgxMCxVZXQsNywzLCJjbHItZGctcm93Iiw2MCksbWUoMTEsImNsci1kZy1mb290ZXIiKSgxMiwiY2xyLWRnLXBhZ2luYXRpb24iLDYxLDYyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNjMpLE5lKDE1LCJBdHRyaWJ1dGVzIHBlciBwYWdlIikseWUoKSxOZSgxNikseWUoKSgpKCkp'@;
put 'LDImYyl7Y29uc3QgYT0kaSgxMyksZD1WZSgyKTtDZSgzKSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudHlwZUZpbHRlciksQ2UoMyksUmUoImNsckRnU3RyaW5nRmlsdGVyIixkLm5hbWVGaWx0ZXIpLENlKDMpLFJlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC52YWx1ZUZpbHRlciksQ2UoMSks'@;
put 'UmUoImNsckRnSXRlbXNPZiIsZC5tZXRhT2JqZWN0QXR0cmlidXRlcyksQ2UoMiksUmUoImNsckRnUGFnZVNpemUiLDEwKSxDZSgyKSxSZSgiY2xyUGFnZVNpemVPcHRpb25zIiwkcyg5LFpldCkpLENlKDIpLGIwKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIs'@;
put 'YS50b3RhbEl0ZW1zLCIgQXR0cmlidXRlcyAiKX19ZnVuY3Rpb24gV2V0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwzMCkoMSwiZGl2IiwzMSksSmUoMixFZXQsMywxLCJkaXYiLDMyKSxxdCgzLCJiciIpLEplKDQsUGV0LDMsMSwiZGl2IiwzMyksSmUoNSx6ZXQsMiwxLCJkaXYiLDMzKSx5'@;
put 'ZSgpLG1lKDYsImRpdiIsMzQpKDcsImgzIiksTmUoOCkseWUoKSxKZSg5LFlldCwxNywxMCwiY2xyLWRhdGFncmlkIiwzNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsYS5tZXRhT2JqZWN0TGlzdCYmIWEub2JqZWN0Um91dGUpLENlKDIpLFJlKCJuZ0lmIiwh'@;
put 'YS5vYmplY3RWaWV3KSxDZSgxKSxSZSgibmdJZiIsYS5vYmplY3RWaWV3KSxDZSgzKSxvcihhLmFzc29PYmplY3RTZWxlY3RlZCksQ2UoMSksUmUoIm5nSWYiLGEuc2hvd1RhYmxlKX19bGV0IG9aPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMuZXZlbnRTZXJ2'@;
put 'aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPV8sdGhpcy5yb3V0ZT1ULHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucz1b'@;
put 'XSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlzLm1ldGFPYmplY3RTaXplPTIwMCx0aGlzLmFzc29UeXBlU2Vs'@;
put 'ZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBvc2l0b3J5PSIiLHRoaXMub2JqZWN0Um91dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1XPT5XLmNvdW50P1dpKFcuZGV0YWlscyk6dGhpcy5zYXNTZXJ2'@;
put 'aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6Vy5BU1NPQ1VSSX1dfSkudGhlbihwZT0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9cGUuYXR0cmlidXRlcyx0aGlzLmFzc29PYmplY3RTZWxl'@;
put 'Y3RlZD1XLk5BTUU7bGV0IHdlPXRoaXMucm91dGVyLnVybDtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5vYmplY3RSb3V0ZT93ZS5zbGljZSgwLHdlLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK1cuQVNTT0NVUkkuc2xpY2UoMStXLkFTU09DVVJJLmlu'@;
put 'ZGV4T2YoIlxcIikpOndlKyIvb2JqZWN0LyIrVy5BU1NPQ1VSSS5zbGljZSgxK1cuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSkpLHRoaXMuZ2V0QXNzb3NpYXRpb25zQ291bnQocGUuYXNzb2NpYXRpb25zKX0pLHRoaXMuZGVib3VuY2U9ITF9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNl'@;
put 'bGVjdGlvbj0idmlldy9tZXRhZGF0YSIsdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvdmlldy9tZXRhZGF0YS9vYmplY3QvIikmJih0aGlzLm9iamVjdFJvdXRlPSEwLHRoaXMub2JqZWN0Vmlldz0hMCksdGhpcy5wYWdlU2l6ZT01LEduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCYmR24ubWV0'@;
put 'YWRhdGEubWV0YVJlcG9zaXRvcmllcyYmIXRoaXMub2JqZWN0Um91dGU/KHRoaXMubWV0YURhdGFMaXN0PUduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCx0aGlzLnJlcG9zaXRvcmllcz1Hbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzLHRoaXMucmVwb3NpdG9yeT1Hbi5tZXRhZGF0YS5zZWxl'@;
put 'Y3RlZFJlcG9zaXRvcnksdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMSx0aGlzLm1ldGFEYXRhU2VhcmNoPUduLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoKToodGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXR5cGVzIixudWxsKS50aGVuKGE9Pnt0'@;
put 'aGlzLm1ldGFEYXRhTGlzdD1hLnR5cGVzLEduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdD10aGlzLm1ldGFEYXRhTGlzdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXJlcG9zIixudWxsKS50aGVu'@;
put 'KGE9PntsZXQgZD0hMTt0aGlzLnJlcG9zaXRvcmllcz1bXTtmb3IobGV0IGg9MDtoPGEub3V0cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5wdXNoKGEub3V0cmVwb3NbaF0uTkFNRSksIkZvdW5kYXRpb24iPT09YS5vdXRyZXBvc1toXS5OQU1FJiYoZD0hMCk7aWYodGhpcy5y'@;
put 'ZXBvc2l0b3J5PWQ/IkZvdW5kYXRpb24iOmEub3V0cmVwb3NbMF0uTkFNRSxHbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLEduLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJlcG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVu'@;
put 'dFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDtsZXQgaD0iIixmPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlzdC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVj'@;
put 'dFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0T25DbGljayh0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxl'@;
put 'JiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFEYXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0'@;
put 'aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEiKSx0aGlzLnNob3dEYXRhPSExLHRoaXMubG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dB'@;
put 'Y2M9ITEsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNlbGVjdG1ldGFPYmplY3QoYSxkKX1zZWxlY3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFvYmplY3RzIix7U0FTQ29u'@;
put 'dHJvbFRhYmxlOlt7bWV0YXR5cGU6YSxyZXBvOmgucmVwb3NpdG9yeX1dfSkudGhlbihfPT57aC5tZXRhT2JqZWN0TGlzdD1fLm9iamVjdHMsaC5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhoLm1ldGFPYmplY3RTaXplKSxoLmxvYWRpbmc9ITEsaC5hc3NvVHlwZVNlbGVjdGVkPWEsaC5ldmVu'@;
put 'dFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksaC5zaG93RGF0YT0hMH0pfSkoKX1zZWxlY3RtZXRhT2JqZWN0KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmpl'@;
put 'Y3R1cmk6YX1dfSkudGhlbihfPT57aC5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPV8uYXNzb2NpYXRpb25zLGgucm9vdCQ9V2koaC5nZXRBc3Nvc2lhdGlvbnNDb3VudChfLmFzc29jaWF0aW9ucykpLGguc2hvd0FjYz0hMCxoLnNob3dUYWJsZT0hMDtsZXQgVD1fLmF0dHJpYnV0ZXMuZmluZChp'@;
put 'ZT0+Ik5hbWUiPT09aWUuTkFNRSkuVkFMVUU7aC5hc3NvT2JqZWN0U2VsZWN0ZWQ9VCxkLk5BTUU9VDtsZXQgVz1oLnJvdXRlci51cmw7aC5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaC5vYmplY3RSb3V0ZT9XLnNsaWNlKDAsVy5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIithLnNs'@;
put 'aWNlKDErYS5pbmRleE9mKCJcXCIpKTpXKyIvb2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSkpLGgubWV0YU9iamVjdEF0dHJpYnV0ZXM9Xy5hdHRyaWJ1dGVzfSl9KSgpfXNlbGVjdEFzc29zaWF0aW9uc0RldGFpbHMoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlv'@;
put 'biooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKF89PntoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPV8uYXR0cmlidXRlcyxoLnNob3dUYWJsZT0hMH0pfSkoKX1nZXRBc3Nvc2lhdGlvbnND'@;
put 'b3VudChhKXtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgZiBvZiBhKXtkLmhhcyhmLkFTU09DKXx8ZC5zZXQoZi5BU1NPQyx7Y291bnQ6MCxkZXRhaWxzOltdfSk7bGV0IF89ZC5nZXQoZi5BU1NPQyk7Xy5jb3VudCsrLF8uZGV0YWlscy5wdXNoKHtBU1NPQ1VSSTpmLkFTU09DVVJJLE5BTUU6Zi5O'@;
put 'QU1FLGRpc3BsYXk6Zi5OQU1FLFVSSTpmLkFTU09DVVJJLnNsaWNlKGYuQVNTT0NVUkkuaW5kZXhPZigiOiIpKzEpfSl9bGV0IGg9W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihmLF8pe2gucHVzaCh7QVNTT0M6Xyxjb3VudDpmLmNvdW50LGRldGFpbHM6Zi5kZXRhaWxzLGRpc3BsYXk6'@;
put 'XysiICggIitmLmNvdW50KyIgKSJ9KX0pLGh9c2V0VHlwZUFzc29zaWF0aW9ucyhhKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zKWguQVNTT0M9PT1hJiZkLnB1c2goaCk7cmV0dXJuIHRoaXMuYXNzb3NpYXRpb25OYW1lcz1kLGR9YXNzb3NpYXRp'@;
put 'b25OYW1lT25DbGljayhhKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhKX1tZXRhTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNl'@;
put 'LmxpYnJhcnlPbkZpbHRlcih0aGlzLm1ldGFEYXRhTGlzdCx0aGlzLm1ldGFEYXRhU2VhcmNoLCJJRCIpLEduLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoPXRoaXMubWV0YURhdGFTZWFyY2h9bWV0YU9iamVjdE9uRmlsdGVyKCl7dGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLmhl'@;
put 'bHBlclNlcnZpY2UubWV0YU9iamVjdE9uRmlsdGVyKHRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0U2VhcmNoLCJOQU1FIiksdGhpcy5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyh0aGlzLm1ldGFPYmplY3RTaXplKSxHbi5tZXRhZGF0YS5tZXRhT2JqZWN0U2VhcmNoPXRoaXMu'@;
put 'bWV0YU9iamVjdFNlYXJjaH1nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhhKXtpZih2b2lkIDAhPT10aGlzLm1ldGFPYmplY3RMaXN0JiZ0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aD5hKXtsZXQgZD0wLGg9LTE7Zm9yKGxldCBmPTA7Zjx0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aDtmKysp'@;
put 'aWYoKHZvaWQgMD09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVufHwhMT09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVuKSYmZCsrLGQ9PT1hKXtoPWY7YnJlYWt9dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9LTEhPT1oP3RoaXMubWV0YU9iamVjdExpc3Quc2xpY2UoMCxoKTp0'@;
put 'aGlzLm1ldGFPYmplY3RMaXN0fWVsc2UgdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdH1wYW5lbENoYW5nZShhLGQpe3RoaXMuZGVib3VuY2V8fCh0aGlzLm1ldGFPYmplY3RPbkNsaWNrKGQuSUQsZCksdGhpcy5kZWJvdW5jZT0hMCxzZXRUaW1lb3V0KCgpPT57'@;
put 'dGhpcy5kZWJvdW5jZT0hMX0sNjAwKSl9dXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl7R24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmwpLHR0KG9hKSx0dChU'@;
put 'YyksdHQoSmQpLHR0KERzKSx0dChXbCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbWV0YWRhdGEiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3LHZhcnM6OCxjb25zdHM6W1sxLCJyZXBvLWRyb3Bkb3duIl0sWyJjbHJTZWxl'@;
put 'Y3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJl'@;
put 'YSJdLFsxLCJjYXJkIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudC1pIl0sWzEsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyBjbHItZmxleC1ncm93'@;
put 'LTEiLDQsIm5nSWYiXSxbMywidmFsdWUiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCBTQVMgVHlwZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxb'@;
put 'MywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsi'@;
put 'c2hhcGUiLCJibG9jayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJz'@;
put 'cGlubmVyIl0sWzQsIm5nSWYiXSxbMSwiY2xyLXJvdyIsImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNsYXNzIiwic2VhcmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtNiIsInRleHQtY2VudGVyIl0s'@;
put 'WyJjbGFzcyIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIs'@;
put 'ImtleXVwIl0sWyJzZWFyY2hPYmpUcmVlSW5wdXQiLCIiXSxbMSwib2JqZWN0cy1jb2wiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsxLCJmbG9hdC1y'@;
put 'aWdodCJdLFs0LCJjbHJJZkV4cGFuZGVkIl0sWzMsImNsckxhenkiLDQsIm5nSWYiXSxbMywiY2xyTGF6eSJdLFszLCJjbHJFeHBhbmRhYmxlIiw0LCJjbHJSZWN1cnNpdmVGb3IiLCJjbHJSZWN1cnNpdmVGb3JPZiIsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIl0sWzMsImNsckV4cGFu'@;
put 'ZGFibGUiXSxbMSwiZnVsbC13aWR0aCJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciIsNCwibmdJZiJdLFsic2hhcGUiLCJibG9jayIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbG9hdC1yaWdodCBvYmplY3QtdXJpIiw0LCJuZ0lmIl0sWzEsImZsb2F0LXJpZ2h0Iiwib2JqZWN0LXVyaSJdLFsxLCJj'@;
put 'b2xzLWhlYWQiXSxbMSwib2JqZWN0LXRleHQiXSxbMSwibS0wIiwid29yZC1icmVhayIsIm1yLTIwIl0sWzEsImZsb2F0LXJpZ2h0IiwibWwtMyJdLFsxLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1z'@;
put 'T2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFsicGFnaW5hdGlvbiIsIiJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMCkoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIp'@;
put 'LE5lKDQsIk1ldGFkYXRhIFJlcG9zaXRvcnkiKSx5ZSgpLG1lKDUsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlcG9zaXRvcnk9Zn0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl9KSxK'@;
put 'ZSg2LHBldCwyLDIsIm9wdGlvbiIsMikseWUoKSgpKCksbWUoNywiY2xyLXRyZWUiKSxKZSg4LHZldCw2LDMsImNsci10cmVlLW5vZGUiLDMpLEplKDksYmV0LDIsMSwibmctY29udGFpbmVyIiw0KSx5ZSgpKCksbWUoMTAsImRpdiIsNSkoMTEsImRpdiIsNikoMTIsImgzIiw3KSxOZSgxMyks'@;
put 'eWUoKSxKZSgxNCx5ZXQsNCwwLCJkaXYiLDgpLEplKDE1LHhldCw0LDEsImRpdiIsOSksSmUoMTYsV2V0LDEwLDUsImRpdiIsMTApLHllKCkoKSksMiZhJiYoQ2UoNSksUmUoIm5nTW9kZWwiLGQucmVwb3NpdG9yeSksQ2UoMSksUmUoIm5nRm9yT2YiLGQucmVwb3NpdG9yaWVzKSxDZSgyKSxS'@;
put 'ZSgibmdJZiIsZC5tZXRhRGF0YUxpc3QpLENlKDEpLFJlKCJuZ0Zvck9mIixkLm1ldGFEYXRhTGlzdCksQ2UoNCksb3IoZC5hc3NvVHlwZVNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWQubG9hZGluZyYmIWQubWV0YU9iamVjdExpc3QpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRpbmcpLENl'@;
put 'KDEpLFJlKCJuZ0lmIixkLnNob3dEYXRhKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsTTAsQnMsT3MsVzgsVHAsdGcsUEUsVTgsZ0gsRkUsbmcsU1EscmcsaWcsJDgsb2csQjgsa3AsejgsUUYsZGQsZzEsRFEsa2EsWnUsekosVXMsZjEsTjgsSDgsVEosX0UsSUosREosTEosRUYs'@;
put 'bjMsdXhdLHN0eWxlczpbIi5vYmplY3RzLWNvbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0Ojc1dmg7b3ZlcmZsb3c6c2Nyb2xsO2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1yYWRpdXM6NHB4fS5jb2xzLWhlYWRbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2JhY2tncm91bmQ6I2ZhZmFmYTtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7cGFkZGluZzoxMHB4O2Rpc3BsYXk6ZmxleH0ub2JqZWN0LXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3'@;
put 'ZWVuO21hcmdpbi1sZWZ0OjEwcHg7ZmxleDoxfS5yZXBvLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MTBweH0uY2xyLWFjY29yZGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAw'@;
put 'JX0uZmxvYXQtcmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2Zsb2F0OnJpZ2h0fS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5vYmplY3QtdXJpW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46NXB4IDAgMH0ub2JqZWN0LWhlYWRlcltfbmdjb250'@;
put 'ZW50LSVDT01QJV17cGFkZGluZy1sZWZ0OjNweDtwYWRkaW5nLXJpZ2h0OjNweH0ub2JqZWN0LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZDhlM2U5O2JvcmRlci1yYWRpdXM6M3B4fS5kYXRhZ3JpZC1ob3N0W19uZ2NvbnRlbnQtJUNPTVAlXXtk'@;
put 'aXNwbGF5OnVuc2V0IWltcG9ydGFudH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3Bs'@;
put 'YXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Il19KSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIEdldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiAkZXQoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLnJvbGVTZWFyY2g9IiIsanQoaC5yb2xlTGlzdE9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gcWV0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucm9sZVNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoKS5yb2xlTGlzdE9uRmlsdGVyKCkpfSkseWUoKSxKZSg0LEdldCwxLDAsImNsci1pY29uIiwxMCksSmUoNSwkZXQsMSwwLCJjbHItaWNvbiIsMTEpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpO0NlKDIpLFJlKCJuZ01vZGVsIixkLnJvbGVTZWFyY2gpLENlKDIp'@;
put 'LFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEtldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1W'@;
put 'ZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5yb2xlT25DbGljayhoKSl9KSxtZSgxLCJwIiwxNikscXQoMiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtkcigidGFibGUtYWN0aXZlIixhLlJPTEVVUkk9PT1kLnJv'@;
put 'bGVVcmkpLENlKDMpLHByKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIFhldChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsS2V0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLGpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVu'@;
put 'Y3Rpb24gSmV0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gUWV0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBldHQoYyxsKXtp'@;
put 'ZigxJmMmJihtZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzApLE5lKDQpLHllKCksbWUoNSwidGQiLDMwKSxOZSg2KSx5ZSgpLG1lKDcsInRkIiwzMCksTmUoOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInJvdXRlckxpbmsiLCIv'@;
put 'dmlldy91c2VybmF2L3VzZXJzLyIrYS5VUklNRU0pLENlKDIpLG9yKGEuTUVNQkVSTkFNRSksQ2UoMiksb3IoYS5FTUFJTCksQ2UoMiksb3IoYS5NRU1CRVJDUkVBVEVEKSxDZSgyKSxvcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiB0dHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIs'@;
put 'MjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxOZSg1LCJOQU1FIikseWUoKSgpLG1lKDYsInRkIiwyOSkoNywiYiIpLE5lKDgsIkVNQUlMIikseWUoKSgpLG1lKDksInRkIiwyOSkoMTAsImIiKSxOZSgxMSwiQ1JFQVRFRCIpLHllKCkoKSxtZSgxMiwidGQiLDMwKSgx'@;
put 'MywiYiIpLE5lKDE0LCJVUERBVEVEIikseWUoKSgpKCkoKSxtZSgxNSwidGJvZHkiKSxKZSgxNixldHQsOSw1LCJ0ciIsMzEpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDE2KSxSZSgibmdGb3JPZiIsYS5yb2xlTWVtYmVycyl9fWZ1bmN0aW9uIG50dChjLGwpezEmYyYmKG1lKDAs'@;
put 'Img1IiksTmUoMSwiTm8gR3JvdXBzIFByZXNlbnQgISIpLHllKCkpfWZ1bmN0aW9uIHJ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiwzMikoMSwidGQiLDMwKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMCksTmUoNCkseWUoKSxtZSg1LCJ0ZCIsMzApLE5lKDYpLHllKCksbWUoNywidGQiLDMw'@;
put 'KSxOZSg4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUklNRU0pLENlKDIpLG9yKGEuTUVNQkVSTkFNRSksQ2UoMiksb3IoYS5FTUFJTCksQ2UoMiksb3IoYS5NRU1CRVJDUkVBVEVEKSxDZSgyKSxv'@;
put 'cihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBpdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxOZSg1LCJOQU1FIikseWUoKSgpLG1lKDYsInRkIiwyOSkoNywiYiIpLE5lKDgsIkVNQUlMIikseWUoKSgpLG1l'@;
put 'KDksInRkIiwyOSkoMTAsImIiKSxOZSgxMSwiQ1JFQVRFRCIpLHllKCkoKSxtZSgxMiwidGQiLDMwKSgxMywiYiIpLE5lKDE0LCJVUERBVEVEIikseWUoKSgpKCkoKSxtZSgxNSwidGJvZHkiKSxKZSgxNixydHQsOSw1LCJ0ciIsMzEpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDE2'@;
put 'KSxSZSgibmdGb3JPZiIsYS5yb2xlR3JvdXBzKX19ZnVuY3Rpb24gb3R0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywidGFibGUiLDIyKSg0LCJ0Ym9keSIpKDUsInRyIikoNiwidGQiLDIzKSg3LCJwIiwyNCkoOCwiYiIpLE5lKDkpLHllKCko'@;
put 'KSgpKCksbWUoMTAsInRyIikoMTEsInRkIiwyMykoMTIsImkiKSxOZSgxMykseWUoKSgpKCkoKSgpKCkoKSxtZSgxNCwiZGl2IiwyMCkoMTUsImRpdiIsMjEpKDE2LCJkaXYiLDI1KSgxNywiZGl2IikoMTgsImgzIiksTmUoMTkpLHllKCksSmUoMjAsUWV0LDIsMCwiaDUiLDUpLG1lKDIxLCJk'@;
put 'aXYiLDI2KSxKZSgyMix0dHQsMTcsMSwidGFibGUiLDI3KSx5ZSgpKCkscXQoMjMsImhyIiksbWUoMjQsImRpdiIpKDI1LCJoMyIpLE5lKDI2KSx5ZSgpLEplKDI3LG50dCwyLDAsImg1Iiw1KSxtZSgyOCwiZGl2IiwyNiksSmUoMjksaXR0LDE3LDEsInRhYmxlIiwyNykseWUoKSgpLHF0KDMw'@;
put 'LCJiciIpLHllKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDkpLG9yKGEucm9sZU5hbWUpLENlKDQpLG9yKGEucm9sZURlc2MpLENlKDYpLHByKCJNRU1CRVJTICgiLGEucm9sZU1lbWJlcnNDb3VudCwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnJvbGVNZW1iZXJzQ291bnQpLENl'@;
put 'KDIpLFJlKCJuZ0lmIiwwIT1hLnJvbGVNZW1iZXJzQ291bnQpLENlKDQpLHByKCJHcm91cHMgKCIsYS5yb2xlR3JvdXBzQ291bnQsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCB3bGU9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9Xyx0aGlzLnJvbGVTZWFyY2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5h'@;
put 'bWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMubG9hZGluZz0hMX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9sZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3Qu'@;
put 'cGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxHbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9R24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFy'@;
put 'Y2g9R24udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Hbi51c2VybmF2LnJvbGVMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLnJv'@;
put 'bGVzLEduLnVzZXJuYXYucm9sZUxpc3Q9YS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVz'@;
put 'dCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aCx0aGlz'@;
put 'LnJvbGVHcm91cHM9Zi5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSk6KHRoaXMucm9sZXM9R24udXNlcm5h'@;
put 'di5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9R24udXNlcm5hdi5yb2xlU2VhcmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xlcz1hLnJvbGVzLEduLnVzZXJuYXYucm9sZUxpc3Q9YS5yb2xlcyx0aGlzLnBh'@;
put 'cmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7'@;
put 'cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBz'@;
put 'Q291bnQ9Zi5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSl9cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5y'@;
put 'b2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJPTEVOQU1FIiksR24udXNlcm5hdi5yb2xlU2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVz'@;
put 'ZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9'@;
put 'XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5zYXNncm91cHMubGVu'@;
put 'Z3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1hLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xFREVTQ30pfWZpbmRSb2xlKGEsZCl7bGV0IGg9ITE7cmV0dXJuIGEuZm9yRWFjaChmPT57Zi5ST0xFVVJJPT09ZCYmKGg9Zil9KSxofX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQoVGMpLHR0KERzKSx0dChKZCksdHQoV2wpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJvbGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0'@;
put 'LGNvbnN0czpbWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9k'@;
put 'ZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVl'@;
put 'SW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNs'@;
put 'aWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsInRhYmxlIiwicm9sZS1pbmZvIl0sWzEs'@;
put 'ImxlZnQiXSxbMSwicm9sZS1pbmZvLXRleHQiXSxbMSwiY2FyZCIsInJvbGUtZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFsz'@;
put 'LCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiwwKSgxLCJjbHItdHJlZSIpLEplKDIscWV0LDYsMywiY2xyLXRyZWUtbm9kZSIsMSksSmUoMyxYZXQsMiwxLCJu'@;
put 'Zy1jb250YWluZXIiLDIpLHllKCkoKSxtZSg0LCJkaXYiLDMpLEplKDUsSmV0LDMsMCwiZGl2Iiw0KSxKZSg2LG90dCwzMSw4LCJkaXYiLDUpLHllKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIixkLnJvbGVzKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5yb2xlcyksQ2UoMiksUmUoIm5nSWYiLGQu'@;
put 'bG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQucm9sZU1lbWJlcnMmJiFkLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxCdSxXYSxCcyxPcyxkZCxnMSxrYSxmMSxuM10sc3R5bGVzOlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0ucm9sZS1p'@;
put 'bmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5yb2xlLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRv'@;
put 'dzowIDJweCA1cHggI2RhZDdkN30ucm9sZS1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAj'@;
put 'YTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJvbGUtZGF0'@;
put 'YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3dpZHRoOjEwMCV9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICB0aGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfS5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZl'@;
put 'NjtjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0'@;
put 'OnVuc2V0IWltcG9ydGFudH19Il19KSxjfSkoKSxzdHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11'@;
put 'c2VybmF2LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpLGF0dD0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNv'@;
put 'bnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCk7ZnVuY3Rpb24gbHR0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIGN0dChjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgudXNlclNlYXJjaD0iIixqdChoLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiB1dHQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS51c2VyU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChW'@;
put 'ZSgpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsbHR0LDEsMCwiY2xyLWljb24iLDEwKSxKZSg1LGN0dCwxLDAsImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQudXNlclNlYXJjaCksQ2UoMiksUmUo'@;
put 'Im5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gZHR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCku'@;
put 'JGltcGxpY2l0O3JldHVybiBqdChWZSgpLnVzZXJPbkNsaWNrKGgpKX0pLG1lKDEsInAiLDE2KSxxdCgyLCJjbHItaWNvbiIsMTcpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO2RyKCJ0YWJsZS1hY3RpdmUiLChudWxsPT1kLnVzZXJJbmZvP251'@;
put 'bGw6ZC51c2VySW5mby5VUkkpPT09YS5VUkkpLENlKDMpLHByKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gaHR0KGMsbCl7aWYoMSZjJiYoVnIoMCksSmUoMSxkdHQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksanIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lm'@;
put 'IiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBmdHQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgpKX1mdW5jdGlvbiBwdHQoYyxsKXtpZigxJmMmJihWcigwKSxtZSgxLCJ0ciIpKDIsInRkIiwyNyksTmUoMywiIE1ldGFkYXRh'@;
put 'IENyZWF0ZWQ6ICIpLG1lKDQsImIiKSxOZSg1KSx5ZSgpKCkoKSxtZSg2LCJ0ciIpKDcsInRkIiwyNyksTmUoOCwiIE1ldGFkYXRhIFVwZGF0ZWQ6ICIpLG1lKDksImIiKSxOZSgxMCkseWUoKSgpKCksanIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDUpLG9yKGEudXNlckluZm8uTUVUQURB'@;
put 'VEFDUkVBVEVEKSxDZSg1KSxvcihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIGd0dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxO'@;
put 'ZSg4KSx5ZSgpKCkoKSgpLG1lKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLE5lKDEzKSx5ZSgpKCkoKSgpLEplKDE0LHB0dCwxMSwyLCJuZy1jb250YWluZXIiLDUpLHllKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg4KSxvcihhLnVzZXJJbmZvLk5BTUUp'@;
put 'LENlKDUpLG9yKGEudXNlckluZm8uRElTUExBWU5BTUUpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWZ1bmN0aW9uIG10dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0'@;
put 'LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxOZSg4KSx5ZSgpKCkoKSgpLG1lKDksInRyIikoMTAsInRkIiwyNyksTmUoMTEsIiBVc2VyIElEOiAiKSxtZSgxMiwiYiIpLE5lKDEzKSx5ZSgpKCkoKSxtZSgxNCwidHIiKSgxNSwidGQiLDI3KSxOZSgxNiwiIFVzZXIgcHJvdmlk'@;
put 'ZXIgSUQ6ICIpLG1lKDE3LCJiIiksTmUoMTgpLHllKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg4KSxvcihhLnVzZXJJbmZvLk5BTUUpLENlKDUpLG9yKGEudXNlckluZm8uVVJJKSxDZSg1KSxvcihhLnVzZXJJbmZvLlBST1ZJREVSKX19ZnVuY3Rpb24gdnR0KGMsbCl7'@;
put 'MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBFbWFpbHMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIF90dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDMxKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMSksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2Uo'@;
put 'Miksb3IoYS5FTUFJTCksQ2UoMiksb3IoYS5UWVBFKX19ZnVuY3Rpb24gYnR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTmUoNSwiRU1BSUwiKSx5ZSgpKCksbWUoNiwidGQiLDMxKSg3LCJiIiksTmUoOCwiVFlQ'@;
put 'RSIpLHllKCkoKSgpKCksbWUoOSwidGJvZHkiKSxKZSgxMCxfdHQsNSwyLCJ0ciIsMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMTApLFJlKCJuZ0Zvck9mIixhLnVzZXJFbWFpbHMpfX1mdW5jdGlvbiB5dHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIp'@;
put 'LHllKCksSmUoMyx2dHQsMiwwLCJoNSIsNSksbWUoNCwiZGl2IiwyNCksSmUoNSxidHQsMTEsMSwidGFibGUiLDI1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxwcigiRU1BSUxTICgiLGEudXNlckVtYWlsc0NvdW50fHwiMCIsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS51'@;
put 'c2VyRW1haWxzQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLnVzZXJFbWFpbHNDb3VudCl9fWZ1bmN0aW9uIHd0dChjLGwpezEmYyYmcXQoMCwiaHIiKX1mdW5jdGlvbiBDdHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIEdyb3VwcyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24g'@;
put 'U3R0KGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDMzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJKSxDZSgxKSxwcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gTXR0KGMs'@;
put 'bCl7aWYoMSZjJiYoVnIoMCksbWUoMSwidGQiLDMzKSxOZSgyKSx5ZSgpLGpyKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKGEuR1JPVVBVUkl8fGEuVVJJKSksQ2UoMSkscHIoIiAiLGEuR1JPVVBO'@;
put 'QU1FLCIgIil9fWZ1bmN0aW9uIHh0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiksSmUoMSxTdHQsMiwyLCJ0ZCIsMzIpLEplKDIsTXR0LDMsMiwibmctY29udGFpbmVyIiw1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVy'@;
put 'VHlwZS5TYXNWaXlhKSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1mdW5jdGlvbiBFdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksSmUoMix4dHQsMywyLCJ0ciIsMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'VmUoMik7Q2UoMiksUmUoIm5nRm9yT2YiLGEudXNlckdyb3Vwcyl9fWZ1bmN0aW9uIGt0dChjLGwpezEmYyYmcXQoMCwiaHIiKX1mdW5jdGlvbiBBdHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIFJvbGVzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBUdHQoYyxsKXtpZigxJmMm'@;
put 'JihtZSgwLCJ0ciIpKDEsInRkIiwzNCksTmUoMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSg0KTtDZSgxKSxSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvcm9sZXMvIitkLmdldFJvbGVVUkkoYS5ST0xFVVJJKSksQ2UoMSkscHIoIiAiLGEuUk9MRU5BTUUs'@;
put 'IiAiKX19ZnVuY3Rpb24gRHR0KGMsbCl7aWYoMSZjJiYobWUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLEplKDIsVHR0LDMsMiwidHIiLDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDIpLFJlKCJuZ0Zvck9mIixhLnVzZXJSb2xlcyl9fWZ1bmN0aW9uIEl0dChjLGwpe2lmKDEm'@;
put 'YyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxKZSgzLEF0dCwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI0KSxKZSg1LER0dCwzLDEsInRhYmxlIiwyNSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMikscHIoIlJPTEVTICgiLGEudXNlclJvbGVzQ291bnR8fCIwIiwi'@;
put 'KSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJSb2xlc0NvdW50KSxDZSgyKSxSZSgibmdJZiIsMCE9YS51c2VyUm9sZXNDb3VudCl9fWZ1bmN0aW9uIEx0dChjLGwpezEmYyYmcXQoMCwiaHIiKX1mdW5jdGlvbiBSdHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIExvZ2lucyBQ'@;
put 'cmVzZW50IikseWUoKSl9ZnVuY3Rpb24gT3R0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMzEpLE5lKDIpLHllKCksbWUoMywidGQiLDMxKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLkRPTUFJTiksQ2UoMiksb3IoYS5VU0VSSUQp'@;
put 'fX1mdW5jdGlvbiBQdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxOZSg1LCJET01BSU4iKSx5ZSgpKCksbWUoNiwidGQiKSg3LCJiIiksTmUoOCwiVVNFUiBJRCIpLHllKCkoKSgpKCksbWUoOSwidGJvZHkiKSxK'@;
put 'ZSgxMCxPdHQsNSwyLCJ0ciIsMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMTApLFJlKCJuZ0Zvck9mIixhLnVzZXJMb2dpbnMpfX1mdW5jdGlvbiBGdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksSmUoMyxSdHQsMiwwLCJoNSIsNSksbWUo'@;
put 'NCwiZGl2IiwyNCksSmUoNSxQdHQsMTEsMSwidGFibGUiLDI1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxwcigiTE9HSU5TICgiLGEudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS51c2VyTG9naW5zQ291bnQpLENlKDIpLFJlKCJuZ0lm'@;
put 'IiwwIT1hLnVzZXJMb2dpbnNDb3VudCl9fWZ1bmN0aW9uIEh0dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLEplKDEsZ3R0LDE1LDMsImRpdiIsMjApLEplKDIsbXR0LDE5LDMsImRpdiIsMjApLG1lKDMsImRpdiIsMjEpKDQsImRpdiIsMjIpKDUsImRpdiIsMjMpLEplKDYseXR0LDYsMywi'@;
put 'ZGl2Iiw1KSxKZSg3LHd0dCwxLDAsImhyIiw1KSxtZSg4LCJkaXYiKSg5LCJoMyIpLE5lKDEwKSx5ZSgpLEplKDExLEN0dCwyLDAsImg1Iiw1KSxtZSgxMiwiZGl2IiwyNCksSmUoMTMsRXR0LDMsMSwidGFibGUiLDI1KSx5ZSgpKCksSmUoMTQsa3R0LDEsMCwiaHIiLDUpLEplKDE1LEl0dCw2'@;
put 'LDMsImRpdiIsNSksSmUoMTYsTHR0LDEsMCwiaHIiLDUpLEplKDE3LEZ0dCw2LDMsImRpdiIsNSkscXQoMTgsImJyIikseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmEudXNlckluZm8pLENlKDQpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgzKSxwcigiR1JP'@;
put 'VVBTICgiLGEudXNlckdyb3Vwc0NvdW50fHwiMCIsIikiKSxDZSgxKSxSZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHNDb3VudCksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgx'@;
put 'KSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IENsZT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj1fLHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEs'@;
put 'dGhpcy5wYXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5zZXJ2ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT1aYy5ELHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMuc2Fz'@;
put 'anNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoR24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi91c2VycyIsdm9p'@;
put 'ZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbU5hbWU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxHbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51c2Vycz1Hbi51c2Vy'@;
put 'bmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Hbi51c2VybmF2LnVzZXJTZWFyY2g7ZWxzZSBpZih2b2lkIDA9PT1Hbi51c2VybmF2LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3Vz'@;
put 'ZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7TkFNRTpmLm5hbWUsVVJJOmYuaWQsUFJPVklERVI6Zi5wcm92aWRlcklkfSkpO3Ro'@;
put 'aXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWgsR24udXNlcm5hdi51c2VyTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWEudXNlcnMsR24udXNlcm5hdi51c2VyTGlz'@;
put 'dD1hLnVzZXJzfSkpOih0aGlzLnVzZXJzPUduLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUduLnVzZXJuYXYudXNlclNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQpaWYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhKXtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFt'@;
put 'cy51cmk7ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZD0+ZC50ZXh0KCkpLnRoZW4oZD0+e2xldCBoPUpTT04u'@;
put 'cGFyc2UoZCk7dGhpcy51c2VyRGF0YT1oLHRoaXMubG9hZGluZz0hMTtsZXQgZj1oLml0ZW1zLm1hcChfPT4oe0dST1VQTkFNRTpfLm5hbWUsVVJJOl8uaWR9KSk7dGhpcy51c2VyR3JvdXBzPWYsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlcklu'@;
put 'Zm89dGhpcy51c2Vycy5maW5kKF89Pl8uVVJJPT09YSkpfSl9ZWxzZXtjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTt0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphfV19KS50aGVuKGg9Pntzd2l0'@;
put 'Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBaYy5ELlNhczk6dGhpcy51c2VySW5mbz1oLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWguZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWguZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1oLnJvbGVzLHRoaXMu'@;
put 'dXNlclJvbGVzQ291bnQ9aC5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWgubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWgubG9naW5zLmxlbmd0aDticmVhaztjYXNlIFpjLkQuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChmPT5mLlVS'@;
put 'ST09PWEpO2Vsc2V7Y29uc3QgZj1oLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Zi5JRCxOQU1FOmYuTkFNRSxESVNQTEFZTkFNRTpmLk5BTUV9fX10aGlzLnVzZXJEYXRhPWgsdGhpcy51c2VyR3JvdXBzPWguZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWguZ3JvdXBzLmxlbmd0'@;
put 'aH0pfX11c2VyTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnVzZXJzLHRoaXMudXNlclNlYXJjaCwiTkFNRSIpLEduLnVzZXJuYXYudXNlclNlYXJjaD10aGlzLnVzZXJTZWFyY2h9dXNlck9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xl'@;
put 'dCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5VUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithLlVSSSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy51'@;
put 'c2VyRGF0YT1mLHRoaXMubG9hZGluZz0hMTtsZXQgXz1mLml0ZW1zLm1hcChUPT4oe0dST1VQTkFNRTpULm5hbWUsVVJJOlQuaWR9KSk7dGhpcy51c2VyR3JvdXBzPV8sdGhpcy51c2VyR3JvdXBzQ291bnQ9Xy5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5m'@;
put 'aW5kKFQ9PlQuVVJJPT09YS5VUkkpKX0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmEuVVJJfV19KS50aGVuKGY9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBaYy5ELlNhczk6'@;
put 'dGhpcy51c2VySW5mbz1mLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWYuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWYuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1mLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9Zi5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWYubG9n'@;
put 'aW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWYubG9naW5zLmxlbmd0aDticmVhaztjYXNlIFpjLkQuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChfPT5fLlVSST09PWEuVVJJKTtlbHNle2NvbnN0IF89Zi5ncm91cHNbMF07dGhpcy51c2VySW5mbz17'@;
put 'VVJJOl8uSUQsTkFNRTpfLk5BTUUsRElTUExBWU5BTUU6Xy5OQU1FfX19dGhpcy51c2VyRGF0YT1mLHRoaXMudXNlckdyb3Vwcz1mLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1mLmdyb3Vwcy5sZW5ndGh9KX1nZXRSb2xlVVJJKGEpe3JldHVybiBhLnNwbGl0KCJPTVNPQko6SWRlbnRp'@;
put 'dHlHcm91cCIpWzFdLnNsaWNlKDEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYyksdHQob2EpLHR0KFdsKSx0dChKZCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXIiXV0saG9zdEF0dHJz'@;
put 'OlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5u'@;
put 'ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFVzZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwi'@;
put 'bmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMs'@;
put 'InRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lm'@;
put 'Il0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8t'@;
put 'dGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGlu'@;
put 'ayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApKDEsImNsci10cmVlIiksSmUoMix1dHQsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxKZSgzLGh0dCwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUoKSgpLG1lKDQsImRp'@;
put 'diIsMyksSmUoNSxmdHQsMywwLCJkaXYiLDQpLEplKDYsSHR0LDE5LDExLCJkaXYiLDUpLHllKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIixkLnVzZXJzKSxDZSgxKSxSZSgibmdGb3JPZiIsZC51c2VycyksQ2UoMiksUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQudXNl'@;
put 'ckRhdGEmJiFkLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxCdSxHXyxXYSxCcyxPcyxkZCxnMSxrYSxmMSxuM10sc3R5bGVzOlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0udXNlci1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rp'@;
put 'c3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS51c2VyLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30udXNlci1pbmZv'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1z'@;
put 'aGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDphdXRvfS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAudXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3dpZHRoOjEwMCV9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91'@;
put 'bmQtY29sb3I6I2RhZGFkYX0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS53aWR0aC01MFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17d2lkdGg6NTAlfS53aWR0aC0zM1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzMlfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgp'@;
put 'ey51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pLGN9KSgpLE50dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnZpeWFBcGlzPXtBbmFseXRpY3Nf'@;
put 'SW5zaWdodHM6e2luc2lnaHRzOiIvaW5zaWdodHMifSxWaXN1YWxpc2F0aW9uOntyZXBvcnRzOiIvcmVwb3J0cyIscmVwb3J0SW1hZ2VzOiIvcmVwb3J0SW1hZ2VzIixyZXBvcnRUcmFuc2Zvcm1zOiIvcmVwb3J0VHJhbnNmb3JtcyIsdmlzdWFsQW5hbHl0aWNzOiIvdmlzdWFsQW5hbHl0aWNz'@;
put 'In0sQ29tcHV0ZTp7am9iczoiL2pvYkRlZmluaXRpb25zIixqb2JFeGVjdXRpb246Ii9qb2JFeGVjdXRpb24ifSxEZWNpc2lvbl9NYW5hZ2VtZW50Onttb2RlbE1hbmFnZW1lbnQ6Ii9tb2RlbE1hbmFnZW1lbnQiLG1vZGVsUmVwb3NpdG9yeToiL21vZGVsUmVwb3NpdG9yeSIsbW9kZWxQdWJs'@;
put 'aXNoOiIvbW9kZWxQdWJsaXNoIixtaWNyb2FuYWx5dGljU2NvcmU6Ii9taWNyb2FuYWx5dGljU2NvcmUiLGRhdGFNaW5pbmc6Ii9kYXRhTWluaW5nIixidXNpbmVzc1J1bGVzOiIvYnVzaW5lc3NSdWxlcyIscmVmZXJlbmNlRGF0YToiL3JlZmVyZW5jZURhdGEiLHRyZWF0bWVudERlZmluaXRp'@;
put 'b25zOiIvdHJlYXRtZW50RGVmaW5pdGlvbnMiLHN1YmplY3RDb250YWN0czoiL3N1YmplY3RDb250YWN0cyIsZGVjaXNpb25zUnVudGltZUJ1aWxkZXI6Ii9kZWNpc2lvbnNSdW50aW1lQnVpbGRlciJ9LENvcmVfU2VydmljZXM6e2ZvbGRlcnM6Ii9mb2xkZXJzIixmaWxlczoiL2ZpbGVzIixh'@;
put 'bm5vdGF0aW9uczoiL2Fubm90YXRpb25zIixhdXRob3JpemF0aW9uOiIvYXV0aG9yaXphdGlvbiIscmVsYXRpb25zaGlwczoiL3JlbGF0aW9uc2hpcHMiLFNBU0xvZ29uOiIvU0FTTG9nb24ifSxBdXRvbWF0ZWRfTWFjaGluZV9MZWFybmluZzp7bWxQaXBlbGluZUF1dG9tYXRpb246Ii9tbFBp'@;
put 'cGVsaW5lQXV0b21hdGlvbiJ9LE90aGVyOntpZGVudGl0aWVzOiIvaWRlbnRpdGllcyJ9fSx0aGlzLnNlcnZlclVybD0iIjtjb25zdCBoPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy5zZXJ2ZXJVcmw9aD8uc2VydmVyVXJsfHwiIix0aGlzLmdldEJ5'@;
put 'Q29sbGVjdGlvbigiam9icyIpLnN1YnNjcmliZShmPT57Y29uc29sZS5sb2coInJlcyIsZil9KX1nZXRBbGxDb2xsZWN0aW9ucygpe3JldHVybiB0aGlzLnZpeWFBcGlzfWdldEJ5VXJsKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3aXRoQ3JlZGVu'@;
put 'dGlhbHM6ITB9KX1nZXRCeUNvbGxlY3Rpb24oYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihoUCksYXIoZTgpKX0sYy5c'@;
put 'dTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBWdHQoYyxsKXsxJmMmJnF0KDAsImRpdiIsOSl9ZnVuY3Rpb24gQnR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwic3BhbiIsMTApLHh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLm9uVmFsdWVDbGljayhoKSl9KSxOZSgxKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxvcihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24ganR0KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLHh0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soaCkpfSkseWUoKSgpfWlmKDImYyl7Y29u'@;
put 'c3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksUmUoImpzb24iLGEudmFsdWUpKCJleHBhbmRlZCIsZC5leHBhbmRlZCkoImRlcHRoIixkLmRlcHRoKSgiX2N1cnJlbnREZXB0aCIsZC5fY3VycmVudERlcHRoKzEpfX1jb25zdCB6dHQ9ZnVuY3Rpb24oYyl7cmV0dXJuWyJzZWdtZW50'@;
put 'IixjXX0sVXR0PWZ1bmN0aW9uKGMsbCl7cmV0dXJueyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfX07ZnVuY3Rpb24gWnR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwic2VjdGlvbiIsMikoMSwic2VjdGlvbiIsMykseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRvZ2dsZShmKSl9KSxKZSgyLFZ0dCwxLDAsImRpdiIsNCksbWUoMywic3BhbiIsNSksTmUoNCkseWUoKSxtZSg1LCJzcGFuIiw2KSxOZSg2LCI6ICIpLHllKCksSmUoNyxCdHQsMiwxLCJzcGFuIiw3KSx5ZSgpLEpl'@;
put 'KDgsanR0LDIsNCwic2VjdGlvbiIsOCkseWUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO1JlKCJuZ0NsYXNzIixKMig2LHp0dCwic2VnbWVudC10eXBlLSIrYS50eXBlKSksQ2UoMSksUmUoIm5nQ2xhc3MiLFEyKDgsVXR0LGQuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5k'@;
put 'ZWQpKSxDZSgxKSxSZSgibmdJZiIsZC5pc0V4cGFuZGFibGUoYSkpLENlKDIpLG9yKGEua2V5KSxDZSgzKSxSZSgibmdJZiIsIWEuZXhwYW5kZWR8fCFkLmlzRXhwYW5kYWJsZShhKSksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kZWQmJmQuaXNFeHBhbmRhYmxlKGEpKX19bGV0IFl0dD0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRlZD0hMCx0aGlzLmRlcHRoPS0xLHRoaXMuX2N1cnJlbnREZXB0aD0wLHRoaXMuc2VnbWVudExpbmtDbGlja2VkPW5ldyBFcix0aGlzLnNlZ21lbnRzPVtdfW5nT25DaGFuZ2VzKCl7dGhpcy5zZWdtZW50cz1bXSx0aGlzLmpzb249'@;
put 'dGhpcy5kZWN5Y2xlKHRoaXMuanNvbiksIm9iamVjdCI9PXR5cGVvZiB0aGlzLmpzb24/T2JqZWN0LmtleXModGhpcy5qc29uKS5mb3JFYWNoKGE9Pnt0aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJzZUtleVZhbHVlKGEsdGhpcy5qc29uW2FdKSl9KTp0aGlzLnNlZ21lbnRzLnB1c2godGhp'@;
put 'cy5wYXJzZUtleVZhbHVlKGAoJHt0eXBlb2YgdGhpcy5qc29ufSlgLHRoaXMuanNvbikpfWlzRXhwYW5kYWJsZShhKXtyZXR1cm4ib2JqZWN0Ij09PWEudHlwZXx8ImFycmF5Ij09PWEudHlwZX10b2dnbGUoYSl7dGhpcy5pc0V4cGFuZGFibGUoYSkmJihhLmV4cGFuZGVkPSFhLmV4cGFuZGVk'@;
put 'KX1vblZhbHVlQ2xpY2soYSl7ImxpbmsiPT09YS50eXBlJiZ0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEudmFsdWUpfW9uU2VnbWVudExpbmtDbGljayhhKXt0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEpfXBhcnNlS2V5VmFsdWUoYSxkKXtjb25zdCBoPXtrZXk6YSx2YWx1'@;
put 'ZTpkLHR5cGU6dm9pZCAwLGRlc2NyaXB0aW9uOiIiK2QsZXhwYW5kZWQ6dGhpcy5pc0V4cGFuZGVkKCl9O3N3aXRjaCh0eXBlb2YgaC52YWx1ZSl7Y2FzZSJudW1iZXIiOmgudHlwZT0ibnVtYmVyIjticmVhaztjYXNlImJvb2xlYW4iOmgudHlwZT0iYm9vbGVhbiI7YnJlYWs7Y2FzZSJmdW5j'@;
put 'dGlvbiI6aC50eXBlPSJmdW5jdGlvbiI7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKHRoaXMuaXNMaW5rKGgudmFsdWUpKXtoLnR5cGU9ImxpbmsiO2JyZWFrfWgudHlwZT0ic3RyaW5nIixoLmRlc2NyaXB0aW9uPSciJytoLnZhbHVlKyciJzticmVhaztjYXNlInVuZGVmaW5lZCI6aC50eXBlPSJ1'@;
put 'bmRlZmluZWQiLGguZGVzY3JpcHRpb249InVuZGVmaW5lZCI7YnJlYWs7Y2FzZSJvYmplY3QiOm51bGw9PT1oLnZhbHVlPyhoLnR5cGU9Im51bGwiLGguZGVzY3JpcHRpb249Im51bGwiKTpBcnJheS5pc0FycmF5KGgudmFsdWUpPyhoLnR5cGU9ImFycmF5IixoLmRlc2NyaXB0aW9uPSJBcnJh'@;
put 'eVsiK2gudmFsdWUubGVuZ3RoKyJdICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpOmgudmFsdWUgaW5zdGFuY2VvZiBEYXRlP2gudHlwZT0iZGF0ZSI6KGgudHlwZT0ib2JqZWN0IixoLmRlc2NyaXB0aW9uPSJPYmplY3QgIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSl9cmV0dXJuIGh9aXNM'@;
put 'aW5rKGEpe3JldHVybiJodHRwczovLyI9PT1hLnN1YnN0cmluZygwLDgpfHwiaHR0cDovLyI9PT1hLnN1YnN0cmluZygwLDcpfHwiLyI9PT1hWzBdfWlzRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRlZCYmISh0aGlzLmRlcHRoPi0xJiZ0aGlzLl9jdXJyZW50RGVwdGg+PXRoaXMuZGVw'@;
put 'dGgpfWRlY3ljbGUoYSl7Y29uc3QgZD1uZXcgV2Vha01hcDtyZXR1cm4gZnVuY3Rpb24gaChmLF8pe2xldCBULFc7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiBmfHxudWxsPT09Znx8ZiBpbnN0YW5jZW9mIEJvb2xlYW58fGYgaW5zdGFuY2VvZiBEYXRlfHxmIGluc3RhbmNlb2YgTnVtYmVyfHxm'@;
put 'IGluc3RhbmNlb2YgUmVnRXhwfHxmIGluc3RhbmNlb2YgU3RyaW5nP2Y6KFQ9ZC5nZXQoZiksdm9pZCAwIT09VD97JHJlZjpUfTooZC5zZXQoZixfKSxBcnJheS5pc0FycmF5KGYpPyhXPVtdLGYuZm9yRWFjaChmdW5jdGlvbihpZSxwZSl7V1twZV09aChpZSxfKyJbIitwZSsiXSIpfSkpOihX'@;
put 'PXt9LE9iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oaWUpe1dbaWVdPWgoZltpZV0sXysiWyIrSlNPTi5zdHJpbmdpZnkoaWUpKyJdIil9KSksVykpfShhLCIkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJuZ3gtanNvbi12aWV3ZXIiXV0saW5wdXRzOntqc29uOiJqc29uIixleHBhbmRlZDoiZXhwYW5kZWQiLGRlcHRoOiJkZXB0aCIsX2N1cnJlbnREZXB0aDoiX2N1cnJlbnREZXB0aCJ9LG91dHB1dHM6e3NlZ21lbnRMaW5rQ2xpY2tlZDoic2VnbWVudExpbmtD'@;
put 'bGlja2VkIn0sZmVhdHVyZXM6W3ZhXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sxLCJuZ3gtanNvbi12aWV3ZXIiXSxbMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nQ2xhc3MiXSxbMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInRvZ2dsZXIiLDQsIm5nSWYi'@;
put 'XSxbMSwic2VnbWVudC1rZXkiXSxbMSwic2VnbWVudC1zZXBhcmF0b3IiXSxbImNsYXNzIiwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMSwidG9nZ2xlciJdLFsxLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayJdLFsx'@;
put 'LCJjaGlsZHJlbiJdLFszLCJqc29uIiwiZXhwYW5kZWQiLCJkZXB0aCIsIl9jdXJyZW50RGVwdGgiLCJzZWdtZW50TGlua0NsaWNrZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJzZWN0aW9uIiwwKSxKZSgxLFp0dCw5LDExLCJzZWN0aW9uIiwxKSx5ZSgpKSwyJmEm'@;
put 'JihDZSgxKSxSZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W3VjLHhzLFppLGNdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24tZm9udC1mYW1pbHksIG1v'@;
put 'bm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtd3JhcDpicmVhay13b3Jk'@;
put 'fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6LTE0'@;
put 'cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFzZS1pbn0ubmd4LWpzb24t'@;
put 'dmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXksICM0RTE4N0MpfS5uZ3gt'@;
put 'anNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXNlcGFyYXRv'@;
put 'ciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNv'@;
put 'bi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIpfS5uZ3gtanNvbi12aWV3'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVtYmVyLCAj'@;
put 'MDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2'@;
put 'YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAu'@;
put 'c2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVd'@;
put 'ID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5r'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLCAjZmZm'@;
put 'KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9y'@;
put 'OnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LWtleVtfbmdj'@;
put 'b250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVu'@;
put 'dC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25n'@;
put 'Y29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Lm5n'@;
put 'eC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksV3R0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vXX0pLGN9KSgpLEd0dD0oKCk9'@;
put 'PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgiLyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3QgXz1oW2ZdO2QrPSIvIitfLGhbZl09YDxhIGhyZWY9JHtkfT4k'@;
put 'e199PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKSwkdHQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7'@;
put 'cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToicHJldHR5anNvbiIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKTtmdW5jdGlvbiBxdHQoYyxsKXtpZigxJmMm'@;
put 'JihtZSgwLCJvcHRpb24iLDIyKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWMoInZhbHVlIixhLnZhbHVlKSxDZSgxKSxwcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gS3R0KGMsbCl7aWYoMSZjJiYobWUoMCwib3B0Z3JvdXAiLDIwKSxKZSgxLHF0dCwyLDIsIm9w'@;
put 'dGlvbiIsMjEpLGJhKDIsImtleXZhbHVlIikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtSZSgibGFiZWwiLGEua2V5KSxDZSgxKSxSZSgibmdGb3JPZiIsVWwoMiwyLGQuY29sbGVjdGlvbnNbYS5rZXldKSl9fWZ1bmN0aW9uIFh0dChjLGwpezEmYyYmKG1lKDAsInAi'@;
put 'LDIzKSxOZSgxLCIgU2VsZWN0IGNvbGxlY3Rpb24gdG8gc3RhcnQgIikseWUoKSl9ZnVuY3Rpb24gSnR0KGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMjQpfWZ1bmN0aW9uIFF0dChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBlbnQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmxpbmtzU2VhcmNoPSIiLGp0KGgubGlua3NMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiB0bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyNSkoMSwiZGl2IiwyNikoMiwiaW5wdXQiLDI3LDI4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlua3NTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl'@;
put 'KCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsUXR0LDEsMCwiY2xyLWljb24iLDI5KSxKZSg1LGVudCwxLDAsImNsci1pY29uIiwzMCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlua3NTZWFyY2gpLENlKDIpLFJl'@;
put 'KCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIG5udChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDM0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUo'@;
put 'KS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBqdChfLnRyZWVOb2RlQ2xpY2tlZChoLGYsXy5lbmRwb2ludExpbmtzKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDM1KSx4dCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5saW5rT25DbGljayhoKSl9KSxxdCgyLCJjbHItaWNvbiIsMzYpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGVkIixhLmV4'@;
put 'cGFuZGVkKSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoMyksemMoIiAiLGEubWV0aG9kLCIgIixhLnJlbCwiICIpfX1mdW5jdGlvbiBybnQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLG5udCw0LDQsImNsci10cmVlLW5vZGUiLDMzKSxqcigpKSwyJmMp'@;
put 'e2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGludChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBvbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzIpLHh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLml0ZW1zU2VhcmNoPSIiLGp0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBzbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyNSkoMSwiZGl2IiwyNikoMiwi'@;
put 'aW5wdXQiLDM3LDM4KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaXRlbXNTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQsaW50LDEsMCwi'@;
put 'Y2xyLWljb24iLDI5KSxKZSg1LG9udCwxLDAsImNsci1pY29uIiwzMCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQuaXRlbXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52'@;
put 'YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGFudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDM0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBqdChfLnRyZWVOb2RlQ2xpY2tl'@;
put 'ZChoLGYsXy5lbmRwb2ludEl0ZW1zKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDM1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNp'@;
put 'dDtyZXR1cm4ganQoVmUoKS5pdGVtT25DbGljayhoKSl9KSxxdCgyLCJjbHItaWNvbiIsMzYpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7UmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRh'@;
put 'YmxlcyksQ2UoMykscHIoIiAiLGEubmFtZXx8YS5pZCwiICIpfX1mdW5jdGlvbiBsbnQoYyxsKXtpZigxJmMmJihWcigwKSxKZSgxLGFudCw0LDMsImNsci10cmVlLW5vZGUiLDMzKSxqcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1'@;
put 'bmN0aW9uIGNudChjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDM5KX1mdW5jdGlvbiB1bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJuZ3gtanNvbi12aWV3ZXIiLDQ5KSx4dCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUo'@;
put 'Mykub25Kc29uTGlua0NsaWNrKGgpKX0pLHllKCl9MiZjJiZSZSgianNvbiIsVmUoMykuZW5kcG9pbnRKc29uKSgiZXhwYW5kZWQiLCExKX1mdW5jdGlvbiBkbnQoYyxsKXtpZigxJmMmJihWcigwKSxOZSgxKSxiYSgyLCJwcmV0dHlqc29uIiksanIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0Nl'@;
put 'KDEpLHByKCJcbiAgICAgICAgICAgICIsVWwoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIGhudChjLGwpe2lmKDEmYyYmKFZyKDApLE5lKDEsIlxuICAgICAgICAgICIpLEplKDIsdW50LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksTmUoMywiXG4gICAg'@;
put 'ICAgICAgIiksSmUoNCxkbnQsMywzLCJuZy1jb250YWluZXIiLDE5KSxOZSg1LCJcbiAgICAgICAgIiksanIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJuZ0lmIiwhYS5yYXdKc29uKSxDZSgyKSxSZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24gZm50KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPVZuKCk7VnIoMCksbWUoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLE5lKDMsIiBHRVQgIiksbWUoNCwicCIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25CcmVhZGN1bXNDbGljayhoKSl9KSxiYSg1LCJsaW5raW56ZSIpLHllKCks'@;
put 'bWUoNiwiYnV0dG9uIiwxNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNvcHlCcmVhZGNydW1zKCkpfSkscXQoNywiY2xyLWljb24iLDE1KSx5ZSgpKCksbWUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTIpKDEwLCJsYWJlbCIpLE5l'@;
put 'KDExLCJTdGFydCIpLHllKCksbWUoMTIsImlucHV0Iiw0NCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmVuZHBvaW50LnN0YXJ0PWgpfSkseWUoKSgpLG1lKDEzLCJjbHItaW5wdXQtY29udGFpbmVyIiwxMikoMTQsImxhYmVsIiksTmUoMTUs'@;
put 'IkxpbWl0IikseWUoKSxtZSgxNiwiaW5wdXQiLDQ0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZW5kcG9pbnQubGltaXQ9aCl9KSx5ZSgpKCksbWUoMTcsImJ1dHRvbiIsNDUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks'@;
put 'anQoVmUoKS5hcHBseVF1ZXJ5UGFyYW1zKCkpfSkscXQoMTgsImNsci1pY29uIiw0NikseWUoKSgpKCksbWUoMTksInByZSIsNDcpLE5lKDIwLCIgICAgICAgICIpLEplKDIxLGhudCw2LDIsIm5nLWNvbnRhaW5lciIsMTkpLE5lKDIyLCJcbiAgICAgICIpLHllKCksanIoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9VmUoKTtDZSg0KSxSZSgiaW5uZXJIVE1MIixVbCg1LDcsYS5lbmRwb2ludC51cmwpLHEyKSxDZSg4KSxSZSgibmdNb2RlbCIsYS5lbmRwb2ludC5zdGFydCkoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxDZSg0KSxSZSgibmdNb2RlbCIsYS5lbmRwb2ludC5s'@;
put 'aW1pdCkoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LmxpbWl0KSxDZSgxKSxSZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLENlKDQpLFJlKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCBwbnQ9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlu'@;
put 'a3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1z'@;
put 'U2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1s'@;
put 'aW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEduLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhl'@;
put 'bHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksR24udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3Ro'@;
put 'aXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09'@;
put 'SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe0duLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGlu'@;
put 'Zz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRo'@;
put 'aXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZD1h'@;
put 'Lm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAg'@;
put 'RXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0'@;
put 'aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfWNvcHlKc29uKCl7'@;
put 'dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3Jp'@;
put 'dGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9IitkOiIifWAsZj1gJHt0aGlz'@;
put 'LmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9ZC5saW5rcyx0aGlzLmVu'@;
put 'ZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0fSxkPT57dGhpcy5lbmRw'@;
put 'b2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlvbiYmKGg9YCR7aH1cbiR7'@;
put 'ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYyksdHQoTnR0KSx0dChvYSksdHQodmwpKX0s'@;
put 'Yy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpeWEtYXBpLWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozMyx2YXJzOjEzLGNvbnN0czpbWzEsImFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIi'@;
put 'LCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzMsImxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50'@;
put 'ZXIiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJoLTEwMCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwidy0x'@;
put 'MDAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzaXRpb24tcmVsYXRpdmUiXSxbMSwianNvbi10b2dnbGUiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsIm0tMCJdLFsidHlwZSIsImNoZWNrYm94'@;
put 'IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lm'@;
put 'Il0sWzEsInctMTAwIiwibGlnaHQiXSxbNCwibmdJZiJdLFszLCJsYWJlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJj'@;
put 'aC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxpbmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaW5rc1RyZWVJbnB1dCIsIiJdLFsic2hhcGUi'@;
put 'LCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwi'@;
put 'bmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBpdGVtcyIs'@;
put 'Im5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoSXRlbXNUcmVlSW5wdXQiLCIiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlm'@;
put 'eS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImlubmVySFRNTCIsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVyeS1w'@;
put 'YXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwicGxheSJdLFsx'@;
put 'LCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0sWzEsImQtYmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm'@;
put 'YSYmKG1lKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwwKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTmUoNCwiQVBJIENvbGxlY3Rpb24iKSx5ZSgpLG1lKDUsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmNvbGxlY3Rp'@;
put 'b249Zn0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxKZSg2LEt0dCwzLDQsIm9wdGdyb3VwIiwyKSxiYSg3LCJrZXl2YWx1ZSIpLHllKCkoKSgpLEplKDgsWHR0LDIsMCwicCIsMyksbWUoOSwiZGl2Iiw0KSxKZSgxMCxKdHQsMSww'@;
put 'LCJjbHItc3Bpbm5lciIsNSkseWUoKSxtZSgxMSwiY2xyLXRyZWUiKSxKZSgxMix0bnQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSxKZSgxMyxybnQsMiwxLCJuZy1jb250YWluZXIiLDcpLHllKCksbWUoMTQsImNsci10cmVlIiksSmUoMTUsc250LDYsMywiY2xyLXRyZWUtbm9kZSIsNiksSmUo'@;
put 'MTYsbG50LDIsMSwibmctY29udGFpbmVyIiw3KSx5ZSgpKCksbWUoMTcsImRpdiIsOCkoMTgsImRpdiIsOSkoMTksImRpdiIsMTApKDIwLCJkaXYiLDExKSgyMSwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDEyKSgyMiwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjMsImlucHV0IiwxMykseHQoIm5n'@;
put 'TW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJhd0pzb249Zn0pLHllKCksbWUoMjQsImxhYmVsIiksTmUoMjUsIlJBVyBKc29uIikseWUoKSgpKCksbWUoMjYsImJ1dHRvbiIsMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb3B5SnNvbigpfSkscXQoMjcsImNs'@;
put 'ci1pY29uIiwxNSkseWUoKSgpLG1lKDI4LCJoNCIsMTYpLE5lKDI5LCIgQVBJIEV4cGxvcmVyICIpLEplKDMwLGNudCwxLDAsImNsci1zcGlubmVyIiwxNykseWUoKSgpLHF0KDMxLCJociIsMTgpLEplKDMyLGZudCwyMyw5LCJuZy1jb250YWluZXIiLDE5KSx5ZSgpKCkpLDImYSYmKENlKDUp'@;
put 'LFJlKCJuZ01vZGVsIixkLmNvbGxlY3Rpb24pLENlKDEpLFJlKCJuZ0Zvck9mIixVbCg3LDExLGQuY29sbGVjdGlvbnMpKSxDZSgyKSxSZSgibmdJZiIsZC5lbmRwb2ludExpbmtzLmxlbmd0aDwxJiYhZC5jb2xsZWN0aW9uTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuY29sbGVjdGlvbkxv'@;
put 'YWRpbmcpLENlKDIpLFJlKCJuZ0lmIixkLmVuZHBvaW50TGlua3MubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0Zvck9mIixkLmVuZHBvaW50TGlua3MpLENlKDIpLFJlKCJuZ0lmIixkLmVuZHBvaW50SXRlbXMubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0Zvck9mIixkLmVuZHBvaW50SXRlbXMpLENl'@;
put 'KDcpLFJlKCJuZ01vZGVsIixkLnJhd0pzb24pLENlKDcpLFJlKCJuZ0lmIixkLmVuZHBvaW50TG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuY29sbGVjdGlvbi5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGwxLGMxLFdhLGFFLFMwLE0wLEJzLE9zLGRkLGcxLGthLFp1LFVzLEQw'@;
put 'LEQ4LFQwLGYxLGpGLE44LEg4LHUyLG4zLFl0dCxkeCxHdHQsJHR0XSxzdHlsZXM6WyIuYXBpLWNvbGxlY3Rpb24tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5qc29uLWFyZWFbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgICBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5qc29uLWFyZWFbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgID5uZ3gtanNvbi12aWV3ZXJ7aGVpZ2h0OjEwMCV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZpZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99Lmpzb24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNv'@;
put 'bHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9LmVuZHBvaW50LWJyZWFkY3J1bXNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMCAxMHB4fS5xdWVyeS1wYXJhbXNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjcwcHh9Il19KSxjfSkoKTtj'@;
put 'b25zdCBnbnQ9bmV3IE1pKCJXaW5kb3dUb2tlbiIsdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudD97cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+d2luZG93fTp7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+e319KTtsZXQgbW50PSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgpe3RoaXMubmdab25lPWEsdGhpcy5kb2N1bWVudD1kLHRoaXMud2luZG93PWgsdGhpcy5jb3B5U3ViamVjdD1uZXcgYmUsdGhpcy5jb3B5UmVzcG9uc2UkPXRoaXMuY29weVN1YmplY3QuYXNPYnNlcnZhYmxlKCksdGhpcy5jb25maWc9e319Y29uZmlndXJlKGEpe3Ro'@;
put 'aXMuY29uZmlnPWF9Y29weShhKXtpZighdGhpcy5pc1N1cHBvcnRlZHx8IWEpcmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZSh7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pO2NvbnN0IGQ9dGhpcy5jb3B5RnJvbUNvbnRlbnQoYSk7cmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZShkP3tj'@;
put 'b250ZW50OmEsaXNTdWNjZXNzOmR9Ontpc1N1Y2Nlc3M6ITEsY29udGVudDphfSl9Z2V0IGlzU3VwcG9ydGVkKCl7cmV0dXJuISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCYmISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgiY29weSIpJiYhIXRoaXMu'@;
put 'd2luZG93fWlzVGFyZ2V0VmFsaWQoYSl7aWYoYSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnR8fGEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KXtpZihhLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgInRhcmdldCIgYXR0cmlidXRl'@;
put 'LiBQbGVhc2UgdXNlICJyZWFkb25seSIgaW5zdGVhZCBvZiAiZGlzYWJsZWQiIGF0dHJpYnV0ZScpO3JldHVybiEwfXRocm93IG5ldyBFcnJvcigiVGFyZ2V0IHNob3VsZCBiZSBpbnB1dCBvciB0ZXh0YXJlYSIpfWNvcHlGcm9tSW5wdXRFbGVtZW50KGEsZD0hMCl7dHJ5e3RoaXMuc2VsZWN0'@;
put 'VGFyZ2V0KGEpO2NvbnN0IGg9dGhpcy5jb3B5VGV4dCgpO3JldHVybiB0aGlzLmNsZWFyU2VsZWN0aW9uKGQ/YTp2b2lkIDAsdGhpcy53aW5kb3cpLGgmJnRoaXMuaXNDb3B5U3VjY2Vzc0luSUUxMSgpfWNhdGNoe3JldHVybiExfX1pc0NvcHlTdWNjZXNzSW5JRTExKCl7Y29uc3QgYT10aGlz'@;
put 'LndpbmRvdy5jbGlwYm9hcmREYXRhO3JldHVybiEoYSYmYS5nZXREYXRhJiYhYS5nZXREYXRhKCJUZXh0IikpfWNvcHlGcm9tQ29udGVudChhLGQ9dGhpcy5kb2N1bWVudC5ib2R5KXtpZih0aGlzLnRlbXBUZXh0QXJlYSYmIWQuY29udGFpbnModGhpcy50ZW1wVGV4dEFyZWEpJiZ0aGlzLmRl'@;
put 'c3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSwhdGhpcy50ZW1wVGV4dEFyZWEpe3RoaXMudGVtcFRleHRBcmVhPXRoaXMuY3JlYXRlVGVtcFRleHRBcmVhKHRoaXMuZG9jdW1lbnQsdGhpcy53aW5kb3cpO3RyeXtkLmFwcGVuZENoaWxkKHRoaXMudGVtcFRl'@;
put 'eHRBcmVhKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkNvbnRhaW5lciBzaG91bGQgYmUgYSBEb20gZWxlbWVudCIpfX10aGlzLnRlbXBUZXh0QXJlYS52YWx1ZT1hO2NvbnN0IGg9dGhpcy5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRlbXBUZXh0QXJlYSwhMSk7cmV0dXJuIHRoaXMuY29u'@;
put 'ZmlnLmNsZWFuVXBBZnRlckNvcHkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLGh9ZGVzdHJveShhPXRoaXMuZG9jdW1lbnQuYm9keSl7dGhpcy50ZW1wVGV4dEFyZWEmJihhLnJlbW92ZUNoaWxkKHRoaXMudGVtcFRleHRBcmVhKSx0aGlz'@;
put 'LnRlbXBUZXh0QXJlYT12b2lkIDApfXNlbGVjdFRhcmdldChhKXtyZXR1cm4gYS5zZWxlY3QoKSxhLnNldFNlbGVjdGlvblJhbmdlKDAsYS52YWx1ZS5sZW5ndGgpLGEudmFsdWUubGVuZ3RofWNvcHlUZXh0KCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jbGVh'@;
put 'clNlbGVjdGlvbihhLGQpe2EmJmEuZm9jdXMoKSxkLmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5nZXMoKX1jcmVhdGVUZW1wVGV4dEFyZWEoYSxkKXtjb25zdCBoPSJydGwiPT09YS5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtsZXQgZjtyZXR1cm4gZj1hLmNyZWF0'@;
put 'ZUVsZW1lbnQoInRleHRhcmVhIiksZi5zdHlsZS5mb250U2l6ZT0iMTJwdCIsZi5zdHlsZS5ib3JkZXI9IjAiLGYuc3R5bGUucGFkZGluZz0iMCIsZi5zdHlsZS5tYXJnaW49IjAiLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlW2g/InJpZ2h0IjoibGVmdCJdPSItOTk5OXB4'@;
put 'IixmLnN0eWxlLnRvcD0oZC5wYWdlWU9mZnNldHx8YS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSsicHgiLGYuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpLGZ9cHVzaENvcHlSZXNwb25zZShhKXt0aGlzLmNvcHlTdWJqZWN0Lm9ic2VydmVycy5sZW5ndGg+MCYmdGhpcy5uZ1pvbmUu'@;
put 'cnVuKCgpPT57dGhpcy5jb3B5U3ViamVjdC5uZXh0KGEpfSl9cHVzaENvcHlSZXBvbnNlKGEpe3RoaXMucHVzaENvcHlSZXNwb25zZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKExzKSxhcihnbnQsOCkpfSxjLlx1MDI3NXBy'@;
put 'b3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHZudD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMubmdab25lPWEsdGhpcy5ob3N0PWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xpcGJvYXJkU3J2PWYsdGhp'@;
put 'cy5jYk9uU3VjY2Vzcz1uZXcgRXIsdGhpcy5jYk9uRXJyb3I9bmV3IEVyLHRoaXMub25DbGljaz1fPT57dGhpcy5jbGlwYm9hcmRTcnYuaXNTdXBwb3J0ZWQ/dGhpcy50YXJnZXRFbG0mJnRoaXMuY2xpcGJvYXJkU3J2LmlzVGFyZ2V0VmFsaWQodGhpcy50YXJnZXRFbG0pP3RoaXMuaGFuZGxl'@;
put 'UmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGFyZ2V0RWxtKSx0aGlzLnRhcmdldEVsbS52YWx1ZSxfKTp0aGlzLmNiQ29udGVudCYmdGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21Db250ZW50KHRoaXMuY2JDb250'@;
put 'ZW50LHRoaXMuY29udGFpbmVyKSx0aGlzLmNiQ29udGVudCxfKTp0aGlzLmhhbmRsZVJlc3VsdCghMSx2b2lkIDAsXyl9fW5nT25Jbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmNsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0'@;
put 'Lm5hdGl2ZUVsZW1lbnQsImNsaWNrIix0aGlzLm9uQ2xpY2spfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsaWNrTGlzdGVuZXImJnRoaXMuY2xpY2tMaXN0ZW5lcigpLHRoaXMuY2xpcGJvYXJkU3J2LmRlc3Ryb3kodGhpcy5jb250YWluZXIpfWhhbmRsZVJlc3VsdChhLGQsaCl7bGV0IGY9e2lz'@;
put 'U3VjY2VzczphLGNvbnRlbnQ6ZCxzdWNjZXNzTWVzc2FnZTp0aGlzLmNiU3VjY2Vzc01zZyxldmVudDpofTthP3RoaXMuY2JPblN1Y2Nlc3Mub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPblN1Y2Nlc3MuZW1pdChmKX0pOnRoaXMuY2JPbkVycm9yLm9ic2VydmVkJiZ0'@;
put 'aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25FcnJvci5lbWl0KGYpfSksdGhpcy5jbGlwYm9hcmRTcnYucHVzaENvcHlSZXNwb25zZShmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTm8pLHR0KE5pKSx0dChGbyksdHQobW50KSl9LGMu'@;
put 'XHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5neENsaXBib2FyZCIsIiJdXSxpbnB1dHM6e3RhcmdldEVsbTpbIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1'@;
put 'Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSxfbnQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb29dfSksY30pKCk7dmFyIGJudD1GKDUxNzE0KTtsZXQgeW50PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29uc3QgaD1wYXJzZUludChkWzBdKXx8MixmPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChhKTphO3JldHVy'@;
put 'bigwLGJudC5SKShmLGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJjb252ZXJ0U2l6ZSIsdHlwZTpjLHB1cmU6ITB9KSxjfSkoKTtjb25zdCB3bnQ9WyJxdWVyeUZpbHRlciJdO2Z1bmN0aW9uIENudChj'@;
put 'LGwpezEmYyYmKG1lKDAsImRpdiIsNTApLHF0KDEsImNsci1zcGlubmVyIiw1MSkseWUoKSl9ZnVuY3Rpb24gU250KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNTgpfWZ1bmN0aW9uIE1udChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw1OSkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24geG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNTIpKDEsImRpdiIs'@;
put 'NTMpKDIsImlucHV0Iiw1NCw1NSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcmllc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpLEplKDQs'@;
put 'U250LDEsMCwiY2xyLWljb24iLDU2KSxKZSg1LE1udCwxLDAsImNsci1pY29uIiw1NykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSks'@;
put 'UmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBFbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw1OCl9ZnVuY3Rpb24ga250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDU5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtj'@;
put 'b25zdCBoPSRpKDMpLGY9VmUoMikuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSx5ZSgpfX1mdW5jdGlvbiBBbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJl'@;
put 'ZS1ub2RlIiw1MikoMSwiZGl2Iiw1MykoMiwiaW5wdXQiLDY0LDY1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1w'@;
put 'bGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLHllKCksSmUoNCxFbnQsMSwwLCJjbHItaWNvbiIsNTYpLEplKDUsa250LDEsMCwiY2xyLWljb24iLDU3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoMikuJGltcGxpY2l0O0NlKDIpLFJl'@;
put 'KCJpZCIsInNlYXJjaF8iK2QuTElCUkFSWVJFRikoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBUbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw3'@;
put 'Myl9ZnVuY3Rpb24gRG50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNzQpfWZ1bmN0aW9uIEludChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsNjkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkubmdWYXIsZj1WZSgpLiRpbXBsaWNp'@;
put 'dCxfPVZlKDIpLiRpbXBsaWNpdCxUPVZlKCk7cmV0dXJuIGp0KGg/IiI6VC5vblRhYmxlQ2xpY2soZixfKSl9KSxWcigxLDcwKSxKZSgyLFRudCwxLDAsImNsci1pY29uIiw3MSksSmUoMyxEbnQsMSwwLCJjbHItaWNvbiIsNzIpLGpyKCksTmUoNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUo'@;
put 'KS5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0LGg9VmUoMikuJGltcGxpY2l0LGY9VmUoKTtkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksQ2UoMSksUmUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksQ2Uo'@;
put 'MSksUmUoIm5nU3dpdGNoQ2FzZSIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCExKSxDZSgxKSxwcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBMbnQoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0'@;
put 'IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIikseWUoKSl9ZnVuY3Rpb24gUm50KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNzUpLEplKDEsTG50LDIsMCwic3BhbiIsMzgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixh'@;
put 'KX19ZnVuY3Rpb24gT250KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAiKSxKZSgxLEludCw1LDgsImJ1dHRvbiIsNjcpLEplKDIsUm50LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsNjgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIs'@;
put 'YS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFBudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiKSxKZSgxLE9udCwzLDEsImNsci10b29sdGlwIiw2NikseWUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1WZSgzKTtDZSgxKSxSZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52'@;
put 'YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIEZudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJl'@;
put 'ZU5vZGVDbGlja2VkKGgsZikpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiw2MikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1W'@;
put 'ZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllSRUYsanQoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSkscXQoMiwiY2xyLWljb24iLDYzKSxOZSgzKSx5ZSgpLEplKDQsQW50LDYsNCwiY2xyLXRyZWUtbm9kZSIsMiksSmUoNSxQbnQsMiwxLCJjbHItdHJlZS1ub2RlIiwzKSx5'@;
put 'ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoMykscHIoIiAiLGEuTElCUkFSWU5BTUUsIiAi'@;
put 'KSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIEhudChjLGwpe2lmKDEmYyYmKFZyKDApLEplKDEsRm50LDYsNywiY2xyLXRyZWUtbm9kZSIsNjApLGpyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgi'@;
put 'bmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIE5udChjLGwpezEmYyYmKG1lKDAsImRpdiIsNzYpKDEsInNwYW4iLDc3KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIFZudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIs'@;
put 'NzgpKDEsImRpdiIsNzkpKDIsImRpdiIsODApKDMsImRpdiIsODEpKDQsImJ1dHRvbiIsODIpLHF0KDUsImNsci1pY29uIiw4MykseWUoKSxtZSg2LCJoMyIsNDMpLE5lKDcsIkVycm9yIikseWUoKSgpLG1lKDgsImRpdiIsMTApKDksInAiKSxOZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1w'@;
put 'dHkgY2xhdXNlcyIpLHllKCkoKSxtZSgxMSwiZGl2IiwyMSkoMTIsImJ1dHRvbiIsODQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5udWxsVmFyaWFibGVzPSExKX0pLE5lKDEzLCIgT2sgIikseWUoKSgpKCkoKSgpfX1mdW5jdGlvbiBCbnQoYyxsKXsxJmMm'@;
put 'JnF0KDAsImRpdiIsODUpfWZ1bmN0aW9uIGpudChjLGwpezEmYyYmcXQoMCwiYXBwLXF1ZXJ5IixudWxsLDg2KX1mdW5jdGlvbiB6bnQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDg3KSgxLCJzcGFuIiw4OCksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSxtZSgzLCJkaXYiKSg0LCJoNCIpLE5l'@;
put 'KDUsIkxvYWRpbmcgdGFibGUgdmlld2VyIikseWUoKSgpKCkpfWZ1bmN0aW9uIFVudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoNSk7cmV0dXJuIGp0KFZlKDIpLnNlYXJj'@;
put 'aFRhYmxlKGgpKX0pLHllKCl9fWZ1bmN0aW9uIFpudChjLGwpezEmYyYmKG1lKDAsInNwYW4iLDExNSksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gWW50KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTE2KX1mdW5jdGlvbiBXbnQoYyxsKXtpZigxJmMmJihtZSgwLCJz'@;
put 'cGFuIiwxMTcpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxwcigiICIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIEdudChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10b29sdGlwLWNvbnRl'@;
put 'bnQiLDExOCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLHByKCIgIixhLmRzTm90ZSwiICIpfX1mdW5jdGlvbiAkbnQoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSksYmEoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7'@;
put 'Q2UoMSksdzUoIiAoIixNNSgyLDQsYS5udW1iZXJPZlJvd3MsIiwiKSwiICIsMT09PWEubnVtYmVyT2ZSb3dzPyJyb3ciOiJyb3dzIiwiLCAiLGEuZmlsdGVyQ29scy5sZW5ndGgsIiIsMT09PWEuZmlsdGVyQ29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIHFudChj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLEplKDEsJG50LDMsNywic3BhbiIsMzgpLG1lKDIsImNsci1pY29uIiwxMTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykucmVsb2FkVGFibGVEYXRhKCkpfSkseWUoKSxqcigpfWlmKDImYyl7Y29uc3Qg'@;
put 'YT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gS250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwxMjUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNSkuZWRpdFRhYmxlKCkpfSks'@;
put 'cXQoMSwiY2xyLWljb24iLDEzMiksbWUoMiwic3BhbiIpLE5lKDMsIkVkaXQiKSx5ZSgpKCl9fWZ1bmN0aW9uIFhudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTI1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDUpLmdvVG9MaW5l'@;
put 'YWdlKCkpfSkscXQoMSwiY2xyLWljb24iLDEzMyksbWUoMiwic3BhbiIpLE5lKDMsIkxpbmVhZ2UiKSx5ZSgpKCl9fWZ1bmN0aW9uIEpudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjQpKDEsImJ1dHRvbiIsMTI1KSx4dCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLm5ld1ZpZXdib3goKSl9KSxxdCgyLCJjbHItaWNvbiIsMTI2KSxtZSgzLCJzcGFuIiksTmUoNCwiVmlld2JveGVzIikseWUoKSgpLEplKDUsS250LDQsMCwiYnV0dG9uIiwxMjcpLEplKDYsWG50LDQsMCwiYnV0dG9uIiwxMjcpLG1lKDcs'@;
put 'ImJ1dHRvbiIsMTI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLm9wZW5RYigpKX0pLHF0KDgsImNsci1pY29uIiwxMjkpLG1lKDksInNwYW4iKSxOZSgxMCwiRmlsdGVyIikseWUoKSgpLG1lKDExLCJidXR0b24iLDEyNSkseHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBCdChhKSxqdChWZSg0KS5vcGVuRG93bmxvYWQ9ITApfSkscXQoMTIsImNsci1pY29uIiwxMzApLG1lKDEzLCJzcGFuIiksTmUoMTQsIkRvd25sb2FkIikseWUoKSgpLG1lKDE1LCJidXR0b24iLDEyNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChW'@;
put 'ZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxxdCgxNiwiY2xyLWljb24iLDEzMSksbWUoMTcsInNwYW4iKSxOZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSg0KTtDZSg1KSxSZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksQ2UoMSksUmUoIm5nSWYi'@;
put 'LGEudGFibGV1cmkpfX1mdW5jdGlvbiBRbnQoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24iLDEyMCkoMSwiYnV0dG9uIiwxMjEpLHF0KDIsImNsci1pY29uIiwxMjIpLE5lKDMsIiBvcHRpb25zICIpLHllKCksSmUoNCxKbnQsMTksMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyMykseWUo'@;
put 'KSksMiZjJiZSZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKX1mdW5jdGlvbiBlcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEzNCkoMSwic3BhbiIpLE5lKDIsIkZJTFRFUiA6ICIpLG1lKDMsImIiKSxOZSg0KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDQpLG9y'@;
put 'KGEucXVlcnlUZXh0KX19Y29uc3QgdHJ0PWZ1bmN0aW9uKCl7cmV0dXJuWyIiLCIgIl19O2Z1bmN0aW9uIG5ydChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsOTUpKDEsInNlY3Rpb24iLDk2KSgyLCJmb3JtIiw5NykoMywiZGl2Iiw5OCkoNCwiaW5wdXQiLDk5LDEwMCks'@;
put 'eHQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoNSk7cmV0dXJuIGp0KFZlKDIpLnNlYXJjaFRhYmxlKGgpKX0pLHllKCksSmUoNixVbnQsMSwwLCJjbHItaWNvbiIsMTAxKSxKZSg3LFpudCwyLDAsInNwYW4iLDEwMikseWUoKSxtZSg4LCJjbHItY2hlY2tib3gt'@;
put 'Y29udGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMCwiaW5wdXQiLDEwMykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5zZWFyY2hOdW1lcmljPWgpfSkseWUoKSxtZSgxMSwibGFiZWwiKSxOZSgxMiwiTnVtZXJpYyIpLHll'@;
put 'KCkoKSgpKCkoKSxtZSgxMywiZGl2IiwxMDQpKDE0LCJoMyIsMTA1KSgxNSwiY2xyLXRvb2x0aXAiLDEwNikoMTYsImNsci1pY29uIiwxMDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZGF0YXNldEluZm89ITApfSkseWUoKSxKZSgxNyxZbnQsMSwwLCJj'@;
put 'bHItaWNvbiIsMTA4KSxKZSgxOCxXbnQsMiwxLCJzcGFuIiwxMDkpLEplKDE5LEdudCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDExMCkseWUoKSxKZSgyMCxxbnQsMywxLCJuZy1jb250YWluZXIiLDM4KSx5ZSgpKCksbWUoMjEsImRpdiIsMTExKSxKZSgyMixRbnQsNSwxLCJjbHItZHJv'@;
put 'cGRvd24iLDExMikseWUoKSxKZSgyMyxlcnQsNSwxLCJkaXYiLDExMykseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLENlKDIpLFJlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxDZSgxKSxSZSgibmdJ'@;
put 'ZiIsYS5zZWFyY2hMb2FkaW5nKSxDZSgzKSxSZSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxDZSg3KSxSZSgibmdJZiIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksQ2UoMSksUmUoIm5nSWYiLGEudGFibGVUaXRsZSYmYS50YWJsZVRp'@;
put 'dGxlLmxlbmd0aD4wKSxDZSgyKSxSZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLENlKDIpLFJlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJiFhLmFib3J0QWN0aXZlKSxDZSgxKSxSZSgibmdJZiIsIjE9MSIhPT1hLnF1ZXJ5VGV4dCYmISRzKDksdHJ0KS5pbmNs'@;
put 'dWRlcyhhLnF1ZXJ5VGV4dCkmJiFhLmFib3J0QWN0aXZlKX19ZnVuY3Rpb24gcnJ0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMzUpLHF0KDEsImNsci1pY29uIiwxMzYpLG1lKDIsImgzIiwxMzcpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSBsaWJyYXJ5IikseWUoKSgpKX1mdW5jdGlvbiBpcnQo'@;
put 'YyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiw1MSl9ZnVuY3Rpb24gb3J0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxNDUpLHF0KDEsImNsci1pY29uIiwxNDYpLG1lKDIsImgzIiwxMzcpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gc3J0KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwicCIsMTQ5KSxOZSgxLCIgTm8gbGlicmFyeSBpbmZvIGZvdW5kLiBDbGljayAiKSxtZSgyLCJjbHItaWNvbiIsMTUwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlbG9hZExpYkluZm8oKSl9KSx5ZSgpLE5l'@;
put 'KDMsIiBidXR0b24gdG8gcmVmcmVzaC4gIikseWUoKX19ZnVuY3Rpb24gYXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJFTkdJTkU6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxwcigiICIs'@;
put 'YS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5FTkdJTkU6IiIsIiAiKX19ZnVuY3Rpb24gbHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJMSUJJRDoiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQp'@;
put 'LHByKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkxJQklEOiIiLCIgIil9fWZ1bmN0aW9uIGNydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE1MSksTmUoMiwiTElCTkFNRToiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZl'@;
put 'KDUpO0NlKDQpLHByKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkxJQk5BTUU6IiIsIiAiKX19ZnVuY3Rpb24gdXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJMSUJTSVpFOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCksYmEoNSwiY29udmVy'@;
put 'dFNpemUiKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxwcigiICIsYS5saWJpbmZvWzBdP1VsKDUsMSxhLmxpYmluZm9bMF0uTElCU0laRSk6IiIsIiAiKX19ZnVuY3Rpb24gZHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJPV05FUlM6Iiks'@;
put 'eWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxwcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5PV05FUlM6IiIsIiAiKX19ZnVuY3Rpb24gaHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxOZSgyLCJQ'@;
put 'QVRIUzoiKSx5ZSgpLG1lKDMsInRkIiwxNTIpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLHByKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBBVEhTOiIiLCIgIil9fWZ1bmN0aW9uIGZydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE1MSks'@;
put 'TmUoMiwiUEVSTVM6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxwcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QRVJNUzoiIiwiICIpfX1mdW5jdGlvbiBwcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRk'@;
put 'IiwxNTEpLE5lKDIsIlNDSEVNQVM6IikseWUoKSxtZSgzLCJ0ZCIsMTUyKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxwcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5TQ0hFTUFTOiIiLCIgIil9fWZ1bmN0aW9uIGdydChjLGwpe2lmKDEmYyYmKG1lKDAs'@;
put 'InRyIikoMSwidGQiLDE1MSksTmUoMiwiVEFCTEVfQ05UOiIpLHllKCksbWUoMywidGQiLDE1MiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCkscHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uVEFCTEVfQ05UOiIiLCIgIil9fWZ1bmN0aW9uIG1ydChjLGwp'@;
put 'e2lmKDEmYyYmKFZyKDApLG1lKDEsInRhYmxlIiksSmUoMixhcnQsNSwxLCJ0ciIsMzgpLEplKDMsbHJ0LDUsMSwidHIiLDM4KSxKZSg0LGNydCw1LDEsInRyIiwzOCksSmUoNSx1cnQsNiwzLCJ0ciIsMzgpLEplKDYsZHJ0LDUsMSwidHIiLDM4KSxKZSg3LGhydCw1LDEsInRyIiwzOCksSmUo'@;
put 'OCxmcnQsNSwxLCJ0ciIsMzgpLEplKDkscHJ0LDUsMSwidHIiLDM4KSxKZSgxMCxncnQsNSwxLCJ0ciIsMzgpLHllKCksanIoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDIpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5FTkdJTkUpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5m'@;
put 'b1swXS5MSUJJRCksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQk5BTUUpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLkxJQlNJWkUpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5PV05FUlMpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEu'@;
put 'bGliaW5mb1swXS5QQVRIUyksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBFUk1TKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uVEFCTEVfQ05UKX19ZnVuY3Rpb24gdnJ0KGMs'@;
put 'bCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNDcpLEplKDEsc3J0LDQsMCwicCIsMTQ4KSxKZSgyLG1ydCwxMSw5LCJuZy1jb250YWluZXIiLDM4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEubGli'@;
put 'aW5mby5sZW5ndGg+MCl9fWZ1bmN0aW9uIF9ydChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO1ZyKDApLG1lKDEsImRpdiIsMTM4KSxxdCgyLCJzZWN0aW9uIiw5NiksbWUoMywiZGl2IiwxMzkpKDQsImgzIiwxNDApLE5lKDUpLHllKCksbWUoNiwiY2xyLWljb24iLDExOSkseHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSkseWUoKSgpLHF0KDcsImRpdiIsMTExKSx5ZSgpLG1lKDgsImRpdiIsMTQxKSxKZSg5LGlydCwxLDAsImNsci1zcGlubmVyIiwxNDIpLHllKCksSmUoMTAsb3J0LDQsMCwiZGl2IiwxNDMpLEplKDEx'@;
put 'LHZydCwzLDIsImRpdiIsMTQ0KSxqcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg1KSxwcigiICIsYS5saWIsIiAiKSxDZSg0KSxSZSgibmdJZiIsbnVsbD09PWEubGliaW5mbyksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5s'@;
put 'aWJpbmZvKX19ZnVuY3Rpb24gYnJ0KGMsbCl7MSZjJiYobWUoMCwiaDMiLDEzNyksTmUoMSwiIE5vIGRhdGEgZm91bmQgd2l0aCBnaXZlbiBjb25kaXRpb25zICIpLHllKCkpfWZ1bmN0aW9uIHlydChjLGwpezEmYyYmKG1lKDAsImgzIiwxMzcpLE5lKDEsIiBObyBkYXRhIGZvdW5kIGR1ZSB0'@;
put 'byBzYXMgcmVxdWVzdCBlcnJvciAiKSx5ZSgpKX1mdW5jdGlvbiB3cnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE1MykscXQoMSwiY2xyLWljb24iLDE1NCksSmUoMixicnQsMiwwLCJoMyIsMTU1KSxKZSgzLHlydCwyLDAsImgzIiwxNTUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtD'@;
put 'ZSgyKSxSZSgibmdJZiIsYS5ub0RhdGEpLENlKDEpLFJlKCJuZ0lmIixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIENydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTU2KSxxdCgxLCJob3QtdGFibGUiLDE1NykseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJtdWx0aUNv'@;
put 'bHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgiY29weVBhc3RlIixhLmhvdFRhYmxlLmNv'@;
put 'cHlQYXN0ZSkoImNvbnRleHRNZW51IixhLmhvdFRhYmxlLmNvbnRleHRNZW51KSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGEuaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hla2VyKSgi'@;
put 'Y2VsbHMiLGEuaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5ob3RUYWJsZS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLGEuaG90VGFibGUucm93SGVhZGVyV2lkdGgpKCJyb3dI'@;
put 'ZWlnaHRzIixhLmhvdFRhYmxlLnJvd0hlaWdodHMpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBTcnQoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwxNTgpLE5lKDEpLHF0KDIsImNvbnRhY3QtbGluayIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgx'@;
put 'KSxwcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIE1ydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODkpLEplKDEsbnJ0LDI0LDEwLCJkaXYiLDkwKSxKZSgyLHJy'@;
put 'dCw0LDAsImRpdiIsOTEpLEplKDMsX3J0LDEyLDQsIm5nLWNvbnRhaW5lciIsMzgpLEplKDQsd3J0LDQsMiwiZGl2Iiw5MiksSmUoNSxDcnQsMiwxOCwiZGl2Iiw5MyksbWUoNiwiZGl2IiksSmUoNyxTcnQsMywxLCJwIiw5NCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgi'@;
put 'bmdJZiIsYS50YWJsZSksQ2UoMSksUmUoIm5nSWYiLCEoYS5saWJ8fGEudGFibGV8fGEubm9EYXRhUmVxRXJyfHxhLm5vRGF0YSkpLENlKDEpLFJlKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmIWEudGFibGUmJmEubGliKSxDZSgxKSxSZSgibmdJZiIsYS5ub0RhdGF8fGEu'@;
put 'bm9EYXRhUmVxRXJyKSxDZSgxKSxSZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJmEudGFibGUpLENlKDIpLFJlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSYmYS5ob3RUYWJsZS5kYXRhJiZhLmhvdFRhYmxl'@;
put 'LmRhdGEubGVuZ3RoPmEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQgSFQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLHBlLHdlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLnNh'@;
put 'c1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9Xyx0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMubG9nZ2VyU2VydmljZT1XLHRoaXMuaGVscGVyU2VydmljZT1pZSx0aGlzLmxvY2F0aW9uPXBlLHRoaXMuY2RmPXdlLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZWgsdGhp'@;
put 'cy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzVHJlZUV4cGFuZGVkPSExLHRoaXMubGliaW5mbz1udWxsLHRoaXMudGFibGV1cmk9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckNv'@;
put 'bHM9W10sdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMuYWJvcnRBY3RpdmU9ITEsdGhpcy51cmxGaWx0ZXJQaz1udWxsLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMud2ViUXVlcnlUZXh0PSIiLHRoaXMucXVlcnlFcnI9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5saWJyYXJpZXNMb2FkaW5n'@;
put 'PSExLHRoaXMubG9hZGluZ1RhYmxlVmlldz0hMSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5ub0RhdGFSZXFFcnI9ITEsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMub3BlbkRvd25sb2FkPSExLHRoaXMud2ViUXVlcnk9ITEs'@;
put 'dGhpcy53ZWJRdWVyeVRhYj0hMSx0aGlzLmRvd25sb2FkRm9ybWF0PSJDU1YiLHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuc2VhcmNoTG9hZGluZz0hMSx0aGlzLnNlYXJjaE51bWVyaWM9ITEsdGhpcy5udW1iZXJPZlJvd3M9bnVsbCx0aGlzLmhlYWRlclBrcz1b'@;
put 'XSx0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy5kc05vdGU9IiIsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpb'@;
put 'XSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMCxzZXR0aW5nczp7fSxhZnRlckdldENvbEhlYWRlcjp2b2lkIDAsbGljZW5zZUtleTp2b2lkIDAscm93SGVhZGVyczpF'@;
put 'ZT0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0s'@;
put 'ZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KEVlLFplLGl0LGV0LHl0LEV0KT0+'@;
put 'e2NvbnN0IFN0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgSnQsbm49Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IHZuPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sTm49dm4/dm5bMF1bMV06LTEsY3I9dGhpcy5ob3RJbnN0'@;
put 'YW5jZT8uY29sVG9Qcm9wKE5uKTtKdD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tjcl0sSnQmJihubj1gTEFCRUw6ICR7SnQ/LmxhYmVsfTxicj5UWVBFOiAke0p0Py50eXBlfTxicj5MRU5HVEg6ICR7SnQ/Lmxlbmd0aH08YnI+Rk9STUFUOiAke0p0Py5mb3JtYXR9YCl9cmV0dXJuIFN0Lmlu'@;
put 'bmVySFRNTD1ubixTdH19fX19LHRoaXMuaG90SW5zdGFuY2U9bnVsbCx0aGlzLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMSx0aGlzLnZpZXdib3hPcGVuPSExLHRoaXMuaG90VGFibGVSZWdpc3RlcmVyPW5ldyBBZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNq'@;
put 'c0NvbmZpZygpfW5nT25Jbml0KCl7IiIhPT1Hbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbiYmMD09PU9iamVjdC5rZXlzKHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zKS5sZW5ndGgmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbl0se3F1ZXJ5UGFy'@;
put 'YW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSYmKEduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L2RhdGEiKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMu'@;
put 'aG90VGFibGUubGljZW5zZUtleT1hfSl9bmV3Vmlld2JveCgpe3RoaXMudmlld2JveE9wZW49ITB9cmVzZXRGaWx0ZXIoKXt0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QmJnRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdC5yZXNldEZpbHRlcigpfXNlYXJjaFRhYmxlKGEpe3Zh'@;
put 'ciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgaD1hLnZhbHVlLGY9ZC5saWIrIi4iK2QudGFibGUsXz1wYXJzZUludChkLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCl8fDA7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFT'@;
put 'ZWFyY2goaCxkLnNlYXJjaE51bWVyaWMsZixfKS50aGVuKFQ9PntULnNhc3BhcmFtc3x8VC52aWV3RGF0YT8oZC5ob3RUYWJsZS5kYXRhPVQudmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9VC4kdmlld2RhdGEsZC5kc21ldGE9VC5kc21ldGEsZC5zZXREU05vdGUoKSxkLm51bWJlck9mUm93cz1U'@;
put 'LnNhc3BhcmFtc1swXS5OT0JTLGQucXVlcnlUZXh0PVQuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGQuaGVhZGVyUGtzPVQuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoP2Qubm9EYXRhPSEwOihkLm5vRGF0YT0hMSxkLnRhYmxl'@;
put 'RmxhZz0hMSxkLnNldHVwSG90KCkpKTpkLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksZC5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZpZXdEYXRhKHRoaXMudXJsRmlsdGVyUGt8fDApfXJlbG9hZExp'@;
put 'YkluZm8oKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmxpYmluZm89bnVsbCxhLnNhc1N0b3JlU2VydmljZS5yZWZyZXNoTGliSW5mbyhhLmxpYikudGhlbihmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9uKihoKXthLmxpYmluZm89aC5saWJpbmZvLEduLnZpZXdlci5s'@;
put 'aWJpbmZvPWEubGliaW5mbztjb25zdCBmPWEubGlicmFyaWVzLmZpbmQoXz0+Xy5MSUJSQVJZUkVGPT09YS5saWIpO2YmJihmLmxpYmluZm89YS5saWJpbmZvKX0pO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9PnthLmxvZ2dlclNlcnZp'@;
put 'Y2UuZXJyb3IoZCksbnVsbD09PWEubGliaW5mbyYmKGEubGliaW5mbz1bXSl9KX0pKCl9ZmlsdGVyRm4oYSl7dGhpcy5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXMuZmlsdGVyKGg9Pi0xIT09aC5MSUJSQVJZTkFNRS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvY2FsZUxvd2VyQ2FzZSgp'@;
put 'KSl9ZG93bmxvYWREYXRhKCl7bGV0IGE9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsZD10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IFcsZj0iJnR5cGU9Iit0aGlzLmRvd25sb2FkRm9ybWF0LF89IiZ0YWJs'@;
put 'ZT0iK3RoaXMudGFibGVUaXRsZSxUPSJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIjtXPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpw'@;
put 'YXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCksd2luZG93Lm9wZW4oYStoKyIvP19wcm9ncmFtPSIrZCsiL3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhIitmK18rVCsiJmZpbHRlcj0iK1cpLHRoaXMub3BlbkRvd25sb2FkPSExfWRvd25sb2FkRERMKCl7bGV0'@;
put 'IGE9dGhpcy5saWIsZD10aGlzLnRhYmxlLGg9dGhpcy5kb3dubG9hZEZvcm1hdC5yZXBsYWNlKCJfRERMIiwiIiksZj10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxfPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IFQ9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3'@;
put 'aW5kb3cub3BlbihmK1QrIi8/X3Byb2dyYW09IitfKyIvc2VydmljZXMvcHVibGljL2dldGRkbCIrYCZkcz0ke2R9JmxpYnJlZj0ke2F9JmZsYXZvdXI9JHtofSR7IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZp'@;
put 'Zy5jb250ZXh0TmFtZX1gOiIifWApLHRoaXMub3BlbkRvd25sb2FkPSExfW9uQ2xpQ29tbWFuZEZvY3VzKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnRhcmdldC5zZWxlY3QoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWJUYWIpfXRh'@;
put 'YmxlRWRpdEV4aXN0cygpe2xldCBhPXt9O2E9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXM7bGV0IGQ9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVsxXSxoPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMF07cmV0dXJuISFhW2hdJiZhW2hdLmluY2x1ZGVzKGQpfWdvVG9MaW5lYWdlKCl7bGV0IGQ9YC92'@;
put 'aWV3L2xpbmVhZ2UvJHt0aGlzLnRhYmxldXJpLnNwbGl0KCJcXCIpWzFdfS9SRVZFUlNFYDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGQpfXNob3dXZWJRdWVyeSgpe2xldCBhO3RoaXMud2ViUXVlcnk9ITAsYT10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+'@;
put 'InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpO2xldCBkPXdpbmRvdy5sb2NhdGlvbi5wb3J0Lmxlbmd0aD4wPyI6Iit3aW5kb3cubG9jYXRpb24ucG9ydDoiIjtjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IF89'@;
put 'YCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9JHtkfS8ke2h9Lz9fcHJvZ3JhbT0ke3RoaXMuc2FzanNDb25maWcuYXBwTG9jfS9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSZ0eXBlPVdFQiR7dGhpcy53ZWJRdWVyeVRhYj8iVEFCIjoi'@;
put 'Q1NWIn0mdGFibGU9JHt0aGlzLnRhYmxlVGl0bGV9JHsiJmZpbHRlcj0iK2F9YDt0aGlzLndlYlF1ZXJ5VGV4dD1fLnJlcGxhY2UoLyAvZ2ltLCIlMjAiKX1jb3B5VG9DbGlwKCl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTthLnN0eWxlLnBvc2l0aW9uPSJmaXhl'@;
put 'ZCIsYS5zdHlsZS5sZWZ0PSIwIixhLnN0eWxlLnRvcD0iMCIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnZhbHVlPXRoaXMud2ViUXVlcnlUZXh0LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5mb2N1cygpLGEuc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkb2N1'@;
put 'bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWNoZWNrRXhwYW5kKGEpe31jb2xsYXBzZUxpYnJhcnlJdGVtcyhh'@;
put 'LGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZUkVGIT09ZC5MSUJSQVJZUkVGJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJp'@;
put 'ZXModGhpcy5saWJyYXJpZXMsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeUV4cGFuZGVkQ2hhbmdlKGEs'@;
put 'ZCl7YSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoZC50YWJsZXM/ZC5leHBhbmRlZD0hIWh8fCFkLmV4cGFuZGVkOnlpZWxkIGYuc2VsZWN0VGFibGUo'@;
put 'YSwhMSxkKSxkLmV4cGFuZGVkKXtmLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IF89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke2QuTElCUkFSWVJFRn1gKTtmLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNlYXJjaElucHV0XSIsXyksXyYmXy5mb2N1cygpLGQmJmQubGli'@;
put 'aW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShb'@;
put 'Ii92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRh'@;
put 'YmxlQ2xpY2soYSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5sb2FkaW5nVGFibGVzPSEwLGYudGFi'@;
put 'bGU9ITEsZi50YWJsZURpc2FibGU9ITAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hP0duLnZpZXdlci50YWJsZXNTZXQmJmQ/KGYuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITEsZi50YWJsZXM9R24udmlld2VyLnRhYmxlcyxmLmxpYmluZm89R24udmlld2VyLmxpYmluZm8p'@;
put 'OihmLmxpYmluZm89bnVsbCx5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4oXz0+e2YuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITE7bGV0IFQ9Xy5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcuTUVNTkFNRX0pO2YubGliaW5mbz1fLmxp'@;
put 'YmluZm98fFtdLGYudGFibGVzPVQsaCYmKGgudGFibGVzPVQsaC5saWJpbmZvPWYubGliaW5mbyksR24udmlld2VyLmxpYnJhcmllcz1mLmxpYnJhcmllcyxHbi52aWV3ZXIubGlicmFyeT1mLmxpYixHbi52aWV3ZXIudGFibGVzPWYudGFibGVzLEduLnZpZXdlci5saWJpbmZvPWYubGliaW5m'@;
put 'byxHbi52aWV3ZXIudGFibGVzU2V0PSEwfSkuY2F0Y2goXz0+e2YubG9nZ2VyU2VydmljZS5lcnJvcihfKSxmLmFib3J0QWN0aXZlPSEwLGYubm9EYXRhPSEwLGYudGFibGVUaXRsZT0iIixmLnRhYmxlRGlzYWJsZT0hMH0pKTpmLnRhYmxlRGlzYWJsZT0hMCxHbi52aWV3ZXIubGlicmFyeT1m'@;
put 'LmxpYixkfHxmLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSFoLmV4cGFuZGVkfSkoKX1zZWxlY3RMaWJUYWJsZShhLGQpeyJQbGVhc2Ugc2VsZWN0IHRhYmxlIiE9PWE/KHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLmxpYlRhYj10aGlzLmxp'@;
put 'YisiLiIrdGhpcy50YWJsZSk6dGhpcy5hY3Rpb25EaXNhYmxlPSEwLEduLnZpZXdlci50YWJsZT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmxpYlRhYil9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7R24udmlld2VyLmZpbHRlci5saWJk'@;
put 'cz0iIixHbi52aWV3ZXIuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEduLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixHbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sR24udmlld2VyLmZpbHRlci5jb2xzPVtdLEduLnZpZXdlci5maWx0ZXIudmFscz1bXX1saWJUYWJBY3RpdmUoYSxkKXty'@;
put 'ZXR1cm4hIXRoaXMubGliVGFiJiZhKyIuIitkPT09dGhpcy5saWJUYWJ9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJpZXMs'@;
put 'dGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksR24udmlld2VyLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJyYXJ5UmVzZXRGaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UucmVzZXRBcnJheUZpbHRlcih0aGlzLmxpYnJhcmllcyl9dmlld0RhdGEo'@;
put 'YSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg7aWYoZC5sb2FkaW5nVGFibGVWaWV3PSEwLHR5cGVvZiBkLmxpYkRhdGFzZXQ+InUiKWg9ZC5saWIrIi4iK2QudGFibGU7ZWxzZSBpZih0eXBlb2YgZC5saWI+InUiJiZ0eXBlb2YgZC50YWJsZT4idSIpe2xldCBUPVtd'@;
put 'O2lmKFQ9ZC5saWJEYXRhc2V0LnNwbGl0KCIuIiksR24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5saWJyYXJpZXM9R24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oVz0+e2QubGlicmFyaWVzPVcuc2FzbGlic30pLmNhdGNoKFc9PntkLmxv'@;
put 'Z2dlclNlcnZpY2UuZXJyb3IoVyl9KSxkLmxpYj1UWzBdLEduLnZpZXdlci5zdGFydHVwU2V0KWQudGFibGVzPUduLnZpZXdlci50YWJsZXM7ZWxzZXtsZXQgVz1kLmxpYnJhcmllcy5maW5kKGllPT5pZS5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt5'@;
put 'aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKGllPT57ZC50YWJsZXM9aWUubXB0YWJsZXMubWFwKGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGUuTUVNTkFNRX0pLFcudGFibGVzPWQudGFibGVzLEduLnZpZXdlci5saWJyYXJpZXM9ZC5saWJyYXJpZXMsR24udmll'@;
put 'd2VyLnRhYmxlcz1kLnRhYmxlcyxHbi52aWV3ZXIuc3RhcnR1cFNldD0hMH0pLmNhdGNoKGllPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKGllKX0pfWQudGFibGU9VFsxXSxkLnRhYmxlRmxhZz0hMSxoPWQubGliRGF0YXNldCxkLmxpYlRhYj1ofWVsc2UgR24udmlld2VyLnN0YXJ0dXBTZXQ/'@;
put 'ZC5saWJyYXJpZXM9R24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oVD0+e2QubGlicmFyaWVzPVQuc2FzbGlic30pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCl9KSx0eXBlb2YgZC50YWJsZTwidSImJihHbi52aWV3'@;
put 'ZXIuc3RhcnR1cFNldD9kLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oVD0+e2QudGFibGVzPVQubXB0YWJsZXMubWFwKGZ1bmN0aW9uKFcpe3JldHVybiBXLk1FTU5BTUV9KX0pLmNhdGNoKFQ9PntkLmxvZ2dl'@;
put 'clNlcnZpY2UuZXJyb3IoVCksZC5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSksZC50YWJsZUZsYWc9ITEsaD1kLmxpYisiLiIrZC50YWJsZSxkLnRhYmxlVGl0bGU9aCxkLmxpYlRhYj1oKTtkLnJvdXRlci51cmwuc3Bs'@;
put 'aXQoIi8iKS5sZW5ndGg+MyYmaCYmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGgsYSkudGhlbihUPT57aWYoVC5xdWVyeS5sZW5ndGg+MCYmInZpZXciPT09R24ucm9vdFBhcmFtJiYwPT09R24udmlld2VyLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEduLnZpZXdlci5maWx0'@;
put 'ZXIucXVlcnk9ZC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShULnF1ZXJ5KSxHbi52aWV3ZXIuZmlsdGVyLmxpYmRzPWQucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxkLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJ2aWV3ZXIiLFQuY29scykpLGQu'@;
put 'YWJvcnRBY3RpdmU9ITEsZC5maWx0ZXJDb2xzPVQuY29scyx6eihkLmZpbHRlckNvbHMsW10sVC4kdmlld2RhdGEpLGQubnVtYmVyT2ZSb3dzPVQuc2FzcGFyYW1zWzBdLk5PQlMsZC5oZWFkZXJQa3M9VC5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksIlNBUzkiPT09ZC5zYXNq'@;
put 'c0NvbmZpZy5zZXJ2ZXJUeXBlKXtsZXQgRWU9VC5zYXNwYXJhbXNbMF0uVEFCTEVVUkk7RWUmJkVlLmxlbmd0aD4wJiYoZC50YWJsZXVyaT1FZSl9ZC5ob3RUYWJsZS5kYXRhPVQudmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9VC4kdmlld2RhdGEsZC5kc21ldGE9VC5kc21ldGEsZC5zZXREU05v'@;
put 'dGUoKSxkLnF1ZXJ5VGV4dD1ULnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVDtsZXQgVz1bXSxpZT1bXTtmb3IobGV0IEVlIGluIFQudmlld2RhdGFbMF0pRWUmJmllLnB1c2goRWUpO2ZvcihsZXQgRWU9MDtFZTxpZS5sZW5ndGg7RWUrKylXLnB1c2goe2RhdGE6aWVbRWVdfSk7ZC5ob3RUYWJs'@;
put 'ZS5jb2xIZWFkZXJzPWllLGQuaG90VGFibGUuY29sdW1ucz1XLGQuaG90VGFibGUuY2VsbHM9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgd2U9W107d2U9aC5zcGxpdCgiLiIpLGQubGliPXdlWzBdLGQudGFibGU9d2VbMV0sMD09PWQuaG90VGFi'@;
put 'bGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihUKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkp'@;
put 'LGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsXz1kLmxpYnJhcmllcy5m'@;
put 'aW5kKFQ9PlQuTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7Xz8oR24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmllc1NlYXJj'@;
put 'aCksZC5saWJyYXJ5T25DbGljayhkLmxpYixfLCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJyYXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNl'@;
put 'cnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNldFRpbWVvdXQoKCk9PntsZXQgVD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90'@;
put 'SW5zdGFuY2UiKTtUJiYoVC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFc9PntzZXRUaW1lb3V0KCgpPT57bGV0IGllPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7aWUmJmllLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xp'@;
put 'Y2tMaXN0ZW5lcj0hMCl9LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIr'@;
put 'dGhpcy50YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W10saD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5z'@;
put 'dWJtaXRMb2FkaW5nPSExKTt7bGV0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuInZpZXciPT09R24ucm9vdFBhcmFtJiYoR24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEduLnZpZXdlci5maWx0ZXIucXVlcnk9W10sR24udmlld2VyLmZp'@;
put 'bHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IF89MDtfPGYubGVuZ3RoO18rKyl7Y29uc3QgVD1mW19dLmVsZW1lbnRzO2Q9VC5maWx0ZXIoZnVu'@;
put 'Y3Rpb24oVyl7cmV0dXJuIG51bGw9PT1XLnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChUKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmls'@;
put 'dGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChUPT57Y29uc3QgVz17ZmlsdGVyQ2xhdXNlczpbXX07VC5lbGVtZW50cy5mb3JFYWNoKGllPT57Vy5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZSkpfSksVy5jbGF1c2VMb2dpYz1U'@;
put 'LmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KTtjb25zdCBfPWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsXykudGhl'@;
put 'bihUPT57YS5xdWVyeVRleHQ9VC5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IFc9VC5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK1ddLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKFcp'@;
put 'LGEuZmlsdGVyPSExfSkuY2F0Y2goVD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihUKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9c2V0RFNOb3RlKCl7Y29uc3QgYT10aGlzLmRzbWV0YS5maW5kKGY9'@;
put 'PiJOT1RFUyI9PT1mLk5BTUUpLGQ9dGhpcy5kc21ldGEuZmluZChmPT4iRERfTE9OR0RFU0MiPT09Zi5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX1NIT1JUREVTQyI9PT1mLk5BTUUpO3RoaXMuZHNOb3RlPWEmJmEuVkFMVUU/YS5WQUxVRTpkJiZkLlZBTFVFP2QuVkFMVUU6aCYm'@;
put 'aC5WQUxVRT9oLlZBTFVFOiIifXNldHVwSG90KCl7c2V0VGltZW91dCgoKT0+eyF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5ob3RJ'@;
put 'bnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE+NTAwPzUwMDphfSxhZnRlckdldENvbEhlYWRlcjooYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3RJbnN0'@;
put 'YW5jZT8uY29sVG9Qcm9wKGEpO2gmJnRoaXMuaGVhZGVyUGtzLmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIil9fSkpfSwxZTMpfWxvYWRXaXRoUGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3dpdGNo'@;
put 'RmxhZz0hMCxhLnRhYmxlVGl0bGU9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNl'@;
put 'dD1oLGguaW5jbHVkZXMoIi4iKXx8KGEubGliPWgpLHlpZWxkIGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBh'@;
put 'cmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnN3aXRjaEZsYWc9ITEsYS5saWJyYXJpZXNMb2FkaW5nPSEwLEduLnZpZXdlci5zdGFydHVwU2V0P3NldFRpbWVvdXQoKCk9PnthLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzLGEubGlicmFyaWVzU2Vh'@;
put 'cmNoPUduLnZpZXdlci5saWJyYXJpZXNTZWFyY2gsYS5saWI9R24udmlld2VyLmxpYnJhcnksYS5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0sMTAwKTooYS5ub0RhdGFS'@;
put 'ZXFFcnI9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9PnthLmxpYnJhcmllcz1kLnNhc2xpYnMsR24udmlld2VyLmxpYnJhcmllcz1hLmxpYnJhcmllcyxHbi52aWV3ZXIuc3RhcnR1cFNldD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2'@;
put 'aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5ub0RhdGFSZXFFcnI9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgYT10'@;
put 'aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmhvdFRhYmxlLmRhdGEubGVuZ3RoPjAmJihhLnRhYmxlRmxhZz0hMCksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9PnthLndoZXJlU3RyaW5nPWQuc3RyaW5nLGEuY2xhdXNlcz1kLm9iaixhLmxpYmRzPWQu'@;
put 'bGliZHN9KSx0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1Ij9hLmxvYWRXaXRoUGFyYW1ldGVycygpOmEubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQoYmQp'@;
put 'LHR0KG9hKSx0dChEcyksdHQoV2wpLHR0KHZsKSx0dCh3MCksdHQoVGMpLHR0KEpkKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8od250LDUpLDImYSl7bGV0IGg7c2ko'@;
put 'aD1haSgpKSYmKGQucXVlcnlGaWx0ZXJDb21wTGlzdD1oKX19LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5NSx2YXJzOjI5LGNvbnN0czpbWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJd'@;
put 'LFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsiY2xhc3Mi'@;
put 'LCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0s'@;
put 'WzEsIm1vZGFsLWJvZHkiXSxbMSwiY2xyLWNvbC1tZC02Il0sWzEsImRvd25sb2FkLXNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsidmFsdWUiLCJDU1YiXSxbInZhbHVlIiwiU0FTIl0sWyJ2YWx1ZSIsIlBHU1FMX0RETCJdLFsidmFsdWUi'@;
put 'LCJTQVNfRERMIl0sWyJ2YWx1ZSIsIlRTUUxfRERMIl0sWyJ2YWx1ZSIsIkVYQ0VMIl0sWyJ2YWx1ZSIsIk1BUktET1dOIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0'@;
put 'IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJpZCIsImNsaWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJ3ZWItcXVlcnkiXSxbMSwicm93Il0sWzEsImNsci1jb2wtbGctMTIiLCJjbHItY29sLW1kLTEyIiwiY2xyLWNvbC1zbS0xMiIsImNsci1jb2wteHMtMTIiXSxb'@;
put 'MSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImJ0bi1ncm91cCJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQi'@;
put 'XSxbMSwiY2FyZC1ibG9jayIsIndvcmQtYnJlYWstYWxsIl0sWyJyb3dzIiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9ubHkiLCIiLDEsIndlYi1xdWVyeS10ZXh0Iiwidy0xMDAiLDMsInZhbHVlIiwiZm9jdXMiXSxbImNsaUNvbW1hbmRJbnB1dCIsIiJdLFsxLCJjYXJk'@;
put 'LWZvb3RlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywibmd4Q2xpcGJvYXJkIiwiY2xpY2siXSxbImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9w'@;
put 'ZW5DaGFuZ2UiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImJ0bi1zbSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0'@;
put 'bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsNCwibmdJZiJdLFszLCJvcGVuIiwiZHNtZXRhIiwib3BlbkNoYW5n'@;
put 'ZSJdLFszLCJ2aWV3Ym94TW9kYWwiLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRl'@;
put 'ciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xp'@;
put 'Y2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xy'@;
put 'TG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRl'@;
put 'Iiwib2ZmIiwzLCJpZCIsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImNsci10cmVlbm9kZS1saW5rIiwzLCJkYy1sb2NrZWQtY29udHJvbCIsInRhYmxl'@;
put 'LWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFw'@;
put 'ZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInctMTAwIiwidGV4dC1jZW50'@;
put 'ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1s'@;
put 'YWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJt'@;
put 'b2RhbC1iYWNrZHJvcCJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwiaGVhZGVyLXJvdyBjbHItcm93IGp1c3RpZnktY29udGVudC1iZXR3'@;
put 'ZWVuIGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIG5vRGF0YSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItZmxleC0xIiw0LCJuZ0lmIl0sWyJj'@;
put 'bGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJmb3JtLWJsb2NrIiwidGFibGUtc2Vh'@;
put 'cmNoLXdyYXBwZXIiLCJzdyIsImNsci1jb2wtbWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywidHlw'@;
put 'ZSIsImtleXVwLmVudGVyIl0sWyJzZWFyY2hFbCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVy'@;
put 'aWNfY2hlY2siLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsxLCJ2aWV3ZXJUaXRsZSIsImNsci1mbGV4LWNvbHVtbiIsImQtZmxleCIsImNsci1mbGV4LXNtLXJv'@;
put 'dyIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMs'@;
put 'ImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyBtdC01IG1yLTUiLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbMSwi'@;
put 'b3B0aW9ucy1jb2wiLCJjbHItY29sLW1kIl0sWyJjbGFzcyIsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0s'@;
put 'WzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtdC01IiwibXItNSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbInNoYXBlIiwicmVmcmVz'@;
put 'aCIsMSwicmVmcmVzaC10YWJsZSIsMywiY2xpY2siXSxbMSwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiZmlsdGVyU2lk'@;
put 'ZSJdLFsic2hhcGUiLCJjb2ciLCJzaXplIiwiMTUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJidG4iLCJidG4tc20iLCJi'@;
put 'dG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1zdWNjZXNzLW91dGxpbmUiLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0'@;
put 'dG9uIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImRvd25sb2FkLWNsb3VkIl0sWyJzaGFwZSIsInBlbmNpbCJd'@;
put 'LFsic2hhcGUiLCJzd2l0Y2giXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9y'@;
put 'LWdyYXkiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJib3JkZXItYm90dG9tLWRpdmlkZXIiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInctMTAwIiwibS0wIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byJdLFsxLCJ2aWV3ZXJUaXRsZSIsIm10LTE3Il0sWzEsInRleHQt'@;
put 'Y2VudGVyIiwibXQtMTAiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibGliaW5mbyBtLTAgY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJuby10YWJsZS1zZWxl'@;
put 'Y3RlZC1pbmZvIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic2hhcGUiLCJpbmZvLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsImxpYmluZm8iLCJtLTAiLCJjbHItcm93Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG0tMCB3LTEwMCIsNCwi'@;
put 'bmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCIsInctMTAwIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLCJtLTAiLDMsImNsaWNrIl0sWzEsIm0tMCJdLFsxLCJtLTAiLCJmb250LWJvbGQiXSxbMSwiY2FyZC1ibG9jayIsIm5vRGF0YSJdLFsic2hhcGUiLCJ3YXJu'@;
put 'aW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlD'@;
put 'b2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93'@;
put 'cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihtZSgwLCJhcHAtc2lkZWJh'@;
put 'ciIsMCkseHQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIGQubG9hZE1vcmVMaWJyYXJpZXMoKX0pLEplKDEsQ250LDIsMCwiZGl2IiwxKSxtZSgyLCJjbHItdHJlZSIpLEplKDMseG50LDYsMywiY2xyLXRyZWUtbm9kZSIsMiksSmUoNCxIbnQsMiwxLCJuZy1jb250YWlu'@;
put 'ZXIiLDMpLHllKCksSmUoNSxObnQsMywwLCJkaXYiLDQpLHllKCksbWUoNiwiZGl2Iiw1KSxKZSg3LFZudCwxNCwwLCJkaXYiLDYpLEplKDgsQm50LDEsMCwiZGl2Iiw3KSxtZSg5LCJjbHItbW9kYWwiLDgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9w'@;
put 'ZW5Eb3dubG9hZD1mfSksbWUoMTAsImgzIiw5KSxOZSgxMSwiRG93bmxvYWQiKSx5ZSgpLG1lKDEyLCJkaXYiLDEwKSgxMywiZGl2IiwxMSkoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxMikoMTUsImxhYmVsIiksTmUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IikseWUo'@;
put 'KSxtZSgxNywic2VsZWN0IiwxMykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRvd25sb2FkRm9ybWF0PWZ9KSxtZSgxOCwib3B0aW9uIiwxNCksTmUoMTksIkNTViIpLHllKCksbWUoMjAsIm9wdGlvbiIsMTUpLE5lKDIxLCJEYXRhbGluZXMgKGNhcmRzIGZpbGUp'@;
put 'IikseWUoKSxtZSgyMiwib3B0aW9uIiwxNiksTmUoMjMsIkRETCAoUEdTUUwgRmxhdm91cikiKSx5ZSgpLG1lKDI0LCJvcHRpb24iLDE3KSxOZSgyNSwiRERMIChTQVMgRmxhdm91cikiKSx5ZSgpLG1lKDI2LCJvcHRpb24iLDE4KSxOZSgyNywiRERMIChUU1FMIEZsYXZvdXIpIikseWUoKSxt'@;
put 'ZSgyOCwib3B0aW9uIiwxOSksTmUoMjksIkV4Y2VsICgueGxzeCkiKSx5ZSgpLG1lKDMwLCJvcHRpb24iLDIwKSxOZSgzMSwiTWFya2Rvd24gKC5tZCkiKSx5ZSgpKCkoKSgpKCksbWUoMzIsImRpdiIsMjEpKDMzLCJidXR0b24iLDIyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'b3BlbkRvd25sb2FkPSExfSksTmUoMzQsIiBDYW5jZWwgIikseWUoKSxtZSgzNSwiYnV0dG9uIiwyMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9kLmRvd25sb2FkRERMKCk6ZC5kb3dubG9hZERhdGEoKX0pLE5lKDM2LCIg'@;
put 'T2sgIikseWUoKSgpKCksbWUoMzcsImNsci1tb2RhbCIsOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQud2ViUXVlcnk9Zn0pLG1lKDM4LCJoMyIsOSksTmUoMzksIiBXZWIgUXVlcnkgVVJMICIpLHllKCksbWUoNDAsImRpdiIsMjQpKDQxLCJkaXYiLDI1'@;
put 'KSg0MiwiZGl2IiwyNikoNDMsImRpdiIsMjcpKDQ0LCJkaXYiLDI4KSg0NSwic3BhbiIpLE5lKDQ2LCJDb3B5IHRoZSBiZWxvdyBpbnRvIHlvdXIgcHJlZmVycmVkIGNsaWVudCB0b29sOiIpLHllKCksbWUoNDcsImRpdiIsMjkpKDQ4LCJkaXYiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGQud2ViUXVlcnlUYWI9ITAsZC5zaG93V2ViUXVlcnkoKX0pLHF0KDQ5LCJpbnB1dCIsMzEpLG1lKDUwLCJsYWJlbCIpLE5lKDUxLCJUQUIiKSx5ZSgpKCksbWUoNTIsImRpdiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC53ZWJRdWVyeVRhYj0hMSxkLnNob3dX'@;
put 'ZWJRdWVyeSgpfSkscXQoNTMsImlucHV0IiwzMSksbWUoNTQsImxhYmVsIiksTmUoNTUsIkNTViIpLHllKCkoKSgpKCksbWUoNTYsImRpdiIsMzIpKDU3LCJ0ZXh0YXJlYSIsMzMsMzQpLHh0KCJmb2N1cyIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DbGlDb21tYW5kRm9jdXMoZil9KSxOZSg1'@;
put 'OSwiICAgICAgICAgICAgICAiKSx5ZSgpKCksbWUoNjAsImRpdiIsMzUpKDYxLCJidXR0b24iLDM2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY29weVRvQ2xpcCgpfSksTmUoNjIsIiBjb3B5IHRvIGNsaXBib2FyZCAiKSx5ZSgpKCkoKSgpKCkoKSxtZSg2MywiZGl2IiwyMSko'@;
put 'NjQsImJ1dHRvbiIsMjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC53ZWJRdWVyeT0hMX0pLE5lKDY1LCIgY2xvc2UgIikseWUoKSgpKCksbWUoNjYsImNsci1tb2RhbCIsMzcpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmZpbHRlcj1mfSks'@;
put 'bWUoNjcsImgzIiw5KSxOZSg2OCwiIEZpbHRlciBmb3IgdGFibGU6IiksbWUoNjksInNwYW4iKSxOZSg3MCkseWUoKSgpLG1lKDcxLCJkaXYiLDEwKSxKZSg3MixqbnQsMiwwLCJhcHAtcXVlcnkiLDM4KSx5ZSgpLG1lKDczLCJkaXYiLDIxKSg3NCwiYnV0dG9uIiwzOSkseHQoImNsaWNrIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBkLnJlc2V0RmlsdGVyKCl9KSxOZSg3NSwiIHJlc2V0IGZpbHRlciAiKSx5ZSgpLG1lKDc2LCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZmlsdGVyPSExLGQucmVtb3ZlUXVlcnkoKX0pLE5lKDc3LCIgQ2FuY2VsICIpLHllKCks'@;
put 'bWUoNzgsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZW5kQ2xhdXNlKCl9KSxOZSg3OSwiIE9rICIpLHllKCkoKSgpLG1lKDgwLCJjbHItbW9kYWwiLDQyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5xdWVyeUVycj1m'@;
put 'fSksbWUoODEsImgzIiw0MyksTmUoODIsIkVycm9yIikseWUoKSxtZSg4MywiZGl2IiwxMCkoODQsInAiKSxOZSg4NSkseWUoKSgpLG1lKDg2LCJkaXYiLDIxKSg4NywiYnV0dG9uIiw0NCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnF1ZXJ5RXJyPSExfSksTmUoODgsIiBDYW5j'@;
put 'ZWwgIikseWUoKSxtZSg4OSwiYnV0dG9uIiw0NSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnF1ZXJ5RXJyPSExfSksTmUoOTAsIiBPayAiKSx5ZSgpKCkoKSxKZSg5MSx6bnQsNiwwLCJkaXYiLDQ2KSxKZSg5MixNcnQsOCw2LCJkaXYiLDQ3KSx5ZSgpLG1lKDkzLCJhcHAtZGF0'@;
put 'YXNldC1pbmZvIiw0OCkseHQoIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmRhdGFzZXRJbmZvPWZ9KSx5ZSgpLG1lKDk0LCJhcHAtdmlld2JveGVzIiw0OSkseHQoInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmlld2JveE9wZW49Zn0pLHllKCkp'@;
put 'LDImYSl7Y29uc3QgaD0kaSg1OCk7Q2UoMSksUmUoIm5nSWYiLGQubGlicmFyaWVzTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQubGlicmFyaWVzKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5saWJyYXJpZXMpLENlKDEpLFJlKCJuZ0lmIixkLmxpYnJhcmllc1BhZ2luZyksQ2UoMiksUmUoIm5n'@;
put 'SWYiLGQubnVsbFZhcmlhYmxlcyksQ2UoMSksUmUoIm5nSWYiLGQubnVsbFZhcmlhYmxlcyksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuRG93bmxvYWQpKCJjbHJNb2RhbFNpemUiLCJtZCIpLENlKDgpLFJlKCJuZ01vZGVsIixkLmRvd25sb2FkRm9ybWF0KSxDZSgxOCksUmUoImlk'@;
put 'IixkLnRhYmxlVGl0bGUpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQud2ViUXVlcnkpKCJjbHJNb2RhbFNpemUiLCJsZyIpLENlKDEyKSxSZSgiY2hlY2tlZCIsZC53ZWJRdWVyeVRhYiksQ2UoNCksUmUoImNoZWNrZWQiLCFkLndlYlF1ZXJ5VGFiKSxDZSg0KSxFYygidmFsdWUiLGQud2Vi'@;
put 'UXVlcnlUZXh0KSxDZSg0KSxSZSgibmd4Q2xpcGJvYXJkIixoKSxDZSg1KSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbHRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0KSxwcigiICIsZC5saWJUYWIsIiAiKSxDZSgyKSxSZSgibmdJZiIsZC5maWx0'@;
put 'ZXIpLENlKDYpLFJlKCJjbHJMb2FkaW5nIixkLnN1Ym1pdExvYWRpbmcpLENlKDIpLFJlKCJjbHJNb2RhbE9wZW4iLGQucXVlcnlFcnIpLENlKDUpLG9yKGQucXVlcnlFcnJNZXNzYWdlKSxDZSg2KSxSZSgibmdJZiIsZC5sb2FkaW5nVGFibGVWaWV3KSxDZSgxKSxSZSgibmdJZiIsIWQubG9h'@;
put 'ZGluZ1RhYmxlVmlldyksQ2UoMSksUmUoIm9wZW4iLGQuZGF0YXNldEluZm8pKCJkc21ldGEiLGQuZHNtZXRhKSxDZSgxKSxSZSgidmlld2JveE1vZGFsIixkLnZpZXdib3hPcGVuKX19LGRlcGVuZGVuY2llczpbeHNlLHhzLFppLG5kLHRoLHZudCxDcCxsMSxjMSxXYSxTMCxNMCxCcyx3cCxP'@;
put 'cyxyMixkZCxnMSxEcCxrYSxvdSxzdSxadSxjMixkaCxVcyxYSixEMCxEOCxUMCxmMSxOOCxIOCxOZixhZyxsZyxLOCxqYixVYix6Yix1Mix4eSxuMyxBc2UsakUsY1UsVTcsRHNlLHludF0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlz'@;
put 'cGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1jbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2ti'@;
put 'b3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6'@;
put 'Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAub3B0aW9u'@;
put 'cy1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnN3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MXJlbSAwcmVtIC41cmVtIDFyZW19LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweDtiYWNrZ3Jv'@;
put 'dW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweH0uZmlsdGVyU2lkZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoyNnB4O21hcmdpbi1ib3R0b206MTlweH0ub3B0aW9ucy1kcm9wZG93bltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAgIGNsci1pY29ue21hcmdpbi1yaWdodDo1cHh9LnZpZXdlclRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9LmRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE4MHB4O21hcmdpbi10b3A6LTE4'@;
put 'cHg7cGFkZGluZzowfS5kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5idG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uY2FyZEZsZXhbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu'@;
put 'dGVyfS5ub0RhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDoxfS5maWx0ZXJCdG5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6ZmxleC1lbmR9LmVkaXRCdG5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uYnRuVmlld1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAhaW1wb3J0YW50fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVd'@;
put 'e3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmRvd25sb2FkLXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldCFpbXBvcnRhbnR9LnJlZnJlc2gtdGFibGVbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH0ubGliaW5mb1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDIwcHg7b3ZlcmZsb3c6YXV0b31ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2Jh'@;
put 'Y2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX0ubm8tdGFibGUtc2VsZWN0ZWQtaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS53ZWItcXVlcnlbX25nY29u'@;
put 'dGVudC0lQ09NUCVde21heC1oZWlnaHQ6MzV2aH0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWItcXVlcnktdGV4dFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDoxMDBweDttYXgtaGVpZ2h0OjEwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4'@;
put 'KXsuZmlsdGVyQnRuW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmVkaXRCdG5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpey5yb3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDowcmVt'@;
put 'O21hcmdpbi1sZWZ0OjByZW19fSJdfSksY30pKCk7Y29uc3QgeHJ0PVt7cGF0aDoiIixjb21wb25lbnQ6YXR0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86ImRhdGEifSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OkhUfSx7cGF0aDoiZGF0YSIsY29tcG9u'@;
put 'ZW50OkhUfSx7cGF0aDoiZGF0YS86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OkhUfSx7cGF0aDoiZGF0YS86bGliTWVtIixjb21wb25lbnQ6SFR9LHtwYXRoOiJsaW5lYWdlIixjb21wb25lbnQ6RlR9LHtwYXRoOiJsaW5lYWdlLzp0YWJsZWlkLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpG'@;
put 'VH0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbiIsY29tcG9uZW50OkZUfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uLzpyZWxvYWQiLGNvbXBvbmVudDpGVH0se3BhdGg6InZpeWEtYXBpLWV4cGxvcmVyIixjb21wb25lbnQ6cG50fSx7'@;
put 'cGF0aDoibWV0YWRhdGEiLGNvbXBvbmVudDpvWn0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQiLGNvbXBvbmVudDpvWn0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQvOm9iamVjdE5hbWUiLGNvbXBvbmVudDpvWn0se3BhdGg6InVzZXJuYXYiLGNvbXBvbmVudDpz'@;
put 'dHQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZ3JvdXBzIn0se3BhdGg6InVzZXJzIixjb21wb25lbnQ6Q2xlfSx7cGF0aDoidXNlcnMvOnVyaSIsY29tcG9uZW50OkNsZX0se3BhdGg6Imdyb3VwcyIsY29tcG9uZW50OmVhZX0se3BhdGg6Imdyb3Vw'@;
put 'cy86dXJpIixjb21wb25lbnQ6ZWFlfSx7cGF0aDoicm9sZXMiLGNvbXBvbmVudDp3bGV9LHtwYXRoOiJyb2xlcy86dXJpIixjb21wb25lbnQ6d2xlfV19XX1dO2xldCBFcnQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQoeHJ0KSxkY119KSxjfSkoKSxrcnQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbRnNlLG9vLEVydCxfbnQsJGwsX3UsXzcuZm9yUm9vdCgpLEI3LFY3LHR3LGZVLEMyXX0pLGN9KSgpO2NvbnN0IFRydD1kYy5mb3JSb290KFt7cGF0aDoiIixyZWRpcmVjdFRvOiJob21lIixwYXRoTWF0Y2g6ImZ1bGwifSx7cGF0aDoidmll'@;
put 'dyIsbG9hZENoaWxkcmVuOigpPT5rcnR9LHtwYXRoOiJyZXZpZXciLGNvbXBvbmVudDpCR2UsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidG9hcHByb3ZlIn0se3BhdGg6IiIsbG9hZENoaWxkcmVuOigpPT5WR2V9XX0se3BhdGg6ImxpY2Vuc2luZyIs'@;
put 'bG9hZENoaWxkcmVuOigpPT5zV2V9LHtwYXRoOiJob21lIixsb2FkQ2hpbGRyZW46KCk9PmhVfSx7cGF0aDoiZWRpdG9yIixsb2FkQ2hpbGRyZW46KCk9PnZZZX0se3BhdGg6InN0YWdlIixsb2FkQ2hpbGRyZW46KCk9PkdHZX0se3BhdGg6InN5c3RlbSIsbG9hZENoaWxkcmVuOigpPT5zJGV9'@;
put 'LHtwYXRoOiJkZXBsb3kiLGxvYWRDaGlsZHJlbjooKT0+VEVlfSx7cGF0aDoiKioiLGNvbXBvbmVudDpZeGV9XSx7dXNlSGFzaDohMH0pO2xldCBEcnQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZp'@;
put 'KHt0eXBlOmMsYm9vdHN0cmFwOltxU2VdfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbVXgsYmQscFVdLGltcG9ydHM6W1p4ZSxFRywkbCxENmUsRmhlLFRydCxWNyxfdSxCNyxoVSx0dyxDMixXdHRdfSksY30pKCk7TDFlKCkuYm9vdHN0cmFwTW9kdWxlKERydCl9LDU2MzIxOihhdCxJ'@;
put 'ZSxGKT0+e3ZhciBhZT1GKDE3MTU2KS5kZWZhdWx0O3NlbGYsYXQuZXhwb3J0cz0oKCk9Pnt2YXIgeD17MjY1NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihrKXtyZXR1cm4gayYmay5fX2VzTW9kdWxlP2s6'@;
put 'e2RlZmF1bHQ6a319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRlY29kZVRva2VuPU8uaGFzVG9rZW5FeHBpcmVkPU8uaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1PLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7dmFyIEs9eihSKDYyNDUp'@;
put 'KTtmdW5jdGlvbiBJKGssRSl7cmV0dXJuKDAsSy5kZWZhdWx0KShrKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD1FfU8uaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uKGssRSl7cmV0dXJuIHZvaWQgMD09PUUmJihFPTM2MDApLCFrfHxJKGssRSl9LE8uaXNSZWZyZXNoVG9r'@;
put 'ZW5FeHBpcmluZz1mdW5jdGlvbihrLEUpe3JldHVybiB2b2lkIDA9PT1FJiYoRT0zMCksIWt8fEkoayxFKX0sTy5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24oayl7cmV0dXJuIWt8fEkoaywwKX0sTy5kZWNvZGVUb2tlbj1mdW5jdGlvbihrKXt2YXIgRTt0cnl7RT0oMCxLLmRlZmF1bHQpKGsp'@;
put 'fWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gRX19LDY3OTk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9p'@;
put 'ZCAwPT09aiYmKGo9RSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVu'@;
put 'Y3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMjY1NiksTyl9LDMyNTk6ZnVu'@;
put 'Y3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gUj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih6KXtmb3IodmFyIEssST0xLGs9YXJndW1lbnRzLmxlbmd0aDtJPGs7SSsrKWZvcih2YXIgRSBpbiBLPWFyZ3VtZW50c1tJ'@;
put 'XSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSyxFKSYmKHpbRV09S1tFXSk7cmV0dXJuIHp9LFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wcmVmaXhNZXNzYWdlPXZvaWQgMCxP'@;
put 'LnByZWZpeE1lc3NhZ2U9ZnVuY3Rpb24oeixLKXtpZigib2JqZWN0Ij09dHlwZW9mIHopaWYoei5oYXNPd25Qcm9wZXJ0eSgibWVzc2FnZSIpKXoubWVzc2FnZT1LK3oubWVzc2FnZTtlbHNle2lmKCF6Lmhhc093blByb3BlcnR5KCJib2R5IikpcmV0dXJuIFIoUih7fSx6KSx7bWVzc2FnZTpL'@;
put 'fSk7aWYoIm9iamVjdCI9PXR5cGVvZiB6LmJvZHkmJih6Lm1lc3NhZ2U9ei5ib2R5Lm1lc3NhZ2U/Syt6LmJvZHkubWVzc2FnZTpLKSwic3RyaW5nIj09dHlwZW9mIHouYm9keSl7dmFyIEk9dm9pZCAwO3RyeXtJPUpTT04ucGFyc2Uoei5ib2R5KX1jYXRjaHtyZXR1cm4gei5tZXNzYWdlPUss'@;
put 'en1yZXR1cm4gSS5tZXNzYWdlPUkubWVzc2FnZT9LK0kubWVzc2FnZTpLLHouYm9keT1JLHp9fXJldHVybiJzdHJpbmciPT10eXBlb2YgeiYmKHo9Syt6KSx6fX0sOTc3ODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2Jq'@;
put 'ZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19'@;
put 'KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2'@;
put 'YWx1ZTohMH0pLEsoUigzMjU5KSxPKSxLKFIoMTA2NCksTyl9LDEwNjQ6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihWLEIpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1p'@;
put 'bnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihZLFgpe1kuX19wcm90b19fPVh9fHxmdW5jdGlvbihZLFgpe2Zvcih2YXIgVSBpbiBYKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYLFUpJiYoWVtVXT1YW1VdKX0pKFYsQil9LGZ1bmN0aW9uKFYsQil7aWYoImZ1bmN0aW9u'@;
put 'IiE9dHlwZW9mIEImJm51bGwhPT1CKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoQikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gWSgpe3RoaXMuY29uc3RydWN0b3I9Vn16KFYsQiksVi5wcm90b3R5cGU9bnVsbD09'@;
put 'PUI/T2JqZWN0LmNyZWF0ZShCKTooWS5wcm90b3R5cGU9Qi5wcm90b3R5cGUsbmV3IFkpfSksST10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oVixCKXt2YXIgWT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZWW1N5bWJvbC5pdGVyYXRvcl07aWYoIVkpcmV0dXJuIFY7dmFyIFgsVSxx'@;
put 'PVkuY2FsbChWKSxlZT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09Qnx8Qi0tID4wKSYmIShYPXEubmV4dCgpKS5kb25lOyllZS5wdXNoKFgudmFsdWUpfWNhdGNoKHRlKXtVPXtlcnJvcjp0ZX19ZmluYWxseXt0cnl7WCYmIVguZG9uZSYmKFk9cS5yZXR1cm4pJiZZLmNhbGwocSl9ZmluYWxseXtp'@;
put 'ZihVKXRocm93IFUuZXJyb3J9fXJldHVybiBlZX0saz10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKFYsQixZKXtpZihZfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIFgsVT0wLHE9Qi5sZW5ndGg7VTxxO1UrKykhWCYmVSBpbiBCfHwoWHx8KFg9QXJyYXkucHJvdG90'@;
put 'eXBlLnNsaWNlLmNhbGwoQiwwLFUpKSxYW1VdPUJbVV0pO3JldHVybiBWLmNvbmNhdChYfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChCKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNlcnZlclR5cGVFcnJvcj12b2lkIDA7dmFyIEU9'@;
put 'UigzOTAwKSxqPWZ1bmN0aW9uKFYpe2Z1bmN0aW9uIEIoWSl7dm9pZCAwPT09WSYmKFk9W10pO3ZhciBYPXRoaXMsVT0oWT1rKFtdLEkobmV3IFNldChZKSksITEpKS5sZW5ndGg/WS5qb2luKCIsICIpLnRyaW0oKTpbRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsRS5TZXJ2ZXJUeXBlLlNhczksRS5T'@;
put 'ZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTtyZXR1cm4gVT1VLnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLChYPVYuY2FsbCh0aGlzLCJJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBvcHRpb24iLmNvbmNhdCgxIT09WS5sZW5ndGg/InMiOiIiLCIgIikuY29u'@;
put 'Y2F0KDEhPT1ZLmxlbmd0aD8iYXJlIjoiaXMiLCIgIikuY29uY2F0KFUpKXx8dGhpcykubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoWCxCLnByb3RvdHlwZSksWH1yZXR1cm4gSyhCLFYpLEJ9KEVycm9yKTtPLlNlcnZlclR5cGVFcnJvcj1qfSwzOTA2OmZ1'@;
put 'bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXt0ZShj'@;
put 'ZSl9fWZ1bmN0aW9uIHNlKHVlKXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2YXIgY2U7dWUuZG9uZT9lZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVu'@;
put 'KG9lLHNlKX1oZSgocT1xLmFwcGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWSxYKXt2YXIgVSxxLGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVlWzFdO3JldHVybiBlZVsxXX0sdHJ5'@;
put 'czpbXSxvcHM6W119O3JldHVybiB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih0ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlvbiBzZShoZSl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChlZT1xLnJldHVybikmJmVl'@;
put 'LmNhbGwocSksMCk6cS5uZXh0KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBlZTtzd2l0Y2gocT0wLGVlJiYoY2U9WzImY2VbMF0sZWUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIG9lLmxhYmVsKysse3ZhbHVlOmNl'@;
put 'WzFdLGRvbmU6ITF9O2Nhc2UgNTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVbZWUubGVuZ3RoLTFdKXx8NiE9PWNl'@;
put 'WzBdJiYyIT09Y2VbMF0pKXtvZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNdKSl7b2UubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0sZWU9Y2U7YnJlYWt9aWYoZWUmJm9l'@;
put 'LmxhYmVsPGVlWzJdKXtvZS5sYWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVlPTB9aWYoNSZjZVswXSl0aHJvdyBj'@;
put 'ZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUsdWVdKX19fSxJPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihZLFgpe3ZhciBVPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJllbU3ltYm9sLml0ZXJhdG9yXTtpZighVSlyZXR1cm4gWTt2YXIg'@;
put 'cSxlZSx0ZT1VLmNhbGwoWSksb2U9W107dHJ5e2Zvcig7KHZvaWQgMD09PVh8fFgtLSA+MCkmJiEocT10ZS5uZXh0KCkpLmRvbmU7KW9lLnB1c2gocS52YWx1ZSl9Y2F0Y2goc2Upe2VlPXtlcnJvcjpzZX19ZmluYWxseXt0cnl7cSYmIXEuZG9uZSYmKFU9dGUucmV0dXJuKSYmVS5jYWxsKHRl'@;
put 'KX1maW5hbGx5e2lmKGVlKXRocm93IGVlLmVycm9yfX1yZXR1cm4gb2V9LGs9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihZLFgsVSl7aWYoVXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBxLGVlPTAsdGU9WC5sZW5ndGg7ZWU8dGU7ZWUrKykhcSYmZWUgaW4gWHx8'@;
put 'KHF8fChxPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFgsMCxlZSkpLHFbZWVdPVhbZWVdKTtyZXR1cm4gWS5jb25jYXQocXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWCkpfSxFPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihZKXtyZXR1cm4gWSYmWS5fX2Vz'@;
put 'TW9kdWxlP1k6e2RlZmF1bHQ6WX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnVwZGF0ZUNzdj1PLmNyZWF0ZUNzdj1PLnJlYWRDc3Y9dm9pZCAwO3ZhciBqPVIoMTU1OSksVj1FKFIoNzU2NSkpO08ucmVhZENzdj1mdW5jdGlvbihZKXtyZXR1'@;
put 'cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxqLnJlYWRGaWxlKShZKV07Y2FzZSAxOnJldHVyblsyLFguc2VudCgpLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlv'@;
put 'bihVKXtyZXR1cm4gVS5sZW5ndGh9KS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIFUuc3BsaXQoIiwiKX0pXX19KX0pfSxPLmNyZWF0ZUNzdj1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9u'@;
put 'KGVlKXtzd2l0Y2goZWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT0oMCxWLmRlZmF1bHQpKFgse2hlYWRlcjoxPT09WC5sZW5ndGgsY29sdW1uczpVfSksWzQsKDAsai5jcmVhdGVGaWxlKShZLHEpXTtjYXNlIDE6cmV0dXJuIGVlLnNlbnQoKSxbMl19fSl9KX0sTy51cGRhdGVDc3Y9ZnVuY3Rp'@;
put 'b24oWSxYLFUscSl7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2U7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsQihZLFgsVSxxKV07Y2FzZSAxOnJldHVybiBlZT1zZS5zZW50KCks'@;
put 'cSYmKHRlPTA9PT1lZS5sZW5ndGg/MTplZS5sZW5ndGgsKG9lPVUuZmluZEluZGV4KGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGU9PT1xfSkpPi0xP1guc3BsaWNlKG9lLDAsdGUpOihVLnNwbGljZSgwLDAscSksWC5zcGxpY2UoMCwwLHRlKSkpLGVlLnB1c2goWCksWzQsKDAsTy5jcmVhdGVDc3Yp'@;
put 'KFksZWUsVSldO2Nhc2UgMjpyZXR1cm4gc2Uuc2VudCgpLFsyXX19KX0pfTt2YXIgQj1mdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZSxzZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFi'@;
put 'ZWwpe2Nhc2UgMDppZihYLmxlbmd0aCE9PVUubGVuZ3RoKXtpZihYLmxlbmd0aD5VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBtb3JlIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKTtpZighcXx8WC5sZW5ndGgrMSE9PVUubGVuZ3RoKXRocm93'@;
put 'IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIGxlc3MgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpfWVsc2UgaWYocSYmVS5pbmNsdWRlcyhxKSl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBtb3JlIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVt'@;
put 'bnMiKTtyZXR1cm5bNCwoMCxPLnJlYWRDc3YpKFkpLmNhdGNoKGZ1bmN0aW9uKHVlKXtyZXR1cm5bXX0pXTtjYXNlIDE6aWYoZWU9aGUuc2VudCgpLHRlPWVlWzBdKXtpZihVLmxlbmd0aD50ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUg'@;
put 'Z3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoVS5sZW5ndGg8dGUubGVuZ3RoKXtpZighcXx8VS5sZW5ndGgrMSE9PXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4'@;
put 'aXN0aW5nIGNvbHVtbnMiKTtpZihvZT10ZS5maW5kSW5kZXgoZnVuY3Rpb24odWUpe3JldHVybiB1ZT09PXF9KSxzZT1rKFtdLEkoVSksITEpLCEob2U+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoc2Uu'@;
put 'c3BsaWNlKG9lLDAscSksSlNPTi5zdHJpbmdpZnkoVSkhPT1KU09OLnN0cmluZ2lmeShzZSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5naWZ5KFUpIT09SlNPTi5zdHJpbmdpZnko'@;
put 'dGUpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYocSYmIVUuaW5jbHVkZXMocSkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcgaWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm5bMixlZV19fSl9'@;
put 'KX19LDE1NTk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oRyxiLEQsSCl7dm9pZCAwPT09SCYmKEg9RCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEcsSCx7ZW51bWVyYWJsZTohMCxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYltEXX19KX06ZnVuY3Rpb24oRyxiLEQsSCl7dm9pZCAwPT09SCYmKEg9RCksR1tIXT1iW0RdfSksSz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oRyxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRywi'@;
put 'ZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6Yn0pfTpmdW5jdGlvbihHLGIpe0cuZGVmYXVsdD1ifSksST10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oRyl7aWYoRyYmRy5fX2VzTW9kdWxlKXJldHVybiBHO3ZhciBiPXt9O2lmKG51bGwhPUcpZm9yKHZhciBEIGluIEcp'@;
put 'ImRlZmF1bHQiIT09RCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsRCkmJnooYixHLEQpO3JldHVybiBLKGIsRyksYn0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRyxiLEQsSCl7cmV0dXJuIG5ldyhEfHwoRD1Qcm9taXNlKSkoZnVuY3Rpb24oTixn'@;
put 'KXtmdW5jdGlvbiBDKHApe3RyeXt2KEgubmV4dChwKSl9Y2F0Y2godyl7Zyh3KX19ZnVuY3Rpb24gUyhwKXt0cnl7dihILnRocm93KHApKX1jYXRjaCh3KXtnKHcpfX1mdW5jdGlvbiB2KHApe3ZhciB3O3AuZG9uZT9OKHAudmFsdWUpOih3PXAudmFsdWUsdyBpbnN0YW5jZW9mIEQ/dzpuZXcg'@;
put 'RChmdW5jdGlvbihKKXtKKHcpfSkpLnRoZW4oQyxTKX12KChIPUguYXBwbHkoRyxifHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihHLGIpe3ZhciBELEgsTixnLEM9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmTlswXSl0aHJvdyBOWzFd'@;
put 'O3JldHVybiBOWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGc9e25leHQ6UygwKSx0aHJvdzpTKDEpLHJldHVybjpTKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZ1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxnO2Z1bmN0aW9uIFModil7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKHApe3JldHVybiBmdW5jdGlvbih3KXtpZihEKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0M7KXRyeXtpZihEPTEsSCYmKE49MiZ3WzBdP0gucmV0dXJuOndbMF0/SC50aHJvd3x8KChOPUgucmV0dXJuKSYm'@;
put 'Ti5jYWxsKEgpLDApOkgubmV4dCkmJiEoTj1OLmNhbGwoSCx3WzFdKSkuZG9uZSlyZXR1cm4gTjtzd2l0Y2goSD0wLE4mJih3PVsyJndbMF0sTi52YWx1ZV0pLHdbMF0pe2Nhc2UgMDpjYXNlIDE6Tj13O2JyZWFrO2Nhc2UgNDpyZXR1cm4gQy5sYWJlbCsrLHt2YWx1ZTp3WzFdLGRvbmU6ITF9'@;
put 'O2Nhc2UgNTpDLmxhYmVsKyssSD13WzFdLHc9WzBdO2NvbnRpbnVlO2Nhc2UgNzp3PUMub3BzLnBvcCgpLEMudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKE49KE49Qy50cnlzKS5sZW5ndGg+MCYmTltOLmxlbmd0aC0xXSl8fDYhPT13WzBdJiYyIT09d1swXSkpe0M9MDtjb250'@;
put 'aW51ZX1pZigzPT09d1swXSYmKCFOfHx3WzFdPk5bMF0mJndbMV08TlszXSkpe0MubGFiZWw9d1sxXTticmVha31pZig2PT09d1swXSYmQy5sYWJlbDxOWzFdKXtDLmxhYmVsPU5bMV0sTj13O2JyZWFrfWlmKE4mJkMubGFiZWw8TlsyXSl7Qy5sYWJlbD1OWzJdLEMub3BzLnB1c2godyk7YnJl'@;
put 'YWt9TlsyXSYmQy5vcHMucG9wKCksQy50cnlzLnBvcCgpO2NvbnRpbnVlfXc9Yi5jYWxsKEcsQyl9Y2F0Y2goSil7dz1bNixKXSxIPTB9ZmluYWxseXtEPU49MH1pZig1JndbMF0pdGhyb3cgd1sxXTtyZXR1cm57dmFsdWU6d1swXT93WzFdOnZvaWQgMCxkb25lOiEwfX0oW3YscF0pfX19LGo9'@;
put 'dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKEcsYil7dmFyIEQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmR1tTeW1ib2wuaXRlcmF0b3JdO2lmKCFEKXJldHVybiBHO3ZhciBILE4sZz1ELmNhbGwoRyksQz1bXTt0cnl7Zm9yKDsodm9pZCAwPT09Ynx8Yi0tID4wKSYmIShIPWcubmV4'@;
put 'dCgpKS5kb25lOylDLnB1c2goSC52YWx1ZSl9Y2F0Y2goUyl7Tj17ZXJyb3I6U319ZmluYWxseXt0cnl7SCYmIUguZG9uZSYmKEQ9Zy5yZXR1cm4pJiZELmNhbGwoZyl9ZmluYWxseXtpZihOKXRocm93IE4uZXJyb3J9fXJldHVybiBDfSxWPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVu'@;
put 'Y3Rpb24oRyxiLEQpe2lmKER8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgSCxOPTAsZz1iLmxlbmd0aDtOPGc7TisrKSFIJiZOIGluIGJ8fChIfHwoSD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiLDAsTikpLEhbTl09YltOXSk7cmV0dXJuIEcuY29uY2F0KEh8fEFycmF5LnBy'@;
put 'b3RvdHlwZS5zbGljZS5jYWxsKGIpKX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRyl7cmV0dXJuIEcmJkcuX19lc01vZHVsZT9HOntkZWZhdWx0Okd9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc1Rlc3RGaWxl'@;
put 'PU8udGVzdEZpbGVSZWdFeHA9Ty5jcmVhdGVSZWFkU3RyZWFtPU8uY3JlYXRlV3JpdGVTdHJlYW09Ty5nZXRSZWFsUGF0aD1PLmJhc2U2NEVuY29kZUZpbGU9Ty5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9Ty5wYXRoU2VwRXNjYXBlZD1PLmNvcHk9Ty5tb3ZlRmlsZT1PLmdldFJlbGF0aXZlUGF0'@;
put 'aD1PLnVuaWZ5RmlsZVBhdGg9Ty5kZWxldGVGb2xkZXI9Ty5kZWxldGVGaWxlPU8uY3JlYXRlRmlsZT1PLmNyZWF0ZUZvbGRlcj1PLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1PLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U2FzRmlsZXNJbkZvbGRlcj1PLmxpc3RJbmlG'@;
put 'aWxlc0luRm9sZGVyPU8ubGlzdEZpbGVzSW5Gb2xkZXI9Ty5yZWFkRmlsZUJpbmFyeT1PLnJlYWRGaWxlPU8uaXNGb2xkZXI9Ty5mb2xkZXJFeGlzdHM9Ty5maWxlRXhpc3RzPXZvaWQgMDt2YXIgWT1CKFIoNTY3NCkpLFg9QihSKDk4NCkpLFU9QihSKDI1MjApKSxxPVIoNjI2NiksZWU9SShS'@;
put 'KDI5NzUpKTtmdW5jdGlvbiB0ZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5hY2Nlc3MoRyxZLmRlZmF1bHQuY29uc3RhbnRzLkZfT0spLnRoZW4oZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KV19KX0pfWZ1bmN0aW9uIG9lKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcp'@;
put 'XX0pfSl9ZnVuY3Rpb24gc2UoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihHLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihmdW5jdGlvbihEKXtyZXR1'@;
put 'cm4gRC5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuIUguaXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gSC5uYW1lfSl9KV19KX0pfWZ1bmN0aW9uIGhlKEcsYixEKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9ITApLHZvaWQgMD09PUQmJihEPVtdKSxrKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihOKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihHLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihmdW5jdGlvbihnKXtyZXR1cm4gayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXt2YXIgQyxTPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOnJldHVybiBiJiZnLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcC5pc0RpcmVjdG9yeSgpfSkubGVuZ3RoPyhDPVtdLFs0LCgwLHEuYXN5bmNGb3JFYWNoKShnLmZpbHRlcihm'@;
put 'dW5jdGlvbihwKXtyZXR1cm4gcC5pc0RpcmVjdG9yeSgpfSksZnVuY3Rpb24ocCl7cmV0dXJuIGsoUyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHcsSixuZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGRlKXtzd2l0Y2goZGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRC5pbmNsdWRlcyh3'@;
put 'PXAubmFtZSk/WzMsMl06KEo9VS5kZWZhdWx0LmpvaW4oRyx3KSxuZT1bVihbXSxqKEMpLCExKV0sWzQsaGUoSixiLEQpXSk7Y2FzZSAxOkM9Vi5hcHBseSh2b2lkIDAsbmUuY29uY2F0KFtqLmFwcGx5KHZvaWQgMCxbZGUuc2VudCgpLm1hcChmdW5jdGlvbihmZSl7cmV0dXJuIFUuZGVmYXVs'@;
put 'dC5qb2luKHcsZmUpfSldKSwhMV0pKSxkZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0pXSk6WzMsMl07Y2FzZSAxOnJldHVybiB2LnNlbnQoKSxbMixWKFYoW10saihnLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4hcC5pc0RpcmVjdG9yeSgpfSkubWFwKGZ1bmN0aW9uKHApe3Jl'@;
put 'dHVybiBwLm5hbWV9KSksITEpLGooQyksITEpXTtjYXNlIDI6cmV0dXJuWzIsZy5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHAubmFtZX0pXX19KX0pfSldfSl9KX1mdW5jdGlvbiB1ZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0'@;
put 'aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihHLHtyZWN1cnNpdmU6ITB9KV19KX0pfWZ1bmN0aW9uIGNlKEcsYixEKXt2b2lkIDA9PT1iJiYoYj1VLmRlZmF1bHQuc2VwKSx2b2lkIDA9PT1EJiYoRD0iLyIpO3ZhciBIPXt1bml4OiIvIix3aW46IlxcIn0sTj1PYmpl'@;
put 'Y3Qua2V5cyhIKS5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBIW0NdPT09Yn0pO2lmKE4pe3ZhciBnPUhbT2JqZWN0LmtleXMoSCkuZmluZChmdW5jdGlvbihDKXtyZXR1cm4gQyE9PU59KV07cmV0dXJuIE49SFtOXSxHLnNwbGl0KGcpLmpvaW4oTil9cmV0dXJuIEcuc3BsaXQoRCkuam9pbihi'@;
put 'KX1PLmZpbGVFeGlzdHM9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKEcsWS5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX0sTy5mb2xkZXJFeGlzdHM9dGUsTy5pc0ZvbGRlcj1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsy'@;
put 'LFkuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChHKS50aGVuKGZ1bmN0aW9uKEQpe3JldHVybiBELmlzRGlyZWN0b3J5KCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX0sTy5yZWFkRmlsZT1mdW5jdGlvbihHLGIpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0idXRmOCIpLGsodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUoRyxiKV19KX0pfSxPLnJlYWRGaWxlQmluYXJ5PW9lLE8ubGlzdEZpbGVzSW5Gb2xkZXI9c2UsTy5saXN0SW5pRmlsZXNJbkZvbGRl'@;
put 'cj1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsc2UoRyldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0'@;
put 'dXJuIEQuZW5kc1dpdGgoIi5pbmkiKX0pXX19KX0pfSxPLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9ITEpLHZvaWQgMD09PUQmJihEPVtdKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVu'@;
put 'Y3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxoZShHLGIsRCldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKS5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIGcuZW5kc1dpdGgoIi5zYXMiKX0pXX19KX0pfSxPLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9ZnVuY3Rpb24o'@;
put 'Ryl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihHLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihmdW5jdGlvbihEKXtyZXR1cm4gRC5maWx0ZXIoZnVuY3Rp'@;
put 'b24oSCl7cmV0dXJuIEguaXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihIKXtyZXR1cm4gSC5uYW1lfSl9KV19KX0pfSxPLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1oZSxPLmNyZWF0ZUZvbGRlcj11ZSxPLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBrKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE47cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybihHPWNlKEcpKS5zcGxpdChVLmRlZmF1bHQuc2VwKS5sZW5ndGg+MT8oKEg9Ry5zcGxpdChVLmRlZmF1bHQuc2VwKSkucG9wKCks'@;
put 'WzQsdGUoTj1ILmpvaW4oVS5kZWZhdWx0LnNlcCkpXSk6WzMsM107Y2FzZSAxOnJldHVybiBnLnNlbnQoKT9bMywzXTpbNCx1ZShOKV07Y2FzZSAyOmcuc2VudCgpLGcubGFiZWw9MztjYXNlIDM6cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLndyaXRlRmlsZShHLGIsRCldfX0pfSl9LE8u'@;
put 'ZGVsZXRlRmlsZT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5yZW1vdmUoRyldfSl9KX0sTy5kZWxldGVGb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixuZXcgUHJvbWlzZShmdW5jdGlvbihELEgpeygwLFguZGVmYXVsdCkoRyx7fSxmdW5jdGlvbihOKXtyZXR1cm4gTj9IKE4pOkQoKX0pfSldfSl9KX0sTy51bmlmeUZpbGVQYXRoPWNlLE8u'@;
put 'Z2V0UmVsYXRpdmVQYXRoPWZ1bmN0aW9uKEcsYil7dmFyIEQ9Ry5zcGxpdChVLmRlZmF1bHQuc2VwKSxIPWIuc3BsaXQoVS5kZWZhdWx0LnNlcCksTj1bXSxnPVtdO0QuZm9yRWFjaChmdW5jdGlvbihwLHcpe3ZvaWQgMCE9PUhbd10mJkRbd109PT1IW3ddP04ucHVzaChwKTpwJiZnLnB1c2go'@;
put 'cCl9KTt2YXIgQz1OLmpvaW4oVS5kZWZhdWx0LnNlcCksUz1uZXcgUmVnRXhwKCJeIi5jb25jYXQoVS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIikpKSx2PW5ldyBSZWdFeHAoIiIuY29uY2F0KFUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLCIkIikpO3JldHVy'@;
put 'bihnLmxlbmd0aD8iLi4iLmNvbmNhdChVLmRlZmF1bHQuc2VwKS5yZXBlYXQoZy5sZW5ndGgpOiIuIi5jb25jYXQoVS5kZWZhdWx0LnNlcCkpK2IucmVwbGFjZShDLCIiKS5yZXBsYWNlKFMsIiIpLnJlcGxhY2UodiwiIil9LE8ubW92ZUZpbGU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gayh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZW5hbWUoRyxiKV19KX0pfSxPLmNvcHk9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'RSh0aGlzLGZ1bmN0aW9uKEQpe3JldHVyblsyLFkuZGVmYXVsdC5jb3B5KEcsYildfSl9KX0sTy5wYXRoU2VwRXNjYXBlZD1VLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSxPLmJhc2U2NEVuY29kZUltYWdlRmlsZT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLG9lKEcpLnRoZW4oZnVuY3Rpb24oRCl7dmFyIEg9VS5kZWZhdWx0LmV4dG5hbWUoRykuc3Vic3RyKDEpfHwicG5nIjtyZXR1cm4ic3ZnIj09PUgmJihIPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIitI'@;
put 'KyI7YmFzZTY0LCIrRC50b1N0cmluZygiYmFzZTY0Iil9KV19KX0pfSxPLmJhc2U2NEVuY29kZUZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMu'@;
put 'cmVhZEZpbGUoRyx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KV19KX0pfSxPLmdldFJlYWxQYXRoPWZ1bmN0aW9uKEcpe3JldHVybiBZLmRlZmF1bHQucmVhbHBhdGhTeW5jKEcpfSxPLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxlZS5maWxlRXhpc3RzKEcpXTtjYXNlIDE6cmV0dXJuIGIuc2VudCgpP1syLFkuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShHLHtmbGFnczoiYSJ9KV06WzQsZWUuY3JlYXRlRmls'@;
put 'ZShHLCIiKV07Y2FzZSAyOnJldHVybiBiLnNlbnQoKSxbMixZLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0oRyx7ZmxhZ3M6ImEifSldfX0pfSl9LE8uY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbihHKXtyZXR1cm4gayh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBF'@;
put 'KHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0oRyldfSl9KX0sTy50ZXN0RmlsZVJlZ0V4cD0vXC50ZXN0XC4oXGQrXC4pP3NhcyQvaSxPLmlzVGVzdEZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIE8udGVzdEZpbGVSZWdFeHAudGVzdChHKX19LDU2'@;
put 'MjY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oayl7cmV0dXJuIGsmJmsuX19lc01vZHVsZT9rOntkZWZhdWx0Omt9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Ty5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO3ZhciBLPXooUigyNTIwKSksST16KFIoNzQzNSkpO08uZ2V0QWJzb2x1dGVQYXRoPWZ1bmN0aW9uKGssRSl7cmV0dXJuIEsuZGVmYXVsdC5pc0Fic29sdXRlKGspfHwvXn4vLmV4ZWMoayk/Sy5kZWZhdWx0Lm5vcm1hbGl6ZShrLnJlcGxhY2UoL15+'@;
put 'LyxJLmRlZmF1bHQuaG9tZWRpcigpKSk6Sy5kZWZhdWx0LmpvaW4oRSxrKX19LDI5NzU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oRSxqLFYsQil7dm9pZCAwPT09QiYmKEI9Viks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEUsQix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4galtWXX19KX06ZnVuY3Rpb24oRSxqLFYsQil7dm9pZCAwPT09QiYmKEI9ViksRVtCXT1qW1ZdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oRSxqKXtmb3Io'@;
put 'dmFyIFYgaW4gRSkiZGVmYXVsdCI9PT1WfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKXx8eihqLEUsVil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnJlYWRDc3Y9Ty5jcmVhdGVDc3Y9Ty51cGRhdGVDc3Y9Ty50'@;
put 'ZXN0RmlsZVJlZ0V4cD1PLmlzVGVzdEZpbGU9Ty5nZXRSZWFsUGF0aD1PLmJhc2U2NEVuY29kZUZpbGU9Ty5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9Ty5jb3B5PU8ucGF0aFNlcEVzY2FwZWQ9Ty5tb3ZlRmlsZT1PLnVuaWZ5RmlsZVBhdGg9Ty5nZXRSZWxhdGl2ZVBhdGg9Ty5kZWxldGVGb2xk'@;
put 'ZXI9Ty5kZWxldGVGaWxlPU8uY3JlYXRlV3JpdGVTdHJlYW09Ty5jcmVhdGVSZWFkU3RyZWFtPU8uY3JlYXRlRm9sZGVyPU8uY3JlYXRlRmlsZT1PLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1PLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9Ty5saXN0U2FzRmlsZXNJbkZvbGRlcj1P'@;
put 'Lmxpc3RJbmlGaWxlc0luRm9sZGVyPU8ubGlzdEZpbGVzSW5Gb2xkZXI9Ty5yZWFkRmlsZUJpbmFyeT1PLnJlYWRGaWxlPU8uaXNGb2xkZXI9Ty5mb2xkZXJFeGlzdHM9Ty5maWxlRXhpc3RzPXZvaWQgMDt2YXIgST1SKDE1NTkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJmaWxlRXhpc3Rz'@;
put 'Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5maWxlRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJmb2xkZXJFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmZvbGRlckV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiaXNGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJyZWFkRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucmVhZEZpbGV9fSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KE8sInJlYWRGaWxlQmluYXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWFkRmlsZUJpbmFyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdEZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBJLmxpc3RGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0SW5pRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdEluaUZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxp'@;
put 'c3RTYXNGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0U2FzRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEkubGlzdFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku'@;
put 'Y3JlYXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVSZWFkU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVSZWFkU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVhdGVXcml0ZVN0cmVhbSIse2Vu'@;
put 'dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlV3JpdGVTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImRlbGV0ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmRlbGV0ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE8sImRlbGV0ZUZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZGVsZXRlRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZXRSZWxhdGl2ZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdldFJlbGF0'@;
put 'aXZlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidW5pZnlGaWxlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5pZnlGaWxlUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibW92ZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j'@;
put 'dGlvbigpe3JldHVybiBJLm1vdmVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJwYXRoU2VwRXNjYXBlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucGF0aFNlcEVzY2FwZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNvcHkiLHtlbnVtZXJh'@;
put 'YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNvcHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImJhc2U2NEVuY29kZUltYWdlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlfX0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJiYXNlNjRFbmNvZGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5iYXNlNjRFbmNvZGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZXRSZWFsUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku'@;
put 'Z2V0UmVhbFBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzVGVzdEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzVGVzdEZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInRlc3RGaWxlUmVnRXhwIix7ZW51bWVyYWJsZTohMCxnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gSS50ZXN0RmlsZVJlZ0V4cH19KTt2YXIgaz1SKDM5MDYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1cGRhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLnVwZGF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywi'@;
put 'Y3JlYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay5jcmVhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInJlYWRDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLnJlYWRDc3Z9fSksSyhSKDU2MjYpLE8pfSwyNzc3'@;
put 'OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ubmV3TGluZT1PLmNhcGl0YWxpemVGaXJzdENoYXI9Ty5zYW5pdGl6ZVNwZWNpYWxDaGFycz1PLnBhZFdpdGhOdW1iZXI9dm9pZCAwO3ZhciB6PVIoNTMwNik7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInBhZFdpdGhOdW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LnBhZFdpdGhOdW1iZXJ9fSk7dmFyIEs9Uig5Mjc1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywic2FuaXRpemVTcGVjaWFsQ2hhcnMiLHtlbnVtZXJh'@;
put 'YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLLnNhbml0aXplU3BlY2lhbENoYXJzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjYXBpdGFsaXplRmlyc3RDaGFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5jYXBpdGFsaXplRmlyc3RDaGFyfX0pO3Zh'@;
put 'ciBJPVIoMTYyOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIm5ld0xpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLm5ld0xpbmV9fSl9LDUzMDY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1'@;
put 'ZTohMH0pLE8ucGFkV2l0aE51bWJlcj12b2lkIDAsTy5wYWRXaXRoTnVtYmVyPWZ1bmN0aW9uKFIseil7cmV0dXJuIHZvaWQgMD09PXomJih6PTApLFI+OT9SOiIiLmNvbmNhdCh6KS5jb25jYXQoUil9fSwxNjI4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5uZXdMaW5lPXZvaWQgMCxPLm5ld0xpbmU9ZnVuY3Rpb24oKXtyZXR1cm4id2luMzIiPT09ei5wbGF0Zm9ybT8iXFxyXFxuIjoiXFxuIn19LDkyNzU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY2FwaXRhbGl6ZUZpcnN0Q2hhcj1PLnNhbml0aXplU3BlY2lhbENoYXJzPXZvaWQgMCxPLnNhbml0aXplU3BlY2lhbENoYXJzPWZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1tcdTAwMWJcdTAwOWJdW1soKSM7P10qKD86'@;
put 'WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csIiIpfSxPLmNhcGl0YWxpemVGaXJzdENoYXI9ZnVuY3Rpb24oUil7cmV0dXJuIFIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUi5zbGljZSgxKX19LDY0Njc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJkkuX19lc01vZHVsZT9JOntkZWZhdWx0Okl9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc1NwZWNpYWxNaXNzaW5nPU8uY2hvaWNl'@;
put 'VmFsaWRhdG9yPU8uY29uZmlybWF0aW9uVmFsaWRhdG9yPU8udXJsVmFsaWRhdG9yPXZvaWQgMDt2YXIgSz16KFIoNDgxKSk7Ty51cmxWYWxpZGF0b3I9ZnVuY3Rpb24oSSxrKXtyZXR1cm4hIUsuZGVmYXVsdC5pc0h0dHBVcmkoSSl8fCEhSy5kZWZhdWx0LmlzSHR0cHNVcmkoSSl8fCIiPT09'@;
put 'SXx8a30sTy5jb25maXJtYXRpb25WYWxpZGF0b3I9ZnVuY3Rpb24oSSl7cmV0dXJuITA9PT1JfHwhMT09PUl9LE8uY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKEksayxFKXtyZXR1cm4gST4wJiZJPD1rfHxFfSxPLmlzU3BlY2lhbE1pc3Npbmc9ZnVuY3Rpb24oSSl7cmV0dXJuKCJzdHJpbmci'@;
put 'IT10eXBlb2YgSXx8IUkuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChJKX19LDc3NTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0'@;
put 'ZVRpbWVzdGFtcD1PLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO3ZhciB6PVIoMTMwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LnRpbWVzdGFtcFRvWVlZ'@;
put 'WU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdlbmVyYXRlVGltZXN0YW1wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5nZW5lcmF0ZVRpbWVzdGFtcH19KX0sMTMwMjooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdlbmVyYXRlVGltZXN0YW1wPU8udGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7dmFyIHo9UigyNzc3KTtPLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9ZnVuY3Rpb24oSyl7dm9pZCAwPT09SyYmKEs9RGF0ZS5ub3co'@;
put 'KSk7dmFyIEk9bmV3IERhdGUoSyk7cmV0dXJuW0kuZ2V0RnVsbFllYXIoKSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0TW9udGgoKSsxKSwoMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0RGF0ZSgpKV0uam9pbigiLyIpKyIgIitbKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldEhvdXJzKCkpLCgw'@;
put 'LHoucGFkV2l0aE51bWJlcikoSS5nZXRNaW51dGVzKCkpLCgwLHoucGFkV2l0aE51bWJlcikoSS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iil9LE8uZ2VuZXJhdGVUaW1lc3RhbXA9ZnVuY3Rpb24oSyxJKXt2b2lkIDA9PT1LJiYoSz0iIik7dmFyIGs9bmV3IERhdGUsRT1bay5nZXRVVENGdWxs'@;
put 'WWVhcigpLGsuZ2V0VVRDTW9udGgoKSsxLGsuZ2V0VVRDRGF0ZSgpLGsuZ2V0VVRDSG91cnMoKSxrLmdldFVUQ01pbnV0ZXMoKSxrLmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIEU9RS5tYXAoZnVuY3Rpb24oail7cmV0dXJuKDAsei5wYWRXaXRoTnVtYmVyKShqKX0pLEkmJksmJkk8RS5sZW5n'@;
put 'dGgmJkk+PTAmJkUuc3BsaWNlKEksMCxLKSxFLmpvaW4oST8iIjpLKX19LDgyMzk6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQ29uZmlnVHlwZXM9dm9pZCAwLChSPU8uQ29uZmlnVHlwZXN8fChP'@;
put 'LkNvbmZpZ1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIixSLlNlcnZpY2U9InNlcnZpY2VDb25maWciLFIuSm9iPSJqb2JDb25maWciLFIuVGVzdD0idGVzdENvbmZpZyIsUi5Eb2M9ImRvY0NvbmZpZyIsUi5EZXBsb3k9ImRlcGxveUNvbmZpZyIsUi5TdHJlYW09InN0cmVhbUNvbmZp'@;
put 'ZyIsUi5BdXRoPSJhdXRoQ29uZmlnIn0sMjQyNzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSl9LDM2OTI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2OTM5OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxPLk1lbWJlclR5cGU9dm9pZCAwLChSPU8uTWVtYmVyVHlwZXx8KE8uTWVtYmVyVHlwZT17fSkpLnNlcnZpY2U9InNlcnZpY2UiLFIuZmlsZT0iZmlsZSIsUi5mb2xkZXI9ImZvbGRlciJ9LDMzMjc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pfSw1MTY1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzkwMDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwo'@;
put 'T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtb'@;
put 'RV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLEsoUig4MjM5KSxPKSxLKFIoMjQyNyksTyksSyhSKDE4OSksTyksSyhSKDM2OTIpLE8pLEsoUig2OTM5KSxPKSxLKFIoMzMyNyksTyksSyhSKDUxNjUpLE8pLEsoUig0MDY5KSxPKSxLKFIoODkzMiksTyksSyhSKDQpLE8pLEsoUigyMDE1KSxPKSxLKFIoODUxNSksTyks'@;
put 'SyhSKDUzMTMpLE8pLEsoUig4OTc5KSxPKX0sNDA2OTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc01hY3JvVmFycz12b2lkIDAsTy5pc01hY3JvVmFycz1mdW5jdGlvbihSKXtyZXR1cm4gUiYmIm9iamVj'@;
put 'dCI9PXR5cGVvZiBSLm1hY3JvVmFycyYmIUFycmF5LmlzQXJyYXkoUi5tYWNyb1ZhcnMpfX0sODkzMjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTSnNGaWxlVHlwZT12b2lkIDAsKFI9Ty5TQVNKc0ZpbGVUeXBlfHwoTy5TQVNKc0ZpbGVUeXBlPXt9KSkuc2VydmljZT0iU2VydmljZSIsUi5qb2I9IkpvYiIsUi50ZXN0PSJUZXN0IixSLmZpbGU9IkZpbGUi'@;
put 'fSwyMDE1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TZXJ2'@;
put 'ZXJUeXBlPXZvaWQgMCwoUj1PLlNlcnZlclR5cGV8fChPLlNlcnZlclR5cGU9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixSLlNhczk9IlNBUzkiLFIuU2FzanM9IlNBU0pTIn0sNTMxMzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSl9LDg5Nzk6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiB6PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGope2Zvcih2YXIgVixCPTEsWT1hcmd1bWVudHMubGVuZ3RoO0I8WTtCKyspZm9yKHZh'@;
put 'ciBYIGluIFY9YXJndW1lbnRzW0JdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLFgpJiYoaltYXT1WW1hdKTtyZXR1cm4gan0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlRh'@;
put 'cmdldD12b2lkIDA7dmFyIEs9Uig4MjM5KSxJPVIoODUxNSksaz1SKDY3ODEpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBqKFYsQil7dmFyIFk9dGhpczt2b2lkIDA9PT1CJiYoQj17fSksdGhpcy5fc2VydmVyVHlwZT1JLlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz1mdW5jdGlv'@;
put 'bihYLFUpe3JldHVybiB6KHooe30sWS5fY29uZmlnW1hdfHx7fSksVVtYXSl9O3RyeXtpZighVil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz1CLHRoaXMuX25hbWU9KDAsay52YWxpZGF0ZVRh'@;
put 'cmdldE5hbWUpKFYubmFtZSksdGhpcy5fc2VydmVyVXJsPSgwLGsudmFsaWRhdGVTZXJ2ZXJVcmwpKFYuc2VydmVyVXJsKSx0aGlzLl9zZXJ2ZXJUeXBlPSgwLGsudmFsaWRhdGVTZXJ2ZXJUeXBlKShWLnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLGsudmFsaWRhdGVI'@;
put 'dHRwc0FnZW50T3B0aW9ucykoVi5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5fYXBwTG9jPSgwLGsudmFsaWRhdGVBcHBMb2MpKFYuYXBwTG9jKSx0aGlzLl9jb250ZXh0TmFtZT0oMCxrLnZhbGlkYXRlQ29udGV4dE5hbWUpKFYuY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5f'@;
put 'c2VydmVyTmFtZT0oMCxrLnZhbGlkYXRlU2VydmVyTmFtZSkoVi5zZXJ2ZXJOYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3N5bmNGb2xkZXI9KDAsay52YWxpZGF0ZVN5bmNGb2xkZXIpKFYuc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAsay52YWxpZGF0ZVJlcG9zaXRv'@;
put 'cnlOYW1lKShWLnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZlclR5cGUpLFYuZG9jQ29uZmlnJiYodGhpcy5fZG9jQ29uZmlnPSgwLGsudmFsaWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuRG9jLFYpKSksVi5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZp'@;
put 'Zz0oMCxrLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5BdXRoLFYpKSksVi5hdXRoQ29uZmlnU2FzOSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgwLGsudmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoVi5hdXRoQ29uZmlnU2FzOSkpLFYuYnVpbGRDb25m'@;
put 'aWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxrLnZhbGlkYXRlQnVpbGRDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuQnVpbGQsViksdGhpcy5fbmFtZSkpLHRoaXMuX2RlcGxveUNvbmZpZz0oMCxrLnZhbGlkYXRlRGVwbG95Q29uZmlnKShWLmRlcGxveUNvbmZpZz90aGlz'@;
put 'LmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkRlcGxveSxWKTp7ZGVwbG95U2VydmljZVBhY2s6ITAsZGVwbG95U2NyaXB0czpbXX0pLFYuc2VydmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VDb25maWc9KDAsay52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmln'@;
put 'VHlwZXMuU2VydmljZSxWKSkpLFYuam9iQ29uZmlnJiYodGhpcy5fam9iQ29uZmlnPSgwLGsudmFsaWRhdGVKb2JDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuSm9iLFYpKSksVi5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAsay52YWxpZGF0ZVN0cmVh'@;
put 'bUNvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5TdHJlYW0sVikpKSxWLnRlc3RDb25maWcmJih0aGlzLl90ZXN0Q29uZmlnPSgwLGsudmFsaWRhdGVUZXN0Q29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLlRlc3QsVikpKSxWLm1hY3JvRm9sZGVycyYmVi5t'@;
put 'YWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xkZXJzPVYubWFjcm9Gb2xkZXJzKSxWLnByb2dyYW1Gb2xkZXJzJiZWLnByb2dyYW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3Byb2dyYW1Gb2xkZXJzPVYucHJvZ3JhbUZvbGRlcnMpLFYuYmluYXJ5Rm9sZGVycyYmVi5iaW5hcnlG'@;
put 'b2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9Vi5iaW5hcnlGb2xkZXJzKSxWLnN5bmNEaXJlY3RvcmllcyYmVi5zeW5jRGlyZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3luY0RpcmVjdG9yaWVzPSgwLGsudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKFYuc3luY0RpcmVjdG9y'@;
put 'aWVzKSl9Y2F0Y2goWCl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciBwYXJzaW5nIHRhcmdldDogIi5jb25jYXQoWC5tZXNzYWdlKSl9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVy'@;
put 'YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInNlcnZlclVybCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJVcmx9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGoucHJvdG90eXBlLCJzZXJ2ZXJUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJodHRwc0FnZW50T3B0aW9ucyIse2dldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLl9odHRwc0FnZW50T3B0aW9uc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImFwcExvYyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBMb2N9LGVudW1lcmFibGU6ITEsY29u'@;
put 'ZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJkb2NDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlw'@;
put 'ZSwiYXV0aENvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYXV0aENvbmZpZ1NhczkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5fYXV0aENvbmZpZ1Nhczl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJidWlsZENvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWlsZENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFi'@;
put 'bGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImRlcGxveUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBl'@;
put 'LCJzZXJ2aWNlQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZpY2VDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJqb2JDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5fam9iQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic3RyZWFtQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6'@;
put 'ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsIm1hY3JvRm9sZGVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYWNyb0ZvbGRlcnN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJw'@;
put 'cm9ncmFtRm9sZGVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImJpbmFyeUZvbGRlcnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5fYmluYXJ5Rm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImNvbnRleHROYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRleHROYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3Vy'@;
put 'YWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmVyTmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwi'@;
put 'cmVwb3NpdG9yeU5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3NpdG9yeU5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJ0ZXN0Q29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuX3Rlc3RDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzeW5jRm9sZGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw'@;
put 'fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzeW5jRGlyZWN0b3JpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3luY0RpcmVjdG9yaWVzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGoucHJvdG90eXBlLnRvSnNvbj1mdW5jdGlvbihWKXt2'@;
put 'YXIgQixZLFg7dm9pZCAwPT09ViYmKFY9ITApO3ZhciBVPXtuYW1lOnRoaXMubmFtZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNBZ2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9j'@;
put 'Q29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxveUNvbmZpZzp0aGlzLmRlcGxveUNvbmZpZ307cmV0dXJuIShudWxsPT09KEI9dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT1CKSYmQi5sZW5ndGgmJihVLm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KFk9dGhp'@;
put 'cy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09PVkpJiZZLmxlbmd0aCYmKFUucHJvZ3JhbUZvbGRlcnM9dGhpcy5wcm9ncmFtRm9sZGVycyksIShudWxsPT09KFg9dGhpcy5iaW5hcnlGb2xkZXJzKXx8dm9pZCAwPT09WCkmJlgubGVuZ3RoJiYoVS5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5'@;
put 'Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYoVS5hdXRoQ29uZmlnPXRoaXMuYXV0aENvbmZpZyksdGhpcy5hdXRoQ29uZmlnU2FzOSYmKFUuYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29uZmlnU2FzOSksdGhpcy5zeW5jRGlyZWN0b3JpZXM/VS5zeW5jRGlyZWN0b3JpZXM9dGhpcy5zeW5j'@;
put 'RGlyZWN0b3JpZXM6ViYmKFUuc3luY0RpcmVjdG9yaWVzPVtdKSx0aGlzLmJ1aWxkQ29uZmlnP1UuYnVpbGRDb25maWc9dGhpcy5idWlsZENvbmZpZzpWJiYoVS5idWlsZENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsYnVpbGRPdXRwdXRGaWxlTmFtZToiIi5jb25jYXQo'@;
put 'dGhpcy5uYW1lLCIuc2FzIiksYnVpbGRPdXRwdXRGb2xkZXI6InNhc2pzYnVpbGQiLGJ1aWxkUmVzdWx0c0ZvbGRlcjoic2FzanNyZXN1bHRzIixtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNvbmZpZz9VLmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpWJiYoVS5qb2JDb25maWc9e2pvYkZvbGRl'@;
put 'cnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zZXJ2aWNlQ29uZmlnP1Uuc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6ViYmKFUuc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVBy'@;
put 'b2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zdHJlYW1Db25maWc/VS5zdHJlYW1Db25maWc9dGhpcy5zdHJlYW1Db25maWc6ViYmKFUuc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xkZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIs'@;
put 'YXNzZXRQYXRoczpbXX0pLHRoaXMudGVzdENvbmZpZz9VLnRlc3RDb25maWc9dGhpcy50ZXN0Q29uZmlnOlYmJihVLnRlc3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJU'@;
put 'eXBlPT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/VS5jb250ZXh0TmFtZT10aGlzLmNvbnRleHROYW1lOnRoaXMuc2VydmVyVHlwZT09PUkuU2VydmVyVHlwZS5TYXM5JiYoVS5zZXJ2ZXJOYW1lPXRoaXMuc2VydmVyTmFtZSxVLnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLFV9'@;
put 'LGp9KCk7Ty5UYXJnZXQ9RX0sNjc4MTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihrKXtyZXR1cm4gayYmay5fX2VzTW9kdWxlP2s6e2RlZmF1bHQ6a319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2Vz'@;
put 'TW9kdWxlIix7dmFsdWU6ITB9KSxPLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPU8udmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1PLnZhbGlkYXRlU3luY0ZvbGRlcj1PLnZhbGlkYXRlU2VydmVyTmFtZT1PLnZhbGlkYXRlQ29udGV4dE5hbWU9Ty52YWxpZGF0ZVN0cmVhbUNvbmZpZz1PLnZhbGlk'@;
put 'YXRlRGVwbG95Q29uZmlnPU8udmFsaWRhdGVKb2JDb25maWc9Ty52YWxpZGF0ZVRlc3RDb25maWc9Ty52YWxpZGF0ZVNlcnZpY2VDb25maWc9Ty52YWxpZGF0ZUJ1aWxkQ29uZmlnPU8udmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1PLnZhbGlkYXRlQXV0aENvbmZpZz1PLnZhbGlkYXRlRG9jQ29u'@;
put 'ZmlnPU8udmFsaWRhdGVBcHBMb2M9Ty52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPU8udmFsaWRhdGVTZXJ2ZXJVcmw9Ty52YWxpZGF0ZVRhcmdldE5hbWU9Ty52YWxpZGF0ZVNlcnZlclR5cGU9dm9pZCAwO3ZhciBLPXooUig0ODEpKSxJPVIoMzkwMCk7Ty52YWxpZGF0ZVNlcnZlclR5cGU9'@;
put 'ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKGshPT1JLlNlcnZlclR5cGUuU2FzOSYmayE9PUkuU2VydmVyVHlwZS5TYXNWaXlhJiZrIT09SS5TZXJ2ZXJU'@;
put 'eXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogU3VwcG9ydGVkIHZhbHVlcyBmb3IgIGBzZXJ2ZXJUeXBlYCBhcmUgIi5jb25jYXQoSS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsIiwgIikuY29uY2F0KEkuU2VydmVyVHlwZS5TYXM5LCIgYW5kICIpLmNvbmNhdChJ'@;
put 'LlNlcnZlclR5cGUuU2FzanMsIi4iKSk7cmV0dXJuIGt9LE8udmFsaWRhdGVUYXJnZXROYW1lPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoay50cmlt'@;
put 'KCkuaW5jbHVkZXMoIiAiKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSskL2kudGVzdChrKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBj'@;
put 'YW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIGt9LE8udmFsaWRhdGVTZXJ2ZXJVcmw9ZnVuY3Rpb24oayl7aWYobnVsbD09ayYmKGs9IiIpLCIiIT09ayYmIUsuZGVmYXVsdC5pc0h0dHBVcmkoaykmJiFLLmRlZmF1bHQuaXNIdHRw'@;
put 'c1VyaShrKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIFVSTDogYHNlcnZlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIik7cmV0dXJuIGt9LE8u'@;
put 'dmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucz1mdW5jdGlvbihrKXtpZihrKXtpZigib2JqZWN0IiE9dHlwZW9mIGspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRw'@;
put 'c0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1rLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylrLmFsbG93SW5zZWN1cmVSZXF1ZXN0cz0hMTtlbHNlIGlmKCJib29sZWFuIiE9dHlwZW9mIGsuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBz'@;
put 'QWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhIGJvb2xlYW4iKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGsuY2FQYXRoJiYoay5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGsua2V5UGF0aCYmKGsua2V5UGF0'@;
put 'aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2Ygay5jZXJ0UGF0aCYmKGsuY2VydFBhdGg9dm9pZCAwKSxrfX0sTy52YWxpZGF0ZUFwcExvYz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51'@;
put 'bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFrLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGggYSBgL2AuIik7cmV0dXJuIGt9LE8udmFsaWRhdGVEb2NDb25maWc9ZnVuY3Rpb24oayl7aWYoa3x8KGs9'@;
put 'e30pLCJib29sZWFuIiE9dHlwZW9mIGsuZGlzcGxheU1hY3JvQ29yZSYmKGsuZGlzcGxheU1hY3JvQ29yZT12b2lkIDApLCJib29sZWFuIiE9dHlwZW9mIGsuZW5hYmxlTGluZWFnZSYmKGsuZW5hYmxlTGluZWFnZT12b2lkIDApLCJzdHJpbmciIT10eXBlb2Ygay5vdXREaXJlY3RvcnkmJihr'@;
put 'Lm91dERpcmVjdG9yeT12b2lkIDApLCJzdHJpbmciPT10eXBlb2Ygay5kYXRhQ29udHJvbGxlclVybCl7aWYoIiIhPT1rLmRhdGFDb250cm9sbGVyVXJsJiYhSy5kZWZhdWx0LmlzSHR0cFVyaShrLmRhdGFDb250cm9sbGVyVXJsKSYmIUsuZGVmYXVsdC5pc0h0dHBzVXJpKGsuZGF0YUNvbnRy'@;
put 'b2xsZXJVcmwpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBEYXRhIENvbnRyb2xsZXIgVXJsOiBgZGF0YUNvbnRyb2xsZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBv'@;
put 'cnQpLiIpfWVsc2Ugay5kYXRhQ29udHJvbGxlclVybD12b2lkIDA7cmV0dXJuIGt9LE8udmFsaWRhdGVBdXRoQ29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0'@;
put 'dXJuIGt9LE8udmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFrLnVzZXJOYW1lfHwhay5wYXNzd29yZCl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIGt9LE8udmFsaWRhdGVCdWlsZENvbmZpZz1mdW5jdGlvbihrLEUpe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWls'@;
put 'ZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmJ1aWxkUmVzdWx0c0ZvbGRlcnx8KGsuYnVpbGRSZXN1bHRzRm9sZGVyPSJzYXNqc3Jlc3VsdHMiKSxrLmJ1aWxkT3V0cHV0Rm9sZGVyfHwoay5idWlsZE91dHB1dEZvbGRlcj0ic2FzanNidWls'@;
put 'ZCIpLGsuYnVpbGRPdXRwdXRGaWxlTmFtZXx8KGsuYnVpbGRPdXRwdXRGaWxlTmFtZT0iIi5jb25jYXQoRSwiLnNhcyIpKSxrLmluaXRQcm9ncmFtfHwoay5pbml0UHJvZ3JhbT0iIiksay50ZXJtUHJvZ3JhbXx8KGsudGVybVByb2dyYW09IiIpLGsubWFjcm9WYXJzfHwoay5tYWNyb1ZhcnM9'@;
put 'e30pLGt9LE8udmFsaWRhdGVTZXJ2aWNlQ29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuaW5pdFByb2dyYW18fChrLmluaXRQcm9ncmFtPSIi'@;
put 'KSxrLnRlcm1Qcm9ncmFtfHwoay50ZXJtUHJvZ3JhbT0iIiksay5zZXJ2aWNlRm9sZGVyc3x8KGsuc2VydmljZUZvbGRlcnM9W10pLGsubWFjcm9WYXJzfHwoay5tYWNyb1ZhcnM9e30pLGt9LE8udmFsaWRhdGVUZXN0Q29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigi'@;
put 'SW52YWxpZCB0ZXN0IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuaW5pdFByb2dyYW18fChrLmluaXRQcm9ncmFtPSIiKSxrLnRlcm1Qcm9ncmFtfHwoay50ZXJtUHJvZ3JhbT0iIiksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSksay50'@;
put 'ZXN0U2V0VXB8fChrLnRlc3RTZXRVcD0iIiksay50ZXN0VGVhckRvd258fChrLnRlc3RUZWFyRG93bj0iIiksa30sTy52YWxpZGF0ZUpvYkNvbmZpZz1mdW5jdGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgam9iIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1'@;
put 'bmRlZmluZWQuIik7cmV0dXJuIGsuaW5pdFByb2dyYW18fChrLmluaXRQcm9ncmFtPSIiKSxrLnRlcm1Qcm9ncmFtfHwoay50ZXJtUHJvZ3JhbT0iIiksay5qb2JGb2xkZXJzfHwoay5qb2JGb2xkZXJzPVtdKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrfSxPLnZhbGlkYXRlRGVw'@;
put 'bG95Q29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5kZXBsb3lTZXJ2aWNlUGFjaz0hIWsuZGVwbG95U2VydmljZVBhY2ssay5kZXBsb3lTY3Jp'@;
put 'cHRzfHwoay5kZXBsb3lTY3JpcHRzPVtdKSxrfSxPLnZhbGlkYXRlU3RyZWFtQ29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighMCE9PWsuc3RyZWFtV2Vi'@;
put 'JiYhMSE9PWsuc3RyZWFtV2ViKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBjYW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihrLnN0cmVhbVdlYiYmIWsuc3RyZWFtV2ViRm9sZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBz'@;
put 'dHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVyYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gYHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihrLnN0cmVhbVdlYiYmIWsud2ViU291cmNlUGF0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZp'@;
put 'ZzogYHdlYlNvdXJjZVBhdGhgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuc3RyZWFtTG9nbyYmInN0cmluZyIhPXR5cGVvZiBrLnN0cmVhbUxvZ28mJihrLnN0cmVhbUxvZ289dm9pZCAwKSxrLmFzc2V0UGF0aHN8fChrLmFzc2V0UGF0aHM9W10pLGsu'@;
put 'c3RyZWFtU2VydmljZU5hbWV8fChrLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIiksa30sTy52YWxpZGF0ZUNvbnRleHROYW1lPWZ1bmN0aW9uKGssRSl7cmV0dXJuIEUhPT1JLlNlcnZlclR5cGUuU2FzVml5YXx8az9rOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSxP'@;
put 'LnZhbGlkYXRlU2VydmVyTmFtZT1mdW5jdGlvbihrLEUpe3JldHVybiBFIT09SS5TZXJ2ZXJUeXBlLlNhczl8fGs/azoiU0FTQXBwIn0sTy52YWxpZGF0ZVN5bmNGb2xkZXI9ZnVuY3Rpb24oayl7aWYoInN0cmluZyI9PXR5cGVvZiBrJiZrKXJldHVybiBrfSxPLnZhbGlkYXRlUmVwb3NpdG9y'@;
put 'eU5hbWU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gRSE9PUkuU2VydmVyVHlwZS5TYXM5fHxrP2s6IkZvdW5kYXRpb24ifSxPLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzeW5jRGlyZWN0b3JpZXMgY29uZmlnOiBKU09O'@;
put 'IGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5mb3JFYWNoKGZ1bmN0aW9uKEUpe2lmKCFFLmxvY2FsfHwhRS5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcnkgY29uZmlnOiB2YWx1ZXMgb2YgcHJvcGVydHkgJ2xvY2FsJyBhbmQgJ3Jl'@;
put 'bW90ZSBjYW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSksa319LDI5Mjc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihFKXtyZXR1cm4gRSYmRS5fX2VzTW9kdWxlP0U6'@;
put 'e2RlZmF1bHQ6RX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRlY29kZUZyb21CYXNlNjQ9Ty5lbmNvZGVUb0Jhc2U2ND12b2lkIDA7dmFyIEk9SyhSKDU4MzUpKSxrPSJ7c2FzanNfZW5jb2RlZH0iO08uZW5jb2RlVG9CYXNlNjQ9ZnVuY3Rp'@;
put 'b24oRSl7dmFyIGo9SS5kZWZhdWx0LnJhbmRvbUJ5dGVzKDEwMCkudG9TdHJpbmcoImhleCIpLFY9ei5mcm9tKGorRSkudG9TdHJpbmcoImJhc2U2NCIpO3JldHVybiBrK1Z9LE8uZGVjb2RlRnJvbUJhc2U2ND1mdW5jdGlvbihFKXtyZXR1cm4gRS5zdGFydHNXaXRoKGspPyhFPUUucmVwbGFj'@;
put 'ZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLHouZnJvbShFLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0cmluZygyMDApKTpFfX0sNTgxOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmJ5dGVzVG9TaXplPXZv'@;
put 'aWQgMCxPLmJ5dGVzVG9TaXplPWZ1bmN0aW9uKFIseixLKXtpZih2b2lkIDA9PT16JiYoej0xKSx2b2lkIDA9PT1LJiYoSz0xMDk5NTExNjI3Nzc2KSwwPT09UilyZXR1cm4iMCBCIjtSPVI+Sz9LOlI7dmFyIEk9ejwwPzA6eixrPU1hdGguZmxvb3IoTWF0aC5sb2coUikvTWF0aC5sb2coMTAy'@;
put 'NCkpO3JldHVybihSL01hdGgucG93KDEwMjQsaykpLnRvRml4ZWQoSSkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1ba119fSw4NjUzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmNodW5rPXZvaWQg'@;
put 'MCxPLmNodW5rPWZ1bmN0aW9uKFIseil7cmV0dXJuIHZvaWQgMD09PXomJih6PTIyMCksUi5sZW5ndGg8PXo/W1JdOihSLm1hdGNoKG5ldyBSZWdFeHAoIi57MSwiK3orIn0iLCJnIikpfHxbXSkuZmlsdGVyKGZ1bmN0aW9uKEspe3JldHVybiEhS30pfX0sNjQ1NzpmdW5jdGlvbihNLE8peyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oSyxJKXt2YXIgaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZLW1N5bWJvbC5pdGVyYXRvcl07aWYoIWspcmV0dXJuIEs7dmFyIEUsaixWPWsuY2FsbChLKSxCPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1JfHxJ'@;
put 'LS0gPjApJiYhKEU9Vi5uZXh0KCkpLmRvbmU7KUIucHVzaChFLnZhbHVlKX1jYXRjaChZKXtqPXtlcnJvcjpZfX1maW5hbGx5e3RyeXtFJiYhRS5kb25lJiYoaz1WLnJldHVybikmJmsuY2FsbChWKX1maW5hbGx5e2lmKGopdGhyb3cgai5lcnJvcn19cmV0dXJuIEJ9LHo9dGhpcyYmdGhpcy5f'@;
put 'X3NwcmVhZEFycmF5fHxmdW5jdGlvbihLLEksayl7aWYoa3x8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBFLGo9MCxWPUkubGVuZ3RoO2o8VjtqKyspIUUmJmogaW4gSXx8KEV8fChFPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEksMCxqKSksRVtqXT1JW2pdKTtyZXR1cm4gSy5j'@;
put 'b25jYXQoRXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoSSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kaWZmPXZvaWQgMCxPLmRpZmY9ZnVuY3Rpb24oSyxJKXt2YXIgaz1LLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4ib2JqZWN0'@;
put 'Ij09dHlwZW9mIGo/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KGopKTohSS5pbmNsdWRlcyhqKX0pLEU9SS5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBqPyFKU09OLnN0cmluZ2lmeShLKS5pbmNsdWRlcyhKU09OLnN0cmluZ2lm'@;
put 'eShqKSk6IUsuaW5jbHVkZXMoail9KTtyZXR1cm4geih6KFtdLFIoayksITEpLFIoRSksITEpfX0sMTUyOTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRFeGVjdXRvclBhdGg9dm9pZCAwO3ZhciBSPXtT'@;
put 'QVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O08uZ2V0RXhlY3V0b3JQYXRoPWZ1bmN0aW9uKHope3JldHVybiB6Pyh6PXoudG9VcHBlckNhc2UoKSxSW3pdfHwiIik6IiJ9fSwzMzE2OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0VHJlZUV4YW1wbGU9Ty5pc0ZpbGVUcmVlPXZvaWQgMDt2YXIgej1SKDM5MDApO08uaXNGaWxlVHJlZT1mdW5jdGlvbihFKXtyZXR1cm4gRSYmRS5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEUubWVtYmVycykmJjA9'@;
put 'PT1FLm1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiFLKGopJiYhSShqKSYmIWsoail9KS5sZW5ndGh9O3ZhciBLPWZ1bmN0aW9uKEUpe3JldHVybiBFJiYic3RyaW5nIj09dHlwZW9mIEUubmFtZSYmRS50eXBlPT09ei5NZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBl'@;
put 'b2YgRS5jb2RlfSxJPWZ1bmN0aW9uKEUpe3JldHVybiBFJiYic3RyaW5nIj09dHlwZW9mIEUubmFtZSYmRS50eXBlPT09ei5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRS5jb2RlfSxrPWZ1bmN0aW9uKEUpe3JldHVybiBFJiYic3RyaW5nIj09dHlwZW9mIEUubmFtZSYmRS50'@;
put 'eXBlPT09ei5NZW1iZXJUeXBlLmZvbGRlciYmRS5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEUubWVtYmVycykmJjA9PT1FLm1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiFLKGopJiYhSShqKSYmIWsoail9KS5sZW5ndGh9O08uZ2V0VHJlZUV4YW1wbGU9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm57bWVtYmVyczpbe25hbWU6ImpvYnMiLHR5cGU6ei5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTp6Lk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJtYWtlZGF0YTEiLHR5cGU6ei5NZW1iZXJUeXBlLnNlcnZpY2UsY29kZToiJXB1dCBI'@;
put 'ZWxsbyBXb3JsZCE7In1dfV19XX19fSw2MjY2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKFgsVSxxLGVlKXt2b2lkIDA9PT1lZSYmKGVlPXEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShYLGVlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBVW3FdfX0pfTpmdW5jdGlvbihYLFUscSxlZSl7dm9pZCAwPT09ZWUmJihlZT1xKSxYW2VlXT1VW3FdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oWCxVKXtmb3IodmFyIHEgaW4gWCkiZGVm'@;
put 'YXVsdCI9PT1xfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxxKXx8eihVLFgscSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmNodW5rPU8uZGlmZj1PLmJ5dGVzVG9TaXplPU8uZ2V0RXhlY3V0b3JQYXRoPU8uZGVj'@;
put 'b2RlRnJvbUJhc2U2ND1PLmVuY29kZVRvQmFzZTY0PU8udXJsT3JpZ2luPU8uZ2VuZXJhdGVQYXRoRm9yU2FzPU8uZ2V0TWFjcm9zUGF0aD1PLmVzY2FwZVdpblNsYXNoZXM9Ty5pc0xpbnV4PU8uaXNXaW5kb3dzPU8udW5pcUFycmF5PU8uYXN5bmNGb3JFYWNoPU8udXVpZHY0PXZvaWQgMDt2'@;
put 'YXIgST1SKDExMzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnV1aWR2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYXN5bmNGb3JFYWNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gSS5hc3luY0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5pcUFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJpc1dpbmRvd3MiLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiBJLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZXNjYXBlV2luU2xhc2hlcyIse2Vu'@;
put 'dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0TWFjcm9zUGF0aH19KSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiZ2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZW5lcmF0ZVBhdGhGb3JTYXN9fSksSyhSKDMzMTYpLE8pO3ZhciBrPVIoOTY1Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInVybE9yaWdpbiIse2VudW1lcmFi'@;
put 'bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsudXJsT3JpZ2lufX0pO3ZhciBFPVIoMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5lbmNvZGVUb0Jhc2U2NH19KSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoTywiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgaj1SKDE1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZXRFeGVjdXRvclBhdGgiLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiBqLmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgVj1SKDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi5ieXRlc1RvU2l6ZX19KTt2YXIgQj1SKDY0NTcpO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShPLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5kaWZmfX0pO3ZhciBZPVIoODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNodW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWS5jaHVua319'@;
put 'KX0sOTY1MjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy51cmxPcmlnaW49dm9pZCAwLE8udXJsT3JpZ2luPWZ1bmN0aW9uKFIpe2lmKCIiPT09UilyZXR1cm4gUjt2YXIgejt0cnl7ej1uZXcgVVJMKFIpLm9y'@;
put 'aWdpbn1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVVJMLiIpfXJldHVybiB6fX0sMTEzMTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9t'@;
put 'aXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVl'@;
put 'KTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXts'@;
put 'YWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9y'@;
put 'XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZ'@;
put 'JiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2Ug'@;
put 'MTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEu'@;
put 'dHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFi'@;
put 'ZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0w'@;
put 'fWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX0saz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oail7cmV0dXJuIGomJmouX19lc01vZHVsZT9qOntkZWZhdWx0Omp9fTtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZW5lcmF0ZVBhdGhGb3JTYXM9Ty5nZXRNYWNyb3NQYXRoPU8uZXNjYXBlV2luU2xhc2hlcz1PLmlzTGludXg9Ty5pc1dpbmRvd3M9Ty51bmlxQXJyYXk9Ty51dWlkdjQ9Ty5hc3luY0ZvckVhY2g9dm9pZCAwO3Zh'@;
put 'ciBFPWsoUigyNTIwKSk7Ty5hc3luY0ZvckVhY2g9ZnVuY3Rpb24oaixWKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQjtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFkpe3N3aXRjaChZLmxhYmVsKXtjYXNlIDA6Qj0wLFkubGFiZWw9MTtjYXNlIDE6cmV0dXJu'@;
put 'IEI8ai5sZW5ndGg/WzQsVihqW0JdLEIsaildOlszLDRdO2Nhc2UgMjpZLnNlbnQoKSxZLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBCKyssWzMsMV07Y2FzZSA0OnJldHVyblsyXX19KX0pfSxPLnV1aWR2ND1mdW5jdGlvbigpe3JldHVybiJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4'@;
put 'eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxmdW5jdGlvbihqKXt2YXIgVj0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09aj9WOjMmVnw4KS50b1N0cmluZygxNil9KX0sTy51bmlxQXJyYXk9ZnVuY3Rpb24oail7cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChqKSl9LE8uaXNXaW5kb3dz'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIndpbjMyIj09PXoucGxhdGZvcm19LE8uaXNMaW51eD1mdW5jdGlvbigpe3JldHVybiJsaW51eCI9PT16LnBsYXRmb3JtfSxPLmVzY2FwZVdpblNsYXNoZXM9ZnVuY3Rpb24oail7cmV0dXJuKDAsTy5pc1dpbmRvd3MpKCk/ai5yZXBsYWNlKC9cXC9nLCJcXFxc'@;
put 'Iik6an0sTy5nZXRNYWNyb3NQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIEUuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKX0sTy5nZW5lcmF0ZVBhdGhGb3JTYXM9ZnVuY3Rpb24oail7cmV0dXJuIGoucmVwbGFjZSgvXFwvZywiLyIpfX0sOTgwOTooTSxPLFIpPT57InVzZSBzdHJpY3Qi'@;
put 'O2NvbnN0IHo9Tzt6LmJpZ251bT1SKDQ1OTApLHouZGVmaW5lPVIoMjUwMCkuZGVmaW5lLHouYmFzZT1SKDE5NzkpLHouY29uc3RhbnRzPVIoNjgyNiksei5kZWNvZGVycz1SKDgzMDcpLHouZW5jb2RlcnM9Uig2NTc5KX0sMjUwMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2'@;
put 'NTc5KSxLPVIoODMwNyksST1SKDU3MTcpO2Z1bmN0aW9uIGsoRSxqKXt0aGlzLm5hbWU9RSx0aGlzLmJvZHk9aix0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319Ty5kZWZpbmU9ZnVuY3Rpb24oRSxqKXtyZXR1cm4gbmV3IGsoRSxqKX0say5wcm90b3R5cGUuX2NyZWF0ZU5hbWVk'@;
put 'PWZ1bmN0aW9uKEUpe2NvbnN0IGo9dGhpcy5uYW1lO2Z1bmN0aW9uIFYoQil7dGhpcy5faW5pdE5hbWVkKEIsail9cmV0dXJuIEkoVixFKSxWLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKEIsWSl7RS5jYWxsKHRoaXMsQixZKX0sbmV3IFYodGhpcyl9LGsucHJvdG90eXBlLl9nZXRE'@;
put 'ZWNvZGVyPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KEU9RXx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tFXT10aGlzLl9jcmVhdGVOYW1lZChLW0VdKSksdGhpcy5kZWNvZGVyc1tFXX0say5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEUsaixWKXty'@;
put 'ZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihqKS5kZWNvZGUoRSxWKX0say5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoRT1FfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW0VdPXRoaXMuX2NyZWF0ZU5hbWVkKHpbRV0p'@;
put 'KSx0aGlzLmVuY29kZXJzW0VdfSxrLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oRSxqLFYpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKGopLmVuY29kZShFLFYpfX0sNjYyNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoODQ2NSkuYixJPVIoMjM5OSkuQnVm'@;
put 'ZmVyO2Z1bmN0aW9uIGsoaixWKXtLLmNhbGwodGhpcyxWKSxJLmlzQnVmZmVyKGopPyh0aGlzLmJhc2U9aix0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPWoubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gRShqLFYpe2lmKEFycmF5LmlzQXJyYXkoaikp'@;
put 'dGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPWoubWFwKGZ1bmN0aW9uKEIpe3JldHVybiBFLmlzRW5jb2RlckJ1ZmZlcihCKXx8KEI9bmV3IEUoQixWKSksdGhpcy5sZW5ndGgrPUIubGVuZ3RoLEJ9LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBqKXtpZighKDA8PWomJmo8PTI1NSkp'@;
put 'cmV0dXJuIFYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPWosdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2Ygail0aGlzLnZhbHVlPWosdGhpcy5sZW5ndGg9SS5ieXRlTGVuZ3RoKGopO2Vsc2V7aWYoIUkuaXNCdWZmZXIoaikp'@;
put 'cmV0dXJuIFYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIGopO3RoaXMudmFsdWU9aix0aGlzLmxlbmd0aD1qLmxlbmd0aH19eihrLEspLE8uQz1rLGsuaXNEZWNvZGVyQnVmZmVyPWZ1bmN0aW9uKGope3JldHVybiBqIGluc3RhbmNlb2Yga3x8Im9iamVjdCI9PXR5cGVvZiBq'@;
put 'JiZJLmlzQnVmZmVyKGouYmFzZSkmJiJEZWNvZGVyQnVmZmVyIj09PWouY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBqLm9mZnNldCYmIm51bWJlciI9PXR5cGVvZiBqLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIGouc2F2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGoucmVz'@;
put 'dG9yZSYmImZ1bmN0aW9uIj09dHlwZW9mIGouaXNFbXB0eSYmImZ1bmN0aW9uIj09dHlwZW9mIGoucmVhZFVJbnQ4JiYiZnVuY3Rpb24iPT10eXBlb2Ygai5za2lwJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5yYXd9LGsucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRo'@;
put 'aXMub2Zmc2V0LHJlcG9ydGVyOksucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LGsucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oail7Y29uc3QgVj1uZXcgayh0aGlzLmJhc2UpO3JldHVybiBWLm9mZnNldD1qLm9mZnNldCxWLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1q'@;
put 'Lm9mZnNldCxLLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxqLnJlcG9ydGVyKSxWfSxrLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LGsucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5v'@;
put 'ZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKGp8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0say5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihqLFYpe2lmKCEodGhpcy5vZmZzZXQrajw9dGhpcy5sZW5ndGgpKXJl'@;
put 'dHVybiB0aGlzLmVycm9yKFZ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTtjb25zdCBCPW5ldyBrKHRoaXMuYmFzZSk7cmV0dXJuIEIuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxCLm9mZnNldD10aGlzLm9mZnNldCxCLmxlbmd0aD10aGlzLm9mZnNldCtqLHRoaXMub2Zm'@;
put 'c2V0Kz1qLEJ9LGsucHJvdG90eXBlLnJhdz1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKGo/ai5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxPLlI9RSxFLmlzRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIEV8fCJvYmplY3Qi'@;
put 'PT10eXBlb2YgaiYmIkVuY29kZXJCdWZmZXIiPT09ai5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIGoubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5qb2lufSxFLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGosVil7cmV0dXJuIGp8fChqPUkuYWxsb2ModGhpcy5sZW5n'@;
put 'dGgpKSxWfHwoVj0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihCKXtCLmpvaW4oaixWKSxWKz1CLmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/altWXT10aGlzLnZhbHVlOiJzdHJp'@;
put 'bmciPT10eXBlb2YgdGhpcy52YWx1ZT9qLndyaXRlKHRoaXMudmFsdWUsVik6SS5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KGosViksVis9dGhpcy5sZW5ndGgpKSxqfX0sMTk3OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Tzt6LlJlcG9ydGVyPVIoODQ2'@;
put 'NSkuYix6LkRlY29kZXJCdWZmZXI9Uig2NjI1KS5DLHouRW5jb2RlckJ1ZmZlcj1SKDY2MjUpLlIsei5Ob2RlPVIoMTk0OSl9LDE5NDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODQ2NSkuYixLPVIoNjYyNSkuUixJPVIoNjYyNSkuQyxrPVIoOTc0NiksRT1bInNlcSIsInNl'@;
put 'cW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJv'@;
put 'Y3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLGo9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdChFKTtmdW5jdGlvbiBW'@;
put 'KFksWCxVKXtjb25zdCBxPXt9O3RoaXMuX2Jhc2VTdGF0ZT1xLHEubmFtZT1VLHEuZW5jPVkscS5wYXJlbnQ9WHx8bnVsbCxxLmNoaWxkcmVuPW51bGwscS50YWc9bnVsbCxxLmFyZ3M9bnVsbCxxLnJldmVyc2VBcmdzPW51bGwscS5jaG9pY2U9bnVsbCxxLm9wdGlvbmFsPSExLHEuYW55PSEx'@;
put 'LHEub2JqPSExLHEudXNlPW51bGwscS51c2VEZWNvZGVyPW51bGwscS5rZXk9bnVsbCxxLmRlZmF1bHQ9bnVsbCxxLmV4cGxpY2l0PW51bGwscS5pbXBsaWNpdD1udWxsLHEuY29udGFpbnM9bnVsbCxxLnBhcmVudHx8KHEuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1NLmV4cG9ydHM9Vjtj'@;
put 'b25zdCBCPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Vi5w'@;
put 'cm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBZPXRoaXMuX2Jhc2VTdGF0ZSxYPXt9O0IuZm9yRWFjaChmdW5jdGlvbihxKXtYW3FdPVlbcV19KTtjb25zdCBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKFgucGFyZW50KTtyZXR1cm4gVS5fYmFzZVN0YXRlPVgsVX0sVi5wcm90b3R5cGUu'@;
put 'X3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBZPXRoaXMuX2Jhc2VTdGF0ZTtqLmZvckVhY2goZnVuY3Rpb24oWCl7dGhpc1tYXT1mdW5jdGlvbigpe2NvbnN0IFU9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIFkuY2hpbGRyZW4ucHVzaChVKSxVW1hdLmFwcGx5KFUsYXJndW1lbnRz'@;
put 'KX19LHRoaXMpfSxWLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtrKG51bGw9PT1YLnBhcmVudCksWS5jYWxsKHRoaXMpLFguY2hpbGRyZW49WC5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUuX2Jhc2VTdGF0ZS5wYXJlbnQ9'@;
put 'PT10aGlzfSx0aGlzKSxrLmVxdWFsKFguY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxWLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZSxVPVkuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVy'@;
put 'biBxIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7WT1ZLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4hKHEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVUubGVuZ3RoJiYoayhudWxsPT09WC5jaGlsZHJlbiksWC5jaGlsZHJlbj1VLFUuZm9yRWFj'@;
put 'aChmdW5jdGlvbihxKXtxLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09WS5sZW5ndGgmJihrKG51bGw9PT1YLmFyZ3MpLFguYXJncz1ZLFgucmV2ZXJzZUFyZ3M9WS5tYXAoZnVuY3Rpb24ocSl7aWYoIm9iamVjdCIhPXR5cGVvZiBxfHxxLmNvbnN0cnVjdG9yIT09T2JqZWN0'@;
put 'KXJldHVybiBxO2NvbnN0IGVlPXt9O3JldHVybiBPYmplY3Qua2V5cyhxKS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXt0ZT09KDB8dGUpJiYodGV8PTApLGVlW3FbdGVdXT10ZX0pLGVlfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlk'@;
put 'IiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNv'@;
put 'ZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihZKXtWLnByb3RvdHlwZVtZXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihZKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSxFLmZvckVhY2goZnVuY3Rpb24oWSl7Vi5wcm90b3R5cGVb'@;
put 'WV09ZnVuY3Rpb24oKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGsobnVsbD09PVgudGFnKSxYLnRhZz1ZLHRoaXMuX3VzZUFyZ3MoVSksdGhpc319KSxWLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oWSl7ayhZ'@;
put 'KTtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC51c2UpLFgudXNlPVksdGhpc30sVi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LFYucHJvdG90eXBlLmRlZj1mdW5jdGlvbihZKXtj'@;
put 'b25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5kZWZhdWx0KSxYLmRlZmF1bHQ9WSxYLm9wdGlvbmFsPSEwLHRoaXN9LFYucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmV4cGxpY2l0'@;
put 'JiZudWxsPT09WC5pbXBsaWNpdCksWC5leHBsaWNpdD1ZLHRoaXN9LFYucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmV4cGxpY2l0JiZudWxsPT09WC5pbXBsaWNpdCksWC5pbXBsaWNpdD1ZLHRoaXN9LFYu'@;
put 'cHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe2NvbnN0IFk9dGhpcy5fYmFzZVN0YXRlLFg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gWS5vYmo9ITAsMCE9PVgubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKFgpLHRoaXN9LFYucHJvdG90eXBlLmtleT1mdW5jdGlv'@;
put 'bihZKXtjb25zdCBYPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC5rZXkpLFgua2V5PVksdGhpc30sVi5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sVi5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKFkpe2NvbnN0'@;
put 'IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmNob2ljZSksWC5jaG9pY2U9WSx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKFkpLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gWVtVXX0pKSx0aGlzfSxWLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihZKXtjb25zdCBYPXRo'@;
put 'aXMuX2Jhc2VTdGF0ZTtyZXR1cm4gayhudWxsPT09WC51c2UpLFguY29udGFpbnM9WSx0aGlzfSxWLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVUucGFyZW50KXJldHVybiBZLndyYXBSZXN1bHQoVS5jaGlsZHJlblsw'@;
put 'XS5fZGVjb2RlKFksWCkpO2xldCBxLGVlPVUuZGVmYXVsdCx0ZT0hMCxvZT1udWxsO2lmKG51bGwhPT1VLmtleSYmKG9lPVkuZW50ZXJLZXkoVS5rZXkpKSxVLm9wdGlvbmFsKXtsZXQgc2U9bnVsbDtpZihudWxsIT09VS5leHBsaWNpdD9zZT1VLmV4cGxpY2l0Om51bGwhPT1VLmltcGxpY2l0'@;
put 'P3NlPVUuaW1wbGljaXQ6bnVsbCE9PVUudGFnJiYoc2U9VS50YWcpLG51bGwhPT1zZXx8VS5hbnkpe2lmKHRlPXRoaXMuX3BlZWtUYWcoWSxzZSxVLmFueSksWS5pc0Vycm9yKHRlKSlyZXR1cm4gdGV9ZWxzZXtjb25zdCBoZT1ZLnNhdmUoKTt0cnl7bnVsbD09PVUuY2hvaWNlP3RoaXMuX2Rl'@;
put 'Y29kZUdlbmVyaWMoVS50YWcsWSxYKTp0aGlzLl9kZWNvZGVDaG9pY2UoWSxYKSx0ZT0hMH1jYXRjaHt0ZT0hMX1ZLnJlc3RvcmUoaGUpfX1pZihVLm9iaiYmdGUmJihxPVkuZW50ZXJPYmplY3QoKSksdGUpe2lmKG51bGwhPT1VLmV4cGxpY2l0KXtjb25zdCBoZT10aGlzLl9kZWNvZGVUYWco'@;
put 'WSxVLmV4cGxpY2l0KTtpZihZLmlzRXJyb3IoaGUpKXJldHVybiBoZTtZPWhlfWNvbnN0IHNlPVkub2Zmc2V0O2lmKG51bGw9PT1VLnVzZSYmbnVsbD09PVUuY2hvaWNlKXtsZXQgaGU7VS5hbnkmJihoZT1ZLnNhdmUoKSk7Y29uc3QgdWU9dGhpcy5fZGVjb2RlVGFnKFksbnVsbCE9PVUuaW1w'@;
put 'bGljaXQ/VS5pbXBsaWNpdDpVLnRhZyxVLmFueSk7aWYoWS5pc0Vycm9yKHVlKSlyZXR1cm4gdWU7VS5hbnk/ZWU9WS5yYXcoaGUpOlk9dWV9aWYoWCYmWC50cmFjayYmbnVsbCE9PVUudGFnJiZYLnRyYWNrKFkucGF0aCgpLHNlLFkubGVuZ3RoLCJ0YWdnZWQiKSxYJiZYLnRyYWNrJiZudWxs'@;
put 'IT09VS50YWcmJlgudHJhY2soWS5wYXRoKCksWS5vZmZzZXQsWS5sZW5ndGgsImNvbnRlbnQiKSxVLmFueXx8KGVlPW51bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLFksWCk6dGhpcy5fZGVjb2RlQ2hvaWNlKFksWCkpLFkuaXNFcnJvcihlZSkpcmV0dXJuIGVlO2lm'@;
put 'KFUuYW55fHxudWxsIT09VS5jaG9pY2V8fG51bGw9PT1VLmNoaWxkcmVufHxVLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oaGUpe2hlLl9kZWNvZGUoWSxYKX0pLFUuY29udGFpbnMmJigib2N0c3RyIj09PVUudGFnfHwiYml0c3RyIj09PVUudGFnKSl7Y29uc3QgaGU9bmV3IEkoZWUpO2Vl'@;
put 'PXRoaXMuX2dldFVzZShVLmNvbnRhaW5zLFkuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGhlLFgpfX1yZXR1cm4gVS5vYmomJnRlJiYoZWU9WS5sZWF2ZU9iamVjdChxKSksbnVsbD09PVUua2V5fHxudWxsPT09ZWUmJiEwIT09dGU/bnVsbCE9PW9lJiZZLmV4aXRLZXkob2UpOlkubGVh'@;
put 'dmVLZXkob2UsVS5rZXksZWUpLGVlfSxWLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihZLFgsVSl7Y29uc3QgcT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1ZfHwic2V0Ij09PVk/bnVsbDoic2Vxb2YiPT09WXx8InNldG9mIj09PVk/dGhpcy5fZGVjb2RlTGlzdChY'@;
put 'LFkscS5hcmdzWzBdLFUpOi9zdHIkLy50ZXN0KFkpP3RoaXMuX2RlY29kZVN0cihYLFksVSk6Im9iamlkIj09PVkmJnEuYXJncz90aGlzLl9kZWNvZGVPYmppZChYLHEuYXJnc1swXSxxLmFyZ3NbMV0sVSk6Im9iamlkIj09PVk/dGhpcy5fZGVjb2RlT2JqaWQoWCxudWxsLG51bGwsVSk6Imdl'@;
put 'bnRpbWUiPT09WXx8InV0Y3RpbWUiPT09WT90aGlzLl9kZWNvZGVUaW1lKFgsWSxVKToibnVsbF8iPT09WT90aGlzLl9kZWNvZGVOdWxsKFgsVSk6ImJvb2wiPT09WT90aGlzLl9kZWNvZGVCb29sKFgsVSk6Im9iakRlc2MiPT09WT90aGlzLl9kZWNvZGVTdHIoWCxZLFUpOiJpbnQiPT09WXx8'@;
put 'ImVudW0iPT09WT90aGlzLl9kZWNvZGVJbnQoWCxxLmFyZ3MmJnEuYXJnc1swXSxVKTpudWxsIT09cS51c2U/dGhpcy5fZ2V0VXNlKHEudXNlLFguX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKFgsVSk6WC5lcnJvcigidW5rbm93biB0YWc6ICIrWSl9LFYucHJvdG90eXBlLl9nZXRVc2U9'@;
put 'ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVS51c2VEZWNvZGVyPXRoaXMuX3VzZShZLFgpLGsobnVsbD09PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFUu'@;
put 'aW1wbGljaXQhPT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuY2xvbmUoKSxVLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1VLmltcGxpY2l0KSxVLnVzZURlY29kZXJ9LFYucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9'@;
put 'ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgcT1udWxsLGVlPSExO3JldHVybiBPYmplY3Qua2V5cyhVLmNob2ljZSkuc29tZShmdW5jdGlvbih0ZSl7Y29uc3Qgb2U9WS5zYXZlKCksc2U9VS5jaG9pY2VbdGVdO3RyeXtjb25zdCBoZT1zZS5fZGVjb2RlKFksWCk7'@;
put 'aWYoWS5pc0Vycm9yKGhlKSlyZXR1cm4hMTtxPXt0eXBlOnRlLHZhbHVlOmhlfSxlZT0hMH1jYXRjaHtyZXR1cm4gWS5yZXN0b3JlKG9lKSwhMX1yZXR1cm4hMH0sdGhpcyksZWU/cTpZLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sVi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZm'@;
put 'ZXI9ZnVuY3Rpb24oWSl7cmV0dXJuIG5ldyBLKFksdGhpcy5yZXBvcnRlcil9LFYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oWSxYLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGwhPT1xLmRlZmF1bHQmJnEuZGVmYXVsdD09PVkpcmV0dXJuO2NvbnN0IGVlPXRoaXMuX2Vu'@;
put 'Y29kZVZhbHVlKFksWCxVKTtyZXR1cm4gdm9pZCAwPT09ZWV8fHRoaXMuX3NraXBEZWZhdWx0KGVlLFgsVSk/dm9pZCAwOmVlfSxWLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oWSxYLFUpe2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1xLnBhcmVudClyZXR1cm4g'@;
put 'cS5jaGlsZHJlblswXS5fZW5jb2RlKFksWHx8bmV3IHopO2xldCBlZT1udWxsO2lmKHRoaXMucmVwb3J0ZXI9WCxxLm9wdGlvbmFsJiZ2b2lkIDA9PT1ZKXtpZihudWxsPT09cS5kZWZhdWx0KXJldHVybjtZPXEuZGVmYXVsdH1sZXQgdGU9bnVsbCxvZT0hMTtpZihxLmFueSllZT10aGlzLl9j'@;
put 'cmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYocS5jaG9pY2UpZWU9dGhpcy5fZW5jb2RlQ2hvaWNlKFksWCk7ZWxzZSBpZihxLmNvbnRhaW5zKXRlPXRoaXMuX2dldFVzZShxLmNvbnRhaW5zLFUpLl9lbmNvZGUoWSxYKSxvZT0hMDtlbHNlIGlmKHEuY2hpbGRyZW4pdGU9cS5jaGlsZHJl'@;
put 'bi5tYXAoZnVuY3Rpb24oc2Upe2lmKCJudWxsXyI9PT1zZS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gc2UuX2VuY29kZShudWxsLFgsWSk7aWYobnVsbD09PXNlLl9iYXNlU3RhdGUua2V5KXJldHVybiBYLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO2NvbnN0IGhlPVguZW50ZXJL'@;
put 'ZXkoc2UuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgWSlyZXR1cm4gWC5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7Y29uc3QgdWU9c2UuX2VuY29kZShZW3NlLl9iYXNlU3RhdGUua2V5XSxYLFkpO3JldHVybiBYLmxlYXZlS2V5'@;
put 'KGhlKSx1ZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2V9KSx0ZT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHRlKTtlbHNlIGlmKCJzZXFvZiI9PT1xLnRhZ3x8InNldG9mIj09PXEudGFnKXtpZighcS5hcmdzfHwxIT09cS5hcmdzLmxlbmd0aClyZXR1cm4gWC5lcnJv'@;
put 'cigiVG9vIG1hbnkgYXJncyBmb3IgOiAiK3EudGFnKTtpZighQXJyYXkuaXNBcnJheShZKSlyZXR1cm4gWC5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO2NvbnN0IHNlPXRoaXMuY2xvbmUoKTtzZS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsdGU9dGhpcy5f'@;
put 'Y3JlYXRlRW5jb2RlckJ1ZmZlcihZLm1hcChmdW5jdGlvbihoZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxZKS5fZW5jb2RlKGhlLFgpfSxzZSkpfWVsc2UgbnVsbCE9PXEudXNlP2VlPXRoaXMuX2dldFVzZShxLnVzZSxVKS5fZW5jb2RlKFksWCk6KHRl'@;
put 'PXRoaXMuX2VuY29kZVByaW1pdGl2ZShxLnRhZyxZKSxvZT0hMCk7aWYoIXEuYW55JiZudWxsPT09cS5jaG9pY2Upe2NvbnN0IHNlPW51bGwhPT1xLmltcGxpY2l0P3EuaW1wbGljaXQ6cS50YWcsaGU9bnVsbD09PXEuaW1wbGljaXQ/InVuaXZlcnNhbCI6ImNvbnRleHQiO251bGw9PT1zZT9u'@;
put 'dWxsPT09cS51c2UmJlguZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1xLnVzZSYmKGVlPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShzZSxvZSxoZSx0ZSkpfXJldHVybiBudWxsIT09cS5leHBsaWNpdCYmKGVlPXRoaXMuX2VuY29kZUNvbXBvc2l0'@;
put 'ZShxLmV4cGxpY2l0LCExLCJjb250ZXh0IixlZSkpLGVlfSxWLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGUscT1VLmNob2ljZVtZLnR5cGVdO3JldHVybiBxfHxrKCExLFkudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3Ry'@;
put 'aW5naWZ5KE9iamVjdC5rZXlzKFUuY2hvaWNlKSkpLHEuX2VuY29kZShZLnZhbHVlLFgpfSxWLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoWSkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihYLFkp'@;
put 'O2lmKCJvYmppZCI9PT1ZJiZVLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKFgsVS5yZXZlcnNlQXJnc1swXSxVLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChYLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09WXx8InV0Y3RpbWUiPT09WSly'@;
put 'ZXR1cm4gdGhpcy5fZW5jb2RlVGltZShYLFkpO2lmKCJudWxsXyI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1ZfHwiZW51bSI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoWCxVLmFyZ3MmJlUucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PVkpcmV0dXJu'@;
put 'IHRoaXMuX2VuY29kZUJvb2woWCk7aWYoIm9iakRlc2MiPT09WSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFgsWSk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrWSl9LFYucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihZKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KFkp'@;
put 'fSxWLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihZKXtyZXR1cm4vXltBLVphLXowLTkgJygpKywtLi86PT9dKiQvLnRlc3QoWSl9fSw4NDY1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpO2Z1bmN0aW9uIEsoayl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2Jq'@;
put 'Om51bGwscGF0aDpbXSxvcHRpb25zOmt8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gSShrLEUpe3RoaXMucGF0aD1rLHRoaXMucmV0aHJvdyhFKX1PLmI9SyxLLnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKGspe3JldHVybiBrIGluc3RhbmNlb2YgSX0sSy5wcm90b3R5cGUuc2F2ZT1mdW5j'@;
put 'dGlvbigpe2NvbnN0IGs9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOmsub2JqLHBhdGhMZW46ay5wYXRoLmxlbmd0aH19LEsucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlO0Uub2JqPWsub2JqLEUucGF0aD1FLnBhdGguc2xp'@;
put 'Y2UoMCxrLnBhdGhMZW4pfSxLLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goayl9LEsucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9yZXBvcnRlclN0YXRlO0UucGF0aD1FLnBhdGgu'@;
put 'c2xpY2UoMCxrLTEpfSxLLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbihrLEUsail7Y29uc3QgVj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleShrKSxudWxsIT09Vi5vYmomJihWLm9ialtFXT1qKX0sSy5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9y'@;
put 'ZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSxLLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe2NvbnN0IGs9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxFPWsub2JqO3JldHVybiBrLm9iaj17fSxFfSxLLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihrKXtjb25zdCBFPXRo'@;
put 'aXMuX3JlcG9ydGVyU3RhdGUsaj1FLm9iajtyZXR1cm4gRS5vYmo9ayxqfSxLLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihrKXtsZXQgRTtjb25zdCBqPXRoaXMuX3JlcG9ydGVyU3RhdGUsVj1rIGluc3RhbmNlb2YgSTtpZihFPVY/azpuZXcgSShqLnBhdGgubWFwKGZ1bmN0aW9uKEIpe3Jl'@;
put 'dHVybiJbIitKU09OLnN0cmluZ2lmeShCKSsiXSJ9KS5qb2luKCIiKSxrLm1lc3NhZ2V8fGssay5zdGFjayksIWoub3B0aW9ucy5wYXJ0aWFsKXRocm93IEU7cmV0dXJuIFZ8fGouZXJyb3JzLnB1c2goRSksRX0sSy5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbihrKXtjb25zdCBFPXRo'@;
put 'aXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIEUub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKGspP251bGw6ayxlcnJvcnM6RS5lcnJvcnN9Omt9LHooSSxFcnJvciksSS5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbihrKXtpZih0aGlzLm1lc3NhZ2U9aysiIGF0OiAiKyh0'@;
put 'aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxJKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goRSl7dGhpcy5zdGFjaz1FLnN0YWNrfXJldHVybiB0aGlz'@;
put 'fX0sMTYwOihNLE8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFIoeil7Y29uc3QgSz17fTtyZXR1cm4gT2JqZWN0LmtleXMoeikuZm9yRWFjaChmdW5jdGlvbihJKXsoMHxJKT09SSYmKEl8PTApLEtbeltJXV09SX0pLEt9Ty50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlv'@;
put 'biIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LE8udGFnQ2xhc3NCeU5hbWU9UihPLnRhZ0NsYXNzKSxPLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFs'@;
put 'IiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToi'@;
put 'Z3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sTy50YWdCeU5hbWU9UihPLnRhZyl9LDY4MjY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5fcmV2ZXJzZT1mdW5jdGlvbihLKXtjb25zdCBJ'@;
put 'PXt9O3JldHVybiBPYmplY3Qua2V5cyhLKS5mb3JFYWNoKGZ1bmN0aW9uKGspeygwfGspPT1rJiYoa3w9MCksSVtLW2tdXT1rfSksSX0sei5kZXI9UigxNjApfSwxNjcxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9Uig0NTkwKSxJPVIoNjYyNSkuQyxrPVIoMTk0'@;
put 'OSksRT1SKDE2MCk7ZnVuY3Rpb24gaihYKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9WC5uYW1lLHRoaXMuZW50aXR5PVgsdGhpcy50cmVlPW5ldyBWLHRoaXMudHJlZS5faW5pdChYLmJvZHkpfWZ1bmN0aW9uIFYoWCl7ay5jYWxsKHRoaXMsImRlciIsWCl9ZnVuY3Rpb24gQihYLFUpe2xl'@;
put 'dCBxPVgucmVhZFVJbnQ4KFUpO2lmKFguaXNFcnJvcihxKSlyZXR1cm4gcTtjb25zdCBlZT1FLnRhZ0NsYXNzW3E+PjZdLHRlPTA9PSgzMiZxKTtpZigzMT09KDMxJnEpKXtsZXQgb2U9cTtmb3IocT0wOzEyOD09KDEyOCZvZSk7KXtpZihvZT1YLnJlYWRVSW50OChVKSxYLmlzRXJyb3Iob2Up'@;
put 'KXJldHVybiBvZTtxPDw9NyxxfD0xMjcmb2V9fWVsc2UgcSY9MzE7cmV0dXJue2NsczplZSxwcmltaXRpdmU6dGUsdGFnOnEsdGFnU3RyOkUudGFnW3FdfX1mdW5jdGlvbiBZKFgsVSxxKXtsZXQgZWU9WC5yZWFkVUludDgocSk7aWYoWC5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7aWYoIVUmJjEy'@;
put 'OD09PWVlKXJldHVybiBudWxsO2lmKCEoMTI4JmVlKSlyZXR1cm4gZWU7Y29uc3QgdGU9MTI3JmVlO2lmKHRlPjQpcmV0dXJuIFguZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtlZT0wO2ZvcihsZXQgb2U9MDtvZTx0ZTtvZSsrKXtlZTw8PTg7Y29uc3Qgc2U9WC5yZWFkVUlu'@;
put 'dDgocSk7aWYoWC5pc0Vycm9yKHNlKSlyZXR1cm4gc2U7ZWV8PXNlfXJldHVybiBlZX1NLmV4cG9ydHM9aixqLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gSS5pc0RlY29kZXJCdWZmZXIoWCl8fChYPW5ldyBJKFgsVSkpLHRoaXMudHJlZS5fZGVjb2RlKFgsVSl9LHoo'@;
put 'VixrKSxWLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihYLFUscSl7aWYoWC5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3QgZWU9WC5zYXZlKCksdGU9QihYLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK1UrJyInKTtyZXR1cm4gWC5pc0Vycm9yKHRlKT90ZTooWC5yZXN0b3JlKGVlKSx0ZS50'@;
put 'YWc9PT1VfHx0ZS50YWdTdHI9PT1VfHx0ZS50YWdTdHIrIm9mIj09PVV8fHEpfSxWLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKFgsVSxxKXtjb25zdCBlZT1CKFgsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK1UrJyInKTtpZihYLmlzRXJyb3IoZWUpKXJldHVybiBlZTtsZXQg'@;
put 'dGU9WShYLGVlLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrVSsnIicpO2lmKFguaXNFcnJvcih0ZSkpcmV0dXJuIHRlO2lmKCFxJiZlZS50YWchPT1VJiZlZS50YWdTdHIhPT1VJiZlZS50YWdTdHIrIm9mIiE9PVUpcmV0dXJuIFguZXJyb3IoJ0ZhaWxlZCB0byBtYXRj'@;
put 'aCB0YWc6ICInK1UrJyInKTtpZihlZS5wcmltaXRpdmV8fG51bGwhPT10ZSlyZXR1cm4gWC5za2lwKHRlLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrVSsnIicpO2NvbnN0IG9lPVguc2F2ZSgpLHNlPXRoaXMuX3NraXBVbnRpbEVuZChYLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRl'@;
put 'IGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBYLmlzRXJyb3Ioc2UpP3NlOih0ZT1YLm9mZnNldC1vZS5vZmZzZXQsWC5yZXN0b3JlKG9lKSxYLnNraXAodGUsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytVKyciJykpfSxWLnByb3RvdHlwZS5fc2tpcFVudGlsRW5k'@;
put 'PWZ1bmN0aW9uKFgsVSl7Zm9yKDs7KXtjb25zdCBxPUIoWCxVKTtpZihYLmlzRXJyb3IocSkpcmV0dXJuIHE7Y29uc3QgZWU9WShYLHEucHJpbWl0aXZlLFUpO2lmKFguaXNFcnJvcihlZSkpcmV0dXJuIGVlO2xldCB0ZTtpZih0ZT1xLnByaW1pdGl2ZXx8bnVsbCE9PWVlP1guc2tpcChlZSk6'@;
put 'dGhpcy5fc2tpcFVudGlsRW5kKFgsVSksWC5pc0Vycm9yKHRlKSlyZXR1cm4gdGU7aWYoImVuZCI9PT1xLnRhZ1N0cilicmVha319LFYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKFgsVSxxLGVlKXtjb25zdCB0ZT1bXTtmb3IoOyFYLmlzRW1wdHkoKTspe2NvbnN0IG9lPXRoaXMu'@;
put 'X3BlZWtUYWcoWCwiZW5kIik7aWYoWC5pc0Vycm9yKG9lKSlyZXR1cm4gb2U7Y29uc3Qgc2U9cS5kZWNvZGUoWCwiZGVyIixlZSk7aWYoWC5pc0Vycm9yKHNlKSYmb2UpYnJlYWs7dGUucHVzaChzZSl9cmV0dXJuIHRlfSxWLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKFgsVSl7aWYo'@;
put 'ImJpdHN0ciI9PT1VKXtjb25zdCBxPVgucmVhZFVJbnQ4KCk7cmV0dXJuIFguaXNFcnJvcihxKT9xOnt1bnVzZWQ6cSxkYXRhOlgucmF3KCl9fWlmKCJibXBzdHIiPT09VSl7Y29uc3QgcT1YLnJhdygpO2lmKHEubGVuZ3RoJTI9PTEpcmV0dXJuIFguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmlu'@;
put 'ZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoIik7bGV0IGVlPSIiO2ZvcihsZXQgdGU9MDt0ZTxxLmxlbmd0aC8yO3RlKyspZWUrPVN0cmluZy5mcm9tQ2hhckNvZGUocS5yZWFkVUludDE2QkUoMip0ZSkpO3JldHVybiBlZX1pZigibnVtc3RyIj09PVUpe2NvbnN0IHE9WC5yYXcoKS50'@;
put 'b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIocSk/cTpYLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PVV8fCJvYmpEZXNjIj09PVUpcmV0dXJuIFgucmF3KCk7aWYoInByaW50'@;
put 'c3RyIj09PVUpe2NvbnN0IHE9WC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihxKT9xOlguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoVSk/WC5y'@;
put 'YXcoKS50b1N0cmluZygpOlguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK1UrIiB1bnN1cHBvcnRlZCIpfSxWLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oWCxVLHEpe2xldCBlZTtjb25zdCB0ZT1bXTtsZXQgb2U9MCxzZT0wO2Zvcig7IVguaXNFbXB0eSgpOylz'@;
put 'ZT1YLnJlYWRVSW50OCgpLG9lPDw9NyxvZXw9MTI3JnNlLCEoMTI4JnNlKSYmKHRlLnB1c2gob2UpLG9lPTApO2lmKDEyOCZzZSYmdGUucHVzaChvZSksZWU9cT90ZTpbdGVbMF0vNDB8MCx0ZVswXSU0MF0uY29uY2F0KHRlLnNsaWNlKDEpKSxVKXtsZXQgY2U9VVtlZS5qb2luKCIgIildO3Zv'@;
put 'aWQgMD09PWNlJiYoY2U9VVtlZS5qb2luKCIuIildKSx2b2lkIDAhPT1jZSYmKGVlPWNlKX1yZXR1cm4gZWV9LFYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKFgsVSl7Y29uc3QgcT1YLnJhdygpLnRvU3RyaW5nKCk7bGV0IGVlLHRlLG9lLHNlLGhlLHVlO2lmKCJnZW50aW1lIj09'@;
put 'PVUpZWU9MHxxLnNsaWNlKDAsNCksdGU9MHxxLnNsaWNlKDQsNiksb2U9MHxxLnNsaWNlKDYsOCksc2U9MHxxLnNsaWNlKDgsMTApLGhlPTB8cS5zbGljZSgxMCwxMiksdWU9MHxxLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PVUpcmV0dXJuIFguZXJyb3IoIkRlY29kaW5nICIr'@;
put 'VSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtlZT0wfHEuc2xpY2UoMCwyKSx0ZT0wfHEuc2xpY2UoMiw0KSxvZT0wfHEuc2xpY2UoNCw2KSxzZT0wfHEuc2xpY2UoNiw4KSxoZT0wfHEuc2xpY2UoOCwxMCksdWU9MHxxLnNsaWNlKDEwLDEyKSxlZT1lZTw3MD8yZTMrZWU6MTkwMCtl'@;
put 'ZX1yZXR1cm4gRGF0ZS5VVEMoZWUsdGUtMSxvZSxzZSxoZSx1ZSwwKX0sVi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sVi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oWCl7Y29uc3QgVT1YLnJlYWRVSW50OCgpO3JldHVybiBYLmlzRXJyb3Io'@;
put 'VSk/VTowIT09VX0sVi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihYLFUpe2NvbnN0IHE9WC5yYXcoKTtsZXQgZWU9bmV3IEsocSk7cmV0dXJuIFUmJihlZT1VW2VlLnRvU3RyaW5nKDEwKV18fGVlKSxlZX0sVi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihYLFUpe3JldHVybiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBYJiYoWD1YKFUpKSxYLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sODMwNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Tzt6LmRlcj1SKDE2NzEpLHoucGVtPVIoOTYzMSl9LDk2MzE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyks'@;
put 'Sz1SKDIzOTkpLkJ1ZmZlcixJPVIoMTY3MSk7ZnVuY3Rpb24gayhFKXtJLmNhbGwodGhpcyxFKSx0aGlzLmVuYz0icGVtIn16KGssSSksTS5leHBvcnRzPWssay5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEUsail7Y29uc3QgVj1FLnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksQj1q'@;
put 'LmxhYmVsLnRvVXBwZXJDYXNlKCksWT0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC87bGV0IFg9LTEsVT0tMTtmb3IobGV0IHRlPTA7dGU8Vi5sZW5ndGg7dGUrKyl7Y29uc3Qgb2U9Vlt0ZV0ubWF0Y2goWSk7aWYobnVsbCE9PW9lJiZvZVsyXT09PUIpe2lmKC0xIT09WCl7aWYo'@;
put 'IkVORCIhPT1vZVsxXSlicmVhaztVPXRlO2JyZWFrfWlmKCJCRUdJTiIhPT1vZVsxXSlicmVhaztYPXRlfX1pZigtMT09PVh8fC0xPT09VSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIrQik7Y29uc3QgcT1WLnNsaWNlKFgrMSxVKS5qb2luKCIiKTtxLnJl'@;
put 'cGxhY2UoL1teYS16MC05Ky89XSsvZ2ksIiIpO2NvbnN0IGVlPUsuZnJvbShxLCJiYXNlNjQiKTtyZXR1cm4gSS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxlZSxqKX19LDY5ODQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1SKDIzOTkpLkJ1ZmZlcixJPVIo'@;
put 'MTk0OSksaz1SKDE2MCk7ZnVuY3Rpb24gRShCKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Qi5uYW1lLHRoaXMuZW50aXR5PUIsdGhpcy50cmVlPW5ldyBqLHRoaXMudHJlZS5faW5pdChCLmJvZHkpfWZ1bmN0aW9uIGooQil7SS5jYWxsKHRoaXMsImRlciIsQil9ZnVuY3Rpb24gVihCKXty'@;
put 'ZXR1cm4gQjwxMD8iMCIrQjpCfU0uZXhwb3J0cz1FLEUucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihCLFkpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShCLFkpLmpvaW4oKX0seihqLEkpLGoucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oQixZLFgsVSl7Y29uc3QgcT1m'@;
put 'dW5jdGlvbihvZSxzZSxoZSx1ZSl7bGV0IGNlO2lmKCJzZXFvZiI9PT1vZT9vZT0ic2VxIjoic2V0b2YiPT09b2UmJihvZT0ic2V0Iiksay50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkob2UpKWNlPWsudGFnQnlOYW1lW29lXTtlbHNle2lmKCJudW1iZXIiIT10eXBlb2Ygb2V8fCgwfG9lKSE9'@;
put 'PW9lKXJldHVybiB1ZS5lcnJvcigiVW5rbm93biB0YWc6ICIrb2UpO2NlPW9lfXJldHVybiBjZT49MzE/dWUuZXJyb3IoIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZCIpOihzZXx8KGNlfD0zMiksY2V8PWsudGFnQ2xhc3NCeU5hbWVbaGV8fCJ1bml2ZXJzYWwiXTw8Nixj'@;
put 'ZSl9KEIsWSxYLHRoaXMucmVwb3J0ZXIpO2lmKFUubGVuZ3RoPDEyOCl7Y29uc3Qgb2U9Sy5hbGxvYygyKTtyZXR1cm4gb2VbMF09cSxvZVsxXT1VLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvZSxVXSl9bGV0IGVlPTE7Zm9yKGxldCBvZT1VLmxlbmd0aDtvZT49MjU2O29l'@;
put 'Pj49OCllZSsrO2NvbnN0IHRlPUsuYWxsb2MoMitlZSk7dGVbMF09cSx0ZVsxXT0xMjh8ZWU7Zm9yKGxldCBvZT0xK2VlLHNlPVUubGVuZ3RoO3NlPjA7b2UtLSxzZT4+PTgpdGVbb2VdPTI1NSZzZTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbdGUsVV0pfSxqLnByb3RvdHlw'@;
put 'ZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEIsWSl7aWYoImJpdHN0ciI9PT1ZKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEIudW51c2VkLEIuZGF0YV0pO2lmKCJibXBzdHIiPT09WSl7Y29uc3QgWD1LLmFsbG9jKDIqQi5sZW5ndGgpO2ZvcihsZXQgVT0wO1U8Qi5sZW5ndGg7'@;
put 'VSsrKVgud3JpdGVVSW50MTZCRShCLmNoYXJDb2RlQXQoVSksMipVKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihYKX1yZXR1cm4ibnVtc3RyIj09PVk/dGhpcy5faXNOdW1zdHIoQik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJF'@;
put 'bmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1ZP3RoaXMuX2lzUHJpbnRzdHIoQik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJp'@;
put 'bmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xv'@;
put 'biwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KFkpfHwib2JqRGVzYyI9PT1ZP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrWSsiIHVuc3VwcG9ydGVkIil9LGoucHJvdG90'@;
put 'eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihCLFksWCl7aWYoInN0cmluZyI9PXR5cGVvZiBCKXtpZighWSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFZLmhhc093blByb3BlcnR5KEIpKXJldHVy'@;
put 'biB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO0I9WVtCXS5zcGxpdCgvW1xzLl0rL2cpO2ZvcihsZXQgdGU9MDt0ZTxCLmxlbmd0aDt0ZSsrKUJbdGVdfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShCKSl7Qj1CLnNsaWNlKCk7Zm9yKGxldCB0'@;
put 'ZT0wO3RlPEIubGVuZ3RoO3RlKyspQlt0ZV18PTB9aWYoIUFycmF5LmlzQXJyYXkoQikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShCKSk7aWYoIVgpe2lmKEJbMV0+PTQw'@;
put 'KXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtCLnNwbGljZSgwLDIsNDAqQlswXStCWzFdKX1sZXQgVT0wO2ZvcihsZXQgdGU9MDt0ZTxCLmxlbmd0aDt0ZSsrKXtsZXQgb2U9Qlt0ZV07Zm9yKFUrKztvZT49MTI4O29lPj49NylVKyt9'@;
put 'Y29uc3QgcT1LLmFsbG9jKFUpO2xldCBlZT1xLmxlbmd0aC0xO2ZvcihsZXQgdGU9Qi5sZW5ndGgtMTt0ZT49MDt0ZS0tKXtsZXQgb2U9Qlt0ZV07Zm9yKHFbZWUtLV09MTI3Jm9lOyhvZT4+PTcpPjA7KXFbZWUtLV09MTI4fDEyNyZvZX1yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZl'@;
put 'cihxKX0sai5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oQixZKXtsZXQgWDtjb25zdCBVPW5ldyBEYXRlKEIpO3JldHVybiJnZW50aW1lIj09PVk/WD1bVihVLmdldFVUQ0Z1bGxZZWFyKCkpLFYoVS5nZXRVVENNb250aCgpKzEpLFYoVS5nZXRVVENEYXRlKCkpLFYoVS5nZXRVVENI'@;
put 'b3VycygpKSxWKFUuZ2V0VVRDTWludXRlcygpKSxWKFUuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PVk/WD1bVihVLmdldFVUQ0Z1bGxZZWFyKCklMTAwKSxWKFUuZ2V0VVRDTW9udGgoKSsxKSxWKFUuZ2V0VVRDRGF0ZSgpKSxWKFUuZ2V0VVRDSG91cnMoKSks'@;
put 'VihVLmdldFVUQ01pbnV0ZXMoKSksVihVLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK1krIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFgsIm9jdHN0ciIpfSxqLnByb3RvdHlwZS5fZW5j'@;
put 'b2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sai5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihCLFkpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7aWYoIVkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3Ig'@;
put 'ZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighWS5oYXNPd25Qcm9wZXJ0eShCKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoQikpO0I9WVtCXX1pZigibnVtYmVyIiE9dHlwZW9mIEImJiFL'@;
put 'LmlzQnVmZmVyKEIpKXtjb25zdCBxPUIudG9BcnJheSgpOyFCLnNpZ24mJjEyOCZxWzBdJiZxLnVuc2hpZnQoMCksQj1LLmZyb20ocSl9aWYoSy5pc0J1ZmZlcihCKSl7bGV0IHE9Qi5sZW5ndGg7MD09PUIubGVuZ3RoJiZxKys7Y29uc3QgZWU9Sy5hbGxvYyhxKTtyZXR1cm4gQi5jb3B5KGVl'@;
put 'KSwwPT09Qi5sZW5ndGgmJihlZVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX1pZihCPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKTtpZihCPDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxCXSk7bGV0IFg9MTtmb3IobGV0'@;
put 'IHE9QjtxPj0yNTY7cT4+PTgpWCsrO2NvbnN0IFU9bmV3IEFycmF5KFgpO2ZvcihsZXQgcT1VLmxlbmd0aC0xO3E+PTA7cS0tKVVbcV09MjU1JkIsQj4+PTg7cmV0dXJuIDEyOCZVWzBdJiZVLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihLLmZyb20oVSkpfSxqLnByb3Rv'@;
put 'dHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCPzI1NTowKX0sai5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihCLFkpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBCJiYoQj1CKFkpKSxCLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVl'@;
put 'fSxqLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24oQixZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2xldCBxO2lmKG51bGw9PT1VLmRlZmF1bHQpcmV0dXJuITE7Y29uc3QgZWU9Qi5qb2luKCk7aWYodm9pZCAwPT09VS5kZWZhdWx0QnVmZmVyJiYoVS5kZWZhdWx0QnVmZmVy'@;
put 'PXRoaXMuX2VuY29kZVZhbHVlKFUuZGVmYXVsdCxZLFgpLmpvaW4oKSksZWUubGVuZ3RoIT09VS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IocT0wO3E8ZWUubGVuZ3RoO3ErKylpZihlZVtxXSE9PVUuZGVmYXVsdEJ1ZmZlcltxXSlyZXR1cm4hMTtyZXR1cm4hMH19LDY1Nzk6'@;
put 'KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PU87ei5kZXI9Uig2OTg0KSx6LnBlbT1SKDI4ODMpfSwyODgzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9Uig2OTg0KTtmdW5jdGlvbiBJKGspe0suY2FsbCh0aGlzLGspLHRoaXMuZW5jPSJwZW0ifXooSSxL'@;
put 'KSxNLmV4cG9ydHM9SSxJLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oayxFKXtjb25zdCBqPUsucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsaykudG9TdHJpbmcoImJhc2U2NCIpLFY9WyItLS0tLUJFR0lOICIrRS5sYWJlbCsiLS0tLS0iXTtmb3IobGV0IEI9MDtCPGoubGVuZ3RoO0Ir'@;
put 'PTY0KVYucHVzaChqLnNsaWNlKEIsQis2NCkpO3JldHVybiBWLnB1c2goIi0tLS0tRU5EICIrRS5sYWJlbCsiLS0tLS0iKSxWLmpvaW4oIlxuIil9fSw0NTkwOmZ1bmN0aW9uKE0sTyxSKXshZnVuY3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5l'@;
put 'dyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlwZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lm'@;
put 'KEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmpl'@;
put 'Y3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjpSKDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFy'@;
put 'Q29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRo'@;
put 'Lm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcuY2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmpl'@;
put 'Y3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5w'@;
put 'cm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMp'@;
put 'JiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1T'@;
put 'JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUw'@;
put 'MzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09'@;
put 'UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0'@;
put 'aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3Yt'@;
put 'PTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0'@;
put 'aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlv'@;
put 'bihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5n'@;
put 'dGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0'@;
put 'aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9'@;
put 'MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3IodmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3Ro'@;
put 'aXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lh'@;
put 'ZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0'@;
put 'aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jk'@;
put 'c1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9u'@;
put 'b3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5n'@;
put 'KDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs'@;
put 'NSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3'@;
put 'MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMs'@;
put 'Uyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZh'@;
put 'ciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExlPTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09l'@;
put 'XSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRzW2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9'@;
put 'PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5n'@;
put 'dGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0yNiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0y'@;
put 'JiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0'@;
put 'aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0'@;
put 'aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+'@;
put 'MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihn'@;
put 'LEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxpa2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2'@;
put 'PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJKHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGco'@;
put 'cCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKysp'@;
put 'dz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09d31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihT'@;
put 'Kz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMr'@;
put 'PTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEoMTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3Ro'@;
put 'aXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29y'@;
put 'ZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl'@;
put 'P3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5j'@;
put 'dGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUu'@;
put 'cHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlw'@;
put 'KCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNs'@;
put 'b25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3Ro'@;
put 'PmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9'@;
put 'PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7'@;
put 'Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5w'@;
put 'cm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25l'@;
put 'KCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9m'@;
put 'IGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUyNjt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3Zd'@;
put 'JjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1n'@;
put 'JTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09'@;
put 'Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZl'@;
put 'PTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zv'@;
put 'cig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMp'@;
put 'Zm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5l'@;
put 'Z2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnBy'@;
put 'b3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChn'@;
put 'KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0w'@;
put 'LEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pLSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZD'@;
put 'O2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5w'@;
put 'cm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFd'@;
put 'LGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5MSZLZSxRZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04'@;
put 'MTkxJk1lLHplPU1lPj4+MTMsb3Q9MHxKWzddLHV0PTgxOTEmb3QsTXQ9b3Q+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkx'@;
put 'JkhuLGZuPUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkx'@;
put 'JkluLHluPUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMsUm49MHxuZVs4XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFy'@;
put 'PShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUs'@;
put 'ZW4pLHA9KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5pbXVsKFdlLGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8'@;
put 'MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoUWUsZW4pfDAsdz1NYXRoLmltdWwoUWUsJG4pLHY9ditNYXRoLmltdWwoamUs'@;
put 'ZnQpfDAscD0ocD1wK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3Qp'@;
put 'fDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0'@;
put 'aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4pfDApK01hdGguaW11bChRZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFFlLGZuKXwwLHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChMZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1uKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8'@;
put 'MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUsd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFlLHd0KXwwLHc9dytNYXRoLmltdWwoUWUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStN'@;
put 'YXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSxtbil8MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUs'@;
put 'UXQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChU'@;
put 'ZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmltdWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChRZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFFlLG1uKXwwLHY9ditNYXRoLmltdWwoamUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsUXQpfDA7dmFy'@;
put 'IG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0'@;
put 'LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQp'@;
put 'fDAsdz13K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0aC5pbXVsKFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11bChRZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFF0KXwwLHY9ditNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8'@;
put 'MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2UsWXQpfDA7dmFyIEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVs'@;
put 'KEZlLHluKXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxO'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmltdWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFF0KXww'@;
put 'LHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKFFlLHB0KXwwLHc9dytNYXRoLmltdWwoUWUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13'@;
put 'K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhx'@;
put 'aT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxlbikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10'@;
put 'LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGguaW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUs'@;
put 'bW4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVsKGh0LG1uKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsUXQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFFlLHluKXwwLHY9ditN'@;
put 'YXRoLmltdWwoamUsc24pfDAscD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRo'@;
put 'LmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFBuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJu'@;
put 'LCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXww'@;
put 'LHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChEZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDAp'@;
put 'K01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFF0KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsdz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCx3PXcrTWF0aC5pbXVsKFFlLEJuKXwwLHY9ditNYXRoLmlt'@;
put 'dWwoamUsJHQpfDAscD0ocD1wK01hdGguaW11bChqZSxQbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsUG4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwo'@;
put 'RmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2'@;
put 'PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytN'@;
put 'YXRoLmltdWwoTXQsbW4pfDAsdj12K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGgu'@;
put 'aW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01hdGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChRZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFBuKXwwO3ZhciBybz0oZmUrKHY9ditN'@;
put 'YXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0'@;
put 'LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChibix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0'@;
put 'aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUXQpfDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LFF0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChx'@;
put 'ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRoLmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsUG4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmltdWwoUWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1u'@;
put 'KSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLG1uKSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUXQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFF0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxQbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUs'@;
put 'UG4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9'@;
put 'NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5pbXVsKFV0LFF0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLFF0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAscD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmlt'@;
put 'dWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYrTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFBuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDAp'@;
put 'KygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChV'@;
put 'dCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChibixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsUG4pfDA7dmFyIHlyPShm'@;
put 'ZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRo'@;
put 'LmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXww'@;
put 'LHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxQbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsUG4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXww'@;
put 'KStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5p'@;
put 'bXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFBuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxQbikpK01hdGguaW11bChibiwkdCl8'@;
put 'MCx3PU1hdGguaW11bChibixQbik7dmFyIGhzPShmZSsodj12K01hdGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSso'@;
put 'aHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1NYXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJz'@;
put 'Pj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdpLGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVb'@;
put 'MTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAhPT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0'@;
put 'ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0'@;
put 'aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxlbmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1N'@;
put 'YXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXww'@;
put 'KT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9'@;
put 'bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxw'@;
put 'PTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24o'@;
put 'ZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZl'@;
put 'LE9lPTA7T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0sV2U9dlt4ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLFFlPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1RZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pd'@;
put 'PVdlLVllLE9lIT09bmUmJihRZT1kZSpMZS1mZSpGZSxGZT1kZSpGZStmZSpMZSxMZT1RZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsx'@;
put 'K3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9y'@;
put 'bWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0wO3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2Uu'@;
put 'cHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTIm'@;
put 'cCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCks'@;
put 'cD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcgQXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEz'@;
put 'YihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVb'@;
put 'T2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0rZGVbT2VdKnhlW09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNi'@;
put 'KEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxl'@;
put 'bmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4'@;
put 'ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFy'@;
put 'IEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJpdExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgx'@;
put 'KTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNbdl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNo'@;
put 'bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndv'@;
put 'cmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4yNi1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRo'@;
put 'aXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7'@;
put 'SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2Rl'@;
put 'PHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUubGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRz'@;
put 'WzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhpcy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUu'@;
put 'd29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxT'@;
put 'KX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4h'@;
put 'KHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9u'@;
put 'bHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJp'@;
put 'cCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRo'@;
put 'aXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5f'@;
put 'aWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRz'@;
put 'W0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFk'@;
put 'ZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNb'@;
put 'MF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7'@;
put 'dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109'@;
put 'NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5z'@;
put 'dHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVu'@;
put 'Z3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgp'@;
put 'Ll9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYmKHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3Io'@;
put 'TGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4g'@;
put 'SiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1TJiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5l'@;
put 'dyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0p'@;
put 'OjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwi'@;
put 'ZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhp'@;
put 'cy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3Zh'@;
put 'ciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1v'@;
put 'ZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtm'@;
put 'b3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7'@;
put 'Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpDO3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1'@;
put 'bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNF'@;
put 'dmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMu'@;
put 'aXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2RkKCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNo'@;
put 'cm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkmJih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1y'@;
put 'ZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIg'@;
put 'dixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAu'@;
put 'aWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTshKFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyks'@;
put 'cC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJuKHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJu'@;
put 'IHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJu'@;
put 'KDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRs'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhp'@;
put 'cy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3Ro'@;
put 'KyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09'@;
put 'dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhp'@;
put 'cy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4g'@;
put 'MCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9'@;
put 'MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1wKXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'MT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMu'@;
put 'Y21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxF'@;
put 'LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21S'@;
put 'ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVk'@;
put 'PWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlz'@;
put 'LnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlh'@;
put 'ZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhp'@;
put 'cy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5z'@;
put 'aGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11'@;
put 'bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJl'@;
put 'ZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt'@;
put 'YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0'@;
put 'aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUu'@;
put 'cmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJl'@;
put 'ZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1u'@;
put 'ZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxs'@;
put 'KHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZm'@;
put 'ZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1m'@;
put 'dW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMu'@;
put 'ci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJv'@;
put 'dG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9'@;
put 'KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5z'@;
put 'dHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0'@;
put 'PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jk'@;
put 'c1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxj'@;
put 'ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYp'@;
put 'LEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3Io'@;
put 'dmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5KigwfGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJl'@;
put 'dHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJu'@;
put 'IGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0'@;
put 'aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhp'@;
put 'cyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92'@;
put 'ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhp'@;
put 'cy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4g'@;
put 'dGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVy'@;
put 'aWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlv'@;
put 'bihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7'@;
put 'IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNocm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIq'@;
put 'ZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSkuY21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2'@;
put 'YXIgT2U9TGUsamU9MDswIT09T2UuY21wKHcpO2plKyspT2U9T2UucmVkU3FyKCk7SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4'@;
put 'ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlz'@;
put 'WmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNb'@;
put 'di0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlz'@;
put 'LnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0p'@;
put 'O3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rp'@;
put 'b24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1'@;
put 'c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVy'@;
put 'bygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNt'@;
put 'cCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VS'@;
put 'ZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSw5MjgyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCk7ZnVuY3Rpb24gSShmZSl7cmV0dXJuKEk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/'@;
put 'ZnVuY3Rpb24oeGUpe3JldHVybiB0eXBlb2YgeGV9OmZ1bmN0aW9uKHhlKXtyZXR1cm4geGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnhlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ4ZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHhlfSkoZmUpfXZhciBrLEUsaj1S'@;
put 'KDIxMzYpLmNvZGVzLFY9ai5FUlJfQU1CSUdVT1VTX0FSR1VNRU5ULEI9ai5FUlJfSU5WQUxJRF9BUkdfVFlQRSxZPWouRVJSX0lOVkFMSURfQVJHX1ZBTFVFLFg9ai5FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsVT1qLkVSUl9NSVNTSU5HX0FSR1MscT1SKDU5NjEpLGVlPVIoOTUzOSkuaW5z'@;
put 'cGVjdCx0ZT1SKDk1MzkpLnR5cGVzLG9lPXRlLmlzUHJvbWlzZSxzZT10ZS5pc1JlZ0V4cCxoZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ246Uig4MDkxKS5hc3NpZ24sdWU9T2JqZWN0LmlzP09iamVjdC5pczpSKDYwOSk7ZnVuY3Rpb24gY2UoKXt2YXIgZmU9Uig5MTU4KTtrPWZlLmlz'@;
put 'RGVlcEVxdWFsLEU9ZmUuaXNEZWVwU3RyaWN0RXF1YWx9dmFyIEc9ITEsYj1NLmV4cG9ydHM9ZyxEPXt9O2Z1bmN0aW9uIEgoZmUpe3Rocm93IGZlLm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcj9mZS5tZXNzYWdlOm5ldyBxKGZlKX1mdW5jdGlvbiBOKGZlLHhlLExlLEZlKXtpZighTGUpe3Zh'@;
put 'ciBPZT0hMTtpZigwPT09eGUpT2U9ITAsRmU9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKEZlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgRmU7dmFyIGplPW5ldyBxKHthY3R1YWw6TGUsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpGZSxvcGVyYXRvcjoi'@;
put 'PT0iLHN0YWNrU3RhcnRGbjpmZX0pO3Rocm93IGplLmdlbmVyYXRlZE1lc3NhZ2U9T2UsamV9fWZ1bmN0aW9uIGcoKXtmb3IodmFyIGZlPWFyZ3VtZW50cy5sZW5ndGgseGU9bmV3IEFycmF5KGZlKSxMZT0wO0xlPGZlO0xlKyspeGVbTGVdPWFyZ3VtZW50c1tMZV07Ti5hcHBseSh2b2lkIDAs'@;
put 'W2cseGUubGVuZ3RoXS5jb25jYXQoeGUpKX1iLmZhaWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUsT2UsamUpe3ZhciBXZSxLZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1LZT9XZT0iRmFpbGVkIjoxPT09S2U/KEZlPXhlLHhlPXZvaWQgMCk6KCExPT09RyYmKEc9ITAsKHouZW1pdFdhcm5pbmc/'@;
put 'ei5lbWl0V2FybmluZzpLLndhcm4uYmluZChLKSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0aW9u'@;
put 'V2FybmluZyIsIkRFUDAwOTQiKSksMj09PUtlJiYoT2U9IiE9IikpLEZlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgRmU7dmFyIFllPXthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsb3BlcmF0b3I6dm9pZCAwPT09T2U/ImZhaWwiOk9lLHN0YWNrU3RhcnRGbjpqZXx8ZmV9O3ZvaWQgMCE9PUZlJiYo'@;
put 'WWUubWVzc2FnZT1GZSk7dmFyIFFlPW5ldyBxKFllKTt0aHJvdyBXZSYmKFFlLm1lc3NhZ2U9V2UsUWUuZ2VuZXJhdGVkTWVzc2FnZT0hMCksUWV9LGIuQXNzZXJ0aW9uRXJyb3I9cSxiLm9rPWcsYi5lcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRo'@;
put 'cm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3hlIT1MZSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46ZmV9KX0sYi5ub3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRo'@;
put 'cm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3hlPT1MZSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46ZmV9KX0sYi5kZWVwRXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0'@;
put 'aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1rJiZjZSgpLGsoeGUsTGUpfHxIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoiZGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46ZmV9KX0sYi5ub3REZWVwRXF1YWw9ZnVuY3Rpb24gZmUoeGUs'@;
put 'TGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1rJiZjZSgpLGsoeGUsTGUpJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46ZmV9'@;
put 'KX0sYi5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1rJiZjZSgpLEUoeGUsTGUpfHxIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVy'@;
put 'YXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46ZmV9KX0sYi5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1rJiZjZSgpLEUoeGUsTGUp'@;
put 'JiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46ZmV9KX0sYi5zdHJpY3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwi'@;
put 'LCJleHBlY3RlZCIpO3VlKHhlLExlKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6InN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46ZmV9KX0sYi5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRo'@;
put 'cm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3VlKHhlLExlKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG1lc3NhZ2U6RmUsb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46ZmV9KX07dmFyIEM9ZnVuY3Rpb24gZmUoeGUsTGUsRmUpe3ZhciBPZT10aGlzOyhm'@;
put 'dW5jdGlvbihqZSxXZSl7aWYoIShqZSBpbnN0YW5jZW9mIFdlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsZmUpLExlLmZvckVhY2goZnVuY3Rpb24oamUpe2plIGluIHhlJiYoT2VbamVdPXZvaWQgMCE9PUZlJiYic3Ry'@;
put 'aW5nIj09dHlwZW9mIEZlW2plXSYmc2UoeGVbamVdKSYmeGVbamVdLnRlc3QoRmVbamVdKT9GZVtqZV06eGVbamVdKX0pfTtmdW5jdGlvbiBTKGZlLHhlLExlLEZlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgeGUpe2lmKHNlKHhlKSlyZXR1cm4geGUudGVzdChmZSk7aWYoMj09PWFyZ3VtZW50'@;
put 'cy5sZW5ndGgpdGhyb3cgbmV3IEIoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0seGUpO2lmKCJvYmplY3QiIT09SShmZSl8fG51bGw9PT1mZSl7dmFyIE9lPW5ldyBxKHthY3R1YWw6ZmUsZXhwZWN0ZWQ6eGUsbWVzc2FnZTpMZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixz'@;
put 'dGFja1N0YXJ0Rm46RmV9KTt0aHJvdyBPZS5vcGVyYXRvcj1GZS5uYW1lLE9lfXZhciBqZT1PYmplY3Qua2V5cyh4ZSk7aWYoeGUgaW5zdGFuY2VvZiBFcnJvcilqZS5wdXNoKCJuYW1lIiwibWVzc2FnZSIpO2Vsc2UgaWYoMD09PWplLmxlbmd0aCl0aHJvdyBuZXcgWSgiZXJyb3IiLHhlLCJt'@;
put 'YXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1rJiZjZSgpLGplLmZvckVhY2goZnVuY3Rpb24oV2UpeyJzdHJpbmciPT10eXBlb2YgZmVbV2VdJiZzZSh4ZVtXZV0pJiZ4ZVtXZV0udGVzdChmZVtXZV0pfHxmdW5jdGlvbihLZSxZZSxRZSxsdCxQZSxiZSl7aWYo'@;
put 'IShRZSBpbiBLZSl8fCFFKEtlW1FlXSxZZVtRZV0pKXtpZighbHQpe3ZhciBBZT1uZXcgQyhLZSxQZSksVGU9bmV3IEMoWWUsUGUsS2UpLHFlPW5ldyBxKHthY3R1YWw6QWUsZXhwZWN0ZWQ6VGUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOmJlfSk7dGhyb3cgcWUu'@;
put 'YWN0dWFsPUtlLHFlLmV4cGVjdGVkPVllLHFlLm9wZXJhdG9yPWJlLm5hbWUscWV9SCh7YWN0dWFsOktlLGV4cGVjdGVkOlllLG1lc3NhZ2U6bHQsb3BlcmF0b3I6YmUubmFtZSxzdGFja1N0YXJ0Rm46YmV9KX19KGZlLHhlLFdlLExlLGplLEZlKX0pLCEwfXJldHVybiB2b2lkIDAhPT14ZS5w'@;
put 'cm90b3R5cGUmJmZlIGluc3RhbmNlb2YgeGV8fCFFcnJvci5pc1Byb3RvdHlwZU9mKHhlKSYmITA9PT14ZS5jYWxsKHt9LGZlKX1mdW5jdGlvbiB2KGZlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZmUpdGhyb3cgbmV3IEIoImZuIiwiRnVuY3Rpb24iLGZlKTt0cnl7ZmUoKX1jYXRjaCh4ZSl7'@;
put 'cmV0dXJuIHhlfXJldHVybiBEfWZ1bmN0aW9uIHAoZmUpe3JldHVybiBvZShmZSl8fG51bGwhPT1mZSYmIm9iamVjdCI9PT1JKGZlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGZlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBmZS5jYXRjaH1mdW5jdGlvbiB3KGZlKXtyZXR1cm4gUHJvbWlzZS5y'@;
put 'ZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciB4ZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZmUpe2lmKCFwKHhlPWZlKCkpKXRocm93IG5ldyBYKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwicHJvbWlzZUZuIix4ZSl9ZWxzZXtpZighcChmZSkpdGhyb3cgbmV3IEIoInByb21pc2VGbiIsWyJG'@;
put 'dW5jdGlvbiIsIlByb21pc2UiXSxmZSk7eGU9ZmV9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geGV9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIER9KS5jYXRjaChmdW5jdGlvbihMZSl7cmV0dXJuIExlfSl9KX1mdW5jdGlvbiBKKGZlLHhlLExlLEZl'@;
put 'KXtpZigic3RyaW5nIj09dHlwZW9mIExlKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgQigiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLExlKTtpZigib2JqZWN0Ij09PUkoeGUpJiZudWxsIT09eGUpe2lmKHhlLm1lc3NhZ2U9PT1MZSl0'@;
put 'aHJvdyBuZXcgVigiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdCh4ZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZih4ZT09PUxlKXRocm93IG5ldyBWKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNh'@;
put 'dCh4ZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO0ZlPUxlLExlPXZvaWQgMH1lbHNlIGlmKG51bGwhPUxlJiYib2JqZWN0IiE9PUkoTGUpJiYiZnVuY3Rpb24iIT10eXBlb2YgTGUpdGhyb3cgbmV3IEIoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJS'@;
put 'ZWdFeHAiXSxMZSk7aWYoeGU9PT1EKXt2YXIgT2U9IiI7TGUmJkxlLm5hbWUmJihPZSs9IiAoIi5jb25jYXQoTGUubmFtZSwiKSIpKSxPZSs9RmU/IjogIi5jb25jYXQoRmUpOiIuIixIKHthY3R1YWw6dm9pZCAwLGV4cGVjdGVkOkxlLG9wZXJhdG9yOmZlLm5hbWUsbWVzc2FnZToiTWlzc2lu'@;
put 'ZyBleHBlY3RlZCAiLmNvbmNhdCgicmVqZWN0cyI9PT1mZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQoT2UpLHN0YWNrU3RhcnRGbjpmZX0pfWlmKExlJiYhUyh4ZSxMZSxGZSxmZSkpdGhyb3cgeGV9ZnVuY3Rpb24gbmUoZmUseGUsTGUsRmUpe2lmKHhlIT09RCl7aWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiBMZSYmKEZlPUxlLExlPXZvaWQgMCksIUxlfHxTKHhlLExlKSl7dmFyIE9lPUZlPyI6ICIuY29uY2F0KEZlKToiLiI7SCh7YWN0dWFsOnhlLGV4cGVjdGVkOkxlLG9wZXJhdG9yOmZlLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90'@;
put 'UmVqZWN0Ij09PWZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChPZSwiXG4iKSsnQWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdCh4ZSYmeGUubWVzc2FnZSwnIicpLHN0YWNrU3RhcnRGbjpmZX0pfXRocm93IHhlfX1mdW5jdGlvbiBkZSgpe2Zvcih2YXIgZmU9YXJndW1l'@;
put 'bnRzLmxlbmd0aCx4ZT1uZXcgQXJyYXkoZmUpLExlPTA7TGU8ZmU7TGUrKyl4ZVtMZV09YXJndW1lbnRzW0xlXTtOLmFwcGx5KHZvaWQgMCxbZGUseGUubGVuZ3RoXS5jb25jYXQoeGUpKX1iLnRocm93cz1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBMZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5l'@;
put 'dyBBcnJheShMZT4xP0xlLTE6MCksT2U9MTtPZTxMZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07Si5hcHBseSh2b2lkIDAsW2ZlLHYoeGUpXS5jb25jYXQoRmUpKX0sYi5yZWplY3RzPWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFycmF5'@;
put 'KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtyZXR1cm4gdyh4ZSkudGhlbihmdW5jdGlvbihqZSl7cmV0dXJuIEouYXBwbHkodm9pZCAwLFtmZSxqZV0uY29uY2F0KEZlKSl9KX0sYi5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2'@;
put 'YXIgTGU9YXJndW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXkoTGU+MT9MZS0xOjApLE9lPTE7T2U8TGU7T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO25lLmFwcGx5KHZvaWQgMCxbZmUsdih4ZSldLmNvbmNhdChGZSkpfSxiLmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2'@;
put 'YXIgTGU9YXJndW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXkoTGU+MT9MZS0xOjApLE9lPTE7T2U8TGU7T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO3JldHVybiB3KHhlKS50aGVuKGZ1bmN0aW9uKGplKXtyZXR1cm4gbmUuYXBwbHkodm9pZCAwLFtmZSxqZV0uY29uY2F0KEZlKSl9KX0s'@;
put 'Yi5pZkVycm9yPWZ1bmN0aW9uIGZlKHhlKXtpZihudWxsIT14ZSl7dmFyIExlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1JKHhlKSYmInN0cmluZyI9PXR5cGVvZiB4ZS5tZXNzYWdlP0xlKz0wPT09eGUubWVzc2FnZS5sZW5ndGgmJnhlLmNvbnN0cnVj'@;
put 'dG9yP3hlLmNvbnN0cnVjdG9yLm5hbWU6eGUubWVzc2FnZTpMZSs9ZWUoeGUpO3ZhciBGZT1uZXcgcSh7YWN0dWFsOnhlLGV4cGVjdGVkOm51bGwsb3BlcmF0b3I6ImlmRXJyb3IiLG1lc3NhZ2U6TGUsc3RhY2tTdGFydEZuOmZlfSksT2U9eGUuc3RhY2s7aWYoInN0cmluZyI9PXR5cGVvZiBP'@;
put 'ZSl7dmFyIGplPU9lLnNwbGl0KCJcbiIpO2plLnNoaWZ0KCk7Zm9yKHZhciBXZT1GZS5zdGFjay5zcGxpdCgiXG4iKSxLZT0wO0tlPGplLmxlbmd0aDtLZSsrKXt2YXIgWWU9V2UuaW5kZXhPZihqZVtLZV0pO2lmKC0xIT09WWUpe1dlPVdlLnNsaWNlKDAsWWUpO2JyZWFrfX1GZS5zdGFjaz0i'@;
put 'Ii5jb25jYXQoV2Uuam9pbigiXG4iKSwiXG4iKS5jb25jYXQoamUuam9pbigiXG4iKSl9dGhyb3cgRmV9fSxiLnN0cmljdD1oZShkZSxiLHtlcXVhbDpiLnN0cmljdEVxdWFsLGRlZXBFcXVhbDpiLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDpiLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVh'@;
put 'bDpiLm5vdERlZXBTdHJpY3RFcXVhbH0pLGIuc3RyaWN0LnN0cmljdD1iLnN0cmljdH0sNTk2MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhOLGcsQyl7cmV0dXJuIGcgaW4gTj9PYmplY3QuZGVmaW5lUHJvcGVydHkoTixnLHt2YWx1ZTpDLGVudW1l'@;
put 'cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6TltnXT1DLE59ZnVuY3Rpb24gayhOLGcpe3JldHVybiFnfHwib2JqZWN0IiE9PVgoZykmJiJmdW5jdGlvbiIhPXR5cGVvZiBnP0UoTik6Z31mdW5jdGlvbiBFKE4pe2lmKHZvaWQgMD09PU4pdGhyb3cgbmV3IFJlZmVyZW5j'@;
put 'ZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gTn1mdW5jdGlvbiBqKE4pe3ZhciBnPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lkIDA7cmV0dXJuIGo9ZnVuY3Rpb24oQyl7aWYobnVsbD09'@;
put 'PUN8fC0xPT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChDKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikpcmV0dXJuIEM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEMpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24i'@;
put 'KTtpZih2b2lkIDAhPT1nKXtpZihnLmhhcyhDKSlyZXR1cm4gZy5nZXQoQyk7Zy5zZXQoQyx2KX1mdW5jdGlvbiB2KCl7cmV0dXJuIFYoQyxhcmd1bWVudHMsWSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIHYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQy5wcm90b3R5cGUse2NvbnN0cnVj'@;
put 'dG9yOnt2YWx1ZTp2LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEIodixDKX0saihOKX1mdW5jdGlvbiBWKE4sZyxDKXtyZXR1cm4oVj1mdW5jdGlvbigpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0'@;
put 'cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSxbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk/UmVmbGVj'@;
put 'dC5jb25zdHJ1Y3Q6ZnVuY3Rpb24oUyx2LHApe3ZhciB3PVtudWxsXTt3LnB1c2guYXBwbHkodyx2KTt2YXIgSj1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShTLHcpKTtyZXR1cm4gcCYmQihKLHAucHJvdG90eXBlKSxKfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIEIoTixnKXty'@;
put 'ZXR1cm4oQj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKEMsUyl7cmV0dXJuIEMuX19wcm90b19fPVMsQ30pKE4sZyl9ZnVuY3Rpb24gWShOKXtyZXR1cm4oWT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGcpe3JldHVybiBnLl9f'@;
put 'cHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGcpfSkoTil9ZnVuY3Rpb24gWChOKXtyZXR1cm4oWD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihnKXtyZXR1cm4gdHlwZW9mIGd9OmZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiBnJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZnLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZnIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZ30pKE4pfXZhciBVPVIoOTUzOSkuaW5zcGVjdCxxPVIoMjEzNikuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZUEU7ZnVu'@;
put 'Y3Rpb24gZWUoTixnLEMpe3JldHVybih2b2lkIDA9PT1DfHxDPk4ubGVuZ3RoKSYmKEM9Ti5sZW5ndGgpLE4uc3Vic3RyaW5nKEMtZy5sZW5ndGgsQyk9PT1nfXZhciB0ZT0iIixvZT0iIixzZT0iIixoZT0iIix1ZT17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3Ry'@;
put 'aWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVk'@;
put 'IHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1'@;
put 'YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmljdGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBu'@;
put 'b3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOicsbm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBHKE4pe3ZhciBn'@;
put 'PU9iamVjdC5rZXlzKE4pLEM9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoTikpO3JldHVybiBnLmZvckVhY2goZnVuY3Rpb24oUyl7Q1tTXT1OW1NdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEMsIm1lc3NhZ2UiLHt2YWx1ZTpOLm1lc3NhZ2V9KSxDfWZ1bmN0aW9uIGIo'@;
put 'Til7cmV0dXJuIFUoTix7Y29tcGFjdDohMSxjdXN0b21JbnNwZWN0OiExLGRlcHRoOjFlMyxtYXhBcnJheUxlbmd0aDoxLzAsc2hvd0hpZGRlbjohMSxicmVha0xlbmd0aDoxLzAsc2hvd1Byb3h5OiExLHNvcnRlZDohMCxnZXR0ZXJzOiEwfSl9dmFyIEg9ZnVuY3Rpb24oTil7ZnVuY3Rpb24g'@;
put 'ZyhwKXt2YXIgdztpZihmdW5jdGlvbihZZSxRZSl7aWYoIShZZSBpbnN0YW5jZW9mIFFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxnKSwib2JqZWN0IiE9PVgocCl8fG51bGw9PT1wKXRocm93IG5ldyBxKCJvcHRpb25z'@;
put 'IiwiT2JqZWN0IixwKTt2YXIgSj1wLm1lc3NhZ2UsbmU9cC5vcGVyYXRvcixkZT1wLnN0YWNrU3RhcnRGbixmZT1wLmFjdHVhbCx4ZT1wLmV4cGVjdGVkLExlPUVycm9yLnN0YWNrVHJhY2VMaW1pdDtpZihFcnJvci5zdGFja1RyYWNlTGltaXQ9MCxudWxsIT1KKXc9ayh0aGlzLFkoZykuY2Fs'@;
put 'bCh0aGlzLFN0cmluZyhKKSkpO2Vsc2UgaWYoei5zdGRlcnImJnouc3RkZXJyLmlzVFRZJiYoei5zdGRlcnImJnouc3RkZXJyLmdldENvbG9yRGVwdGgmJjEhPT16LnN0ZGVyci5nZXRDb2xvckRlcHRoKCk/KHRlPSJceDFiWzM0bSIsb2U9Ilx4MWJbMzJtIixoZT0iXHgxYlszOW0iLHNlPSJc'@;
put 'eDFiWzMxbSIpOih0ZT0iIixvZT0iIixoZT0iIixzZT0iIikpLCJvYmplY3QiPT09WChmZSkmJm51bGwhPT1mZSYmIm9iamVjdCI9PT1YKHhlKSYmbnVsbCE9PXhlJiYic3RhY2siaW4gZmUmJmZlIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiB4ZSYmeGUgaW5zdGFuY2VvZiBFcnJvciYm'@;
put 'KGZlPUcoZmUpLHhlPUcoeGUpKSwiZGVlcFN0cmljdEVxdWFsIj09PW5lfHwic3RyaWN0RXF1YWwiPT09bmUpdz1rKHRoaXMsWShnKS5jYWxsKHRoaXMsZnVuY3Rpb24gRChOLGcsQyl7dmFyIFM9IiIsdj0iIixwPTAsdz0iIixKPSExLG5lPWIoTiksZGU9bmUuc3BsaXQoIlxuIiksZmU9Yihn'@;
put 'KS5zcGxpdCgiXG4iKSx4ZT0wLExlPSIiO2lmKCJzdHJpY3RFcXVhbCI9PT1DJiYib2JqZWN0Ij09PVgoTikmJiJvYmplY3QiPT09WChnKSYmbnVsbCE9PU4mJm51bGwhPT1nJiYoQz0ic3RyaWN0RXF1YWxPYmplY3QiKSwxPT09ZGUubGVuZ3RoJiYxPT09ZmUubGVuZ3RoJiZkZVswXSE9PWZl'@;
put 'WzBdKXt2YXIgRmU9ZGVbMF0ubGVuZ3RoK2ZlWzBdLmxlbmd0aDtpZihGZTw9MTApe2lmKCEoIm9iamVjdCI9PT1YKE4pJiZudWxsIT09Tnx8Im9iamVjdCI9PT1YKGcpJiZudWxsIT09Z3x8MD09PU4mJjA9PT1nKSlyZXR1cm4iIi5jb25jYXQodWVbQ10sIlxuXG4iKSsiIi5jb25jYXQoZGVb'@;
put 'MF0sIiAhPT0gIikuY29uY2F0KGZlWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PUMmJkZlPCh6LnN0ZGVyciYmei5zdGRlcnIuaXNUVFk/ei5zdGRlcnIuY29sdW1uczo4MCkpe2Zvcig7ZGVbMF1beGVdPT09ZmVbMF1beGVdOyl4ZSsrO3hlPjImJihMZT0iXG4gICIu'@;
put 'Y29uY2F0KGZ1bmN0aW9uKHFlLFhlKXtpZihYZT1NYXRoLmZsb29yKFhlKSwwPT1xZS5sZW5ndGh8fDA9PVhlKXJldHVybiIiO3ZhciBVZT1xZS5sZW5ndGgqWGU7Zm9yKFhlPU1hdGguZmxvb3IoTWF0aC5sb2coWGUpL01hdGgubG9nKDIpKTtYZTspcWUrPXFlLFhlLS07cmV0dXJuIHFlK3Fl'@;
put 'LnN1YnN0cmluZygwLFVlLXFlLmxlbmd0aCl9KCIgIix4ZSksIl4iKSx4ZT0wKX19Zm9yKHZhciBPZT1kZVtkZS5sZW5ndGgtMV0samU9ZmVbZmUubGVuZ3RoLTFdO09lPT09amUmJih4ZSsrPDI/dz0iXG4gICIuY29uY2F0KE9lKS5jb25jYXQodyk6Uz1PZSxkZS5wb3AoKSxmZS5wb3AoKSww'@;
put 'IT09ZGUubGVuZ3RoJiYwIT09ZmUubGVuZ3RoKTspT2U9ZGVbZGUubGVuZ3RoLTFdLGplPWZlW2ZlLmxlbmd0aC0xXTt2YXIgV2U9TWF0aC5tYXgoZGUubGVuZ3RoLGZlLmxlbmd0aCk7aWYoMD09PVdlKXt2YXIgS2U9bmUuc3BsaXQoIlxuIik7aWYoS2UubGVuZ3RoPjMwKWZvcihLZVsyNl09'@;
put 'IiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpO0tlLmxlbmd0aD4yNzspS2UucG9wKCk7cmV0dXJuIiIuY29uY2F0KHVlLm5vdElkZW50aWNhbCwiXG5cbiIpLmNvbmNhdChLZS5qb2luKCJcbiIpLCJcbiIpfXhlPjMmJih3PSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLmNv'@;
put 'bmNhdCh3KSxKPSEwKSwiIiE9PVMmJih3PSJcbiAgIi5jb25jYXQoUykuY29uY2F0KHcpLFM9IiIpO3ZhciBZZT0wLFFlPXVlW0NdKyJcbiIuY29uY2F0KG9lLCIrIGFjdHVhbCIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChzZSwiLSBleHBlY3RlZCIpLmNvbmNhdChoZSksbHQ9IiAiLmNvbmNh'@;
put 'dCh0ZSwiLi4uIikuY29uY2F0KGhlLCIgTGluZXMgc2tpcHBlZCIpO2Zvcih4ZT0wO3hlPFdlO3hlKyspe3ZhciBQZT14ZS1wO2lmKGRlLmxlbmd0aDx4ZSsxKVBlPjEmJnhlPjImJihQZT40Pyh2Kz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKSxKPSEwKTpQZT4zJiYodis9Ilxu'@;
put 'ICAiLmNvbmNhdChmZVt4ZS0yXSksWWUrKyksdis9IlxuICAiLmNvbmNhdChmZVt4ZS0xXSksWWUrKykscD14ZSxTKz0iXG4iLmNvbmNhdChzZSwiLSIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChmZVt4ZV0pLFllKys7ZWxzZSBpZihmZS5sZW5ndGg8eGUrMSlQZT4xJiZ4ZT4yJiYoUGU+ND8o'@;
put 'dis9IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSksSj0hMCk6UGU+MyYmKHYrPSJcbiAgIi5jb25jYXQoZGVbeGUtMl0pLFllKyspLHYrPSJcbiAgIi5jb25jYXQoZGVbeGUtMV0pLFllKyspLHA9eGUsdis9IlxuIi5jb25jYXQob2UsIisiKS5jb25jYXQoaGUsIiAiKS5jb25jYXQo'@;
put 'ZGVbeGVdKSxZZSsrO2Vsc2V7dmFyIGJlPWZlW3hlXSxBZT1kZVt4ZV0sVGU9QWUhPT1iZSYmKCFlZShBZSwiLCIpfHxBZS5zbGljZSgwLC0xKSE9PWJlKTtUZSYmZWUoYmUsIiwiKSYmYmUuc2xpY2UoMCwtMSk9PT1BZSYmKFRlPSExLEFlKz0iLCIpLFRlPyhQZT4xJiZ4ZT4yJiYoUGU+ND8o'@;
put 'dis9IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSksSj0hMCk6UGU+MyYmKHYrPSJcbiAgIi5jb25jYXQoZGVbeGUtMl0pLFllKyspLHYrPSJcbiAgIi5jb25jYXQoZGVbeGUtMV0pLFllKyspLHA9eGUsdis9IlxuIi5jb25jYXQob2UsIisiKS5jb25jYXQoaGUsIiAiKS5jb25jYXQo'@;
put 'QWUpLFMrPSJcbiIuY29uY2F0KHNlLCItIikuY29uY2F0KGhlLCIgIikuY29uY2F0KGJlKSxZZSs9Mik6KHYrPVMsUz0iIiwxIT09UGUmJjAhPT14ZXx8KHYrPSJcbiAgIi5jb25jYXQoQWUpLFllKyspKX1pZihZZT4yMCYmeGU8V2UtMilyZXR1cm4iIi5jb25jYXQoUWUpLmNvbmNhdChsdCwi'@;
put 'XG4iKS5jb25jYXQodiwiXG4iKS5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSkuY29uY2F0KFMsIlxuIikrIiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpfXJldHVybiIiLmNvbmNhdChRZSkuY29uY2F0KEo/bHQ6IiIsIlxuIikuY29uY2F0KHYpLmNvbmNhdChTKS5jb25jYXQodyku'@;
put 'Y29uY2F0KExlKX0oZmUseGUsbmUpKSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PW5lfHwibm90U3RyaWN0RXF1YWwiPT09bmUpe3ZhciBGZT11ZVtuZV0sT2U9YihmZSkuc3BsaXQoIlxuIik7aWYoIm5vdFN0cmljdEVxdWFsIj09PW5lJiYib2JqZWN0Ij09PVgoZmUpJiZudWxs'@;
put 'IT09ZmUmJihGZT11ZS5ub3RTdHJpY3RFcXVhbE9iamVjdCksT2UubGVuZ3RoPjMwKWZvcihPZVsyNl09IiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpO09lLmxlbmd0aD4yNzspT2UucG9wKCk7dz1rKHRoaXMsMT09PU9lLmxlbmd0aD9ZKGcpLmNhbGwodGhpcywiIi5jb25jYXQoRmUs'@;
put 'IiAiKS5jb25jYXQoT2VbMF0pKTpZKGcpLmNhbGwodGhpcywiIi5jb25jYXQoRmUsIlxuXG4iKS5jb25jYXQoT2Uuam9pbigiXG4iKSwiXG4iKSkpfWVsc2V7dmFyIGplPWIoZmUpLFdlPSIiLEtlPXVlW25lXTsibm90RGVlcEVxdWFsIj09PW5lfHwibm90RXF1YWwiPT09bmU/KGplPSIiLmNv'@;
put 'bmNhdCh1ZVtuZV0sIlxuXG4iKS5jb25jYXQoamUpKS5sZW5ndGg+MTAyNCYmKGplPSIiLmNvbmNhdChqZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KFdlPSIiLmNvbmNhdChiKHhlKSksamUubGVuZ3RoPjUxMiYmKGplPSIiLmNvbmNhdChqZS5zbGljZSgwLDUwOSksIi4uLiIpKSxXZS5sZW5n'@;
put 'dGg+NTEyJiYoV2U9IiIuY29uY2F0KFdlLnNsaWNlKDAsNTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09bmV8fCJlcXVhbCI9PT1uZT9qZT0iIi5jb25jYXQoS2UsIlxuXG4iKS5jb25jYXQoamUsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6V2U9IiAiLmNvbmNhdChuZSwiICIpLmNvbmNhdChX'@;
put 'ZSkpLHc9ayh0aGlzLFkoZykuY2FsbCh0aGlzLCIiLmNvbmNhdChqZSkuY29uY2F0KFdlKSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9TGUsdy5nZW5lcmF0ZWRNZXNzYWdlPSFKLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShFKHcpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9y'@;
put 'IFtFUlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx3LmNvZGU9IkVSUl9BU1NFUlRJT04iLHcuYWN0dWFsPWZlLHcuZXhwZWN0ZWQ9eGUsdy5vcGVyYXRvcj1uZSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0'@;
put 'YWNrVHJhY2UoRSh3KSxkZSksdy5uYW1lPSJBc3NlcnRpb25FcnJvciIsayh3KX12YXIgUztyZXR1cm4gZnVuY3Rpb24ocCx3KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdyYmbnVsbCE9PXcpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxs'@;
put 'IG9yIGEgZnVuY3Rpb24iKTtwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHcmJncucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6cCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdyYmQihwLHcpfShnLE4pLFM9W3trZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiIiLmNvbmNhdCh0aGlzLm5hbWUsIiBbIikuY29uY2F0KHRoaXMuY29kZSwiXTogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fSx7a2V5OlUuY3VzdG9tLHZhbHVlOmZ1bmN0aW9uKHAsdyl7cmV0dXJuIFUodGhpcyxmdW5jdGlvbihKKXtmb3IodmFyIG5lPTE7bmU8YXJndW1lbnRzLmxl'@;
put 'bmd0aDtuZSsrKXt2YXIgZGU9bnVsbCE9YXJndW1lbnRzW25lXT9hcmd1bWVudHNbbmVdOnt9LGZlPU9iamVjdC5rZXlzKGRlKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGZlPWZlLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xz'@;
put 'KGRlKS5maWx0ZXIoZnVuY3Rpb24oeGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlLHhlKS5lbnVtZXJhYmxlfSkpKSxmZS5mb3JFYWNoKGZ1bmN0aW9uKHhlKXtLKEoseGUsZGVbeGVdKX0pfXJldHVybiBKfSh7fSx3LHtjdXN0b21JbnNwZWN0OiExLGRlcHRo'@;
put 'OjB9KSl9fV0sUyYmZnVuY3Rpb24gSShOLGcpe2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXt2YXIgUz1nW0NdO1MuZW51bWVyYWJsZT1TLmVudW1lcmFibGV8fCExLFMuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBTJiYoUy53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KE4sUy5rZXksUyl9fShnLnByb3RvdHlwZSxTKSxnfShqKEVycm9yKSk7TS5leHBvcnRzPUh9LDIxMzY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KFgpe3JldHVybih6PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9y'@;
put 'P2Z1bmN0aW9uKFUpe3JldHVybiB0eXBlb2YgVX06ZnVuY3Rpb24oVSl7cmV0dXJuIFUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlUuY29uc3RydWN0b3I9PT1TeW1ib2wmJlUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBVfSkoWCl9ZnVuY3Rpb24gSShYKXtyZXR1'@;
put 'cm4oST1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKFUpe3JldHVybiBVLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKFUpfSkoWCl9ZnVuY3Rpb24gayhYLFUpe3JldHVybihrPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rp'@;
put 'b24ocSxlZSl7cmV0dXJuIHEuX19wcm90b19fPWVlLHF9KShYLFUpfXZhciBFLGosVj17fTtmdW5jdGlvbiBCKFgsVSxxKXtxfHwocT1FcnJvcik7dmFyIGVlPWZ1bmN0aW9uKHRlKXtmdW5jdGlvbiBvZShzZSxoZSx1ZSl7dmFyIGNlO3JldHVybiBmdW5jdGlvbihHLGIpe2lmKCEoRyBpbnN0'@;
put 'YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLG9lKSxjZT1mdW5jdGlvbiBLKFgsVSl7cmV0dXJuIVV8fCJvYmplY3QiIT09eihVKSYmImZ1bmN0aW9uIiE9dHlwZW9mIFU/ZnVuY3Rpb24ocSl7aWYodm9pZCAw'@;
put 'PT09cSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBxfShYKTpVfSh0aGlzLEkob2UpLmNhbGwodGhpcywic3RyaW5nIj09dHlwZW9mIFU/VTpVKHNlLGhlLHVlKSkpLGNl'@;
put 'LmNvZGU9WCxjZX1yZXR1cm4gZnVuY3Rpb24oc2UsaGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoZSYmbnVsbCE9PWhlKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7c2UucHJvdG90eXBlPU9iamVjdC5j'@;
put 'cmVhdGUoaGUmJmhlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnNlLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxoZSYmayhzZSxoZSl9KG9lLHRlKSxvZX0ocSk7VltYXT1lZX1mdW5jdGlvbiBZKFgsVSl7aWYoQXJyYXkuaXNBcnJheShYKSl7dmFyIHE9WC5sZW5ndGg7'@;
put 'cmV0dXJuIFg9WC5tYXAoZnVuY3Rpb24oZWUpe3JldHVybiBTdHJpbmcoZWUpfSkscT4yPyJvbmUgb2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChYLnNsaWNlKDAscS0xKS5qb2luKCIsICIpLCIsIG9yICIpK1hbcS0xXToyPT09cT8ib25lIG9mICIuY29uY2F0KFUsIiAiKS5jb25jYXQoWFsw'@;
put 'XSwiIG9yICIpLmNvbmNhdChYWzFdKToib2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChYWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChTdHJpbmcoWCkpfUIoIkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxU'@;
put 'eXBlRXJyb3IpLEIoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihYLFUscSl7dmFyIGVlLHNlLHVlLEc7aWYodm9pZCAwPT09RSYmKEU9Uig5MjgyKSksRSgic3RyaW5nIj09dHlwZW9mIFgsIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBVJiYibm90'@;
put 'ICI9PT1VLnN1YnN0cigwLDQpPyhlZT0ibXVzdCBub3QgYmUiLFU9VS5yZXBsYWNlKC9ebm90IC8sIiIpKTplZT0ibXVzdCBiZSIsdWU9WCwodm9pZCAwPT09R3x8Rz51ZS5sZW5ndGgpJiYoRz11ZS5sZW5ndGgpLCIgYXJndW1lbnQiPT09dWUuc3Vic3RyaW5nKEctOSxHKSlzZT0iVGhlICIu'@;
put 'Y29uY2F0KFgsIiAiKS5jb25jYXQoZWUsIiAiKS5jb25jYXQoWShVLCJ0eXBlIikpO2Vsc2V7dmFyIGhlPWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiJudW1iZXIiIT10eXBlb2YgRyYmKEc9MCksIShHKzE+dWUubGVuZ3RoKSYmLTEhPT11ZS5pbmRleE9mKCIuIixHKX0oWCk/InByb3BlcnR5'@;
put 'IjoiYXJndW1lbnQiO3NlPSdUaGUgIicuY29uY2F0KFgsJyIgJykuY29uY2F0KGhlLCIgIikuY29uY2F0KGVlLCIgIikuY29uY2F0KFkoVSwidHlwZSIpKX1yZXR1cm4gc2UrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh6KHEpKX0sVHlwZUVycm9yKSxCKCJFUlJfSU5WQUxJRF9BUkdfVkFM'@;
put 'VUUiLGZ1bmN0aW9uKFgsVSl7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJpcyBpbnZhbGlkIjt2b2lkIDA9PT1qJiYoaj1SKDk1MzkpKTt2YXIgZWU9ai5pbnNwZWN0KFUpO3JldHVybiBlZS5sZW5ndGg+MTI4JiYoZWU9IiIu'@;
put 'Y29uY2F0KGVlLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KFgsIicgIikuY29uY2F0KHEsIi4gUmVjZWl2ZWQgIikuY29uY2F0KGVlKX0sVHlwZUVycm9yLFJhbmdlRXJyb3IpLEIoIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIsZnVuY3Rpb24oWCxVLHEp'@;
put 'e3ZhciBlZTtyZXR1cm4gZWU9cSYmcS5jb25zdHJ1Y3RvciYmcS5jb25zdHJ1Y3Rvci5uYW1lPyJpbnN0YW5jZSBvZiAiLmNvbmNhdChxLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KHoocSkpLCJFeHBlY3RlZCAiLmNvbmNhdChYLCcgdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUg'@;
put 'IicpLmNvbmNhdChVLCciJykrIiBmdW5jdGlvbiBidXQgZ290ICIuY29uY2F0KGVlLCIuIil9LFR5cGVFcnJvciksQigiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIFg9YXJndW1lbnRzLmxlbmd0aCxVPW5ldyBBcnJheShYKSxxPTA7cTxYO3ErKylVW3FdPWFyZ3VtZW50'@;
put 'c1txXTt2b2lkIDA9PT1FJiYoRT1SKDkyODIpKSxFKFUubGVuZ3RoPjAsIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7dmFyIGVlPSJUaGUgIix0ZT1VLmxlbmd0aDtzd2l0Y2goVT1VLm1hcChmdW5jdGlvbihvZSl7cmV0dXJuJyInLmNvbmNhdChvZSwnIicpfSks'@;
put 'dGUpe2Nhc2UgMTplZSs9IiIuY29uY2F0KFVbMF0sIiBhcmd1bWVudCIpO2JyZWFrO2Nhc2UgMjplZSs9IiIuY29uY2F0KFVbMF0sIiBhbmQgIikuY29uY2F0KFVbMV0sIiBhcmd1bWVudHMiKTticmVhaztkZWZhdWx0OmVlKz1VLnNsaWNlKDAsdGUtMSkuam9pbigiLCAiKSxlZSs9IiwgYW5k'@;
put 'ICIuY29uY2F0KFVbdGUtMV0sIiBhcmd1bWVudHMiKX1yZXR1cm4iIi5jb25jYXQoZWUsIiBtdXN0IGJlIHNwZWNpZmllZCIpfSxUeXBlRXJyb3IpLE0uZXhwb3J0cy5jb2Rlcz1WfSw5MTU4OihNLE8sUik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geihiZSxBZSl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KFRlKXtpZihBcnJheS5pc0FycmF5KFRlKSlyZXR1cm4gVGV9KGJlKXx8ZnVuY3Rpb24oVGUscWUpe3ZhciBYZT1bXSxVZT0hMCxodD0hMSxNZT12b2lkIDA7dHJ5e2Zvcih2YXIgRGUsemU9VGVbU3ltYm9sLml0ZXJhdG9yXSgpOyEoVWU9KERlPXplLm5leHQoKSkuZG9uZSkmJihYZS5wdXNo'@;
put 'KERlLnZhbHVlKSwhcWV8fFhlLmxlbmd0aCE9PXFlKTtVZT0hMCk7fWNhdGNoKG90KXtodD0hMCxNZT1vdH1maW5hbGx5e3RyeXtVZXx8bnVsbD09emUucmV0dXJufHx6ZS5yZXR1cm4oKX1maW5hbGx5e2lmKGh0KXRocm93IE1lfX1yZXR1cm4gWGV9KGJlLEFlKXx8ZnVuY3Rpb24oKXt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gSyhiZSl7cmV0dXJuKEs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rp'@;
put 'b24oQWUpe3JldHVybiB0eXBlb2YgQWV9OmZ1bmN0aW9uKEFlKXtyZXR1cm4gQWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkFlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZBZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIEFlfSkoYmUpfXZhciBJPXZvaWQgMCE9PS9h'@;
put 'L2cuZmxhZ3Msaz1mdW5jdGlvbihiZSl7dmFyIEFlPVtdO3JldHVybiBiZS5mb3JFYWNoKGZ1bmN0aW9uKFRlKXtyZXR1cm4gQWUucHVzaChUZSl9KSxBZX0sRT1mdW5jdGlvbihiZSl7dmFyIEFlPVtdO3JldHVybiBiZS5mb3JFYWNoKGZ1bmN0aW9uKFRlLHFlKXtyZXR1cm4gQWUucHVzaChb'@;
put 'cWUsVGVdKX0pLEFlfSxqPU9iamVjdC5pcz9PYmplY3QuaXM6Uig2MDkpLFY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzOmZ1bmN0aW9uKCl7cmV0dXJuW119LEI9TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjpSKDM2MCk7ZnVuY3Rp'@;
put 'b24gWShiZSl7cmV0dXJuIGJlLmNhbGwuYmluZChiZSl9dmFyIFg9WShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxVPVkoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSkscT1ZKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLGVlPVIoOTUzOSkudHlwZXMs'@;
put 'dGU9ZWUuaXNBbnlBcnJheUJ1ZmZlcixvZT1lZS5pc0FycmF5QnVmZmVyVmlldyxzZT1lZS5pc0RhdGUsaGU9ZWUuaXNNYXAsdWU9ZWUuaXNSZWdFeHAsY2U9ZWUuaXNTZXQsRz1lZS5pc05hdGl2ZUVycm9yLGI9ZWUuaXNCb3hlZFByaW1pdGl2ZSxEPWVlLmlzTnVtYmVyT2JqZWN0LEg9ZWUu'@;
put 'aXNTdHJpbmdPYmplY3QsTj1lZS5pc0Jvb2xlYW5PYmplY3QsZz1lZS5pc0JpZ0ludE9iamVjdCxDPWVlLmlzU3ltYm9sT2JqZWN0LFM9ZWUuaXNGbG9hdDMyQXJyYXksdj1lZS5pc0Zsb2F0NjRBcnJheTtmdW5jdGlvbiBwKGJlKXtpZigwPT09YmUubGVuZ3RofHxiZS5sZW5ndGg+MTApcmV0'@;
put 'dXJuITA7Zm9yKHZhciBBZT0wO0FlPGJlLmxlbmd0aDtBZSsrKXt2YXIgVGU9YmUuY2hhckNvZGVBdChBZSk7aWYoVGU8NDh8fFRlPjU3KXJldHVybiEwfXJldHVybiAxMD09PWJlLmxlbmd0aCYmYmU+PU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIHcoYmUpe3JldHVybiBPYmplY3Qua2V5cyhi'@;
put 'ZSkuZmlsdGVyKHApLmNvbmNhdChWKGJlKS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKGJlKSkpfWZ1bmN0aW9uIEooYmUsQWUpe2lmKGJlPT09QWUpcmV0dXJuIDA7Zm9yKHZhciBUZT1iZS5sZW5ndGgscWU9QWUubGVuZ3RoLFhlPTAsVWU9TWF0'@;
put 'aC5taW4oVGUscWUpO1hlPFVlOysrWGUpaWYoYmVbWGVdIT09QWVbWGVdKXtUZT1iZVtYZV0scWU9QWVbWGVdO2JyZWFrfXJldHVybiBUZTxxZT8tMTpxZTxUZT8xOjB9dmFyIGZlPTAseGU9MSxMZT0yLEZlPTM7ZnVuY3Rpb24gT2UoYmUsQWUsVGUscWUpe2lmKGJlPT09QWUpcmV0dXJuIDAh'@;
put 'PT1iZXx8IVRlfHxqKGJlLEFlKTtpZihUZSl7aWYoIm9iamVjdCIhPT1LKGJlKSlyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGJlJiZCKGJlKSYmQihBZSk7aWYoIm9iamVjdCIhPT1LKEFlKXx8bnVsbD09PWJlfHxudWxsPT09QWV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihiZSkhPT1PYmplY3Qu'@;
put 'Z2V0UHJvdG90eXBlT2YoQWUpKXJldHVybiExfWVsc2V7aWYobnVsbD09PWJlfHwib2JqZWN0IiE9PUsoYmUpKXJldHVybihudWxsPT09QWV8fCJvYmplY3QiIT09SyhBZSkpJiZiZT09QWU7aWYobnVsbD09PUFlfHwib2JqZWN0IiE9PUsoQWUpKXJldHVybiExfXZhciBYZSxVZSxodCxNZSxI'@;
put 'dCxQdCxEZT1xKGJlKTtpZihEZSE9PXEoQWUpKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoYmUpKXtpZihiZS5sZW5ndGghPT1BZS5sZW5ndGgpcmV0dXJuITE7dmFyIHplPXcoYmUpLG90PXcoQWUpO3JldHVybiB6ZS5sZW5ndGg9PT1vdC5sZW5ndGgmJldlKGJlLEFlLFRlLHFlLHhlLHpl'@;
put 'KX1pZigiW29iamVjdCBPYmplY3RdIj09PURlJiYoIWhlKGJlKSYmaGUoQWUpfHwhY2UoYmUpJiZjZShBZSkpKXJldHVybiExO2lmKHNlKGJlKSl7aWYoIXNlKEFlKXx8RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKGJlKSE9PURhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChBZSkpcmV0'@;
put 'dXJuITF9ZWxzZSBpZih1ZShiZSkpe2lmKCF1ZShBZSl8fChodD1iZSxNZT1BZSwhKEk/aHQuc291cmNlPT09TWUuc291cmNlJiZodC5mbGFncz09PU1lLmZsYWdzOlJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChodCk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoTWUp'@;
put 'KSkpcmV0dXJuITF9ZWxzZSBpZihHKGJlKXx8YmUgaW5zdGFuY2VvZiBFcnJvcil7aWYoYmUubWVzc2FnZSE9PUFlLm1lc3NhZ2V8fGJlLm5hbWUhPT1BZS5uYW1lKXJldHVybiExfWVsc2V7aWYob2UoYmUpKXtpZihUZXx8IVMoYmUpJiYhdihiZSkpe2lmKChIdD1iZSkuYnl0ZUxlbmd0aCE9'@;
put 'PShQdD1BZSkuYnl0ZUxlbmd0aHx8MCE9PUoobmV3IFVpbnQ4QXJyYXkoSHQuYnVmZmVyLEh0LmJ5dGVPZmZzZXQsSHQuYnl0ZUxlbmd0aCksbmV3IFVpbnQ4QXJyYXkoUHQuYnVmZmVyLFB0LmJ5dGVPZmZzZXQsUHQuYnl0ZUxlbmd0aCkpKXJldHVybiExfWVsc2UgaWYoIWZ1bmN0aW9uKEh0'@;
put 'LFB0KXtpZihIdC5ieXRlTGVuZ3RoIT09UHQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG9uPTA7b248SHQuYnl0ZUxlbmd0aDtvbisrKWlmKEh0W29uXSE9PVB0W29uXSlyZXR1cm4hMTtyZXR1cm4hMH0oYmUsQWUpKXJldHVybiExO3ZhciB1dD13KGJlKSxNdD13KEFlKTtyZXR1cm4g'@;
put 'dXQubGVuZ3RoPT09TXQubGVuZ3RoJiZXZShiZSxBZSxUZSxxZSxmZSx1dCl9aWYoY2UoYmUpKXJldHVybiEoIWNlKEFlKXx8YmUuc2l6ZSE9PUFlLnNpemUpJiZXZShiZSxBZSxUZSxxZSxMZSk7aWYoaGUoYmUpKXJldHVybiEoIWhlKEFlKXx8YmUuc2l6ZSE9PUFlLnNpemUpJiZXZShiZSxB'@;
put 'ZSxUZSxxZSxGZSk7aWYodGUoYmUpKXtpZigoWGU9YmUpLmJ5dGVMZW5ndGghPT0oVWU9QWUpLmJ5dGVMZW5ndGh8fDAhPT1KKG5ldyBVaW50OEFycmF5KFhlKSxuZXcgVWludDhBcnJheShVZSkpKXJldHVybiExfWVsc2UgaWYoYihiZSkmJiFmdW5jdGlvbihIdCxQdCl7cmV0dXJuIEQoSHQp'@;
put 'P0QoUHQpJiZqKE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCkpOkgoSHQpP0goUHQpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCk6TihI'@;
put 'dCk/TihQdCkmJkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCk9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpOmcoSHQpP2coUHQpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChIdCk9PT1CaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCk6'@;
put 'QyhQdCkmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KX0oYmUsQWUpKXJldHVybiExfXJldHVybiBXZShiZSxBZSxUZSxxZSxmZSl9ZnVuY3Rpb24gamUoYmUsQWUpe3JldHVybiBBZS5maWx0ZXIoZnVuY3Rpb24o'@;
put 'VGUpe3JldHVybiBVKGJlLFRlKX0pfWZ1bmN0aW9uIFdlKGJlLEFlLFRlLHFlLFhlLFVlKXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7VWU9T2JqZWN0LmtleXMoYmUpO3ZhciBodD1PYmplY3Qua2V5cyhBZSk7aWYoVWUubGVuZ3RoIT09aHQubGVuZ3RoKXJldHVybiExfWZvcih2YXIgTWU9'@;
put 'MDtNZTxVZS5sZW5ndGg7TWUrKylpZighWChBZSxVZVtNZV0pKXJldHVybiExO2lmKFRlJiY1PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIERlPVYoYmUpO2lmKDAhPT1EZS5sZW5ndGgpe3ZhciB6ZT0wO2ZvcihNZT0wO01lPERlLmxlbmd0aDtNZSsrKXt2YXIgb3Q9RGVbTWVdO2lmKFUoYmUs'@;
put 'b3QpKXtpZighVShBZSxvdCkpcmV0dXJuITE7VWUucHVzaChvdCksemUrK31lbHNlIGlmKFUoQWUsb3QpKXJldHVybiExfXZhciB1dD1WKEFlKTtpZihEZS5sZW5ndGghPT11dC5sZW5ndGgmJmplKEFlLHV0KS5sZW5ndGghPT16ZSlyZXR1cm4hMX1lbHNle3ZhciBNdD1WKEFlKTtpZigwIT09'@;
put 'TXQubGVuZ3RoJiYwIT09amUoQWUsTXQpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PVVlLmxlbmd0aCYmKFhlPT09ZmV8fFhlPT09eGUmJjA9PT1iZS5sZW5ndGh8fDA9PT1iZS5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT1xZSlxZT17dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3Np'@;
put 'dGlvbjowfTtlbHNle3ZhciBIdD1xZS52YWwxLmdldChiZSk7aWYodm9pZCAwIT09SHQpe3ZhciBQdD1xZS52YWwyLmdldChBZSk7aWYodm9pZCAwIT09UHQpcmV0dXJuIEh0PT09UHR9cWUucG9zaXRpb24rK31xZS52YWwxLnNldChiZSxxZS5wb3NpdGlvbikscWUudmFsMi5zZXQoQWUscWUu'@;
put 'cG9zaXRpb24pO3ZhciBvbj1mdW5jdGlvbihDbixVdCxibixXbixlbiwkbil7dmFyIEhuPTA7aWYoJG49PT1MZSl7aWYoIWZ1bmN0aW9uKHd0LFh0LF90LE50KXtmb3IodmFyIG1uPW51bGwscnQ9ayh3dCksSXQ9MDtJdDxydC5sZW5ndGg7SXQrKyl7dmFyIFF0PXJ0W0l0XTtpZigib2JqZWN0'@;
put 'Ij09PUsoUXQpJiZudWxsIT09UXQpbnVsbD09PW1uJiYobW49bmV3IFNldCksbW4uYWRkKFF0KTtlbHNlIGlmKCFYdC5oYXMoUXQpKXtpZihfdHx8IVFlKHd0LFh0LFF0KSlyZXR1cm4hMTtudWxsPT09bW4mJihtbj1uZXcgU2V0KSxtbi5hZGQoUXQpfX1pZihudWxsIT09bW4pe2Zvcih2YXIg'@;
put 'RHQ9ayhYdCkscHQ9MDtwdDxEdC5sZW5ndGg7cHQrKyl7dmFyIFl0PUR0W3B0XTtpZigib2JqZWN0Ij09PUsoWXQpJiZudWxsIT09WXQpe2lmKCFLZShtbixZdCxfdCxOdCkpcmV0dXJuITF9ZWxzZSBpZighX3QmJiF3dC5oYXMoWXQpJiYhS2UobW4sWXQsX3QsTnQpKXJldHVybiExfXJldHVy'@;
put 'biAwPT09bW4uc2l6ZX1yZXR1cm4hMH0oQ24sVXQsYm4sZW4pKXJldHVybiExfWVsc2UgaWYoJG49PT1GZSl7aWYoIWZ1bmN0aW9uKHd0LFh0LF90LE50KXtmb3IodmFyIG1uPW51bGwscnQ9RSh3dCksSXQ9MDtJdDxydC5sZW5ndGg7SXQrKyl7dmFyIFF0PXoocnRbSXRdLDIpLER0PVF0WzBd'@;
put 'LHB0PVF0WzFdO2lmKCJvYmplY3QiPT09SyhEdCkmJm51bGwhPT1EdCludWxsPT09bW4mJihtbj1uZXcgU2V0KSxtbi5hZGQoRHQpO2Vsc2V7dmFyIFl0PVh0LmdldChEdCk7aWYodm9pZCAwPT09WXQmJiFYdC5oYXMoRHQpfHwhT2UocHQsWXQsX3QsTnQpKXtpZihfdHx8IWx0KHd0LFh0LER0'@;
put 'LHB0LE50KSlyZXR1cm4hMTtudWxsPT09bW4mJihtbj1uZXcgU2V0KSxtbi5hZGQoRHQpfX19aWYobnVsbCE9PW1uKXtmb3IodmFyIEluPUUoWHQpLHp0PTA7enQ8SW4ubGVuZ3RoO3p0Kyspe3ZhciB5bj16KEluW3p0XSwyKSx4bj0oRHQ9eW5bMF0seW5bMV0pO2lmKCJvYmplY3QiPT09SyhE'@;
put 'dCkmJm51bGwhPT1EdCl7aWYoIVBlKG1uLHd0LER0LHhuLF90LE50KSlyZXR1cm4hMX1lbHNlIGlmKCEoX3R8fHd0LmhhcyhEdCkmJk9lKHd0LmdldChEdCkseG4sITEsTnQpfHxQZShtbix3dCxEdCx4biwhMSxOdCkpKXJldHVybiExfXJldHVybiAwPT09bW4uc2l6ZX1yZXR1cm4hMH0oQ24s'@;
put 'VXQsYm4sZW4pKXJldHVybiExfWVsc2UgaWYoJG49PT14ZSlmb3IoO0huPENuLmxlbmd0aDtIbisrKXtpZighWChDbixIbikpe2lmKFgoVXQsSG4pKXJldHVybiExO2Zvcih2YXIgZnQ9T2JqZWN0LmtleXMoQ24pO0huPGZ0Lmxlbmd0aDtIbisrKXt2YXIgZm49ZnRbSG5dO2lmKCFYKFV0LGZu'@;
put 'KXx8IU9lKENuW2ZuXSxVdFtmbl0sYm4sZW4pKXJldHVybiExfXJldHVybiBmdC5sZW5ndGg9PT1PYmplY3Qua2V5cyhVdCkubGVuZ3RofWlmKCFYKFV0LEhuKXx8IU9lKENuW0huXSxVdFtIbl0sYm4sZW4pKXJldHVybiExfWZvcihIbj0wO0huPFduLmxlbmd0aDtIbisrKXt2YXIgaG49V25b'@;
put 'SG5dO2lmKCFPZShDbltobl0sVXRbaG5dLGJuLGVuKSlyZXR1cm4hMX1yZXR1cm4hMH0oYmUsQWUsVGUsVWUscWUsWGUpO3JldHVybiBxZS52YWwxLmRlbGV0ZShiZSkscWUudmFsMi5kZWxldGUoQWUpLG9ufWZ1bmN0aW9uIEtlKGJlLEFlLFRlLHFlKXtmb3IodmFyIFhlPWsoYmUpLFVlPTA7'@;
put 'VWU8WGUubGVuZ3RoO1VlKyspe3ZhciBodD1YZVtVZV07aWYoT2UoQWUsaHQsVGUscWUpKXJldHVybiBiZS5kZWxldGUoaHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFllKGJlKXtzd2l0Y2goSyhiZSkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nh'@;
put 'c2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6YmU9K2JlO2Nhc2UibnVtYmVyIjppZihCKGJlKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBRZShiZSxBZSxUZSl7dmFyIHFlPVllKFRlKTtyZXR1cm4gcWU/PyhBZS5oYXMocWUpJiYhYmUuaGFzKHFlKSl9ZnVuY3Rpb24gbHQo'@;
put 'YmUsQWUsVGUscWUsWGUpe3ZhciBVZT1ZZShUZSk7aWYobnVsbCE9VWUpcmV0dXJuIFVlO3ZhciBodD1BZS5nZXQoVWUpO3JldHVybiEodm9pZCAwPT09aHQmJiFBZS5oYXMoVWUpfHwhT2UocWUsaHQsITEsWGUpKSYmIWJlLmhhcyhVZSkmJk9lKHFlLGh0LCExLFhlKX1mdW5jdGlvbiBQZShi'@;
put 'ZSxBZSxUZSxxZSxYZSxVZSl7Zm9yKHZhciBodD1rKGJlKSxNZT0wO01lPGh0Lmxlbmd0aDtNZSsrKXt2YXIgRGU9aHRbTWVdO2lmKE9lKFRlLERlLFhlLFVlKSYmT2UocWUsQWUuZ2V0KERlKSxYZSxVZSkpcmV0dXJuIGJlLmRlbGV0ZShEZSksITB9cmV0dXJuITF9TS5leHBvcnRzPXtpc0Rl'@;
put 'ZXBFcXVhbDpmdW5jdGlvbihiZSxBZSl7cmV0dXJuIE9lKGJlLEFlLCExKX0saXNEZWVwU3RyaWN0RXF1YWw6ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBPZShiZSxBZSwhMCl9fX0sODIyNDpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gT319LDk2Njk6KE0s'@;
put 'TyxSKT0+e00uZXhwb3J0cz1SKDE2MDkpfSw1NDQ4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoNjAyNiksST1SKDQzNzIpLGs9Uig1MzI3KSxFPVIoNDA5Nyksaj1SKDQxMDkpLFY9Uig3OTg1KSxCPVIoNzg3NCksWT1SKDI2NDgpLFg9Uig2NDQpLFU9UigyMDUp'@;
put 'O00uZXhwb3J0cz1mdW5jdGlvbihxKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZT1xLmRhdGEsaGU9cS5oZWFkZXJzLHVlPXEucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIGNlKCl7cS5jYW5jZWxUb2tlbiYmcS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvZSks'@;
put 'cS5zaWduYWwmJnEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixvZSl9ei5pc0Zvcm1EYXRhKHNlKSYmei5pc1N0YW5kYXJkQnJvd3NlckVudigpJiZkZWxldGUgaGVbIkNvbnRlbnQtVHlwZSJdO3ZhciBHPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihxLmF1dGgpe3ZhciBiPXEu'@;
put 'YXV0aC51c2VybmFtZXx8IiIsRD1xLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHEuYXV0aC5wYXNzd29yZCkpOiIiO2hlLkF1dGhvcml6YXRpb249IkJhc2ljICIrYnRvYShiKyI6IitEKX12YXIgSD1FKHEuYmFzZVVSTCxxLnVybCk7ZnVuY3Rpb24gTigpe2lm'@;
put 'KEcpe3ZhciBTPSJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gRz9qKEcuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpOm51bGw7SyhmdW5jdGlvbihwKXtlZShwKSxjZSgpfSxmdW5jdGlvbihwKXt0ZShwKSxjZSgpfSx7ZGF0YTp1ZSYmInRleHQiIT09dWUmJiJqc29uIiE9PXVlP0cucmVzcG9u'@;
put 'c2U6Ry5yZXNwb25zZVRleHQsc3RhdHVzOkcuc3RhdHVzLHN0YXR1c1RleHQ6Ry5zdGF0dXNUZXh0LGhlYWRlcnM6Uyxjb25maWc6cSxyZXF1ZXN0Okd9KSxHPW51bGx9fWlmKEcub3BlbihxLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGsoSCxxLnBhcmFtcyxxLnBhcmFtc1NlcmlhbGl6ZXIpLCEw'@;
put 'KSxHLnRpbWVvdXQ9cS50aW1lb3V0LCJvbmxvYWRlbmQiaW4gRz9HLm9ubG9hZGVuZD1OOkcub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7RyYmND09PUcucmVhZHlTdGF0ZSYmKDAhPT1HLnN0YXR1c3x8Ry5yZXNwb25zZVVSTCYmMD09PUcucmVzcG9uc2VVUkwuaW5kZXhPZigiZmls'@;
put 'ZToiKSkmJnNldFRpbWVvdXQoTil9LEcub25hYm9ydD1mdW5jdGlvbigpe0cmJih0ZShuZXcgWSgiUmVxdWVzdCBhYm9ydGVkIixZLkVDT05OQUJPUlRFRCxxLEcpKSxHPW51bGwpfSxHLm9uZXJyb3I9ZnVuY3Rpb24oKXt0ZShuZXcgWSgiTmV0d29yayBFcnJvciIsWS5FUlJfTkVUV09SSyxx'@;
put 'LEcsRykpLEc9bnVsbH0sRy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt2YXIgUz1xLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitxLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCI7cS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoUz1xLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHRlKG5l'@;
put 'dyBZKFMsKHEudHJhbnNpdGlvbmFsfHxCKS5jbGFyaWZ5VGltZW91dEVycm9yP1kuRVRJTUVET1VUOlkuRUNPTk5BQk9SVEVELHEsRykpLEc9bnVsbH0sei5pc1N0YW5kYXJkQnJvd3NlckVudigpKXt2YXIgZz0ocS53aXRoQ3JlZGVudGlhbHN8fFYoSCkpJiZxLnhzcmZDb29raWVOYW1lP0ku'@;
put 'cmVhZChxLnhzcmZDb29raWVOYW1lKTp2b2lkIDA7ZyYmKGhlW3EueHNyZkhlYWRlck5hbWVdPWcpfSJzZXRSZXF1ZXN0SGVhZGVyImluIEcmJnouZm9yRWFjaChoZSxmdW5jdGlvbihTLHYpe3ZvaWQgMD09PXNlJiYiY29udGVudC10eXBlIj09PXYudG9Mb3dlckNhc2UoKT9kZWxldGUgaGVb'@;
put 'dl06Ry5zZXRSZXF1ZXN0SGVhZGVyKHYsUyl9KSx6LmlzVW5kZWZpbmVkKHEud2l0aENyZWRlbnRpYWxzKXx8KEcud2l0aENyZWRlbnRpYWxzPSEhcS53aXRoQ3JlZGVudGlhbHMpLHVlJiYianNvbiIhPT11ZSYmKEcucmVzcG9uc2VUeXBlPXEucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgcS5vbkRvd25sb2FkUHJvZ3Jlc3MmJkcuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHEub25Eb3dubG9hZFByb2dyZXNzKSwiZnVuY3Rpb24iPT10eXBlb2YgcS5vblVwbG9hZFByb2dyZXNzJiZHLnVwbG9hZCYmRy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3Mi'@;
put 'LHEub25VcGxvYWRQcm9ncmVzcyksKHEuY2FuY2VsVG9rZW58fHEuc2lnbmFsKSYmKG9lPWZ1bmN0aW9uKFMpe0cmJih0ZSghU3x8UyYmUy50eXBlP25ldyBYOlMpLEcuYWJvcnQoKSxHPW51bGwpfSxxLmNhbmNlbFRva2VuJiZxLmNhbmNlbFRva2VuLnN1YnNjcmliZShvZSkscS5zaWduYWwm'@;
put 'JihxLnNpZ25hbC5hYm9ydGVkP29lKCk6cS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9lKSkpLHNlfHwoc2U9bnVsbCk7dmFyIEM9VShIKTtDJiYtMT09PVsiaHR0cCIsImh0dHBzIiwiZmlsZSJdLmluZGV4T2YoQyk/dGUobmV3IFkoIlVuc3VwcG9ydGVkIHByb3RvY29sICIr'@;
put 'QysiOiIsWS5FUlJfQkFEX1JFUVVFU1QscSkpOkcuc2VuZChzZSl9KX19LDE2MDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9UigxODQ5KSxJPVIoMzIxKSxrPVIoNzE4NSksRT1mdW5jdGlvbiBqKFYpe3ZhciBCPW5ldyBJKFYpLFk9SyhJLnByb3RvdHlwZS5yZXF1'@;
put 'ZXN0LEIpO3JldHVybiB6LmV4dGVuZChZLEkucHJvdG90eXBlLEIpLHouZXh0ZW5kKFksQiksWS5jcmVhdGU9ZnVuY3Rpb24oWCl7cmV0dXJuIGooayhWLFgpKX0sWX0oUig1NTQ2KSk7RS5BeGlvcz1JLEUuQ2FuY2VsZWRFcnJvcj1SKDY0NCksRS5DYW5jZWxUb2tlbj1SKDQ5NzIpLEUuaXND'@;
put 'YW5jZWw9Uig2NTAyKSxFLlZFUlNJT049Uig3Mjg4KS52ZXJzaW9uLEUudG9Gb3JtRGF0YT1SKDc2NzUpLEUuQXhpb3NFcnJvcj1SKDI2NDgpLEUuQ2FuY2VsPUUuQ2FuY2VsZWRFcnJvcixFLmFsbD1mdW5jdGlvbihqKXtyZXR1cm4gUHJvbWlzZS5hbGwoail9LEUuc3ByZWFkPVIoODcxMyks'@;
put 'RS5pc0F4aW9zRXJyb3I9Uig2MjY4KSxNLmV4cG9ydHM9RSxNLmV4cG9ydHMuZGVmYXVsdD1FfSw0OTcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDQpO2Z1bmN0aW9uIEsoSSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3Ig'@;
put 'bXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciBrO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihqKXtrPWp9KTt2YXIgRT10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKGope2lmKEUuX2xpc3RlbmVycyl7dmFyIFYsQj1FLl9saXN0ZW5lcnMubGVuZ3RoO2ZvcihWPTA7'@;
put 'VjxCO1YrKylFLl9saXN0ZW5lcnNbVl0oaik7RS5fbGlzdGVuZXJzPW51bGx9fSksdGhpcy5wcm9taXNlLnRoZW49ZnVuY3Rpb24oail7dmFyIFYsQj1uZXcgUHJvbWlzZShmdW5jdGlvbihZKXtFLnN1YnNjcmliZShZKSxWPVl9KS50aGVuKGopO3JldHVybiBCLmNhbmNlbD1mdW5jdGlvbigp'@;
put 'e0UudW5zdWJzY3JpYmUoVil9LEJ9LEkoZnVuY3Rpb24oail7RS5yZWFzb258fChFLnJlYXNvbj1uZXcgeihqKSxrKEUucmVhc29uKSl9KX1LLnByb3RvdHlwZS50aHJvd0lmUmVxdWVzdGVkPWZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259LEsucHJvdG90eXBl'@;
put 'LnN1YnNjcmliZT1mdW5jdGlvbihJKXt0aGlzLnJlYXNvbj9JKHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goSSk6dGhpcy5fbGlzdGVuZXJzPVtJXX0sSy5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oSSl7aWYodGhpcy5fbGlzdGVuZXJz'@;
put 'KXt2YXIgaz10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihJKTstMSE9PWsmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaywxKX19LEsuc291cmNlPWZ1bmN0aW9uKCl7dmFyIEk7cmV0dXJue3Rva2VuOm5ldyBLKGZ1bmN0aW9uKGspe0k9a30pLGNhbmNlbDpJfX0sTS5leHBvcnRzPUt9LDY0NDoo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjY0OCk7ZnVuY3Rpb24gSyhJKXt6LmNhbGwodGhpcyxJPz8iY2FuY2VsZWQiLHouRVJSX0NBTkNFTEVEKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifVIoNDg2NykuaW5oZXJpdHMoSyx6LHtfX0NBTkNFTF9fOiEwfSksTS5leHBvcnRz'@;
put 'PUt9LDY1MDI6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuISghT3x8IU8uX19DQU5DRUxfXyl9fSwzMjE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig1MzI3KSxJPVIoNzgyKSxrPVIoMzU3MiksRT1SKDcxODUpLGo9Uig0MDk3'@;
put 'KSxWPVIoNDg3NSksQj1WLnZhbGlkYXRvcnM7ZnVuY3Rpb24gWShYKXt0aGlzLmRlZmF1bHRzPVgsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEkscmVzcG9uc2U6bmV3IEl9fVkucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24oWCxVKXsic3RyaW5nIj09dHlwZW9mIFg/KFU9VXx8'@;
put 'e30pLnVybD1YOlU9WHx8e30sVS5tZXRob2Q9KFU9RSh0aGlzLmRlZmF1bHRzLFUpKS5tZXRob2Q/VS5tZXRob2QudG9Mb3dlckNhc2UoKTp0aGlzLmRlZmF1bHRzLm1ldGhvZD90aGlzLmRlZmF1bHRzLm1ldGhvZC50b0xvd2VyQ2FzZSgpOiJnZXQiO3ZhciBxPVUudHJhbnNpdGlvbmFsO3Zv'@;
put 'aWQgMCE9PXEmJlYuYXNzZXJ0T3B0aW9ucyhxLHtzaWxlbnRKU09OUGFyc2luZzpCLnRyYW5zaXRpb25hbChCLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkIudHJhbnNpdGlvbmFsKEIuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpCLnRyYW5zaXRpb25hbChCLmJvb2xlYW4pfSwh'@;
put 'MSk7dmFyIGVlPVtdLHRlPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihiKXsiZnVuY3Rpb24iPT10eXBlb2YgYi5ydW5XaGVuJiYhMT09PWIucnVuV2hlbihVKXx8KHRlPXRlJiZiLnN5bmNocm9ub3VzLGVlLnVuc2hpZnQoYi5mdWxmaWxsZWQsYi5yZWpl'@;
put 'Y3RlZCkpfSk7dmFyIG9lLHNlPVtdO2lmKHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYil7c2UucHVzaChiLmZ1bGZpbGxlZCxiLnJlamVjdGVkKX0pLCF0ZSl7dmFyIGhlPVtrLHZvaWQgMF07Zm9yKEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGhl'@;
put 'LGVlKSxoZT1oZS5jb25jYXQoc2UpLG9lPVByb21pc2UucmVzb2x2ZShVKTtoZS5sZW5ndGg7KW9lPW9lLnRoZW4oaGUuc2hpZnQoKSxoZS5zaGlmdCgpKTtyZXR1cm4gb2V9Zm9yKHZhciB1ZT1VO2VlLmxlbmd0aDspe3ZhciBjZT1lZS5zaGlmdCgpLEc9ZWUuc2hpZnQoKTt0cnl7dWU9Y2Uo'@;
put 'dWUpfWNhdGNoKGIpe0coYik7YnJlYWt9fXRyeXtvZT1rKHVlKX1jYXRjaChiKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoYil9Zm9yKDtzZS5sZW5ndGg7KW9lPW9lLnRoZW4oc2Uuc2hpZnQoKSxzZS5zaGlmdCgpKTtyZXR1cm4gb2V9LFkucHJvdG90eXBlLmdldFVyaT1mdW5jdGlvbihYKXtY'@;
put 'PUUodGhpcy5kZWZhdWx0cyxYKTt2YXIgVT1qKFguYmFzZVVSTCxYLnVybCk7cmV0dXJuIEsoVSxYLnBhcmFtcyxYLnBhcmFtc1NlcmlhbGl6ZXIpfSx6LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKFgpe1kucHJvdG90eXBlW1hdPWZ1bmN0aW9u'@;
put 'KFUscSl7cmV0dXJuIHRoaXMucmVxdWVzdChFKHF8fHt9LHttZXRob2Q6WCx1cmw6VSxkYXRhOihxfHx7fSkuZGF0YX0pKX19KSx6LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihYKXtmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbihlZSx0ZSxvZSl7cmV0dXJu'@;
put 'IHRoaXMucmVxdWVzdChFKG9lfHx7fSx7bWV0aG9kOlgsaGVhZGVyczpxP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDplZSxkYXRhOnRlfSkpfX1ZLnByb3RvdHlwZVtYXT1VKCksWS5wcm90b3R5cGVbWCsiRm9ybSJdPVUoITApfSksTS5leHBvcnRzPVl9'@;
put 'LDI2NDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO2Z1bmN0aW9uIEsoRSxqLFYsQixZKXtFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT1FLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsaiYmKHRoaXMuY29kZT1qKSxWJiYodGhpcy5jb25maWc9ViksQiYmKHRoaXMu'@;
put 'cmVxdWVzdD1CKSxZJiYodGhpcy5yZXNwb25zZT1ZKX16LmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxl'@;
put 'TmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5z'@;
put 'dGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEk9Sy5wcm90b3R5cGUsaz17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVD'@;
put 'VFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiXS5mb3JFYWNoKGZ1bmN0aW9uKEUpe2tbRV09e3ZhbHVlOkV9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSyxrKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSwi'@;
put 'aXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxLLmZyb209ZnVuY3Rpb24oRSxqLFYsQixZLFgpe3ZhciBVPU9iamVjdC5jcmVhdGUoSSk7cmV0dXJuIHoudG9GbGF0T2JqZWN0KEUsVSxmdW5jdGlvbihxKXtyZXR1cm4gcSE9PUVycm9yLnByb3RvdHlwZX0pLEsuY2FsbChVLEUubWVzc2FnZSxq'@;
put 'LFYsQixZKSxVLm5hbWU9RS5uYW1lLFgmJk9iamVjdC5hc3NpZ24oVSxYKSxVfSxNLmV4cG9ydHM9S30sNzgyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtmdW5jdGlvbiBLKCl7dGhpcy5oYW5kbGVycz1bXX1LLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oSSxrLEUpe3Jl'@;
put 'dHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpJLHJlamVjdGVkOmssc3luY2hyb25vdXM6ISFFJiZFLnN5bmNocm9ub3VzLHJ1bldoZW46RT9FLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9LEsucHJvdG90eXBlLmVqZWN0PWZ1bmN0aW9uKEkpe3RoaXMu'@;
put 'aGFuZGxlcnNbSV0mJih0aGlzLmhhbmRsZXJzW0ldPW51bGwpfSxLLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKEkpe3ouZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKGspe251bGwhPT1rJiZJKGspfSl9LE0uZXhwb3J0cz1LfSw0MDk3OihNLE8sUik9PnsidXNlIHN0cmljdCI7'@;
put 'dmFyIHo9UigxNzkzKSxLPVIoNzMwMyk7TS5leHBvcnRzPWZ1bmN0aW9uKEksayl7cmV0dXJuIEkmJiF6KGspP0soSSxrKTprfX0sMzU3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDg1MjcpLEk9Uig2NTAyKSxrPVIoNTU0NiksRT1SKDY0NCk7ZnVuY3Rpb24g'@;
put 'aihWKXtpZihWLmNhbmNlbFRva2VuJiZWLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxWLnNpZ25hbCYmVi5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgRX1NLmV4cG9ydHM9ZnVuY3Rpb24oVil7cmV0dXJuIGooViksVi5oZWFkZXJzPVYuaGVhZGVyc3x8e30sVi5kYXRhPUsuY2Fs'@;
put 'bChWLFYuZGF0YSxWLmhlYWRlcnMsVi50cmFuc2Zvcm1SZXF1ZXN0KSxWLmhlYWRlcnM9ei5tZXJnZShWLmhlYWRlcnMuY29tbW9ufHx7fSxWLmhlYWRlcnNbVi5tZXRob2RdfHx7fSxWLmhlYWRlcnMpLHouZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0'@;
put 'Y2giLCJjb21tb24iXSxmdW5jdGlvbihCKXtkZWxldGUgVi5oZWFkZXJzW0JdfSksKFYuYWRhcHRlcnx8ay5hZGFwdGVyKShWKS50aGVuKGZ1bmN0aW9uKEIpe3JldHVybiBqKFYpLEIuZGF0YT1LLmNhbGwoVixCLmRhdGEsQi5oZWFkZXJzLFYudHJhbnNmb3JtUmVzcG9uc2UpLEJ9LGZ1bmN0'@;
put 'aW9uKEIpe3JldHVybiBJKEIpfHwoaihWKSxCJiZCLnJlc3BvbnNlJiYoQi5yZXNwb25zZS5kYXRhPUsuY2FsbChWLEIucmVzcG9uc2UuZGF0YSxCLnJlc3BvbnNlLmhlYWRlcnMsVi50cmFuc2Zvcm1SZXNwb25zZSkpKSxQcm9taXNlLnJlamVjdChCKX0pfX0sNzE4NTooTSxPLFIpPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSl7ST1JfHx7fTt2YXIgaz17fTtmdW5jdGlvbiBFKFUscSl7cmV0dXJuIHouaXNQbGFpbk9iamVjdChVKSYmei5pc1BsYWluT2JqZWN0KHEpP3oubWVyZ2UoVSxxKTp6LmlzUGxhaW5PYmplY3QocSk/ei5tZXJn'@;
put 'ZSh7fSxxKTp6LmlzQXJyYXkocSk/cS5zbGljZSgpOnF9ZnVuY3Rpb24gaihVKXtyZXR1cm4gei5pc1VuZGVmaW5lZChJW1VdKT96LmlzVW5kZWZpbmVkKEtbVV0pP3ZvaWQgMDpFKHZvaWQgMCxLW1VdKTpFKEtbVV0sSVtVXSl9ZnVuY3Rpb24gVihVKXtpZighei5pc1VuZGVmaW5lZChJW1Vd'@;
put 'KSlyZXR1cm4gRSh2b2lkIDAsSVtVXSl9ZnVuY3Rpb24gQihVKXtyZXR1cm4gei5pc1VuZGVmaW5lZChJW1VdKT96LmlzVW5kZWZpbmVkKEtbVV0pP3ZvaWQgMDpFKHZvaWQgMCxLW1VdKTpFKHZvaWQgMCxJW1VdKX1mdW5jdGlvbiBZKFUpe3JldHVybiBVIGluIEk/RShLW1VdLElbVV0pOlUg'@;
put 'aW4gSz9FKHZvaWQgMCxLW1VdKTp2b2lkIDB9dmFyIFg9e3VybDpWLG1ldGhvZDpWLGRhdGE6VixiYXNlVVJMOkIsdHJhbnNmb3JtUmVxdWVzdDpCLHRyYW5zZm9ybVJlc3BvbnNlOkIscGFyYW1zU2VyaWFsaXplcjpCLHRpbWVvdXQ6Qix0aW1lb3V0TWVzc2FnZTpCLHdpdGhDcmVkZW50aWFs'@;
put 'czpCLGFkYXB0ZXI6QixyZXNwb25zZVR5cGU6Qix4c3JmQ29va2llTmFtZTpCLHhzcmZIZWFkZXJOYW1lOkIsb25VcGxvYWRQcm9ncmVzczpCLG9uRG93bmxvYWRQcm9ncmVzczpCLGRlY29tcHJlc3M6QixtYXhDb250ZW50TGVuZ3RoOkIsbWF4Qm9keUxlbmd0aDpCLGJlZm9yZVJlZGlyZWN0'@;
put 'OkIsdHJhbnNwb3J0OkIsaHR0cEFnZW50OkIsaHR0cHNBZ2VudDpCLGNhbmNlbFRva2VuOkIsc29ja2V0UGF0aDpCLHJlc3BvbnNlRW5jb2Rpbmc6Qix2YWxpZGF0ZVN0YXR1czpZfTtyZXR1cm4gei5mb3JFYWNoKE9iamVjdC5rZXlzKEspLmNvbmNhdChPYmplY3Qua2V5cyhJKSksZnVuY3Rp'@;
put 'b24oVSl7dmFyIHE9WFtVXXx8aixlZT1xKFUpO3ouaXNVbmRlZmluZWQoZWUpJiZxIT09WXx8KGtbVV09ZWUpfSksa319LDYwMjY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDI2NDgpO00uZXhwb3J0cz1mdW5jdGlvbihLLEksayl7dmFyIEU9ay5jb25maWcudmFsaWRhdGVTdGF0'@;
put 'dXM7ay5zdGF0dXMmJkUmJiFFKGsuc3RhdHVzKT9JKG5ldyB6KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIray5zdGF0dXMsW3ouRVJSX0JBRF9SRVFVRVNULHouRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihrLnN0YXR1cy8xMDApLTRdLGsuY29uZmlnLGsucmVxdWVz'@;
put 'dCxrKSk6SyhrKX19LDg1Mjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig1NTQ2KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPXRoaXN8fEs7cmV0dXJuIHouZm9yRWFjaChFLGZ1bmN0aW9uKFYpe0k9Vi5jYWxsKGosSSxrKX0pLEl9fSw1NTQ2OihN'@;
put 'LE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNDg2NyksST1SKDYwMTYpLGs9UigyNjQ4KSxFPVIoNzg3NCksaj1SKDc2NzUpLFY9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifTtmdW5jdGlvbiBCKFUscSl7IUsuaXNVbmRl'@;
put 'ZmluZWQoVSkmJksuaXNVbmRlZmluZWQoVVsiQ29udGVudC1UeXBlIl0pJiYoVVsiQ29udGVudC1UeXBlIl09cSl9dmFyIFksWD17dHJhbnNpdGlvbmFsOkUsYWRhcHRlcjooKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSJ8fHZvaWQgMCE9PXomJiJbb2JqZWN0IHByb2Nlc3NdIj09PU9iamVj'@;
put 'dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh6KSkmJihZPVIoNTQ0OCkpLFkpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKFUscSl7aWYoSShxLCJBY2NlcHQiKSxJKHEsIkNvbnRlbnQtVHlwZSIpLEsuaXNGb3JtRGF0YShVKXx8Sy5pc0FycmF5QnVmZmVyKFUpfHxLLmlzQnVmZmVyKFUp'@;
put 'fHxLLmlzU3RyZWFtKFUpfHxLLmlzRmlsZShVKXx8Sy5pc0Jsb2IoVSkpcmV0dXJuIFU7aWYoSy5pc0FycmF5QnVmZmVyVmlldyhVKSlyZXR1cm4gVS5idWZmZXI7aWYoSy5pc1VSTFNlYXJjaFBhcmFtcyhVKSlyZXR1cm4gQihxLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7'@;
put 'Y2hhcnNldD11dGYtOCIpLFUudG9TdHJpbmcoKTt2YXIgZWUsdGU9Sy5pc09iamVjdChVKSxvZT1xJiZxWyJDb250ZW50LVR5cGUiXTtpZigoZWU9Sy5pc0ZpbGVMaXN0KFUpKXx8dGUmJiJtdWx0aXBhcnQvZm9ybS1kYXRhIj09PW9lKXt2YXIgc2U9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1E'@;
put 'YXRhO3JldHVybiBqKGVlP3siZmlsZXNbXSI6VX06VSxzZSYmbmV3IHNlKX1yZXR1cm4gdGV8fCJhcHBsaWNhdGlvbi9qc29uIj09PW9lPyhCKHEsImFwcGxpY2F0aW9uL2pzb24iKSxmdW5jdGlvbihoZSx1ZSxjZSl7aWYoSy5pc1N0cmluZyhoZSkpdHJ5e3JldHVybigwLEpTT04ucGFyc2Up'@;
put 'KGhlKSxLLnRyaW0oaGUpfWNhdGNoKEcpe2lmKCJTeW50YXhFcnJvciIhPT1HLm5hbWUpdGhyb3cgR31yZXR1cm4oMCxKU09OLnN0cmluZ2lmeSkoaGUpfShVKSk6VX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihVKXt2YXIgcT10aGlzLnRyYW5zaXRpb25hbHx8WC50cmFuc2l0aW9u'@;
put 'YWwsb2U9IShxJiZxLnNpbGVudEpTT05QYXJzaW5nKSYmImpzb24iPT09dGhpcy5yZXNwb25zZVR5cGU7aWYob2V8fHEmJnEuZm9yY2VkSlNPTlBhcnNpbmcmJksuaXNTdHJpbmcoVSkmJlUubGVuZ3RoKXRyeXtyZXR1cm4gSlNPTi5wYXJzZShVKX1jYXRjaChzZSl7aWYob2UpdGhyb3ciU3lu'@;
put 'dGF4RXJyb3IiPT09c2UubmFtZT9rLmZyb20oc2Usay5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpzZX1yZXR1cm4gVX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVu'@;
put 'dExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6UigxNjIzKX0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oVSl7cmV0dXJuIFU+PTIwMCYmVTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoifX19O0su'@;
put 'Zm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiXSxmdW5jdGlvbihVKXtYLmhlYWRlcnNbVV09e319KSxLLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihVKXtYLmhlYWRlcnNbVV09Sy5tZXJnZShWKX0pLE0uZXhwb3J0cz1YfSw3ODc0Ok09PnsidXNlIHN0cmlj'@;
put 'dCI7TS5leHBvcnRzPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfX0sNzI4ODpNPT57TS5leHBvcnRzPXt2ZXJzaW9uOiIwLjI3LjIifX0sMTg0OTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPLFIp'@;
put 'e3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgej1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksSz0wO0s8ei5sZW5ndGg7SysrKXpbS109YXJndW1lbnRzW0tdO3JldHVybiBPLmFwcGx5KFIseil9fX0sNTMyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7ZnVuY3Rp'@;
put 'b24gSyhJKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEkpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1NLmV4'@;
put 'cG9ydHM9ZnVuY3Rpb24oSSxrLEUpe2lmKCFrKXJldHVybiBJO3ZhciBqO2lmKEUpaj1FKGspO2Vsc2UgaWYoei5pc1VSTFNlYXJjaFBhcmFtcyhrKSlqPWsudG9TdHJpbmcoKTtlbHNle3ZhciBWPVtdO3ouZm9yRWFjaChrLGZ1bmN0aW9uKFksWCl7bnVsbCE9WSYmKHouaXNBcnJheShZKT9Y'@;
put 'Kz0iW10iOlk9W1ldLHouZm9yRWFjaChZLGZ1bmN0aW9uKFUpe3ouaXNEYXRlKFUpP1U9VS50b0lTT1N0cmluZygpOnouaXNPYmplY3QoVSkmJihVPUpTT04uc3RyaW5naWZ5KFUpKSxWLnB1c2goSyhYKSsiPSIrSyhVKSl9KSl9KSxqPVYuam9pbigiJiIpfWlmKGope3ZhciBCPUkuaW5kZXhP'@;
put 'ZigiIyIpOy0xIT09QiYmKEk9SS5zbGljZSgwLEIpKSxJKz0oLTE9PT1JLmluZGV4T2YoIj8iKT8iPyI6IiYiKStqfXJldHVybiBJfX0sNzMwMzpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPLFIpe3JldHVybiBSP08ucmVwbGFjZSgvXC8rJC8sIiIpKyIvIitSLnJlcGxh'@;
put 'Y2UoL15cLysvLCIiKTpPfX0sNDM3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRzPXouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT97d3JpdGU6ZnVuY3Rpb24oSyxJLGssRSxqLFYpe3ZhciBCPVtdO0IucHVzaChLKyI9IitlbmNvZGVVUklDb21wb25lbnQo'@;
put 'SSkpLHouaXNOdW1iZXIoaykmJkIucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGspLnRvR01UU3RyaW5nKCkpLHouaXNTdHJpbmcoRSkmJkIucHVzaCgicGF0aD0iK0UpLHouaXNTdHJpbmcoaikmJkIucHVzaCgiZG9tYWluPSIraiksITA9PT1WJiZCLnB1c2goInNlY3VyZSIpLGRvY3VtZW50'@;
put 'LmNvb2tpZT1CLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oSyl7dmFyIEk9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0srIik9KFteO10qKSIpKTtyZXR1cm4gST9kZWNvZGVVUklDb21wb25lbnQoSVszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKEsp'@;
put 'e3RoaXMud3JpdGUoSywiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fX0sMTc5MzpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4vXihbYS16'@;
put 'XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KE8pfX0sNjI2ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRzPWZ1bmN0aW9uKEspe3JldHVybiB6LmlzT2JqZWN0KEspJiYhMD09PUsuaXNBeGlvc0Vycm9yfX0sNzk4NTooTSxPLFIpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciB6PVIoNDg2Nyk7TS5leHBvcnRzPXouaXNTdGFuZGFyZEJyb3dzZXJFbnYoKT9mdW5jdGlvbigpe3ZhciBLLEk9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBFKGope3ZhciBW'@;
put 'PWo7cmV0dXJuIEkmJihrLnNldEF0dHJpYnV0ZSgiaHJlZiIsViksVj1rLmhyZWYpLGsuc2V0QXR0cmlidXRlKCJocmVmIixWKSx7aHJlZjprLmhyZWYscHJvdG9jb2w6ay5wcm90b2NvbD9rLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDprLmhvc3Qsc2VhcmNoOmsuc2VhcmNo'@;
put 'P2suc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ay5oYXNoP2suaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOmsuaG9zdG5hbWUscG9ydDprLnBvcnQscGF0aG5hbWU6Ii8iPT09ay5wYXRobmFtZS5jaGFyQXQoMCk/ay5wYXRobmFtZToiLyIray5wYXRobmFtZX19'@;
put 'cmV0dXJuIEs9RSh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oail7dmFyIFY9ei5pc1N0cmluZyhqKT9FKGopOmo7cmV0dXJuIFYucHJvdG9jb2w9PT1LLnByb3RvY29sJiZWLmhvc3Q9PT1LLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSw2MDE2OihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxJKXt6LmZvckVhY2goSyxmdW5jdGlvbihrLEUpe0UhPT1JJiZFLnRvVXBwZXJDYXNlKCk9PT1JLnRvVXBwZXJDYXNlKCkmJihLW0ldPWssZGVsZXRlIEtbRV0pfSl9fSwxNjIzOk09PntNLmV4cG9ydHM9bnVsbH0s'@;
put 'NDEwOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1bImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQt'@;
put 'c2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdO00uZXhwb3J0cz1mdW5jdGlvbihJKXt2YXIgayxFLGosVj17fTtyZXR1cm4gSSYmei5mb3JFYWNo'@;
put 'KEkuc3BsaXQoIlxuIiksZnVuY3Rpb24oQil7aWYoaj1CLmluZGV4T2YoIjoiKSxrPXoudHJpbShCLnN1YnN0cigwLGopKS50b0xvd2VyQ2FzZSgpLEU9ei50cmltKEIuc3Vic3RyKGorMSkpLGspe2lmKFZba10mJksuaW5kZXhPZihrKT49MClyZXR1cm47VltrXT0ic2V0LWNvb2tpZSI9PT1r'@;
put 'PyhWW2tdP1Zba106W10pLmNvbmNhdChbRV0pOlZba10/VltrXSsiLCAiK0U6RX19KSxWfX0sMjA1Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3ZhciBSPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKE8pO3JldHVybiBSJiZSWzFdfHwiIn19LDg3MTM6'@;
put 'TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIGZ1bmN0aW9uKFIpe3JldHVybiBPLmFwcGx5KG51bGwsUil9fX0sNzY3NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9Uig0ODY3KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSxr'@;
put 'KXtrPWt8fG5ldyBGb3JtRGF0YTt2YXIgRT1bXTtmdW5jdGlvbiBqKFYpe3JldHVybiBudWxsPT09Vj8iIjpLLmlzRGF0ZShWKT9WLnRvSVNPU3RyaW5nKCk6Sy5pc0FycmF5QnVmZmVyKFYpfHxLLmlzVHlwZWRBcnJheShWKT8iZnVuY3Rpb24iPT10eXBlb2YgQmxvYj9uZXcgQmxvYihbVl0p'@;
put 'OnouZnJvbShWKTpWfXJldHVybiBmdW5jdGlvbiBWKEIsWSl7aWYoSy5pc1BsYWluT2JqZWN0KEIpfHxLLmlzQXJyYXkoQikpe2lmKC0xIT09RS5pbmRleE9mKEIpKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitZKTtFLnB1c2goQiksSy5mb3JFYWNoKEIs'@;
put 'ZnVuY3Rpb24oWCxVKXtpZighSy5pc1VuZGVmaW5lZChYKSl7dmFyIHEsZWU9WT9ZKyIuIitVOlU7aWYoWCYmIVkmJiJvYmplY3QiPT10eXBlb2YgWClpZihLLmVuZHNXaXRoKFUsInt9IikpWD1KU09OLnN0cmluZ2lmeShYKTtlbHNlIGlmKEsuZW5kc1dpdGgoVSwiW10iKSYmKHE9Sy50b0Fy'@;
put 'cmF5KFgpKSlyZXR1cm4gdm9pZCBxLmZvckVhY2goZnVuY3Rpb24odGUpeyFLLmlzVW5kZWZpbmVkKHRlKSYmay5hcHBlbmQoZWUsaih0ZSkpfSk7VihYLGVlKX19KSxFLnBvcCgpfWVsc2Ugay5hcHBlbmQoWSxqKEIpKX0oSSksa319LDQ4NzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'ej1SKDUxMDgpLEs9Uig3Mjg4KS52ZXJzaW9uLEk9UigyNjQ4KSxrPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaChmdW5jdGlvbihqLFYpe2tbal09ZnVuY3Rpb24oQil7cmV0dXJuIHR5cGVvZiBCPT09anx8ImEi'@;
put 'KyhWPDE/Im4gIjoiICIpK2p9fSk7dmFyIEU9e307ay50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oaixWLEIpe2Z1bmN0aW9uIFkoWCxVKXtyZXR1cm4iW0F4aW9zIHYiK0srIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitYKyInIitVKyhCPyIuICIrQjoiIil9cmV0dXJuIGZ1bmN0aW9uKFgsVSxx'@;
put 'KXtpZighMT09PWopdGhyb3cgbmV3IEkoWShVLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKFY/IiBpbiAiK1Y6IiIpKSxJLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gViYmIUVbVV0mJihFW1VdPSEwLHoud2FybihZKFUsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK1YrIiBhbmQgd2lsbCBi'@;
put 'ZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksIWp8fGooWCxVLHEpfX0sTS5leHBvcnRzPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uKGosVixCKXtpZigib2JqZWN0IiE9dHlwZW9mIGopdGhyb3cgbmV3IEkoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLEkuRVJSX0JBRF9PUFRJ'@;
put 'T05fVkFMVUUpO2Zvcih2YXIgWT1PYmplY3Qua2V5cyhqKSxYPVkubGVuZ3RoO1gtLSA+MDspe3ZhciBVPVlbWF0scT1WW1VdO2lmKHEpe3ZhciBlZT1qW1VdLHRlPXZvaWQgMD09PWVlfHxxKGVlLFUsaik7aWYoITAhPT10ZSl0aHJvdyBuZXcgSSgib3B0aW9uICIrVSsiIG11c3QgYmUgIit0'@;
put 'ZSxJLkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09Qil0aHJvdyBuZXcgSSgiVW5rbm93biBvcHRpb24gIitVLEkuRVJSX0JBRF9PUFRJT04pfX0sdmFsaWRhdG9yczprfX0sNDg2NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9UigxODQ5KSxJPU9iamVjdC5wcm90'@;
put 'b3R5cGUudG9TdHJpbmcsaz0oej1PYmplY3QuY3JlYXRlKG51bGwpLGZ1bmN0aW9uKEcpe3ZhciBiPUkuY2FsbChHKTtyZXR1cm4geltiXXx8KHpbYl09Yi5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pO2Z1bmN0aW9uIEUoRyl7cmV0dXJuIEc9Ry50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9u'@;
put 'KGIpe3JldHVybiBrKGIpPT09R319ZnVuY3Rpb24gaihHKXtyZXR1cm4gQXJyYXkuaXNBcnJheShHKX1mdW5jdGlvbiBWKEcpe3JldHVybiB2b2lkIDA9PT1HfXZhciBCPUUoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gWShHKXtyZXR1cm4gbnVsbCE9PUcmJiJvYmplY3QiPT10eXBlb2YgR31m'@;
put 'dW5jdGlvbiBYKEcpe2lmKCJvYmplY3QiIT09ayhHKSlyZXR1cm4hMTt2YXIgYj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoRyk7cmV0dXJuIG51bGw9PT1ifHxiPT09T2JqZWN0LnByb3RvdHlwZX12YXIgVT1FKCJEYXRlIikscT1FKCJGaWxlIiksZWU9RSgiQmxvYiIpLHRlPUUoIkZpbGVMaXN0'@;
put 'Iik7ZnVuY3Rpb24gb2UoRyl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PUkuY2FsbChHKX12YXIgc2U9RSgiVVJMU2VhcmNoUGFyYW1zIik7ZnVuY3Rpb24gaGUoRyxiKXtpZihudWxsIT1HKWlmKCJvYmplY3QiIT10eXBlb2YgRyYmKEc9W0ddKSxqKEcpKWZvcih2YXIgRD0wLEg9Ry5s'@;
put 'ZW5ndGg7RDxIO0QrKyliLmNhbGwobnVsbCxHW0RdLEQsRyk7ZWxzZSBmb3IodmFyIE4gaW4gRylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRyxOKSYmYi5jYWxsKG51bGwsR1tOXSxOLEcpfXZhciB1ZSxjZT0odWU9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZPYmplY3Qu'@;
put 'Z2V0UHJvdG90eXBlT2YoVWludDhBcnJheSksZnVuY3Rpb24oRyl7cmV0dXJuIHVlJiZHIGluc3RhbmNlb2YgdWV9KTtNLmV4cG9ydHM9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOkIsaXNCdWZmZXI6ZnVuY3Rpb24oRyl7cmV0dXJuIG51bGwhPT1HJiYhVihHKSYmbnVsbCE9PUcuY29uc3Ry'@;
put 'dWN0b3ImJiFWKEcuY29uc3RydWN0b3IpJiYiZnVuY3Rpb24iPT10eXBlb2YgRy5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmRy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihHKX0saXNGb3JtRGF0YTpmdW5jdGlvbihHKXt2YXIgYj0iW29iamVjdCBGb3JtRGF0YV0iO3JldHVybiBHJiYoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIEZvcm1EYXRhJiZHIGluc3RhbmNlb2YgRm9ybURhdGF8fEkuY2FsbChHKT09PWJ8fG9lKEcudG9TdHJpbmcpJiZHLnRvU3RyaW5nKCk9PT1iKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oRyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVy'@;
put 'LmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoRyk6RyYmRy5idWZmZXImJkIoRy5idWZmZXIpfSxpc1N0cmluZzpmdW5jdGlvbihHKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEd9LGlzTnVtYmVyOmZ1bmN0aW9uKEcpe3JldHVybiJudW1iZXIiPT10eXBlb2YgR30saXNPYmplY3Q6WSxpc1Bs'@;
put 'YWluT2JqZWN0OlgsaXNVbmRlZmluZWQ6Vixpc0RhdGU6VSxpc0ZpbGU6cSxpc0Jsb2I6ZWUsaXNGdW5jdGlvbjpvZSxpc1N0cmVhbTpmdW5jdGlvbihHKXtyZXR1cm4gWShHKSYmb2UoRy5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6c2UsaXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4odHlwZW9mIG5hdmlnYXRvcj4idSJ8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmdHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwi'@;
put 'dSJ9LGZvckVhY2g6aGUsbWVyZ2U6ZnVuY3Rpb24gRygpe3ZhciBiPXt9O2Z1bmN0aW9uIEQoZyxDKXtiW0NdPVgoYltDXSkmJlgoZyk/RyhiW0NdLGcpOlgoZyk/Ryh7fSxnKTpqKGcpP2cuc2xpY2UoKTpnfWZvcih2YXIgSD0wLE49YXJndW1lbnRzLmxlbmd0aDtIPE47SCsrKWhlKGFyZ3Vt'@;
put 'ZW50c1tIXSxEKTtyZXR1cm4gYn0sZXh0ZW5kOmZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gaGUoYixmdW5jdGlvbihILE4pe0dbTl09RCYmImZ1bmN0aW9uIj09dHlwZW9mIEg/SyhILEQpOkh9KSxHfSx0cmltOmZ1bmN0aW9uKEcpe3JldHVybiBHLnRyaW0/Ry50cmltKCk6Ry5yZXBsYWNlKC9e'@;
put 'XHMrfFxzKyQvZywiIil9LHN0cmlwQk9NOmZ1bmN0aW9uKEcpe3JldHVybiA2NTI3OT09PUcuY2hhckNvZGVBdCgwKSYmKEc9Ry5zbGljZSgxKSksR30saW5oZXJpdHM6ZnVuY3Rpb24oRyxiLEQsSCl7Ry5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSxIKSxHLnByb3RvdHlw'@;
put 'ZS5jb25zdHJ1Y3Rvcj1HLEQmJk9iamVjdC5hc3NpZ24oRy5wcm90b3R5cGUsRCl9LHRvRmxhdE9iamVjdDpmdW5jdGlvbihHLGIsRCl7dmFyIEgsTixnLEM9e307Yj1ifHx7fTtkb3tmb3IoTj0oSD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhHKSkubGVuZ3RoO04tLSA+MDspQ1tnPUhb'@;
put 'Tl1dfHwoYltnXT1HW2ddLENbZ109ITApO0c9T2JqZWN0LmdldFByb3RvdHlwZU9mKEcpfXdoaWxlKEcmJighRHx8RChHLGIpKSYmRyE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBifSxraW5kT2Y6ayxraW5kT2ZUZXN0OkUsZW5kc1dpdGg6ZnVuY3Rpb24oRyxiLEQpe0c9U3RyaW5nKEcp'@;
put 'LCh2b2lkIDA9PT1EfHxEPkcubGVuZ3RoKSYmKEQ9Ry5sZW5ndGgpO3ZhciBIPUcuaW5kZXhPZihiLEQtPWIubGVuZ3RoKTtyZXR1cm4tMSE9PUgmJkg9PT1EfSx0b0FycmF5OmZ1bmN0aW9uKEcpe2lmKCFHKXJldHVybiBudWxsO3ZhciBiPUcubGVuZ3RoO2lmKFYoYikpcmV0dXJuIG51bGw7'@;
put 'Zm9yKHZhciBEPW5ldyBBcnJheShiKTtiLS0gPjA7KURbYl09R1tiXTtyZXR1cm4gRH0saXNUeXBlZEFycmF5OmNlLGlzRmlsZUxpc3Q6dGV9fSw1NjIzOk09PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTyhLLEksayl7SyBpbnN0YW5jZW9mIFJlZ0V4cCYmKEs9UihLLGspKSxJIGluc3RhbmNl'@;
put 'b2YgUmVnRXhwJiYoST1SKEksaykpO3ZhciBFPXooSyxJLGspO3JldHVybiBFJiZ7c3RhcnQ6RVswXSxlbmQ6RVsxXSxwcmU6ay5zbGljZSgwLEVbMF0pLGJvZHk6ay5zbGljZShFWzBdK0subGVuZ3RoLEVbMV0pLHBvc3Q6ay5zbGljZShFWzFdK0kubGVuZ3RoKX19ZnVuY3Rpb24gUihLLEkp'@;
put 'e3ZhciBrPUkubWF0Y2goSyk7cmV0dXJuIGs/a1swXTpudWxsfWZ1bmN0aW9uIHooSyxJLGspe3ZhciBFLGosVixCLFksWD1rLmluZGV4T2YoSyksVT1rLmluZGV4T2YoSSxYKzEpLHE9WDtpZihYPj0wJiZVPjApe2lmKEs9PT1JKXJldHVybltYLFVdO2ZvcihFPVtdLFY9ay5sZW5ndGg7cT49'@;
put 'MCYmIVk7KXE9PVg/KEUucHVzaChxKSxYPWsuaW5kZXhPZihLLHErMSkpOjE9PUUubGVuZ3RoP1k9W0UucG9wKCksVV06KChqPUUucG9wKCkpPFYmJihWPWosQj1VKSxVPWsuaW5kZXhPZihJLHErMSkpLHE9WDxVJiZYPj0wP1g6VTtFLmxlbmd0aCYmKFk9W1YsQl0pfXJldHVybiBZfU0uZXhw'@;
put 'b3J0cz1PLE8ucmFuZ2U9en0sOTc0MjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oQil7dmFyIFk9aihCKSxVPVlbMV07cmV0dXJuIDMqKFlbMF0rVSkvNC1VfSxPLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKEIpe3ZhciBZLFgsY2UsVT1qKEIpLHE9VVswXSxlZT1V'@;
put 'WzFdLHRlPW5ldyBLKDMqKHErKGNlPWVlKSkvNC1jZSksb2U9MCxzZT1lZT4wP3EtNDpxO2ZvcihYPTA7WDxzZTtYKz00KVk9eltCLmNoYXJDb2RlQXQoWCldPDwxOHx6W0IuY2hhckNvZGVBdChYKzEpXTw8MTJ8eltCLmNoYXJDb2RlQXQoWCsyKV08PDZ8eltCLmNoYXJDb2RlQXQoWCszKV0s'@;
put 'dGVbb2UrK109WT4+MTYmMjU1LHRlW29lKytdPVk+PjgmMjU1LHRlW29lKytdPTI1NSZZO3JldHVybiAyPT09ZWUmJihZPXpbQi5jaGFyQ29kZUF0KFgpXTw8Mnx6W0IuY2hhckNvZGVBdChYKzEpXT4+NCx0ZVtvZSsrXT0yNTUmWSksMT09PWVlJiYoWT16W0IuY2hhckNvZGVBdChYKV08PDEw'@;
put 'fHpbQi5jaGFyQ29kZUF0KFgrMSldPDw0fHpbQi5jaGFyQ29kZUF0KFgrMildPj4yLHRlW29lKytdPVk+PjgmMjU1LHRlW29lKytdPTI1NSZZKSx0ZX0sTy5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKEIpe2Zvcih2YXIgWSxYPUIubGVuZ3RoLFU9WCUzLHE9W10sdGU9MCxvZT1YLVU7dGU8b2U7'@;
put 'dGUrPTE2MzgzKXEucHVzaChWKEIsdGUsdGUrMTYzODM+b2U/b2U6dGUrMTYzODMpKTtyZXR1cm4gMT09PVU/cS5wdXNoKFJbKFk9QltYLTFdKT4+Ml0rUltZPDw0JjYzXSsiPT0iKToyPT09VSYmcS5wdXNoKFJbKFk9KEJbWC0yXTw8OCkrQltYLTFdKT4+MTBdK1JbWT4+NCY2M10rUltZPDwy'@;
put 'JjYzXSsiPSIpLHEuam9pbigiIil9O2Zvcih2YXIgUj1bXSx6PVtdLEs9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksST0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsaz0wO2s8NjQ7KytrKVJb'@;
put 'a109SVtrXSx6W0kuY2hhckNvZGVBdChrKV09aztmdW5jdGlvbiBqKEIpe3ZhciBZPUIubGVuZ3RoO2lmKFklND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBYPUIuaW5kZXhPZigiPSIpO3JldHVybi0xPT09'@;
put 'WCYmKFg9WSksW1gsWD09PVk/MDo0LVglNF19ZnVuY3Rpb24gVihCLFksWCl7Zm9yKHZhciBxLGVlPVtdLHRlPVk7dGU8WDt0ZSs9MyllZS5wdXNoKFJbKHE9KEJbdGVdPDwxNiYxNjcxMTY4MCkrKEJbdGUrMV08PDgmNjUyODApKygyNTUmQlt0ZSsyXSkpPj4xOCY2M10rUltxPj4xMiY2M10r'@;
put 'UltxPj42JjYzXStSWzYzJnFdKTtyZXR1cm4gZWUuam9pbigiIil9elsiLSIuY2hhckNvZGVBdCgwKV09NjIselsiXyIuY2hhckNvZGVBdCgwKV09NjN9LDM1NTA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKHYscCl7aWYoIXYpdGhyb3cg'@;
put 'bmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayh2LHApe3Yuc3VwZXJfPXA7dmFyIHc9ZnVuY3Rpb24oKXt9O3cucHJvdG90eXBlPXAucHJvdG90eXBlLHYucHJvdG90eXBlPW5ldyB3LHYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXZ9ZnVuY3Rpb24gRSh2LHAsdyl7'@;
put 'aWYoRS5pc0JOKHYpKXJldHVybiB2O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT12JiYoImxlIiE9PXAmJiJiZSIhPT1wfHwodz1wLHA9MTApLHRoaXMuX2luaXQodnx8MCxwfHwxMCx3fHwiYmUiKSl9dmFyIGo7Im9i'@;
put 'amVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoNjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKHYscCl7dmFyIHc9di5j'@;
put 'aGFyQ29kZUF0KHApO3JldHVybiB3Pj00OCYmdzw9NTc/dy00ODp3Pj02NSYmdzw9NzA/dy01NTp3Pj05NyYmdzw9MTAyP3ctODc6dm9pZCBJKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3YpfWZ1bmN0aW9uIEIodixwLHcpe3ZhciBKPVYodix3KTtyZXR1cm4gdy0xPj1wJiYoSnw9Vih2'@;
put 'LHctMSk8PDQpLEp9ZnVuY3Rpb24gWSh2LHAsdyxKKXtmb3IodmFyIG5lPTAsZGU9MCxmZT1NYXRoLm1pbih2Lmxlbmd0aCx3KSx4ZT1wO3hlPGZlO3hlKyspe3ZhciBMZT12LmNoYXJDb2RlQXQoeGUpLTQ4O25lKj1KLGRlPUxlPj00OT9MZS00OSsxMDpMZT49MTc/TGUtMTcrMTA6TGUsSShM'@;
put 'ZT49MCYmZGU8SiwiSW52YWxpZCBjaGFyYWN0ZXIiKSxuZSs9ZGV9cmV0dXJuIG5lfWZ1bmN0aW9uIFgodixwKXt2LndvcmRzPXAud29yZHMsdi5sZW5ndGg9cC5sZW5ndGgsdi5uZWdhdGl2ZT1wLm5lZ2F0aXZlLHYucmVkPXAucmVkfWlmKEUuaXNCTj1mdW5jdGlvbih2KXtyZXR1cm4gdiBp'@;
put 'bnN0YW5jZW9mIEV8fG51bGwhPT12JiYib2JqZWN0Ij09dHlwZW9mIHYmJnYuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHYud29yZHMpfSxFLm1heD1mdW5jdGlvbih2LHApe3JldHVybiB2LmNtcChwKT4wP3Y6cH0sRS5taW49ZnVuY3Rpb24odixw'@;
put 'KXtyZXR1cm4gdi5jbXAocCk8MD92OnB9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHYscCx3KXtpZigibnVtYmVyIj09dHlwZW9mIHYpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodixwLHcpO2lmKCJvYmplY3QiPT10eXBlb2YgdilyZXR1cm4gdGhpcy5faW5pdEFycmF5KHYscCx3KTsi'@;
put 'aGV4Ij09PXAmJihwPTE2KSxJKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpO3ZhciBKPTA7Ii0iPT09KHY9di50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihKKyssdGhpcy5uZWdhdGl2ZT0xKSxKPHYubGVuZ3RoJiYoMTY9PT1wP3RoaXMuX3BhcnNlSGV4KHYsSix3KToodGhp'@;
put 'cy5fcGFyc2VCYXNlKHYscCxKKSwibGUiPT09dyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHAsdykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odixwLHcpe3Y8MCYmKHRoaXMubmVnYXRpdmU9MSx2PS12KSx2PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEw'@;
put 'ODg2MyZ2XSx0aGlzLmxlbmd0aD0xKTp2PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnYsdi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkodjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ2LHYvNjcxMDg4NjQmNjcxMDg4'@;
put 'NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXcmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxwLHcpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHYscCx3KXtpZihJKCJudW1iZXIiPT10eXBlb2Ygdi5sZW5ndGgpLHYubGVuZ3RoPD0wKXJldHVybiB0aGlzLndv'@;
put 'cmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHYubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEo9MDtKPHRoaXMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPTA7dmFyIG5lLGRlLGZlPTA7aWYoImJlIj09'@;
put 'PXcpZm9yKEo9di5sZW5ndGgtMSxuZT0wO0o+PTA7Si09Myl0aGlzLndvcmRzW25lXXw9KGRlPXZbSl18dltKLTFdPDw4fHZbSi0yXTw8MTYpPDxmZSY2NzEwODg2Myx0aGlzLndvcmRzW25lKzFdPWRlPj4+MjYtZmUmNjcxMDg4NjMsKGZlKz0yNCk+PTI2JiYoZmUtPTI2LG5lKyspO2Vsc2Ug'@;
put 'aWYoImxlIj09PXcpZm9yKEo9MCxuZT0wO0o8di5sZW5ndGg7Sis9Myl0aGlzLndvcmRzW25lXXw9KGRlPXZbSl18dltKKzFdPDw4fHZbSisyXTw8MTYpPDxmZSY2NzEwODg2Myx0aGlzLndvcmRzW25lKzFdPWRlPj4+MjYtZmUmNjcxMDg4NjMsKGZlKz0yNCk+PTI2JiYoZmUtPTI2LG5lKysp'@;
put 'O3JldHVybiB0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odixwLHcpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodi5sZW5ndGgtcCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgSj0wO0o8dGhpcy5sZW5ndGg7SisrKXRo'@;
put 'aXMud29yZHNbSl09MDt2YXIgbmUsZGU9MCxmZT0wO2lmKCJiZSI9PT13KWZvcihKPXYubGVuZ3RoLTE7Sj49cDtKLT0yKW5lPUIodixwLEopPDxkZSx0aGlzLndvcmRzW2ZlXXw9NjcxMDg4NjMmbmUsZGU+PTE4PyhkZS09MTgsdGhpcy53b3Jkc1tmZSs9MV18PW5lPj4+MjYpOmRlKz04O2Vs'@;
put 'c2UgZm9yKEo9KHYubGVuZ3RoLXApJTI9PTA/cCsxOnA7Sjx2Lmxlbmd0aDtKKz0yKW5lPUIodixwLEopPDxkZSx0aGlzLndvcmRzW2ZlXXw9NjcxMDg4NjMmbmUsZGU+PTE4PyhkZS09MTgsdGhpcy53b3Jkc1tmZSs9MV18PW5lPj4+MjYpOmRlKz04O3RoaXMuX3N0cmlwKCl9LEUucHJvdG90'@;
put 'eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odixwLHcpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBKPTAsbmU9MTtuZTw9NjcxMDg4NjM7bmUqPXApSisrO0otLSxuZT1uZS9wfDA7Zm9yKHZhciBkZT12Lmxlbmd0aC13LGZlPWRlJUoseGU9TWF0aC5taW4oZGUsZGUtZmUp'@;
put 'K3csTGU9MCxGZT13O0ZlPHhlO0ZlKz1KKUxlPVkodixGZSxGZStKLHApLHRoaXMuaW11bG4obmUpLHRoaXMud29yZHNbMF0rTGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9TGU6dGhpcy5faWFkZG4oTGUpO2lmKDAhPT1mZSl7dmFyIE9lPTE7Zm9yKExlPVkodixGZSx2Lmxlbmd0aCxwKSxG'@;
put 'ZT0wO0ZlPGZlO0ZlKyspT2UqPXA7dGhpcy5pbXVsbihPZSksdGhpcy53b3Jkc1swXStMZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1MZTp0aGlzLl9pYWRkbihMZSl9dGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih2KXt2LndvcmRzPW5ldyBBcnJheSh0aGlzLmxl'@;
put 'bmd0aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPXRoaXMubGVuZ3RoLHYubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx2LnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odil7WCh2LHRoaXMpfSxF'@;
put 'LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB2PW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkodiksdn0sRS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih2KXtmb3IoO3RoaXMubGVuZ3RoPHY7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5w'@;
put 'cm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlz'@;
put 'Lmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7RS5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09VX1jYXRj'@;
put 'aHtFLnByb3RvdHlwZS5pbnNwZWN0PVV9ZWxzZSBFLnByb3RvdHlwZS5pbnNwZWN0PVU7ZnVuY3Rpb24gVSgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBxPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAw'@;
put 'MDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGVlPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHRlPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUs'@;
put 'NjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUs'@;
put 'MTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIG9lKHYscCx3KXt3Lm5lZ2F0aXZlPXAubmVnYXRpdmVedi5uZWdhdGl2ZTt2YXIgSj12Lmxlbmd0aCtw'@;
put 'Lmxlbmd0aHwwO3cubGVuZ3RoPUosSj1KLTF8MDt2YXIgbmU9MHx2LndvcmRzWzBdLGRlPTB8cC53b3Jkc1swXSxmZT1uZSpkZSxMZT1mZS82NzEwODg2NHwwO3cud29yZHNbMF09NjcxMDg4NjMmZmU7Zm9yKHZhciBGZT0xO0ZlPEo7RmUrKyl7Zm9yKHZhciBPZT1MZT4+PjI2LGplPTY3MTA4'@;
put 'ODYzJkxlLFdlPU1hdGgubWluKEZlLHAubGVuZ3RoLTEpLEtlPU1hdGgubWF4KDAsRmUtdi5sZW5ndGgrMSk7S2U8PVdlO0tlKyspT2UrPShmZT0obmU9MHx2LndvcmRzW0ZlLUtlfDBdKSooZGU9MHxwLndvcmRzW0tlXSkramUpLzY3MTA4ODY0fDAsamU9NjcxMDg4NjMmZmU7dy53b3Jkc1tG'@;
put 'ZV09MHxqZSxMZT0wfE9lfXJldHVybiAwIT09TGU/dy53b3Jkc1tGZV09MHxMZTp3Lmxlbmd0aC0tLHcuX3N0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odixwKXt2YXIgdztpZihwPTB8cHx8MSwxNj09PSh2PXZ8fDEwKXx8ImhleCI9PT12KXt3PSIiO2Zvcih2YXIgSj0w'@;
put 'LG5lPTAsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXt2YXIgZmU9dGhpcy53b3Jkc1tkZV0seGU9KDE2Nzc3MjE1JihmZTw8SnxuZSkpLnRvU3RyaW5nKDE2KTtuZT1mZT4+PjI0LUomMTY3NzcyMTUsKEorPTIpPj0yNiYmKEotPTI2LGRlLS0pLHc9MCE9PW5lfHxkZSE9PXRoaXMubGVuZ3Ro'@;
put 'LTE/cVs2LXhlLmxlbmd0aF0reGUrdzp4ZSt3fWZvcigwIT09bmUmJih3PW5lLnRvU3RyaW5nKDE2KSt3KTt3Lmxlbmd0aCVwIT0wOyl3PSIwIit3O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHc9Ii0iK3cpLHd9aWYodj09PSgwfHYpJiZ2Pj0yJiZ2PD0zNil7dmFyIExlPWVlW3ZdLEZl'@;
put 'PXRlW3ZdO3c9IiI7dmFyIE9lPXRoaXMuY2xvbmUoKTtmb3IoT2UubmVnYXRpdmU9MDshT2UuaXNaZXJvKCk7KXt2YXIgamU9T2UubW9kcm4oRmUpLnRvU3RyaW5nKHYpO3c9KE9lPU9lLmlkaXZuKEZlKSkuaXNaZXJvKCk/amUrdzpxW0xlLWplLmxlbmd0aF0ramUrd31mb3IodGhpcy5pc1pl'@;
put 'cm8oKSYmKHc9IjAiK3cpO3cubGVuZ3RoJXAhPTA7KXc9IjAiK3c7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodz0iLSIrdyksd31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy53b3Jk'@;
put 'c1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3YrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT92Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBv'@;
put 'bmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXY6dn0sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LGomJihFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih2LHApe3JldHVybiB0aGlz'@;
put 'LnRvQXJyYXlMaWtlKGosdixwKX0pLEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx2LHApfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih2LHAsdyl7dGhpcy5fc3RyaXAoKTt2YXIgSj10aGlzLmJ5dGVMZW5n'@;
put 'dGgoKSxuZT13fHxNYXRoLm1heCgxLEopO0koSjw9bmUsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKG5lPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBmZSx4ZSxkZT0oeGU9bmUsKGZlPXYpLmFsbG9jVW5zYWZlP2ZlLmFsbG9jVW5zYWZl'@;
put 'KHhlKTpuZXcgZmUoeGUpKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PXA/IkxFIjoiQkUiKV0oZGUsSiksZGV9LEUucHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PTAsSj0wLG5lPTAsZGU9MDtuZTx0aGlzLmxlbmd0aDtuZSsrKXt2'@;
put 'YXIgZmU9dGhpcy53b3Jkc1tuZV08PGRlfEo7dlt3KytdPTI1NSZmZSx3PHYubGVuZ3RoJiYodlt3KytdPWZlPj44JjI1NSksdzx2Lmxlbmd0aCYmKHZbdysrXT1mZT4+MTYmMjU1KSw2PT09ZGU/KHc8di5sZW5ndGgmJih2W3crK109ZmU+PjI0JjI1NSksSj0wLGRlPTApOihKPWZlPj4+MjQs'@;
put 'ZGUrPTIpfWlmKHc8di5sZW5ndGgpZm9yKHZbdysrXT1KO3c8di5sZW5ndGg7KXZbdysrXT0wfSxFLnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz12Lmxlbmd0aC0xLEo9MCxuZT0wLGRlPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl7dmFyIGZlPXRoaXMu'@;
put 'd29yZHNbbmVdPDxkZXxKO3Zbdy0tXT0yNTUmZmUsdz49MCYmKHZbdy0tXT1mZT4+OCYyNTUpLHc+PTAmJih2W3ctLV09ZmU+PjE2JjI1NSksNj09PWRlPyh3Pj0wJiYodlt3LS1dPWZlPj4yNCYyNTUpLEo9MCxkZT0wKTooSj1mZT4+PjI0LGRlKz0yKX1pZih3Pj0wKWZvcih2W3ctLV09Sjt3'@;
put 'Pj0wOyl2W3ctLV09MH0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHYpe3JldHVybiAzMi1NYXRoLmNsejMyKHYpfTpmdW5jdGlvbih2KXt2YXIgcD12LHc9MDtyZXR1cm4gcD49NDA5NiYmKHcrPTEzLHA+Pj49MTMpLHA+PTY0JiYodys9NyxwPj4+PTcpLHA+'@;
put 'PTgmJih3Kz00LHA+Pj49NCkscD49MiYmKHcrPTIscD4+Pj0yKSx3K3B9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih2KXtpZigwPT09dilyZXR1cm4gMjY7dmFyIHA9dix3PTA7cmV0dXJuISg4MTkxJnApJiYodys9MTMscD4+Pj0xMyksISgxMjcmcCkmJih3Kz03LHA+Pj49Nyks'@;
put 'ISgxNSZwKSYmKHcrPTQscD4+Pj00KSwhKDMmcCkmJih3Kz0yLHA+Pj49MiksISgxJnApJiZ3Kyssd30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgt'@;
put 'MSkrcH0sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdj0wLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIHc9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1twXSk7aWYodis9dywyNiE9PXcpYnJlYWt9cmV0dXJuIHZ9'@;
put 'LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih2KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih2KS5pYWRkbigxKTp0aGlzLmNs'@;
put 'b25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLnRlc3RuKHYtMSk/dGhpcy5ub3RuKHYpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnBy'@;
put 'b3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih2KXtmb3IoO3RoaXMu'@;
put 'bGVuZ3RoPHYubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBwPTA7cDx2Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3BdfHYud29yZHNbcF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbih2KXtyZXR1'@;
put 'cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHYpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih2KTp2LmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHYpOnYuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih2KXt2YXIgcDtwPXRoaXMubGVuZ3RoPnYubGVuZ3RoP3Y6dGhpcztmb3IodmFyIHc9MDt3PHAubGVu'@;
put 'Z3RoO3crKyl0aGlzLndvcmRzW3ddPXRoaXMud29yZHNbd10mdi53b3Jkc1t3XTtyZXR1cm4gdGhpcy5sZW5ndGg9cC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih2KXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKSksdGhpcy5p'@;
put 'dWFuZCh2KX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh2KTp2LmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLml1YW5kKHYpOnYuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odil7dmFyIHAsdzt0aGlzLmxlbmd0aD52Lmxlbmd0aD8ocD10aGlzLHc9dik6KHA9dix3PXRoaXMpO2Zvcih2YXIgSj0wO0o8dy5sZW5ndGg7SisrKXRoaXMud29y'@;
put 'ZHNbSl09cC53b3Jkc1tKXV53LndvcmRzW0pdO2lmKHRoaXMhPT1wKWZvcig7SjxwLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1wLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1wLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHYpe3JldHVybiBJ'@;
put 'KDA9PSh0aGlzLm5lZ2F0aXZlfHYubmVnYXRpdmUpKSx0aGlzLml1eG9yKHYpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHYpOnYuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1'@;
put 'bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Iodik6di5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHA9MHxNYXRoLmNlaWwodi8yNiks'@;
put 'dz12JTI2O3RoaXMuX2V4cGFuZChwKSx3PjAmJnAtLTtmb3IodmFyIEo9MDtKPHA7SisrKXRoaXMud29yZHNbSl09NjcxMDg4NjMmfnRoaXMud29yZHNbSl07cmV0dXJuIHc+MCYmKHRoaXMud29yZHNbSl09fnRoaXMud29yZHNbSl0mNjcxMDg4NjM+PjI2LXcpLHRoaXMuX3N0cmlwKCl9LEUu'@;
put 'cHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih2KX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih2LHApe0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKTt2YXIgdz12LzI2fDAsSj12JTI2O3JldHVybiB0aGlzLl9leHBhbmQodysxKSx0aGlz'@;
put 'LndvcmRzW3ddPXA/dGhpcy53b3Jkc1t3XXwxPDxKOnRoaXMud29yZHNbd10mfigxPDxKKSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHYpe3ZhciBwLHcsSjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXYubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCxwPXRoaXMuaXN1Yih2KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT12Lm5lZ2F0aXZlKXJldHVybiB2Lm5lZ2F0aXZlPTAscD10aGlzLmlzdWIodiksdi5uZWdhdGl2ZT0xLHAuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+di5s'@;
put 'ZW5ndGg/KHc9dGhpcyxKPXYpOih3PXYsSj10aGlzKTtmb3IodmFyIG5lPTAsZGU9MDtkZTxKLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPTY3MTA4ODYzJihwPSgwfHcud29yZHNbZGVdKSsoMHxKLndvcmRzW2RlXSkrbmUpLG5lPXA+Pj4yNjtmb3IoOzAhPT1uZSYmZGU8dy5sZW5ndGg7'@;
put 'ZGUrKyl0aGlzLndvcmRzW2RlXT02NzEwODg2MyYocD0oMHx3LndvcmRzW2RlXSkrbmUpLG5lPXA+Pj4yNjtpZih0aGlzLmxlbmd0aD13Lmxlbmd0aCwwIT09bmUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09bmUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHchPT10aGlzKWZvcig7ZGU8dy5sZW5n'@;
put 'dGg7ZGUrKyl0aGlzLndvcmRzW2RlXT13LndvcmRzW2RlXTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHYpe3ZhciBwO3JldHVybiAwIT09di5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHYubmVnYXRpdmU9MCxwPXRoaXMuc3ViKHYpLHYubmVnYXRpdmVePTEs'@;
put 'cCk6MD09PXYubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAscD12LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEscCk6dGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodik6di5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlz'@;
put 'dWI9ZnVuY3Rpb24odil7aWYoMCE9PXYubmVnYXRpdmUpe3YubmVnYXRpdmU9MDt2YXIgcD10aGlzLmlhZGQodik7cmV0dXJuIHYubmVnYXRpdmU9MSxwLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHYpLHRoaXMubmVn'@;
put 'YXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciB3LEosbmU9dGhpcy5jbXAodik7aWYoMD09PW5lKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztuZT4wPyh3PXRoaXMsSj12KToodz12LEo9dGhpcyk7Zm9yKHZhciBkZT0wLGZlPTA7'@;
put 'ZmU8Si5sZW5ndGg7ZmUrKylkZT0ocD0oMHx3LndvcmRzW2ZlXSktKDB8Si53b3Jkc1tmZV0pK2RlKT4+MjYsdGhpcy53b3Jkc1tmZV09NjcxMDg4NjMmcDtmb3IoOzAhPT1kZSYmZmU8dy5sZW5ndGg7ZmUrKylkZT0ocD0oMHx3LndvcmRzW2ZlXSkrZGUpPj4yNix0aGlzLndvcmRzW2ZlXT02'@;
put 'NzEwODg2MyZwO2lmKDA9PT1kZSYmZmU8dy5sZW5ndGgmJnchPT10aGlzKWZvcig7ZmU8dy5sZW5ndGg7ZmUrKyl0aGlzLndvcmRzW2ZlXT13LndvcmRzW2ZlXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZmUpLHchPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0'@;
put 'aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHYpfTt2YXIgc2U9ZnVuY3Rpb24odixwLHcpe3ZhciBKLG5lLGRlLGZlPXYud29yZHMseGU9cC53b3JkcyxMZT13LndvcmRzLEZlPTAsT2U9MHxmZVswXSxqZT04MTkxJk9l'@;
put 'LFdlPU9lPj4+MTMsS2U9MHxmZVsxXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxmZVsyXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxmZVszXSxUZT04MTkxJkFlLHFlPUFlPj4+MTMsWGU9MHxmZVs0XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxmZVs1XSxEZT04MTkxJk1l'@;
put 'LHplPU1lPj4+MTMsb3Q9MHxmZVs2XSx1dD04MTkxJm90LE10PW90Pj4+MTMsSHQ9MHxmZVs3XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxmZVs4XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxmZVs5XSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHx4ZVswXSxmdD04MTkxJkhu'@;
put 'LGZuPUhuPj4+MTMsaG49MHx4ZVsxXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMsX3Q9MHx4ZVsyXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHx4ZVszXSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHx4ZVs0XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHx4ZVs1XSx6dD04MTkxJklu'@;
put 'LHluPUluPj4+MTMseG49MHx4ZVs2XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMsUm49MHx4ZVs3XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHx4ZVs4XSxsbj04MTkxJm5pLGpuPW5pPj4+MTMscXI9MHx4ZVs5XSxnaT04MTkxJnFyLHhyPXFyPj4+MTM7dy5uZWdhdGl2ZT12Lm5lZ2F0aXZl'@;
put 'XnAubmVnYXRpdmUsdy5sZW5ndGg9MTk7dmFyIFVpPShGZSsoSj1NYXRoLmltdWwoamUsZnQpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoamUsZm4pKStNYXRoLmltdWwoV2UsZnQpfDApKTw8MTMpfDA7RmU9KChkZT1NYXRoLmltdWwoV2UsZm4pKSsobmU+Pj4xMyl8MCkrKFVpPj4+'@;
put 'MjYpfDAsVWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFllLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFllLGZuKSkrTWF0aC5pbXVsKFFlLGZ0KXwwLGRlPU1hdGguaW11bChRZSxmbik7dmFyIEtyPShGZSsoSj1KK01hdGguaW11bChqZSx3dCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5p'@;
put 'bXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsWHQpfDApKyhuZT4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoUGUsZnQpLG5lPShuZT1NYXRoLmltdWwoUGUsZm4pKStNYXRoLmltdWwo'@;
put 'YmUsZnQpfDAsZGU9TWF0aC5pbXVsKGJlLGZuKSxKPUorTWF0aC5pbXVsKFllLHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChRZSx3dCl8MCxkZT1kZStNYXRoLmltdWwoUWUsWHQpfDA7dmFyIG5vPShGZSsoSj1KK01hdGguaW11bChqZSxOdCl8MCl8MCkr'@;
put 'KCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoV2UsTnQpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsbW4pfDApKyhuZT4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoVGUsZnQpLG5lPShuZT1NYXRo'@;
put 'LmltdWwoVGUsZm4pKStNYXRoLmltdWwocWUsZnQpfDAsZGU9TWF0aC5pbXVsKHFlLGZuKSxKPUorTWF0aC5pbXVsKFBlLHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCxkZT1kZStNYXRoLmltdWwoYmUsWHQpfDAsSj1KK01hdGguaW11bChZ'@;
put 'ZSxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoUWUsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLG1uKXwwO3ZhciBIcj0oRmUrKEo9SitNYXRoLmltdWwoamUsSXQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5p'@;
put 'bXVsKFdlLEl0KXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdlLFF0KXwwKSsobmU+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFVlLGZ0KSxuZT0obmU9TWF0aC5pbXVsKFVlLGZuKSkrTWF0aC5pbXVsKGh0LGZ0KXwwLGRlPU1hdGguaW11'@;
put 'bChodCxmbiksSj1KK01hdGguaW11bChUZSx3dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLFh0KXwwLEo9SitNYXRoLmltdWwoUGUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5p'@;
put 'bXVsKGJlLE50KXwwLGRlPWRlK01hdGguaW11bChiZSxtbil8MCxKPUorTWF0aC5pbXVsKFllLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11bChRZSxJdCl8MCxkZT1kZStNYXRoLmltdWwoUWUsUXQpfDA7dmFyIHFpPShGZSsoSj1KK01hdGguaW11bChqZSxw'@;
put 'dCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsWXQpfDApKyhuZT4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoRGUsZnQpLG5l'@;
put 'PShuZT1NYXRoLmltdWwoRGUsZm4pKStNYXRoLmltdWwoemUsZnQpfDAsZGU9TWF0aC5pbXVsKHplLGZuKSxKPUorTWF0aC5pbXVsKFVlLHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsWHQpfDApK01hdGguaW11bChodCx3dCl8MCxkZT1kZStNYXRoLmltdWwoaHQsWHQpfDAsSj1KK01h'@;
put 'dGguaW11bChUZSxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmltdWwocWUsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLG1uKXwwLEo9SitNYXRoLmltdWwoUGUsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLGRl'@;
put 'PWRlK01hdGguaW11bChiZSxRdCl8MCxKPUorTWF0aC5pbXVsKFllLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChRZSxwdCl8MCxkZT1kZStNYXRoLmltdWwoUWUsWXQpfDA7dmFyIEppPShGZSsoSj1KK01hdGguaW11bChqZSx6dCl8MCl8MCkrKCg4MTkx'@;
put 'JihuZT0obmU9bmUrTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UseW4pfDApKyhuZT4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwodXQsZnQpLG5lPShuZT1NYXRoLmltdWwo'@;
put 'dXQsZm4pKStNYXRoLmltdWwoTXQsZnQpfDAsZGU9TWF0aC5pbXVsKE10LGZuKSxKPUorTWF0aC5pbXVsKERlLHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCxkZT1kZStNYXRoLmltdWwoemUsWHQpfDAsSj1KK01hdGguaW11bChVZSxOdCl8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LG1uKXwwLEo9SitNYXRoLmltdWwoVGUsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLGRlPWRlK01hdGguaW11bChx'@;
put 'ZSxRdCl8MCxKPUorTWF0aC5pbXVsKFBlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCxkZT1kZStNYXRoLmltdWwoYmUsWXQpfDAsSj1KK01hdGguaW11bChZZSx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLHluKXwwKStNYXRoLmlt'@;
put 'dWwoUWUsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLHluKXwwO3ZhciBhbz0oRmUrKEo9SitNYXRoLmltdWwoamUsc24pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFdl'@;
put 'LEJuKXwwKSsobmU+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFB0LGZ0KSxuZT0obmU9TWF0aC5pbXVsKFB0LGZuKSkrTWF0aC5pbXVsKG9uLGZ0KXwwLGRlPU1hdGguaW11bChvbixmbiksSj1KK01hdGguaW11bCh1dCx3dCl8MCxuZT0obmU9bmUrTWF0'@;
put 'aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LFh0KXwwLEo9SitNYXRoLmltdWwoRGUsTnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLGRlPWRlK01hdGguaW11bCh6ZSxtbil8MCxKPUorTWF0'@;
put 'aC5pbXVsKFVlLEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsUXQpfDApK01hdGguaW11bChodCxJdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsUXQpfDAsSj1KK01hdGguaW11bChUZSxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsZGU9'@;
put 'ZGUrTWF0aC5pbXVsKHFlLFl0KXwwLEo9SitNYXRoLmltdWwoUGUsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLGRlPWRlK01hdGguaW11bChiZSx5bil8MCxKPUorTWF0aC5pbXVsKFllLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUs'@;
put 'Qm4pfDApK01hdGguaW11bChRZSxzbil8MCxkZT1kZStNYXRoLmltdWwoUWUsQm4pfDA7dmFyIHJvPShGZSsoSj1KK01hdGguaW11bChqZSwkdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLFBuKXwwKStNYXRoLmltdWwoV2UsJHQpfDApKTw8MTMpfDA7RmU9KChkZT1k'@;
put 'ZStNYXRoLmltdWwoV2UsUG4pfDApKyhuZT4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoVXQsZnQpLG5lPShuZT1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsZGU9TWF0aC5pbXVsKGJuLGZuKSxKPUorTWF0aC5pbXVsKFB0LHd0KXww'@;
put 'LG5lPShuZT1uZStNYXRoLmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCxkZT1kZStNYXRoLmltdWwob24sWHQpfDAsSj1KK01hdGguaW11bCh1dCxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10'@;
put 'LG1uKXwwLEo9SitNYXRoLmltdWwoRGUsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxRdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLGRlPWRlK01hdGguaW11bCh6ZSxRdCl8MCxKPUorTWF0aC5pbXVsKFVlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11'@;
put 'bChodCxwdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsWXQpfDAsSj1KK01hdGguaW11bChUZSx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLHluKXwwLEo9SitNYXRoLmltdWwoUGUsc24pfDAsbmU9KG5lPW5l'@;
put 'K01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLGRlPWRlK01hdGguaW11bChiZSxCbil8MCxKPUorTWF0aC5pbXVsKFllLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChRZSwkdCl8MCxkZT1kZStNYXRoLmltdWwoUWUsUG4pfDA7dmFy'@;
put 'IGlvPShGZSsoSj1KK01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2Usam4pfDApKyhuZT4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9Njcx'@;
put 'MDg4NjMsSj1NYXRoLmltdWwoZW4sZnQpLG5lPShuZT1NYXRoLmltdWwoZW4sZm4pKStNYXRoLmltdWwoJG4sZnQpfDAsZGU9TWF0aC5pbXVsKCRuLGZuKSxKPUorTWF0aC5pbXVsKFV0LHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsWHQpfDApK01hdGguaW11bChibix3dCl8MCxkZT1k'@;
put 'ZStNYXRoLmltdWwoYm4sWHQpfDAsSj1KK01hdGguaW11bChQdCxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLG1uKXwwLEo9SitNYXRoLmltdWwodXQsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxR'@;
put 'dCl8MCkrTWF0aC5pbXVsKE10LEl0KXwwLGRlPWRlK01hdGguaW11bChNdCxRdCl8MCxKPUorTWF0aC5pbXVsKERlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCxkZT1kZStNYXRoLmltdWwoemUsWXQpfDAsSj1KK01hdGguaW11bChVZSx6'@;
put 'dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LHluKXwwLEo9SitNYXRoLmltdWwoVGUsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLGRlPWRlK01hdGguaW11'@;
put 'bChxZSxCbil8MCxKPUorTWF0aC5pbXVsKFBlLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsUG4pfDApK01hdGguaW11bChiZSwkdCl8MCxkZT1kZStNYXRoLmltdWwoYmUsUG4pfDAsSj1KK01hdGguaW11bChZZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFllLGpuKXwwKStNYXRo'@;
put 'LmltdWwoUWUsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFFlLGpuKXwwO3ZhciBHaT0oRmUrKEo9SitNYXRoLmltdWwoamUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChqZSx4cil8MCkrTWF0aC5pbXVsKFdlLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVs'@;
put 'KFdlLHhyKXwwKSsobmU+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLHd0KSxuZT0obmU9TWF0aC5pbXVsKGVuLFh0KSkrTWF0aC5pbXVsKCRuLHd0KXwwLGRlPU1hdGguaW11bCgkbixYdCksSj1KK01hdGguaW11bChVdCxOdCl8MCxuZT0obmU9bmUr'@;
put 'TWF0aC5pbXVsKFV0LG1uKXwwKStNYXRoLmltdWwoYm4sTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLG1uKXwwLEo9SitNYXRoLmltdWwoUHQsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEl0KXwwLGRlPWRlK01hdGguaW11bChvbixRdCl8MCxKPUor'@;
put 'TWF0aC5pbXVsKHV0LHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCxkZT1kZStNYXRoLmltdWwoTXQsWXQpfDAsSj1KK01hdGguaW11bChEZSx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAs'@;
put 'ZGU9ZGUrTWF0aC5pbXVsKHplLHluKXwwLEo9SitNYXRoLmltdWwoVWUsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLGRlPWRlK01hdGguaW11bChodCxCbil8MCxKPUorTWF0aC5pbXVsKFRlLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'VGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCxkZT1kZStNYXRoLmltdWwocWUsUG4pfDAsSj1KK01hdGguaW11bChQZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLGpuKXwwO3ZhciBobz0oRmUrKEo9'@;
put 'SitNYXRoLmltdWwoWWUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChZZSx4cil8MCkrTWF0aC5pbXVsKFFlLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKFFlLHhyKXwwKSsobmU+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEo9TWF0'@;
put 'aC5pbXVsKGVuLE50KSxuZT0obmU9TWF0aC5pbXVsKGVuLG1uKSkrTWF0aC5pbXVsKCRuLE50KXwwLGRlPU1hdGguaW11bCgkbixtbiksSj1KK01hdGguaW11bChVdCxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LFF0KXwwKStNYXRoLmltdWwoYm4sSXQpfDAsZGU9ZGUrTWF0aC5pbXVs'@;
put 'KGJuLFF0KXwwLEo9SitNYXRoLmltdWwoUHQscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLGRlPWRlK01hdGguaW11bChvbixZdCl8MCxKPUorTWF0aC5pbXVsKHV0LHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQseW4pfDApK01hdGgu'@;
put 'aW11bChNdCx6dCl8MCxkZT1kZStNYXRoLmltdWwoTXQseW4pfDAsSj1KK01hdGguaW11bChEZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKHplLEJuKXwwLEo9SitNYXRoLmltdWwoVWUsJHQpfDAsbmU9KG5l'@;
put 'PW5lK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLGRlPWRlK01hdGguaW11bChodCxQbil8MCxKPUorTWF0aC5pbXVsKFRlLGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCxkZT1kZStNYXRoLmltdWwocWUsam4pfDA7'@;
put 'dmFyIHlyPShGZSsoSj1KK01hdGguaW11bChQZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFBlLHhyKXwwKStNYXRoLmltdWwoYmUsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoYmUseHIpfDApKyhuZT4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9'@;
put 'NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sSXQpLG5lPShuZT1NYXRoLmltdWwoZW4sUXQpKStNYXRoLmltdWwoJG4sSXQpfDAsZGU9TWF0aC5pbXVsKCRuLFF0KSxKPUorTWF0aC5pbXVsKFV0LHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsWXQpfDApK01hdGguaW11bChibixwdCl8MCxk'@;
put 'ZT1kZStNYXRoLmltdWwoYm4sWXQpfDAsSj1KK01hdGguaW11bChQdCx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLHluKXwwLEo9SitNYXRoLmltdWwodXQsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1'@;
put 'dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLGRlPWRlK01hdGguaW11bChNdCxCbil8MCxKPUorTWF0aC5pbXVsKERlLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsUG4pfDApK01hdGguaW11bCh6ZSwkdCl8MCxkZT1kZStNYXRoLmltdWwoemUsUG4pfDAsSj1KK01hdGguaW11bChV'@;
put 'ZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LGpuKXwwO3ZhciBQaT0oRmUrKEo9SitNYXRoLmltdWwoVGUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChUZSx4cil8MCkrTWF0aC5p'@;
put 'bXVsKHFlLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKHFlLHhyKXwwKSsobmU+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLHB0KSxuZT0obmU9TWF0aC5pbXVsKGVuLFl0KSkrTWF0aC5pbXVsKCRuLHB0KXwwLGRlPU1hdGguaW11'@;
put 'bCgkbixZdCksSj1KK01hdGguaW11bChVdCx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LHluKXwwKStNYXRoLmltdWwoYm4senQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLHluKXwwLEo9SitNYXRoLmltdWwoUHQsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5p'@;
put 'bXVsKG9uLHNuKXwwLGRlPWRlK01hdGguaW11bChvbixCbil8MCxKPUorTWF0aC5pbXVsKHV0LCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsUG4pfDApK01hdGguaW11bChNdCwkdCl8MCxkZT1kZStNYXRoLmltdWwoTXQsUG4pfDAsSj1KK01hdGguaW11bChEZSxsbil8MCxuZT0obmU9'@;
put 'bmUrTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHplLGpuKXwwO3ZhciBMbz0oRmUrKEo9SitNYXRoLmltdWwoVWUsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChVZSx4cil8MCkrTWF0aC5pbXVsKGh0LGdpKXwwKSk8'@;
put 'PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKGh0LHhyKXwwKSsobmU+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLHp0KSxuZT0obmU9TWF0aC5pbXVsKGVuLHluKSkrTWF0aC5pbXVsKCRuLHp0KXwwLGRlPU1hdGguaW11bCgkbix5biksSj1KK01h'@;
put 'dGguaW11bChVdCxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LEJuKXwwKStNYXRoLmltdWwoYm4sc24pfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLEJuKXwwLEo9SitNYXRoLmltdWwoUHQsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQdCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLGRl'@;
put 'PWRlK01hdGguaW11bChvbixQbil8MCxKPUorTWF0aC5pbXVsKHV0LGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCxkZT1kZStNYXRoLmltdWwoTXQsam4pfDA7dmFyIGhzPShGZSsoSj1KK01hdGguaW11bChEZSxnaSl8MCl8MCkrKCg4MTkx'@;
put 'JihuZT0obmU9bmUrTWF0aC5pbXVsKERlLHhyKXwwKStNYXRoLmltdWwoemUsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoemUseHIpfDApKyhuZT4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sc24pLG5lPShuZT1NYXRoLmltdWwo'@;
put 'ZW4sQm4pKStNYXRoLmltdWwoJG4sc24pfDAsZGU9TWF0aC5pbXVsKCRuLEJuKSxKPUorTWF0aC5pbXVsKFV0LCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsUG4pfDApK01hdGguaW11bChibiwkdCl8MCxkZT1kZStNYXRoLmltdWwoYm4sUG4pfDAsSj1KK01hdGguaW11bChQdCxsbil8'@;
put 'MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLGpuKXwwO3ZhciBycz0oRmUrKEo9SitNYXRoLmltdWwodXQsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh1dCx4cil8MCkrTWF0aC5pbXVsKE10'@;
put 'LGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKE10LHhyKXwwKSsobmU+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLCR0KSxuZT0obmU9TWF0aC5pbXVsKGVuLFBuKSkrTWF0aC5pbXVsKCRuLCR0KXwwLGRlPU1hdGguaW11bCgkbixQ'@;
put 'biksSj1KK01hdGguaW11bChVdCxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFV0LGpuKXwwKStNYXRoLmltdWwoYm4sbG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGJuLGpuKXwwO3ZhciBSYz0oRmUrKEo9SitNYXRoLmltdWwoUHQsZ2kpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11'@;
put 'bChQdCx4cil8MCkrTWF0aC5pbXVsKG9uLGdpKXwwKSk8PDEzKXwwO0ZlPSgoZGU9ZGUrTWF0aC5pbXVsKG9uLHhyKXwwKSsobmU+Pj4xMyl8MCkrKFJjPj4+MjYpfDAsUmMmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGVuLGxuKSxuZT0obmU9TWF0aC5pbXVsKGVuLGpuKSkrTWF0aC5pbXVsKCRu'@;
put 'LGxuKXwwLGRlPU1hdGguaW11bCgkbixqbik7dmFyIHVsPShGZSsoSj1KK01hdGguaW11bChVdCxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFV0LHhyKXwwKStNYXRoLmltdWwoYm4sZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoYm4seHIpfDApKyhu'@;
put 'ZT4+PjEzKXwwKSsodWw+Pj4yNil8MCx1bCY9NjcxMDg4NjM7dmFyIE9jPShGZSsoSj1NYXRoLmltdWwoZW4sZ2kpKXwwKSsoKDgxOTEmKG5lPShuZT1NYXRoLmltdWwoZW4seHIpKStNYXRoLmltdWwoJG4sZ2kpfDApKTw8MTMpfDA7cmV0dXJuIEZlPSgoZGU9TWF0aC5pbXVsKCRuLHhyKSkr'@;
put 'KG5lPj4+MTMpfDApKyhPYz4+PjI2KXwwLE9jJj02NzEwODg2MyxMZVswXT1VaSxMZVsxXT1LcixMZVsyXT1ubyxMZVszXT1IcixMZVs0XT1xaSxMZVs1XT1KaSxMZVs2XT1hbyxMZVs3XT1ybyxMZVs4XT1pbyxMZVs5XT1HaSxMZVsxMF09aG8sTGVbMTFdPXlyLExlWzEyXT1QaSxMZVsxM109'@;
put 'TG8sTGVbMTRdPWhzLExlWzE1XT1ycyxMZVsxNl09UmMsTGVbMTddPXVsLExlWzE4XT1PYywwIT09RmUmJihMZVsxOV09RmUsdy5sZW5ndGgrKyksd307ZnVuY3Rpb24gaGUodixwLHcpe3cubmVnYXRpdmU9cC5uZWdhdGl2ZV52Lm5lZ2F0aXZlLHcubGVuZ3RoPXYubGVuZ3RoK3AubGVuZ3Ro'@;
put 'O2Zvcih2YXIgSj0wLG5lPTAsZGU9MDtkZTx3Lmxlbmd0aC0xO2RlKyspe3ZhciBmZT1uZTtuZT0wO2Zvcih2YXIgeGU9NjcxMDg4NjMmSixMZT1NYXRoLm1pbihkZSxwLmxlbmd0aC0xKSxGZT1NYXRoLm1heCgwLGRlLXYubGVuZ3RoKzEpO0ZlPD1MZTtGZSsrKXt2YXIgamU9KDB8di53b3Jk'@;
put 'c1tkZS1GZV0pKigwfHAud29yZHNbRmVdKSxXZT02NzEwODg2MyZqZTt4ZT02NzEwODg2MyYoV2U9V2UreGV8MCksbmUrPShmZT0oZmU9ZmUrKGplLzY3MTA4ODY0fDApfDApKyhXZT4+PjI2KXwwKT4+PjI2LGZlJj02NzEwODg2M313LndvcmRzW2RlXT14ZSxKPWZlLGZlPW5lfXJldHVybiAw'@;
put 'IT09Sj93LndvcmRzW2RlXT1KOncubGVuZ3RoLS0sdy5fc3RyaXAoKX1mdW5jdGlvbiB1ZSh2LHAsdyl7cmV0dXJuIGhlKHYscCx3KX1mdW5jdGlvbiBjZSh2LHApe3RoaXMueD12LHRoaXMueT1wfU1hdGguaW11bHx8KHNlPW9lKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih2LHApe3Zh'@;
put 'ciB3PXRoaXMubGVuZ3RoK3YubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PXYubGVuZ3RoP3NlKHRoaXMsdixwKTp3PDYzP29lKHRoaXMsdixwKTp3PDEwMjQ/aGUodGhpcyx2LHApOnVlKHRoaXMsdixwKX0sY2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odil7Zm9y'@;
put 'KHZhciBwPW5ldyBBcnJheSh2KSx3PUUucHJvdG90eXBlLl9jb3VudEJpdHModiktMSxKPTA7Sjx2O0orKylwW0pdPXRoaXMucmV2QmluKEosdyx2KTtyZXR1cm4gcH0sY2UucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih2LHAsdyl7aWYoMD09PXZ8fHY9PT13LTEpcmV0dXJuIHY7Zm9yKHZh'@;
put 'ciBKPTAsbmU9MDtuZTxwO25lKyspSnw9KDEmdik8PHAtbmUtMSx2Pj49MTtyZXR1cm4gSn0sY2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odixwLHcsSixuZSxkZSl7Zm9yKHZhciBmZT0wO2ZlPGRlO2ZlKyspSltmZV09cFt2W2ZlXV0sbmVbZmVdPXdbdltmZV1dfSxjZS5wcm90b3R5'@;
put 'cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHYscCx3LEosbmUsZGUpe3RoaXMucGVybXV0ZShkZSx2LHAsdyxKLG5lKTtmb3IodmFyIGZlPTE7ZmU8bmU7ZmU8PD0xKWZvcih2YXIgeGU9ZmU8PDEsTGU9TWF0aC5jb3MoMipNYXRoLlBJL3hlKSxGZT1NYXRoLnNpbigyKk1hdGguUEkveGUpLE9lPTA7'@;
put 'T2U8bmU7T2UrPXhlKWZvcih2YXIgamU9TGUsV2U9RmUsS2U9MDtLZTxmZTtLZSsrKXt2YXIgWWU9d1tPZStLZV0sUWU9SltPZStLZV0sbHQ9d1tPZStLZStmZV0sUGU9SltPZStLZStmZV0sYmU9amUqbHQtV2UqUGU7UGU9amUqUGUrV2UqbHQsd1tPZStLZV09WWUrKGx0PWJlKSxKW09lK0tl'@;
put 'XT1RZStQZSx3W09lK0tlK2ZlXT1ZZS1sdCxKW09lK0tlK2ZlXT1RZS1QZSxLZSE9PXhlJiYoYmU9TGUqamUtRmUqV2UsV2U9TGUqV2UrRmUqamUsamU9YmUpfX0sY2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHYscCl7dmFyIHc9MXxNYXRoLm1heChwLHYpLEo9MSZ3LG5lPTA7'@;
put 'Zm9yKHc9dy8yfDA7dzt3Pj4+PTEpbmUrKztyZXR1cm4gMTw8bmUrMStKfSxjZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHYscCx3KXtpZighKHc8PTEpKWZvcih2YXIgSj0wO0o8dy8yO0orKyl7dmFyIG5lPXZbSl07dltKXT12W3ctSi0xXSx2W3ctSi0xXT1uZSxuZT1wW0pdLHBb'@;
put 'Sl09LXBbdy1KLTFdLHBbdy1KLTFdPS1uZX19LGNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9MCxKPTA7SjxwLzI7SisrKXt2YXIgbmU9ODE5MipNYXRoLnJvdW5kKHZbMipKKzFdL3ApK01hdGgucm91bmQodlsyKkpdL3ApK3c7dltKXT02NzEwODg2'@;
put 'MyZuZSx3PW5lPDY3MTA4ODY0PzA6bmUvNjcxMDg4NjR8MH1yZXR1cm4gdn0sY2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odixwLHcsSil7Zm9yKHZhciBuZT0wLGRlPTA7ZGU8cDtkZSsrKXdbMipkZV09ODE5MSYobmUrPTB8dltkZV0pLHdbMipkZSsxXT04MTkxJihuZT4+Pj0x'@;
put 'MyksbmU+Pj49MTM7Zm9yKGRlPTIqcDtkZTxKOysrZGUpd1tkZV09MDtJKDA9PT1uZSksSSgwPT0oLTgxOTImbmUpKX0sY2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odil7Zm9yKHZhciBwPW5ldyBBcnJheSh2KSx3PTA7dzx2O3crKylwW3ddPTA7cmV0dXJuIHB9LGNlLnByb3RvdHlwZS5t'@;
put 'dWxwPWZ1bmN0aW9uKHYscCx3KXt2YXIgSj0yKnRoaXMuZ3Vlc3NMZW4xM2Iodi5sZW5ndGgscC5sZW5ndGgpLG5lPXRoaXMubWFrZVJCVChKKSxkZT10aGlzLnN0dWIoSiksZmU9bmV3IEFycmF5KEopLHhlPW5ldyBBcnJheShKKSxMZT1uZXcgQXJyYXkoSiksRmU9bmV3IEFycmF5KEopLE9l'@;
put 'PW5ldyBBcnJheShKKSxqZT1uZXcgQXJyYXkoSiksV2U9dy53b3JkcztXZS5sZW5ndGg9Six0aGlzLmNvbnZlcnQxM2Iodi53b3Jkcyx2Lmxlbmd0aCxmZSxKKSx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxGZSxKKSx0aGlzLnRyYW5zZm9ybShmZSxkZSx4ZSxMZSxKLG5lKSx0'@;
put 'aGlzLnRyYW5zZm9ybShGZSxkZSxPZSxqZSxKLG5lKTtmb3IodmFyIEtlPTA7S2U8SjtLZSsrKXt2YXIgWWU9eGVbS2VdKk9lW0tlXS1MZVtLZV0qamVbS2VdO0xlW0tlXT14ZVtLZV0qamVbS2VdK0xlW0tlXSpPZVtLZV0seGVbS2VdPVllfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh4ZSxMZSxK'@;
put 'KSx0aGlzLnRyYW5zZm9ybSh4ZSxMZSxXZSxkZSxKLG5lKSx0aGlzLmNvbmp1Z2F0ZShXZSxkZSxKKSx0aGlzLm5vcm1hbGl6ZTEzYihXZSxKKSx3Lm5lZ2F0aXZlPXYubmVnYXRpdmVecC5uZWdhdGl2ZSx3Lmxlbmd0aD12Lmxlbmd0aCtwLmxlbmd0aCx3Ll9zdHJpcCgpfSxFLnByb3RvdHlw'@;
put 'ZS5tdWw9ZnVuY3Rpb24odil7dmFyIHA9bmV3IEUobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3YubGVuZ3RoKSx0aGlzLm11bFRvKHYscCl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odil7dmFyIHA9bmV3IEUobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3'@;
put 'IEFycmF5KHRoaXMubGVuZ3RoK3YubGVuZ3RoKSx1ZSh0aGlzLHYscCl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh2LHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLEkoIm51bWJl'@;
put 'ciI9PXR5cGVvZiB2KSxJKHY8NjcxMDg4NjQpO2Zvcih2YXIgdz0wLEo9MDtKPHRoaXMubGVuZ3RoO0orKyl7dmFyIG5lPSgwfHRoaXMud29yZHNbSl0pKnYsZGU9KDY3MTA4ODYzJm5lKSsoNjcxMDg4NjMmdyk7dz4+PTI2LHcrPW5lLzY3MTA4ODY0fDAsdys9ZGU+Pj4yNix0aGlzLndvcmRz'@;
put 'W0pdPTY3MTA4ODYzJmRlfXJldHVybiAwIT09dyYmKHRoaXMud29yZHNbSl09dyx0aGlzLmxlbmd0aCsrKSxwP3RoaXMuaW5lZygpOnRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih2KX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odil7dmFyIHA9ZnVuY3Rpb24oZGUpe2Zvcih2YXIgZmU9bmV3IEFycmF5KGRlLmJpdExlbmd0'@;
put 'aCgpKSx4ZT0wO3hlPGZlLmxlbmd0aDt4ZSsrKWZlW3hlXT1kZS53b3Jkc1t4ZS8yNnwwXT4+PnhlJTI2JjE7cmV0dXJuIGZlfSh2KTtpZigwPT09cC5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgdz10aGlzLEo9MDtKPHAubGVuZ3RoJiYwPT09cFtKXTtKKyssdz13LnNxcigpKTtp'@;
put 'ZigrK0o8cC5sZW5ndGgpZm9yKHZhciBuZT13LnNxcigpO0o8cC5sZW5ndGg7SisrLG5lPW5lLnNxcigpKTAhPT1wW0pdJiYodz13Lm11bChuZSkpO3JldHVybiB3fSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwLHc9diUy'@;
put 'NixKPSh2LXcpLzI2LG5lPTY3MTA4ODYzPj4+MjYtdzw8MjYtdztpZigwIT09dyl7dmFyIGRlPTA7Zm9yKHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIGZlPXRoaXMud29yZHNbcF0mbmU7dGhpcy53b3Jkc1twXT0oMHx0aGlzLndvcmRzW3BdKS1mZTw8d3xkZSxkZT1mZT4+PjI2LXd9ZGUm'@;
put 'Jih0aGlzLndvcmRzW3BdPWRlLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1KKXtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTA7cC0tKXRoaXMud29yZHNbcCtKXT10aGlzLndvcmRzW3BdO2ZvcihwPTA7cDxKO3ArKyl0aGlzLndvcmRzW3BdPTA7dGhpcy5sZW5ndGgrPUp9cmV0dXJuIHRoaXMuX3N0'@;
put 'cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHYpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHYscCx3KXt2YXIgSjtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCksSj1wPyhwLXAlMjYpLzI2'@;
put 'OjA7dmFyIG5lPXYlMjYsZGU9TWF0aC5taW4oKHYtbmUpLzI2LHRoaXMubGVuZ3RoKSxmZT02NzEwODg2M142NzEwODg2Mz4+Pm5lPDxuZSx4ZT13O2lmKEotPWRlLEo9TWF0aC5tYXgoMCxKKSx4ZSl7Zm9yKHZhciBMZT0wO0xlPGRlO0xlKyspeGUud29yZHNbTGVdPXRoaXMud29yZHNbTGVd'@;
put 'O3hlLmxlbmd0aD1kZX1pZigwIT09ZGUpaWYodGhpcy5sZW5ndGg+ZGUpZm9yKHRoaXMubGVuZ3RoLT1kZSxMZT0wO0xlPHRoaXMubGVuZ3RoO0xlKyspdGhpcy53b3Jkc1tMZV09dGhpcy53b3Jkc1tMZStkZV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgRmU9MDtm'@;
put 'b3IoTGU9dGhpcy5sZW5ndGgtMTtMZT49MCYmKDAhPT1GZXx8TGU+PUopO0xlLS0pe3ZhciBPZT0wfHRoaXMud29yZHNbTGVdO3RoaXMud29yZHNbTGVdPUZlPDwyNi1uZXxPZT4+Pm5lLEZlPU9lJmZlfXJldHVybiB4ZSYmMCE9PUZlJiYoeGUud29yZHNbeGUubGVuZ3RoKytdPUZlKSwwPT09'@;
put 'dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odixwLHcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih2LHAsdyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rp'@;
put 'b24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih2KX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odil9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih2KX0sRS5wcm90b3R5'@;
put 'cGUudXNocm49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odil9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKTt2YXIgcD12JTI2LHc9KHYtcCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9d3x8ISh0aGlzLndv'@;
put 'cmRzW3ddJjE8PHApKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKTt2YXIgcD12JTI2LHc9KHYtcCkvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIp'@;
put 'LHRoaXMubGVuZ3RoPD13P3RoaXM6KDAhPT1wJiZ3KyssdGhpcy5sZW5ndGg9TWF0aC5taW4odyx0aGlzLmxlbmd0aCksMCE9PXAmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PnA8PHApLHRoaXMuX3N0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1m'@;
put 'dW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih2KX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odil7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiB2KSxJKHY8NjcxMDg4NjQpLHY8MD90aGlzLmlzdWJuKC12KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5n'@;
put 'dGgmJigwfHRoaXMud29yZHNbMF0pPD12Pyh0aGlzLndvcmRzWzBdPXYtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih2KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odil9LEUucHJvdG90eXBlLl9p'@;
put 'YWRkbj1mdW5jdGlvbih2KXt0aGlzLndvcmRzWzBdKz12O2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbcF0+PTY3MTA4ODY0O3ArKyl0aGlzLndvcmRzW3BdLT02NzEwODg2NCxwPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3ArMV09MTp0aGlzLndvcmRzW3ArMV0r'@;
put 'KztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgscCsxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih2KXtpZihJKCJudW1iZXIiPT10eXBlb2YgdiksSSh2PDY3MTA4ODY0KSx2PDApcmV0dXJuIHRoaXMuaWFkZG4oLXYpO2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih2KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT12LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2Ug'@;
put 'Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1twXTwwO3ArKyl0aGlzLndvcmRzW3BdKz02NzEwODg2NCx0aGlzLndvcmRzW3ArMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRk'@;
put 'bih2KX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHYpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHYscCx3KXt2YXIgSixuZTt0aGlzLl9leHBhbmQodi5sZW5ndGgrdyk7dmFyIGZlPTA7Zm9yKEo9MDtKPHYubGVuZ3RoO0orKyl7bmU9KDB8dGhpcy53b3Jkc1tKK3ddKStmZTt2YXIgeGU9KDB8di53b3Jkc1tK'@;
put 'XSkqcDtmZT0oKG5lLT02NzEwODg2MyZ4ZSk+PjI2KS0oeGUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tKK3ddPTY3MTA4ODYzJm5lfWZvcig7Sjx0aGlzLmxlbmd0aC13O0orKylmZT0obmU9KDB8dGhpcy53b3Jkc1tKK3ddKStmZSk+PjI2LHRoaXMud29yZHNbSit3XT02NzEwODg2MyZuZTtp'@;
put 'ZigwPT09ZmUpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKEkoLTE9PT1mZSksZmU9MCxKPTA7Sjx0aGlzLmxlbmd0aDtKKyspZmU9KG5lPS0oMHx0aGlzLndvcmRzW0pdKStmZSk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmbmU7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJp'@;
put 'cCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih2LHApe3ZhciB3LEo9dGhpcy5jbG9uZSgpLG5lPXYsZGU9MHxuZS53b3Jkc1tuZS5sZW5ndGgtMV07MCE9KHc9MjYtdGhpcy5fY291bnRCaXRzKGRlKSkmJihuZT1uZS51c2hsbih3KSxKLml1c2hsbih3KSxkZT0wfG5lLndvcmRz'@;
put 'W25lLmxlbmd0aC0xXSk7dmFyIGZlLHhlPUoubGVuZ3RoLW5lLmxlbmd0aDtpZigibW9kIiE9PXApeyhmZT1uZXcgRShudWxsKSkubGVuZ3RoPXhlKzEsZmUud29yZHM9bmV3IEFycmF5KGZlLmxlbmd0aCk7Zm9yKHZhciBMZT0wO0xlPGZlLmxlbmd0aDtMZSsrKWZlLndvcmRzW0xlXT0wfXZh'@;
put 'ciBGZT1KLmNsb25lKCkuX2lzaGxuc3VibXVsKG5lLDEseGUpOzA9PT1GZS5uZWdhdGl2ZSYmKEo9RmUsZmUmJihmZS53b3Jkc1t4ZV09MSkpO2Zvcih2YXIgT2U9eGUtMTtPZT49MDtPZS0tKXt2YXIgamU9NjcxMDg4NjQqKDB8Si53b3Jkc1tuZS5sZW5ndGgrT2VdKSsoMHxKLndvcmRzW25l'@;
put 'Lmxlbmd0aCtPZS0xXSk7Zm9yKGplPU1hdGgubWluKGplL2RlfDAsNjcxMDg4NjMpLEouX2lzaGxuc3VibXVsKG5lLGplLE9lKTswIT09Si5uZWdhdGl2ZTspamUtLSxKLm5lZ2F0aXZlPTAsSi5faXNobG5zdWJtdWwobmUsMSxPZSksSi5pc1plcm8oKXx8KEoubmVnYXRpdmVePTEpO2ZlJiYo'@;
put 'ZmUud29yZHNbT2VdPWplKX1yZXR1cm4gZmUmJmZlLl9zdHJpcCgpLEouX3N0cmlwKCksImRpdiIhPT1wJiYwIT09dyYmSi5pdXNocm4odykse2RpdjpmZXx8bnVsbCxtb2Q6Sn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih2LHAsdyl7cmV0dXJuIEkoIXYuaXNaZXJvKCkpLHRoaXMu'@;
put 'aXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09di5uZWdhdGl2ZT8oZGU9dGhpcy5uZWcoKS5kaXZtb2QodixwKSwibW9kIiE9PXAmJihKPWRlLmRpdi5uZWcoKSksImRpdiIhPT1wJiYobmU9ZGUubW9kLm5lZygpLHcmJjAhPT1uZS5u'@;
put 'ZWdhdGl2ZSYmbmUuaWFkZCh2KSkse2RpdjpKLG1vZDpuZX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09di5uZWdhdGl2ZT8oZGU9dGhpcy5kaXZtb2Qodi5uZWcoKSxwKSwibW9kIiE9PXAmJihKPWRlLmRpdi5uZWcoKSkse2RpdjpKLG1vZDpkZS5tb2R9KTp0aGlzLm5lZ2F0aXZlJnYubmVn'@;
put 'YXRpdmU/KGRlPXRoaXMubmVnKCkuZGl2bW9kKHYubmVnKCkscCksImRpdiIhPT1wJiYobmU9ZGUubW9kLm5lZygpLHcmJjAhPT1uZS5uZWdhdGl2ZSYmbmUuaXN1Yih2KSkse2RpdjpkZS5kaXYsbW9kOm5lfSk6di5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHYpPDA/e2RpdjpuZXcg'@;
put 'RSgwKSxtb2Q6dGhpc306MT09PXYubGVuZ3RoPyJkaXYiPT09cD97ZGl2OnRoaXMuZGl2bih2LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1wP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2Rybih2LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHYud29yZHNbMF0pLG1vZDpuZXcg'@;
put 'RSh0aGlzLm1vZHJuKHYud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih2LHApO3ZhciBKLG5lLGRlfSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZGl2bW9kKHYsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRp'@;
put 'dm1vZCh2LCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZGl2bW9kKHYsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odil7dmFyIHA9dGhpcy5kaXZtb2Qodik7aWYocC5tb2QuaXNaZXJvKCkpcmV0dXJu'@;
put 'IHAuZGl2O3ZhciB3PTAhPT1wLmRpdi5uZWdhdGl2ZT9wLm1vZC5pc3ViKHYpOnAubW9kLEo9di51c2hybigxKSxuZT12LmFuZGxuKDEpLGRlPXcuY21wKEopO3JldHVybiBkZTwwfHwxPT09bmUmJjA9PT1kZT9wLmRpdjowIT09cC5kaXYubmVnYXRpdmU/cC5kaXYuaXN1Ym4oMSk6cC5kaXYu'@;
put 'aWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKHYpe3ZhciBwPXY8MDtwJiYodj0tdiksSSh2PD02NzEwODg2Myk7Zm9yKHZhciB3PTY3MTA4ODY0JXYsSj0wLG5lPXRoaXMubGVuZ3RoLTE7bmU+PTA7bmUtLSlKPSh3KkorKDB8dGhpcy53b3Jkc1tuZV0pKSV2O3JldHVybiBw'@;
put 'Py1KOkp9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubW9kcm4odil9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHYpe3ZhciBwPXY8MDtwJiYodj0tdiksSSh2PD02NzEwODg2Myk7Zm9yKHZhciB3PTAsSj10aGlzLmxlbmd0aC0xO0o+PTA7Si0tKXt2YXIg'@;
put 'bmU9KDB8dGhpcy53b3Jkc1tKXSkrNjcxMDg4NjQqdzt0aGlzLndvcmRzW0pdPW5lL3Z8MCx3PW5lJXZ9cmV0dXJuIHRoaXMuX3N0cmlwKCkscD90aGlzLmluZWcoKTp0aGlzfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odil9LEUucHJv'@;
put 'dG90eXBlLmVnY2Q9ZnVuY3Rpb24odil7SSgwPT09di5uZWdhdGl2ZSksSSghdi5pc1plcm8oKSk7dmFyIHA9dGhpcyx3PXYuY2xvbmUoKTtwPTAhPT1wLm5lZ2F0aXZlP3AudW1vZCh2KTpwLmNsb25lKCk7Zm9yKHZhciBKPW5ldyBFKDEpLG5lPW5ldyBFKDApLGRlPW5ldyBFKDApLGZlPW5l'@;
put 'dyBFKDEpLHhlPTA7cC5pc0V2ZW4oKSYmdy5pc0V2ZW4oKTspcC5pdXNocm4oMSksdy5pdXNocm4oMSksKyt4ZTtmb3IodmFyIExlPXcuY2xvbmUoKSxGZT1wLmNsb25lKCk7IXAuaXNaZXJvKCk7KXtmb3IodmFyIE9lPTAsamU9MTshKHAud29yZHNbMF0mamUpJiZPZTwyNjsrK09lLGplPDw9'@;
put 'MSk7aWYoT2U+MClmb3IocC5pdXNocm4oT2UpO09lLS0gPjA7KShKLmlzT2RkKCl8fG5lLmlzT2RkKCkpJiYoSi5pYWRkKExlKSxuZS5pc3ViKEZlKSksSi5pdXNocm4oMSksbmUuaXVzaHJuKDEpO2Zvcih2YXIgV2U9MCxLZT0xOyEody53b3Jkc1swXSZLZSkmJldlPDI2OysrV2UsS2U8PD0x'@;
put 'KTtpZihXZT4wKWZvcih3Lml1c2hybihXZSk7V2UtLSA+MDspKGRlLmlzT2RkKCl8fGZlLmlzT2RkKCkpJiYoZGUuaWFkZChMZSksZmUuaXN1YihGZSkpLGRlLml1c2hybigxKSxmZS5pdXNocm4oMSk7cC5jbXAodyk+PTA/KHAuaXN1Yih3KSxKLmlzdWIoZGUpLG5lLmlzdWIoZmUpKToody5p'@;
put 'c3ViKHApLGRlLmlzdWIoSiksZmUuaXN1YihuZSkpfXJldHVybnthOmRlLGI6ZmUsZ2NkOncuaXVzaGxuKHhlKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih2KXtJKDA9PT12Lm5lZ2F0aXZlKSxJKCF2LmlzWmVybygpKTt2YXIgcD10aGlzLHc9di5jbG9uZSgpO3A9MCE9PXAubmVn'@;
put 'YXRpdmU/cC51bW9kKHYpOnAuY2xvbmUoKTtmb3IodmFyIEosbmU9bmV3IEUoMSksZGU9bmV3IEUoMCksZmU9dy5jbG9uZSgpO3AuY21wbigxKT4wJiZ3LmNtcG4oMSk+MDspe2Zvcih2YXIgeGU9MCxMZT0xOyEocC53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZv'@;
put 'cihwLml1c2hybih4ZSk7eGUtLSA+MDspbmUuaXNPZGQoKSYmbmUuaWFkZChmZSksbmUuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEody53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcih3Lml1c2hybihGZSk7RmUtLSA+MDspZGUuaXNPZGQoKSYmZGUu'@;
put 'aWFkZChmZSksZGUuaXVzaHJuKDEpO3AuY21wKHcpPj0wPyhwLmlzdWIodyksbmUuaXN1YihkZSkpOih3LmlzdWIocCksZGUuaXN1YihuZSkpfXJldHVybihKPTA9PT1wLmNtcG4oMSk/bmU6ZGUpLmNtcG4oMCk8MCYmSi5pYWRkKHYpLEp9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbih2KXtp'@;
put 'Zih0aGlzLmlzWmVybygpKXJldHVybiB2LmFicygpO2lmKHYuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHA9dGhpcy5jbG9uZSgpLHc9di5jbG9uZSgpO3AubmVnYXRpdmU9MCx3Lm5lZ2F0aXZlPTA7Zm9yKHZhciBKPTA7cC5pc0V2ZW4oKSYmdy5pc0V2ZW4oKTtKKyspcC5pdXNo'@;
put 'cm4oMSksdy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3AuaXNFdmVuKCk7KXAuaXVzaHJuKDEpO2Zvcig7dy5pc0V2ZW4oKTspdy5pdXNocm4oMSk7dmFyIG5lPXAuY21wKHcpO2lmKG5lPDApe3ZhciBkZT1wO3A9dyx3PWRlfWVsc2UgaWYoMD09PW5lfHwwPT09dy5jbXBuKDEpKWJyZWFrO3Au'@;
put 'aXN1Yih3KX1yZXR1cm4gdy5pdXNobG4oSil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZWdjZCh2KS5hLnVtb2Qodil9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLndvcmRzWzBdJnZ9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVvZiB2KTt2YXIgcD12JTI2LHc9KHYtcCkv'@;
put 'MjYsSj0xPDxwO2lmKHRoaXMubGVuZ3RoPD13KXJldHVybiB0aGlzLl9leHBhbmQodysxKSx0aGlzLndvcmRzW3ddfD1KLHRoaXM7Zm9yKHZhciBuZT1KLGRlPXc7MCE9PW5lJiZkZTx0aGlzLmxlbmd0aDtkZSsrKXt2YXIgZmU9MHx0aGlzLndvcmRzW2RlXTtuZT0oZmUrPW5lKT4+PjI2LHRo'@;
put 'aXMud29yZHNbZGVdPWZlJj02NzEwODg2M31yZXR1cm4gMCE9PW5lJiYodGhpcy53b3Jkc1tkZV09bmUsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBl'@;
put 'LmNtcG49ZnVuY3Rpb24odil7dmFyIHAsdz12PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF3KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ3KXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlwPTE7ZWxzZXt3JiYodj0tdiksSSh2PD02NzEwODg2MywiTnVt'@;
put 'YmVyIGlzIHRvbyBiaWciKTt2YXIgSj0wfHRoaXMud29yZHNbMF07cD1KPT09dj8wOko8dj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1wOnB9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbih2KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXYubmVnYXRpdmUpcmV0dXJuLTE7'@;
put 'aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT12Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBwPXRoaXMudWNtcCh2KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcDpwfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHYpe2lmKHRoaXMubGVuZ3RoPnYubGVuZ3RoKXJldHVybiAxO2lmKHRo'@;
put 'aXMubGVuZ3RoPHYubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgcD0wLHc9dGhpcy5sZW5ndGgtMTt3Pj0wO3ctLSl7dmFyIEo9MHx0aGlzLndvcmRzW3ddLG5lPTB8di53b3Jkc1t3XTtpZihKIT09bmUpe0o8bmU/cD0tMTpKPm5lJiYocD0xKTticmVha319cmV0dXJuIHB9LEUucHJvdG90eXBl'@;
put 'Lmd0bj1mdW5jdGlvbih2KXtyZXR1cm4gMT09PXRoaXMuY21wbih2KX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odil7cmV0dXJuIDE9PT10aGlzLmNtcCh2KX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXBuKHYpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIHRoaXMuY21wKHYpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odil7cmV0dXJuLTE9PT10aGlzLmNtcG4odil9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHYpe3JldHVybi0xPT09dGhpcy5jbXAodil9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odil7'@;
put 'cmV0dXJuIHRoaXMuY21wbih2KTw9MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcCh2KTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHYpe3JldHVybiAwPT09dGhpcy5jbXBuKHYpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbih2KXtyZXR1cm4gMD09'@;
put 'PXRoaXMuY21wKHYpfSxFLnJlZD1mdW5jdGlvbih2KXtyZXR1cm4gbmV3IEModil9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHYpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHYpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0'@;
put 'aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLnJlZD12LHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHYpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rp'@;
put 'b24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHYpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5j'@;
put 'dGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1'@;
put 'bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdiksdGhpcy5yZWQubXVsKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0'@;
put 'aGlzLHYpLHRoaXMucmVkLmltdWwodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJv'@;
put 'dG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm'@;
put 'eTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQmJiF2LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx2KX07dmFyIEc9e2syNTY6'@;
put 'bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBiKHYscCl7dGhpcy5uYW1lPXYsdGhpcy5wPW5ldyBFKHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10'@;
put 'aGlzLl90bXAoKX1mdW5jdGlvbiBEKCl7Yi5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEgoKXtiLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gTigpe2IuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBnKCl7Yi5jYWxsKHRoaXMs'@;
put 'IjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEModil7aWYoInN0cmluZyI9PXR5cGVvZiB2KXt2YXIgcD1FLl9wcmltZSh2KTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIEko'@;
put 'di5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT12LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBTKHYpe0MuY2FsbCh0aGlzLHYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlz'@;
put 'LnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRo'@;
put 'aXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9Yi5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB2PW5ldyBFKG51bGwpO3JldHVybiB2LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdn0sYi5wcm90'@;
put 'b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih2KXt2YXIgcCx3PXY7ZG97dGhpcy5zcGxpdCh3LHRoaXMudG1wKSxwPSh3PSh3PXRoaXMuaW11bEsodykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShwPnRoaXMubik7dmFyIEo9cDx0aGlzLm4/LTE6dy51Y21wKHRoaXMucCk7cmV0'@;
put 'dXJuIDA9PT1KPyh3LndvcmRzWzBdPTAsdy5sZW5ndGg9MSk6Sj4wP3cuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXcuc3RyaXA/dy5zdHJpcCgpOncuX3N0cmlwKCksd30sYi5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odixwKXt2Lml1c2hybih0aGlzLm4sMCxwKX0sYi5wcm90b3R5cGUuaW11'@;
put 'bEs9ZnVuY3Rpb24odil7cmV0dXJuIHYuaW11bCh0aGlzLmspfSxrKEQsYiksRC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9NDE5NDMwMyxKPU1hdGgubWluKHYubGVuZ3RoLDkpLG5lPTA7bmU8SjtuZSsrKXAud29yZHNbbmVdPXYud29yZHNbbmVdO2lmKHAubGVu'@;
put 'Z3RoPUosdi5sZW5ndGg8PTkpcmV0dXJuIHYud29yZHNbMF09MCx2b2lkKHYubGVuZ3RoPTEpO3ZhciBkZT12LndvcmRzWzldO2ZvcihwLndvcmRzW3AubGVuZ3RoKytdPWRlJncsbmU9MTA7bmU8di5sZW5ndGg7bmUrKyl7dmFyIGZlPTB8di53b3Jkc1tuZV07di53b3Jkc1tuZS0xMF09KGZl'@;
put 'JncpPDw0fGRlPj4+MjIsZGU9ZmV9di53b3Jkc1tuZS0xMF09ZGU+Pj49MjIsdi5sZW5ndGgtPTA9PT1kZSYmdi5sZW5ndGg+MTA/MTA6OX0sRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odil7di53b3Jkc1t2Lmxlbmd0aF09MCx2LndvcmRzW3YubGVuZ3RoKzFdPTAsdi5sZW5ndGgrPTI7'@;
put 'Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXt2YXIgSj0wfHYud29yZHNbd107di53b3Jkc1t3XT02NzEwODg2MyYocCs9OTc3KkopLHA9NjQqSisocC82NzEwODg2NHwwKX1yZXR1cm4gMD09PXYud29yZHNbdi5sZW5ndGgtMV0mJih2Lmxlbmd0aC0tLDA9PT12LndvcmRzW3YubGVu'@;
put 'Z3RoLTFdJiZ2Lmxlbmd0aC0tKSx2fSxrKEgsYiksayhOLGIpLGsoZyxiKSxnLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih2KXtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3Kyspe3ZhciBKPTE5KigwfHYud29yZHNbd10pK3AsbmU9NjcxMDg4NjMmSjtKPj4+PTI2LHYud29yZHNbd109'@;
put 'bmUscD1KfXJldHVybiAwIT09cCYmKHYud29yZHNbdi5sZW5ndGgrK109cCksdn0sRS5fcHJpbWU9ZnVuY3Rpb24odil7aWYoR1t2XSlyZXR1cm4gR1t2XTt2YXIgcDtpZigiazI1NiI9PT12KXA9bmV3IEQ7ZWxzZSBpZigicDIyNCI9PT12KXA9bmV3IEg7ZWxzZSBpZigicDE5MiI9PT12KXA9'@;
put 'bmV3IE47ZWxzZXtpZigicDI1NTE5IiE9PXYpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrdik7cD1uZXcgZ31yZXR1cm4gR1t2XT1wLHB9LEMucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHYpe0koMD09PXYubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRp'@;
put 'dmVzIiksSSh2LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxDLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih2LHApe0koMD09KHYubmVnYXRpdmV8cC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSSh2LnJlZCYmdi5yZWQ9PT1w'@;
put 'LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxDLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh2KS5fZm9yY2VSZWQodGhpcyk6KFgodix2LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLHYp'@;
put 'fSxDLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odil7cmV0dXJuIHYuaXNaZXJvKCk/di5jbG9uZSgpOnRoaXMubS5zdWIodikuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odixwKXt0aGlzLl92ZXJpZnkyKHYscCk7dmFyIHc9di5hZGQocCk7cmV0dXJuIHcuY21w'@;
put 'KHRoaXMubSk+PTAmJncuaXN1Yih0aGlzLm0pLHcuX2ZvcmNlUmVkKHRoaXMpfSxDLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuaWFkZChwKTtyZXR1cm4gdy5jbXAodGhpcy5tKT49MCYmdy5pc3ViKHRoaXMubSksd30sQy5wcm90b3R5'@;
put 'cGUuc3ViPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciB3PXYuc3ViKHApO3JldHVybiB3LmNtcG4oMCk8MCYmdy5pYWRkKHRoaXMubSksdy5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odixwKXt0aGlzLl92ZXJpZnkyKHYscCk7dmFyIHc9'@;
put 'di5pc3ViKHApO3JldHVybiB3LmNtcG4oMCk8MCYmdy5pYWRkKHRoaXMubSksd30sQy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodiksdGhpcy5pbW9kKHYudXNobG4ocCkpfSxDLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRo'@;
put 'aXMuX3ZlcmlmeTIodixwKSx0aGlzLmltb2Qodi5pbXVsKHApKX0sQy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodixwKSx0aGlzLmltb2Qodi5tdWwocCkpfSxDLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmltdWwodix2'@;
put 'LmNsb25lKCkpfSxDLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubXVsKHYsdil9LEMucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odil7aWYodi5pc1plcm8oKSlyZXR1cm4gdi5jbG9uZSgpO3ZhciBwPXRoaXMubS5hbmRsbigzKTtpZihJKHAlMj09MSksMz09PXApe3Zh'@;
put 'ciB3PXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codix3KX1mb3IodmFyIEo9dGhpcy5tLnN1Ym4oMSksbmU9MDshSi5pc1plcm8oKSYmMD09PUouYW5kbG4oMSk7KW5lKyssSi5pdXNocm4oMSk7SSghSi5pc1plcm8oKSk7dmFyIGRlPW5ldyBFKDEpLnRv'@;
put 'UmVkKHRoaXMpLGZlPWRlLnJlZE5lZygpLHhlPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxMZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKExlPW5ldyBFKDIqTGUqTGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhMZSx4ZSkuY21wKGZlKTspTGUucmVkSUFkZChmZSk7Zm9yKHZhciBGZT10'@;
put 'aGlzLnBvdyhMZSxKKSxPZT10aGlzLnBvdyh2LEouYWRkbigxKS5pdXNocm4oMSkpLGplPXRoaXMucG93KHYsSiksV2U9bmU7MCE9PWplLmNtcChkZSk7KXtmb3IodmFyIEtlPWplLFllPTA7MCE9PUtlLmNtcChkZSk7WWUrKylLZT1LZS5yZWRTcXIoKTtJKFllPFdlKTt2YXIgUWU9dGhpcy5w'@;
put 'b3coRmUsbmV3IEUoMSkuaXVzaGxuKFdlLVllLTEpKTtPZT1PZS5yZWRNdWwoUWUpLEZlPVFlLnJlZFNxcigpLGplPWplLnJlZE11bChGZSksV2U9WWV9cmV0dXJuIE9lfSxDLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHYpe3ZhciBwPXYuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1wLm5l'@;
put 'Z2F0aXZlPyhwLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHApLnJlZE5lZygpKTp0aGlzLmltb2QocCl9LEMucHJvdG90eXBlLnBvdz1mdW5jdGlvbih2LHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1wLmNtcG4oMSkpcmV0dXJuIHYuY2xvbmUoKTt2'@;
put 'YXIgdz1uZXcgQXJyYXkoMTYpO3dbMF09bmV3IEUoMSkudG9SZWQodGhpcyksd1sxXT12O2Zvcih2YXIgSj0yO0o8dy5sZW5ndGg7SisrKXdbSl09dGhpcy5tdWwod1tKLTFdLHYpO3ZhciBuZT13WzBdLGRlPTAsZmU9MCx4ZT1wLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09eGUmJih4ZT0yNiks'@;
put 'Sj1wLmxlbmd0aC0xO0o+PTA7Si0tKXtmb3IodmFyIExlPXAud29yZHNbSl0sRmU9eGUtMTtGZT49MDtGZS0tKXt2YXIgT2U9TGU+PkZlJjE7bmUhPT13WzBdJiYobmU9dGhpcy5zcXIobmUpKSwwIT09T2V8fDAhPT1kZT8oZGU8PD0xLGRlfD1PZSwoND09KytmZXx8MD09PUomJjA9PT1GZSkm'@;
put 'JihuZT10aGlzLm11bChuZSx3W2RlXSksZmU9MCxkZT0wKSk6ZmU9MH14ZT0yNn1yZXR1cm4gbmV9LEMucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih2KXt2YXIgcD12LnVtb2QodGhpcy5tKTtyZXR1cm4gcD09PXY/cC5jbG9uZSgpOnB9LEMucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1'@;
put 'bmN0aW9uKHYpe3ZhciBwPXYuY2xvbmUoKTtyZXR1cm4gcC5yZWQ9bnVsbCxwfSxFLm1vbnQ9ZnVuY3Rpb24odil7cmV0dXJuIG5ldyBTKHYpfSxrKFMsQyksUy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmltb2Qodi51c2hsbih0aGlzLnNoaWZ0KSl9LFMu'@;
put 'cHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHYpe3ZhciBwPXRoaXMuaW1vZCh2Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gcC5yZWQ9bnVsbCxwfSxTLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHYscCl7aWYodi5pc1plcm8oKXx8cC5pc1plcm8oKSlyZXR1cm4gdi53b3Jkc1swXT0w'@;
put 'LHYubGVuZ3RoPTEsdjt2YXIgdz12LmltdWwocCksSj13Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxuZT13LmlzdWIoSikuaXVzaHJuKHRoaXMuc2hpZnQpLGRlPW5lO3JldHVybiBuZS5jbXAodGhpcy5tKT49MD9kZT1u'@;
put 'ZS5pc3ViKHRoaXMubSk6bmUuY21wbigwKTwwJiYoZGU9bmUuaWFkZCh0aGlzLm0pKSxkZS5fZm9yY2VSZWQodGhpcyl9LFMucHJvdG90eXBlLm11bD1mdW5jdGlvbih2LHApe2lmKHYuaXNaZXJvKCl8fHAuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgdz12'@;
put 'Lm11bChwKSxKPXcubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLG5lPXcuaXN1YihKKS5pdXNocm4odGhpcy5zaGlmdCksZGU9bmU7cmV0dXJuIG5lLmNtcCh0aGlzLm0pPj0wP2RlPW5lLmlzdWIodGhpcy5tKTpuZS5jbXBu'@;
put 'KDApPDAmJihkZT1uZS5pYWRkKHRoaXMubSkpLGRlLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbW9kKHYuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSwzNjQ0'@;
put 'OihNLE8sUik9Pnt2YXIgej1SKDEwNDgpLEs9Uig1NjIzKTtNLmV4cG9ydHM9ZnVuY3Rpb24oc2Upe3JldHVybiBzZT8oInt9Ij09PXNlLnN1YnN0cigwLDIpJiYoc2U9Ilxce1xcfSIrc2Uuc3Vic3RyKDIpKSxvZSgoaGU9c2UsaGUuc3BsaXQoIlxcXFwiKS5qb2luKEkpLnNwbGl0KCJcXHsi'@;
put 'KS5qb2luKGspLnNwbGl0KCJcXH0iKS5qb2luKEUpLnNwbGl0KCJcXCwiKS5qb2luKGopLnNwbGl0KCJcXC4iKS5qb2luKFYpKSwhMCkubWFwKFkpKTpbXTt2YXIgaGV9O3ZhciBJPSJcMFNMQVNIIitNYXRoLnJhbmRvbSgpKyJcMCIsaz0iXDBPUEVOIitNYXRoLnJhbmRvbSgpKyJcMCIsRT0i'@;
put 'XDBDTE9TRSIrTWF0aC5yYW5kb20oKSsiXDAiLGo9IlwwQ09NTUEiK01hdGgucmFuZG9tKCkrIlwwIixWPSJcMFBFUklPRCIrTWF0aC5yYW5kb20oKSsiXDAiO2Z1bmN0aW9uIEIoc2Upe3JldHVybiBwYXJzZUludChzZSwxMCk9PXNlP3BhcnNlSW50KHNlLDEwKTpzZS5jaGFyQ29kZUF0KDAp'@;
put 'fWZ1bmN0aW9uIFkoc2Upe3JldHVybiBzZS5zcGxpdChJKS5qb2luKCJcXCIpLnNwbGl0KGspLmpvaW4oInsiKS5zcGxpdChFKS5qb2luKCJ9Iikuc3BsaXQoaikuam9pbigiLCIpLnNwbGl0KFYpLmpvaW4oIi4iKX1mdW5jdGlvbiBYKHNlKXtpZighc2UpcmV0dXJuWyIiXTt2YXIgaGU9W10s'@;
put 'dWU9SygieyIsIn0iLHNlKTtpZighdWUpcmV0dXJuIHNlLnNwbGl0KCIsIik7dmFyIEc9dWUuYm9keSxiPXVlLnBvc3QsRD11ZS5wcmUuc3BsaXQoIiwiKTtEW0QubGVuZ3RoLTFdKz0ieyIrRysifSI7dmFyIEg9WChiKTtyZXR1cm4gYi5sZW5ndGgmJihEW0QubGVuZ3RoLTFdKz1ILnNoaWZ0'@;
put 'KCksRC5wdXNoLmFwcGx5KEQsSCkpLGhlLnB1c2guYXBwbHkoaGUsRCksaGV9ZnVuY3Rpb24gVShzZSl7cmV0dXJuInsiK3NlKyJ9In1mdW5jdGlvbiBxKHNlKXtyZXR1cm4vXi0/MFxkLy50ZXN0KHNlKX1mdW5jdGlvbiBlZShzZSxoZSl7cmV0dXJuIHNlPD1oZX1mdW5jdGlvbiB0ZShzZSxo'@;
put 'ZSl7cmV0dXJuIHNlPj1oZX1mdW5jdGlvbiBvZShzZSxoZSl7dmFyIHVlPVtdLGNlPUsoInsiLCJ9IixzZSk7aWYoIWNlfHwvXCQkLy50ZXN0KGNlLnByZSkpcmV0dXJuW3NlXTt2YXIgRyxiPS9eLT9cZCtcLlwuLT9cZCsoPzpcLlwuLT9cZCspPyQvLnRlc3QoY2UuYm9keSksRD0vXlthLXpB'@;
put 'LVpdXC5cLlthLXpBLVpdKD86XC5cLi0/XGQrKT8kLy50ZXN0KGNlLmJvZHkpLEg9Ynx8RCxOPWNlLmJvZHkuaW5kZXhPZigiLCIpPj0wO2lmKCFIJiYhTilyZXR1cm4gY2UucG9zdC5tYXRjaCgvLC4qXH0vKT9vZShzZT1jZS5wcmUrInsiK2NlLmJvZHkrRStjZS5wb3N0KTpbc2VdO2lmKEgp'@;
put 'Rz1jZS5ib2R5LnNwbGl0KC9cLlwuLyk7ZWxzZSBpZigxPT09KEc9WChjZS5ib2R5KSkubGVuZ3RoJiYxPT09KEc9b2UoR1swXSwhMSkubWFwKFUpKS5sZW5ndGgpcmV0dXJuKFM9Y2UucG9zdC5sZW5ndGg/b2UoY2UucG9zdCwhMSk6WyIiXSkubWFwKGZ1bmN0aW9uKEtlKXtyZXR1cm4gY2Uu'@;
put 'cHJlK0dbMF0rS2V9KTt2YXIgZyxDPWNlLnByZSxTPWNlLnBvc3QubGVuZ3RoP29lKGNlLnBvc3QsITEpOlsiIl07aWYoSCl7dmFyIHY9QihHWzBdKSxwPUIoR1sxXSksdz1NYXRoLm1heChHWzBdLmxlbmd0aCxHWzFdLmxlbmd0aCksSj0zPT1HLmxlbmd0aD9NYXRoLmFicyhCKEdbMl0pKTox'@;
put 'LG5lPWVlO3A8diYmKEoqPS0xLG5lPXRlKTt2YXIgZGU9Ry5zb21lKHEpO2c9W107Zm9yKHZhciBmZT12O25lKGZlLHApO2ZlKz1KKXt2YXIgeGU7aWYoRCkiXFwiPT09KHhlPVN0cmluZy5mcm9tQ2hhckNvZGUoZmUpKSYmKHhlPSIiKTtlbHNlIGlmKHhlPVN0cmluZyhmZSksZGUpe3ZhciBM'@;
put 'ZT13LXhlLmxlbmd0aDtpZihMZT4wKXt2YXIgRmU9bmV3IEFycmF5KExlKzEpLmpvaW4oIjAiKTt4ZT1mZTwwPyItIitGZSt4ZS5zbGljZSgxKTpGZSt4ZX19Zy5wdXNoKHhlKX19ZWxzZSBnPXooRyxmdW5jdGlvbihLZSl7cmV0dXJuIG9lKEtlLCExKX0pO2Zvcih2YXIgT2U9MDtPZTxnLmxl'@;
put 'bmd0aDtPZSsrKWZvcih2YXIgamU9MDtqZTxTLmxlbmd0aDtqZSsrKXt2YXIgV2U9QytnW09lXStTW2plXTsoIWhlfHxIfHxXZSkmJnVlLnB1c2goV2UpfXJldHVybiB1ZX19LDk5MzE6KE0sTyxSKT0+e3ZhciB6O2Z1bmN0aW9uIEsoayl7dGhpcy5yYW5kPWt9aWYoTS5leHBvcnRzPWZ1bmN0'@;
put 'aW9uKGspe3JldHVybiB6fHwoej1uZXcgSyhudWxsKSksei5nZW5lcmF0ZShrKX0sTS5leHBvcnRzLlJhbmQ9SyxLLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5fcmFuZChrKX0sSy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oayl7aWYodGhpcy5yYW5kLmdl'@;
put 'dEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMoayk7Zm9yKHZhciBFPW5ldyBVaW50OEFycmF5KGspLGo9MDtqPEUubGVuZ3RoO2orKylFW2pdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIEV9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8u'@;
put 'Z2V0UmFuZG9tVmFsdWVzP0sucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGspe3ZhciBFPW5ldyBVaW50OEFycmF5KGspO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoRSksRX06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Sy5wcm90b3R5'@;
put 'cGUuX3JhbmQ9ZnVuY3Rpb24oayl7dmFyIEU9bmV3IFVpbnQ4QXJyYXkoayk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEUpLEV9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoSy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBp'@;
put 'bXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBJPVIoOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEkucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Sy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oayl7cmV0dXJuIEkucmFuZG9tQnl0ZXMoayl9'@;
put 'fWNhdGNoe319LDQ0OTc6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoQil7ei5pc0J1ZmZlcihCKXx8KEI9ei5mcm9tKEIpKTtmb3IodmFyIFk9Qi5sZW5ndGgvNHwwLFg9bmV3IEFycmF5KFkpLFU9MDtVPFk7VSsrKVhbVV09Qi5yZWFkVUludDMyQkUoNCpVKTty'@;
put 'ZXR1cm4gWH1mdW5jdGlvbiBJKEIpe2Zvcig7MDxCLmxlbmd0aDtCKyspQlswXT0wfWZ1bmN0aW9uIGsoQixZLFgsVSxxKXtmb3IodmFyIGVlLHRlLG9lLHNlLGhlPVhbMF0sdWU9WFsxXSxjZT1YWzJdLEc9WFszXSxiPUJbMF1eWVswXSxEPUJbMV1eWVsxXSxIPUJbMl1eWVsyXSxOPUJbM11e'@;
put 'WVszXSxnPTQsQz0xO0M8cTtDKyspZWU9aGVbYj4+PjI0XV51ZVtEPj4+MTYmMjU1XV5jZVtIPj4+OCYyNTVdXkdbMjU1Jk5dXllbZysrXSx0ZT1oZVtEPj4+MjRdXnVlW0g+Pj4xNiYyNTVdXmNlW04+Pj44JjI1NV1eR1syNTUmYl1eWVtnKytdLG9lPWhlW0g+Pj4yNF1edWVbTj4+PjE2JjI1'@;
put 'NV1eY2VbYj4+PjgmMjU1XV5HWzI1NSZEXV5ZW2crK10sc2U9aGVbTj4+PjI0XV51ZVtiPj4+MTYmMjU1XV5jZVtEPj4+OCYyNTVdXkdbMjU1JkhdXllbZysrXSxiPWVlLEQ9dGUsSD1vZSxOPXNlO3JldHVybiBlZT0oVVtiPj4+MjRdPDwyNHxVW0Q+Pj4xNiYyNTVdPDwxNnxVW0g+Pj44JjI1'@;
put 'NV08PDh8VVsyNTUmTl0pXllbZysrXSx0ZT0oVVtEPj4+MjRdPDwyNHxVW0g+Pj4xNiYyNTVdPDwxNnxVW04+Pj44JjI1NV08PDh8VVsyNTUmYl0pXllbZysrXSxvZT0oVVtIPj4+MjRdPDwyNHxVW04+Pj4xNiYyNTVdPDwxNnxVW2I+Pj44JjI1NV08PDh8VVsyNTUmRF0pXllbZysrXSxzZT0o'@;
put 'VVtOPj4+MjRdPDwyNHxVW2I+Pj4xNiYyNTVdPDwxNnxVW0Q+Pj44JjI1NV08PDh8VVsyNTUmSF0pXllbZysrXSxbZWU+Pj49MCx0ZT4+Pj0wLG9lPj4+PTAsc2U+Pj49MF19dmFyIEU9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLGo9ZnVuY3Rpb24oKXtmb3IodmFyIEI9bmV3IEFy'@;
put 'cmF5KDI1NiksWT0wO1k8MjU2O1krKylCW1ldPVk8MTI4P1k8PDE6WTw8MV4yODM7Zm9yKHZhciBYPVtdLFU9W10scT1bW10sW10sW10sW11dLGVlPVtbXSxbXSxbXSxbXV0sdGU9MCxvZT0wLHNlPTA7c2U8MjU2Oysrc2Upe3ZhciBoZT1vZV5vZTw8MV5vZTw8Ml5vZTw8M15vZTw8NDtYW3Rl'@;
put 'XT1oZT1oZT4+PjheMjU1JmhlXjk5LFVbaGVdPXRlO3ZhciB1ZT1CW3RlXSxjZT1CW3VlXSxHPUJbY2VdLGI9MjU3KkJbaGVdXjE2ODQzMDA4KmhlO3FbMF1bdGVdPWI8PDI0fGI+Pj44LHFbMV1bdGVdPWI8PDE2fGI+Pj4xNixxWzJdW3RlXT1iPDw4fGI+Pj4yNCxxWzNdW3RlXT1iLGVlWzBd'@;
put 'W2hlXT0oYj0xNjg0MzAwOSpHXjY1NTM3KmNlXjI1Nyp1ZV4xNjg0MzAwOCp0ZSk8PDI0fGI+Pj44LGVlWzFdW2hlXT1iPDwxNnxiPj4+MTYsZWVbMl1baGVdPWI8PDh8Yj4+PjI0LGVlWzNdW2hlXT1iLDA9PT10ZT90ZT1vZT0xOih0ZT11ZV5CW0JbQltHXnVlXV1dLG9lXj1CW0Jbb2VdXSl9'@;
put 'cmV0dXJue1NCT1g6WCxJTlZfU0JPWDpVLFNVQl9NSVg6cSxJTlZfU1VCX01JWDplZX19KCk7ZnVuY3Rpb24gVihCKXt0aGlzLl9rZXk9SyhCKSx0aGlzLl9yZXNldCgpfVYuYmxvY2tTaXplPTE2LFYua2V5U2l6ZT0zMixWLnByb3RvdHlwZS5ibG9ja1NpemU9Vi5ibG9ja1NpemUsVi5wcm90'@;
put 'b3R5cGUua2V5U2l6ZT1WLmtleVNpemUsVi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBCPXRoaXMuX2tleSxZPUIubGVuZ3RoLFg9WSs2LFU9NCooWCsxKSxxPVtdLGVlPTA7ZWU8WTtlZSsrKXFbZWVdPUJbZWVdO2ZvcihlZT1ZO2VlPFU7ZWUrKyl7dmFyIHRlPXFbZWUt'@;
put 'MV07ZWUlWT09MD8odGU9ai5TQk9YWyh0ZT10ZTw8OHx0ZT4+PjI0KT4+PjI0XTw8MjR8ai5TQk9YW3RlPj4+MTYmMjU1XTw8MTZ8ai5TQk9YW3RlPj4+OCYyNTVdPDw4fGouU0JPWFsyNTUmdGVdLHRlXj1FW2VlL1l8MF08PDI0KTpZPjYmJmVlJVk9PTQmJih0ZT1qLlNCT1hbdGU+Pj4yNF08'@;
put 'PDI0fGouU0JPWFt0ZT4+PjE2JjI1NV08PDE2fGouU0JPWFt0ZT4+PjgmMjU1XTw8OHxqLlNCT1hbMjU1JnRlXSkscVtlZV09cVtlZS1ZXV50ZX1mb3IodmFyIG9lPVtdLHNlPTA7c2U8VTtzZSsrKXt2YXIgaGU9VS1zZSx1ZT1xW2hlLShzZSU0PzA6NCldO29lW3NlXT1zZTw0fHxoZTw9ND91'@;
put 'ZTpqLklOVl9TVUJfTUlYWzBdW2ouU0JPWFt1ZT4+PjI0XV1eai5JTlZfU1VCX01JWFsxXVtqLlNCT1hbdWU+Pj4xNiYyNTVdXV5qLklOVl9TVUJfTUlYWzJdW2ouU0JPWFt1ZT4+PjgmMjU1XV1eai5JTlZfU1VCX01JWFszXVtqLlNCT1hbMjU1JnVlXV19dGhpcy5fblJvdW5kcz1YLHRoaXMu'@;
put 'X2tleVNjaGVkdWxlPXEsdGhpcy5faW52S2V5U2NoZWR1bGU9b2V9LFYucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihCKXtyZXR1cm4gayhCPUsoQiksdGhpcy5fa2V5U2NoZWR1bGUsai5TVUJfTUlYLGouU0JPWCx0aGlzLl9uUm91bmRzKX0sVi5wcm90b3R5cGUuZW5jcnlw'@;
put 'dEJsb2NrPWZ1bmN0aW9uKEIpe3ZhciBZPXRoaXMuZW5jcnlwdEJsb2NrUmF3KEIpLFg9ei5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFgud3JpdGVVSW50MzJCRShZWzBdLDApLFgud3JpdGVVSW50MzJCRShZWzFdLDQpLFgud3JpdGVVSW50MzJCRShZWzJdLDgpLFgud3JpdGVVSW50MzJCRShZ'@;
put 'WzNdLDEyKSxYfSxWLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oQil7dmFyIFk9KEI9SyhCKSlbMV07QlsxXT1CWzNdLEJbM109WTt2YXIgWD1rKEIsdGhpcy5faW52S2V5U2NoZWR1bGUsai5JTlZfU1VCX01JWCxqLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLFU9ei5hbGxvY1Vu'@;
put 'c2FmZSgxNik7cmV0dXJuIFUud3JpdGVVSW50MzJCRShYWzBdLDApLFUud3JpdGVVSW50MzJCRShYWzNdLDQpLFUud3JpdGVVSW50MzJCRShYWzJdLDgpLFUud3JpdGVVSW50MzJCRShYWzFdLDEyKSxVfSxWLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe0kodGhpcy5fa2V5U2NoZWR1bGUp'@;
put 'LEkodGhpcy5faW52S2V5U2NoZWR1bGUpLEkodGhpcy5fa2V5KX0sTS5leHBvcnRzLkFFUz1WfSw0ODQ4OihNLE8sUik9Pnt2YXIgej1SKDQ0OTcpLEs9Uig5NTA5KS5CdWZmZXIsST1SKDEwMjcpLGs9Uig1NzE3KSxFPVIoMzI4OCksaj1SKDcyOTUpLFY9Uig2ODUpO2Z1bmN0aW9uIEIoWSxY'@;
put 'LFUscSl7SS5jYWxsKHRoaXMpO3ZhciBlZT1LLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyB6LkFFUyhYKTt2YXIgdGU9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhlZSk7dGhpcy5fZ2hhc2g9bmV3IEUodGUpLFU9ZnVuY3Rpb24ob2Usc2UsaGUpe2lmKDEyPT09c2UubGVuZ3RoKXJl'@;
put 'dHVybiBvZS5fZmluSUQ9Sy5jb25jYXQoW3NlLEsuZnJvbShbMCwwLDAsMV0pXSksSy5jb25jYXQoW3NlLEsuZnJvbShbMCwwLDAsMl0pXSk7dmFyIHVlPW5ldyBFKGhlKSxjZT1zZS5sZW5ndGgsRz1jZSUxNjt1ZS51cGRhdGUoc2UpLEcmJnVlLnVwZGF0ZShLLmFsbG9jKEc9MTYtRywwKSks'@;
put 'dWUudXBkYXRlKEsuYWxsb2MoOCwwKSk7dmFyIGI9OCpjZSxEPUsuYWxsb2MoOCk7RC53cml0ZVVJbnRCRShiLDAsOCksdWUudXBkYXRlKEQpLG9lLl9maW5JRD11ZS5zdGF0ZTt2YXIgSD1LLmZyb20ob2UuX2ZpbklEKTtyZXR1cm4gVihIKSxIfSh0aGlzLFUsdGUpLHRoaXMuX3ByZXY9Sy5m'@;
put 'cm9tKFUpLHRoaXMuX2NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXEsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9WSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWsoQixJKSxC'@;
put 'LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFkpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBYPTE2LXRoaXMuX2FsZW4lMTY7WDwxNiYmKFg9Sy5hbGxvYyhYLDApLHRoaXMuX2doYXNoLnVwZGF0ZShYKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUuZW5j'@;
put 'cnlwdCh0aGlzLFkpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9ZOlUpLHRoaXMuX2xlbis9WS5sZW5ndGgsVX0sQi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1'@;
put 'cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgWT1qKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9u'@;
put 'KFgsVSl7dmFyIHE9MDtYLmxlbmd0aCE9PVUubGVuZ3RoJiZxKys7Zm9yKHZhciBlZT1NYXRoLm1pbihYLmxlbmd0aCxVLmxlbmd0aCksdGU9MDt0ZTxlZTsrK3RlKXErPVhbdGVdXlVbdGVdO3JldHVybiBxfShZLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQg'@;
put 'c3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1ZLHRoaXMuX2NpcGhlci5zY3J1YigpfSxCLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdHx8IUsuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxCLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKFkpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBz'@;
put 'ZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPVl9LEIucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihZKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlz'@;
put 'Ll9naGFzaC51cGRhdGUoWSksdGhpcy5fYWxlbis9WS5sZW5ndGh9LE0uZXhwb3J0cz1CfSw0Njk2OihNLE8sUik9Pnt2YXIgej1SKDE0OTQpLEs9Uig2MTkzKSxJPVIoNDk0Nik7Ty5jcmVhdGVDaXBoZXI9Ty5DaXBoZXI9ei5jcmVhdGVDaXBoZXIsTy5jcmVhdGVDaXBoZXJpdj1PLkNpcGhl'@;
put 'cml2PXouY3JlYXRlQ2lwaGVyaXYsTy5jcmVhdGVEZWNpcGhlcj1PLkRlY2lwaGVyPUsuY3JlYXRlRGVjaXBoZXIsTy5jcmVhdGVEZWNpcGhlcml2PU8uRGVjaXBoZXJpdj1LLmNyZWF0ZURlY2lwaGVyaXYsTy5saXN0Q2lwaGVycz1PLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2Jq'@;
put 'ZWN0LmtleXMoSSl9fSw2MTkzOihNLE8sUik9Pnt2YXIgej1SKDQ4NDgpLEs9Uig5NTA5KS5CdWZmZXIsST1SKDQ1KSxrPVIoNTk2OSksRT1SKDEwMjcpLGo9Uig0NDk3KSxWPVIoMzA0OCk7ZnVuY3Rpb24gQihVLHEsZWUpe0UuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgWSx0aGlzLl9s'@;
put 'YXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IGouQUVTKHEpLHRoaXMuX3ByZXY9Sy5mcm9tKGVlKSx0aGlzLl9tb2RlPVUsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gWSgpe3RoaXMuY2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBYKFUscSxlZSl7dmFyIHRlPUlbVS50'@;
put 'b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBlZSYmKGVlPUsuZnJvbShlZSkpLCJHQ00iIT09dGUubW9kZSYmZWUubGVuZ3RoIT09dGUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxp'@;
put 'ZCBpdiBsZW5ndGggIitlZS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9Sy5mcm9tKHEpKSxxLmxlbmd0aCE9PXRlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PXRlLnR5cGU/bmV3IGso'@;
put 'dGUubW9kdWxlLHEsZWUsITApOiJhdXRoIj09PXRlLnR5cGU/bmV3IHoodGUubW9kdWxlLHEsZWUsITApOm5ldyBCKHRlLm1vZHVsZSxxLGVlKX1SKDU3MTcpKEIsRSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVKXt2YXIgcSxlZTt0aGlzLl9jYWNoZS5hZGQoVSk7Zm9yKHZhciB0'@;
put 'ZT1bXTtxPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KWVlPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHEpLHRlLnB1c2goZWUpO3JldHVybiBLLmNvbmNhdCh0ZSl9LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBVPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYo'@;
put 'dGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uKHEpe3ZhciBlZT1xWzE1XTtpZihlZTwxfHxlZT4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIHRlPS0xOysrdGU8ZWU7KWlmKHFbdGUrKDE2LWVlKV0hPT1lZSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PWVlKXJldHVybiBxLnNsaWNlKDAsMTYtZWUpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxVKSk7aWYoVSl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxCLnByb3RvdHlwZS5z'@;
put 'ZXRBdXRvUGFkZGluZz1mdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFVLHRoaXN9LFkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihVKXt0aGlzLmNhY2hlPUsuY29uY2F0KFt0aGlzLmNhY2hlLFVdKX0sWS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFUpe3ZhciBxO2lmKFUp'@;
put 'e2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBxPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxxfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBxPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10'@;
put 'aGlzLmNhY2hlLnNsaWNlKDE2KSxxO3JldHVybiBudWxsfSxZLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxPLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uKFUscSl7dmFyIGVlPUlbVS50b0xvd2VyQ2FzZSgpXTtpZigh'@;
put 'ZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIHRlPVYocSwhMSxlZS5rZXksZWUuaXYpO3JldHVybiBYKFUsdGUua2V5LHRlLml2KX0sTy5jcmVhdGVEZWNpcGhlcml2PVh9LDE0OTQ6KE0sTyxSKT0+e3ZhciB6PVIoNDUpLEs9Uig0ODQ4KSxJPVIoOTUw'@;
put 'OSkuQnVmZmVyLGs9Uig1OTY5KSxFPVIoMTAyNyksaj1SKDQ0OTcpLFY9UigzMDQ4KTtmdW5jdGlvbiBCKHEsZWUsdGUpe0UuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgWCx0aGlzLl9jaXBoZXI9bmV3IGouQUVTKGVlKSx0aGlzLl9wcmV2PUkuZnJvbSh0ZSksdGhpcy5fbW9kZT1xLHRo'@;
put 'aXMuX2F1dG9wYWRkaW5nPSEwfVIoNTcxNykoQixFKSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe3ZhciBlZSx0ZTt0aGlzLl9jYWNoZS5hZGQocSk7Zm9yKHZhciBvZT1bXTtlZT10aGlzLl9jYWNoZS5nZXQoKTspdGU9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsZWUpLG9lLnB1'@;
put 'c2godGUpO3JldHVybiBJLmNvbmNhdChvZSl9O3ZhciBZPUkuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIFgoKXt0aGlzLmNhY2hlPUkuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gVShxLGVlLHRlKXt2YXIgb2U9eltxLnRvTG93ZXJDYXNlKCldO2lmKCFvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJp'@;
put 'bnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIGVlJiYoZWU9SS5mcm9tKGVlKSksZWUubGVuZ3RoIT09b2Uua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrZWUubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHRlJiYodGU9SS5m'@;
put 'cm9tKHRlKSksIkdDTSIhPT1vZS5tb2RlJiZ0ZS5sZW5ndGghPT1vZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3RlLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1vZS50eXBlP25ldyBrKG9lLm1vZHVsZSxlZSx0ZSk6ImF1dGgiPT09b2UudHlwZT9uZXcg'@;
put 'SyhvZS5tb2R1bGUsZWUsdGUpOm5ldyBCKG9lLm1vZHVsZSxlZSx0ZSl9Qi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHE9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxxKSx0aGlzLl9jaXBo'@;
put 'ZXIuc2NydWIoKSxxO2lmKCFxLmVxdWFscyhZKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxCLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRp'@;
put 'bmc9ISFxLHRoaXN9LFgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihxKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLHFdKX0sWC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBxPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJu'@;
put 'IHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNikscX1yZXR1cm4gbnVsbH0sWC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIHE9MTYtdGhpcy5jYWNoZS5sZW5ndGgsZWU9SS5hbGxvY1Vuc2FmZShxKSx0ZT0tMTsrK3RlPHE7KWVlLndyaXRlVUludDgocSx0ZSk7cmV0'@;
put 'dXJuIEkuY29uY2F0KFt0aGlzLmNhY2hlLGVlXSl9LE8uY3JlYXRlQ2lwaGVyaXY9VSxPLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbihxLGVlKXt2YXIgdGU9eltxLnRvTG93ZXJDYXNlKCldO2lmKCF0ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgb2U9Vihl'@;
put 'ZSwhMSx0ZS5rZXksdGUuaXYpO3JldHVybiBVKHEsb2Uua2V5LG9lLml2KX19LDMyODg6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9ei5hbGxvYygxNiwwKTtmdW5jdGlvbiBJKEUpe3ZhciBqPXouYWxsb2NVbnNhZmUoMTYpO3JldHVybiBqLndyaXRlVUludDMyQkUoRVswXT4+'@;
put 'PjAsMCksai53cml0ZVVJbnQzMkJFKEVbMV0+Pj4wLDQpLGoud3JpdGVVSW50MzJCRShFWzJdPj4+MCw4KSxqLndyaXRlVUludDMyQkUoRVszXT4+PjAsMTIpLGp9ZnVuY3Rpb24gayhFKXt0aGlzLmg9RSx0aGlzLnN0YXRlPXouYWxsb2MoMTYsMCksdGhpcy5jYWNoZT16LmFsbG9jVW5zYWZl'@;
put 'KDApfWsucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKEUpe2Zvcih2YXIgaj0tMTsrK2o8RS5sZW5ndGg7KXRoaXMuc3RhdGVbal1ePUVbal07dGhpcy5fbXVsdGlwbHkoKX0say5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBFLGosVixCPVsoRT10aGlzLmgpLnJlYWRV'@;
put 'SW50MzJCRSgwKSxFLnJlYWRVSW50MzJCRSg0KSxFLnJlYWRVSW50MzJCRSg4KSxFLnJlYWRVSW50MzJCRSgxMildLFk9WzAsMCwwLDBdLFg9LTE7KytYPDEyODspe2Zvcih0aGlzLnN0YXRlW35+KFgvOCldJjE8PDctWCU4JiYoWVswXV49QlswXSxZWzFdXj1CWzFdLFlbMl1ePUJbMl0sWVsz'@;
put 'XV49QlszXSksVj0wIT0oMSZCWzNdKSxqPTM7aj4wO2otLSlCW2pdPUJbal0+Pj4xfCgxJkJbai0xXSk8PDMxO0JbMF09QlswXT4+PjEsViYmKEJbMF09LTUyMDA5MzY5Nl5CWzBdKX10aGlzLnN0YXRlPUkoWSl9LGsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihFKXt2YXIgajtmb3IodGhp'@;
put 'cy5jYWNoZT16LmNvbmNhdChbdGhpcy5jYWNoZSxFXSk7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylqPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKGopfSxrLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihFLGope3JldHVy'@;
put 'biB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaCh6LmNvbmNhdChbdGhpcy5jYWNoZSxLXSwxNikpLHRoaXMuZ2hhc2goSShbMCxFLDAsal0pKSx0aGlzLnN0YXRlfSxNLmV4cG9ydHM9a30sNjg1Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7Zm9yKHZhciBSLHo9Ty5sZW5ndGg7ei0t'@;
put 'Oyl7aWYoMjU1IT09KFI9Ty5yZWFkVUludDgoeikpKXtSKyssTy53cml0ZVVJbnQ4KFIseik7YnJlYWt9Ty53cml0ZVVJbnQ4KDAseil9fX0sNTI5MjooTSxPLFIpPT57dmFyIHo9Uig3Mjk1KTtPLmVuY3J5cHQ9ZnVuY3Rpb24oSyxJKXt2YXIgaz16KEksSy5fcHJldik7cmV0dXJuIEsuX3By'@;
put 'ZXY9Sy5fY2lwaGVyLmVuY3J5cHRCbG9jayhrKSxLLl9wcmV2fSxPLmRlY3J5cHQ9ZnVuY3Rpb24oSyxJKXt2YXIgaz1LLl9wcmV2O0suX3ByZXY9STt2YXIgRT1LLl9jaXBoZXIuZGVjcnlwdEJsb2NrKEkpO3JldHVybiB6KEUsayl9fSw2MzExOihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1'@;
put 'ZmZlcixLPVIoNzI5NSk7ZnVuY3Rpb24gSShrLEUsail7dmFyIFY9RS5sZW5ndGgsQj1LKEUsay5fY2FjaGUpO3JldHVybiBrLl9jYWNoZT1rLl9jYWNoZS5zbGljZShWKSxrLl9wcmV2PXouY29uY2F0KFtrLl9wcmV2LGo/RTpCXSksQn1PLmVuY3J5cHQ9ZnVuY3Rpb24oayxFLGope2Zvcih2'@;
put 'YXIgVixCPXouYWxsb2NVbnNhZmUoMCk7RS5sZW5ndGg7KXtpZigwPT09ay5fY2FjaGUubGVuZ3RoJiYoay5fY2FjaGU9ay5fY2lwaGVyLmVuY3J5cHRCbG9jayhrLl9wcmV2KSxrLl9wcmV2PXouYWxsb2NVbnNhZmUoMCkpLCEoay5fY2FjaGUubGVuZ3RoPD1FLmxlbmd0aCkpe0I9ei5jb25j'@;
put 'YXQoW0IsSShrLEUsaildKTticmVha31CPXouY29uY2F0KFtCLEkoayxFLnNsaWNlKDAsVj1rLl9jYWNoZS5sZW5ndGgpLGopXSksRT1FLnNsaWNlKFYpfXJldHVybiBCfX0sMTUxMDooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhrLEUsail7Zm9yKHZhciBWLEIs'@;
put 'WT0tMSxYPTA7KytZPDg7KVY9RSYxPDw3LVk/MTI4OjAsWCs9KDEyOCYoQj1rLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGsuX3ByZXYpWzBdXlYpKT4+WSU4LGsuX3ByZXY9SShrLl9wcmV2LGo/VjpCKTtyZXR1cm4gWH1mdW5jdGlvbiBJKGssRSl7dmFyIGo9ay5sZW5ndGgsVj0tMSxCPXouYWxs'@;
put 'b2NVbnNhZmUoay5sZW5ndGgpO2ZvcihrPXouY29uY2F0KFtrLHouZnJvbShbRV0pXSk7KytWPGo7KUJbVl09a1tWXTw8MXxrW1YrMV0+Pjc7cmV0dXJuIEJ9Ty5lbmNyeXB0PWZ1bmN0aW9uKGssRSxqKXtmb3IodmFyIFY9RS5sZW5ndGgsQj16LmFsbG9jVW5zYWZlKFYpLFk9LTE7KytZPFY7'@;
put 'KUJbWV09SyhrLEVbWV0saik7cmV0dXJuIEJ9fSwxOTY0OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBLKEksayxFKXt2YXIgaj1JLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEkuX3ByZXYpWzBdXms7cmV0dXJuIEkuX3ByZXY9ei5jb25jYXQoW0kuX3ByZXYuc2xpY2Uo'@;
put 'MSksei5mcm9tKFtFP2s6al0pXSksan1PLmVuY3J5cHQ9ZnVuY3Rpb24oSSxrLEUpe2Zvcih2YXIgaj1rLmxlbmd0aCxWPXouYWxsb2NVbnNhZmUoaiksQj0tMTsrK0I8ajspVltCXT1LKEksa1tCXSxFKTtyZXR1cm4gVn19LDYwMDk6KE0sTyxSKT0+e3ZhciB6PVIoNzI5NSksSz1SKDk1MDkp'@;
put 'LkJ1ZmZlcixJPVIoNjg1KTtmdW5jdGlvbiBrKEUpe3ZhciBqPUUuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoRS5fcHJldik7cmV0dXJuIEkoRS5fcHJldiksan1PLmVuY3J5cHQ9ZnVuY3Rpb24oRSxqKXt2YXIgVj1NYXRoLmNlaWwoai5sZW5ndGgvMTYpLEI9RS5fY2FjaGUubGVuZ3RoO0Uu'@;
put 'X2NhY2hlPUsuY29uY2F0KFtFLl9jYWNoZSxLLmFsbG9jVW5zYWZlKDE2KlYpXSk7Zm9yKHZhciBZPTA7WTxWO1krKyl7dmFyIFg9ayhFKSxVPUIrMTYqWTtFLl9jYWNoZS53cml0ZVVJbnQzMkJFKFhbMF0sVSswKSxFLl9jYWNoZS53cml0ZVVJbnQzMkJFKFhbMV0sVSs0KSxFLl9jYWNoZS53'@;
put 'cml0ZVVJbnQzMkJFKFhbMl0sVSs4KSxFLl9jYWNoZS53cml0ZVVJbnQzMkJFKFhbM10sVSsxMil9dmFyIHE9RS5fY2FjaGUuc2xpY2UoMCxqLmxlbmd0aCk7cmV0dXJuIEUuX2NhY2hlPUUuX2NhY2hlLnNsaWNlKGoubGVuZ3RoKSx6KGoscSl9fSwxMDg0OihNLE8pPT57Ty5lbmNyeXB0PWZ1'@;
put 'bmN0aW9uKFIseil7cmV0dXJuIFIuX2NpcGhlci5lbmNyeXB0QmxvY2soeil9LE8uZGVjcnlwdD1mdW5jdGlvbihSLHope3JldHVybiBSLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHopfX0sNDU6KE0sTyxSKT0+e3ZhciB6PXtFQ0I6UigxMDg0KSxDQkM6Uig1MjkyKSxDRkI6Uig2MzExKSxDRkI4'@;
put 'OlIoMTk2NCksQ0ZCMTpSKDE1MTApLE9GQjpSKDg4NjEpLENUUjpSKDYwMDkpLEdDTTpSKDYwMDkpfSxLPVIoNDk0Nik7Zm9yKHZhciBJIGluIEspS1tJXS5tb2R1bGU9eltLW0ldLm1vZGVdO00uZXhwb3J0cz1LfSw4ODYxOihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNzI5'@;
put 'NSk7ZnVuY3Rpb24gSShrKXtyZXR1cm4gay5fcHJldj1rLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGsuX3ByZXYpLGsuX3ByZXZ9Ty5lbmNyeXB0PWZ1bmN0aW9uKGssRSl7Zm9yKDtrLl9jYWNoZS5sZW5ndGg8RS5sZW5ndGg7KWsuX2NhY2hlPXouY29uY2F0KFtrLl9jYWNoZSxJKGspXSk7dmFy'@;
put 'IGo9ay5fY2FjaGUuc2xpY2UoMCxFLmxlbmd0aCk7cmV0dXJuIGsuX2NhY2hlPWsuX2NhY2hlLnNsaWNlKEUubGVuZ3RoKSxLKEUsail9fSw1OTY5OihNLE8sUik9Pnt2YXIgej1SKDQ0OTcpLEs9Uig5NTA5KS5CdWZmZXIsST1SKDEwMjcpO2Z1bmN0aW9uIGsoRSxqLFYsQil7SS5jYWxsKHRo'@;
put 'aXMpLHRoaXMuX2NpcGhlcj1uZXcgei5BRVMoaiksdGhpcy5fcHJldj1LLmZyb20oViksdGhpcy5fY2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Qix0aGlzLl9tb2RlPUV9Uig1NzE3KShrLEkpLGsucHJvdG90eXBl'@;
put 'Ll91cGRhdGU9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEUsdGhpcy5fZGVjcnlwdCl9LGsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxNLmV4cG9ydHM9a30sMzYxNDooTSxPLFIpPT57dmFyIHo9Uig3NjY3KSxL'@;
put 'PVIoNDY5NiksST1SKDQ1KSxrPVIoOTcxNSksRT1SKDMwNDgpO2Z1bmN0aW9uIGooQixZLFgpe2lmKEI9Qi50b0xvd2VyQ2FzZSgpLElbQl0pcmV0dXJuIEsuY3JlYXRlQ2lwaGVyaXYoQixZLFgpO2lmKGtbQl0pcmV0dXJuIG5ldyB6KHtrZXk6WSxpdjpYLG1vZGU6Qn0pO3Rocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIFYoQixZLFgpe2lmKEI9Qi50b0xvd2VyQ2FzZSgpLElbQl0pcmV0dXJuIEsuY3JlYXRlRGVjaXBoZXJpdihCLFksWCk7aWYoa1tCXSlyZXR1cm4gbmV3IHooe2tleTpZLGl2OlgsbW9kZTpCLGRlY3J5cHQ6ITB9KTt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1PLmNyZWF0ZUNpcGhlcj1PLkNpcGhlcj1mdW5jdGlvbihCLFkpe3ZhciBYLFU7aWYoQj1CLnRvTG93ZXJDYXNlKCksSVtCXSlYPUlbQl0ua2V5LFU9SVtCXS5pdjtlbHNle2lmKCFrW0JdKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'ImludmFsaWQgc3VpdGUgdHlwZSIpO1g9OCprW0JdLmtleSxVPWtbQl0uaXZ9dmFyIHE9RShZLCExLFgsVSk7cmV0dXJuIGooQixxLmtleSxxLml2KX0sTy5jcmVhdGVDaXBoZXJpdj1PLkNpcGhlcml2PWosTy5jcmVhdGVEZWNpcGhlcj1PLkRlY2lwaGVyPWZ1bmN0aW9uKEIsWSl7dmFyIFgs'@;
put 'VTtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKVg9SVtCXS5rZXksVT1JW0JdLml2O2Vsc2V7aWYoIWtbQl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7WD04KmtbQl0ua2V5LFU9a1tCXS5pdn12YXIgcT1FKFksITEsWCxVKTtyZXR1cm4gVihCLHEua2V5LHEu'@;
put 'aXYpfSxPLmNyZWF0ZURlY2lwaGVyaXY9Ty5EZWNpcGhlcml2PVYsTy5saXN0Q2lwaGVycz1PLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoaykuY29uY2F0KEsuZ2V0Q2lwaGVycygpKX19LDc2Njc6KE0sTyxSKT0+e3ZhciB6PVIoMTAyNyksSz1SKDUyNTEpLEk9'@;
put 'Uig1NzE3KSxrPVIoOTUwOSkuQnVmZmVyLEU9eyJkZXMtZWRlMy1jYmMiOksuQ0JDLmluc3RhbnRpYXRlKEsuRURFKSwiZGVzLWVkZTMiOksuRURFLCJkZXMtZWRlLWNiYyI6Sy5DQkMuaW5zdGFudGlhdGUoSy5FREUpLCJkZXMtZWRlIjpLLkVERSwiZGVzLWNiYyI6Sy5DQkMuaW5zdGFudGlh'@;
put 'dGUoSy5ERVMpLCJkZXMtZWNiIjpLLkRFU307ZnVuY3Rpb24gaihWKXt6LmNhbGwodGhpcyk7dmFyIEIsWT1WLm1vZGUudG9Mb3dlckNhc2UoKSxYPUVbWV07Qj1WLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgVT1WLmtleTtrLmlzQnVmZmVyKFUpfHwoVT1rLmZyb20oVSkpLCJk'@;
put 'ZXMtZWRlIiE9PVkmJiJkZXMtZWRlLWNiYyIhPT1ZfHwoVT1rLmNvbmNhdChbVSxVLnNsaWNlKDAsOCldKSk7dmFyIHE9Vi5pdjtrLmlzQnVmZmVyKHEpfHwocT1rLmZyb20ocSkpLHRoaXMuX2Rlcz1YLmNyZWF0ZSh7a2V5OlUsaXY6cSx0eXBlOkJ9KX1FLmRlcz1FWyJkZXMtY2JjIl0sRS5k'@;
put 'ZXMzPUVbImRlcy1lZGUzLWNiYyJdLE0uZXhwb3J0cz1qLEkoaix6KSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYpe3JldHVybiBrLmZyb20odGhpcy5fZGVzLnVwZGF0ZShWKSl9LGoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBrLmZyb20odGhpcy5fZGVzLmZp'@;
put 'bmFsKCkpfX0sOTcxNTooTSxPKT0+e09bImRlcy1lY2IiXT17a2V5OjgsaXY6MH0sT1siZGVzLWNiYyJdPU8uZGVzPXtrZXk6OCxpdjo4fSxPWyJkZXMtZWRlMy1jYmMiXT1PLmRlczM9e2tleToyNCxpdjo4fSxPWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sT1siZGVzLWVkZS1jYmMiXT17'@;
put 'a2V5OjE2LGl2Ojh9LE9bImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwzNjYzOihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoMzU1MCksST1SKDE3OTgpO2Z1bmN0aW9uIGsoail7dmFyIFYsQj1qLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve1Y9bmV3IEsoSShCKSl9d2hpbGUo'@;
put 'Vi5jbXAoai5tb2R1bHVzKT49MHx8IVYudW1vZChqLnByaW1lMSl8fCFWLnVtb2Qoai5wcmltZTIpKTtyZXR1cm4gVn1mdW5jdGlvbiBFKGosVil7dmFyIGNlLEcsQj17YmxpbmRlcjooRz1rKGNlPVYpKS50b1JlZChLLm1vbnQoY2UubW9kdWx1cykpLnJlZFBvdyhuZXcgSyhjZS5wdWJsaWNF'@;
put 'eHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6Ry5pbnZtKGNlLm1vZHVsdXMpfSxZPVYubW9kdWx1cy5ieXRlTGVuZ3RoKCksWD1uZXcgSyhqKS5tdWwoQi5ibGluZGVyKS51bW9kKFYubW9kdWx1cyksVT1YLnRvUmVkKEsubW9udChWLnByaW1lMSkpLHE9WC50b1JlZChLLm1vbnQoVi5w'@;
put 'cmltZTIpKSxlZT1WLmNvZWZmaWNpZW50LHRlPVYucHJpbWUxLG9lPVYucHJpbWUyLHNlPVUucmVkUG93KFYuZXhwb25lbnQxKS5mcm9tUmVkKCksaGU9cS5yZWRQb3coVi5leHBvbmVudDIpLmZyb21SZWQoKSx1ZT1zZS5pc3ViKGhlKS5pbXVsKGVlKS51bW9kKHRlKS5pbXVsKG9lKTtyZXR1'@;
put 'cm4gaGUuaWFkZCh1ZSkuaW11bChCLnVuYmxpbmRlcikudW1vZChWLm1vZHVsdXMpLnRvQXJyYXlMaWtlKHosImJlIixZKX1FLmdldHI9ayxNLmV4cG9ydHM9RX0sNjA0MjooTSxPLFIpPT57TS5leHBvcnRzPVIoNTIwNyl9LDQ3NDM6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9'@;
put 'UigzNDgyKSxJPVIoODQ3Myksaz1SKDU3MTcpLEU9UigyOTU3KSxqPVIoNzc1MyksVj1SKDUyMDcpO2Z1bmN0aW9uIEIocSl7SS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBlZT1WW3FdO2lmKCFlZSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNo'@;
put 'VHlwZT1lZS5oYXNoLHRoaXMuX2hhc2g9SyhlZS5oYXNoKSx0aGlzLl90YWc9ZWUuaWQsdGhpcy5fc2lnblR5cGU9ZWUuc2lnbn1mdW5jdGlvbiBZKHEpe0kuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZWU9VltxXTtpZighZWUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGln'@;
put 'ZXN0Iik7dGhpcy5faGFzaD1LKGVlLmhhc2gpLHRoaXMuX3RhZz1lZS5pZCx0aGlzLl9zaWduVHlwZT1lZS5zaWdufWZ1bmN0aW9uIFgocSl7cmV0dXJuIG5ldyBCKHEpfWZ1bmN0aW9uIFUocSl7cmV0dXJuIG5ldyBZKHEpfU9iamVjdC5rZXlzKFYpLmZvckVhY2goZnVuY3Rpb24ocSl7Vltx'@;
put 'XS5pZD16LmZyb20oVltxXS5pZCwiaGV4IiksVltxLnRvTG93ZXJDYXNlKCldPVZbcV19KSxrKEIsSS5Xcml0YWJsZSksQi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHEsZWUsdGUpe3RoaXMuX2hhc2gudXBkYXRlKHEpLHRlKCl9LEIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihxLGVl'@;
put 'KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHEmJihxPXouZnJvbShxLGVlKSksdGhpcy5faGFzaC51cGRhdGUocSksdGhpc30sQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihxLGVlKXt0aGlzLmVuZCgpO3ZhciB0ZT10aGlzLl9oYXNoLmRpZ2VzdCgpLG9lPUUodGUscSx0aGlzLl9oYXNoVHlw'@;
put 'ZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBlZT9vZS50b1N0cmluZyhlZSk6b2V9LGsoWSxJLldyaXRhYmxlKSxZLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24ocSxlZSx0ZSl7dGhpcy5faGFzaC51cGRhdGUocSksdGUoKX0sWS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9u'@;
put 'KHEsZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgcSYmKHE9ei5mcm9tKHEsZWUpKSx0aGlzLl9oYXNoLnVwZGF0ZShxKSx0aGlzfSxZLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24ocSxlZSx0ZSl7InN0cmluZyI9PXR5cGVvZiBlZSYmKGVlPXouZnJvbShlZSx0ZSkpLHRoaXMuZW5kKCk7'@;
put 'dmFyIG9lPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIGooZWUsb2UscSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxNLmV4cG9ydHM9e1NpZ246WCxWZXJpZnk6VSxjcmVhdGVTaWduOlgsY3JlYXRlVmVyaWZ5OlV9fSwyOTU3OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixL'@;
put 'PVIoODM1NSksST1SKDM2NjMpLGs9Uig2OTQ4KS5lYyxFPVIoMzU1MCksaj1SKDk4MCksVj1SKDEzMDgpO2Z1bmN0aW9uIEIocSxlZSx0ZSxvZSl7aWYoKHE9ei5mcm9tKHEudG9BcnJheSgpKSkubGVuZ3RoPGVlLmJ5dGVMZW5ndGgoKSl7dmFyIHNlPXouYWxsb2MoZWUuYnl0ZUxlbmd0aCgp'@;
put 'LXEubGVuZ3RoKTtxPXouY29uY2F0KFtzZSxxXSl9dmFyIGhlPXRlLmxlbmd0aCx1ZT1mdW5jdGlvbihiLEQpe2I9KGI9WShiLEQpKS5tb2QoRCk7dmFyIEg9ei5mcm9tKGIudG9BcnJheSgpKTtpZihILmxlbmd0aDxELmJ5dGVMZW5ndGgoKSl7dmFyIE49ei5hbGxvYyhELmJ5dGVMZW5ndGgo'@;
put 'KS1ILmxlbmd0aCk7SD16LmNvbmNhdChbTixIXSl9cmV0dXJuIEh9KHRlLGVlKSxjZT16LmFsbG9jKGhlKTtjZS5maWxsKDEpO3ZhciBHPXouYWxsb2MoaGUpO3JldHVybiBHPUsob2UsRykudXBkYXRlKGNlKS51cGRhdGUoei5mcm9tKFswXSkpLnVwZGF0ZShxKS51cGRhdGUodWUpLmRpZ2Vz'@;
put 'dCgpLGNlPUsob2UsRykudXBkYXRlKGNlKS5kaWdlc3QoKSx7azpHPUsob2UsRykudXBkYXRlKGNlKS51cGRhdGUoei5mcm9tKFsxXSkpLnVwZGF0ZShxKS51cGRhdGUodWUpLmRpZ2VzdCgpLHY6Y2U9SyhvZSxHKS51cGRhdGUoY2UpLmRpZ2VzdCgpfX1mdW5jdGlvbiBZKHEsZWUpe3ZhciB0'@;
put 'ZT1uZXcgRShxKSxvZT0ocS5sZW5ndGg8PDMpLWVlLmJpdExlbmd0aCgpO3JldHVybiBvZT4wJiZ0ZS5pc2hybihvZSksdGV9ZnVuY3Rpb24gWChxLGVlLHRlKXt2YXIgb2Usc2U7ZG97Zm9yKG9lPXouYWxsb2MoMCk7OCpvZS5sZW5ndGg8cS5iaXRMZW5ndGgoKTspZWUudj1LKHRlLGVlLmsp'@;
put 'LnVwZGF0ZShlZS52KS5kaWdlc3QoKSxvZT16LmNvbmNhdChbb2UsZWUudl0pO3NlPVkob2UscSksZWUuaz1LKHRlLGVlLmspLnVwZGF0ZShlZS52KS51cGRhdGUoei5mcm9tKFswXSkpLmRpZ2VzdCgpLGVlLnY9Syh0ZSxlZS5rKS51cGRhdGUoZWUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1z'@;
put 'ZS5jbXAocSkpO3JldHVybiBzZX1mdW5jdGlvbiBVKHEsZWUsdGUsb2Upe3JldHVybiBxLnRvUmVkKEUubW9udCh0ZSkpLnJlZFBvdyhlZSkuZnJvbVJlZCgpLm1vZChvZSl9TS5leHBvcnRzPWZ1bmN0aW9uKHEsZWUsdGUsb2Usc2Upe3ZhciBoZT1qKGVlKTtpZihoZS5jdXJ2ZSl7aWYoImVj'@;
put 'ZHNhIiE9PW9lJiYiZWNkc2EvcnNhIiE9PW9lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihiLEQpe3ZhciBIPVZbRC5jdXJ2ZS5qb2luKCIuIildO2lmKCFIKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0QuY3VydmUu'@;
put 'am9pbigiLiIpKTt2YXIgZz1uZXcgayhIKS5rZXlGcm9tUHJpdmF0ZShELnByaXZhdGVLZXkpLnNpZ24oYik7cmV0dXJuIHouZnJvbShnLnRvREVSKCkpfShxLGhlKX1pZigiZHNhIj09PWhlLnR5cGUpe2lmKCJkc2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0'@;
put 'eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGIsRCxIKXtmb3IodmFyIE4sZz1ELnBhcmFtcy5wcml2X2tleSxDPUQucGFyYW1zLnAsUz1ELnBhcmFtcy5xLHY9RC5wYXJhbXMuZyxwPW5ldyBFKDApLHc9WShiLFMpLm1vZChTKSxKPSExLG5lPUIoZyxTLGIsSCk7ITE9PT1KOylwPVUodixOPVgoUyxu'@;
put 'ZSxIKSxDLFMpLDA9PT0oSj1OLmludm0oUykuaW11bCh3LmFkZChnLm11bChwKSkpLm1vZChTKSkuY21wbigwKSYmKEo9ITEscD1uZXcgRSgwKSk7cmV0dXJuIGZ1bmN0aW9uKGRlLGZlKXtkZT1kZS50b0FycmF5KCksZmU9ZmUudG9BcnJheSgpLDEyOCZkZVswXSYmKGRlPVswXS5jb25jYXQo'@;
put 'ZGUpKSwxMjgmZmVbMF0mJihmZT1bMF0uY29uY2F0KGZlKSk7dmFyIExlPVs0OCxkZS5sZW5ndGgrZmUubGVuZ3RoKzQsMixkZS5sZW5ndGhdO3JldHVybiBMZT1MZS5jb25jYXQoZGUsWzIsZmUubGVuZ3RoXSxmZSksei5mcm9tKExlKX0ocCxKKX0ocSxoZSx0ZSl9aWYoInJzYSIhPT1vZSYm'@;
put 'ImVjZHNhL3JzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtxPXouY29uY2F0KFtzZSxxXSk7Zm9yKHZhciB1ZT1oZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxjZT1bMCwxXTtxLmxlbmd0aCtjZS5sZW5ndGgrMTx1ZTspY2UucHVzaCgyNTUpO2NlLnB1'@;
put 'c2goMCk7Zm9yKHZhciBHPS0xOysrRzxxLmxlbmd0aDspY2UucHVzaChxW0ddKTtyZXR1cm4gSShjZSxoZSl9LE0uZXhwb3J0cy5nZXRLZXk9QixNLmV4cG9ydHMubWFrZUtleT1YfSw3NzUzOihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMzU1MCksST1SKDY5NDgpLmVjLGs9'@;
put 'Uig5ODApLEU9UigxMzA4KTtmdW5jdGlvbiBqKFYsQil7aWYoVi5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihWLmNtcChCKT49Qil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIil9TS5leHBvcnRzPWZ1bmN0aW9uKFYsQixZLFgsVSl7dmFyIHE9ayhZ'@;
put 'KTtpZigiZWMiPT09cS50eXBlKXtpZigiZWNkc2EiIT09WCYmImVjZHNhL3JzYSIhPT1YKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ9RVtiLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIUQp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrYi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgSShEKS52ZXJpZnkoRyxjZSxiLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KFYsQixxKX1pZigiZHNhIj09PXEudHlwZSl7aWYoImRzYSIhPT1Y'@;
put 'KXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ9Yi5kYXRhLnAsSD1iLmRhdGEucSxOPWIuZGF0YS5nLGc9Yi5kYXRhLnB1Yl9rZXksQz1rLnNpZ25hdHVyZS5kZWNvZGUoY2UsImRlciIpLFM9Qy5zLHY9Qy5yO2oo'@;
put 'UyxIKSxqKHYsSCk7dmFyIHA9Sy5tb250KEQpLHc9Uy5pbnZtKEgpO3JldHVybiAwPT09Ti50b1JlZChwKS5yZWRQb3cobmV3IEsoRykubXVsKHcpLm1vZChIKSkuZnJvbVJlZCgpLm11bChnLnRvUmVkKHApLnJlZFBvdyh2Lm11bCh3KS5tb2QoSCkpLmZyb21SZWQoKSkubW9kKEQpLm1vZChI'@;
put 'KS5jbXAodil9KFYsQixxKX1pZigicnNhIiE9PVgmJiJlY2RzYS9yc2EiIT09WCl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0I9ei5jb25jYXQoW1UsQl0pO2Zvcih2YXIgZWU9cS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSx0ZT1bMV0sb2U9MDtCLmxlbmd0aCt0ZS5s'@;
put 'ZW5ndGgrMjxlZTspdGUucHVzaCgyNTUpLG9lKys7dGUucHVzaCgwKTtmb3IodmFyIHNlPS0xOysrc2U8Qi5sZW5ndGg7KXRlLnB1c2goQltzZV0pO3RlPXouZnJvbSh0ZSk7dmFyIGhlPUsubW9udChxLm1vZHVsdXMpO1Y9KFY9bmV3IEsoVikudG9SZWQoaGUpKS5yZWRQb3cobmV3IEsocS5w'@;
put 'dWJsaWNFeHBvbmVudCkpLFY9ei5mcm9tKFYuZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIHVlPW9lPDg/MTowO2ZvcihlZT1NYXRoLm1pbihWLmxlbmd0aCx0ZS5sZW5ndGgpLFYubGVuZ3RoIT09dGUubGVuZ3RoJiYodWU9MSksc2U9LTE7KytzZTxlZTspdWV8PVZbc2VdXnRlW3NlXTtyZXR1'@;
put 'cm4gMD09PXVlfX0sNzI5NTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSl7Zm9yKHZhciBrPU1hdGgubWluKEsubGVuZ3RoLEkubGVuZ3RoKSxFPW5ldyB6KGspLGo9MDtqPGs7KytqKUVbal09S1tqXV5JW2pdO3JldHVybiBFfX0sODc2NDoo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7Y29uc3QgSz1SKDk3NDIpLEk9Uig2NDUpLGs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxs'@;
put 'O08uQnVmZmVyPVYsTy5TbG93QnVmZmVyPWZ1bmN0aW9uKE1lKXtyZXR1cm4rTWUhPU1lJiYoTWU9MCksVi5hbGxvYygrTWUpfSxPLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IEU9MjE0NzQ4MzY0NztmdW5jdGlvbiBqKE1lKXtpZihNZT5FKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUg'@;
put 'dmFsdWUgIicrTWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0IERlPW5ldyBVaW50OEFycmF5KE1lKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKERlLFYucHJvdG90eXBlKSxEZX1mdW5jdGlvbiBWKE1lLERlLHplKXtpZigibnVtYmVyIj09dHlwZW9mIE1l'@;
put 'KXtpZigic3RyaW5nIj09dHlwZW9mIERlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBYKE1lKX1yZXR1cm4gQihNZSxEZSx6ZSl9ZnVuY3Rpb24gQihNZSxEZSx6'@;
put 'ZSl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSlyZXR1cm4gZnVuY3Rpb24oTXQsSHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSHQmJiIiIT09SHR8fChIdD0idXRmOCIpLCFWLmlzRW5jb2RpbmcoSHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSHQpO2NvbnN0IFB0'@;
put 'PTB8dGUoTXQsSHQpO2xldCBvbj1qKFB0KTtjb25zdCBDbj1vbi53cml0ZShNdCxIdCk7cmV0dXJuIENuIT09UHQmJihvbj1vbi5zbGljZSgwLENuKSksb259KE1lLERlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoTWUpKXJldHVybiBmdW5jdGlvbihNdCl7aWYoVGUoTXQsVWludDhBcnJheSkp'@;
put 'e2NvbnN0IEh0PW5ldyBVaW50OEFycmF5KE10KTtyZXR1cm4gcShIdC5idWZmZXIsSHQuYnl0ZU9mZnNldCxIdC5ieXRlTGVuZ3RoKX1yZXR1cm4gVShNdCl9KE1lKTtpZihudWxsPT1NZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlw'@;
put 'ZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBNZSk7aWYoVGUoTWUsQXJyYXlCdWZmZXIpfHxNZSYmVGUoTWUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVy'@;
put 'PCJ1IiYmKFRlKE1lLFNoYXJlZEFycmF5QnVmZmVyKXx8TWUmJlRlKE1lLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBxKE1lLERlLHplKTtpZigibnVtYmVyIj09dHlwZW9mIE1lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJl'@;
put 'IG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IG90PU1lLnZhbHVlT2YmJk1lLnZhbHVlT2YoKTtpZihudWxsIT1vdCYmb3QhPT1NZSlyZXR1cm4gVi5mcm9tKG90LERlLHplKTtjb25zdCB1dD1mdW5jdGlvbihNdCl7aWYoVi5pc0J1ZmZlcihNdCkpe2NvbnN0'@;
put 'IEh0PTB8ZWUoTXQubGVuZ3RoKSxQdD1qKEh0KTtyZXR1cm4gMD09PVB0Lmxlbmd0aHx8TXQuY29weShQdCwwLDAsSHQpLFB0fXJldHVybiB2b2lkIDAhPT1NdC5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBNdC5sZW5ndGh8fHFlKE10Lmxlbmd0aCk/aigwKTpVKE10KToiQnVmZmVyIj09PU10'@;
put 'LnR5cGUmJkFycmF5LmlzQXJyYXkoTXQuZGF0YSk/VShNdC5kYXRhKTp2b2lkIDB9KE1lKTtpZih1dClyZXR1cm4gdXQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIE1lW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJu'@;
put 'IFYuZnJvbShNZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxEZSx6ZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3Qu'@;
put 'IFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTWUpfWZ1bmN0aW9uIFkoTWUpe2lmKCJudW1iZXIiIT10eXBlb2YgTWUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihNZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFs'@;
put 'dWUgIicrTWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIFgoTWUpe3JldHVybiBZKE1lKSxqKE1lPDA/MDowfGVlKE1lKSl9ZnVuY3Rpb24gVShNZSl7Y29uc3QgRGU9TWUubGVuZ3RoPDA/MDowfGVlKE1lLmxlbmd0aCksemU9aihEZSk7Zm9yKGxldCBvdD0w'@;
put 'O290PERlO290Kz0xKXplW290XT0yNTUmTWVbb3RdO3JldHVybiB6ZX1mdW5jdGlvbiBxKE1lLERlLHplKXtpZihEZTwwfHxNZS5ieXRlTGVuZ3RoPERlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihNZS5ieXRlTGVuZ3Ro'@;
put 'PERlKyh6ZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCBvdDtyZXR1cm4gb3Q9dm9pZCAwPT09RGUmJnZvaWQgMD09PXplP25ldyBVaW50OEFycmF5KE1lKTp2b2lkIDA9PT16ZT9uZXcgVWludDhBcnJheShNZSxE'@;
put 'ZSk6bmV3IFVpbnQ4QXJyYXkoTWUsRGUsemUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihvdCxWLnByb3RvdHlwZSksb3R9ZnVuY3Rpb24gZWUoTWUpe2lmKE1lPj1FKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNp'@;
put 'emU6IDB4IitFLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8TWV9ZnVuY3Rpb24gdGUoTWUsRGUpe2lmKFYuaXNCdWZmZXIoTWUpKXJldHVybiBNZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KE1lKXx8VGUoTWUsQXJyYXlCdWZmZXIpKXJldHVybiBNZS5ieXRlTGVuZ3Ro'@;
put 'O2lmKCJzdHJpbmciIT10eXBlb2YgTWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIE1lKTtjb25zdCB6ZT1NZS5sZW5ndGgs'@;
put 'b3Q9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighb3QmJjA9PT16ZSlyZXR1cm4gMDtsZXQgdXQ9ITE7Zm9yKDs7KXN3aXRjaChEZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gemU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04Ijpy'@;
put 'ZXR1cm4gUGUoTWUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqemU7Y2FzZSJoZXgiOnJldHVybiB6ZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBiZShNZSkubGVuZ3RoO2RlZmF1bHQ6aWYodXQpcmV0dXJuIG90'@;
put 'Py0xOlBlKE1lKS5sZW5ndGg7RGU9KCIiK0RlKS50b0xvd2VyQ2FzZSgpLHV0PSEwfX1mdW5jdGlvbiBvZShNZSxEZSx6ZSl7bGV0IG90PSExO2lmKCh2b2lkIDA9PT1EZXx8RGU8MCkmJihEZT0wKSxEZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT16ZXx8emU+dGhpcy5sZW5ndGgpJiYoemU9'@;
put 'dGhpcy5sZW5ndGgpLHplPD0wKXx8KHplPj4+PTApPD0oRGU+Pj49MCkpcmV0dXJuIiI7Zm9yKE1lfHwoTWU9InV0ZjgiKTs7KXN3aXRjaChNZSl7Y2FzZSJoZXgiOnJldHVybiBwKHRoaXMsRGUsemUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGcodGhpcyxEZSx6ZSk7Y2FzZSJh'@;
put 'c2NpaSI6cmV0dXJuIFModGhpcyxEZSx6ZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gdih0aGlzLERlLHplKTtjYXNlImJhc2U2NCI6cmV0dXJuIE4odGhpcyxEZSx6ZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVy'@;
put 'biB3KHRoaXMsRGUsemUpO2RlZmF1bHQ6aWYob3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitNZSk7TWU9KE1lKyIiKS50b0xvd2VyQ2FzZSgpLG90PSEwfX1mdW5jdGlvbiBzZShNZSxEZSx6ZSl7Y29uc3Qgb3Q9TWVbRGVdO01lW0RlXT1NZVt6ZV0sTWVbemVd'@;
put 'PW90fWZ1bmN0aW9uIGhlKE1lLERlLHplLG90LHV0KXtpZigwPT09TWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgemU/KG90PXplLHplPTApOnplPjIxNDc0ODM2NDc/emU9MjE0NzQ4MzY0Nzp6ZTwtMjE0NzQ4MzY0OCYmKHplPS0yMTQ3NDgzNjQ4KSxxZSh6ZT0remUp'@;
put 'JiYoemU9dXQ/MDpNZS5sZW5ndGgtMSksemU8MCYmKHplPU1lLmxlbmd0aCt6ZSksemU+PU1lLmxlbmd0aCl7aWYodXQpcmV0dXJuLTE7emU9TWUubGVuZ3RoLTF9ZWxzZSBpZih6ZTwwKXtpZighdXQpcmV0dXJuLTE7emU9MH1pZigic3RyaW5nIj09dHlwZW9mIERlJiYoRGU9Vi5mcm9tKERl'@;
put 'LG90KSksVi5pc0J1ZmZlcihEZSkpcmV0dXJuIDA9PT1EZS5sZW5ndGg/LTE6dWUoTWUsRGUsemUsb3QsdXQpO2lmKCJudW1iZXIiPT10eXBlb2YgRGUpcmV0dXJuIERlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/dXQ/VWludDhBcnJheS5w'@;
put 'cm90b3R5cGUuaW5kZXhPZi5jYWxsKE1lLERlLHplKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKE1lLERlLHplKTp1ZShNZSxbRGVdLHplLG90LHV0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5j'@;
put 'dGlvbiB1ZShNZSxEZSx6ZSxvdCx1dCl7bGV0IE10LEh0PTEsUHQ9TWUubGVuZ3RoLG9uPURlLmxlbmd0aDtpZih2b2lkIDAhPT1vdCYmKCJ1Y3MyIj09PShvdD1TdHJpbmcob3QpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09b3R8fCJ1dGYxNmxlIj09PW90fHwidXRmLTE2bGUiPT09b3Qp'@;
put 'KXtpZihNZS5sZW5ndGg8Mnx8RGUubGVuZ3RoPDIpcmV0dXJuLTE7SHQ9MixQdC89Mixvbi89Mix6ZS89Mn1mdW5jdGlvbiBDbihVdCxibil7cmV0dXJuIDE9PT1IdD9VdFtibl06VXQucmVhZFVJbnQxNkJFKGJuKkh0KX1pZih1dCl7bGV0IFV0PS0xO2ZvcihNdD16ZTtNdDxQdDtNdCsrKWlm'@;
put 'KENuKE1lLE10KT09PUNuKERlLC0xPT09VXQ/MDpNdC1VdCkpe2lmKC0xPT09VXQmJihVdD1NdCksTXQtVXQrMT09PW9uKXJldHVybiBVdCpIdH1lbHNlLTEhPT1VdCYmKE10LT1NdC1VdCksVXQ9LTF9ZWxzZSBmb3IoemUrb24+UHQmJih6ZT1QdC1vbiksTXQ9emU7TXQ+PTA7TXQtLSl7bGV0'@;
put 'IFV0PSEwO2ZvcihsZXQgYm49MDtibjxvbjtibisrKWlmKENuKE1lLE10K2JuKSE9PUNuKERlLGJuKSl7VXQ9ITE7YnJlYWt9aWYoVXQpcmV0dXJuIE10fXJldHVybi0xfWZ1bmN0aW9uIGNlKE1lLERlLHplLG90KXt6ZT1OdW1iZXIoemUpfHwwO2NvbnN0IHV0PU1lLmxlbmd0aC16ZTtvdD8o'@;
put 'b3Q9TnVtYmVyKG90KSk+dXQmJihvdD11dCk6b3Q9dXQ7Y29uc3QgTXQ9RGUubGVuZ3RoO2xldCBIdDtmb3Iob3Q+TXQvMiYmKG90PU10LzIpLEh0PTA7SHQ8b3Q7KytIdCl7Y29uc3QgUHQ9cGFyc2VJbnQoRGUuc3Vic3RyKDIqSHQsMiksMTYpO2lmKHFlKFB0KSlyZXR1cm4gSHQ7TWVbemUr'@;
put 'SHRdPVB0fXJldHVybiBIdH1mdW5jdGlvbiBHKE1lLERlLHplLG90KXtyZXR1cm4gQWUoUGUoRGUsTWUubGVuZ3RoLXplKSxNZSx6ZSxvdCl9ZnVuY3Rpb24gYihNZSxEZSx6ZSxvdCl7cmV0dXJuIEFlKGZ1bmN0aW9uKHV0KXtjb25zdCBNdD1bXTtmb3IobGV0IEh0PTA7SHQ8dXQubGVuZ3Ro'@;
put 'OysrSHQpTXQucHVzaCgyNTUmdXQuY2hhckNvZGVBdChIdCkpO3JldHVybiBNdH0oRGUpLE1lLHplLG90KX1mdW5jdGlvbiBEKE1lLERlLHplLG90KXtyZXR1cm4gQWUoYmUoRGUpLE1lLHplLG90KX1mdW5jdGlvbiBIKE1lLERlLHplLG90KXtyZXR1cm4gQWUoZnVuY3Rpb24odXQsTXQpe2xl'@;
put 'dCBIdCxQdCxvbjtjb25zdCBDbj1bXTtmb3IobGV0IFV0PTA7VXQ8dXQubGVuZ3RoJiYhKChNdC09Mik8MCk7KytVdClIdD11dC5jaGFyQ29kZUF0KFV0KSxQdD1IdD4+OCxvbj1IdCUyNTYsQ24ucHVzaChvbiksQ24ucHVzaChQdCk7cmV0dXJuIENufShEZSxNZS5sZW5ndGgtemUpLE1lLHpl'@;
put 'LG90KX1mdW5jdGlvbiBOKE1lLERlLHplKXtyZXR1cm4gSy5mcm9tQnl0ZUFycmF5KDA9PT1EZSYmemU9PT1NZS5sZW5ndGg/TWU6TWUuc2xpY2UoRGUsemUpKX1mdW5jdGlvbiBnKE1lLERlLHplKXt6ZT1NYXRoLm1pbihNZS5sZW5ndGgsemUpO2NvbnN0IG90PVtdO2xldCB1dD1EZTtmb3Io'@;
put 'O3V0PHplOyl7Y29uc3QgTXQ9TWVbdXRdO2xldCBIdD1udWxsLFB0PU10PjIzOT80Ok10PjIyMz8zOk10PjE5MT8yOjE7aWYodXQrUHQ8PXplKXtsZXQgb24sQ24sVXQsYm47c3dpdGNoKFB0KXtjYXNlIDE6TXQ8MTI4JiYoSHQ9TXQpO2JyZWFrO2Nhc2UgMjpvbj1NZVt1dCsxXSwxMjg9PSgx'@;
put 'OTImb24pJiYoYm49KDMxJk10KTw8Nnw2MyZvbixibj4xMjcmJihIdD1ibikpO2JyZWFrO2Nhc2UgMzpvbj1NZVt1dCsxXSxDbj1NZVt1dCsyXSwxMjg9PSgxOTImb24pJiYxMjg9PSgxOTImQ24pJiYoYm49KDE1Jk10KTw8MTJ8KDYzJm9uKTw8Nnw2MyZDbixibj4yMDQ3JiYoYm48NTUyOTZ8'@;
put 'fGJuPjU3MzQzKSYmKEh0PWJuKSk7YnJlYWs7Y2FzZSA0Om9uPU1lW3V0KzFdLENuPU1lW3V0KzJdLFV0PU1lW3V0KzNdLDEyOD09KDE5MiZvbikmJjEyOD09KDE5MiZDbikmJjEyOD09KDE5MiZVdCkmJihibj0oMTUmTXQpPDwxOHwoNjMmb24pPDwxMnwoNjMmQ24pPDw2fDYzJlV0LGJuPjY1'@;
put 'NTM1JiZibjwxMTE0MTEyJiYoSHQ9Ym4pKX19bnVsbD09PUh0PyhIdD02NTUzMyxQdD0xKTpIdD42NTUzNSYmKEh0LT02NTUzNixvdC5wdXNoKEh0Pj4+MTAmMTAyM3w1NTI5NiksSHQ9NTYzMjB8MTAyMyZIdCksb3QucHVzaChIdCksdXQrPVB0fXJldHVybiBmdW5jdGlvbihNdCl7Y29uc3Qg'@;
put 'SHQ9TXQubGVuZ3RoO2lmKEh0PD1DKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxNdCk7bGV0IFB0PSIiLG9uPTA7Zm9yKDtvbjxIdDspUHQrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLE10LnNsaWNlKG9uLG9uKz1DKSk7cmV0dXJuIFB0fShvdCl9'@;
put 'Ty5rTWF4TGVuZ3RoPUUsKFYuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXtjb25zdCBNZT1uZXcgVWludDhBcnJheSgxKSxEZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihEZSxVaW50OEFycmF5LnByb3RvdHlwZSks'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mKE1lLERlKSw0Mj09PU1lLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSl8fHZvaWQgMD09PXp8fCJmdW5jdGlvbiIhPXR5cGVvZiB6LmVycm9yfHx6LmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQg'@;
put 'd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7'@;
put 'aWYoVi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxWLnBv'@;
put 'b2xTaXplPTgxOTIsVi5mcm9tPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gQihNZSxEZSx6ZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihWLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsVWludDhBcnJheSksVi5hbGxvYz1mdW5jdGlv'@;
put 'bihNZSxEZSx6ZSl7cmV0dXJuIHV0PURlLE10PXplLFkob3Q9TWUpLG90PD0wP2oob3QpOnZvaWQgMCE9PXV0PyJzdHJpbmciPT10eXBlb2YgTXQ/aihvdCkuZmlsbCh1dCxNdCk6aihvdCkuZmlsbCh1dCk6aihvdCk7dmFyIG90LHV0LE10fSxWLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKE1lKXty'@;
put 'ZXR1cm4gWChNZSl9LFYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKE1lKXtyZXR1cm4gWChNZSl9LFYuaXNCdWZmZXI9ZnVuY3Rpb24oTWUpe3JldHVybiBudWxsIT1NZSYmITA9PT1NZS5faXNCdWZmZXImJk1lIT09Vi5wcm90b3R5cGV9LFYuY29tcGFyZT1mdW5jdGlvbihNZSxEZSl7aWYo'@;
put 'VGUoTWUsVWludDhBcnJheSkmJihNZT1WLmZyb20oTWUsTWUub2Zmc2V0LE1lLmJ5dGVMZW5ndGgpKSxUZShEZSxVaW50OEFycmF5KSYmKERlPVYuZnJvbShEZSxEZS5vZmZzZXQsRGUuYnl0ZUxlbmd0aCkpLCFWLmlzQnVmZmVyKE1lKXx8IVYuaXNCdWZmZXIoRGUpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKE1lPT09RGUpcmV0dXJuIDA7bGV0IHplPU1lLmxlbmd0aCxvdD1EZS5sZW5ndGg7Zm9yKGxldCB1dD0wLE10PU1hdGgubWluKHplLG90KTt1dDxN'@;
put 'dDsrK3V0KWlmKE1lW3V0XSE9PURlW3V0XSl7emU9TWVbdXRdLG90PURlW3V0XTticmVha31yZXR1cm4gemU8b3Q/LTE6b3Q8emU/MTowfSxWLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oTWUpe3N3aXRjaChTdHJpbmcoTWUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2Ui'@;
put 'dXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sVi5jb25jYXQ9ZnVuY3Rpb24oTWUsRGUpe2lm'@;
put 'KCFBcnJheS5pc0FycmF5KE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PU1lLmxlbmd0aClyZXR1cm4gVi5hbGxvYygwKTtsZXQgemU7aWYodm9pZCAwPT09RGUpZm9yKERlPTAsemU9MDt6ZTxNZS5s'@;
put 'ZW5ndGg7Kyt6ZSlEZSs9TWVbemVdLmxlbmd0aDtjb25zdCBvdD1WLmFsbG9jVW5zYWZlKERlKTtsZXQgdXQ9MDtmb3IoemU9MDt6ZTxNZS5sZW5ndGg7Kyt6ZSl7bGV0IE10PU1lW3plXTtpZihUZShNdCxVaW50OEFycmF5KSl1dCtNdC5sZW5ndGg+b3QubGVuZ3RoPyhWLmlzQnVmZmVyKE10'@;
put 'KXx8KE10PVYuZnJvbShNdCkpLE10LmNvcHkob3QsdXQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChvdCxNdCx1dCk7ZWxzZXtpZighVi5pc0J1ZmZlcihNdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycp'@;
put 'O010LmNvcHkob3QsdXQpfXV0Kz1NdC5sZW5ndGh9cmV0dXJuIG90fSxWLmJ5dGVMZW5ndGg9dGUsVi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFYucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IE1lPXRoaXMubGVuZ3RoO2lmKE1lJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3Io'@;
put 'IkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBEZT0wO0RlPE1lO0RlKz0yKXNlKHRoaXMsRGUsRGUrMSk7cmV0dXJuIHRoaXN9LFYucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IE1lPXRoaXMubGVuZ3RoO2lmKE1lJTQhPTApdGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBEZT0wO0RlPE1lO0RlKz00KXNlKHRoaXMsRGUsRGUrMyksc2UodGhpcyxEZSsxLERlKzIpO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24o'@;
put 'KXtjb25zdCBNZT10aGlzLmxlbmd0aDtpZihNZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgRGU9MDtEZTxNZTtEZSs9OClzZSh0aGlzLERlLERlKzcpLHNlKHRoaXMsRGUrMSxEZSs2KSxzZSh0'@;
put 'aGlzLERlKzIsRGUrNSksc2UodGhpcyxEZSszLERlKzQpO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1WLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IE1lPXRoaXMubGVuZ3RoO3JldHVybiAwPT09TWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/'@;
put 'Zyh0aGlzLDAsTWUpOm9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sVi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKE1lKXtpZighVi5pc0J1ZmZlcihNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09TWV8fDA9PT1WLmNv'@;
put 'bXBhcmUodGhpcyxNZSl9LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgTWU9IiI7Y29uc3QgRGU9Ty5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gTWU9dGhpcy50b1N0cmluZygiaGV4IiwwLERlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3Ro'@;
put 'PkRlJiYoTWUrPSIgLi4uICIpLCI8QnVmZmVyICIrTWUrIj4ifSxrJiYoVi5wcm90b3R5cGVba109Vi5wcm90b3R5cGUuaW5zcGVjdCksVi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihNZSxEZSx6ZSxvdCx1dCl7aWYoVGUoTWUsVWludDhBcnJheSkmJihNZT1WLmZyb20oTWUsTWUub2Zm'@;
put 'c2V0LE1lLmJ5dGVMZW5ndGgpKSwhVi5pc0J1ZmZlcihNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgTWUpO2lmKHZvaWQgMD09PURlJiYo'@;
put 'RGU9MCksdm9pZCAwPT09emUmJih6ZT1NZT9NZS5sZW5ndGg6MCksdm9pZCAwPT09b3QmJihvdD0wKSx2b2lkIDA9PT11dCYmKHV0PXRoaXMubGVuZ3RoKSxEZTwwfHx6ZT5NZS5sZW5ndGh8fG90PDB8fHV0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ug'@;
put 'aW5kZXgiKTtpZihvdD49dXQmJkRlPj16ZSlyZXR1cm4gMDtpZihvdD49dXQpcmV0dXJuLTE7aWYoRGU+PXplKXJldHVybiAxO2lmKHRoaXM9PT1NZSlyZXR1cm4gMDtsZXQgTXQ9KHV0Pj4+PTApLShvdD4+Pj0wKSxIdD0oemU+Pj49MCktKERlPj4+PTApO2NvbnN0IFB0PU1hdGgubWluKE10'@;
put 'LEh0KSxvbj10aGlzLnNsaWNlKG90LHV0KSxDbj1NZS5zbGljZShEZSx6ZSk7Zm9yKGxldCBVdD0wO1V0PFB0OysrVXQpaWYob25bVXRdIT09Q25bVXRdKXtNdD1vbltVdF0sSHQ9Q25bVXRdO2JyZWFrfXJldHVybiBNdDxIdD8tMTpIdDxNdD8xOjB9LFYucHJvdG90eXBlLmluY2x1ZGVzPWZ1'@;
put 'bmN0aW9uKE1lLERlLHplKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihNZSxEZSx6ZSl9LFYucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBoZSh0aGlzLE1lLERlLHplLCEwKX0sVi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oTWUsRGUsemUpe3Jl'@;
put 'dHVybiBoZSh0aGlzLE1lLERlLHplLCExKX0sVi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe2lmKHZvaWQgMD09PURlKW90PSJ1dGY4Iix6ZT10aGlzLmxlbmd0aCxEZT0wO2Vsc2UgaWYodm9pZCAwPT09emUmJiJzdHJpbmciPT10eXBlb2YgRGUpb3Q9RGUsemU9dGhp'@;
put 'cy5sZW5ndGgsRGU9MDtlbHNle2lmKCFpc0Zpbml0ZShEZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0RlPj4+PTAsaXNGaW5pdGUoemUpPyh6ZT4+Pj0wLHZvaWQgMD09'@;
put 'PW90JiYob3Q9InV0ZjgiKSk6KG90PXplLHplPXZvaWQgMCl9Y29uc3QgdXQ9dGhpcy5sZW5ndGgtRGU7aWYoKHZvaWQgMD09PXplfHx6ZT51dCkmJih6ZT11dCksTWUubGVuZ3RoPjAmJih6ZTwwfHxEZTwwKXx8RGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQg'@;
put 'dG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7b3R8fChvdD0idXRmOCIpO2xldCBNdD0hMTtmb3IoOzspc3dpdGNoKG90KXtjYXNlImhleCI6cmV0dXJuIGNlKHRoaXMsTWUsRGUsemUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEcodGhpcyxNZSxEZSx6ZSk7Y2FzZSJh'@;
put 'c2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYih0aGlzLE1lLERlLHplKTtjYXNlImJhc2U2NCI6cmV0dXJuIEQodGhpcyxNZSxEZSx6ZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBIKHRoaXMsTWUsRGUs'@;
put 'emUpO2RlZmF1bHQ6aWYoTXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitvdCk7b3Q9KCIiK290KS50b0xvd2VyQ2FzZSgpLE10PSEwfX0sVi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5'@;
put 'cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtjb25zdCBDPTQwOTY7ZnVuY3Rpb24gUyhNZSxEZSx6ZSl7bGV0IG90PSIiO3plPU1hdGgubWluKE1lLmxlbmd0aCx6ZSk7Zm9yKGxldCB1dD1EZTt1dDx6ZTsrK3V0KW90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZNZVt1dF0p'@;
put 'O3JldHVybiBvdH1mdW5jdGlvbiB2KE1lLERlLHplKXtsZXQgb3Q9IiI7emU9TWF0aC5taW4oTWUubGVuZ3RoLHplKTtmb3IobGV0IHV0PURlO3V0PHplOysrdXQpb3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoTWVbdXRdKTtyZXR1cm4gb3R9ZnVuY3Rpb24gcChNZSxEZSx6ZSl7Y29uc3Qgb3Q9'@;
put 'TWUubGVuZ3RoOyghRGV8fERlPDApJiYoRGU9MCksKCF6ZXx8emU8MHx8emU+b3QpJiYoemU9b3QpO2xldCB1dD0iIjtmb3IobGV0IE10PURlO010PHplOysrTXQpdXQrPVhlW01lW010XV07cmV0dXJuIHV0fWZ1bmN0aW9uIHcoTWUsRGUsemUpe2NvbnN0IG90PU1lLnNsaWNlKERlLHplKTts'@;
put 'ZXQgdXQ9IiI7Zm9yKGxldCBNdD0wO010PG90Lmxlbmd0aC0xO010Kz0yKXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG90W010XSsyNTYqb3RbTXQrMV0pO3JldHVybiB1dH1mdW5jdGlvbiBKKE1lLERlLHplKXtpZihNZSUxIT0wfHxNZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQg'@;
put 'aXMgbm90IHVpbnQiKTtpZihNZStEZT56ZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIG5lKE1lLERlLHplLG90LHV0LE10KXtpZighVi5pc0J1ZmZlcihNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZl'@;
put 'ciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKERlPnV0fHxEZTxNdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoemUrb3Q+TWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQg'@;
put 'b2YgcmFuZ2UiKX1mdW5jdGlvbiBkZShNZSxEZSx6ZSxvdCx1dCl7S2UoRGUsb3QsdXQsTWUsemUsNyk7bGV0IE10PU51bWJlcihEZSZCaWdJbnQoNDI5NDk2NzI5NSkpO01lW3plKytdPU10LE10Pj49OCxNZVt6ZSsrXT1NdCxNdD4+PTgsTWVbemUrK109TXQsTXQ+Pj04LE1lW3plKytdPU10'@;
put 'O2xldCBIdD1OdW1iZXIoRGU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gTWVbemUrK109SHQsSHQ+Pj04LE1lW3plKytdPUh0LEh0Pj49OCxNZVt6ZSsrXT1IdCxIdD4+PTgsTWVbemUrK109SHQsemV9ZnVuY3Rpb24gZmUoTWUsRGUsemUsb3QsdXQpe0tlKERlLG90'@;
put 'LHV0LE1lLHplLDcpO2xldCBNdD1OdW1iZXIoRGUmQmlnSW50KDQyOTQ5NjcyOTUpKTtNZVt6ZSs3XT1NdCxNdD4+PTgsTWVbemUrNl09TXQsTXQ+Pj04LE1lW3plKzVdPU10LE10Pj49OCxNZVt6ZSs0XT1NdDtsZXQgSHQ9TnVtYmVyKERlPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1'@;
put 'KSk7cmV0dXJuIE1lW3plKzNdPUh0LEh0Pj49OCxNZVt6ZSsyXT1IdCxIdD4+PTgsTWVbemUrMV09SHQsSHQ+Pj04LE1lW3plXT1IdCx6ZSs4fWZ1bmN0aW9uIHhlKE1lLERlLHplLG90LHV0LE10KXtpZih6ZStvdD5NZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBv'@;
put 'ZiByYW5nZSIpO2lmKHplPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIExlKE1lLERlLHplLG90LHV0KXtyZXR1cm4gRGU9K0RlLHplPj4+PTAsdXR8fHhlKE1lLDAsemUsNCksSS53cml0ZShNZSxEZSx6ZSxvdCwyMyw0KSx6ZSs0fWZ1bmN0'@;
put 'aW9uIEZlKE1lLERlLHplLG90LHV0KXtyZXR1cm4gRGU9K0RlLHplPj4+PTAsdXR8fHhlKE1lLDAsemUsOCksSS53cml0ZShNZSxEZSx6ZSxvdCw1Miw4KSx6ZSs4fVYucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKE1lLERlKXtjb25zdCB6ZT10aGlzLmxlbmd0aDsoTWU9fn5NZSk8MD8oTWUr'@;
put 'PXplKTwwJiYoTWU9MCk6TWU+emUmJihNZT16ZSksKERlPXZvaWQgMD09PURlP3plOn5+RGUpPDA/KERlKz16ZSk8MCYmKERlPTApOkRlPnplJiYoRGU9emUpLERlPE1lJiYoRGU9TWUpO2NvbnN0IG90PXRoaXMuc3ViYXJyYXkoTWUsRGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yo'@;
put 'b3QsVi5wcm90b3R5cGUpLG90fSxWLnByb3RvdHlwZS5yZWFkVWludExFPVYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0IG90PXRoaXNbTWVdLHV0PTEsTXQ9MDtmb3IoOysrTXQ8RGUm'@;
put 'Jih1dCo9MjU2KTspb3QrPXRoaXNbTWUrTXRdKnV0O3JldHVybiBvdH0sVi5wcm90b3R5cGUucmVhZFVpbnRCRT1WLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERlPj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgpO2xldCBvdD10aGlzW01lKy0t'@;
put 'RGVdLHV0PTE7Zm9yKDtEZT4wJiYodXQqPTI1Nik7KW90Kz10aGlzW01lKy0tRGVdKnV0O3JldHVybiBvdH0sVi5wcm90b3R5cGUucmVhZFVpbnQ4PVYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMSx0aGlzLmxlbmd0aCksdGhp'@;
put 'c1tNZV19LFYucHJvdG90eXBlLnJlYWRVaW50MTZMRT1WLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpLHRoaXNbTWVdfHRoaXNbTWUrMV08PDh9LFYucHJvdG90eXBlLnJlYWRVaW50MTZCRT1WLnBy'@;
put 'b3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDIsdGhpcy5sZW5ndGgpLHRoaXNbTWVdPDw4fHRoaXNbTWUrMV19LFYucHJvdG90eXBlLnJlYWRVaW50MzJMRT1WLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oTWUsRGUp'@;
put 'e3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLCh0aGlzW01lXXx0aGlzW01lKzFdPDw4fHRoaXNbTWUrMl08PDE2KSsxNjc3NzIxNip0aGlzW01lKzNdfSxWLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Vi5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKE1lLERl'@;
put 'KXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW01lXSsodGhpc1tNZSsxXTw8MTZ8dGhpc1tNZSsyXTw8OHx0aGlzW01lKzNdKX0sVi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPVVlKGZ1bmN0aW9uKE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQi'@;
put 'KTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3ZvaWQgMCE9PURlJiZ2b2lkIDAhPT16ZXx8UWUoTWUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgb3Q9RGUrMjU2KnRoaXNbKytNZV0rNjU1MzYqdGhpc1srK01lXSt0aGlzWysrTWVdKjIqKjI0LHV0PXRoaXNbKytNZV0rMjU2KnRoaXNb'@;
put 'KytNZV0rNjU1MzYqdGhpc1srK01lXSt6ZSoyKioyNDtyZXR1cm4gQmlnSW50KG90KSsoQmlnSW50KHV0KTw8QmlnSW50KDMyKSl9KSxWLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9VWUoZnVuY3Rpb24oTWUpe1llKE1lPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRoaXNbTWVdLHplPXRo'@;
put 'aXNbTWUrN107dm9pZCAwIT09RGUmJnZvaWQgMCE9PXplfHxRZShNZSx0aGlzLmxlbmd0aC04KTtjb25zdCBvdD1EZSoyKioyNCs2NTUzNip0aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdK3RoaXNbKytNZV0sdXQ9dGhpc1srK01lXSoyKioyNCs2NTUzNip0aGlzWysrTWVdKzI1Nip0aGlzWysr'@;
put 'TWVdK3plO3JldHVybihCaWdJbnQob3QpPDxCaWdJbnQoMzIpKStCaWdJbnQodXQpfSksVi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERlPj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgpO2xldCBvdD10aGlzW01lXSx1dD0xLE10PTA7Zm9yKDsr'@;
put 'K010PERlJiYodXQqPTI1Nik7KW90Kz10aGlzW01lK010XSp1dDtyZXR1cm4gdXQqPTEyOCxvdD49dXQmJihvdC09TWF0aC5wb3coMiw4KkRlKSksb3R9LFYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVu'@;
put 'Z3RoKTtsZXQgb3Q9RGUsdXQ9MSxNdD10aGlzW01lKy0tb3RdO2Zvcig7b3Q+MCYmKHV0Kj0yNTYpOylNdCs9dGhpc1tNZSstLW90XSp1dDtyZXR1cm4gdXQqPTEyOCxNdD49dXQmJihNdC09TWF0aC5wb3coMiw4KkRlKSksTXR9LFYucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKE1lLERl'@;
put 'KXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tNZV0/LTEqKDI1NS10aGlzW01lXSsxKTp0aGlzW01lXX0sVi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oTWUsRGUpe01lPj4+PTAsRGV8fEooTWUsMix0aGlzLmxlbmd0aCk7Y29uc3QgemU9'@;
put 'dGhpc1tNZV18dGhpc1tNZSsxXTw8ODtyZXR1cm4gMzI3NjgmemU/NDI5NDkwMTc2MHx6ZTp6ZX0sVi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oTWUsRGUpe01lPj4+PTAsRGV8fEooTWUsMix0aGlzLmxlbmd0aCk7Y29uc3QgemU9dGhpc1tNZSsxXXx0aGlzW01lXTw8ODtyZXR1'@;
put 'cm4gMzI3NjgmemU/NDI5NDkwMTc2MHx6ZTp6ZX0sVi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLHRoaXNbTWVdfHRoaXNbTWUrMV08PDh8dGhpc1tNZSsyXTw8MTZ8dGhpc1tNZSszXTw8MjR9LFYu'@;
put 'cHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSx0aGlzW01lXTw8MjR8dGhpc1tNZSsxXTw8MTZ8dGhpc1tNZSsyXTw8OHx0aGlzW01lKzNdfSxWLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1VZShmdW5j'@;
put 'dGlvbihNZSl7WWUoTWU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tNZV0semU9dGhpc1tNZSs3XTtyZXR1cm4gdm9pZCAwIT09RGUmJnZvaWQgMCE9PXplfHxRZShNZSx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbTWUrNF0rMjU2KnRoaXNbTWUrNV0rNjU1MzYqdGhpc1tNZSs2'@;
put 'XSsoemU8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChEZSsyNTYqdGhpc1srK01lXSs2NTUzNip0aGlzWysrTWVdKzE2Nzc3MjE2KnRoaXNbKytNZV0pfSksVi5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9VWUoZnVuY3Rpb24oTWUpe1llKE1lPj4+PTAsIm9mZnNldCIpO2NvbnN0IERlPXRo'@;
put 'aXNbTWVdLHplPXRoaXNbTWUrN107dm9pZCAwIT09RGUmJnZvaWQgMCE9PXplfHxRZShNZSx0aGlzLmxlbmd0aC04KTtjb25zdCBvdD0oRGU8PDI0KSs2NTUzNip0aGlzWysrTWVdKzI1Nip0aGlzWysrTWVdK3RoaXNbKytNZV07cmV0dXJuKEJpZ0ludChvdCk8PEJpZ0ludCgzMikpK0JpZ0lu'@;
put 'dCgxNjc3NzIxNip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0remUpfSksVi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLE1lLCEwLDIzLDQpfSxW'@;
put 'LnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsTWUsITEsMjMsNCl9LFYucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEoo'@;
put 'TWUsOCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsTWUsITAsNTIsOCl9LFYucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsOCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsTWUsITEsNTIsOCl9LFYucHJvdG90eXBlLndyaXRl'@;
put 'VWludExFPVYucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKE1lLERlLHplLG90KXtNZT0rTWUsRGU+Pj49MCx6ZT4+Pj0wLCFvdCYmbmUodGhpcyxNZSxEZSx6ZSxNYXRoLnBvdygyLDgqemUpLTEsMCk7bGV0IHV0PTEsTXQ9MDtmb3IodGhpc1tEZV09MjU1Jk1lOysrTXQ8emUmJih1'@;
put 'dCo9MjU2KTspdGhpc1tEZStNdF09TWUvdXQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVVaW50QkU9Vi5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe01lPStNZSxEZT4+Pj0wLHplPj4+PTAsIW90JiZuZSh0aGlzLE1lLERlLHplLE1hdGgu'@;
put 'cG93KDIsOCp6ZSktMSwwKTtsZXQgdXQ9emUtMSxNdD0xO2Zvcih0aGlzW0RlK3V0XT0yNTUmTWU7LS11dD49MCYmKE10Kj0yNTYpOyl0aGlzW0RlK3V0XT1NZS9NdCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlwZS53cml0ZVVpbnQ4PVYucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rp'@;
put 'b24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwxLDI1NSwwKSx0aGlzW0RlXT0yNTUmTWUsRGUrMX0sVi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1WLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9'@;
put 'K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMiw2NTUzNSwwKSx0aGlzW0RlXT0yNTUmTWUsdGhpc1tEZSsxXT1NZT4+PjgsRGUrMn0sVi5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1WLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01l'@;
put 'LERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMiw2NTUzNSwwKSx0aGlzW0RlXT1NZT4+PjgsdGhpc1tEZSsxXT0yNTUmTWUsRGUrMn0sVi5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1WLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERl'@;
put 'Pj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbRGUrM109TWU+Pj4yNCx0aGlzW0RlKzJdPU1lPj4+MTYsdGhpc1tEZSsxXT1NZT4+PjgsdGhpc1tEZV09MjU1Jk1lLERlKzR9LFYucHJvdG90eXBlLndyaXRlVWludDMyQkU9Vi5wcm90b3R5cGUud3JpdGVVSW50'@;
put 'MzJCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0RlXT1NZT4+PjI0LHRoaXNbRGUrMV09TWU+Pj4xNix0aGlzW0RlKzJdPU1lPj4+OCx0aGlzW0RlKzNdPTI1NSZNZSxEZSs0fSxWLnByb3Rv'@;
put 'dHlwZS53cml0ZUJpZ1VJbnQ2NExFPVVlKGZ1bmN0aW9uKE1lLERlPTApe3JldHVybiBkZSh0aGlzLE1lLERlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFYucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7cmV0dXJuIGZl'@;
put 'KHRoaXMsTWUsRGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksVi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7aWYoTWU9K01lLERlPj4+PTAsIW90KXtjb25zdCBQdD1NYXRoLnBvdygyLDgqemUtMSk7bmUodGhpcyxNZSxEZSx6'@;
put 'ZSxQdC0xLC1QdCl9bGV0IHV0PTAsTXQ9MSxIdD0wO2Zvcih0aGlzW0RlXT0yNTUmTWU7Kyt1dDx6ZSYmKE10Kj0yNTYpOylNZTwwJiYwPT09SHQmJjAhPT10aGlzW0RlK3V0LTFdJiYoSHQ9MSksdGhpc1tEZSt1dF09KE1lL010Pj4wKS1IdCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlw'@;
put 'ZS53cml0ZUludEJFPWZ1bmN0aW9uKE1lLERlLHplLG90KXtpZihNZT0rTWUsRGU+Pj49MCwhb3Qpe2NvbnN0IFB0PU1hdGgucG93KDIsOCp6ZS0xKTtuZSh0aGlzLE1lLERlLHplLFB0LTEsLVB0KX1sZXQgdXQ9emUtMSxNdD0xLEh0PTA7Zm9yKHRoaXNbRGUrdXRdPTI1NSZNZTstLXV0Pj0w'@;
put 'JiYoTXQqPTI1Nik7KU1lPDAmJjA9PT1IdCYmMCE9PXRoaXNbRGUrdXQrMV0mJihIdD0xKSx0aGlzW0RlK3V0XT0oTWUvTXQ+PjApLUh0JjI1NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxu'@;
put 'ZSh0aGlzLE1lLERlLDEsMTI3LC0xMjgpLE1lPDAmJihNZT0yNTUrTWUrMSksdGhpc1tEZV09MjU1Jk1lLERlKzF9LFYucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDIsMzI3NjcsLTMyNzY4'@;
put 'KSx0aGlzW0RlXT0yNTUmTWUsdGhpc1tEZSsxXT1NZT4+PjgsRGUrMn0sVi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbRGVdPU1lPj4+OCx0aGlzW0Rl'@;
put 'KzFdPTI1NSZNZSxEZSsyfSxWLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbRGVdPTI1NSZNZSx0aGlzW0RlKzFdPU1lPj4+OCx0aGlz'@;
put 'W0RlKzJdPU1lPj4+MTYsdGhpc1tEZSszXT1NZT4+PjI0LERlKzR9LFYucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksTWU8MCYmKE1lPTQyOTQ5'@;
put 'NjcyOTUrTWUrMSksdGhpc1tEZV09TWU+Pj4yNCx0aGlzW0RlKzFdPU1lPj4+MTYsdGhpc1tEZSsyXT1NZT4+PjgsdGhpc1tEZSszXT0yNTUmTWUsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFPVVlKGZ1bmN0aW9uKE1lLERlPTApe3JldHVybiBkZSh0aGlzLE1lLERlLC1CaWdJ'@;
put 'bnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksVi5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPVVlKGZ1bmN0aW9uKE1lLERlPTApe3JldHVybiBmZSh0aGlzLE1lLERlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgi'@;
put 'MHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksVi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTGUodGhpcyxNZSxEZSwhMCx6ZSl9LFYucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIExlKHRoaXMsTWUsRGUsITEs'@;
put 'emUpfSxWLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gRmUodGhpcyxNZSxEZSwhMCx6ZSl9LFYucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBGZSh0aGlzLE1lLERlLCExLHplKX0sVi5wcm90b3R5cGUu'@;
put 'Y29weT1mdW5jdGlvbihNZSxEZSx6ZSxvdCl7aWYoIVYuaXNCdWZmZXIoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHplfHwoemU9MCksb3R8fDA9PT1vdHx8KG90PXRoaXMubGVuZ3RoKSxEZT49TWUubGVuZ3RoJiYoRGU9TWUubGVu'@;
put 'Z3RoKSxEZXx8KERlPTApLG90PjAmJm90PHplJiYob3Q9emUpLG90PT09emV8fDA9PT1NZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihEZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoemU8MHx8emU+PXRoaXMubGVu'@;
put 'Z3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihvdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO290PnRoaXMubGVuZ3RoJiYob3Q9dGhpcy5sZW5ndGgpLE1lLmxlbmd0aC1EZTxvdC16ZSYmKG90PU1lLmxl'@;
put 'bmd0aC1EZSt6ZSk7Y29uc3QgdXQ9b3QtemU7cmV0dXJuIHRoaXM9PT1NZSYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKERlLHplLG90KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChNZSx0aGlzLnN1YmFy'@;
put 'cmF5KHplLG90KSxEZSksdXR9LFYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oTWUsRGUsemUsb3Qpe2lmKCJzdHJpbmciPT10eXBlb2YgTWUpe2lmKCJzdHJpbmciPT10eXBlb2YgRGU/KG90PURlLERlPTAsemU9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgemUmJihvdD16ZSx6ZT10'@;
put 'aGlzLmxlbmd0aCksdm9pZCAwIT09b3QmJiJzdHJpbmciIT10eXBlb2Ygb3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2Ygb3QmJiFWLmlzRW5jb2Rpbmcob3QpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24g'@;
put 'ZW5jb2Rpbmc6ICIrb3QpO2lmKDE9PT1NZS5sZW5ndGgpe2NvbnN0IE10PU1lLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PW90JiZNdDwxMjh8fCJsYXRpbjEiPT09b3QpJiYoTWU9TXQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBNZT9NZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIE1lJiYoTWU9'@;
put 'TnVtYmVyKE1lKSk7aWYoRGU8MHx8dGhpcy5sZW5ndGg8RGV8fHRoaXMubGVuZ3RoPHplKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih6ZTw9RGUpcmV0dXJuIHRoaXM7bGV0IHV0O2lmKERlPj4+PTAsemU9dm9pZCAwPT09emU/dGhpcy5sZW5ndGg6emU+'@;
put 'Pj4wLE1lfHwoTWU9MCksIm51bWJlciI9PXR5cGVvZiBNZSlmb3IodXQ9RGU7dXQ8emU7Kyt1dCl0aGlzW3V0XT1NZTtlbHNle2NvbnN0IE10PVYuaXNCdWZmZXIoTWUpP01lOlYuZnJvbShNZSxvdCksSHQ9TXQubGVuZ3RoO2lmKDA9PT1IdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFs'@;
put 'dWUgIicrTWUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2Zvcih1dD0wO3V0PHplLURlOysrdXQpdGhpc1t1dCtEZV09TXRbdXQlSHRdfXJldHVybiB0aGlzfTtjb25zdCBPZT17fTtmdW5jdGlvbiBqZShNZSxEZSx6ZSl7T2VbTWVdPWNsYXNzIGV4dGVuZHMgemV7Y29u'@;
put 'c3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6RGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFske01lfV1gLGRlbGV0ZSB0aGlzLm5h'@;
put 'bWV9Z2V0IGNvZGUoKXtyZXR1cm4gTWV9c2V0IGNvZGUob3Qpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6b3Qsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7TWV9XTog'@;
put 'JHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIFdlKE1lKXtsZXQgRGU9IiIsemU9TWUubGVuZ3RoO2NvbnN0IG90PSItIj09PU1lWzBdPzE6MDtmb3IoO3plPj1vdCs0O3plLT0zKURlPWBfJHtNZS5zbGljZSh6ZS0zLHplKX0ke0RlfWA7cmV0dXJuYCR7TWUuc2xpY2UoMCx6ZSl9JHtEZX1g'@;
put 'fWZ1bmN0aW9uIEtlKE1lLERlLHplLG90LHV0LE10KXtpZihNZT56ZXx8TWU8RGUpe2NvbnN0IEh0PSJiaWdpbnQiPT10eXBlb2YgRGU/Im4iOiIiO2xldCBQdDt0aHJvdyBQdD1NdD4zPzA9PT1EZXx8RGU9PT1CaWdJbnQoMCk/YD49IDAke0h0fSBhbmQgPCAyJHtIdH0gKiogJHs4KihNdCsx'@;
put 'KX0ke0h0fWA6YD49IC0oMiR7SHR9ICoqICR7OCooTXQrMSktMX0ke0h0fSkgYW5kIDwgMiAqKiAkezgqKE10KzEpLTF9JHtIdH1gOmA+PSAke0RlfSR7SHR9IGFuZCA8PSAke3plfSR7SHR9YCxuZXcgT2UuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLFB0LE1lKX12YXIgSHQsUHQsb247SHQ9'@;
put 'b3Qsb249TXQsWWUoUHQ9dXQsIm9mZnNldCIpLHZvaWQgMCE9PUh0W1B0XSYmdm9pZCAwIT09SHRbUHQrb25dfHxRZShQdCxIdC5sZW5ndGgtKG9uKzEpKX1mdW5jdGlvbiBZZShNZSxEZSl7aWYoIm51bWJlciIhPXR5cGVvZiBNZSl0aHJvdyBuZXcgT2UuRVJSX0lOVkFMSURfQVJHX1RZUEUo'@;
put 'RGUsIm51bWJlciIsTWUpfWZ1bmN0aW9uIFFlKE1lLERlLHplKXt0aHJvdyBNYXRoLmZsb29yKE1lKSE9PU1lPyhZZShNZSx6ZSksbmV3IE9lLkVSUl9PVVRfT0ZfUkFOR0UoemV8fCJvZmZzZXQiLCJhbiBpbnRlZ2VyIixNZSkpOkRlPDA/bmV3IE9lLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5E'@;
put 'UzpuZXcgT2UuRVJSX09VVF9PRl9SQU5HRSh6ZXx8Im9mZnNldCIsYD49ICR7emU/MTowfSBhbmQgPD0gJHtEZX1gLE1lKX1qZSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIixmdW5jdGlvbihNZSl7cmV0dXJuIE1lP2Ake01lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOiJBdHRl'@;
put 'bXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIn0sUmFuZ2VFcnJvciksamUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihNZSxEZSl7cmV0dXJuYFRoZSAiJHtNZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUg'@;
put 'JHt0eXBlb2YgRGV9YH0sVHlwZUVycm9yKSxqZSgiRVJSX09VVF9PRl9SQU5HRSIsZnVuY3Rpb24oTWUsRGUsemUpe2xldCBvdD1gVGhlIHZhbHVlIG9mICIke01lfSIgaXMgb3V0IG9mIHJhbmdlLmAsdXQ9emU7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoemUpJiZNYXRoLmFicyh6ZSk+NDI5'@;
put 'NDk2NzI5Nj91dD1XZShTdHJpbmcoemUpKToiYmlnaW50Ij09dHlwZW9mIHplJiYodXQ9U3RyaW5nKHplKSwoemU+QmlnSW50KDIpKipCaWdJbnQoMzIpfHx6ZTwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYodXQ9V2UodXQpKSx1dCs9Im4iKSxvdCs9YCBJdCBtdXN0IGJlICR7RGV9LiBS'@;
put 'ZWNlaXZlZCAke3V0fWAsb3R9LFJhbmdlRXJyb3IpO2NvbnN0IGx0PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gUGUoTWUsRGUpe2xldCB6ZTtEZT1EZXx8MS8wO2NvbnN0IG90PU1lLmxlbmd0aDtsZXQgdXQ9bnVsbDtjb25zdCBNdD1bXTtmb3IobGV0IEh0PTA7SHQ8b3Q7KytIdCl7'@;
put 'aWYoemU9TWUuY2hhckNvZGVBdChIdCksemU+NTUyOTUmJnplPDU3MzQ0KXtpZighdXQpe2lmKHplPjU2MzE5KXsoRGUtPTMpPi0xJiZNdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihIdCsxPT09b3QpeyhEZS09Myk+LTEmJk10LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfXV0'@;
put 'PXplO2NvbnRpbnVlfWlmKHplPDU2MzIwKXsoRGUtPTMpPi0xJiZNdC5wdXNoKDIzOSwxOTEsMTg5KSx1dD16ZTtjb250aW51ZX16ZT02NTUzNisodXQtNTUyOTY8PDEwfHplLTU2MzIwKX1lbHNlIHV0JiYoRGUtPTMpPi0xJiZNdC5wdXNoKDIzOSwxOTEsMTg5KTtpZih1dD1udWxsLHplPDEy'@;
put 'OCl7aWYoKERlLT0xKTwwKWJyZWFrO010LnB1c2goemUpfWVsc2UgaWYoemU8MjA0OCl7aWYoKERlLT0yKTwwKWJyZWFrO010LnB1c2goemU+PjZ8MTkyLDYzJnplfDEyOCl9ZWxzZSBpZih6ZTw2NTUzNil7aWYoKERlLT0zKTwwKWJyZWFrO010LnB1c2goemU+PjEyfDIyNCx6ZT4+NiY2M3wx'@;
put 'MjgsNjMmemV8MTI4KX1lbHNle2lmKCEoemU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoRGUtPTQpPDApYnJlYWs7TXQucHVzaCh6ZT4+MTh8MjQwLHplPj4xMiY2M3wxMjgsemU+PjYmNjN8MTI4LDYzJnplfDEyOCl9fXJldHVybiBNdH1mdW5j'@;
put 'dGlvbiBiZShNZSl7cmV0dXJuIEsudG9CeXRlQXJyYXkoZnVuY3Rpb24oRGUpe2lmKChEZT0oRGU9RGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UobHQsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoO0RlLmxlbmd0aCU0IT0wOylEZSs9Ij0iO3JldHVybiBEZX0oTWUpKX1mdW5j'@;
put 'dGlvbiBBZShNZSxEZSx6ZSxvdCl7bGV0IHV0O2Zvcih1dD0wO3V0PG90JiYhKHV0K3plPj1EZS5sZW5ndGh8fHV0Pj1NZS5sZW5ndGgpOysrdXQpRGVbdXQremVdPU1lW3V0XTtyZXR1cm4gdXR9ZnVuY3Rpb24gVGUoTWUsRGUpe3JldHVybiBNZSBpbnN0YW5jZW9mIERlfHxudWxsIT1NZSYm'@;
put 'bnVsbCE9TWUuY29uc3RydWN0b3ImJm51bGwhPU1lLmNvbnN0cnVjdG9yLm5hbWUmJk1lLmNvbnN0cnVjdG9yLm5hbWU9PT1EZS5uYW1lfWZ1bmN0aW9uIHFlKE1lKXtyZXR1cm4gTWUhPU1lfWNvbnN0IFhlPWZ1bmN0aW9uKCl7Y29uc3QgTWU9IjAxMjM0NTY3ODlhYmNkZWYiLERlPW5ldyBB'@;
put 'cnJheSgyNTYpO2ZvcihsZXQgemU9MDt6ZTwxNjsrK3plKXtjb25zdCBvdD0xNip6ZTtmb3IobGV0IHV0PTA7dXQ8MTY7Kyt1dClEZVtvdCt1dF09TWVbemVdK01lW3V0XX1yZXR1cm4gRGV9KCk7ZnVuY3Rpb24gVWUoTWUpe3JldHVybiB0eXBlb2YgQmlnSW50PiJ1Ij9odDpNZX1mdW5jdGlv'@;
put 'biBodCgpe3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKX19LDE5MjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIxMCksSz1SKDU1NTkpLEk9Syh6KCJTdHJpbmcucHJvdG90eXBlLmluZGV4T2YiKSk7TS5leHBvcnRzPWZ1bmN0aW9uKGssRSl7dmFyIGo9'@;
put 'eihrLCEhRSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGomJkkoaywiLnByb3RvdHlwZS4iKT4tMT9LKGopOmp9fSw1NTU5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NjEyKSxLPVIoMjEwKSxJPUsoIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIiksaz1LKCIlRnVuY3Rp'@;
put 'b24ucHJvdG90eXBlLmNhbGwlIiksRT1LKCIlUmVmbGVjdC5hcHBseSUiLCEwKXx8ei5jYWxsKGssSSksaj1LKCIlT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUiLCEwKSxWPUsoIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIiwhMCksQj1LKCIlTWF0aC5tYXglIik7aWYoVil0cnl7'@;
put 'Vih7fSwiYSIse3ZhbHVlOjF9KX1jYXRjaHtWPW51bGx9TS5leHBvcnRzPWZ1bmN0aW9uKFgpe3ZhciBVPUUoeixrLGFyZ3VtZW50cyk7cmV0dXJuIGomJlYmJmooVSwibGVuZ3RoIikuY29uZmlndXJhYmxlJiZWKFUsImxlbmd0aCIse3ZhbHVlOjErQigwLFgubGVuZ3RoLShhcmd1bWVudHMu'@;
put 'bGVuZ3RoLTEpKX0pLFV9O3ZhciBZPWZ1bmN0aW9uKCl7cmV0dXJuIEUoeixJLGFyZ3VtZW50cyl9O1Y/VihNLmV4cG9ydHMsImFwcGx5Iix7dmFsdWU6WX0pOk0uZXhwb3J0cy5hcHBseT1ZfSwxMDI3OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPVIoMjgzMCkuVHJhbnNmb3Jt'@;
put 'LEk9UigyNTUzKS5TdHJpbmdEZWNvZGVyO2Z1bmN0aW9uIGsoRSl7Sy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiBFLHRoaXMuaGFzaE1vZGU/dGhpc1tFXT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9m'@;
put 'aW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1SKDU3MTcpKGssSyksay5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEUsaixWKXsic3RyaW5nIj09dHlwZW9mIEUmJihFPXouZnJv'@;
put 'bShFLGopKTt2YXIgQj10aGlzLl91cGRhdGUoRSk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooViYmKEI9dGhpcy5fdG9TdHJpbmcoQixWKSksQil9LGsucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxrLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhy'@;
put 'b3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LGsucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0say5wcm90'@;
put 'b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxrLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEUsaixWKXt2YXIgQjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoRSk6dGhp'@;
put 'cy5wdXNoKHRoaXMuX3VwZGF0ZShFKSl9Y2F0Y2goWSl7Qj1ZfWZpbmFsbHl7VihCKX19LGsucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihFKXt2YXIgajt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChWKXtqPVZ9RShqKX0say5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9'@;
put 'ZnVuY3Rpb24oRSl7dmFyIGo9dGhpcy5fX2ZpbmFsKCl8fHouYWxsb2MoMCk7cmV0dXJuIEUmJihqPXRoaXMuX3RvU3RyaW5nKGosRSwhMCkpLGp9LGsucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihFLGosVil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IEkoaiks'@;
put 'dGhpcy5fZW5jb2Rpbmc9aiksdGhpcy5fZW5jb2RpbmchPT1qKXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBCPXRoaXMuX2RlY29kZXIud3JpdGUoRSk7cmV0dXJuIFYmJihCKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxCfSxNLmV4cG9ydHM9a30sMTA0ODpN'@;
put 'PT57TS5leHBvcnRzPWZ1bmN0aW9uKFIseil7Zm9yKHZhciBLPVtdLEk9MDtJPFIubGVuZ3RoO0krKyl7dmFyIGs9eihSW0ldLEkpO08oayk/Sy5wdXNoLmFwcGx5KEssayk6Sy5wdXNoKGspfXJldHVybiBLfTt2YXIgTz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihSKXtyZXR1cm4iW29iamVj'@;
put 'dCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFIpfX0sNTEwODooTSxPLFIpPT57dmFyIHo9Uig5NTM5KSxLPVIoOTI4Mik7ZnVuY3Rpb24gSSgpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciBrLEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLGo9e307az12'@;
put 'b2lkIDAhPT1SLmcmJlIuZy5jb25zb2xlP1IuZy5jb25zb2xlOnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZT93aW5kb3cuY29uc29sZTp7fTtmb3IodmFyIFY9W1tmdW5jdGlvbigpe30sImxvZyJdLFtmdW5jdGlvbigpe2subG9nLmFwcGx5KGssYXJndW1lbnRzKX0sImluZm8i'@;
put 'XSxbZnVuY3Rpb24oKXtrLmxvZy5hcHBseShrLGFyZ3VtZW50cyl9LCJ3YXJuIl0sW2Z1bmN0aW9uKCl7ay53YXJuLmFwcGx5KGssYXJndW1lbnRzKX0sImVycm9yIl0sW2Z1bmN0aW9uKHEpe2pbcV09SSgpfSwidGltZSJdLFtmdW5jdGlvbihxKXt2YXIgZWU9altxXTtpZighZWUpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJObyBzdWNoIGxhYmVsOiAiK3EpO2RlbGV0ZSBqW3FdO3ZhciB0ZT1JKCktZWU7ay5sb2cocSsiOiAiK3RlKyJtcyIpfSwidGltZUVuZCJdLFtmdW5jdGlvbigpe3ZhciBxPW5ldyBFcnJvcjtxLm5hbWU9IlRyYWNlIixxLm1lc3NhZ2U9ei5mb3JtYXQuYXBwbHkobnVsbCxh'@;
put 'cmd1bWVudHMpLGsuZXJyb3IocS5zdGFjayl9LCJ0cmFjZSJdLFtmdW5jdGlvbihxKXtrLmxvZyh6Lmluc3BlY3QocSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24ocSl7aWYoIXEpe3ZhciBlZT1FLmNhbGwoYXJndW1lbnRzLDEpO0sub2soITEsei5mb3JtYXQuYXBwbHkobnVsbCxlZSkpfX0s'@;
put 'ImFzc2VydCJdXSxCPTA7QjxWLmxlbmd0aDtCKyspe3ZhciBZPVZbQl0sVT1ZWzFdO2tbVV18fChrW1VdPVlbMF0pfU0uZXhwb3J0cz1rfSw2MzkzOihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNjk0OCksST1SKDY0MjYpO00uZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4g'@;
put 'bmV3IEUoVil9O3ZhciBrPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRl'@;
put 'TGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIEUoVil7dGhpcy5jdXJ2ZVR5cGU9a1tWXSx0aGlz'@;
put 'LmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOlZ9KSx0aGlzLmN1cnZlPW5ldyBLLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gaihWLEIsWSl7QXJyYXkuaXNBcnJheShWKXx8KFY9Vi50b0FycmF5KCkpO3ZhciBYPW5ldyB6KFYpO2lm'@;
put 'KFkmJlgubGVuZ3RoPFkpe3ZhciBVPW5ldyB6KFktWC5sZW5ndGgpO1UuZmlsbCgwKSxYPXouY29uY2F0KFtVLFhdKX1yZXR1cm4gQj9YLnRvU3RyaW5nKEIpOlh9ay5wMjI0PWsuc2VjcDIyNHIxLGsucDI1Nj1rLnNlY3AyNTZyMT1rLnByaW1lMjU2djEsay5wMTkyPWsuc2VjcDE5MnIxPWsu'@;
put 'cHJpbWUxOTJ2MSxrLnAzODQ9ay5zZWNwMzg0cjEsay5wNTIxPWsuc2VjcDUyMXIxLEUucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihWLEIpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoVixCKX0sRS5wcm90b3R5cGUu'@;
put 'Y29tcHV0ZVNlY3JldD1mdW5jdGlvbihWLEIsWSl7cmV0dXJuIEI9Qnx8InV0ZjgiLHouaXNCdWZmZXIoVil8fChWPW5ldyB6KFYsQikpLGoodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKFYpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksWSx0aGlzLmN1'@;
put 'cnZlVHlwZS5ieXRlTGVuZ3RoKX0sRS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKFYsQil7dmFyIFk9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1CLCEwKTtyZXR1cm4iaHlicmlkIj09PUImJihZWzBdPVlbWS5sZW5ndGgtMV0lMj83OjYpLGooWSxWKX0sRS5w'@;
put 'cm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihWKXtyZXR1cm4gaih0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLFYpfSxFLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVixCKXtyZXR1cm4gQj1CfHwidXRmOCIsei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSksdGhpcy5r'@;
put 'ZXlzLl9pbXBvcnRQdWJsaWMoViksdGhpc30sRS5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihWLEIpe0I9Qnx8InV0ZjgiLHouaXNCdWZmZXIoVil8fChWPW5ldyB6KFYsQikpO3ZhciBZPW5ldyBJKFYpO3JldHVybiBZPVkudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1'@;
put 'cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoWSksdGhpc319LDY0MjY6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVu'@;
put 'Y3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9'@;
put 'MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxF'@;
put 'LkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoODYyMykuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01'@;
put 'NTpTPj05NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFy'@;
put 'IG5lPWcuY2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3Jk'@;
put 'U2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lm'@;
put 'KCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1n'@;
put 'LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCks'@;
put 'QyxTKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4'@;
put 'NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp'@;
put 'LEMsUyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyks'@;
put 'dGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08'@;
put 'PDh8Z1t2LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxn'@;
put 'W3YrMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChn'@;
put 'Lmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlz'@;
put 'LndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3'@;
put 'LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8'@;
put 'MDtmb3IodmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtp'@;
put 'ZigwIT09Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBl'@;
put 'LmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9'@;
put 'LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxF'@;
put 'LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhp'@;
put 'cy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAw'@;
put 'IiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIx'@;
put 'LDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYz'@;
put 'NDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRp'@;
put 'dmU7dmFyIHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+'@;
put 'PjI2LExlPTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtT'@;
put 'LndvcmRzW2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3Io'@;
put 'dmFyIHY9MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYr'@;
put 'PTIpPj0yNiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIi'@;
put 'O3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAi'@;
put 'K1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4g'@;
put 'Mj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBz'@;
put 'dG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9B'@;
put 'cnJheUxpa2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgo'@;
put 'MSx2KTtJKHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0w'@;
put 'OyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtw'@;
put 'LUotMV09d31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03'@;
put 'KSxDPj04JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+'@;
put 'PTcpLCEoMTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVu'@;
put 'Z3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVy'@;
put 'biBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhp'@;
put 'cy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0s'@;
put 'RS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0'@;
put 'aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMu'@;
put 'bGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlz'@;
put 'Lml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0'@;
put 'aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53'@;
put 'b3Jkc1t2XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'SSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYp'@;
put 'LFM9ZyUyNjt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUu'@;
put 'cHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlz'@;
put 'LndvcmRzW1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0w'@;
put 'LEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxl'@;
put 'bmd0aD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29y'@;
put 'ZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3dd'@;
put 'PVMud29yZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09'@;
put 'dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1n'@;
put 'Lm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24o'@;
put 'KTt2YXIgUyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29y'@;
put 'ZHNbSl0pLSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylm'@;
put 'b3IoO0o8Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0s'@;
put 'WWU9ODE5MSZLZSxRZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1lLHplPU1lPj4+MTMsb3Q9MHxKWzddLHV0PTgx'@;
put 'OTEmb3QsTXQ9b3Q+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkxJkhuLGZuPUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkx'@;
put 'JmhuLFh0PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkxJkluLHluPUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkx'@;
put 'JnhuLEJuPXhuPj4+MTMsUm49MHxuZVs4XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUsZW4pLHA9KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5p'@;
put 'bXVsKFdlLGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoUWUsZW4pfDAsdz1NYXRoLmltdWwoUWUsJG4pLHY9ditNYXRoLmltdWwoamUsZnQpfDAscD0ocD1wK01hdGguaW11bChqZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZl'@;
put 'LFh0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'WWUsZm4pfDApK01hdGguaW11bChRZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFFlLGZuKXwwLHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGgu'@;
put 'aW11bChMZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1uKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4p'@;
put 'LHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmlt'@;
put 'dWwoWWUsd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFlLHd0KXwwLHc9dytNYXRoLmltdWwoUWUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChX'@;
put 'ZSxtbil8MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUXQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEty'@;
put 'Jj02NzEwODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytN'@;
put 'YXRoLmltdWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGgu'@;
put 'aW11bChRZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFFlLG1uKXwwLHY9ditNYXRoLmltdWwoamUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsUXQpfDA7dmFyIG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVs'@;
put 'KERlLCRuKSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0'@;
put 'aC5pbXVsKFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11bChRZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFF0KXwwLHY9ditNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoV2UsWXQpfDA7dmFyIEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHluKXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8'@;
put 'MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStN'@;
put 'YXRoLmltdWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFF0KXwwLHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKFFlLHB0KXwwLHc9dytNYXRoLmltdWwoUWUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2'@;
put 'PXYrTWF0aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11'@;
put 'bChQdCxlbikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12'@;
put 'K01hdGguaW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKGh0LG1uKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsUXQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmlt'@;
put 'dWwoYmUscHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFFlLHluKXwwLHY9ditNYXRoLmltdWwoamUsc24pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChqZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcr'@;
put 'TWF0aC5pbXVsKEZlLFBuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGgu'@;
put 'aW11bChEZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDApK01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KGh0LFF0KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUs'@;
put 'enQpfDAsdz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCx3PXcrTWF0aC5pbXVsKFFlLEJuKXwwLHY9ditNYXRoLmltdWwoamUsJHQpfDAscD0ocD1wK01hdGguaW11bChqZSxQ'@;
put 'bil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsUG4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5p'@;
put 'bXVsKEZlLGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmltdWwoTXQsbW4pfDAsdj12K01hdGguaW11bChE'@;
put 'ZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0'@;
put 'KXwwLHY9ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAs'@;
put 'dz13K01hdGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChRZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFBuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYocD0o'@;
put 'cD1wK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGgu'@;
put 'aW11bChibix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'dXQsUXQpfDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LFF0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9'@;
put 'ditNYXRoLmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsUG4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStN'@;
put 'YXRoLmltdWwoUWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1uKSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVs'@;
put 'KGJuLG1uKSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUXQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFF0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0'@;
put 'KXwwLHc9dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4p'@;
put 'fDApK01hdGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxQbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsUG4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQ'@;
put 'ZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9'@;
put 'TWF0aC5pbXVsKFV0LFF0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLFF0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQs'@;
put 'enQpfDAscD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8'@;
put 'MCx2PXYrTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFBuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8'@;
put 'MCkrTWF0aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGgu'@;
put 'aW11bChibixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChN'@;
put 'dCxzbil8MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsUG4pfDA7dmFyIHlyPShmZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHlu'@;
put 'KSkrTWF0aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bCh1dCxQbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsUG4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9'@;
put 'KCh3PXcrTWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFBuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8'@;
put 'PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxQbikpK01hdGguaW11bChibiwkdCl8MCx3PU1hdGguaW11bChibixQbik7dmFyIGhzPShmZSso'@;
put 'dj12K01hdGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShm'@;
put 'ZSsodj1NYXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRl'@;
put 'WzFdPWdpLGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThd'@;
put 'PXJzLDAhPT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24o'@;
put 'ZyxDKXt2YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0'@;
put 'aD1wLmxlbmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtP'@;
put 'ZSsrKXt2YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1M'@;
put 'ZSxuZT14ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50'@;
put 'Qml0cyhnKS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7'@;
put 'cmV0dXJuIHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxT'@;
put 'LHYscCk7Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0s'@;
put 'V2U9dlt4ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLFFlPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1RZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pdPVdlLVllLE9lIT09bmUmJihRZT1kZSpMZS1mZSpGZSxG'@;
put 'ZT1kZSpGZStmZSpMZSxMZT1RZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rp'@;
put 'b24oZyxDLFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBT'@;
put 'PTAsdj0wO3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxD'@;
put 'LFMsdil7Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihn'@;
put 'KXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiks'@;
put 'Sj1uZXcgQXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252'@;
put 'ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVbT2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpM'@;
put 'ZVtPZV0rZGVbT2VdKnhlW09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5l'@;
put 'Z2F0aXZlLFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlw'@;
put 'ZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5w'@;
put 'cm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82'@;
put 'NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5'@;
put 'cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJh'@;
put 'eSh3LmJpdExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYm'@;
put 'MD09PUNbdl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9m'@;
put 'IGcmJmc+PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3'@;
put 'PUo+Pj4yNi1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1'@;
put 'cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8o'@;
put 'Qy1DJTI2KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tk'@;
put 'ZV07bmUubGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3Io'@;
put 'ZGU9dGhpcy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5s'@;
put 'ZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hy'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10m'@;
put 'MTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5s'@;
put 'ZW5ndGg8PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0'@;
put 'aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5j'@;
put 'dGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4g'@;
put 'dGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVy'@;
put 'biB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBD'@;
put 'PTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnBy'@;
put 'b3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygp'@;
put 'fSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3'@;
put 'MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5z'@;
put 'dHJpcCgpO2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5j'@;
put 'dGlvbihnLEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0'@;
put 'aDtpZigibW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdh'@;
put 'dGl2ZSYmKHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9p'@;
put 'c2hsbnN1Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMm'@;
put 'JjAhPT1TJiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcu'@;
put 'bmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2'@;
put 'ZT8odz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1w'@;
put 'Lm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9k'@;
put 'Ij09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5t'@;
put 'b2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5j'@;
put 'bXAodik7cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxl'@;
put 'bmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEw'@;
put 'ODg2NCpDO3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcu'@;
put 'aXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMu'@;
put 'aXVzaHJuKDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxw'@;
put 'LmlzT2RkKCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNP'@;
put 'ZGQoKSkmJih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0s'@;
put 'RS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25l'@;
put 'KCk7Qy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAs'@;
put 'eGU9MTshKFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9'@;
put 'cmV0dXJuKHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9'@;
put 'Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7'@;
put 'dmFyIHA9Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxF'@;
put 'LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1sw'@;
put 'XSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9'@;
put 'UzswIT09cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5j'@;
put 'dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlz'@;
put 'LnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNt'@;
put 'cD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3Rv'@;
put 'dHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lm'@;
put 'KHYhPT1wKXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVu'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEg'@;
put 'bnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwi'@;
put 'ZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJl'@;
put 'ZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwi'@;
put 'cmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt'@;
put 'YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRo'@;
put 'aXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5y'@;
put 'ZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5y'@;
put 'ZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRo'@;
put 'aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0'@;
put 'aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMu'@;
put 'c2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAo'@;
put 'dGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcg'@;
put 'RShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkp'@;
put 'LmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5w'@;
put 'cm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMs'@;
put 'dj1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMs'@;
put 'cD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53'@;
put 'b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09'@;
put 'PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2'@;
put 'PTE5KigwfGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9'@;
put 'bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9'@;
put 'ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0'@;
put 'aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcp'@;
put 'Ll9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMp'@;
put 'e3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVy'@;
put 'biBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5'@;
put 'cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hs'@;
put 'bihDKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgu'@;
put 'cHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25l'@;
put 'KCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyss'@;
put 'di5pdXNocm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhk'@;
put 'ZSxuZSkuY21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9TGUsamU9MDswIT09T2UuY21wKHcpO2plKysp'@;
put 'T2U9T2UucmVkU3FyKCk7SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2'@;
put 'YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlz'@;
put 'KTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5i'@;
put 'aXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9'@;
put 'eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90'@;
put 'b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVz'@;
put 'aGxuKHRoaXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygp'@;
put 'KXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21w'@;
put 'KHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhp'@;
put 'cyk7dmFyIFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5j'@;
put 'bXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSwzNDgy'@;
put 'OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1NzE3KSxLPVIoMjMxOCksST1SKDk3ODUpLGs9Uig5MDcyKSxFPVIoMTAyNyk7ZnVuY3Rpb24gaihWKXtFLmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1WfXooaixFKSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYp'@;
put 'e3RoaXMuX2hhc2gudXBkYXRlKFYpfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sTS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiJtZDUiPT09KFY9Vi50b0xvd2VyQ2FzZSgpKT9uZXcgSzoicm1kMTYwIj09PVZ8fCJyaXBlbWQx'@;
put 'NjAiPT09Vj9uZXcgSTpuZXcgaihrKFYpKX19LDgwMjg6KE0sTyxSKT0+e3ZhciB6PVIoMjMxOCk7TS5leHBvcnRzPWZ1bmN0aW9uKEspe3JldHVybihuZXcgeikudXBkYXRlKEspLmRpZ2VzdCgpfX0sODM1NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTcxNyksSz1SKDEwMzEp'@;
put 'LEk9UigxMDI3KSxrPVIoOTUwOSkuQnVmZmVyLEU9Uig4MDI4KSxqPVIoOTc4NSksVj1SKDkwNzIpLEI9ay5hbGxvYygxMjgpO2Z1bmN0aW9uIFkoWCxVKXtJLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBVJiYoVT1rLmZyb20oVSkpO3ZhciBxPSJzaGE1MTIiPT09WHx8'@;
put 'InNoYTM4NCI9PT1YPzEyODo2NDt0aGlzLl9hbGc9WCx0aGlzLl9rZXk9VSxVLmxlbmd0aD5xP1U9KCJybWQxNjAiPT09WD9uZXcgajpWKFgpKS51cGRhdGUoVSkuZGlnZXN0KCk6VS5sZW5ndGg8cSYmKFU9ay5jb25jYXQoW1UsQl0scSkpO2Zvcih2YXIgZWU9dGhpcy5faXBhZD1rLmFsbG9j'@;
put 'VW5zYWZlKHEpLHRlPXRoaXMuX29wYWQ9ay5hbGxvY1Vuc2FmZShxKSxvZT0wO29lPHE7b2UrKyllZVtvZV09NTReVVtvZV0sdGVbb2VdPTkyXlVbb2VdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1YP25ldyBqOlYoWCksdGhpcy5faGFzaC51cGRhdGUoZWUpfXooWSxJKSxZLnByb3RvdHlwZS5f'@;
put 'dXBkYXRlPWZ1bmN0aW9uKFgpe3RoaXMuX2hhc2gudXBkYXRlKFgpfSxZLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgWD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgajpWKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51'@;
put 'cGRhdGUoWCkuZGlnZXN0KCl9LE0uZXhwb3J0cz1mdW5jdGlvbihYLFUpe3JldHVybiJybWQxNjAiPT09KFg9WC50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1YP25ldyBZKCJybWQxNjAiLFUpOiJtZDUiPT09WD9uZXcgSyhFLFUpOm5ldyBZKFgsVSl9fSwxMDMxOihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIHo9Uig1NzE3KSxLPVIoOTUwOSkuQnVmZmVyLEk9UigxMDI3KSxrPUsuYWxsb2MoMTI4KSxFPTY0O2Z1bmN0aW9uIGooVixCKXtJLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBCJiYoQj1LLmZyb20oQikpLHRoaXMuX2FsZz1WLHRoaXMuX2tl'@;
put 'eT1CLEIubGVuZ3RoPkU/Qj1WKEIpOkIubGVuZ3RoPEUmJihCPUsuY29uY2F0KFtCLGtdLEUpKTtmb3IodmFyIFk9dGhpcy5faXBhZD1LLmFsbG9jVW5zYWZlKEUpLFg9dGhpcy5fb3BhZD1LLmFsbG9jVW5zYWZlKEUpLFU9MDtVPEU7VSsrKVlbVV09NTReQltVXSxYW1VdPTkyXkJbVV07dGhp'@;
put 'cy5faGFzaD1bWV19eihqLEkpLGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5faGFzaC5wdXNoKFYpfSxqLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVj10aGlzLl9hbGcoSy5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoSy5jb25jYXQo'@;
put 'W3RoaXMuX29wYWQsVl0pKX0sTS5leHBvcnRzPWp9LDU4MzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPLnJhbmRvbUJ5dGVzPU8ucm5nPU8ucHNldWRvUmFuZG9tQnl0ZXM9Ty5wcm5nPVIoMTc5OCksTy5jcmVhdGVIYXNoPU8uSGFzaD1SKDM0ODIpLE8uY3JlYXRlSG1hYz1PLkhtYWM9Uig4'@;
put 'MzU1KTt2YXIgej1SKDYwNDIpLEs9T2JqZWN0LmtleXMoeiksST1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoSyk7Ty5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gSX07dmFyIGs9Uig1NjMyKTtPLnBia2RmMj1r'@;
put 'LnBia2RmMixPLnBia2RmMlN5bmM9ay5wYmtkZjJTeW5jO3ZhciBFPVIoMzYxNCk7Ty5DaXBoZXI9RS5DaXBoZXIsTy5jcmVhdGVDaXBoZXI9RS5jcmVhdGVDaXBoZXIsTy5DaXBoZXJpdj1FLkNpcGhlcml2LE8uY3JlYXRlQ2lwaGVyaXY9RS5jcmVhdGVDaXBoZXJpdixPLkRlY2lwaGVyPUUu'@;
put 'RGVjaXBoZXIsTy5jcmVhdGVEZWNpcGhlcj1FLmNyZWF0ZURlY2lwaGVyLE8uRGVjaXBoZXJpdj1FLkRlY2lwaGVyaXYsTy5jcmVhdGVEZWNpcGhlcml2PUUuY3JlYXRlRGVjaXBoZXJpdixPLmdldENpcGhlcnM9RS5nZXRDaXBoZXJzLE8ubGlzdENpcGhlcnM9RS5saXN0Q2lwaGVyczt2YXIg'@;
put 'aj1SKDI2MDcpO08uRGlmZmllSGVsbG1hbkdyb3VwPWouRGlmZmllSGVsbG1hbkdyb3VwLE8uY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWouY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLE8uZ2V0RGlmZmllSGVsbG1hbj1qLmdldERpZmZpZUhlbGxtYW4sTy5jcmVhdGVEaWZmaWVIZWxsbWFu'@;
put 'PWouY3JlYXRlRGlmZmllSGVsbG1hbixPLkRpZmZpZUhlbGxtYW49ai5EaWZmaWVIZWxsbWFuO3ZhciBWPVIoNDc0Myk7Ty5jcmVhdGVTaWduPVYuY3JlYXRlU2lnbixPLlNpZ249Vi5TaWduLE8uY3JlYXRlVmVyaWZ5PVYuY3JlYXRlVmVyaWZ5LE8uVmVyaWZ5PVYuVmVyaWZ5LE8uY3JlYXRl'@;
put 'RUNESD1SKDYzOTMpO3ZhciBCPVIoNzkwMCk7Ty5wdWJsaWNFbmNyeXB0PUIucHVibGljRW5jcnlwdCxPLnByaXZhdGVFbmNyeXB0PUIucHJpdmF0ZUVuY3J5cHQsTy5wdWJsaWNEZWNyeXB0PUIucHVibGljRGVjcnlwdCxPLnByaXZhdGVEZWNyeXB0PUIucHJpdmF0ZURlY3J5cHQ7dmFyIFk9'@;
put 'Uig3OTYzKTtPLnJhbmRvbUZpbGw9WS5yYW5kb21GaWxsLE8ucmFuZG9tRmlsbFN5bmM9WS5yYW5kb21GaWxsU3luYyxPLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFsic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQi'@;
put 'LCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cyIsImh0dHBzOi8vZ2l0aHViLmNvbS9jcnlwdG8tYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSJdLmpvaW4oIlxuIikpfSxPLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhf'@;
put 'VU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5H'@;
put 'OjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDUwNTY6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCku'@;
put 'QnVmZmVyO2NvbnN0e1RyYW5zZm9ybTpLfT1SKDI4MzApLEk9ei5mcm9tKFsyMzksMTg3LDE5MV0pO2NsYXNzIGsgZXh0ZW5kcyBLe2NvbnN0cnVjdG9yKGNlPXt9KXtzdXBlcih7d3JpdGFibGVPYmplY3RNb2RlOiEwLC4uLmNlfSk7Y29uc3QgRz17fTtsZXQgYjtmb3IobGV0IEQgaW4gY2Up'@;
put 'R1tCKEQpXT1jZVtEXTtpZihiPXRoaXMubm9ybWFsaXplKEcpKXRocm93IGI7c3dpdGNoKEcucmVjb3JkX2RlbGltaXRlcil7Y2FzZSJhdXRvIjpHLnJlY29yZF9kZWxpbWl0ZXI9bnVsbDticmVhaztjYXNlInVuaXgiOkcucmVjb3JkX2RlbGltaXRlcj0iXG4iO2JyZWFrO2Nhc2UibWFjIjpH'@;
put 'LnJlY29yZF9kZWxpbWl0ZXI9IlxyIjticmVhaztjYXNlIndpbmRvd3MiOkcucmVjb3JkX2RlbGltaXRlcj0iXHJcbiI7YnJlYWs7Y2FzZSJhc2NpaSI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJceDFlIjticmVhaztjYXNlInVuaWNvZGUiOkcucmVjb3JkX2RlbGltaXRlcj0iXHUyMDI4In10aGlz'@;
put 'Lm9wdGlvbnM9Ryx0aGlzLnN0YXRlPXtzdG9wOiExfSx0aGlzLmluZm89e3JlY29yZHM6MH19bm9ybWFsaXplKGNlKXtpZihudWxsPT1jZS5ib218fCExPT09Y2UuYm9tKWNlLmJvbT0hMTtlbHNlIGlmKCEwIT09Y2UuYm9tKXJldHVybiBuZXcgaigiQ1NWX09QVElPTl9CT09MRUFOX0lOVkFM'@;
put 'SURfVFlQRSIsWyJvcHRpb24gYGJvbWAgaXMgb3B0aW9uYWwgYW5kIG11c3QgYmUgYSBib29sZWFuIHZhbHVlLCIsYGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmJvbSl9YF0pO2lmKG51bGw9PWNlLmRlbGltaXRlciljZS5kZWxpbWl0ZXI9IiwiO2Vsc2UgaWYoei5pc0J1ZmZlcihjZS5kZWxp'@;
put 'bWl0ZXIpKWNlLmRlbGltaXRlcj1jZS5kZWxpbWl0ZXIudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UuZGVsaW1pdGVyKXJldHVybiBuZXcgaigiQ1NWX09QVElPTl9ERUxJTUlURVJfSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgZGVsaW1pdGVyYCBtdXN0IGJlIGEgYnVm'@;
put 'ZmVyIG9yIGEgc3RyaW5nLCIsYGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmRlbGltaXRlcil9YF0pO2lmKG51bGw9PWNlLnF1b3RlKWNlLnF1b3RlPSciJztlbHNlIGlmKCEwPT09Y2UucXVvdGUpY2UucXVvdGU9JyInO2Vsc2UgaWYoITE9PT1jZS5xdW90ZSljZS5xdW90ZT0iIjtlbHNlIGlm'@;
put 'KHouaXNCdWZmZXIoY2UucXVvdGUpKWNlLnF1b3RlPWNlLnF1b3RlLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLnF1b3RlKXJldHVybiBuZXcgaigiQ1NWX09QVElPTl9RVU9URV9JTlZBTElEX1RZUEUiLFsib3B0aW9uIGBxdW90ZWAgbXVzdCBiZSBhIGJvb2xlYW4s'@;
put 'IGEgYnVmZmVyIG9yIGEgc3RyaW5nLCIsYGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLnF1b3RlKX1gXSk7aWYobnVsbCE9Y2UucXVvdGVkfHwoY2UucXVvdGVkPSExKSxudWxsIT1jZS5xdW90ZWRfZW1wdHl8fChjZS5xdW90ZWRfZW1wdHk9dm9pZCAwKSxudWxsPT1jZS5xdW90ZWRfbWF0Y2h8'@;
put 'fCExPT09Y2UucXVvdGVkX21hdGNoP2NlLnF1b3RlZF9tYXRjaD1udWxsOkFycmF5LmlzQXJyYXkoY2UucXVvdGVkX21hdGNoKXx8KGNlLnF1b3RlZF9tYXRjaD1bY2UucXVvdGVkX21hdGNoXSksY2UucXVvdGVkX21hdGNoKWZvcihsZXQgRyBvZiBjZS5xdW90ZWRfbWF0Y2gpe2NvbnN0IGI9'@;
put 'RyBpbnN0YW5jZW9mIFJlZ0V4cDtpZigic3RyaW5nIiE9dHlwZW9mIEcmJiFiKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IHF1b3RlZF9tYXRjaCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgcmVnZXgsIGdvdCAke0pTT04uc3RyaW5naWZ5KEcpfWApfWlmKG51bGwhPWNlLnF1b3RlZF9z'@;
put 'dHJpbmd8fChjZS5xdW90ZWRfc3RyaW5nPSExKSxudWxsIT1jZS5lb2Z8fChjZS5lb2Y9ITApLG51bGw9PWNlLmVzY2FwZSljZS5lc2NhcGU9JyInO2Vsc2UgaWYoei5pc0J1ZmZlcihjZS5lc2NhcGUpKWNlLmVzY2FwZT1jZS5lc2NhcGUudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10'@;
put 'eXBlb2YgY2UuZXNjYXBlKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IGVzY2FwZSBtdXN0IGJlIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5lc2NhcGUpfWApO2lmKGNlLmVzY2FwZS5sZW5ndGg+MSlyZXR1cm4gRXJyb3IoYEludmFsaWQgT3B0'@;
put 'aW9uOiBlc2NhcGUgbXVzdCBiZSBvbmUgY2hhcmFjdGVyLCBnb3QgJHtjZS5lc2NhcGUubGVuZ3RofSBjaGFyYWN0ZXJzYCk7aWYobnVsbCE9Y2UuaGVhZGVyfHwoY2UuaGVhZGVyPSExKSxjZS5jb2x1bW5zPXRoaXMubm9ybWFsaXplX2NvbHVtbnMoY2UuY29sdW1ucyksbnVsbCE9Y2UucXVv'@;
put 'dGVkfHwoY2UucXVvdGVkPSExKSxudWxsIT1jZS5jYXN0fHwoY2UuY2FzdD17fSksbnVsbCE9Y2UuY2FzdC5iaWdpbnR8fChjZS5jYXN0LmJpZ2ludD1HPT4iIitHKSxudWxsIT1jZS5jYXN0LmJvb2xlYW58fChjZS5jYXN0LmJvb2xlYW49Rz0+Rz8iMSI6IiIpLG51bGwhPWNlLmNhc3QuZGF0'@;
put 'ZXx8KGNlLmNhc3QuZGF0ZT1HPT4iIitHLmdldFRpbWUoKSksbnVsbCE9Y2UuY2FzdC5udW1iZXJ8fChjZS5jYXN0Lm51bWJlcj1HPT4iIitHKSxudWxsIT1jZS5jYXN0Lm9iamVjdHx8KGNlLmNhc3Qub2JqZWN0PUc9PkpTT04uc3RyaW5naWZ5KEcpKSxudWxsIT1jZS5jYXN0LnN0cmluZ3x8'@;
put 'KGNlLmNhc3Quc3RyaW5nPWZ1bmN0aW9uKEcpe3JldHVybiBHfSksbnVsbD09Y2UucmVjb3JkX2RlbGltaXRlciljZS5yZWNvcmRfZGVsaW1pdGVyPSJcbiI7ZWxzZSBpZih6LmlzQnVmZmVyKGNlLnJlY29yZF9kZWxpbWl0ZXIpKWNlLnJlY29yZF9kZWxpbWl0ZXI9Y2UucmVjb3JkX2RlbGlt'@;
put 'aXRlci50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5yZWNvcmRfZGVsaW1pdGVyKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IHJlY29yZF9kZWxpbWl0ZXIgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UucmVj'@;
put 'b3JkX2RlbGltaXRlcil9YCl9X3RyYW5zZm9ybShjZSxHLGIpe2lmKCEwPT09dGhpcy5zdGF0ZS5zdG9wKXJldHVybjtpZighQXJyYXkuaXNBcnJheShjZSkmJiJvYmplY3QiIT10eXBlb2YgY2UpcmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCxiKEVycm9yKGBJbnZhbGlkIFJlY29yZDogZXhw'@;
put 'ZWN0IGFuIGFycmF5IG9yIGFuIG9iamVjdCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UpfWApKTtpZigwPT09dGhpcy5pbmZvLnJlY29yZHMpaWYoQXJyYXkuaXNBcnJheShjZSkpe2lmKCEwPT09dGhpcy5vcHRpb25zLmhlYWRlciYmIXRoaXMub3B0aW9ucy5jb2x1bW5zKXJldHVybiB0aGlz'@;
put 'LnN0YXRlLnN0b3A9ITAsYihFcnJvcigiVW5kaXNjb3ZlcmFibGUgQ29sdW1uczogaGVhZGVyIG9wdGlvbiByZXF1aXJlcyBjb2x1bW4gb3B0aW9uIG9yIG9iamVjdCByZWNvcmRzIikpfWVsc2UgbnVsbCE9dGhpcy5vcHRpb25zLmNvbHVtbnN8fCh0aGlzLm9wdGlvbnMuY29sdW1ucz10aGlz'@;
put 'Lm5vcm1hbGl6ZV9jb2x1bW5zKE9iamVjdC5rZXlzKGNlKSkpOzA9PT10aGlzLmluZm8ucmVjb3JkcyYmKHRoaXMuYm9tKCksdGhpcy5oZWFkZXJzKCkpO3RyeXt0aGlzLmVtaXQoInJlY29yZCIsY2UsdGhpcy5pbmZvLnJlY29yZHMpfWNhdGNoKEgpe3JldHVybiB0aGlzLnN0YXRlLnN0b3A9'@;
put 'ITAsdGhpcy5lbWl0KCJlcnJvciIsSCl9bGV0IEQ7aWYodGhpcy5vcHRpb25zLmVvZil7aWYoRD10aGlzLnN0cmluZ2lmeShjZSksdm9pZCAwPT09RClyZXR1cm47RCs9dGhpcy5vcHRpb25zLnJlY29yZF9kZWxpbWl0ZXJ9ZWxzZXtpZihEPXRoaXMuc3RyaW5naWZ5KGNlKSx2b2lkIDA9PT1E'@;
put 'KXJldHVybjsodGhpcy5vcHRpb25zLmhlYWRlcnx8dGhpcy5pbmZvLnJlY29yZHMpJiYoRD10aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcitEKX10aGlzLmluZm8ucmVjb3JkcysrLHRoaXMucHVzaChEKSxiKCl9X2ZsdXNoKGNlKXswPT09dGhpcy5pbmZvLnJlY29yZHMmJih0aGlzLmJv'@;
put 'bSgpLHRoaXMuaGVhZGVycygpKSxjZSgpfXN0cmluZ2lmeShjZSxHPSExKXtpZigib2JqZWN0IiE9dHlwZW9mIGNlKXJldHVybiBjZTtjb25zdHtjb2x1bW5zOmJ9PXRoaXMub3B0aW9ucyxIPVtdO2lmKEFycmF5LmlzQXJyYXkoY2UpKXtiJiZjZS5zcGxpY2UoYi5sZW5ndGgpO2ZvcihsZXQg'@;
put 'Zz0wO2c8Y2UubGVuZ3RoO2crKyl7Y29uc3QgQz1jZVtnXSxbUyx2XT10aGlzLl9fY2FzdChDLHtpbmRleDpnLGNvbHVtbjpnLHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9KTtpZihTKXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLFMpO0hbZ109W3YsQ119fWVsc2Ug'@;
put 'aWYoYilmb3IobGV0IGc9MDtnPGIubGVuZ3RoO2crKyl7Y29uc3QgQz1oZShjZSxiW2ddLmtleSksW1Msdl09dGhpcy5fX2Nhc3QoQyx7aW5kZXg6Zyxjb2x1bW46YltnXS5rZXkscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lmKFMpcmV0dXJuIHZvaWQgdGhpcy5lbWl0'@;
put 'KCJlcnJvciIsUyk7SFtnXT1bdixDXX1lbHNlIGZvcihsZXQgZyBvZiBjZSl7Y29uc3QgQz1jZVtnXSxbUyx2XT10aGlzLl9fY2FzdChDLHtpbmRleDppLGNvbHVtbjpiW2ldLmtleSxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7aWYoUylyZXR1cm4gdm9pZCB0aGlzLmVt'@;
put 'aXQoImVycm9yIixTKTtILnB1c2goW3YsQ10pfWxldCBOPSIiO2ZvcihsZXQgZz0wO2c8SC5sZW5ndGg7ZysrKXtsZXQgQyxTLFt2LHBdPUhbZ107aWYoInN0cmluZyI9PXR5cGVvZiB2KUM9dGhpcy5vcHRpb25zO2Vsc2UgaWYoVih2KSl7aWYoQz12LHY9Qy52YWx1ZSxkZWxldGUgQy52YWx1'@;
put 'ZSwic3RyaW5nIiE9dHlwZW9mIHYmJm51bGwhPXYpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoYEludmFsaWQgQ2FzdGluZyBWYWx1ZTogcmV0dXJuZWQgdmFsdWUgbXVzdCByZXR1cm4gYSBzdHJpbmcsIG51bGwgb3IgdW5kZWZpbmVkLCBnb3QgJHtKU09OLnN0cmluZ2lm'@;
put 'eSh2KX1gKSk7aWYoQz17Li4udGhpcy5vcHRpb25zLC4uLkN9LFM9dGhpcy5ub3JtYWxpemUoQykpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsUyl9ZWxzZXtpZihudWxsIT12KXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLEVycm9yKGBJbnZhbGlkIENhc3RpbmcgVmFsdWU6'@;
put 'IHJldHVybmVkIHZhbHVlIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBhbiBvYmplY3QsIG51bGwgb3IgdW5kZWZpbmVkLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2KX1gKSk7Qz10aGlzLm9wdGlvbnN9Y29uc3R7ZGVsaW1pdGVyOncsZXNjYXBlOkoscXVvdGU6bmUscXVvdGVkOmRlLHF1b3RlZF9l'@;
put 'bXB0eTpmZSxxdW90ZWRfc3RyaW5nOnhlLHF1b3RlZF9tYXRjaDpMZSxyZWNvcmRfZGVsaW1pdGVyOkZlfT1DO2lmKHYpe2lmKCJzdHJpbmciIT10eXBlb2YgdilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoYEZvcm1hdHRlciBtdXN0IHJldHVybiBhIHN0cmluZywgbnVsbCBvciB1'@;
put 'bmRlZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHYpfWApKSxudWxsO2NvbnN0IE9lPXcubGVuZ3RoJiZ2LmluZGV4T2Yodyk+PTAsamU9IiIhPT1uZSYmdi5pbmRleE9mKG5lKT49MCxXZT12LmluZGV4T2YoSik+PTAmJkohPT1uZSxLZT12LmluZGV4T2YoRmUpPj0wLFllPXhlJiYic3Ry'@;
put 'aW5nIj09dHlwZW9mIHA7bGV0IFFlPUxlJiZMZS5maWx0ZXIoUGU9PiJzdHJpbmciPT10eXBlb2YgUGU/LTEhPT12LmluZGV4T2YoUGUpOlBlLnRlc3QodikpO1FlPVFlJiZRZS5sZW5ndGg+MDtjb25zdCBsdD0hMD09PWplfHxPZXx8S2V8fGRlfHxZZXx8UWU7aWYoITA9PT1sdCYmITA9PT1X'@;
put 'ZSl7Y29uc3QgUGU9IlxcIj09PUo/bmV3IFJlZ0V4cChKK0osImciKTpuZXcgUmVnRXhwKEosImciKTt2PXYucmVwbGFjZShQZSxKK0opfWlmKCEwPT09amUpe2NvbnN0IFBlPW5ldyBSZWdFeHAobmUsImciKTt2PXYucmVwbGFjZShQZSxKK25lKX0hMD09PWx0JiYodj1uZSt2K25lKSxOKz12'@;
put 'fWVsc2UoITA9PT1mZXx8IiI9PT1wJiYhMD09PXhlJiYhMSE9PWZlKSYmKE4rPW5lK25lKTtnIT09SC5sZW5ndGgtMSYmKE4rPXcpfXJldHVybiBOfWJvbSgpeyEwPT09dGhpcy5vcHRpb25zLmJvbSYmdGhpcy5wdXNoKEkpfWhlYWRlcnMoKXtpZighMT09PXRoaXMub3B0aW9ucy5oZWFkZXJ8'@;
put 'fHZvaWQgMD09PXRoaXMub3B0aW9ucy5jb2x1bW5zKXJldHVybjtsZXQgY2U9dGhpcy5vcHRpb25zLmNvbHVtbnMubWFwKEc9PkcuaGVhZGVyKTtjZT10aGlzLm9wdGlvbnMuZW9mP3RoaXMuc3RyaW5naWZ5KGNlLCEwKSt0aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcjp0aGlzLnN0cmlu'@;
put 'Z2lmeShjZSksdGhpcy5wdXNoKGNlKX1fX2Nhc3QoY2UsRyl7Y29uc3QgYj10eXBlb2YgY2U7dHJ5e3JldHVybiJzdHJpbmciPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LnN0cmluZyhjZSxHKV06ImJpZ2ludCI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3QuYmlnaW50KGNl'@;
put 'LEcpXToibnVtYmVyIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5udW1iZXIoY2UsRyldOiJib29sZWFuIj09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5ib29sZWFuKGNlLEcpXTpjZSBpbnN0YW5jZW9mIERhdGU/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5kYXRlKGNl'@;
put 'LEcpXToib2JqZWN0Ij09PWImJm51bGwhPT1jZT9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0Lm9iamVjdChjZSxHKV06W3ZvaWQgMCxjZSxjZV19Y2F0Y2goRCl7cmV0dXJuW0RdfX1ub3JtYWxpemVfY29sdW1ucyhjZSl7aWYobnVsbCE9Y2Upe2lmKCJvYmplY3QiIT10eXBlb2YgY2UpdGhy'@;
put 'b3cgRXJyb3IoJ0ludmFsaWQgb3B0aW9uICJjb2x1bW5zIjogZXhwZWN0IGFuIGFycmF5IG9yIGFuIG9iamVjdCcpO2lmKEFycmF5LmlzQXJyYXkoY2UpKXtjb25zdCBHPVtdO2ZvcihsZXQgYiBvZiBjZSlpZigic3RyaW5nIj09dHlwZW9mIGIpRy5wdXNoKHtrZXk6YixoZWFkZXI6Yn0pO2Vs'@;
put 'c2V7aWYoIm9iamVjdCIhPXR5cGVvZiBifHx2b2lkIDA9PT1ifHxBcnJheS5pc0FycmF5KGIpKXRocm93IEVycm9yKCJJbnZhbGlkIGNvbHVtbiBkZWZpbml0aW9uOiBleHBlY3QgYSBzdHJpbmcgb3IgYW4gb2JqZWN0Iik7aWYoIWIua2V5KXRocm93IEVycm9yKCdJbnZhbGlkIGNvbHVtbiBk'@;
put 'ZWZpbml0aW9uOiBwcm9wZXJ0eSAia2V5IiBpcyByZXF1aXJlZCcpO3ZvaWQgMD09PWIuaGVhZGVyJiYoYi5oZWFkZXI9Yi5rZXkpLEcucHVzaChiKX1jZT1HfWVsc2V7Y29uc3QgRz1bXTtmb3IobGV0IGIgaW4gY2UpRy5wdXNoKHtrZXk6YixoZWFkZXI6Y2VbYl19KTtjZT1HfXJldHVybiBj'@;
put 'ZX19fWNvbnN0IEU9ZnVuY3Rpb24oKXtsZXQgdWUsY2UsRztmb3IobGV0IEQgaW4gYXJndW1lbnRzKXtjb25zdCBIPWFyZ3VtZW50c1tEXSxOPXR5cGVvZiBIO2lmKHZvaWQgMD09PXVlJiZBcnJheS5pc0FycmF5KEgpKXVlPUg7ZWxzZSBpZih2b2lkIDA9PT1jZSYmVihIKSljZT1IO2Vsc2V7'@;
put 'aWYodm9pZCAwIT09R3x8ImZ1bmN0aW9uIiE9PU4pdGhyb3cgbmV3IGooIkNTVl9JTlZBTElEX0FSR1VNRU5UIixbIkludmFsaWQgYXJndW1lbnQ6IixgZ290ICR7SlNPTi5zdHJpbmdpZnkoSCl9IGF0IGluZGV4ICR7RH1gXSk7Rz1IfX1jb25zdCBiPW5ldyBrKGNlKTtpZihHKXtjb25zdCBE'@;
put 'PVtdO2Iub24oInJlYWRhYmxlIixmdW5jdGlvbigpe2xldCBIO2Zvcig7bnVsbCE9PShIPXRoaXMucmVhZCgpKTspRC5wdXNoKEgpfSksYi5vbigiZXJyb3IiLGZ1bmN0aW9uKEgpe0coSCl9KSxiLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Ryh2b2lkIDAsRC5qb2luKCIiKSl9KX1pZih2b2lkIDAh'@;
put 'PT11ZSlpZigiZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlKXNldEltbWVkaWF0ZShmdW5jdGlvbigpe2ZvcihsZXQgRCBvZiB1ZSliLndyaXRlKEQpO2IuZW5kKCl9KTtlbHNle2ZvcihsZXQgRCBvZiB1ZSliLndyaXRlKEQpO2IuZW5kKCl9cmV0dXJuIGJ9O2NsYXNzIGogZXh0ZW5k'@;
put 'cyBFcnJvcntjb25zdHJ1Y3RvcihjZSxHLC4uLmIpe0FycmF5LmlzQXJyYXkoRykmJihHPUcuam9pbigiICIpKSxzdXBlcihHKSx2b2lkIDAhPT1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxqKSx0aGlzLmNvZGU9Y2U7Zm9yKGNvbnN0IEQg'@;
put 'b2YgYilmb3IoY29uc3QgSCBpbiBEKXtjb25zdCBOPURbSF07dGhpc1tIXT16LmlzQnVmZmVyKE4pP04udG9TdHJpbmcoKTpudWxsPT1OP046SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShOKSl9fX1FLlN0cmluZ2lmaWVyPWssRS5Dc3ZFcnJvcj1qLE0uZXhwb3J0cz1FO2NvbnN0IFY9ZnVu'@;
put 'Y3Rpb24odWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdWUmJm51bGwhPT11ZSYmIUFycmF5LmlzQXJyYXkodWUpfSxCPWZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUucmVwbGFjZSgvKFtBLVpdKS9nLGZ1bmN0aW9uKGNlLEcpe3JldHVybiJfIitHLnRvTG93ZXJDYXNlKCl9KX0sWT0iLiIuY2hh'@;
put 'ckNvZGVBdCgwKSxYPS9cXChcXCk/L2csVT1SZWdFeHAoIlteLltcXF1dK3xcXFsoPzooW15cIiddW15bXSopfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpIiwiZyIpLHE9L1wufFxbKD86W15bXF1d'@;
put 'KnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sZWU9L15cdyokLyx0ZT1mdW5jdGlvbih1ZSl7Y29uc3QgY2U9dHlwZW9mIHVlO3JldHVybiJzeW1ib2wiPT09Y2V8fCJvYmplY3QiPT09Y2UmJnVlJiYiW29iamVjdCBTeW1ib2xdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJp'@;
put 'bmcuY2FsbCh1ZSl9LHNlPWZ1bmN0aW9uKHVlKXtpZigic3RyaW5nIj09dHlwZW9mIHVlfHx0ZSh1ZSkpcmV0dXJuIHVlO2NvbnN0IGNlPWAke3VlfWA7cmV0dXJuIjAiPT1jZSYmMS91ZT09LUlORklOSVRZPyItMCI6Y2V9LGhlPWZ1bmN0aW9uKHVlLGNlKXtsZXQgRz0wO2NvbnN0IGI9KGNl'@;
put 'PWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh1ZSk/dWU6ZnVuY3Rpb24oRyxiKXtpZihBcnJheS5pc0FycmF5KEcpKXJldHVybiExO2NvbnN0IEQ9dHlwZW9mIEc7cmV0dXJuISgibnVtYmVyIiE9PUQmJiJzeW1ib2wiIT09RCYmImJvb2xlYW4iIT09RCYmRyYmIXRlKEcp'@;
put 'KXx8ZWUudGVzdChHKXx8IXEudGVzdChHKXx8bnVsbCE9YiYmRyBpbiBPYmplY3QoYil9KHVlLGNlKT9bdWVdOmZ1bmN0aW9uKEcpe2NvbnN0IGI9W107cmV0dXJuIEcuY2hhckNvZGVBdCgwKT09PVkmJmIucHVzaCgiIiksRy5yZXBsYWNlKFUsZnVuY3Rpb24oRCxILE4sZyl7bGV0IEM9RDtO'@;
put 'P0M9Zy5yZXBsYWNlKFgsIiQxIik6SCYmKEM9SC50cmltKCkpLGIucHVzaChDKX0pLGJ9KHVlKX0oY2UsdWUpKS5sZW5ndGg7Zm9yKDtudWxsIT11ZSYmRzxiOyl1ZT11ZVtzZShjZVtHKytdKV07cmV0dXJuIEcmJkc9PT1iP3VlOnZvaWQgMH19LDc1NjU6KE0sTyxSKT0+e3ZhciB6PVIoODc2'@;
put 'NCkuQnVmZmVyO2NvbnN0IEs9Uig1MDU2KSx7U3RyaW5nRGVjb2RlcjpJfT1SKDI1NTMpO00uZXhwb3J0cz1mdW5jdGlvbihrLEU9e30pe2NvbnN0IGo9W107ZnVuY3Rpb24gVihZKXtZJiZqLnB1c2goWS50b1N0cmluZygpKX16LmlzQnVmZmVyKGspJiYoaz0obmV3IEkpLndyaXRlKGspKTts'@;
put 'ZXQgQj1uZXcgSy5TdHJpbmdpZmllcihFKTtCLm9uKCJkYXRhIixWKTtmb3IobGV0IFkgb2YgaylCLndyaXRlKFkpO3JldHVybiBCLmVuZCgpLEIub2ZmKCJkYXRhIixWKSxqLmpvaW4oIiIpfX0sNDI4OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjIxNSksSz0iZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiZm9vIiksST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGs9QXJyYXkucHJvdG90eXBlLmNvbmNhdCxFPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqPVIoMTA0NCkoKSxWPUUmJmosQj1mdW5jdGlvbihYLFUscSxlZSl7'@;
put 'aWYoVSBpbiBYKWlmKCEwPT09ZWUpe2lmKFhbVV09PT1xKXJldHVybn1lbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZih0ZT1lZSl8fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1JLmNhbGwodGUpfHwhZWUoKSlyZXR1cm47dmFyIHRlO1Y/RShYLFUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxl'@;
put 'OiExLHZhbHVlOnEsd3JpdGFibGU6ITB9KTpYW1VdPXF9LFk9ZnVuY3Rpb24oWCxVKXt2YXIgcT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnt9LGVlPXooVSk7SyYmKGVlPWsuY2FsbChlZSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFUpKSk7Zm9yKHZhciB0ZT0wO3Rl'@;
put 'PGVlLmxlbmd0aDt0ZSs9MSlCKFgsZWVbdGVdLFVbZWVbdGVdXSxxW2VlW3RlXV0pfTtZLnN1cHBvcnRzRGVzY3JpcHRvcnM9ISFWLE0uZXhwb3J0cz1ZfSw1MjUxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Ty51dGlscz1SKDEyNzgpLE8uQ2lwaGVyPVIoNTc1NiksTy5ERVM9UigzMjcpLE8u'@;
put 'Q0JDPVIoOTA1MSksTy5FREU9Uig2NTEpfSw5MDUxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyksST17fTtmdW5jdGlvbiBrKEUpe3ouZXF1YWwoRS5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFy'@;
put 'IGo9MDtqPHRoaXMuaXYubGVuZ3RoO2orKyl0aGlzLml2W2pdPUVbal19Ty5pbnN0YW50aWF0ZT1mdW5jdGlvbihFKXtmdW5jdGlvbiBqKFgpe0UuY2FsbCh0aGlzLFgpLHRoaXMuX2NiY0luaXQoKX1LKGosRSk7Zm9yKHZhciBWPU9iamVjdC5rZXlzKEkpLEI9MDtCPFYubGVuZ3RoO0IrKyl7'@;
put 'dmFyIFk9VltCXTtqLnByb3RvdHlwZVtZXT1JW1ldfXJldHVybiBqLmNyZWF0ZT1mdW5jdGlvbihYKXtyZXR1cm4gbmV3IGooWCl9LGp9LEkuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRT1uZXcgayh0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUV9LEkuX3VwZGF0ZT1mdW5jdGlv'@;
put 'bihFLGosVixCKXt2YXIgWD10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsVT10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgcT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKVVbcV1ePUVbaitxXTtmb3IoWC5fdXBkYXRlLmNhbGwodGhp'@;
put 'cyxVLDAsVixCKSxxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVVtxXT1WW0IrcV19ZWxzZXtmb3IoWC5fdXBkYXRlLmNhbGwodGhpcyxFLGosVixCKSxxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVltCK3FdXj1VW3FdO2ZvcihxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVVtxXT1FW2orcV19'@;
put 'fX0sNTc1NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0Nik7ZnVuY3Rpb24gSyhJKXt0aGlzLm9wdGlvbnM9SSx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tT'@;
put 'aXplKSx0aGlzLmJ1ZmZlck9mZj0wfU0uZXhwb3J0cz1LLEsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxLLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSSl7cmV0dXJuIDA9PT1JLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChJKTp0'@;
put 'aGlzLl91cGRhdGVFbmNyeXB0KEkpfSxLLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBFPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixJLmxlbmd0aC1rKSxqPTA7ajxFO2orKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitqXT1J'@;
put 'W2sral07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1FLEV9LEsucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihJLGspe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxJLGspLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LEsucHJvdG90eXBlLl91cGRhdGVF'@;
put 'bmNyeXB0PWZ1bmN0aW9uKEkpe3ZhciBrPTAsRT0wLFY9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrSS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihrKz10aGlzLl9idWZmZXIoSSxrKSx0aGlzLmJ1ZmZlck9mZj09PXRo'@;
put 'aXMuYnVmZmVyLmxlbmd0aCYmKEUrPXRoaXMuX2ZsdXNoQnVmZmVyKFYsRSkpKTtmb3IodmFyIEI9SS5sZW5ndGgtKEkubGVuZ3RoLWspJXRoaXMuYmxvY2tTaXplO2s8QjtrKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoSSxrLFYsRSksRSs9dGhpcy5ibG9ja1NpemU7Zm9yKDtrPEku'@;
put 'bGVuZ3RoO2srKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1JW2tdO3JldHVybiBWfSxLLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihJKXtmb3IodmFyIGs9MCxFPTAsaj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90'@;
put 'aGlzLmJsb2NrU2l6ZSktMSxWPW5ldyBBcnJheShqKnRoaXMuYmxvY2tTaXplKTtqPjA7ai0tKWsrPXRoaXMuX2J1ZmZlcihJLGspLEUrPXRoaXMuX2ZsdXNoQnVmZmVyKFYsRSk7cmV0dXJuIGsrPXRoaXMuX2J1ZmZlcihJLGspLFZ9LEsucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEkpe3Zh'@;
put 'ciBrLEU7cmV0dXJuIEkmJihrPXRoaXMudXBkYXRlKEkpKSxFPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxrP2suY29uY2F0KEUpOkV9LEsucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oSSxrKXtpZigwPT09aylyZXR1cm4h'@;
put 'MTtmb3IoO2s8SS5sZW5ndGg7KUlbaysrXT0wO3JldHVybiEwfSxLLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIEk9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4g'@;
put 'dGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSwwKSxJfSxLLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEl9LEsucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXt6LmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRh'@;
put 'dGEgdG8gZGVjcnlwdCIpO3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEksMCksdGhpcy5fdW5wYWQoSSl9fSwzMjc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KSxJPVIoMTI3OCksaz1SKDU3NTYp'@;
put 'O2Z1bmN0aW9uIEUoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gaihCKXtrLmNhbGwodGhpcyxCKTt2YXIgWT1uZXcgRTt0aGlzLl9kZXNTdGF0ZT1ZLHRoaXMuZGVyaXZlS2V5cyhZLEIua2V5KX1LKGosayksTS5leHBvcnRzPWosai5jcmVhdGU9ZnVu'@;
put 'Y3Rpb24oQil7cmV0dXJuIG5ldyBqKEIpfTt2YXIgVj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07ai5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihCLFkpe0Iua2V5cz1uZXcgQXJyYXkoMzIpLHouZXF1YWwoWS5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQg'@;
put 'a2V5IGxlbmd0aCIpO3ZhciBYPUkucmVhZFVJbnQzMkJFKFksMCksVT1JLnJlYWRVSW50MzJCRShZLDQpO0kucGMxKFgsVSxCLnRtcCwwKSxYPUIudG1wWzBdLFU9Qi50bXBbMV07Zm9yKHZhciBxPTA7cTxCLmtleXMubGVuZ3RoO3ErPTIpe3ZhciBlZT1WW3E+Pj4xXTtYPUkucjI4c2hsKFgs'@;
put 'ZWUpLFU9SS5yMjhzaGwoVSxlZSksSS5wYzIoWCxVLEIua2V5cyxxKX19LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQixZLFgsVSl7dmFyIHE9dGhpcy5fZGVzU3RhdGUsZWU9SS5yZWFkVUludDMyQkUoQixZKSx0ZT1JLnJlYWRVSW50MzJCRShCLFkrNCk7SS5pcChlZSx0ZSxxLnRt'@;
put 'cCwwKSxlZT1xLnRtcFswXSx0ZT1xLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChxLGVlLHRlLHEudG1wLDApOnRoaXMuX2RlY3J5cHQocSxlZSx0ZSxxLnRtcCwwKSx0ZT1xLnRtcFsxXSxJLndyaXRlVUludDMyQkUoWCxlZT1xLnRtcFswXSxVKSxJLndyaXRl'@;
put 'VUludDMyQkUoWCx0ZSxVKzQpfSxqLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEIsWSl7Zm9yKHZhciBYPUIubGVuZ3RoLVksVT1ZO1U8Qi5sZW5ndGg7VSsrKUJbVV09WDtyZXR1cm4hMH0sai5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEIpe2Zvcih2YXIgWT1CW0IubGVuZ3RoLTFdLFg9'@;
put 'Qi5sZW5ndGgtWTtYPEIubGVuZ3RoO1grKyl6LmVxdWFsKEJbWF0sWSk7cmV0dXJuIEIuc2xpY2UoMCxCLmxlbmd0aC1ZKX0sai5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oQixZLFgsVSxxKXtmb3IodmFyIGVlPVksdGU9WCxvZT0wO29lPEIua2V5cy5sZW5ndGg7b2UrPTIpe3ZhciBz'@;
put 'ZT1CLmtleXNbb2VdLGhlPUIua2V5c1tvZSsxXTtJLmV4cGFuZCh0ZSxCLnRtcCwwKTt2YXIgdWU9SS5zdWJzdGl0dXRlKHNlXj1CLnRtcFswXSxoZV49Qi50bXBbMV0pLGNlPXRlO3RlPShlZV5JLnBlcm11dGUodWUpKT4+PjAsZWU9Y2V9SS5yaXAodGUsZWUsVSxxKX0sai5wcm90b3R5cGUu'@;
put 'X2RlY3J5cHQ9ZnVuY3Rpb24oQixZLFgsVSxxKXtmb3IodmFyIGVlPVgsdGU9WSxvZT1CLmtleXMubGVuZ3RoLTI7b2U+PTA7b2UtPTIpe3ZhciBzZT1CLmtleXNbb2VdLGhlPUIua2V5c1tvZSsxXTtJLmV4cGFuZChlZSxCLnRtcCwwKTt2YXIgdWU9SS5zdWJzdGl0dXRlKHNlXj1CLnRtcFsw'@;
put 'XSxoZV49Qi50bXBbMV0pLGNlPWVlO2VlPSh0ZV5JLnBlcm11dGUodWUpKT4+PjAsdGU9Y2V9SS5yaXAoZWUsdGUsVSxxKX19LDY1MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpLEk9Uig1NzU2KSxrPVIoMzI3KTtmdW5jdGlvbiBFKFYsQil7ei5lcXVh'@;
put 'bChCLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIFk9Qi5zbGljZSgwLDgpLFg9Qi5zbGljZSg4LDE2KSxVPUIuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1WP1trLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Oll9KSxrLmNyZWF0ZSh7dHlwZToi'@;
put 'ZGVjcnlwdCIsa2V5Olh9KSxrLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OlV9KV06W2suY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6VX0pLGsuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6WH0pLGsuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6WX0pXX1mdW5jdGlvbiBqKFYp'@;
put 'e0kuY2FsbCh0aGlzLFYpO3ZhciBCPW5ldyBFKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1CfUsoaixJKSxNLmV4cG9ydHM9aixqLmNyZWF0ZT1mdW5jdGlvbihWKXtyZXR1cm4gbmV3IGooVil9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVixCLFks'@;
put 'WCl7dmFyIFU9dGhpcy5fZWRlU3RhdGU7VS5jaXBoZXJzWzBdLl91cGRhdGUoVixCLFksWCksVS5jaXBoZXJzWzFdLl91cGRhdGUoWSxYLFksWCksVS5jaXBoZXJzWzJdLl91cGRhdGUoWSxYLFksWCl9LGoucHJvdG90eXBlLl9wYWQ9ay5wcm90b3R5cGUuX3BhZCxqLnByb3RvdHlwZS5fdW5w'@;
put 'YWQ9ay5wcm90b3R5cGUuX3VucGFkfSwxMjc4OihNLE8pPT57InVzZSBzdHJpY3QiO08ucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEksayl7cmV0dXJuKElbMCtrXTw8MjR8SVsxK2tdPDwxNnxJWzIra108PDh8SVszK2tdKT4+PjB9LE8ud3JpdGVVSW50MzJCRT1mdW5jdGlvbihJLGssRSl7SVsw'@;
put 'K0VdPWs+Pj4yNCxJWzErRV09az4+PjE2JjI1NSxJWzIrRV09az4+PjgmMjU1LElbMytFXT0yNTUma30sTy5pcD1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT02O1k+PTA7WS09Mil7Zm9yKHZhciBYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1rPj4+WCtZJjE7Zm9yKFg9MDtY'@;
put 'PD0yNDtYKz04KVY8PD0xLFZ8PUk+Pj5YK1kmMX1mb3IoWT02O1k+PTA7WS09Mil7Zm9yKFg9MTtYPD0yNTtYKz04KUI8PD0xLEJ8PWs+Pj5YK1kmMTtmb3IoWD0xO1g8PTI1O1grPTgpQjw8PTEsQnw9ST4+PlgrWSYxfUVbaiswXT1WPj4+MCxFW2orMV09Qj4+PjB9LE8ucmlwPWZ1bmN0aW9u'@;
put 'KEksayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPTA7WTw0O1krKylmb3IodmFyIFg9MjQ7WD49MDtYLT04KVY8PD0xLFZ8PWs+Pj5YK1kmMSxWPDw9MSxWfD1JPj4+WCtZJjE7Zm9yKFk9NDtZPDg7WSsrKWZvcihYPTI0O1g+PTA7WC09OClCPDw9MSxCfD1rPj4+WCtZJjEsQjw8PTEsQnw9ST4+'@;
put 'PlgrWSYxO0VbaiswXT1WPj4+MCxFW2orMV09Qj4+PjB9LE8ucGMxPWZ1bmN0aW9uKEksayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPTc7WT49NTtZLS0pe2Zvcih2YXIgWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9az4+WCtZJjE7Zm9yKFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PUk+PlgrWSYx'@;
put 'fWZvcihYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1rPj5YK1kmMTtmb3IoWT0xO1k8PTM7WSsrKXtmb3IoWD0wO1g8PTI0O1grPTgpQjw8PTEsQnw9az4+WCtZJjE7Zm9yKFg9MDtYPD0yNDtYKz04KUI8PD0xLEJ8PUk+PlgrWSYxfWZvcihYPTA7WDw9MjQ7WCs9OClCPDw9MSxCfD1JPj5YK1km'@;
put 'MTtFW2orMF09Vj4+PjAsRVtqKzFdPUI+Pj4wfSxPLnIyOHNobD1mdW5jdGlvbihJLGspe3JldHVybiBJPDxrJjI2ODQzNTQ1NXxJPj4+Mjgta307dmFyIFI9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5'@;
put 'LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07Ty5wYzI9ZnVuY3Rpb24oSSxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9Ui5sZW5ndGg+Pj4xLFg9MDtYPFk7WCsrKVY8PD0xLFZ8PUk+Pj5SW1hdJjE7Zm9yKFg9WTtYPFIubGVuZ3RoO1grKylC'@;
put 'PDw9MSxCfD1rPj4+UltYXSYxO0VbaiswXT1WPj4+MCxFW2orMV09Qj4+PjB9LE8uZXhwYW5kPWZ1bmN0aW9uKEksayxFKXt2YXIgaj0wLFY9MDtqPSgxJkkpPDw1fEk+Pj4yNztmb3IodmFyIEI9MjM7Qj49MTU7Qi09NClqPDw9NixqfD1JPj4+QiY2Mztmb3IoQj0xMTtCPj0zO0ItPTQpVnw9'@;
put 'ST4+PkImNjMsVjw8PTY7Vnw9KDMxJkkpPDwxfEk+Pj4zMSxrW0UrMF09aj4+PjAsa1tFKzFdPVY+Pj4wfTt2YXIgej1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwx'@;
put 'Myw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMs'@;
put 'NCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUs'@;
put 'MiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1'@;
put 'LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwx'@;
put 'NCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSww'@;
put 'LDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwx'@;
put 'MCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtPLnN1YnN0aXR1dGU9ZnVuY3Rpb24oSSxrKXtmb3IodmFy'@;
put 'IEU9MCxqPTA7ajw0O2orKylFPDw9NCxFfD16WzY0KmorKEk+Pj4xOC02KmomNjMpXTtmb3Ioaj0wO2o8NDtqKyspRTw8PTQsRXw9elsyNTYrNjQqaisoaz4+PjE4LTYqaiY2MyldO3JldHVybiBFPj4+MH07dmFyIEs9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwy'@;
put 'MiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO08ucGVybXV0ZT1mdW5jdGlvbihJKXtmb3IodmFyIGs9MCxFPTA7RTxLLmxlbmd0aDtFKyspazw8PTEsa3w9ST4+PktbRV0mMTtyZXR1cm4gaz4+PjB9LE8ucGFkU3BsaXQ9ZnVuY3Rpb24oSSxrLEUpe2Zvcih2'@;
put 'YXIgaj1JLnRvU3RyaW5nKDIpO2oubGVuZ3RoPGs7KWo9IjAiK2o7Zm9yKHZhciBWPVtdLEI9MDtCPGs7Qis9RSlWLnB1c2goai5zbGljZShCLEIrRSkpO3JldHVybiBWLmpvaW4oIiAiKX19LDI2MDc6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9UigzNTkwKSxJPVIoOTc5OSks'@;
put 'az1SKDc0MjYpLEU9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtPLkRpZmZpZUhlbGxtYW5Hcm91cD1PLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1PLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24oail7dmFyIFY9bmV3IHooSVtqXS5wcmltZSwiaGV4IiksQj1uZXcgeihJW2pdLmdl'@;
put 'biwiaGV4Iik7cmV0dXJuIG5ldyBrKFYsQil9LE8uY3JlYXRlRGlmZmllSGVsbG1hbj1PLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gaihWLEIsWSxYKXtyZXR1cm4gei5pc0J1ZmZlcihCKXx8dm9pZCAwPT09RVtCXT9qKFYsImJpbmFyeSIsQixZKTooQj1CfHwiYmluYXJ5IixYPVh8fCJiaW5h'@;
put 'cnkiLFk9WXx8bmV3IHooWzJdKSx6LmlzQnVmZmVyKFkpfHwoWT1uZXcgeihZLFgpKSwibnVtYmVyIj09dHlwZW9mIFY/bmV3IGsoSyhWLFkpLFksITApOih6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKSxuZXcgayhWLFksITApKSl9fSw3NDI2OihNLE8sUik9Pnt2YXIgej1SKDg3NjQp'@;
put 'LkJ1ZmZlcixLPVIoMzYyMCksST1uZXcoUigzMDQ3KSksaz1uZXcgSygyNCksRT1uZXcgSygxMSksaj1uZXcgSygxMCksVj1uZXcgSygzKSxCPW5ldyBLKDcpLFk9UigzNTkwKSxYPVIoMTc5OCk7ZnVuY3Rpb24gVShzZSxoZSl7cmV0dXJuIGhlPWhlfHwidXRmOCIsei5pc0J1ZmZlcihzZSl8'@;
put 'fChzZT1uZXcgeihzZSxoZSkpLHRoaXMuX3B1Yj1uZXcgSyhzZSksdGhpc31mdW5jdGlvbiBxKHNlLGhlKXtyZXR1cm4gaGU9aGV8fCJ1dGY4Iix6LmlzQnVmZmVyKHNlKXx8KHNlPW5ldyB6KHNlLGhlKSksdGhpcy5fcHJpdj1uZXcgSyhzZSksdGhpc31NLmV4cG9ydHM9dGU7dmFyIGVlPXt9'@;
put 'O2Z1bmN0aW9uIHRlKHNlLGhlLHVlKXt0aGlzLnNldEdlbmVyYXRvcihoZSksdGhpcy5fX3ByaW1lPW5ldyBLKHNlKSx0aGlzLl9wcmltZT1LLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1zZS5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlz'@;
put 'Ll9wcmltZUNvZGU9dm9pZCAwLHVlPyh0aGlzLnNldFB1YmxpY0tleT1VLHRoaXMuc2V0UHJpdmF0ZUtleT1xKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBvZShzZSxoZSl7dmFyIHVlPW5ldyB6KHNlLnRvQXJyYXkoKSk7cmV0dXJuIGhlP3VlLnRvU3RyaW5nKGhlKTp1ZX1PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkodGUucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24oc2UsaGUpe3ZhciB1ZT1oZS50b1N0cmluZygi'@;
put 'aGV4IiksY2U9W3VlLHNlLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKGNlIGluIGVlKXJldHVybiBlZVtjZV07dmFyIEcsYj0wO2lmKHNlLmlzRXZlbigpfHwhWS5zaW1wbGVTaWV2ZXx8IVkuZmVybWF0VGVzdChzZSl8fCFJLnRlc3Qoc2UpKXJldHVybiBiKz0xLGVlW2NlXT1iKz0iMDIi'@;
put 'PT09dWV8fCIwNSI9PT11ZT84OjQsYjtzd2l0Y2goSS50ZXN0KHNlLnNocm4oMSkpfHwoYis9MiksdWUpe2Nhc2UiMDIiOnNlLm1vZChrKS5jbXAoRSkmJihiKz04KTticmVhaztjYXNlIjA1IjooRz1zZS5tb2QoaikpLmNtcChWKSYmRy5jbXAoQikmJihiKz04KTticmVhaztkZWZhdWx0OmIr'@;
put 'PTR9cmV0dXJuIGVlW2NlXT1iLGJ9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLHRlLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IEsoWCh0aGlzLl9wcmltZUxlbikpKSx0aGlz'@;
put 'Ll9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LHRlLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKHNlKXt2YXIgaGU9KHNlPShzZT1uZXcgSyhzZSkpLnRvUmVkKHRoaXMuX3By'@;
put 'aW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx1ZT1uZXcgeihoZS50b0FycmF5KCkpLGNlPXRoaXMuZ2V0UHJpbWUoKTtpZih1ZS5sZW5ndGg8Y2UubGVuZ3RoKXt2YXIgRz1uZXcgeihjZS5sZW5ndGgtdWUubGVuZ3RoKTtHLmZpbGwoMCksdWU9ei5jb25jYXQoW0csdWVdKX1y'@;
put 'ZXR1cm4gdWV9LHRlLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9wdWIsc2UpfSx0ZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX3ByaXYsc2UpfSx0ZS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVu'@;
put 'Y3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9fcHJpbWUsc2UpfSx0ZS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fZ2VuLHNlKX0sdGUucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihzZSxoZSl7cmV0dXJuIGhlPWhlfHwidXRmOCIs'@;
put 'ei5pc0J1ZmZlcihzZSl8fChzZT1uZXcgeihzZSxoZSkpLHRoaXMuX19nZW49c2UsdGhpcy5fZ2VuPW5ldyBLKHNlKSx0aGlzfX0sMzU5MDooTSxPLFIpPT57dmFyIHo9UigxNzk4KTtNLmV4cG9ydHM9c2Usc2Uuc2ltcGxlU2lldmU9dGUsc2UuZmVybWF0VGVzdD1vZTt2YXIgSz1SKDM2MjAp'@;
put 'LEk9bmV3IEsoMjQpLGs9bmV3KFIoMzA0NykpLEU9bmV3IEsoMSksaj1uZXcgSygyKSxWPW5ldyBLKDUpLEI9KG5ldyBLKDE2KSxuZXcgSyg4KSxuZXcgSygxMCkpLFk9bmV3IEsoMyksWD0obmV3IEsoNyksbmV3IEsoMTEpKSxVPW5ldyBLKDQpLHE9KG5ldyBLKDEyKSxudWxsKTtmdW5jdGlv'@;
put 'biB0ZShoZSl7Zm9yKHZhciB1ZT1mdW5jdGlvbiBlZSgpe2lmKG51bGwhPT1xKXJldHVybiBxO3ZhciBoZT1bXTtoZVswXT0yO2Zvcih2YXIgdWU9MSxjZT0zO2NlPDEwNDg1NzY7Y2UrPTIpe2Zvcih2YXIgRz1NYXRoLmNlaWwoTWF0aC5zcXJ0KGNlKSksYj0wO2I8dWUmJmhlW2JdPD1HJiZj'@;
put 'ZSVoZVtiXSE9MDtiKyspO3VlIT09YiYmaGVbYl08PUd8fChoZVt1ZSsrXT1jZSl9cmV0dXJuIHE9aGUsaGV9KCksY2U9MDtjZTx1ZS5sZW5ndGg7Y2UrKylpZigwPT09aGUubW9kbih1ZVtjZV0pKXJldHVybiAwPT09aGUuY21wbih1ZVtjZV0pO3JldHVybiEwfWZ1bmN0aW9uIG9lKGhlKXt2'@;
put 'YXIgdWU9Sy5tb250KGhlKTtyZXR1cm4gMD09PWoudG9SZWQodWUpLnJlZFBvdyhoZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBzZShoZSx1ZSl7aWYoaGU8MTYpcmV0dXJuIG5ldyBLKDI9PT11ZXx8NT09PXVlP1sxNDAsMTIzXTpbMTQwLDM5XSk7dmFyIGNlLEc7Zm9y'@;
put 'KHVlPW5ldyBLKHVlKTs7KXtmb3IoY2U9bmV3IEsoeihNYXRoLmNlaWwoaGUvOCkpKTtjZS5iaXRMZW5ndGgoKT5oZTspY2UuaXNocm4oMSk7aWYoY2UuaXNFdmVuKCkmJmNlLmlhZGQoRSksY2UudGVzdG4oMSl8fGNlLmlhZGQoaiksdWUuY21wKGopKXtpZighdWUuY21wKFYpKWZvcig7Y2Uu'@;
put 'bW9kKEIpLmNtcChZKTspY2UuaWFkZChVKX1lbHNlIGZvcig7Y2UubW9kKEkpLmNtcChYKTspY2UuaWFkZChVKTtpZih0ZShHPWNlLnNocm4oMSkpJiZ0ZShjZSkmJm9lKEcpJiZvZShjZSkmJmsudGVzdChHKSYmay50ZXN0KGNlKSlyZXR1cm4gY2V9fX0sMzYyMDpmdW5jdGlvbihNLE8sUil7'@;
put 'IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90'@;
put 'b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9'@;
put 'PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRv'@;
put 'dy5CdWZmZXI6Uig3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1D'@;
put 'JiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4g'@;
put 'cH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5j'@;
put 'bXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcp'@;
put 'cmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2'@;
put 'PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0t'@;
put 'ZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jk'@;
put 'cz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVu'@;
put 'Z3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jk'@;
put 'c1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYm'@;
put 'JihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEot'@;
put 'PTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3Ro'@;
put 'O3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZv'@;
put 'cih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9'@;
put 'ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilk'@;
put 'ZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11'@;
put 'bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0'@;
put 'aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUu'@;
put 'cHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0'@;
put 'aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEy'@;
put 'LDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMx'@;
put 'ODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1'@;
put 'NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMu'@;
put 'd29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsTGU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsx'@;
put 'KTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStMZSkvNjcxMDg4NjR8MCxMZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8TGUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlw'@;
put 'KCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2'@;
put 'fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAi'@;
put 'K1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgTGU9eGUubW9kbihmZSku'@;
put 'dG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9MZStTOlhbZGUtTGUubGVuZ3RoXStMZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUkoITEsIkJh'@;
put 'c2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRz'@;
put 'WzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEkodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlr'@;
put 'ZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0kodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJy'@;
put 'YXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pd'@;
put 'PTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAz'@;
put 'Mi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5j'@;
put 'dGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5'@;
put 'cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2'@;
put 'YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkv'@;
put 'OCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5u'@;
put 'b3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtD'@;
put 'KyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1'@;
put 'b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxl'@;
put 'bmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5j'@;
put 'bG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9u'@;
put 'KGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNb'@;
put 'dl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1'@;
put 'eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4'@;
put 'NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRu'@;
put 'PWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90'@;
put 'b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYw'@;
put 'IT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNb'@;
put 'd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09'@;
put 'cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5u'@;
put 'ZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5n'@;
put 'dGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2ln'@;
put 'bigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhp'@;
put 'cy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVu'@;
put 'Z3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0'@;
put 'aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3Jk'@;
put 'cyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLExlPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLFFlPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZB'@;
put 'ZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxvdD0wfEpbN10sdXQ9ODE5MSZvdCxNdD1vdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49'@;
put 'Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEl0PTgxOTEmcnQsUXQ9'@;
put 'cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfG5lWzZdLHp0PTgxOTEmSW4seW49SW4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49'@;
put 'bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChMZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoTGUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChG'@;
put 'ZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsZnQpfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwk'@;
put 'bikpK01hdGguaW11bChRZSxlbil8MCx3PU1hdGguaW11bChRZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHd0'@;
put 'KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRo'@;
put 'LmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHc9dytNYXRoLmltdWwoUWUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkp'@;
put 'PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmlt'@;
put 'dWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoUWUsd3QpfDAsdz13K01hdGguaW11bChR'@;
put 'ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChM'@;
put 'ZSxRdCl8MCkrTWF0aC5pbXVsKEZlLEl0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxRdCl8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3'@;
put 'PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGgu'@;
put 'aW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKFFlLE50KXwwLHc9dytNYXRoLmltdWwoUWUsbW4pfDAsdj12K01hdGguaW11bChqZSxJdCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKGplLFF0KXwwKStNYXRoLmltdWwoV2UsSXQpfDAsdz13K01hdGguaW11bChXZSxRdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVsKExlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9'@;
put 'dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0'@;
put 'aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsSXQpfDAscD0ocD1wK01hdGguaW11bChZZSxRdCl8MCkrTWF0aC5pbXVsKFFlLEl0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoUWUsUXQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoTGUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4p'@;
put 'fDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStN'@;
put 'YXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsSXQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChQZSxRdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLHc9dytNYXRoLmltdWwoYmUsUXQpfDAsdj12K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoUWUscHQpfDAsdz13K01hdGguaW11bChRZSxZdCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxCbil8MCkrTWF0aC5pbXVsKEZl'@;
put 'LHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12'@;
put 'K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFF0KXwwKStNYXRoLmlt'@;
put 'dWwocWUsSXQpfDAsdz13K01hdGguaW11bChxZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChZZSx5bil8MCkrTWF0aC5pbXVsKFFlLHp0KXwwLHc9dytNYXRoLmltdWwoUWUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0'@;
put 'aC5pbXVsKExlLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUG4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxl'@;
put 'bikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGgu'@;
put 'aW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsSXQpfDAscD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKGh0LEl0KXwwLHc9dytNYXRoLmltdWwoaHQsUXQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUs'@;
put 'cHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxC'@;
put 'bil8MCkrTWF0aC5pbXVsKFFlLHNuKXwwLHc9dytNYXRoLmltdWwoUWUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFBuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxQbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVs'@;
put 'KExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0o'@;
put 'cD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1'@;
put 'dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUXQpfDApK01hdGguaW11bCh6ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHplLFF0'@;
put 'KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAs'@;
put 'dz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxQbil8MCkr'@;
put 'TWF0aC5pbXVsKFFlLCR0KXwwLHc9dytNYXRoLmltdWwoUWUsUG4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdl'@;
put 'LGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'UHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsSXQpfDAscD0ocD1wK01hdGguaW11bCh1dCxRdCl8MCkrTWF0aC5pbXVsKE10LEl0KXwwLHc9dytNYXRoLmltdWwoTXQsUXQpfDAsdj12K01hdGguaW11bChEZSxwdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9'@;
put 'ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01h'@;
put 'dGguaW11bChiZSxQbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChRZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoUWUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+'@;
put 'PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsSXQpfDAscD0ocD1wK01hdGguaW11bChQdCxRdCl8MCkrTWF0aC5pbXVsKG9uLEl0'@;
put 'KXwwLHc9dytNYXRoLmltdWwob24sUXQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4p'@;
put 'fDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxQbil8MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8'@;
put 'MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxJdCkscD0ocD1NYXRoLmltdWwoVXQsUXQpKStNYXRoLmltdWwoYm4sSXQpfDAsdz1NYXRoLmltdWwoYm4sUXQpLHY9ditNYXRoLmltdWwoUHQs'@;
put 'cHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8'@;
put 'MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9'@;
put 'dytNYXRoLmltdWwoaHQsUG4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSso'@;
put 'aG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChv'@;
put 'bix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERl'@;
put 'LFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxQbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRo'@;
put 'LmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01h'@;
put 'dGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFBuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxQbil8MDt2YXIgUGk9KGZlKyh2'@;
put 'PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11'@;
put 'bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sUG4pfDA7dmFy'@;
put 'IExvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LFBuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLFBuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChv'@;
put 'bixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4p'@;
put 'fDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVb'@;
put 'OV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUxvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5t'@;
put 'dWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3Rl'@;
put 'KHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7'@;
put 'ZGU9MDtmb3IodmFyIExlPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0xlPTY3MTA4ODYz'@;
put 'JihLZT1LZStMZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUxlLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxD'@;
put 'KTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZC'@;
put 'aW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKysp'@;
put 'dltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9'@;
put 'TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgTGU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sUWU9TGUqS2UtRmUqWWU7WWU9TGUqWWUrRmUqS2UsU1t4'@;
put 'ZStPZV09amUrKEtlPVFlKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKFFlPWRlKkxlLWZlKkZlLEZlPWRlKkZlK2ZlKkxlLExlPVFlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0'@;
put 'aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mt'@;
put 'di0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykr'@;
put 'UztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+'@;
put 'PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1m'@;
put 'dW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJy'@;
put 'YXkodiksTGU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9y'@;
put 'bShmZSx3LHhlLExlLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkxlW09lXTtkZVtPZV09bmVbT2VdKkxlW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zv'@;
put 'cm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7'@;
put 'dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'K2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9'@;
put 'MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1Nd'@;
put 'PUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2'@;
put 'fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2Kyss'@;
put 'cD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3'@;
put 'PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgt'@;
put 'MTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZl'@;
put 'KSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4'@;
put 'ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMu'@;
put 'bGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhp'@;
put 'cy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1'@;
put 'bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihn'@;
put 'KXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9'@;
put 'ZyUyNixTPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhp'@;
put 'cy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEko'@;
put 'Im51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6'@;
put 'KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4'@;
put 'NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcp'@;
put 'e2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcs'@;
put 'MT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNb'@;
put 'QysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgr'@;
put 'Uyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxl'@;
put 'bmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEkoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0op'@;
put 'Pj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMu'@;
put 'X2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtm'@;
put 'b3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4'@;
put 'NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihMZT1NYXRoLm1pbihMZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsTGUseGUpOzAhPT12Lm5lZ2F0aXZlOylMZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEs'@;
put 'eGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09TGUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMs'@;
put 'Uyl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYm'@;
put 'KHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0p'@;
put 'OnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChn'@;
put 'KTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNb'@;
put 'MF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJv'@;
put 'KCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMu'@;
put 'ZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1m'@;
put 'dW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9y'@;
put 'KHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhl'@;
put 'PTAsTGU9MTshKEMud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxP'@;
put 'ZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1'@;
put 'YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhp'@;
put 'cyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsr'@;
put 'K25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+'@;
put 'MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0'@;
put 'aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3Yr'@;
put 'KylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFr'@;
put 'O0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNP'@;
put 'ZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGct'@;
put 'QykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jk'@;
put 'c1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rp'@;
put 'b24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJp'@;
put 'ZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5u'@;
put 'ZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5s'@;
put 'ZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4o'@;
put 'Zyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5y'@;
put 'ZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBv'@;
put 'c2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZy'@;
put 'b20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlz'@;
put 'Ll9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEko'@;
put 'dGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'SSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5p'@;
put 'bXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRT'@;
put 'cXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi'@;
put 'KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk'@;
put 'Lm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxw'@;
put 'MTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5j'@;
put 'dGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3'@;
put 'ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwi'@;
put 'bW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYp'@;
put 'LHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRo'@;
put 'aXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmly'@;
put 'ZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09'@;
put 'dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcu'@;
put 'bGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1K'@;
put 'fWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxl'@;
put 'bmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9'@;
put 'LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYm'@;
put 'KGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1'@;
put 'NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJl'@;
put 'ZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtJKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5t'@;
put 'KSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMu'@;
put 'X3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDAp'@;
put 'PDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9k'@;
put 'KGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3Fy'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5p'@;
put 'dXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtJKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhp'@;
put 'cy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRk'@;
put 'bigxKS5pdXNocm4oMSkpLExlPXRoaXMucG93KGcsdiksRmU9cDswIT09TGUuY21wKHcpOyl7Zm9yKHZhciBPZT1MZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtJKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14'@;
put 'ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLExlPUxlLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJl'@;
put 'ZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9S'@;
put 'ZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29y'@;
put 'ZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVy'@;
put 'biBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5t'@;
put 'dWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5t'@;
put 'dWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQo'@;
put 'dGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQp'@;
put 'Lm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDY5NDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1PO3oudmVyc2lvbj1SKDg1OTcpLmk4LHoudXRpbHM9Uig5NTMpLHoucmFu'@;
put 'ZD1SKDk5MzEpLHouY3VydmU9Uig4MjU0KSx6LmN1cnZlcz1SKDU0MjcpLHouZWM9Uig3OTU0KSx6LmVkZHNhPVIoNTk4MCl9LDQ5MTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig5NTMpLEk9Sy5nZXROQUYsaz1LLmdldEpTRixFPUsuYXNzZXJ0O2Z1bmN0aW9u'@;
put 'IGooQixZKXt0aGlzLnR5cGU9Qix0aGlzLnA9bmV3IHooWS5wLDE2KSx0aGlzLnJlZD1ZLnByaW1lP3oucmVkKFkucHJpbWUpOnoubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgeigwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IHooMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdv'@;
put 'PW5ldyB6KDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49WS5uJiZuZXcgeihZLm4sMTYpLHRoaXMuZz1ZLmcmJnRoaXMucG9pbnRGcm9tSlNPTihZLmcsWS5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBB'@;
put 'cnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIFg9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IVh8fFguY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0h'@;
put 'MCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gVihCLFkpe3RoaXMuY3VydmU9Qix0aGlzLnR5cGU9WSx0aGlzLnByZWNvbXB1dGVkPW51bGx9TS5leHBvcnRzPWosai5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBs'@;
put 'ZW1lbnRlZCIpfSxqLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LGoucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbihCLFkpe0UoQi5wcmVjb21wdXRlZCk7dmFyIFg9Qi5fZ2V0RG91YmxlcygpLFU9SShZLDEs'@;
put 'dGhpcy5fYml0TGVuZ3RoKSxxPSgxPDxYLnN0ZXArMSktKFguc3RlcCUyPT0wPzI6MSk7cS89Mzt2YXIgZWUsdGUsb2U9W107Zm9yKGVlPTA7ZWU8VS5sZW5ndGg7ZWUrPVguc3RlcCl7dGU9MDtmb3IodmFyIHNlPWVlK1guc3RlcC0xO3NlPj1lZTtzZS0tKXRlPSh0ZTw8MSkrVVtzZV07b2Uu'@;
put 'cHVzaCh0ZSl9Zm9yKHZhciBoZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksdWU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGNlPXE7Y2U+MDtjZS0tKXtmb3IoZWU9MDtlZTxvZS5sZW5ndGg7ZWUrKykodGU9b2VbZWVdKT09PWNlP3VlPXVlLm1peGVkQWRkKFgucG9pbnRzW2Vl'@;
put 'XSk6dGU9PT0tY2UmJih1ZT11ZS5taXhlZEFkZChYLnBvaW50c1tlZV0ubmVnKCkpKTtoZT1oZS5hZGQodWUpfXJldHVybiBoZS50b1AoKX0sai5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oQixZKXtmb3IodmFyIFg9NCxVPUIuX2dldE5BRlBvaW50cyhYKSxxPVUucG9pbnRzLGVlPUko'@;
put 'WSxYPVUud25kLHRoaXMuX2JpdExlbmd0aCksdGU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLG9lPWVlLmxlbmd0aC0xO29lPj0wO29lLS0pe2Zvcih2YXIgc2U9MDtvZT49MCYmMD09PWVlW29lXTtvZS0tKXNlKys7aWYob2U+PTAmJnNlKyssdGU9dGUuZGJscChzZSksb2U8MClicmVh'@;
put 'azt2YXIgaGU9ZWVbb2VdO0UoMCE9PWhlKSx0ZT0iYWZmaW5lIj09PUIudHlwZT90ZS5taXhlZEFkZChoZT4wP3FbaGUtMT4+MV06cVstaGUtMT4+MV0ubmVnKCkpOnRlLmFkZChoZT4wP3FbaGUtMT4+MV06cVstaGUtMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09Qi50eXBlP3RlLnRv'@;
put 'UCgpOnRlfSxqLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihCLFksWCxVLHEpe3ZhciBlZSx0ZSxvZSxzZT10aGlzLl93bmFmVDEsaGU9dGhpcy5fd25hZlQyLHVlPXRoaXMuX3duYWZUMyxjZT0wO2ZvcihlZT0wO2VlPFU7ZWUrKyl7dmFyIEc9KG9lPVlbZWVdKS5fZ2V0TkFGUG9p'@;
put 'bnRzKEIpO3NlW2VlXT1HLnduZCxoZVtlZV09Ry5wb2ludHN9Zm9yKGVlPVUtMTtlZT49MTtlZS09Mil7dmFyIGI9ZWUtMSxEPWVlO2lmKDE9PT1zZVtiXSYmMT09PXNlW0RdKXt2YXIgSD1bWVtiXSxudWxsLG51bGwsWVtEXV07MD09PVlbYl0ueS5jbXAoWVtEXS55KT8oSFsxXT1ZW2JdLmFk'@;
put 'ZChZW0RdKSxIWzJdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXS5uZWcoKSkpOjA9PT1ZW2JdLnkuY21wKFlbRF0ueS5yZWROZWcoKSk/KEhbMV09WVtiXS50b0ooKS5taXhlZEFkZChZW0RdKSxIWzJdPVlbYl0uYWRkKFlbRF0ubmVnKCkpKTooSFsxXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlb'@;
put 'RF0pLEhbMl09WVtiXS50b0ooKS5taXhlZEFkZChZW0RdLm5lZygpKSk7dmFyIE49Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sZz1rKFhbYl0sWFtEXSk7Zm9yKGNlPU1hdGgubWF4KGdbMF0ubGVuZ3RoLGNlKSx1ZVtiXT1uZXcgQXJyYXkoY2UpLHVlW0RdPW5ldyBBcnJheShjZSksdGU9MDt0'@;
put 'ZTxjZTt0ZSsrKXVlW2JdW3RlXT1OWzMqKDErKDB8Z1swXVt0ZV0pKSsoMSsoMHxnWzFdW3RlXSkpXSx1ZVtEXVt0ZV09MCxoZVtiXT1IfWVsc2UgdWVbYl09SShYW2JdLHNlW2JdLHRoaXMuX2JpdExlbmd0aCksdWVbRF09SShYW0RdLHNlW0RdLHRoaXMuX2JpdExlbmd0aCksY2U9TWF0aC5t'@;
put 'YXgodWVbYl0ubGVuZ3RoLGNlKSxjZT1NYXRoLm1heCh1ZVtEXS5sZW5ndGgsY2UpfXZhciB2PXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxwPXRoaXMuX3duYWZUNDtmb3IoZWU9Y2U7ZWU+PTA7ZWUtLSl7Zm9yKHZhciB3PTA7ZWU+PTA7KXt2YXIgSj0hMDtmb3IodGU9MDt0ZTxVO3Rl'@;
put 'KyspcFt0ZV09MHx1ZVt0ZV1bZWVdLDAhPT1wW3RlXSYmKEo9ITEpO2lmKCFKKWJyZWFrO3crKyxlZS0tfWlmKGVlPj0wJiZ3Kyssdj12LmRibHAodyksZWU8MClicmVhaztmb3IodGU9MDt0ZTxVO3RlKyspe3ZhciBuZT1wW3RlXTswIT09bmUmJihuZT4wP29lPWhlW3RlXVtuZS0xPj4xXTpu'@;
put 'ZTwwJiYob2U9aGVbdGVdWy1uZS0xPj4xXS5uZWcoKSksdj0iYWZmaW5lIj09PW9lLnR5cGU/di5taXhlZEFkZChvZSk6di5hZGQob2UpKX19Zm9yKGVlPTA7ZWU8VTtlZSsrKWhlW2VlXT1udWxsO3JldHVybiBxP3Y6di50b1AoKX0sai5CYXNlUG9pbnQ9VixWLnByb3RvdHlwZS5lcT1mdW5j'@;
put 'dGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LGoucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKEIsWSl7Qj1LLnRvQXJyYXkoQixZKTt2'@;
put 'YXIgWD10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09QlswXXx8Nj09PUJbMF18fDc9PT1CWzBdKSYmQi5sZW5ndGgtMT09MipYKXJldHVybiA2PT09QlswXT9FKEJbQi5sZW5ndGgtMV0lMj09MCk6Nz09PUJbMF0mJkUoQltCLmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KEIuc2xpY2Uo'@;
put 'MSwxK1gpLEIuc2xpY2UoMStYLDErMipYKSk7aWYoKDI9PT1CWzBdfHwzPT09QlswXSkmJkIubGVuZ3RoLTE9PT1YKXJldHVybiB0aGlzLnBvaW50RnJvbVgoQi5zbGljZSgxLDErWCksMz09PUJbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sVi5wcm90b3R5'@;
put 'cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5lbmNvZGUoQiwhMCl9LFYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oQil7dmFyIFk9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxYPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixZKTtyZXR1cm4gQj9bdGhp'@;
put 'cy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoWCk6WzRdLmNvbmNhdChYLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixZKSl9LFYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihCLFkpe3JldHVybiBLLmVuY29kZSh0aGlzLl9lbmNvZGUoWSksQil9LFYucHJvdG90eXBlLnByZWNvbXB1'@;
put 'dGU9ZnVuY3Rpb24oQil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgWT17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIFkubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxZLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LEIpLFkuYmV0YT10aGlz'@;
put 'Ll9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1ZLHRoaXN9LFYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKEIpe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBZPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIVkmJlkucG9pbnRzLmxlbmd0aD49TWF0'@;
put 'aC5jZWlsKChCLmJpdExlbmd0aCgpKzEpL1kuc3RlcCl9LFYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKEIsWSl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBYPVt0aGlz'@;
put 'XSxVPXRoaXMscT0wO3E8WTtxKz1CKXtmb3IodmFyIGVlPTA7ZWU8QjtlZSsrKVU9VS5kYmwoKTtYLnB1c2goVSl9cmV0dXJue3N0ZXA6Qixwb2ludHM6WH19LFYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oQil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRl'@;
put 'ZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgWT1bdGhpc10sWD0oMTw8QiktMSxVPTE9PT1YP251bGw6dGhpcy5kYmwoKSxxPTE7cTxYO3ErKylZW3FdPVlbcS0xXS5hZGQoVSk7cmV0dXJue3duZDpCLHBvaW50czpZfX0sVi5wcm90b3R5cGUuX2dldEJldGE9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gbnVsbH0sVi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihCKXtmb3IodmFyIFk9dGhpcyxYPTA7WDxCO1grKylZPVkuZGJsKCk7cmV0dXJuIFl9fSwxMTM4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NTMpLEs9UigzNzg1KSxJPVIoNTcxNyksaz1SKDQ5'@;
put 'MTgpLEU9ei5hc3NlcnQ7ZnVuY3Rpb24gaihCKXt0aGlzLnR3aXN0ZWQ9MSE9KDB8Qi5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfEIuYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLGsuY2FsbCh0aGlzLCJlZHdhcmRzIixCKSx0aGlzLmE9bmV3IEsoQi5hLDE2KS51bW9k'@;
put 'KHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgSyhCLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IEsoQi5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRo'@;
put 'aXMuZCksRSghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Qi5jKX1mdW5jdGlvbiBWKEIsWSxYLFUscSl7ay5CYXNlUG9pbnQuY2FsbCh0aGlzLEIsInByb2plY3RpdmUiKSxudWxsPT09WSYmbnVsbD09PVgmJm51bGw9PT1VPyh0'@;
put 'aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IEsoWSwxNiksdGhpcy55PW5ldyBLKFgsMTYpLHRoaXMuej1VP25ldyBLKFUsMTYpOnRo'@;
put 'aXMuY3VydmUub25lLHRoaXMudD1xJiZuZXcgSyhxLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9S'@;
put 'ZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwo'@;
put 'dGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1JKGosayksTS5leHBvcnRzPWosai5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMubU9uZUE/Qi5yZWROZWcoKTp0aGlzLmEucmVkTXVsKEIpfSxqLnByb3Rv'@;
put 'dHlwZS5fbXVsQz1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5vbmVDP0I6dGhpcy5jLnJlZE11bChCKX0sai5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiB0aGlzLnBvaW50KEIsWSxYLFUpfSxqLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKEIsWSl7KEI9'@;
put 'bmV3IEsoQiwxNikpLnJlZHx8KEI9Qi50b1JlZCh0aGlzLnJlZCkpO3ZhciBYPUIucmVkU3FyKCksVT10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKFgpKSxxPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChYKSksZWU9VS5yZWRNdWwocS5yZWRJbnZt'@;
put 'KCkpLHRlPWVlLnJlZFNxcnQoKTtpZigwIT09dGUucmVkU3FyKCkucmVkU3ViKGVlKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgb2U9dGUuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKFkmJiFvZXx8IVkmJm9lKSYmKHRlPXRlLnJlZE5lZygp'@;
put 'KSx0aGlzLnBvaW50KEIsdGUpfSxqLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKEIsWSl7KEI9bmV3IEsoQiwxNikpLnJlZHx8KEI9Qi50b1JlZCh0aGlzLnJlZCkpO3ZhciBYPUIucmVkU3FyKCksVT1YLnJlZFN1Yih0aGlzLmMyKSxxPVgucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRo'@;
put 'aXMuYzIpLnJlZFN1Yih0aGlzLmEpLGVlPVUucmVkTXVsKHEucmVkSW52bSgpKTtpZigwPT09ZWUuY21wKHRoaXMuemVybykpe2lmKFkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLEIpfXZhciB0ZT1lZS5yZWRTcXJ0KCk7aWYo'@;
put 'MCE9PXRlLnJlZFNxcigpLnJlZFN1YihlZSkuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRlLmZyb21SZWQoKS5pc09kZCgpIT09WSYmKHRlPXRlLnJlZE5lZygpKSx0aGlzLnBvaW50KHRlLEIpfSxqLnByb3RvdHlwZS52YWxpZGF0ZT1m'@;
put 'dW5jdGlvbihCKXtpZihCLmlzSW5maW5pdHkoKSlyZXR1cm4hMDtCLm5vcm1hbGl6ZSgpO3ZhciBZPUIueC5yZWRTcXIoKSxYPUIueS5yZWRTcXIoKSxVPVkucmVkTXVsKHRoaXMuYSkucmVkQWRkKFgpLHE9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoWSku'@;
put 'cmVkTXVsKFgpKSk7cmV0dXJuIDA9PT1VLmNtcChxKX0sSShWLGsuQmFzZVBvaW50KSxqLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKEIpe3JldHVybiBWLmZyb21KU09OKHRoaXMsQil9LGoucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiBuZXcgVih0'@;
put 'aGlzLEIsWSxYLFUpfSxWLmZyb21KU09OPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIG5ldyBWKEIsWVswXSxZWzFdLFlbMl0pfSxWLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIr'@;
put 'dGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMu'@;
put 'eC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sVi5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciBCPXRoaXMueC5yZWRTcXIoKSxZPXRoaXMueS5yZWRTcXIoKSxYPXRoaXMuei5yZWRTcXIo'@;
put 'KTtYPVgucmVkSUFkZChYKTt2YXIgVT10aGlzLmN1cnZlLl9tdWxBKEIpLHE9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoQikucmVkSVN1YihZKSxlZT1VLnJlZEFkZChZKSx0ZT1lZS5yZWRTdWIoWCksb2U9VS5yZWRTdWIoWSksc2U9cS5yZWRNdWwodGUpLGhlPWVl'@;
put 'LnJlZE11bChvZSksdWU9cS5yZWRNdWwob2UpLGNlPXRlLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoc2UsaGUsY2UsdWUpfSxWLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBCLFksWCxVLHEsZWUsdGU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigp'@;
put 'LG9lPXRoaXMueC5yZWRTcXIoKSxzZT10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgaGU9KFU9dGhpcy5jdXJ2ZS5fbXVsQShvZSkpLnJlZEFkZChzZSk7dGhpcy56T25lPyhCPXRlLnJlZFN1YihvZSkucmVkU3ViKHNlKS5yZWRNdWwoaGUucmVkU3ViKHRoaXMu'@;
put 'Y3VydmUudHdvKSksWT1oZS5yZWRNdWwoVS5yZWRTdWIoc2UpKSxYPWhlLnJlZFNxcigpLnJlZFN1YihoZSkucmVkU3ViKGhlKSk6KHE9dGhpcy56LnJlZFNxcigpLGVlPWhlLnJlZFN1YihxKS5yZWRJU3ViKHEpLEI9dGUucmVkU3ViKG9lKS5yZWRJU3ViKHNlKS5yZWRNdWwoZWUpLFk9aGUu'@;
put 'cmVkTXVsKFUucmVkU3ViKHNlKSksWD1oZS5yZWRNdWwoZWUpKX1lbHNlIFU9b2UucmVkQWRkKHNlKSxxPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxlZT1VLnJlZFN1YihxKS5yZWRTdWIocSksQj10aGlzLmN1cnZlLl9tdWxDKHRlLnJlZElTdWIoVSkpLnJlZE11bChlZSks'@;
put 'WT10aGlzLmN1cnZlLl9tdWxDKFUpLnJlZE11bChvZS5yZWRJU3ViKHNlKSksWD1VLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoQixZLFgpfSxWLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVu'@;
put 'ZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sVi5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihCKXt2YXIgWT10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKEIueS5yZWRTdWIoQi54KSksWD10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKEIueS5yZWRBZGQoQi54'@;
put 'KSksVT10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChCLnQpLHE9dGhpcy56LnJlZE11bChCLnoucmVkQWRkKEIueikpLGVlPVgucmVkU3ViKFkpLHRlPXEucmVkU3ViKFUpLG9lPXEucmVkQWRkKFUpLHNlPVgucmVkQWRkKFkpLGhlPWVlLnJlZE11bCh0ZSksdWU9b2UucmVk'@;
put 'TXVsKHNlKSxjZT1lZS5yZWRNdWwoc2UpLEc9dGUucmVkTXVsKG9lKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChoZSx1ZSxHLGNlKX0sVi5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oQil7dmFyIFksWCxVPXRoaXMuei5yZWRNdWwoQi56KSxxPVUucmVkU3FyKCksZWU9dGhpcy54LnJl'@;
put 'ZE11bChCLngpLHRlPXRoaXMueS5yZWRNdWwoQi55KSxvZT10aGlzLmN1cnZlLmQucmVkTXVsKGVlKS5yZWRNdWwodGUpLHNlPXEucmVkU3ViKG9lKSxoZT1xLnJlZEFkZChvZSksdWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChCLngucmVkQWRkKEIueSkpLnJlZElTdWIoZWUpLnJl'@;
put 'ZElTdWIodGUpLGNlPVUucmVkTXVsKHNlKS5yZWRNdWwodWUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KFk9VS5yZWRNdWwoaGUpLnJlZE11bCh0ZS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShlZSkpKSxYPXNlLnJlZE11bChoZSkpOihZPVUucmVkTXVsKGhlKS5yZWRNdWwodGUucmVk'@;
put 'U3ViKGVlKSksWD10aGlzLmN1cnZlLl9tdWxDKHNlKS5yZWRNdWwoaGUpKSx0aGlzLmN1cnZlLnBvaW50KGNlLFksWCl9LFYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/QjpCLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/'@;
put 'dGhpcy5fZXh0QWRkKEIpOnRoaXMuX3Byb2pBZGQoQil9LFYucHJvdG90eXBlLm11bD1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhCKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLEIpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxCKX0sVi5wcm90b3R5cGUubXVs'@;
put 'QWRkPWZ1bmN0aW9uKEIsWSxYKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLFldLFtCLFhdLDIsITEpfSxWLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEIsWSxYKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLFldLFtCLFhdLDIsITApfSxW'@;
put 'LnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIEI9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoQiksdGhpcy55PXRoaXMueS5yZWRNdWwoQiksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwo'@;
put 'QikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sVi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxWLnByb3RvdHlwZS5n'@;
put 'ZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sVi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LFYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlz'@;
put 'PT09Qnx8MD09PXRoaXMuZ2V0WCgpLmNtcChCLmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoQi5nZXRZKCkpfSxWLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oQil7dmFyIFk9Qi50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoWSkp'@;
put 'cmV0dXJuITA7Zm9yKHZhciBYPUIuY2xvbmUoKSxVPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihYLmlhZGQodGhpcy5jdXJ2ZS5uKSxYLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKFkucmVkSUFkZChVKSwwPT09dGhpcy54LmNtcChZKSlyZXR1cm4hMH19'@;
put 'LFYucHJvdG90eXBlLnRvUD1WLnByb3RvdHlwZS5ub3JtYWxpemUsVi5wcm90b3R5cGUubWl4ZWRBZGQ9Vi5wcm90b3R5cGUuYWRkfSw4MjU0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Tzt6LmJhc2U9Uig0OTE4KSx6LnNob3J0PVIoNjY3Myksei5tb250PVIoMjg4MSksei5lZHdh'@;
put 'cmRzPVIoMTEzOCl9LDI4ODE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig1NzE3KSxJPVIoNDkxOCksaz1SKDk1Myk7ZnVuY3Rpb24gRShWKXtJLmNhbGwodGhpcywibW9udCIsViksdGhpcy5hPW5ldyB6KFYuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1u'@;
put 'ZXcgeihWLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyB6KDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IHooMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBq'@;
put 'KFYsQixZKXtJLkJhc2VQb2ludC5jYWxsKHRoaXMsViwicHJvamVjdGl2ZSIpLG51bGw9PT1CJiZudWxsPT09WT8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IHooQiwxNiksdGhpcy56PW5ldyB6KFksMTYpLHRoaXMueC5yZWR8fCh0'@;
put 'aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9SyhFLEkpLE0uZXhwb3J0cz1FLEUucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKFYpe3ZhciBCPVYubm9ybWFsaXplKCkueCxZPUIu'@;
put 'cmVkU3FyKCksWD1ZLnJlZE11bChCKS5yZWRBZGQoWS5yZWRNdWwodGhpcy5hKSkucmVkQWRkKEIpO3JldHVybiAwPT09WC5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKFgpfSxLKGosSS5CYXNlUG9pbnQpLEUucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFYsQil7cmV0dXJuIHRoaXMu'@;
put 'cG9pbnQoay50b0FycmF5KFYsQiksMSl9LEUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFYsQil7cmV0dXJuIG5ldyBqKHRoaXMsVixCKX0sRS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihWKXtyZXR1cm4gai5mcm9tSlNPTih0aGlzLFYpfSxqLnByb3RvdHlwZS5wcmVjb21w'@;
put 'dXRlPWZ1bmN0aW9uKCl7fSxqLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sai5mcm9tSlNPTj1mdW5jdGlvbihWLEIpe3JldHVybiBuZXcgaihWLEJbMF0sQlsxXXx8Vi5vbmUp'@;
put 'fSxqLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwy'@;
put 'KSsiPiJ9LGoucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxqLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgVj10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksQj10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCks'@;
put 'WT1WLnJlZFN1YihCKSxYPVYucmVkTXVsKEIpLFU9WS5yZWRNdWwoQi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKFkpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWCxVKX0sai5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9u'@;
put 'IE1vbnRnb21lcnkgY3VydmUiKX0sai5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihWLEIpe3ZhciBZPXRoaXMueC5yZWRBZGQodGhpcy56KSxYPXRoaXMueC5yZWRTdWIodGhpcy56KSxVPVYueC5yZWRBZGQoVi56KSxxPVYueC5yZWRTdWIoVi56KS5yZWRNdWwoWSksZWU9VS5yZWRNdWwo'@;
put 'WCksdGU9Qi56LnJlZE11bChxLnJlZEFkZChlZSkucmVkU3FyKCkpLG9lPUIueC5yZWRNdWwocS5yZWRJU3ViKGVlKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGUsb2UpfSxqLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oVil7Zm9yKHZhciBCPVYuY2xvbmUoKSxZPXRoaXMs'@;
put 'WD10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksVT1bXTswIT09Qi5jbXBuKDApO0IuaXVzaHJuKDEpKVUucHVzaChCLmFuZGxuKDEpKTtmb3IodmFyIHE9VS5sZW5ndGgtMTtxPj0wO3EtLSkwPT09VVtxXT8oWT1ZLmRpZmZBZGQoWCx0aGlzKSxYPVguZGJsKCkpOihYPVkuZGlmZkFkZChY'@;
put 'LHRoaXMpLFk9WS5kYmwoKSk7cmV0dXJuIFh9LGoucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGoucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBz'@;
put 'dXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxqLnByb3RvdHlwZS5lcT1mdW5jdGlvbihWKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChWLmdldFgoKSl9LGoucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnou'@;
put 'cmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sai5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NTMpLEs9UigzNzg1KSxJPVIo'@;
put 'NTcxNyksaz1SKDQ5MTgpLEU9ei5hc3NlcnQ7ZnVuY3Rpb24gaihZKXtrLmNhbGwodGhpcywic2hvcnQiLFkpLHRoaXMuYT1uZXcgSyhZLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEsoWS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0o'@;
put 'KSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShZKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlz'@;
put 'Ll9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBWKFksWCxVLHEpe2suQmFzZVBvaW50LmNhbGwodGhpcyxZLCJhZmZpbmUiKSxudWxsPT09WCYmbnVsbD09PVU/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBLKFgsMTYpLHRoaXMueT1u'@;
put 'ZXcgSyhVLDE2KSxxJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRo'@;
put 'aXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIEIoWSxYLFUscSl7ay5CYXNlUG9pbnQuY2FsbCh0aGlzLFksImphY29iaWFuIiksbnVsbD09PVgmJm51bGw9PT1VJiZudWxsPT09cT8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9'@;
put 'bmV3IEsoMCkpOih0aGlzLng9bmV3IEsoWCwxNiksdGhpcy55PW5ldyBLKFUsMTYpLHRoaXMuej1uZXcgSyhxLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJl'@;
put 'ZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfUkoaixrKSxNLmV4cG9ydHM9aixqLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKFkpe2lmKHRoaXMuemVyb0EmJnRo'@;
put 'aXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBYLFU7aWYoWS5iZXRhKVg9bmV3IEsoWS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgcT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtYPShYPXFbMF0uY21wKHFbMV0pPDA/cVswXTpxWzFdKS50b1JlZCh0'@;
put 'aGlzLnJlZCl9aWYoWS5sYW1iZGEpVT1uZXcgSyhZLmxhbWJkYSwxNik7ZWxzZXt2YXIgZWU9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoZWVbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChYKSk/VT1lZVswXTpFKDA9PT10aGlzLmcubXVsKFU9ZWVbMV0pLngu'@;
put 'Y21wKHRoaXMuZy54LnJlZE11bChYKSkpfXJldHVybntiZXRhOlgsbGFtYmRhOlUsYmFzaXM6WS5iYXNpcz9ZLmJhc2lzLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJue2E6bmV3IEsodGUuYSwxNiksYjpuZXcgSyh0ZS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoVSl9fX0sai5wcm90b3R5'@;
put 'cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihZKXt2YXIgWD1ZPT09dGhpcy5wP3RoaXMucmVkOksubW9udChZKSxVPW5ldyBLKDIpLnRvUmVkKFgpLnJlZEludm0oKSxxPVUucmVkTmVnKCksZWU9bmV3IEsoMykudG9SZWQoWCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChVKTtyZXR1cm5b'@;
put 'cS5yZWRBZGQoZWUpLmZyb21SZWQoKSxxLnJlZFN1YihlZSkuZnJvbVJlZCgpXX0sai5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihZKXtmb3IodmFyIFgsVSxxLGVlLHRlLG9lLHNlLGhlLHVlLGNlPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8y'@;
put 'KSksRz1ZLGI9dGhpcy5uLmNsb25lKCksRD1uZXcgSygxKSxIPW5ldyBLKDApLE49bmV3IEsoMCksZz1uZXcgSygxKSxDPTA7MCE9PUcuY21wbigwKTspe3ZhciBTPWIuZGl2KEcpO2hlPWIuc3ViKFMubXVsKEcpKSx1ZT1OLnN1YihTLm11bChEKSk7dmFyIHY9Zy5zdWIoUy5tdWwoSCkpO2lm'@;
put 'KCFxJiZoZS5jbXAoY2UpPDApWD1zZS5uZWcoKSxVPUQscT1oZS5uZWcoKSxlZT11ZTtlbHNlIGlmKHEmJjI9PSsrQylicmVhaztzZT1oZSxiPUcsRz1oZSxOPUQsRD11ZSxnPUgsSD12fXRlPWhlLm5lZygpLG9lPXVlO3ZhciBwPXEuc3FyKCkuYWRkKGVlLnNxcigpKTtyZXR1cm4gdGUuc3Fy'@;
put 'KCkuYWRkKG9lLnNxcigpKS5jbXAocCk+PTAmJih0ZT1YLG9lPVUpLHEubmVnYXRpdmUmJihxPXEubmVnKCksZWU9ZWUubmVnKCkpLHRlLm5lZ2F0aXZlJiYodGU9dGUubmVnKCksb2U9b2UubmVnKCkpLFt7YTpxLGI6ZWV9LHthOnRlLGI6b2V9XX0sai5wcm90b3R5cGUuX2VuZG9TcGxpdD1m'@;
put 'dW5jdGlvbihZKXt2YXIgWD10aGlzLmVuZG8uYmFzaXMsVT1YWzBdLHE9WFsxXSxlZT1xLmIubXVsKFkpLmRpdlJvdW5kKHRoaXMubiksdGU9VS5iLm5lZygpLm11bChZKS5kaXZSb3VuZCh0aGlzLm4pLG9lPWVlLm11bChVLmEpLHNlPXRlLm11bChxLmEpLGhlPWVlLm11bChVLmIpLHVlPXRl'@;
put 'Lm11bChxLmIpO3JldHVybntrMTpZLnN1YihvZSkuc3ViKHNlKSxrMjpoZS5hZGQodWUpLm5lZygpfX0sai5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihZLFgpeyhZPW5ldyBLKFksMTYpKS5yZWR8fChZPVkudG9SZWQodGhpcy5yZWQpKTt2YXIgVT1ZLnJlZFNxcigpLnJlZE11bChZ'@;
put 'KS5yZWRJQWRkKFkucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxxPVUucmVkU3FydCgpO2lmKDAhPT1xLnJlZFNxcigpLnJlZFN1YihVKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgZWU9cS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1'@;
put 'cm4oWCYmIWVlfHwhWCYmZWUpJiYocT1xLnJlZE5lZygpKSx0aGlzLnBvaW50KFkscSl9LGoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKFkpe2lmKFkuaW5mKXJldHVybiEwO3ZhciBYPVkueCxVPVkueSxxPXRoaXMuYS5yZWRNdWwoWCksZWU9WC5yZWRTcXIoKS5yZWRNdWwoWCkucmVk'@;
put 'SUFkZChxKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1VLnJlZFNxcigpLnJlZElTdWIoZWUpLmNtcG4oMCl9LGoucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihZLFgsVSl7Zm9yKHZhciBxPXRoaXMuX2VuZG9XbmFmVDEsZWU9dGhpcy5fZW5kb1duYWZUMix0ZT0wO3Rl'@;
put 'PFkubGVuZ3RoO3RlKyspe3ZhciBvZT10aGlzLl9lbmRvU3BsaXQoWFt0ZV0pLHNlPVlbdGVdLGhlPXNlLl9nZXRCZXRhKCk7b2UuazEubmVnYXRpdmUmJihvZS5rMS5pbmVnKCksc2U9c2UubmVnKCEwKSksb2UuazIubmVnYXRpdmUmJihvZS5rMi5pbmVnKCksaGU9aGUubmVnKCEwKSkscVsy'@;
put 'KnRlXT1zZSxxWzIqdGUrMV09aGUsZWVbMip0ZV09b2UuazEsZWVbMip0ZSsxXT1vZS5rMn1mb3IodmFyIHVlPXRoaXMuX3duYWZNdWxBZGQoMSxxLGVlLDIqdGUsVSksY2U9MDtjZTwyKnRlO2NlKyspcVtjZV09bnVsbCxlZVtjZV09bnVsbDtyZXR1cm4gdWV9LEkoVixrLkJhc2VQb2ludCks'@;
put 'ai5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiBuZXcgVih0aGlzLFksWCxVKX0sai5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihZLFgpe3JldHVybiBWLmZyb21KU09OKHRoaXMsWSxYKX0sVi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0'@;
put 'aGlzLmN1cnZlLmVuZG8pe3ZhciBZPXRoaXMucHJlY29tcHV0ZWQ7aWYoWSYmWS5iZXRhKXJldHVybiBZLmJldGE7dmFyIFg9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKFkpe3ZhciBVPXRoaXMuY3VydmUscT1mdW5jdGlv'@;
put 'bihlZSl7cmV0dXJuIFUucG9pbnQoZWUueC5yZWRNdWwoVS5lbmRvLmJldGEpLGVlLnkpfTtZLmJldGE9WCxYLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOlkubmFmJiZ7d25kOlkubmFmLnduZCxwb2ludHM6WS5uYWYucG9pbnRzLm1hcChxKX0sZG91YmxlczpZLmRvdWJsZXMmJntzdGVw'@;
put 'OlkuZG91Ymxlcy5zdGVwLHBvaW50czpZLmRvdWJsZXMucG9pbnRzLm1hcChxKX19fXJldHVybiBYfX0sVi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVj'@;
put 'b21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6'@;
put 'dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sVi5mcm9tSlNPTj1mdW5jdGlvbihZLFgsVSl7InN0cmluZyI9PXR5cGVvZiBYJiYoWD1KU09OLnBhcnNlKFgpKTt2YXIgcT1ZLnBvaW50KFhbMF0sWFsxXSxVKTtpZighWFsyXSlyZXR1cm4g'@;
put 'cTtmdW5jdGlvbiBlZShvZSl7cmV0dXJuIFkucG9pbnQob2VbMF0sb2VbMV0sVSl9dmFyIHRlPVhbMl07cmV0dXJuIHEucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOnRlLmRvdWJsZXMmJntzdGVwOnRlLmRvdWJsZXMuc3RlcCxwb2ludHM6W3FdLmNvbmNhdCh0ZS5kb3VibGVzLnBv'@;
put 'aW50cy5tYXAoZWUpKX0sbmFmOnRlLm5hZiYme3duZDp0ZS5uYWYud25kLHBvaW50czpbcV0uY29uY2F0KHRlLm5hZi5wb2ludHMubWFwKGVlKSl9fSxxfSxWLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+'@;
put 'IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LFYucHJvdG90eXBlLmFkZD1mdW5j'@;
put 'dGlvbihZKXtpZih0aGlzLmluZilyZXR1cm4gWTtpZihZLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKFkpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoWSkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChZLngpKXJldHVy'@;
put 'biB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIFg9dGhpcy55LnJlZFN1YihZLnkpOzAhPT1YLmNtcG4oMCkmJihYPVgucmVkTXVsKHRoaXMueC5yZWRTdWIoWS54KS5yZWRJbnZtKCkpKTt2YXIgVT1YLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKFkueCkscT1YLnJl'@;
put 'ZE11bCh0aGlzLngucmVkU3ViKFUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxxKX0sVi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFk9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1ZLmNtcG4oMCkp'@;
put 'cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgWD10aGlzLmN1cnZlLmEsVT10aGlzLngucmVkU3FyKCkscT1ZLnJlZEludm0oKSxlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUpLnJlZElBZGQoWCkucmVkTXVsKHEpLHRlPWVlLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJl'@;
put 'ZEFkZCh0aGlzLngpKSxvZT1lZS5yZWRNdWwodGhpcy54LnJlZFN1Yih0ZSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0ZSxvZSl9LFYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sVi5wcm90b3R5cGUuZ2V0WT1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oWSl7cmV0dXJuIFk9bmV3IEsoWSwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKFkpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsWSk6dGhpcy5j'@;
put 'dXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbWV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxZKX0sVi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKFksWCxVKXt2YXIgcT1bdGhpcyxYXSxlZT1bWSxVXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMu'@;
put 'Y3VydmUuX2VuZG9XbmFmTXVsQWRkKHEsZWUpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxxLGVlLDIpfSxWLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKFksWCxVKXt2YXIgcT1bdGhpcyxYXSxlZT1bWSxVXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFm'@;
put 'TXVsQWRkKHEsZWUsITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxxLGVlLDIsITApfSxWLnByb3RvdHlwZS5lcT1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcz09PVl8fHRoaXMuaW5mPT09WS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoWS54KSYmMD09PXRoaXMueS5jbXAoWS55'@;
put 'KSl9LFYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihZKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgWD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKFkmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBVPXRoaXMucHJlY29tcHV0ZWQscT1mdW5jdGlvbihlZSl7'@;
put 'cmV0dXJuIGVlLm5lZygpfTtYLnByZWNvbXB1dGVkPXtuYWY6VS5uYWYmJnt3bmQ6VS5uYWYud25kLHBvaW50czpVLm5hZi5wb2ludHMubWFwKHEpfSxkb3VibGVzOlUuZG91YmxlcyYme3N0ZXA6VS5kb3VibGVzLnN0ZXAscG9pbnRzOlUuZG91Ymxlcy5wb2ludHMubWFwKHEpfX19cmV0dXJu'@;
put 'IFh9LFYucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LEkoQixrLkJhc2VQb2ludCksai5wcm90b3R5cGUuanBvaW50'@;
put 'PWZ1bmN0aW9uKFksWCxVKXtyZXR1cm4gbmV3IEIodGhpcyxZLFgsVSl9LEIucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIFk9dGhpcy56LnJlZEludm0oKSxYPVkucmVkU3FyKCksVT10'@;
put 'aGlzLngucmVkTXVsKFgpLHE9dGhpcy55LnJlZE11bChYKS5yZWRNdWwoWSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxxKX0sQi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sQi5wcm90'@;
put 'b3R5cGUuYWRkPWZ1bmN0aW9uKFkpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBZO2lmKFkuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBYPVkuei5yZWRTcXIoKSxVPXRoaXMuei5yZWRTcXIoKSxxPXRoaXMueC5yZWRNdWwoWCksZWU9WS54LnJlZE11bChVKSx0ZT10aGlzLnku'@;
put 'cmVkTXVsKFgucmVkTXVsKFkueikpLG9lPVkueS5yZWRNdWwoVS5yZWRNdWwodGhpcy56KSksc2U9cS5yZWRTdWIoZWUpLGhlPXRlLnJlZFN1YihvZSk7aWYoMD09PXNlLmNtcG4oMCkpcmV0dXJuIDAhPT1oZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlz'@;
put 'LmRibCgpO3ZhciB1ZT1zZS5yZWRTcXIoKSxjZT11ZS5yZWRNdWwoc2UpLEc9cS5yZWRNdWwodWUpLGI9aGUucmVkU3FyKCkucmVkSUFkZChjZSkucmVkSVN1YihHKS5yZWRJU3ViKEcpLEQ9aGUucmVkTXVsKEcucmVkSVN1YihiKSkucmVkSVN1Yih0ZS5yZWRNdWwoY2UpKSxIPXRoaXMuei5y'@;
put 'ZWRNdWwoWS56KS5yZWRNdWwoc2UpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChiLEQsSCl9LEIucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKFkpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBZLnRvSigpO2lmKFkuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBYPXRoaXMu'@;
put 'ei5yZWRTcXIoKSxVPXRoaXMueCxxPVkueC5yZWRNdWwoWCksZWU9dGhpcy55LHRlPVkueS5yZWRNdWwoWCkucmVkTXVsKHRoaXMueiksb2U9VS5yZWRTdWIocSksc2U9ZWUucmVkU3ViKHRlKTtpZigwPT09b2UuY21wbigwKSlyZXR1cm4gMCE9PXNlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9p'@;
put 'bnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIGhlPW9lLnJlZFNxcigpLHVlPWhlLnJlZE11bChvZSksY2U9VS5yZWRNdWwoaGUpLEc9c2UucmVkU3FyKCkucmVkSUFkZCh1ZSkucmVkSVN1YihjZSkucmVkSVN1YihjZSksYj1zZS5yZWRNdWwoY2UucmVkSVN1YihHKSkucmVkSVN1'@;
put 'YihlZS5yZWRNdWwodWUpKSxEPXRoaXMuei5yZWRNdWwob2UpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChHLGIsRCl9LEIucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oWSl7aWYoMD09PVkpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIVkpcmV0dXJu'@;
put 'IHRoaXMuZGJsKCk7dmFyIFg7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBVPXRoaXM7Zm9yKFg9MDtYPFk7WCsrKVU9VS5kYmwoKTtyZXR1cm4gVX12YXIgcT10aGlzLmN1cnZlLmEsZWU9dGhpcy5jdXJ2ZS50aW52LHRlPXRoaXMueCxvZT10aGlzLnksc2U9'@;
put 'dGhpcy56LGhlPXNlLnJlZFNxcigpLnJlZFNxcigpLHVlPW9lLnJlZEFkZChvZSk7Zm9yKFg9MDtYPFk7WCsrKXt2YXIgY2U9dGUucmVkU3FyKCksRz11ZS5yZWRTcXIoKSxiPUcucmVkU3FyKCksRD1jZS5yZWRBZGQoY2UpLnJlZElBZGQoY2UpLnJlZElBZGQocS5yZWRNdWwoaGUpKSxIPXRl'@;
put 'LnJlZE11bChHKSxOPUQucmVkU3FyKCkucmVkSVN1YihILnJlZEFkZChIKSksZz1ILnJlZElTdWIoTiksQz1ELnJlZE11bChnKTtDPUMucmVkSUFkZChDKS5yZWRJU3ViKGIpO3ZhciBTPXVlLnJlZE11bChzZSk7WCsxPFkmJihoZT1oZS5yZWRNdWwoYikpLHRlPU4sc2U9Uyx1ZT1DfXJldHVy'@;
put 'biB0aGlzLmN1cnZlLmpwb2ludCh0ZSx1ZS5yZWRNdWwoZWUpLHNlKX0sQi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwo'@;
put 'KTp0aGlzLl9kYmwoKX0sQi5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgWSxYLFU7aWYodGhpcy56T25lKXt2YXIgcT10aGlzLngucmVkU3FyKCksZWU9dGhpcy55LnJlZFNxcigpLHRlPWVlLnJlZFNxcigpLG9lPXRoaXMueC5yZWRBZGQoZWUpLnJlZFNxcigpLnJlZElTdWIo'@;
put 'cSkucmVkSVN1Yih0ZSk7b2U9b2UucmVkSUFkZChvZSk7dmFyIHNlPXEucmVkQWRkKHEpLnJlZElBZGQocSksaGU9c2UucmVkU3FyKCkucmVkSVN1YihvZSkucmVkSVN1YihvZSksdWU9dGUucmVkSUFkZCh0ZSk7dWU9KHVlPXVlLnJlZElBZGQodWUpKS5yZWRJQWRkKHVlKSxZPWhlLFg9c2Uu'@;
put 'cmVkTXVsKG9lLnJlZElTdWIoaGUpKS5yZWRJU3ViKHVlKSxVPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBjZT10aGlzLngucmVkU3FyKCksRz10aGlzLnkucmVkU3FyKCksYj1HLnJlZFNxcigpLEQ9dGhpcy54LnJlZEFkZChHKS5yZWRTcXIoKS5yZWRJU3ViKGNlKS5yZWRJU3Vi'@;
put 'KGIpO0Q9RC5yZWRJQWRkKEQpO3ZhciBIPWNlLnJlZEFkZChjZSkucmVkSUFkZChjZSksTj1ILnJlZFNxcigpLGc9Yi5yZWRJQWRkKGIpO2c9KGc9Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpLFk9Ti5yZWRJU3ViKEQpLnJlZElTdWIoRCksWD1ILnJlZE11bChELnJlZElTdWIoWSkpLnJlZElT'@;
put 'dWIoZyksVT0oVT10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoVSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFksWCxVKX0sQi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIFksWCxVO2lmKHRoaXMuek9uZSl7dmFyIHE9dGhpcy54LnJlZFNxcigpLGVlPXRoaXMu'@;
put 'eS5yZWRTcXIoKSx0ZT1lZS5yZWRTcXIoKSxvZT10aGlzLngucmVkQWRkKGVlKS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIodGUpO29lPW9lLnJlZElBZGQob2UpO3ZhciBzZT1xLnJlZEFkZChxKS5yZWRJQWRkKHEpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxoZT1zZS5yZWRTcXIoKS5y'@;
put 'ZWRJU3ViKG9lKS5yZWRJU3ViKG9lKTtZPWhlO3ZhciB1ZT10ZS5yZWRJQWRkKHRlKTt1ZT0odWU9dWUucmVkSUFkZCh1ZSkpLnJlZElBZGQodWUpLFg9c2UucmVkTXVsKG9lLnJlZElTdWIoaGUpKS5yZWRJU3ViKHVlKSxVPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBjZT10aGlz'@;
put 'LnoucmVkU3FyKCksRz10aGlzLnkucmVkU3FyKCksYj10aGlzLngucmVkTXVsKEcpLEQ9dGhpcy54LnJlZFN1YihjZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoY2UpKTtEPUQucmVkQWRkKEQpLnJlZElBZGQoRCk7dmFyIEg9Yi5yZWRJQWRkKGIpLE49KEg9SC5yZWRJQWRkKEgpKS5yZWRBZGQo'@;
put 'SCk7WT1ELnJlZFNxcigpLnJlZElTdWIoTiksVT10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihHKS5yZWRJU3ViKGNlKTt2YXIgZz1HLnJlZFNxcigpO2c9KGc9KGc9Zy5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpKS5yZWRJQWRkKGcpLFg9RC5yZWRNdWwoSC5yZWRJU3Vi'@;
put 'KFkpKS5yZWRJU3ViKGcpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZLFgsVSl9LEIucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgWT10aGlzLmN1cnZlLmEsWD10aGlzLngsVT10aGlzLnkscT10aGlzLnosZWU9cS5yZWRTcXIoKS5yZWRTcXIoKSx0ZT1YLnJlZFNxcigpLG9lPVUu'@;
put 'cmVkU3FyKCksc2U9dGUucmVkQWRkKHRlKS5yZWRJQWRkKHRlKS5yZWRJQWRkKFkucmVkTXVsKGVlKSksaGU9WC5yZWRBZGQoWCksdWU9KGhlPWhlLnJlZElBZGQoaGUpKS5yZWRNdWwob2UpLGNlPXNlLnJlZFNxcigpLnJlZElTdWIodWUucmVkQWRkKHVlKSksRz11ZS5yZWRJU3ViKGNlKSxi'@;
put 'PW9lLnJlZFNxcigpO2I9KGI9KGI9Yi5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpO3ZhciBEPXNlLnJlZE11bChHKS5yZWRJU3ViKGIpLEg9VS5yZWRBZGQoVSkucmVkTXVsKHEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjZSxELEgpfSxCLnByb3RvdHlwZS50cnBsPWZ1'@;
put 'bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBZPXRoaXMueC5yZWRTcXIoKSxYPXRoaXMueS5yZWRTcXIoKSxVPXRoaXMuei5yZWRTcXIoKSxxPVgucmVkU3FyKCksZWU9WS5yZWRBZGQoWSkucmVkSUFkZChZKSx0ZT1lZS5yZWRT'@;
put 'cXIoKSxvZT10aGlzLngucmVkQWRkKFgpLnJlZFNxcigpLnJlZElTdWIoWSkucmVkSVN1YihxKSxzZT0ob2U9KG9lPShvZT1vZS5yZWRJQWRkKG9lKSkucmVkQWRkKG9lKS5yZWRJQWRkKG9lKSkucmVkSVN1Yih0ZSkpLnJlZFNxcigpLGhlPXEucmVkSUFkZChxKTtoZT0oaGU9KGhlPWhlLnJl'@;
put 'ZElBZGQoaGUpKS5yZWRJQWRkKGhlKSkucmVkSUFkZChoZSk7dmFyIHVlPWVlLnJlZElBZGQob2UpLnJlZFNxcigpLnJlZElTdWIodGUpLnJlZElTdWIoc2UpLnJlZElTdWIoaGUpLGNlPVgucmVkTXVsKHVlKTtjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpO3ZhciBHPXRoaXMu'@;
put 'eC5yZWRNdWwoc2UpLnJlZElTdWIoY2UpO0c9KEc9Ry5yZWRJQWRkKEcpKS5yZWRJQWRkKEcpO3ZhciBiPXRoaXMueS5yZWRNdWwodWUucmVkTXVsKGhlLnJlZElTdWIodWUpKS5yZWRJU3ViKG9lLnJlZE11bChzZSkpKTtiPShiPShiPWIucmVkSUFkZChiKSkucmVkSUFkZChiKSkucmVkSUFk'@;
put 'ZChiKTt2YXIgRD10aGlzLnoucmVkQWRkKG9lKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoc2UpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChHLGIsRCl9LEIucHJvdG90eXBlLm11bD1mdW5jdGlvbihZLFgpe3JldHVybiBZPW5ldyBLKFksWCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0'@;
put 'aGlzLFkpfSxCLnByb3RvdHlwZS5lcT1mdW5jdGlvbihZKXtpZigiYWZmaW5lIj09PVkudHlwZSlyZXR1cm4gdGhpcy5lcShZLnRvSigpKTtpZih0aGlzPT09WSlyZXR1cm4hMDt2YXIgWD10aGlzLnoucmVkU3FyKCksVT1ZLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoVSkucmVk'@;
put 'SVN1YihZLngucmVkTXVsKFgpKS5jbXBuKDApKXJldHVybiExO3ZhciBxPVgucmVkTXVsKHRoaXMueiksZWU9VS5yZWRNdWwoWS56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoZWUpLnJlZElTdWIoWS55LnJlZE11bChxKSkuY21wbigwKX0sQi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9u'@;
put 'KFkpe3ZhciBYPXRoaXMuei5yZWRTcXIoKSxVPVkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChYKTtpZigwPT09dGhpcy54LmNtcChVKSlyZXR1cm4hMDtmb3IodmFyIHE9WS5jbG9uZSgpLGVlPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoWCk7Oyl7aWYocS5pYWRkKHRoaXMuY3VydmUu'@;
put 'bikscS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihVLnJlZElBZGQoZWUpLDA9PT10aGlzLnguY21wKFUpKXJldHVybiEwfX0sQi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMg'@;
put 'SlBvaW50IHg6ICIrdGhpcy54LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LEIucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sNTQyNzoo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9TyxJPVIoMzcxNSksaz1SKDgyNTQpLEU9Uig5NTMpLmFzc2VydDtmdW5jdGlvbiBqKEIpe3RoaXMuY3VydmU9InNob3J0Ij09PUIudHlwZT9uZXcgay5zaG9ydChCKToiZWR3YXJkcyI9PT1CLnR5cGU/bmV3IGsuZWR3YXJkcyhCKTpuZXcg'@;
put 'ay5tb250KEIpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9Qi5oYXNoLEUodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSxFKHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9'@;
put 'ZnVuY3Rpb24gVihCLFkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShLLEIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBYPW5ldyBqKFkpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSyxCLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZToh'@;
put 'MCx2YWx1ZTpYfSksWH19KX1LLlByZXNldEN1cnZlPWosVigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZl'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4'@;
put 'ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksVigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAy'@;
put 'NzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYg'@;
put 'MTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksVigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2Ug'@;
put 'MjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2Ew'@;
put 'IGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLFYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAw'@;
put 'MDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpJLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1'@;
put 'OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19'@;
put 'KSxWKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZk'@;
put 'NCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0'@;
put 'MDkiLGhhc2g6SS5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIg'@;
put 'Zjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5'@;
put 'ZmQxNjY1MCJdfSksVigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAw'@;
put 'MDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLFYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJm'@;
put 'NzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2'@;
put 'NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e3o9UigxMDM3KX1jYXRjaHt6PXZvaWQgMH1WKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJm'@;
put 'IixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpJLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVj'@;
put 'MTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkw'@;
put 'YWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgi'@;
put 'LCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4Iix6XX0pfSw3OTU0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoMjE1NiksST1SKDk1Myksaz1SKDU0MjcpLEU9Uig5OTMxKSxqPUkuYXNzZXJ0'@;
put 'LFY9UigxMjUxKSxCPVIoNjExKTtmdW5jdGlvbiBZKFgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFkpKXJldHVybiBuZXcgWShYKTsic3RyaW5nIj09dHlwZW9mIFgmJihqKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLFgpLCJVbmtub3duIGN1cnZlICIrWCksWD1rW1hd'@;
put 'KSxYIGluc3RhbmNlb2Ygay5QcmVzZXRDdXJ2ZSYmKFg9e2N1cnZlOlh9KSx0aGlzLmN1cnZlPVguY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1YLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1'@;
put 'dGUoWC5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1YLmhhc2h8fFguY3VydmUuaGFzaH1NLmV4cG9ydHM9WSxZLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKFgpe3JldHVybiBuZXcgVih0aGlzLFgpfSxZLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihYLFUp'@;
put 'e3JldHVybiBWLmZyb21Qcml2YXRlKHRoaXMsWCxVKX0sWS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihYLFUpe3JldHVybiBWLmZyb21QdWJsaWModGhpcyxYLFUpfSxZLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKFgpe1h8fChYPXt9KTtmb3IodmFyIFU9bmV3IEso'@;
put 'e2hhc2g6dGhpcy5oYXNoLHBlcnM6WC5wZXJzLHBlcnNFbmM6WC5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpYLmVudHJvcHl8fEUodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpYLmVudHJvcHkmJlguZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9'@;
put 'KSxxPXRoaXMubi5ieXRlTGVuZ3RoKCksZWU9dGhpcy5uLnN1YihuZXcgeigyKSk7Oyl7dmFyIHRlPW5ldyB6KFUuZ2VuZXJhdGUocSkpO2lmKCEodGUuY21wKGVlKT4wKSlyZXR1cm4gdGUuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZSh0ZSl9fSxZLnByb3RvdHlwZS5fdHJ1bmNhdGVU'@;
put 'b049ZnVuY3Rpb24oWCxVKXt2YXIgcT04KlguYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoWD1YLnVzaHJuKHEpKSwhVSYmWC5jbXAodGhpcy5uKT49MD9YLnN1Yih0aGlzLm4pOlh9LFkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oWCxVLHEsZWUpeyJvYmpl'@;
put 'Y3QiPT10eXBlb2YgcSYmKGVlPXEscT1udWxsKSxlZXx8KGVlPXt9KSxVPXRoaXMua2V5RnJvbVByaXZhdGUoVSxxKSxYPXRoaXMuX3RydW5jYXRlVG9OKG5ldyB6KFgsMTYpKTtmb3IodmFyIHRlPXRoaXMubi5ieXRlTGVuZ3RoKCksb2U9VS5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLHRl'@;
put 'KSxzZT1YLnRvQXJyYXkoImJlIix0ZSksaGU9bmV3IEsoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6b2Usbm9uY2U6c2UscGVyczplZS5wZXJzLHBlcnNFbmM6ZWUucGVyc0VuY3x8InV0ZjgifSksdWU9dGhpcy5uLnN1YihuZXcgeigxKSksY2U9MDs7Y2UrKyl7dmFyIEc9ZWUuaz9lZS5rKGNl'@;
put 'KTpuZXcgeihoZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoRz10aGlzLl90cnVuY2F0ZVRvTihHLCEwKSkuY21wbigxKTw9MHx8Ry5jbXAodWUpPj0wKSl7dmFyIGI9dGhpcy5nLm11bChHKTtpZighYi5pc0luZmluaXR5KCkpe3ZhciBEPWIuZ2V0WCgpLEg9RC51bW9k'@;
put 'KHRoaXMubik7aWYoMCE9PUguY21wbigwKSl7dmFyIE49Ry5pbnZtKHRoaXMubikubXVsKEgubXVsKFUuZ2V0UHJpdmF0ZSgpKS5pYWRkKFgpKTtpZigwIT09KE49Ti51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBnPShiLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1ELmNtcChIKT8yOjAp'@;
put 'O3JldHVybiBlZS5jYW5vbmljYWwmJk4uY21wKHRoaXMubmgpPjAmJihOPXRoaXMubi5zdWIoTiksZ149MSksbmV3IEIoe3I6SCxzOk4scmVjb3ZlcnlQYXJhbTpnfSl9fX19fX0sWS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFgsVSxxLGVlKXtYPXRoaXMuX3RydW5jYXRlVG9OKG5ldyB6'@;
put 'KFgsMTYpKSxxPXRoaXMua2V5RnJvbVB1YmxpYyhxLGVlKTt2YXIgdGU9KFU9bmV3IEIoVSwiaGV4IikpLnIsb2U9VS5zO2lmKHRlLmNtcG4oMSk8MHx8dGUuY21wKHRoaXMubik+PTB8fG9lLmNtcG4oMSk8MHx8b2UuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIHNlLGhlPW9lLmludm0o'@;
put 'dGhpcy5uKSx1ZT1oZS5tdWwoWCkudW1vZCh0aGlzLm4pLGNlPWhlLm11bCh0ZSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShzZT10aGlzLmcuam11bEFkZCh1ZSxxLmdldFB1YmxpYygpLGNlKSkuaXNJbmZpbml0eSgpJiZzZS5lcVhUb1AodGUpOiEo'@;
put 'c2U9dGhpcy5nLm11bEFkZCh1ZSxxLmdldFB1YmxpYygpLGNlKSkuaXNJbmZpbml0eSgpJiYwPT09c2UuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAodGUpfSxZLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKFgsVSxxLGVlKXtqKCgzJnEpPT09cSwiVGhlIHJlY292ZXJ5IHBhcmFt'@;
put 'IGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLFU9bmV3IEIoVSxlZSk7dmFyIHRlPXRoaXMubixvZT1uZXcgeihYKSxzZT1VLnIsaGU9VS5zLHVlPTEmcSxjZT1xPj4xO2lmKHNlLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmY2UpdGhyb3cgbmV3IEVycm9yKCJVbmFi'@;
put 'bGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtzZT10aGlzLmN1cnZlLnBvaW50RnJvbVgoY2U/c2UuYWRkKHRoaXMuY3VydmUubik6c2UsdWUpO3ZhciBHPVUuci5pbnZtKHRlKSxiPXRlLnN1YihvZSkubXVsKEcpLnVtb2QodGUpLEQ9aGUubXVsKEcpLnVtb2QodGUpO3JldHVy'@;
put 'biB0aGlzLmcubXVsQWRkKGIsc2UsRCl9LFkucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oWCxVLHEsZWUpe2lmKG51bGwhPT0oVT1uZXcgQihVLGVlKSkucmVjb3ZlcnlQYXJhbSlyZXR1cm4gVS5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgdGU9MDt0ZTw0O3RlKyspe3Zh'@;
put 'ciBvZTt0cnl7b2U9dGhpcy5yZWNvdmVyUHViS2V5KFgsVSx0ZSl9Y2F0Y2h7Y29udGludWV9aWYob2UuZXEocSkpcmV0dXJuIHRlfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSwxMjUxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IHo9UigzNzg1KSxLPVIoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gSShrLEUpe3RoaXMuZWM9ayx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLEUucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShFLnByaXYsRS5wcml2RW5jKSxFLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKEUucHViLEUucHVi'@;
put 'RW5jKX1NLmV4cG9ydHM9SSxJLmZyb21QdWJsaWM9ZnVuY3Rpb24oayxFLGope3JldHVybiBFIGluc3RhbmNlb2YgST9FOm5ldyBJKGsse3B1YjpFLHB1YkVuYzpqfSl9LEkuZnJvbVByaXZhdGU9ZnVuY3Rpb24oayxFLGope3JldHVybiBFIGluc3RhbmNlb2YgST9FOm5ldyBJKGsse3ByaXY6'@;
put 'RSxwcml2RW5jOmp9KX0sSS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLmdldFB1YmxpYygpO3JldHVybiBrLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06ay52YWxpZGF0ZSgpP2subXVsKHRoaXMuZWMuY3VydmUu'@;
put 'bikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sSS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKGssRSl7'@;
put 'cmV0dXJuInN0cmluZyI9PXR5cGVvZiBrJiYoRT1rLGs9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLEU/dGhpcy5wdWIuZW5jb2RlKEUsayk6dGhpcy5wdWJ9LEkucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oayl7cmV0dXJuImhleCI9'@;
put 'PT1rP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEkucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKGssRSl7dGhpcy5wcml2PW5ldyB6KGssRXx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxJLnByb3RvdHlwZS5faW1w'@;
put 'b3J0UHVibGljPWZ1bmN0aW9uKGssRSl7aWYoay54fHxrLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP0soay54LCJOZWVkIHggY29vcmRpbmF0ZSIpOiJzaG9ydCIhPT10aGlzLmVjLmN1cnZlLnR5cGUmJiJlZHdhcmRzIiE9PXRoaXMuZWMuY3VydmUudHlwZXx8SyhrLngm'@;
put 'JmsueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChrLngsay55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChrLEUpfSxJLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oayl7cmV0dXJuIGsudmFs'@;
put 'aWRhdGUoKXx8SyhrLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksay5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oayxFLGope3JldHVybiB0aGlzLmVjLnNpZ24oayx0aGlzLEUsail9LEkucHJvdG90eXBlLnZlcmlmeT1m'@;
put 'dW5jdGlvbihrLEUpe3JldHVybiB0aGlzLmVjLnZlcmlmeShrLEUsdGhpcyl9LEkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5p'@;
put 'bnNwZWN0KCkpKyIgPiJ9fSw2MTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9Uig5NTMpLEk9Sy5hc3NlcnQ7ZnVuY3Rpb24gayhZLFgpe2lmKFkgaW5zdGFuY2VvZiBrKXJldHVybiBZO3RoaXMuX2ltcG9ydERFUihZLFgpfHwoSShZLnImJlkucywiU2lnbmF0dXJl'@;
put 'IHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyB6KFkuciwxNiksdGhpcy5zPW5ldyB6KFkucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PVkucmVjb3ZlcnlQYXJhbT9udWxsOlkucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gRSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBqKFks'@;
put 'WCl7dmFyIFU9WVtYLnBsYWNlKytdO2lmKCEoMTI4JlUpKXJldHVybiBVO3ZhciBxPTE1JlU7aWYoMD09PXF8fHE+NClyZXR1cm4hMTtmb3IodmFyIGVlPTAsdGU9MCxvZT1YLnBsYWNlO3RlPHE7dGUrKyxvZSsrKWVlPDw9OCxlZXw9WVtvZV0sZWU+Pj49MDtyZXR1cm4hKGVlPD0xMjcpJiYo'@;
put 'WC5wbGFjZT1vZSxlZSl9ZnVuY3Rpb24gVihZKXtmb3IodmFyIFg9MCxVPVkubGVuZ3RoLTE7IVlbWF0mJiEoMTI4JllbWCsxXSkmJlg8VTspWCsrO3JldHVybiAwPT09WD9ZOlkuc2xpY2UoWCl9ZnVuY3Rpb24gQihZLFgpe2lmKFg8MTI4KVkucHVzaChYKTtlbHNle3ZhciBVPTErKE1hdGgu'@;
put 'bG9nKFgpL01hdGguTE4yPj4+Myk7Zm9yKFkucHVzaCgxMjh8VSk7LS1VOylZLnB1c2goWD4+PihVPDwzKSYyNTUpO1kucHVzaChYKX19TS5leHBvcnRzPWssay5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbihZLFgpe1k9Sy50b0FycmF5KFksWCk7dmFyIFU9bmV3IEU7aWYoNDghPT1Z'@;
put 'W1UucGxhY2UrK10pcmV0dXJuITE7dmFyIHE9aihZLFUpO2lmKCExPT09cXx8cStVLnBsYWNlIT09WS5sZW5ndGh8fDIhPT1ZW1UucGxhY2UrK10pcmV0dXJuITE7dmFyIGVlPWooWSxVKTtpZighMT09PWVlKXJldHVybiExO3ZhciB0ZT1ZLnNsaWNlKFUucGxhY2UsZWUrVS5wbGFjZSk7aWYo'@;
put 'VS5wbGFjZSs9ZWUsMiE9PVlbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgb2U9aihZLFUpO2lmKCExPT09b2V8fFkubGVuZ3RoIT09b2UrVS5wbGFjZSlyZXR1cm4hMTt2YXIgc2U9WS5zbGljZShVLnBsYWNlLG9lK1UucGxhY2UpO2lmKDA9PT10ZVswXSl7aWYoISgxMjgmdGVbMV0pKXJldHVy'@;
put 'biExO3RlPXRlLnNsaWNlKDEpfWlmKDA9PT1zZVswXSl7aWYoISgxMjgmc2VbMV0pKXJldHVybiExO3NlPXNlLnNsaWNlKDEpfXJldHVybiB0aGlzLnI9bmV3IHoodGUpLHRoaXMucz1uZXcgeihzZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LGsucHJvdG90eXBlLnRvREVSPWZ1bmN0'@;
put 'aW9uKFkpe3ZhciBYPXRoaXMuci50b0FycmF5KCksVT10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmWFswXSYmKFg9WzBdLmNvbmNhdChYKSksMTI4JlVbMF0mJihVPVswXS5jb25jYXQoVSkpLFg9VihYKSxVPVYoVSk7IShVWzBdfHwxMjgmVVsxXSk7KVU9VS5zbGljZSgxKTt2YXIgcT1bMl07'@;
put 'QihxLFgubGVuZ3RoKSwocT1xLmNvbmNhdChYKSkucHVzaCgyKSxCKHEsVS5sZW5ndGgpO3ZhciBlZT1xLmNvbmNhdChVKSx0ZT1bNDhdO3JldHVybiBCKHRlLGVlLmxlbmd0aCksdGU9dGUuY29uY2F0KGVlKSxLLmVuY29kZSh0ZSxZKX19LDU5ODA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1SKDM3MTUpLEs9Uig1NDI3KSxJPVIoOTUzKSxrPUkuYXNzZXJ0LEU9SS5wYXJzZUJ5dGVzLGo9Uig5MDg3KSxWPVIoMzYyMik7ZnVuY3Rpb24gQihZKXtpZihrKCJlZDI1NTE5Ij09PVksIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBC'@;
put 'KSlyZXR1cm4gbmV3IEIoWSk7dGhpcy5jdXJ2ZT1ZPUtbWV0uY3VydmUsdGhpcy5nPVkuZyx0aGlzLmcucHJlY29tcHV0ZShZLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPVkucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbChZLm4uYml0'@;
put 'TGVuZ3RoKCkvOCksdGhpcy5oYXNoPXouc2hhNTEyfU0uZXhwb3J0cz1CLEIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oWSxYKXtZPUUoWSk7dmFyIFU9dGhpcy5rZXlGcm9tU2VjcmV0KFgpLHE9dGhpcy5oYXNoSW50KFUubWVzc2FnZVByZWZpeCgpLFkpLGVlPXRoaXMuZy5tdWwocSksdGU9'@;
put 'dGhpcy5lbmNvZGVQb2ludChlZSksb2U9dGhpcy5oYXNoSW50KHRlLFUucHViQnl0ZXMoKSxZKS5tdWwoVS5wcml2KCkpLHNlPXEuYWRkKG9lKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjplZSxTOnNlLFJlbmNvZGVkOnRlfSl9LEIucHJvdG90eXBl'@;
put 'LnZlcmlmeT1mdW5jdGlvbihZLFgsVSl7WT1FKFkpLFg9dGhpcy5tYWtlU2lnbmF0dXJlKFgpO3ZhciBxPXRoaXMua2V5RnJvbVB1YmxpYyhVKSxlZT10aGlzLmhhc2hJbnQoWC5SZW5jb2RlZCgpLHEucHViQnl0ZXMoKSxZKSx0ZT10aGlzLmcubXVsKFguUygpKTtyZXR1cm4gWC5SKCkuYWRk'@;
put 'KHEucHViKCkubXVsKGVlKSkuZXEodGUpfSxCLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBZPXRoaXMuaGFzaCgpLFg9MDtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKVkudXBkYXRlKGFyZ3VtZW50c1tYXSk7cmV0dXJuIEkuaW50RnJvbUxFKFkuZGlnZXN0KCkpLnVtb2Qo'@;
put 'dGhpcy5jdXJ2ZS5uKX0sQi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihZKXtyZXR1cm4gai5mcm9tUHVibGljKHRoaXMsWSl9LEIucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oWSl7cmV0dXJuIGouZnJvbVNlY3JldCh0aGlzLFkpfSxCLnByb3RvdHlwZS5tYWtl'@;
put 'U2lnbmF0dXJlPWZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgVj9ZOm5ldyBWKHRoaXMsWSl9LEIucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKFkpe3ZhciBYPVkuZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gWFt0aGlzLmVuY29k'@;
put 'aW5nTGVuZ3RoLTFdfD1ZLmdldFgoKS5pc09kZCgpPzEyODowLFh9LEIucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFkpe3ZhciBYPShZPUkucGFyc2VCeXRlcyhZKSkubGVuZ3RoLTEsVT1ZLnNsaWNlKDAsWCkuY29uY2F0KC0xMjkmWVtYXSkscT0wIT0oMTI4JllbWF0pLGVlPUku'@;
put 'aW50RnJvbUxFKFUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoZWUscSl9LEIucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihZKXtyZXR1cm4gWS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LEIucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihZKXtyZXR1'@;
put 'cm4gSS5pbnRGcm9tTEUoWSl9LEIucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NTMpLEs9ei5hc3NlcnQsST16LnBhcnNlQnl0ZXMsaz16LmNhY2hl'@;
put 'ZFByb3BlcnR5O2Z1bmN0aW9uIEUoaixWKXt0aGlzLmVkZHNhPWosdGhpcy5fc2VjcmV0PUkoVi5zZWNyZXQpLGouaXNQb2ludChWLnB1Yik/dGhpcy5fcHViPVYucHViOnRoaXMuX3B1YkJ5dGVzPUkoVi5wdWIpfUUuZnJvbVB1YmxpYz1mdW5jdGlvbihqLFYpe3JldHVybiBWIGluc3RhbmNl'@;
put 'b2YgRT9WOm5ldyBFKGose3B1YjpWfSl9LEUuZnJvbVNlY3JldD1mdW5jdGlvbihqLFYpe3JldHVybiBWIGluc3RhbmNlb2YgRT9WOm5ldyBFKGose3NlY3JldDpWfSl9LEUucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LGsoRSwicHViQnl0ZXMiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxrKEUsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9'@;
put 'KSxrKEUsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgaj10aGlzLmVkZHNhLFY9dGhpcy5oYXNoKCksQj1qLmVuY29kaW5nTGVuZ3RoLTEsWT1WLnNsaWNlKDAsai5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIFlbMF0mPTI0OCxZW0JdJj0xMjcsWVtCXXw9NjQsWX0pLGsoRSwicHJpdiIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxrKEUsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLGsoRSwibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxFLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGope3JldHVybiBLKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oaix0aGlzKX0sRS5wcm90'@;
put 'b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGosVil7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KGosVix0aGlzKX0sRS5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKGope3JldHVybiBLKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLHouZW5jb2RlKHRoaXMuc2VjcmV0'@;
put 'KCksail9LEUucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihqKXtyZXR1cm4gei5lbmNvZGUodGhpcy5wdWJCeXRlcygpLGopfSxNLmV4cG9ydHM9RX0sMzYyMjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MyksST1LLmFzc2VydCxrPUsuY2FjaGVkUHJv'@;
put 'cGVydHksRT1LLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gaihWLEIpe3RoaXMuZWRkc2E9Viwib2JqZWN0IiE9dHlwZW9mIEImJihCPUUoQikpLEFycmF5LmlzQXJyYXkoQikmJihCPXtSOkIuc2xpY2UoMCxWLmVuY29kaW5nTGVuZ3RoKSxTOkIuc2xpY2UoVi5lbmNvZGluZ0xlbmd0aCl9KSxJKEIu'@;
put 'UiYmQi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxWLmlzUG9pbnQoQi5SKSYmKHRoaXMuX1I9Qi5SKSxCLlMgaW5zdGFuY2VvZiB6JiYodGhpcy5fUz1CLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoQi5SKT9CLlI6Qi5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJh'@;
put 'eS5pc0FycmF5KEIuUyk/Qi5TOkIuU2VuY29kZWR9ayhqLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksayhqLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxr'@;
put 'KGosIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLGsoaiwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLGoucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxqLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBLLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sTS5leHBvcnRzPWp9LDEwMzc6TT0+e00uZXhwb3J0cz17ZG91'@;
put 'Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2'@;
put 'MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBi'@;
put 'OTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQw'@;
put 'IiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2Fi'@;
put 'MGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlk'@;
put 'OWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3'@;
put 'Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNi'@;
put 'Mzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2'@;
put 'Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3'@;
put 'YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgi'@;
put 'XSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4'@;
put 'OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4'@;
put 'NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjVi'@;
put 'ZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThm'@;
put 'NDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3'@;
put 'ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNl'@;
put 'YzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUi'@;
put 'LCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1'@;
put 'YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4'@;
put 'MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBl'@;
put 'MTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZj'@;
put 'YmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEz'@;
put 'OGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNj'@;
put 'NTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgi'@;
put 'XSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUx'@;
put 'MjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0'@;
put 'YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMx'@;
put 'NjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZj'@;
put 'NTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTll'@;
put 'MGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZm'@;
put 'MWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQi'@;
put 'LCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4'@;
put 'NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0'@;
put 'ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQy'@;
put 'MTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2Ey'@;
put 'MDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNk'@;
put 'M2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFl'@;
put 'OTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxb'@;
put 'IjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2'@;
put 'ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRk'@;
put 'YTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYz'@;
put 'YTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQx'@;
put 'ZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQw'@;
put 'Y2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzEx'@;
put 'ZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIs'@;
put 'ImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0Yjlj'@;
put 'ZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRk'@;
put 'Y2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODVi'@;
put 'M2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNl'@;
put 'MzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2'@;
put 'ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0'@;
put 'ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxb'@;
put 'ImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBl'@;
put 'OGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMx'@;
put 'Yzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQi'@;
put 'LCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYx'@;
put 'YTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJh'@;
put 'YzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhi'@;
put 'YzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3'@;
put 'OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2'@;
put 'OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFm'@;
put 'NjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJd'@;
put 'LFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZl'@;
put 'ZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0'@;
put 'M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2'@;
put 'YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2'@;
put 'ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIw'@;
put 'MTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAx'@;
put 'YzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIs'@;
put 'IjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5'@;
put 'MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIx'@;
put 'NDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDcz'@;
put 'ZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJh'@;
put 'ZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhj'@;
put 'Mjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNj'@;
put 'MjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxb'@;
put 'IjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIy'@;
put 'MjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2Jm'@;
put 'NTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBh'@;
put 'YTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0'@;
put 'YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNj'@;
put 'NTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJh'@;
put 'MWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJm'@;
put 'OThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4'@;
put 'Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEz'@;
put 'MDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0'@;
put 'MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQy'@;
put 'YTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0'@;
put 'ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3'@;
put 'YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxb'@;
put 'IjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2'@;
put 'MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFi'@;
put 'ODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJl'@;
put 'OTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJl'@;
put 'NDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRk'@;
put 'MzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNh'@;
put 'YmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJm'@;
put 'YTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUx'@;
put 'ZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2Mw'@;
put 'OTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3'@;
put 'YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0'@;
put 'ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjll'@;
put 'YjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMw'@;
put 'ZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsi'@;
put 'YzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2Jj'@;
put 'NWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBl'@;
put 'MjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3'@;
put 'YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2Rj'@;
put 'ZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5'@;
put 'YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4'@;
put 'Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0'@;
put 'ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZi'@;
put 'NzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNj'@;
put 'Il0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNm'@;
put 'YWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5'@;
put 'NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDEx'@;
put 'NjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2Ey'@;
put 'YmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJh'@;
put 'MWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJj'@;
put 'Mzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3'@;
put 'IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZl'@;
put 'MWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYx'@;
put 'N2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4'@;
put 'M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcx'@;
put 'NDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRl'@;
put 'ZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRi'@;
put 'MTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJd'@;
put 'LFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2'@;
put 'NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVk'@;
put 'YTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJm'@;
put 'OTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgw'@;
put 'YmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2'@;
put 'MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1'@;
put 'NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRh'@;
put 'IiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFj'@;
put 'MWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5'@;
put 'OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYw'@;
put 'NWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0'@;
put 'OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdk'@;
put 'NGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUx'@;
put 'YjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJd'@;
put 'LFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2'@;
put 'YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4'@;
put 'MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIy'@;
put 'ZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1'@;
put 'OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3'@;
put 'MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNk'@;
put 'Y2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEi'@;
put 'LCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRm'@;
put 'OGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5'@;
put 'MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4'@;
put 'ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3'@;
put 'NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdl'@;
put 'ZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2Mjkw'@;
put 'ZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJd'@;
put 'LFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEz'@;
put 'YWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlm'@;
put 'NjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4'@;
put 'OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9TyxLPVIoMzc4NSksST1SKDk3NDYpLGs9Uig0NTA0KTt6LmFzc2VydD1JLHoudG9BcnJheT1rLnRvQXJyYXksei56ZXJvMj1rLnplcm8y'@;
put 'LHoudG9IZXg9ay50b0hleCx6LmVuY29kZT1rLmVuY29kZSx6LmdldE5BRj1mdW5jdGlvbihFLGosVil7dmFyIEI9bmV3IEFycmF5KE1hdGgubWF4KEUuYml0TGVuZ3RoKCksVikrMSk7Qi5maWxsKDApO2Zvcih2YXIgWT0xPDxqKzEsWD1FLmNsb25lKCksVT0wO1U8Qi5sZW5ndGg7VSsrKXt2'@;
put 'YXIgcSxlZT1YLmFuZGxuKFktMSk7WC5pc09kZCgpP1guaXN1Ym4ocT1lZT4oWT4+MSktMT8oWT4+MSktZWU6ZWUpOnE9MCxCW1VdPXEsWC5pdXNocm4oMSl9cmV0dXJuIEJ9LHouZ2V0SlNGPWZ1bmN0aW9uKEUsail7dmFyIFY9W1tdLFtdXTtFPUUuY2xvbmUoKSxqPWouY2xvbmUoKTtmb3Io'@;
put 'dmFyIEIsWT0wLFg9MDtFLmNtcG4oLVkpPjB8fGouY21wbigtWCk+MDspe3ZhciBVLHEsZWU9RS5hbmRsbigzKStZJjMsdGU9ai5hbmRsbigzKStYJjM7Mz09PWVlJiYoZWU9LTEpLDM9PT10ZSYmKHRlPS0xKSxVPTEmZWU/MyE9KEI9RS5hbmRsbig3KStZJjcpJiY1IT09Qnx8MiE9PXRlP2Vl'@;
put 'Oi1lZTowLFZbMF0ucHVzaChVKSxxPTEmdGU/MyE9KEI9ai5hbmRsbig3KStYJjcpJiY1IT09Qnx8MiE9PWVlP3RlOi10ZTowLFZbMV0ucHVzaChxKSwyKlk9PT1VKzEmJihZPTEtWSksMipYPT09cSsxJiYoWD0xLVgpLEUuaXVzaHJuKDEpLGouaXVzaHJuKDEpfXJldHVybiBWfSx6LmNhY2hl'@;
put 'ZFByb3BlcnR5PWZ1bmN0aW9uKEUsaixWKXt2YXIgQj0iXyIrajtFLnByb3RvdHlwZVtqXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW0JdP3RoaXNbQl06dGhpc1tCXT1WLmNhbGwodGhpcyl9fSx6LnBhcnNlQnl0ZXM9ZnVuY3Rpb24oRSl7cmV0dXJuInN0cmluZyI9PXR5cGVv'@;
put 'ZiBFP3oudG9BcnJheShFLCJoZXgiKTpFfSx6LmludEZyb21MRT1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IEsoRSwiaGV4IiwibGUiKX19LDM3ODU6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9y'@;
put 'KEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JO'@;
put 'KGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5'@;
put 'cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0'@;
put 'KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihn'@;
put 'Lmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcuY2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10'@;
put 'eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5'@;
put 'cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0y'@;
put 'JiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlz'@;
put 'Ll9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYy'@;
put 'NzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhp'@;
put 'cy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxl'@;
put 'bmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhp'@;
put 'cy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndv'@;
put 'cmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMs'@;
put 'Uyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2'@;
put 'Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndv'@;
put 'cmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02'@;
put 'NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3IodmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29y'@;
put 'ZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRl'@;
put 'KX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRo'@;
put 'aXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2ln'@;
put 'bj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsi'@;
put 'PiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs'@;
put 'NV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgx'@;
put 'LDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5u'@;
put 'ZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0x'@;
put 'O2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExlPTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUp'@;
put 'LzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRzW2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1n'@;
put 'fHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9Y'@;
put 'WzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0yNiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0z'@;
put 'Nil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUr'@;
put 'U31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7'@;
put 'dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSgh'@;
put 'MSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3Jl'@;
put 'dHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxpa2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMu'@;
put 'Ynl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJKHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9'@;
put 'dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5h'@;
put 'bmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09d31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxD'@;
put 'Pj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+'@;
put 'Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEoMTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVu'@;
put 'Z3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10p'@;
put 'O2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMu'@;
put 'YWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigp'@;
put 'e3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90'@;
put 'eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUu'@;
put 'cHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCku'@;
put 'aW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVu'@;
put 'Z3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlz'@;
put 'Lm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZh'@;
put 'ciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5'@;
put 'cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhv'@;
put 'cih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+'@;
put 'PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUyNjt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4'@;
put 'ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3Jl'@;
put 'dHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdh'@;
put 'dGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5f'@;
put 'bm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9'@;
put 'PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3'@;
put 'PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZl'@;
put 'Xj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlw'@;
put 'ZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlz'@;
put 'Lm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtK'@;
put 'PHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pLSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9'@;
put 'PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5'@;
put 'cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLGplPTgx'@;
put 'OTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5MSZLZSxRZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1l'@;
put 'LHplPU1lPj4+MTMsb3Q9MHxKWzddLHV0PTgxOTEmb3QsTXQ9b3Q+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkxJkhuLGZu'@;
put 'PUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkxJkluLHlu'@;
put 'PUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMsUm49MHxuZVs4XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSso'@;
put 'dj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUsZW4pLHA9'@;
put 'KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5pbXVsKFdlLGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0o'@;
put 'KHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoUWUsZW4pfDAsdz1NYXRoLmltdWwoUWUsJG4pLHY9ditNYXRoLmltdWwoamUsZnQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8'@;
put 'MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVs'@;
put 'KFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4pfDApK01hdGguaW11bChRZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFFlLGZuKXwwLHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2Us'@;
put 'WHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChMZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1uKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9'@;
put 'NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUsd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFlLHd0KXwwLHc9dytNYXRoLmltdWwoUWUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmlt'@;
put 'dWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSxtbil8MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUXQpfDAp'@;
put 'KyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8'@;
put 'MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmltdWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChRZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFFlLG1uKXwwLHY9ditNYXRoLmltdWwoamUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsUXQpfDA7dmFyIG5vPShm'@;
put 'ZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRo'@;
put 'LmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXww'@;
put 'LHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01hdGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13'@;
put 'K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0aC5pbXVsKFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11bChRZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFF0KXwwLHY9ditNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8MCkrTWF0'@;
put 'aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2UsWXQpfDA7dmFyIEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHlu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUs'@;
put 'Zm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmltdWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFF0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKFFlLHB0KXwwLHc9dytNYXRoLmltdWwoUWUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGgu'@;
put 'aW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2'@;
put 'KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxlbikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXww'@;
put 'LHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGguaW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsbW4pfDAp'@;
put 'K01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVsKGh0LG1uKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsUXQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFFlLHluKXwwLHY9ditNYXRoLmlt'@;
put 'dWwoamUsc24pfDAscD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwo'@;
put 'RmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFBuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2'@;
put 'PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytN'@;
put 'YXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChEZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDApK01hdGgu'@;
put 'aW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFF0KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsdz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCx3PXcrTWF0aC5pbXVsKFFlLEJuKXwwLHY9ditNYXRoLmltdWwoamUs'@;
put 'JHQpfDAscD0ocD1wK01hdGguaW11bChqZSxQbil8MCkrTWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsUG4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4p'@;
put 'fDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0'@;
put 'aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoTXQsbW4pfDAsdj12K01hdGguaW11bChEZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bCho'@;
put 'dCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBl'@;
put 'LEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01hdGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChRZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFBuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmlt'@;
put 'dWwoamUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxw'@;
put 'PShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChibix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUXQpfDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LFF0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUs'@;
put 'WXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRoLmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsUG4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihw'@;
put 'PShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmltdWwoUWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1uKSkrTWF0'@;
put 'aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLG1uKSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUXQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFF0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNu'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxQbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsUG4pfDA7'@;
put 'dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4'@;
put 'NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5pbXVsKFV0LFF0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLFF0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAscD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUs'@;
put 'c24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYrTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFBuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkp'@;
put 'K01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChibixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsUG4pfDA7dmFyIHlyPShmZSsodj12'@;
put 'K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwo'@;
put 'VXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditN'@;
put 'YXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxQbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsUG4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRo'@;
put 'LmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJu'@;
put 'LEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFBuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxq'@;
put 'bil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxQbikpK01hdGguaW11bChibiwkdCl8MCx3PU1h'@;
put 'dGguaW11bChibixQbik7dmFyIGhzPShmZSsodj12K01hdGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4y'@;
put 'Nil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1NYXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYp'@;
put 'fDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdpLGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBp'@;
put 'LGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAhPT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSks'@;
put 'RS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcu'@;
put 'bmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxlbmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1h'@;
put 'eCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2'@;
put 'LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFy'@;
put 'cmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxD'@;
put 'O3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMs'@;
put 'dixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7'@;
put 'T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0sV2U9dlt4ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLFFlPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1RZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pdPVdlLVll'@;
put 'LE9lIT09bmUmJihRZT1kZSpMZS1mZSpGZSxGZT1kZSpGZStmZSpMZSxMZT1RZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNl'@;
put 'LnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXpl'@;
put 'MTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0wO3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90'@;
put 'eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxz'@;
put 'ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlz'@;
put 'Lm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcgQXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndv'@;
put 'cmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVbT2VdLWRl'@;
put 'W09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0rZGVbT2VdKnhlW09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYp'@;
put 'LFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCks'@;
put 'dGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYp'@;
put 'Kyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVu'@;
put 'Y3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJpdExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3Io'@;
put 'dmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNbdl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVu'@;
put 'Y3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0Nd'@;
put 'PSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4yNi1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29y'@;
put 'ZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVt'@;
put 'YmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUr'@;
put 'KyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUubGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAs'@;
put 'dGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhpcy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNb'@;
put 'bmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5w'@;
put 'cm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMu'@;
put 'bGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8QykpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0'@;
put 'aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0s'@;
put 'RS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVn'@;
put 'YXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4o'@;
put 'Zyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09'@;
put 'MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcp'@;
put 'O2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhp'@;
put 'cy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5l'@;
put 'PSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4'@;
put 'NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgp'@;
put 'fSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFd'@;
put 'KTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hs'@;
put 'bnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYmKHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0'@;
put 'aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5z'@;
put 'dHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1TJiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDAp'@;
put 'fTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10'@;
put 'aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9'@;
put 'PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZu'@;
put 'KGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAs'@;
put 'd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcu'@;
put 'dXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFy'@;
put 'IEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2'@;
put 'YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpDO3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9u'@;
put 'KGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkm'@;
put 'JlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJu'@;
put 'KHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2RkKCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUp'@;
put 'O0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkmJih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57'@;
put 'YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5l'@;
put 'dyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChK'@;
put 'KSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTshKFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3Vi'@;
put 'KHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJuKHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMu'@;
put 'YWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9uZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zv'@;
put 'cig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jk'@;
put 'c1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRo'@;
put 'aXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5u'@;
put 'ZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdh'@;
put 'dGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRo'@;
put 'aXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlz'@;
put 'LndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1wKXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRo'@;
put 'aXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihn'@;
put 'KX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3Rv'@;
put 'dHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhp'@;
put 'c30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwi'@;
put 'cmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhp'@;
put 'cyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQs'@;
put 'InJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhp'@;
put 'cyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVk'@;
put 'U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVn'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcu'@;
put 'cmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShD'@;
put 'LDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMs'@;
put 'InAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZl'@;
put 'ZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlv'@;
put 'biBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIo'@;
put 'KSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBl'@;
put 'Ll90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhp'@;
put 'cy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9T'@;
put 'LnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0'@;
put 'aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtm'@;
put 'b3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90'@;
put 'b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQq'@;
put 'disoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9'@;
put 'MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5KigwfGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBo'@;
put 'ZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2dd'@;
put 'PUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcs'@;
put 'Qyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'cHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgu'@;
put 'cHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnky'@;
put 'KGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxT'@;
put 'Ll9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5f'@;
put 'dmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mihn'@;
put 'LEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtp'@;
put 'ZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNa'@;
put 'ZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNocm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUp'@;
put 'LnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSkuY21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9'@;
put 'TGUsamU9MDswIT09T2UuY21wKHcpO2plKyspT2U9T2UucmVkU3FyKCk7SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4ZX0sSC5w'@;
put 'cm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygp'@;
put 'KXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxn'@;
put 'KTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihw'@;
put 'KSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVy'@;
put 'biBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxD'@;
put 'KXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0'@;
put 'aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJl'@;
put 'dHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlz'@;
put 'Lm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhp'@;
put 'cyl9fShNPVIubm1kKE0pLHRoaXMpfSw4MDkxOk09PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gTyhSLHope2lmKG51bGw9PVIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Iik7Zm9yKHZhciBLPU9iamVjdChSKSxJPTE7STxhcmd1'@;
put 'bWVudHMubGVuZ3RoO0krKyl7dmFyIGs9YXJndW1lbnRzW0ldO2lmKG51bGwhPWspZm9yKHZhciBFPU9iamVjdC5rZXlzKE9iamVjdChrKSksaj0wLFY9RS5sZW5ndGg7ajxWO2orKyl7dmFyIEI9RVtqXSxZPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxCKTt2b2lkIDAhPT1Z'@;
put 'JiZZLmVudW1lcmFibGUmJihLW0JdPWtbQl0pfX1yZXR1cm4gS31NLmV4cG9ydHM9e2Fzc2lnbjpPLHBvbHlmaWxsOmZ1bmN0aW9uKCl7T2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCwiYXNzaWduIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3Jp'@;
put 'dGFibGU6ITAsdmFsdWU6T30pfX19LDcxODc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNTEwOCksST0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGs9SSYmImZ1bmN0aW9uIj09dHlwZW9mIEkuYXBwbHk/SS5hcHBseTpmdW5jdGlvbihoZSx1ZSxjZSl7'@;
put 'cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGhlLHVlLGNlKX07ej1JJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5vd25LZXlzP0kub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGhlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFt'@;
put 'ZXMoaGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGhlKSl9OmZ1bmN0aW9uKGhlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGUpfTt2YXIgRT1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUhPWhlfTtmdW5jdGlvbiBqKCl7ai5p'@;
put 'bml0LmNhbGwodGhpcyl9TS5leHBvcnRzPWosTS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiBiKEgpe2hlLnJlbW92ZUxpc3RlbmVyKHVlLEQpLEcoSCl9ZnVuY3Rpb24gRCgpeyJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBoZS5yZW1vdmVMaXN0ZW5lciYmaGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixiKSxjZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXZhciBIO3NlKGhlLHVlLEQse29uY2U6ITB9KSwiZXJyb3IiIT09dWUmJiJmdW5jdGlvbiI9PXR5cGVvZihIPWhlKS5vbiYmc2UoSCwiZXJyb3IiLGIs'@;
put 'e29uY2U6ITB9KX0pfSxqLkV2ZW50RW1pdHRlcj1qLGoucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLGoucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLGoucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBWPTEwO2Z1bmN0aW9uIEIoaGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBo'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaGUpfWZ1bmN0aW9uIFkoaGUpe3JldHVybiB2b2lkIDA9PT1oZS5fbWF4TGlzdGVuZXJzP2ouZGVmYXVsdE1heExpc3Rl'@;
put 'bmVyczpoZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIFgoaGUsdWUsY2UsRyl7dmFyIGIsRCxIO2lmKEIoY2UpLHZvaWQgMD09PShEPWhlLl9ldmVudHMpPyhEPWhlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxoZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PUQubmV3TGlzdGVuZXIm'@;
put 'JihoZS5lbWl0KCJuZXdMaXN0ZW5lciIsdWUsY2UubGlzdGVuZXI/Y2UubGlzdGVuZXI6Y2UpLEQ9aGUuX2V2ZW50cyksSD1EW3VlXSksdm9pZCAwPT09SClIPURbdWVdPWNlLCsraGUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIEg/SD1EW3VlXT1HP1tjZSxIXTpb'@;
put 'SCxjZV06Rz9ILnVuc2hpZnQoY2UpOkgucHVzaChjZSksKGI9WShoZSkpPjAmJkgubGVuZ3RoPmImJiFILndhcm5lZCl7SC53YXJuZWQ9ITA7dmFyIGc9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrSC5sZW5ndGgrIiAiK1N0cmluZyh1'@;
put 'ZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Zy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGcuZW1pdHRlcj1oZSxnLnR5cGU9dWUsZy5jb3VudD1ILmxlbmd0aCxLJiZLLndhcm4mJksud2Fy'@;
put 'bihnKX1yZXR1cm4gaGV9ZnVuY3Rpb24gVSgpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0'@;
put 'KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcShoZSx1ZSxjZSl7dmFyIEc9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OmhlLHR5cGU6dWUsbGlzdGVuZXI6Y2V9LGI9VS5iaW5kKEcpO3JldHVybiBiLmxpc3RlbmVyPWNlLEcud3Jh'@;
put 'cEZuPWIsYn1mdW5jdGlvbiBlZShoZSx1ZSxjZSl7dmFyIEc9aGUuX2V2ZW50cztpZih2b2lkIDA9PT1HKXJldHVybltdO3ZhciBiPUdbdWVdO3JldHVybiB2b2lkIDA9PT1iP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBiP2NlP1tiLmxpc3RlbmVyfHxiXTpbYl06Y2U/ZnVuY3Rpb24oRCl7Zm9y'@;
put 'KHZhciBIPW5ldyBBcnJheShELmxlbmd0aCksTj0wO048SC5sZW5ndGg7KytOKUhbTl09RFtOXS5saXN0ZW5lcnx8RFtOXTtyZXR1cm4gSH0oYik6b2UoYixiLmxlbmd0aCl9ZnVuY3Rpb24gdGUoaGUpe3ZhciB1ZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09dWUpe3ZhciBjZT11ZVtoZV07'@;
put 'aWYoImZ1bmN0aW9uIj09dHlwZW9mIGNlKXJldHVybiAxO2lmKHZvaWQgMCE9PWNlKXJldHVybiBjZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gb2UoaGUsdWUpe2Zvcih2YXIgY2U9bmV3IEFycmF5KHVlKSxHPTA7Rzx1ZTsrK0cpY2VbR109aGVbR107cmV0dXJuIGNlfWZ1bmN0aW9uIHNl'@;
put 'KGhlLHVlLGNlLEcpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoZS5vbilHLm9uY2U/aGUub25jZSh1ZSxjZSk6aGUub24odWUsY2UpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhlLmFkZEV2ZW50TGlzdGVuZXIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJlbWl0dGVyIiBhcmd1bWVu'@;
put 'dCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGhlKTtoZS5hZGRFdmVudExpc3RlbmVyKHVlLGZ1bmN0aW9uIGIoRCl7Ry5vbmNlJiZoZS5yZW1vdmVFdmVudExpc3RlbmVyKHVlLGIpLGNlKEQpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShq'@;
put 'LCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVn0sc2V0OmZ1bmN0aW9uKGhlKXtpZigibnVtYmVyIiE9dHlwZW9mIGhlfHxoZTwwfHxFKGhlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlz'@;
put 'dGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2hlKyIuIik7Vj1oZX19KSxqLmluaXQ9ZnVuY3Rpb24oKXt2b2lkIDAhPT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50cyE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0'@;
put 'aGlzKS5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxqLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oaGUpe2lmKCJudW1i'@;
put 'ZXIiIT10eXBlb2YgaGV8fGhlPDB8fEUoaGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraGUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWhl'@;
put 'LHRoaXN9LGoucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBZKHRoaXMpfSxqLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGhlKXtmb3IodmFyIHVlPVtdLGNlPTE7Y2U8YXJndW1lbnRzLmxlbmd0aDtjZSsrKXVlLnB1c2goYXJndW1lbnRzW2NlXSk7dmFyIEc9'@;
put 'ImVycm9yIj09PWhlLGI9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWIpRz1HJiZ2b2lkIDA9PT1iLmVycm9yO2Vsc2UgaWYoIUcpcmV0dXJuITE7aWYoRyl7dmFyIEQ7aWYodWUubGVuZ3RoPjAmJihEPXVlWzBdKSxEIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgRDt2YXIgSD1uZXcgRXJyb3Io'@;
put 'IlVuaGFuZGxlZCBlcnJvci4iKyhEPyIgKCIrRC5tZXNzYWdlKyIpIjoiIikpO3Rocm93IEguY29udGV4dD1ELEh9dmFyIE49YltoZV07aWYodm9pZCAwPT09TilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTilrKE4sdGhpcyx1ZSk7ZWxzZXt2YXIgZz1OLmxlbmd0aCxDPW9lKE4s'@;
put 'Zyk7Zm9yKGNlPTA7Y2U8ZzsrK2NlKWsoQ1tjZV0sdGhpcyx1ZSl9cmV0dXJuITB9LGoucHJvdG90eXBlLm9uPWoucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gWCh0aGlzLGhlLHVlLCExKX0sai5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9u'@;
put 'KGhlLHVlKXtyZXR1cm4gWCh0aGlzLGhlLHVlLCEwKX0sai5wcm90b3R5cGUub25jZT1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIEIodWUpLHRoaXMub24oaGUscSh0aGlzLGhlLHVlKSksdGhpc30sai5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7cmV0dXJu'@;
put 'IEIodWUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGhlLHEodGhpcyxoZSx1ZSkpLHRoaXN9LGoucHJvdG90eXBlLm9mZj1qLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihoZSx1ZSl7dmFyIGNlLEcsYixELEg7aWYoQih1ZSksdm9pZCAwPT09KEc9dGhpcy5fZXZlbnRzKSlyZXR1'@;
put 'cm4gdGhpcztpZih2b2lkIDA9PT0oY2U9R1toZV0pKXJldHVybiB0aGlzO2lmKGNlPT09dWV8fGNlLmxpc3RlbmVyPT09dWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIEdbaGVdLEcucmVtb3ZlTGlzdGVuZXImJnRoaXMu'@;
put 'ZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGhlLGNlLmxpc3RlbmVyfHx1ZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGNlKXtmb3IoYj0tMSxEPWNlLmxlbmd0aC0xO0Q+PTA7RC0tKWlmKGNlW0RdPT09dWV8fGNlW0RdLmxpc3RlbmVyPT09dWUpe0g9Y2VbRF0ubGlzdGVuZXIsYj1EO2Jy'@;
put 'ZWFrfWlmKGI8MClyZXR1cm4gdGhpczswPT09Yj9jZS5zaGlmdCgpOmZ1bmN0aW9uKE4sZyl7Zm9yKDtnKzE8Ti5sZW5ndGg7ZysrKU5bZ109TltnKzFdO04ucG9wKCl9KGNlLGIpLDE9PT1jZS5sZW5ndGgmJihHW2hlXT1jZVswXSksdm9pZCAwIT09Ry5yZW1vdmVMaXN0ZW5lciYmdGhpcy5l'@;
put 'bWl0KCJyZW1vdmVMaXN0ZW5lciIsaGUsSHx8dWUpfXJldHVybiB0aGlzfSxqLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oaGUpe3ZhciB1ZSxjZSxHO2lmKHZvaWQgMD09PShjZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PWNlLnJlbW92ZUxp'@;
put 'c3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09Y2VbaGVdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpk'@;
put 'ZWxldGUgY2VbaGVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgYixEPU9iamVjdC5rZXlzKGNlKTtmb3IoRz0wO0c8RC5sZW5ndGg7KytHKSJyZW1vdmVMaXN0ZW5lciIhPT0oYj1EW0ddKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoYik7cmV0dXJuIHRoaXMucmVtb3Zl'@;
put 'QWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YodWU9Y2VbaGVdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGhlLHVlKTtlbHNlIGlmKHZvaWQgMCE9'@;
put 'PXVlKWZvcihHPXVlLmxlbmd0aC0xO0c+PTA7Ry0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoaGUsdWVbR10pO3JldHVybiB0aGlzfSxqLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oaGUpe3JldHVybiBlZSh0aGlzLGhlLCEwKX0sai5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9u'@;
put 'KGhlKXtyZXR1cm4gZWUodGhpcyxoZSwhMSl9LGoubGlzdGVuZXJDb3VudD1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGhlLmxpc3RlbmVyQ291bnQ/aGUubGlzdGVuZXJDb3VudCh1ZSk6dGUuY2FsbChoZSx1ZSl9LGoucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9'@;
put 'dGUsai5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP3oodGhpcy5fZXZlbnRzKTpbXX19LDMwNDg6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9UigyMzE4KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSxrLEUsail7aWYoei5p'@;
put 'c0J1ZmZlcihJKXx8KEk9ei5mcm9tKEksImJpbmFyeSIpKSxrJiYoei5pc0J1ZmZlcihrKXx8KGs9ei5mcm9tKGssImJpbmFyeSIpKSw4IT09ay5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBW'@;
put 'PUUvOCxCPXouYWxsb2MoViksWT16LmFsbG9jKGp8fDApLFg9ei5hbGxvYygwKTtWPjB8fGo+MDspe3ZhciBVPW5ldyBLO1UudXBkYXRlKFgpLFUudXBkYXRlKEkpLGsmJlUudXBkYXRlKGspLFg9VS5kaWdlc3QoKTt2YXIgcT0wO2lmKFY+MCl7dmFyIGVlPUIubGVuZ3RoLVY7cT1NYXRoLm1p'@;
put 'bihWLFgubGVuZ3RoKSxYLmNvcHkoQixlZSwwLHEpLFYtPXF9aWYocTxYLmxlbmd0aCYmaj4wKXt2YXIgdGU9WS5sZW5ndGgtaixvZT1NYXRoLm1pbihqLFgubGVuZ3RoLXEpO1guY29weShZLHRlLHEscStvZSksai09b2V9fXJldHVybiBYLmZpbGwoMCkse2tleTpCLGl2Oll9fX0sNDAyOToo'@;
put 'TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTMyMCksSz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtNLmV4cG9ydHM9ZnVuY3Rpb24oayxFLGope2lmKCF6KEUpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIG11'@;
put 'c3QgYmUgYSBmdW5jdGlvbiIpO3ZhciBWO2FyZ3VtZW50cy5sZW5ndGg+PTMmJihWPWopLCJbb2JqZWN0IEFycmF5XSI9PT1LLmNhbGwoayk/ZnVuY3Rpb24oQixZLFgpe2Zvcih2YXIgVT0wLHE9Qi5sZW5ndGg7VTxxO1UrKylJLmNhbGwoQixVKSYmKG51bGw9PVg/WShCW1VdLFUsQik6WS5j'@;
put 'YWxsKFgsQltVXSxVLEIpKX0oayxFLFYpOiJzdHJpbmciPT10eXBlb2Ygaz9mdW5jdGlvbihCLFksWCl7Zm9yKHZhciBVPTAscT1CLmxlbmd0aDtVPHE7VSsrKW51bGw9PVg/WShCLmNoYXJBdChVKSxVLEIpOlkuY2FsbChYLEIuY2hhckF0KFUpLFUsQil9KGssRSxWKTpmdW5jdGlvbihCLFks'@;
put 'WCl7Zm9yKHZhciBVIGluIEIpSS5jYWxsKEIsVSkmJihudWxsPT1YP1koQltVXSxVLEIpOlkuY2FsbChYLEJbVV0sVSxCKSl9KGssRSxWKX19LDYyMzA6TT0+e00uZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDUzMDI6KE0sTyxS'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KTtjb25zdCBJPVIoNzcpLGs9UigyNTIwKSxFPVIoMTM4MSkubWtkaXJzU3luYyxqPVIoMzE4KS51dGltZXNNaWxsaXNTeW5jLFY9UigyNzMzKTtmdW5jdGlvbiBCKHEsZWUsdGUsb2Upe2NvbnN0IHNlPShvZS5kZXJlZmVy'@;
put 'ZW5jZT9JLnN0YXRTeW5jOkkubHN0YXRTeW5jKShlZSk7aWYoc2UuaXNEaXJlY3RvcnkoKSlyZXR1cm4gaGU9c2UsY2U9ZWUsRz10ZSxiPW9lLHE/VShjZSxHLGIpOihEPWhlLm1vZGUsSD1jZSxnPWIsSS5ta2RpclN5bmMoTj1HKSxVKEgsTixnKSxYKE4sRCkpO3ZhciBoZSxjZSxHLGIsRCxI'@;
put 'LE4sZztpZihzZS5pc0ZpbGUoKXx8c2UuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8c2UuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbihoZSx1ZSxjZSxHLGIpe3JldHVybiB1ZT9mdW5jdGlvbihELEgsTixnKXtpZihnLm92ZXJ3cml0ZSlyZXR1cm4gSS51bmxpbmtTeW5jKE4pLFkoRCxI'@;
put 'LE4sZyk7aWYoZy5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtOfScgYWxyZWFkeSBleGlzdHNgKX0oaGUsY2UsRyxiKTpZKGhlLGNlLEcsYil9KHNlLHEsZWUsdGUsb2UpO2lmKHNlLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlLEcpe2xldCBiPUku'@;
put 'cmVhZGxpbmtTeW5jKHVlKTtpZihHLmRlcmVmZXJlbmNlJiYoYj1rLnJlc29sdmUoei5jd2QoKSxiKSksaGUpe2xldCBEO3RyeXtEPUkucmVhZGxpbmtTeW5jKGNlKX1jYXRjaChIKXtpZigiRUlOVkFMIj09PUguY29kZXx8IlVOS05PV04iPT09SC5jb2RlKXJldHVybiBJLnN5bWxpbmtTeW5j'@;
put 'KGIsY2UpO3Rocm93IEh9aWYoRy5kZXJlZmVyZW5jZSYmKEQ9ay5yZXNvbHZlKHouY3dkKCksRCkpLFYuaXNTcmNTdWJkaXIoYixEKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke2J9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke0R9Jy5gKTtpZihJLnN0YXRTeW5j'@;
put 'KGNlKS5pc0RpcmVjdG9yeSgpJiZWLmlzU3JjU3ViZGlyKEQsYikpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke0R9JyB3aXRoICcke2J9Jy5gKTtyZXR1cm4gZnVuY3Rpb24oSCxOKXtyZXR1cm4gSS51bmxpbmtTeW5jKE4pLEkuc3ltbGlua1N5bmMoSCxOKX0oYixjZSl9'@;
put 'cmV0dXJuIEkuc3ltbGlua1N5bmMoYixjZSl9KHEsZWUsdGUsb2UpO3Rocm93IHNlLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke2VlfWApOnNlLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7ZWV9YCk6bmV3'@;
put 'IEVycm9yKGBVbmtub3duIGZpbGU6ICR7ZWV9YCl9ZnVuY3Rpb24gWShxLGVlLHRlLG9lKXtyZXR1cm4gSS5jb3B5RmlsZVN5bmMoZWUsdGUpLG9lLnByZXNlcnZlVGltZXN0YW1wcyYmKGhlPWVlLHVlPXRlLDA9PSgxMjgmKHNlPXEubW9kZSkpJiZYKHVlLDEyOHxzZSksZnVuY3Rpb24oY2Us'@;
put 'Ryl7Y29uc3QgYj1JLnN0YXRTeW5jKGNlKTtqKEcsYi5hdGltZSxiLm10aW1lKX0oaGUsdWUpKSxYKHRlLHEubW9kZSk7dmFyIHNlLGhlLHVlfWZ1bmN0aW9uIFgocSxlZSl7cmV0dXJuIEkuY2htb2RTeW5jKHEsZWUpfWZ1bmN0aW9uIFUocSxlZSx0ZSl7SS5yZWFkZGlyU3luYyhxKS5mb3JF'@;
put 'YWNoKG9lPT5mdW5jdGlvbihzZSxoZSx1ZSxjZSl7Y29uc3QgRz1rLmpvaW4oaGUsc2UpLGI9ay5qb2luKHVlLHNlKSx7ZGVzdFN0YXQ6RH09Vi5jaGVja1BhdGhzU3luYyhHLGIsImNvcHkiLGNlKTtyZXR1cm4gZnVuY3Rpb24oSCxOLGcsQyl7aWYoIUMuZmlsdGVyfHxDLmZpbHRlcihOLGcp'@;
put 'KXJldHVybiBCKEgsTixnLEMpfShELEcsYixjZSl9KG9lLHEsZWUsdGUpKX1NLmV4cG9ydHM9ZnVuY3Rpb24ocSxlZSx0ZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHRlJiYodGU9e2ZpbHRlcjp0ZX0pLCh0ZT10ZXx8e30pLmNsb2JiZXI9ISgiY2xvYmJlciJpbiB0ZSl8fCEhdGUuY2xvYmJlcix0'@;
put 'ZS5vdmVyd3JpdGU9Im92ZXJ3cml0ZSJpbiB0ZT8hIXRlLm92ZXJ3cml0ZTp0ZS5jbG9iYmVyLHRlLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09ei5hcmNoJiZLLndhcm4oImZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBp'@;
put 'cyBub3QgcmVjb21tZW5kZWQ7XG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiKTtjb25zdHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNlfT1WLmNoZWNrUGF0aHNTeW5jKHEsZWUsImNvcHkiLHRlKTtyZXR1cm4gVi5jaGVj'@;
put 'a1BhcmVudFBhdGhzU3luYyhxLG9lLGVlLCJjb3B5IiksZnVuY3Rpb24oaGUsdWUsY2UsRyl7aWYoRy5maWx0ZXImJiFHLmZpbHRlcih1ZSxjZSkpcmV0dXJuO2NvbnN0IGI9ay5kaXJuYW1lKGNlKTtyZXR1cm4gSS5leGlzdHNTeW5jKGIpfHxFKGIpLEIoaGUsdWUsY2UsRyl9KHNlLHEsZWUs'@;
put 'dGUpfX0sODY5MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17Y29weVN5bmM6Uig1MzAyKX19LDcxODk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KTtjb25zdCBJPVIoNzcpLGs9UigyNTIwKSxFPVIoMTM4MSkubWtkaXJzLGo9Uig5MjU3'@;
put 'KS5wYXRoRXhpc3RzLFY9UigzMTgpLnV0aW1lc01pbGxpcyxCPVIoMjczMyk7ZnVuY3Rpb24gWSh1ZSxjZSxHLGIsRCl7Y29uc3QgSD1rLmRpcm5hbWUoRyk7aihILChOLGcpPT5OP0QoTik6Zz9VKHVlLGNlLEcsYixEKTp2b2lkIEUoSCxDPT5DP0QoQyk6VSh1ZSxjZSxHLGIsRCkpKX1mdW5j'@;
put 'dGlvbiBYKHVlLGNlLEcsYixELEgpe1Byb21pc2UucmVzb2x2ZShELmZpbHRlcihHLGIpKS50aGVuKE49Pk4/dWUoY2UsRyxiLEQsSCk6SCgpLE49PkgoTikpfWZ1bmN0aW9uIFUodWUsY2UsRyxiLEQpeyhiLmRlcmVmZXJlbmNlP0kuc3RhdDpJLmxzdGF0KShjZSwoSCxOKT0+e3JldHVybiBI'@;
put 'P0QoSCk6Ti5pc0RpcmVjdG9yeSgpPyhnPU4sUz1jZSx2PUcscD1iLHc9RCx1ZT9vZShTLHYscCx3KTooSj1nLm1vZGUsbmU9UyxmZT1wLHhlPXcsdm9pZCBJLm1rZGlyKGRlPXYsTGU9PntpZihMZSlyZXR1cm4geGUoTGUpO29lKG5lLGRlLGZlLEZlPT5GZT94ZShGZSk6dGUoZGUsSix4ZSkp'@;
put 'fSkpKTpOLmlzRmlsZSgpfHxOLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fE4uaXNCbG9ja0RldmljZSgpP2Z1bmN0aW9uKGcsQyxTLHYscCx3KXtyZXR1cm4gQz9mdW5jdGlvbihKLG5lLGRlLGZlLHhlKXtpZighZmUub3ZlcndyaXRlKXJldHVybiBmZS5lcnJvck9uRXhpc3Q/eGUobmV3IEVycm9y'@;
put 'KGAnJHtkZX0nIGFscmVhZHkgZXhpc3RzYCkpOnhlKCk7SS51bmxpbmsoZGUsTGU9PkxlP3hlKExlKTpxKEosbmUsZGUsZmUseGUpKX0oZyxTLHYscCx3KTpxKGcsUyx2LHAsdyl9KE4sdWUsY2UsRyxiLEQpOk4uaXNTeW1ib2xpY0xpbmsoKT9mdW5jdGlvbiBoZSh1ZSxjZSxHLGIsRCl7SS5y'@;
put 'ZWFkbGluayhjZSwoSCxOKT0+SD9EKEgpOihiLmRlcmVmZXJlbmNlJiYoTj1rLnJlc29sdmUoei5jd2QoKSxOKSksdWU/dm9pZCBJLnJlYWRsaW5rKEcsKGcsQyk9Pmc/IkVJTlZBTCI9PT1nLmNvZGV8fCJVTktOT1dOIj09PWcuY29kZT9JLnN5bWxpbmsoTixHLEQpOkQoZyk6KGIuZGVyZWZl'@;
put 'cmVuY2UmJihDPWsucmVzb2x2ZSh6LmN3ZCgpLEMpKSxCLmlzU3JjU3ViZGlyKE4sQyk/RChuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke059JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke0N9Jy5gKSk6dWUuaXNEaXJlY3RvcnkoKSYmQi5pc1NyY1N1YmRpcihDLE4pP0QobmV3'@;
put 'IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke0N9JyB3aXRoICcke059Jy5gKSk6ZnVuY3Rpb24oUyx2LHApe0kudW5saW5rKHYsdz0+dz9wKHcpOkkuc3ltbGluayhTLHYscCkpfShOLEcsRCkpKTpJLnN5bWxpbmsoTixHLEQpKSl9KHVlLGNlLEcsYixEKTpOLmlzU29ja2V0KCk/RChuZXcg'@;
put 'RXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7Y2V9YCkpOk4uaXNGSUZPKCk/RChuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke2NlfWApKTpEKG5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke2NlfWApKTt2YXIgZyxTLHYscCx3LEosbmUsZGUsZmUseGV9'@;
put 'KX1mdW5jdGlvbiBxKHVlLGNlLEcsYixEKXtJLmNvcHlGaWxlKGNlLEcsSD0+e3JldHVybiBIP0QoSCk6Yi5wcmVzZXJ2ZVRpbWVzdGFtcHM/KGc9Y2UsQz1HLFM9RCwwPT0oMTI4JihOPXVlLm1vZGUpKT90ZShDLDEyOHxOLHY9PnY/Uyh2KTplZShOLGcsQyxTKSk6ZWUoTixnLEMsUykpOnRl'@;
put 'KEcsdWUubW9kZSxEKTt2YXIgTixnLEMsU30pfWZ1bmN0aW9uIGVlKHVlLGNlLEcsYil7dmFyIEgsTjtIPUcsTj1EPT5EP2IoRCk6dGUoRyx1ZSxiKSxJLnN0YXQoY2UsKGcsQyk9Pmc/TihnKTpWKEgsQy5hdGltZSxDLm10aW1lLE4pKX1mdW5jdGlvbiB0ZSh1ZSxjZSxHKXtyZXR1cm4gSS5j'@;
put 'aG1vZCh1ZSxjZSxHKX1mdW5jdGlvbiBvZSh1ZSxjZSxHLGIpe0kucmVhZGRpcih1ZSwoRCxIKT0+RD9iKEQpOnNlKEgsdWUsY2UsRyxiKSl9ZnVuY3Rpb24gc2UodWUsY2UsRyxiLEQpe2NvbnN0IEg9dWUucG9wKCk7cmV0dXJuIEg/ZnVuY3Rpb24oTixnLEMsUyx2LHApe2NvbnN0IHc9ay5q'@;
put 'b2luKEMsZyksSj1rLmpvaW4oUyxnKTtCLmNoZWNrUGF0aHModyxKLCJjb3B5Iix2LChuZSxkZSk9PntpZihuZSlyZXR1cm4gcChuZSk7Y29uc3R7ZGVzdFN0YXQ6ZmV9PWRlO3ZhciB4ZSxMZSxGZSxPZSxqZTt4ZT1mZSxMZT13LEZlPUosamU9eGU9PnhlP3AoeGUpOnNlKE4sQyxTLHYscCks'@;
put 'KE9lPXYpLmZpbHRlcj9YKFUseGUsTGUsRmUsT2UsamUpOlUoeGUsTGUsRmUsT2UsamUpfSl9KHVlLEgsY2UsRyxiLEQpOkQoKX1NLmV4cG9ydHM9ZnVuY3Rpb24odWUsY2UsRyxiKXsiZnVuY3Rpb24iIT10eXBlb2YgR3x8Yj8iZnVuY3Rpb24iPT10eXBlb2YgRyYmKEc9e2ZpbHRlcjpHfSk6'@;
put 'KGI9RyxHPXt9KSxiPWJ8fGZ1bmN0aW9uKCl7fSwoRz1HfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImluIEcpfHwhIUcuY2xvYmJlcixHLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIEc/ISFHLm92ZXJ3cml0ZTpHLmNsb2JiZXIsRy5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PXouYXJj'@;
put 'aCYmSy53YXJuKCJmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG4gICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5IiksQi5j'@;
put 'aGVja1BhdGhzKHVlLGNlLCJjb3B5IixHLChELEgpPT57aWYoRClyZXR1cm4gYihEKTtjb25zdHtzcmNTdGF0Ok4sZGVzdFN0YXQ6Z309SDtCLmNoZWNrUGFyZW50UGF0aHModWUsTixjZSwiY29weSIsQz0+Qz9iKEMpOkcuZmlsdGVyP1goWSxnLHVlLGNlLEcsYik6WShnLHVlLGNlLEcsYikp'@;
put 'fSl9fSw2NDY0OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjaztNLmV4cG9ydHM9e2NvcHk6eihSKDcxODkpKX19LDU1OTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbVByb21pc2UsSz1SKDc3NDkpLEk9UigyNTIw'@;
put 'KSxrPVIoMTM4MSksRT1SKDQ1NDIpLGo9eihmdW5jdGlvbigpe3ZhciBCPWFlKGZ1bmN0aW9uKihZKXtsZXQgWDt0cnl7WD15aWVsZCBLLnJlYWRkaXIoWSl9Y2F0Y2h7cmV0dXJuIGsubWtkaXJzKFkpfXJldHVybiBQcm9taXNlLmFsbChYLm1hcChVPT5FLnJlbW92ZShJLmpvaW4oWSxVKSkp'@;
put 'KX0pO3JldHVybiBmdW5jdGlvbihZKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBWKEIpe2xldCBZO3RyeXtZPUsucmVhZGRpclN5bmMoQil9Y2F0Y2h7cmV0dXJuIGsubWtkaXJzU3luYyhCKX1ZLmZvckVhY2goWD0+e1g9SS5qb2luKEIsWCksRS5yZW1v'@;
put 'dmVTeW5jKFgpfSl9TS5leHBvcnRzPXtlbXB0eURpclN5bmM6VixlbXB0eWRpclN5bmM6VixlbXB0eURpcjpqLGVtcHR5ZGlyOmp9fSw2NTMwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxLPVIoMjUyMCksST1SKDc3KSxrPVIoMTM4MSk7TS5l'@;
put 'eHBvcnRzPXtjcmVhdGVGaWxlOnooZnVuY3Rpb24oRSxqKXtmdW5jdGlvbiBWKCl7SS53cml0ZUZpbGUoRSwiIixCPT57aWYoQilyZXR1cm4gaihCKTtqKCl9KX1JLnN0YXQoRSwoQixZKT0+e2lmKCFCJiZZLmlzRmlsZSgpKXJldHVybiBqKCk7Y29uc3QgWD1LLmRpcm5hbWUoRSk7SS5zdGF0'@;
put 'KFgsKFUscSk9PntpZihVKXJldHVybiJFTk9FTlQiPT09VS5jb2RlP2subWtkaXJzKFgsZWU9PntpZihlZSlyZXR1cm4gaihlZSk7VigpfSk6aihVKTtxLmlzRGlyZWN0b3J5KCk/VigpOkkucmVhZGRpcihYLGVlPT57aWYoZWUpcmV0dXJuIGooZWUpfSl9KX0pfSksY3JlYXRlRmlsZVN5bmM6'@;
put 'ZnVuY3Rpb24oRSl7bGV0IGo7dHJ5e2o9SS5zdGF0U3luYyhFKX1jYXRjaHt9aWYoaiYmai5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgVj1LLmRpcm5hbWUoRSk7dHJ5e0kuc3RhdFN5bmMoVikuaXNEaXJlY3RvcnkoKXx8SS5yZWFkZGlyU3luYyhWKX1jYXRjaChCKXtpZighQnx8IkVOT0VOVCIh'@;
put 'PT1CLmNvZGUpdGhyb3cgQjtrLm1rZGlyc1N5bmMoVil9SS53cml0ZUZpbGVTeW5jKEUsIiIpfX19LDE3MjA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjUzMCksSz1SKDQxNDcpLEk9UigzNjM1KTtNLmV4cG9ydHM9e2NyZWF0ZUZpbGU6ei5jcmVhdGVGaWxlLGNyZWF0ZUZp'@;
put 'bGVTeW5jOnouY3JlYXRlRmlsZVN5bmMsZW5zdXJlRmlsZTp6LmNyZWF0ZUZpbGUsZW5zdXJlRmlsZVN5bmM6ei5jcmVhdGVGaWxlU3luYyxjcmVhdGVMaW5rOksuY3JlYXRlTGluayxjcmVhdGVMaW5rU3luYzpLLmNyZWF0ZUxpbmtTeW5jLGVuc3VyZUxpbms6Sy5jcmVhdGVMaW5rLGVuc3Vy'@;
put 'ZUxpbmtTeW5jOksuY3JlYXRlTGlua1N5bmMsY3JlYXRlU3ltbGluazpJLmNyZWF0ZVN5bWxpbmssY3JlYXRlU3ltbGlua1N5bmM6SS5jcmVhdGVTeW1saW5rU3luYyxlbnN1cmVTeW1saW5rOkkuY3JlYXRlU3ltbGluayxlbnN1cmVTeW1saW5rU3luYzpJLmNyZWF0ZVN5bWxpbmtTeW5jfX0s'@;
put 'NDE0NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDI1MjApLEk9Uig3Nyksaz1SKDEzODEpLEU9Uig5MjU3KS5wYXRoRXhpc3RzLHthcmVJZGVudGljYWw6an09UigyNzMzKTtNLmV4cG9ydHM9e2NyZWF0ZUxpbms6eihmdW5jdGlvbihW'@;
put 'LEIsWSl7ZnVuY3Rpb24gWChVLHEpe0kubGluayhVLHEsZWU9PntpZihlZSlyZXR1cm4gWShlZSk7WShudWxsKX0pfUkubHN0YXQoQiwoVSxxKT0+e0kubHN0YXQoViwoZWUsdGUpPT57aWYoZWUpcmV0dXJuIGVlLm1lc3NhZ2U9ZWUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxp'@;
put 'bmsiKSxZKGVlKTtpZihxJiZqKHRlLHEpKXJldHVybiBZKG51bGwpO2NvbnN0IG9lPUsuZGlybmFtZShCKTtFKG9lLChzZSxoZSk9PnNlP1koc2UpOmhlP1goVixCKTp2b2lkIGsubWtkaXJzKG9lLHVlPT57aWYodWUpcmV0dXJuIFkodWUpO1goVixCKX0pKX0pfSl9KSxjcmVhdGVMaW5rU3lu'@;
put 'YzpmdW5jdGlvbihWLEIpe2xldCBZO3RyeXtZPUkubHN0YXRTeW5jKEIpfWNhdGNoe310cnl7Y29uc3QgVT1JLmxzdGF0U3luYyhWKTtpZihZJiZqKFUsWSkpcmV0dXJufWNhdGNoKFUpe3Rocm93IFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksVX1j'@;
put 'b25zdCBYPUsuZGlybmFtZShCKTtyZXR1cm4gSS5leGlzdHNTeW5jKFgpfHxrLm1rZGlyc1N5bmMoWCksSS5saW5rU3luYyhWLEIpfX19LDYwNzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoMjUyMCksSz1SKDc3KSxJPVIoOTI1NykucGF0aEV4aXN0cztNLmV4cG9ydHM9e3N5'@;
put 'bWxpbmtQYXRoczpmdW5jdGlvbihrLEUsail7aWYoei5pc0Fic29sdXRlKGspKXJldHVybiBLLmxzdGF0KGssVj0+Vj8oVi5tZXNzYWdlPVYubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxqKFYpKTpqKG51bGwse3RvQ3dkOmssdG9Ec3Q6a30pKTt7Y29uc3QgVj16'@;
put 'LmRpcm5hbWUoRSksQj16LmpvaW4oVixrKTtyZXR1cm4gSShCLChZLFgpPT5ZP2ooWSk6WD9qKG51bGwse3RvQ3dkOkIsdG9Ec3Q6a30pOksubHN0YXQoayxVPT5VPyhVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLGooVSkpOmoobnVsbCx7dG9D'@;
put 'd2Q6ayx0b0RzdDp6LnJlbGF0aXZlKFYsayl9KSkpfX0sc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbihrLEUpe2xldCBqO2lmKHouaXNBYnNvbHV0ZShrKSl7aWYoaj1LLmV4aXN0c1N5bmMoayksIWopdGhyb3cgbmV3IEVycm9yKCJhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7'@;
put 'cmV0dXJue3RvQ3dkOmssdG9Ec3Q6a319e2NvbnN0IFY9ei5kaXJuYW1lKEUpLEI9ei5qb2luKFYsayk7aWYoaj1LLmV4aXN0c1N5bmMoQiksailyZXR1cm57dG9Dd2Q6Qix0b0RzdDprfTtpZihqPUsuZXhpc3RzU3luYyhrKSwhail0aHJvdyBuZXcgRXJyb3IoInJlbGF0aXZlIHNyY3BhdGgg'@;
put 'ZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6ayx0b0RzdDp6LnJlbGF0aXZlKFYsayl9fX19fSw5MjU5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KTtNLmV4cG9ydHM9e3N5bWxpbmtUeXBlOmZ1bmN0aW9uKEssSSxrKXtpZihrPSJmdW5jdGlvbiI9PXR5cGVvZiBJ'@;
put 'P0k6ayxJPSJmdW5jdGlvbiIhPXR5cGVvZiBJJiZJKXJldHVybiBrKG51bGwsSSk7ei5sc3RhdChLLChFLGopPT57aWYoRSlyZXR1cm4gayhudWxsLCJmaWxlIik7ST1qJiZqLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUiLGsobnVsbCxJKX0pfSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24o'@;
put 'SyxJKXtsZXQgaztpZihJKXJldHVybiBJO3RyeXtrPXoubHN0YXRTeW5jKEspfWNhdGNoe3JldHVybiJmaWxlIn1yZXR1cm4gayYmay5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn19fSwzNjM1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxL'@;
put 'PVIoMjUyMCksST1SKDc3NDkpLGs9UigxMzgxKSxFPWsubWtkaXJzLGo9ay5ta2RpcnNTeW5jLFY9Uig2MDcyKSxCPVYuc3ltbGlua1BhdGhzLFk9Vi5zeW1saW5rUGF0aHNTeW5jLFg9Uig5MjU5KSxVPVguc3ltbGlua1R5cGUscT1YLnN5bWxpbmtUeXBlU3luYyxlZT1SKDkyNTcpLnBhdGhF'@;
put 'eGlzdHMse2FyZUlkZW50aWNhbDp0ZX09UigyNzMzKTtmdW5jdGlvbiBvZShzZSxoZSx1ZSxjZSl7QihzZSxoZSwoRyxiKT0+e2lmKEcpcmV0dXJuIGNlKEcpO3NlPWIudG9Ec3QsVShiLnRvQ3dkLHVlLChELEgpPT57aWYoRClyZXR1cm4gY2UoRCk7Y29uc3QgTj1LLmRpcm5hbWUoaGUpO2Vl'@;
put 'KE4sKGcsQyk9Pmc/Y2UoZyk6Qz9JLnN5bWxpbmsoc2UsaGUsSCxjZSk6dm9pZCBFKE4sUz0+e2lmKFMpcmV0dXJuIGNlKFMpO0kuc3ltbGluayhzZSxoZSxILGNlKX0pKX0pfSl9TS5leHBvcnRzPXtjcmVhdGVTeW1saW5rOnooZnVuY3Rpb24oc2UsaGUsdWUsY2Upe2NlPSJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiB1ZT91ZTpjZSx1ZT0iZnVuY3Rpb24iIT10eXBlb2YgdWUmJnVlLEkubHN0YXQoaGUsKEcsYik9PnshRyYmYi5pc1N5bWJvbGljTGluaygpP1Byb21pc2UuYWxsKFtJLnN0YXQoc2UpLEkuc3RhdChoZSldKS50aGVuKChbRCxIXSk9PntpZih0ZShELEgpKXJldHVybiBjZShudWxs'@;
put 'KTtvZShzZSxoZSx1ZSxjZSl9KTpvZShzZSxoZSx1ZSxjZSl9KX0pLGNyZWF0ZVN5bWxpbmtTeW5jOmZ1bmN0aW9uKHNlLGhlLHVlKXtsZXQgY2U7dHJ5e2NlPUkubHN0YXRTeW5jKGhlKX1jYXRjaHt9aWYoY2UmJmNlLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0IEQ9SS5zdGF0U3luYyhzZSks'@;
put 'SD1JLnN0YXRTeW5jKGhlKTtpZih0ZShELEgpKXJldHVybn1jb25zdCBHPVkoc2UsaGUpO3NlPUcudG9Ec3QsdWU9cShHLnRvQ3dkLHVlKTtjb25zdCBiPUsuZGlybmFtZShoZSk7cmV0dXJuIEkuZXhpc3RzU3luYyhiKXx8aihiKSxJLnN5bWxpbmtTeW5jKHNlLGhlLHVlKX19fSw3NzQ5OihN'@;
put 'LE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxLPVIoNzcpLEk9WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJmY2htb2QiLCJmY2hvd24iLCJmZGF0YXN5bmMiLCJmc3RhdCIsImZzeW5jIiwi'@;
put 'ZnRydW5jYXRlIiwiZnV0aW1lcyIsImxjaG1vZCIsImxjaG93biIsImxpbmsiLCJsc3RhdCIsIm1rZGlyIiwibWtkdGVtcCIsIm9wZW4iLCJvcGVuZGlyIiwicmVhZGRpciIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInJtIiwicm1kaXIiLCJzdGF0Iiwic3lt'@;
put 'bGluayIsInRydW5jYXRlIiwidW5saW5rIiwidXRpbWVzIiwid3JpdGVGaWxlIl0uZmlsdGVyKGs9PiJmdW5jdGlvbiI9PXR5cGVvZiBLW2tdKTtPYmplY3QuYXNzaWduKE8sSyksSS5mb3JFYWNoKGs9PntPW2tdPXooS1trXSl9KSxPLnJlYWxwYXRoLm5hdGl2ZT16KEsucmVhbHBhdGgubmF0'@;
put 'aXZlKSxPLmV4aXN0cz1mdW5jdGlvbihrLEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFP0suZXhpc3RzKGssRSk6bmV3IFByb21pc2Uoaj0+Sy5leGlzdHMoayxqKSl9LE8ucmVhZD1mdW5jdGlvbihrLEUsaixWLEIsWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFk/Sy5yZWFkKGss'@;
put 'RSxqLFYsQixZKTpuZXcgUHJvbWlzZSgoWCxVKT0+e0sucmVhZChrLEUsaixWLEIsKHEsZWUsdGUpPT57aWYocSlyZXR1cm4gVShxKTtYKHtieXRlc1JlYWQ6ZWUsYnVmZmVyOnRlfSl9KX0pfSxPLndyaXRlPWZ1bmN0aW9uKGssRSwuLi5qKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygaltq'@;
put 'Lmxlbmd0aC0xXT9LLndyaXRlKGssRSwuLi5qKTpuZXcgUHJvbWlzZSgoVixCKT0+e0sud3JpdGUoayxFLC4uLmosKFksWCxVKT0+e2lmKFkpcmV0dXJuIEIoWSk7Vih7Ynl0ZXNXcml0dGVuOlgsYnVmZmVyOlV9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBLLndyaXRldiYmKE8ud3JpdGV2'@;
put 'PWZ1bmN0aW9uKGssRSwuLi5qKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaltqLmxlbmd0aC0xXT9LLndyaXRldihrLEUsLi4uaik6bmV3IFByb21pc2UoKFYsQik9PntLLndyaXRldihrLEUsLi4uaiwoWSxYLFUpPT57aWYoWSlyZXR1cm4gQihZKTtWKHtieXRlc1dyaXR0ZW46WCxidWZm'@;
put 'ZXJzOlV9KX0pfSl9KX0sNTY3NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17Li4uUig3NzQ5KSwuLi5SKDg2OTApLC4uLlIoNjQ2NCksLi4uUig1NTkwKSwuLi5SKDE3MjApLC4uLlIoNjU3MyksLi4uUigxMzgxKSwuLi5SKDQwMjYpLC4uLlIoNTMwKSwuLi5SKDEzMTUpLC4u'@;
put 'LlIoOTI1NyksLi4uUig0NTQyKX19LDY1NzM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbVByb21pc2UsSz1SKDcxODMpO0sub3V0cHV0SnNvbj16KFIoMzUwOCkpLEsub3V0cHV0SnNvblN5bmM9Uig5NTc4KSxLLm91dHB1dEpTT049Sy5vdXRwdXRKc29uLEsu'@;
put 'b3V0cHV0SlNPTlN5bmM9Sy5vdXRwdXRKc29uU3luYyxLLndyaXRlSlNPTj1LLndyaXRlSnNvbixLLndyaXRlSlNPTlN5bmM9Sy53cml0ZUpzb25TeW5jLEsucmVhZEpTT049Sy5yZWFkSnNvbixLLnJlYWRKU09OU3luYz1LLnJlYWRKc29uU3luYyxNLmV4cG9ydHM9S30sNzE4MzooTSxPLFIp'@;
put 'PT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2ODEzKTtNLmV4cG9ydHM9e3JlYWRKc29uOnoucmVhZEZpbGUscmVhZEpzb25TeW5jOnoucmVhZEZpbGVTeW5jLHdyaXRlSnNvbjp6LndyaXRlRmlsZSx3cml0ZUpzb25TeW5jOnoud3JpdGVGaWxlU3luY319LDk1Nzg6KE0sTyxSKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijtjb25zdHtzdHJpbmdpZnk6en09Uig2NzgwKSx7b3V0cHV0RmlsZVN5bmM6S309UigxMzE1KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSxrLEUpe2NvbnN0IGo9eihrLEUpO0soSSxqLEUpfX0sMzUwODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTp6fT1SKDY3'@;
put 'ODApLHtvdXRwdXRGaWxlOkt9PVIoMTMxNSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEk9YWUoZnVuY3Rpb24qKGssRSxqPXt9KXtjb25zdCBWPXooRSxqKTt5aWVsZCBLKGssVixqKX0pO3JldHVybiBmdW5jdGlvbihrLEUpe3JldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9'@;
put 'LDEzODE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbVByb21pc2Use21ha2VEaXI6SyxtYWtlRGlyU3luYzpJfT1SKDgyMzMpLGs9eihLKTtNLmV4cG9ydHM9e21rZGlyczprLG1rZGlyc1N5bmM6SSxta2RpcnA6ayxta2RpcnBTeW5jOkksZW5zdXJlRGlyOmss'@;
put 'ZW5zdXJlRGlyU3luYzpJfX0sODIzMzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NzQ5KSx7Y2hlY2tQYXRoOkt9PVIoMzQ2OCksST1rPT4ibnVtYmVyIj09dHlwZW9mIGs/azp7bW9kZTo1MTEsLi4ua30ubW9kZTtNLmV4cG9ydHMubWFrZURpcj1mdW5jdGlvbigpe3ZhciBr'@;
put 'PWFlKGZ1bmN0aW9uKihFLGope3JldHVybiBLKEUpLHoubWtkaXIoRSx7bW9kZTpJKGopLHJlY3Vyc2l2ZTohMH0pfSk7cmV0dXJuIGZ1bmN0aW9uKEUsail7cmV0dXJuIGsuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxNLmV4cG9ydHMubWFrZURpclN5bmM9KGssRSk9PihLKGspLHoubWtk'@;
put 'aXJTeW5jKGsse21vZGU6SShFKSxyZWN1cnNpdmU6ITB9KSl9LDM0Njg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2NvbnN0IEs9UigyNTIwKTtNLmV4cG9ydHMuY2hlY2tQYXRoPWZ1bmN0aW9uKEkpe2lmKCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYvWzw+OiJ8PypdLy50'@;
put 'ZXN0KEkucmVwbGFjZShLLnBhcnNlKEkpLnJvb3QsIiIpKSl7Y29uc3Qgaz1uZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke0l9YCk7dGhyb3cgay5jb2RlPSJFSU5WQUwiLGt9fX0sNDAyNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17bW92'@;
put 'ZVN5bmM6Uig2MDA2KX19LDYwMDY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpLEs9UigyNTIwKSxJPVIoODY5MCkuY29weVN5bmMsaz1SKDQ1NDIpLnJlbW92ZVN5bmMsRT1SKDEzODEpLm1rZGlycFN5bmMsaj1SKDI3MzMpO2Z1bmN0aW9uIFYoQixZLFgpe3RyeXt6LnJl'@;
put 'bmFtZVN5bmMoQixZKX1jYXRjaChVKXtpZigiRVhERVYiIT09VS5jb2RlKXRocm93IFU7cmV0dXJuIEkocT1CLFkse292ZXJ3cml0ZTpYLGVycm9yT25FeGlzdDohMH0pLGsocSl9dmFyIHF9TS5leHBvcnRzPWZ1bmN0aW9uKEIsWSxYKXtjb25zdCBVPShYPVh8fHt9KS5vdmVyd3JpdGV8fFgu'@;
put 'Y2xvYmJlcnx8ITEse3NyY1N0YXQ6cSxpc0NoYW5naW5nQ2FzZTplZT0hMX09ai5jaGVja1BhdGhzU3luYyhCLFksIm1vdmUiLFgpO3JldHVybiBqLmNoZWNrUGFyZW50UGF0aHNTeW5jKEIscSxZLCJtb3ZlIiksZnVuY3Rpb24odGUpe2NvbnN0IG9lPUsuZGlybmFtZSh0ZSk7cmV0dXJuIEsu'@;
put 'cGFyc2Uob2UpLnJvb3Q9PT1vZX0oWSl8fEUoSy5kaXJuYW1lKFkpKSxmdW5jdGlvbih0ZSxvZSxzZSxoZSl7aWYoaGUpcmV0dXJuIFYodGUsb2Usc2UpO2lmKHNlKXJldHVybiBrKG9lKSxWKHRlLG9lLHNlKTtpZih6LmV4aXN0c1N5bmMob2UpKXRocm93IG5ldyBFcnJvcigiZGVzdCBhbHJl'@;
put 'YWR5IGV4aXN0cy4iKTtyZXR1cm4gVih0ZSxvZSxzZSl9KEIsWSxVLGVlKX19LDUzMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2s7TS5leHBvcnRzPXttb3ZlOnooUig0MzYpKX19LDQzNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9'@;
put 'Uig3NyksSz1SKDI1MjApLEk9Uig2NDY0KS5jb3B5LGs9Uig0NTQyKS5yZW1vdmUsRT1SKDEzODEpLm1rZGlycCxqPVIoOTI1NykucGF0aEV4aXN0cyxWPVIoMjczMyk7ZnVuY3Rpb24gQihYLFUscSxlZSx0ZSl7cmV0dXJuIGVlP1koWCxVLHEsdGUpOnE/ayhVLG9lPT5vZT90ZShvZSk6WShY'@;
put 'LFUscSx0ZSkpOnZvaWQgaihVLChvZSxzZSk9Pm9lP3RlKG9lKTpzZT90ZShuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIikpOlkoWCxVLHEsdGUpKX1mdW5jdGlvbiBZKFgsVSxxLGVlKXt6LnJlbmFtZShYLFUsdGU9PntyZXR1cm4gdGU/IkVYREVWIiE9PXRlLmNvZGU/ZWUodGUp'@;
put 'Oih1ZT1lZSx2b2lkIEkob2U9WCxVLHtvdmVyd3JpdGU6cSxlcnJvck9uRXhpc3Q6ITB9LEc9Pkc/dWUoRyk6ayhvZSx1ZSkpKTplZSgpO3ZhciBvZSx1ZX0pfU0uZXhwb3J0cz1mdW5jdGlvbihYLFUscSxlZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHEmJihlZT1xLHE9e30pO2NvbnN0IHRlPXEu'@;
put 'b3ZlcndyaXRlfHxxLmNsb2JiZXJ8fCExO1YuY2hlY2tQYXRocyhYLFUsIm1vdmUiLHEsKG9lLHNlKT0+e2lmKG9lKXJldHVybiBlZShvZSk7Y29uc3R7c3JjU3RhdDpoZSxpc0NoYW5naW5nQ2FzZTp1ZT0hMX09c2U7Vi5jaGVja1BhcmVudFBhdGhzKFgsaGUsVSwibW92ZSIsY2U9PmNlP2Vl'@;
put 'KGNlKTpmdW5jdGlvbihHKXtjb25zdCBiPUsuZGlybmFtZShHKTtyZXR1cm4gSy5wYXJzZShiKS5yb290PT09Yn0oVSk/QihYLFUsdGUsdWUsZWUpOnZvaWQgRShLLmRpcm5hbWUoVSksRz0+Rz9lZShHKTpCKFgsVSx0ZSx1ZSxlZSkpKX0pfX0sMTMxNTooTSxPLFIpPT57InVzZSBzdHJpY3Qi'@;
put 'O2NvbnN0IHo9Uig4OTgxKS5mcm9tQ2FsbGJhY2ssSz1SKDc3KSxJPVIoMjUyMCksaz1SKDEzODEpLEU9Uig5MjU3KS5wYXRoRXhpc3RzO00uZXhwb3J0cz17b3V0cHV0RmlsZTp6KGZ1bmN0aW9uKGosVixCLFkpeyJmdW5jdGlvbiI9PXR5cGVvZiBCJiYoWT1CLEI9InV0ZjgiKTtjb25zdCBY'@;
put 'PUkuZGlybmFtZShqKTtFKFgsKFUscSk9PlU/WShVKTpxP0sud3JpdGVGaWxlKGosVixCLFkpOnZvaWQgay5ta2RpcnMoWCxlZT0+e2lmKGVlKXJldHVybiBZKGVlKTtLLndyaXRlRmlsZShqLFYsQixZKX0pKX0pLG91dHB1dEZpbGVTeW5jOmZ1bmN0aW9uKGosLi4uVil7Y29uc3QgQj1JLmRp'@;
put 'cm5hbWUoaik7aWYoSy5leGlzdHNTeW5jKEIpKXJldHVybiBLLndyaXRlRmlsZVN5bmMoaiwuLi5WKTtrLm1rZGlyc1N5bmMoQiksSy53cml0ZUZpbGVTeW5jKGosLi4uVil9fX0sOTI1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tUHJvbWlzZSxLPVIoNzc0'@;
put 'OSk7TS5leHBvcnRzPXtwYXRoRXhpc3RzOnooZnVuY3Rpb24oSSl7cmV0dXJuIEsuYWNjZXNzKEkpLnRoZW4oKCk9PiEwKS5jYXRjaCgoKT0+ITEpfSkscGF0aEV4aXN0c1N5bmM6Sy5leGlzdHNTeW5jfX0sNDU0MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NyksSz1SKDg5'@;
put 'ODEpLmZyb21DYWxsYmFjayxJPVIoMzQ1Nik7TS5leHBvcnRzPXtyZW1vdmU6SyhmdW5jdGlvbihrLEUpe2lmKHoucm0pcmV0dXJuIHoucm0oayx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSxFKTtJKGssRSl9KSxyZW1vdmVTeW5jOmZ1bmN0aW9uKGspe2lmKHoucm1TeW5jKXJldHVybiB6LnJt'@;
put 'U3luYyhrLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KTtJLnN5bmMoayl9fX0sMzQ1NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7Y29uc3QgSz1SKDc3KSxJPVIoMjUyMCksaz1SKDkyODIpLEU9IndpbjMyIj09PXoucGxhdGZvcm07ZnVuY3Rpb24gaih0ZSl7WyJ1bmxp'@;
put 'bmsiLCJjaG1vZCIsInN0YXQiLCJsc3RhdCIsInJtZGlyIiwicmVhZGRpciJdLmZvckVhY2gob2U9Pnt0ZVtvZV09dGVbb2VdfHxLW29lXSx0ZVtvZSs9IlN5bmMiXT10ZVtvZV18fEtbb2VdfSksdGUubWF4QnVzeVRyaWVzPXRlLm1heEJ1c3lUcmllc3x8M31mdW5jdGlvbiBWKHRlLG9lLHNl'@;
put 'KXtsZXQgaGU9MDsiZnVuY3Rpb24iPT10eXBlb2Ygb2UmJihzZT1vZSxvZT17fSksayh0ZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiB0ZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLGsuc3RyaWN0RXF1YWwodHlwZW9m'@;
put 'IHNlLCJmdW5jdGlvbiIsInJpbXJhZjogY2FsbGJhY2sgZnVuY3Rpb24gcmVxdWlyZWQiKSxrKG9lLCJyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIG9lLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9i'@;
put 'amVjdCIpLGoob2UpLEIodGUsb2UsZnVuY3Rpb24gdWUoY2Upe2lmKGNlKXtpZigoIkVCVVNZIj09PWNlLmNvZGV8fCJFTk9URU1QVFkiPT09Y2UuY29kZXx8IkVQRVJNIj09PWNlLmNvZGUpJiZoZTxvZS5tYXhCdXN5VHJpZXMpcmV0dXJuIGhlKyssc2V0VGltZW91dCgoKT0+Qih0ZSxvZSx1'@;
put 'ZSksMTAwKmhlKTsiRU5PRU5UIj09PWNlLmNvZGUmJihjZT1udWxsKX1zZShjZSl9KX1mdW5jdGlvbiBCKHRlLG9lLHNlKXtrKHRlKSxrKG9lKSxrKCJmdW5jdGlvbiI9PXR5cGVvZiBzZSksb2UubHN0YXQodGUsKGhlLHVlKT0+aGUmJiJFTk9FTlQiPT09aGUuY29kZT9zZShudWxsKTpoZSYm'@;
put 'IkVQRVJNIj09PWhlLmNvZGUmJkU/WSh0ZSxvZSxoZSxzZSk6dWUmJnVlLmlzRGlyZWN0b3J5KCk/VSh0ZSxvZSxoZSxzZSk6dm9pZCBvZS51bmxpbmsodGUsY2U9PntpZihjZSl7aWYoIkVOT0VOVCI9PT1jZS5jb2RlKXJldHVybiBzZShudWxsKTtpZigiRVBFUk0iPT09Y2UuY29kZSlyZXR1'@;
put 'cm4gRT9ZKHRlLG9lLGNlLHNlKTpVKHRlLG9lLGNlLHNlKTtpZigiRUlTRElSIj09PWNlLmNvZGUpcmV0dXJuIFUodGUsb2UsY2Usc2UpfXJldHVybiBzZShjZSl9KSl9ZnVuY3Rpb24gWSh0ZSxvZSxzZSxoZSl7ayh0ZSksayhvZSksaygiZnVuY3Rpb24iPT10eXBlb2YgaGUpLG9lLmNobW9k'@;
put 'KHRlLDQzOCx1ZT0+e3VlP2hlKCJFTk9FTlQiPT09dWUuY29kZT9udWxsOnNlKTpvZS5zdGF0KHRlLChjZSxHKT0+e2NlP2hlKCJFTk9FTlQiPT09Y2UuY29kZT9udWxsOnNlKTpHLmlzRGlyZWN0b3J5KCk/VSh0ZSxvZSxzZSxoZSk6b2UudW5saW5rKHRlLGhlKX0pfSl9ZnVuY3Rpb24gWCh0'@;
put 'ZSxvZSxzZSl7bGV0IGhlO2sodGUpLGsob2UpO3RyeXtvZS5jaG1vZFN5bmModGUsNDM4KX1jYXRjaCh1ZSl7aWYoIkVOT0VOVCI9PT11ZS5jb2RlKXJldHVybjt0aHJvdyBzZX10cnl7aGU9b2Uuc3RhdFN5bmModGUpfWNhdGNoKHVlKXtpZigiRU5PRU5UIj09PXVlLmNvZGUpcmV0dXJuO3Ro'@;
put 'cm93IHNlfWhlLmlzRGlyZWN0b3J5KCk/ZWUodGUsb2Usc2UpOm9lLnVubGlua1N5bmModGUpfWZ1bmN0aW9uIFUodGUsb2Usc2UsaGUpe2sodGUpLGsob2UpLGsoImZ1bmN0aW9uIj09dHlwZW9mIGhlKSxvZS5ybWRpcih0ZSx1ZT0+e3ZhciBjZSxHLGI7IXVlfHwiRU5PVEVNUFRZIiE9PXVl'@;
put 'LmNvZGUmJiJFRVhJU1QiIT09dWUuY29kZSYmIkVQRVJNIiE9PXVlLmNvZGU/aGUodWUmJiJFTk9URElSIj09PXVlLmNvZGU/c2U6dWUpOihHPW9lLGI9aGUsayhjZT10ZSksayhHKSxrKCJmdW5jdGlvbiI9PXR5cGVvZiBiKSxHLnJlYWRkaXIoY2UsKEQsSCk9PntpZihEKXJldHVybiBiKEQp'@;
put 'O2xldCBOLGc9SC5sZW5ndGg7aWYoMD09PWcpcmV0dXJuIEcucm1kaXIoY2UsYik7SC5mb3JFYWNoKEM9PntWKEkuam9pbihjZSxDKSxHLFM9PntpZighTilyZXR1cm4gUz9iKE49Uyk6dm9pZCgwPT0tLWcmJkcucm1kaXIoY2UsYikpfSl9KX0pKX0pfWZ1bmN0aW9uIHEodGUsb2Upe2xldCBz'@;
put 'ZTtqKG9lPW9lfHx7fSksayh0ZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiB0ZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLGsob2UsInJpbXJhZjogbWlzc2luZyBvcHRpb25zIiksay5zdHJpY3RFcXVhbCh0eXBlb2Yg'@;
put 'b2UsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0Iik7dHJ5e3NlPW9lLmxzdGF0U3luYyh0ZSl9Y2F0Y2goaGUpe2lmKCJFTk9FTlQiPT09aGUuY29kZSlyZXR1cm47IkVQRVJNIj09PWhlLmNvZGUmJkUmJlgodGUsb2UsaGUpfXRyeXtzZSYmc2UuaXNEaXJlY3Rv'@;
put 'cnkoKT9lZSh0ZSxvZSxudWxsKTpvZS51bmxpbmtTeW5jKHRlKX1jYXRjaChoZSl7aWYoIkVOT0VOVCI9PT1oZS5jb2RlKXJldHVybjtpZigiRVBFUk0iPT09aGUuY29kZSlyZXR1cm4gRT9YKHRlLG9lLGhlKTplZSh0ZSxvZSxoZSk7aWYoIkVJU0RJUiIhPT1oZS5jb2RlKXRocm93IGhlO2Vl'@;
put 'KHRlLG9lLGhlKX19ZnVuY3Rpb24gZWUodGUsb2Usc2Upe2sodGUpLGsob2UpO3RyeXtvZS5ybWRpclN5bmModGUpfWNhdGNoKGhlKXtpZigiRU5PVERJUiI9PT1oZS5jb2RlKXRocm93IHNlO2lmKCJFTk9URU1QVFkiPT09aGUuY29kZXx8IkVFWElTVCI9PT1oZS5jb2RlfHwiRVBFUk0iPT09'@;
put 'aGUuY29kZSkhZnVuY3Rpb24odWUsY2Upe2lmKGsodWUpLGsoY2UpLGNlLnJlYWRkaXJTeW5jKHVlKS5mb3JFYWNoKEc9PnEoSS5qb2luKHVlLEcpLGNlKSksIUUpcmV0dXJuIGNlLnJtZGlyU3luYyh1ZSxjZSk7e2NvbnN0IEc9RGF0ZS5ub3coKTtkb3t0cnl7cmV0dXJuIGNlLnJtZGlyU3lu'@;
put 'Yyh1ZSxjZSl9Y2F0Y2h7fX13aGlsZShEYXRlLm5vdygpLUc8NTAwKX19KHRlLG9lKTtlbHNlIGlmKCJFTk9FTlQiIT09aGUuY29kZSl0aHJvdyBoZX19TS5leHBvcnRzPVYsVi5zeW5jPXF9LDI3MzM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzc0OSksSz1SKDI1MjApLEk9'@;
put 'Uig5NTM5KTtmdW5jdGlvbiBrKEIsWSxYKXtjb25zdCBVPVguZGVyZWZlcmVuY2U/cT0+ei5zdGF0KHEse2JpZ2ludDohMH0pOnE9PnoubHN0YXQocSx7YmlnaW50OiEwfSk7cmV0dXJuIFByb21pc2UuYWxsKFtVKEIpLFUoWSkuY2F0Y2gocT0+e2lmKCJFTk9FTlQiPT09cS5jb2RlKXJldHVy'@;
put 'biBudWxsO3Rocm93IHF9KV0pLnRoZW4oKFtxLGVlXSk9Pih7c3JjU3RhdDpxLGRlc3RTdGF0OmVlfSkpfWZ1bmN0aW9uIEUoQixZKXtyZXR1cm4gWS5pbm8mJlkuZGV2JiZZLmlubz09PUIuaW5vJiZZLmRldj09PUIuZGV2fWZ1bmN0aW9uIGooQixZKXtjb25zdCBYPUsucmVzb2x2ZShCKS5z'@;
put 'cGxpdChLLnNlcCkuZmlsdGVyKHE9PnEpLFU9Sy5yZXNvbHZlKFkpLnNwbGl0KEsuc2VwKS5maWx0ZXIocT0+cSk7cmV0dXJuIFgucmVkdWNlKChxLGVlLHRlKT0+cSYmVVt0ZV09PT1lZSwhMCl9ZnVuY3Rpb24gVihCLFksWCl7cmV0dXJuYENhbm5vdCAke1h9ICcke0J9JyB0byBhIHN1YmRp'@;
put 'cmVjdG9yeSBvZiBpdHNlbGYsICcke1l9Jy5gfU0uZXhwb3J0cz17Y2hlY2tQYXRoczpmdW5jdGlvbihCLFksWCxVLHEpe0kuY2FsbGJhY2tpZnkoaykoQixZLFUsKGVlLHRlKT0+e2lmKGVlKXJldHVybiBxKGVlKTtjb25zdHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNlfT10ZTtpZihzZSl7aWYo'@;
put 'RShvZSxzZSkpe2NvbnN0IGhlPUsuYmFzZW5hbWUoQiksdWU9Sy5iYXNlbmFtZShZKTtyZXR1cm4ibW92ZSI9PT1YJiZoZSE9PXVlJiZoZS50b0xvd2VyQ2FzZSgpPT09dWUudG9Mb3dlckNhc2UoKT9xKG51bGwse3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2UsaXNDaGFuZ2luZ0Nhc2U6ITB9KTpx'@;
put 'KG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKSl9aWYob2UuaXNEaXJlY3RvcnkoKSYmIXNlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIHEobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7WX0nIHdpdGggZGly'@;
put 'ZWN0b3J5ICcke0J9Jy5gKSk7aWYoIW9lLmlzRGlyZWN0b3J5KCkmJnNlLmlzRGlyZWN0b3J5KCkpcmV0dXJuIHEobmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtZfScgd2l0aCBub24tZGlyZWN0b3J5ICcke0J9Jy5gKSl9cmV0dXJuIG9lLmlzRGlyZWN0b3J5KCkm'@;
put 'JmooQixZKT9xKG5ldyBFcnJvcihWKEIsWSxYKSkpOnEobnVsbCx7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZX0pfSl9LGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uKEIsWSxYLFUpe2NvbnN0e3NyY1N0YXQ6cSxkZXN0U3RhdDplZX09ZnVuY3Rpb24odGUsb2Usc2Upe2xldCBoZTtjb25zdCB1ZT1z'@;
put 'ZS5kZXJlZmVyZW5jZT9HPT56LnN0YXRTeW5jKEcse2JpZ2ludDohMH0pOkc9PnoubHN0YXRTeW5jKEcse2JpZ2ludDohMH0pLGNlPXVlKHRlKTt0cnl7aGU9dWUob2UpfWNhdGNoKEcpe2lmKCJFTk9FTlQiPT09Ry5jb2RlKXJldHVybntzcmNTdGF0OmNlLGRlc3RTdGF0Om51bGx9O3Rocm93'@;
put 'IEd9cmV0dXJue3NyY1N0YXQ6Y2UsZGVzdFN0YXQ6aGV9fShCLFksVSk7aWYoZWUpe2lmKEUocSxlZSkpe2NvbnN0IHRlPUsuYmFzZW5hbWUoQiksb2U9Sy5iYXNlbmFtZShZKTtpZigibW92ZSI9PT1YJiZ0ZSE9PW9lJiZ0ZS50b0xvd2VyQ2FzZSgpPT09b2UudG9Mb3dlckNhc2UoKSlyZXR1'@;
put 'cm57c3JjU3RhdDpxLGRlc3RTdGF0OmVlLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocS5pc0RpcmVjdG9yeSgpJiYhZWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENh'@;
put 'bm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtZfScgd2l0aCBkaXJlY3RvcnkgJyR7Qn0nLmApO2lmKCFxLmlzRGlyZWN0b3J5KCkmJmVlLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtZfScgd2l0aCBub24tZGlyZWN0'@;
put 'b3J5ICcke0J9Jy5gKX1pZihxLmlzRGlyZWN0b3J5KCkmJmooQixZKSl0aHJvdyBuZXcgRXJyb3IoVihCLFksWCkpO3JldHVybntzcmNTdGF0OnEsZGVzdFN0YXQ6ZWV9fSxjaGVja1BhcmVudFBhdGhzOmZ1bmN0aW9uIEIoWSxYLFUscSxlZSl7Y29uc3QgdGU9Sy5yZXNvbHZlKEsuZGlybmFt'@;
put 'ZShZKSksb2U9Sy5yZXNvbHZlKEsuZGlybmFtZShVKSk7aWYob2U9PT10ZXx8b2U9PT1LLnBhcnNlKG9lKS5yb290KXJldHVybiBlZSgpO3ouc3RhdChvZSx7YmlnaW50OiEwfSwoc2UsaGUpPT5zZT8iRU5PRU5UIj09PXNlLmNvZGU/ZWUoKTplZShzZSk6RShYLGhlKT9lZShuZXcgRXJyb3Io'@;
put 'VihZLFUscSkpKTpCKFksWCxvZSxxLGVlKSl9LGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIEIoWSxYLFUscSl7Y29uc3QgZWU9Sy5yZXNvbHZlKEsuZGlybmFtZShZKSksdGU9Sy5yZXNvbHZlKEsuZGlybmFtZShVKSk7aWYodGU9PT1lZXx8dGU9PT1LLnBhcnNlKHRlKS5yb290KXJl'@;
put 'dHVybjtsZXQgb2U7dHJ5e29lPXouc3RhdFN5bmModGUse2JpZ2ludDohMH0pfWNhdGNoKHNlKXtpZigiRU5PRU5UIj09PXNlLmNvZGUpcmV0dXJuO3Rocm93IHNlfWlmKEUoWCxvZSkpdGhyb3cgbmV3IEVycm9yKFYoWSxVLHEpKTtyZXR1cm4gQihZLFgsdGUscSl9LGlzU3JjU3ViZGlyOmos'@;
put 'YXJlSWRlbnRpY2FsOkV9fSwzMTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpO00uZXhwb3J0cz17dXRpbWVzTWlsbGlzOmZ1bmN0aW9uKEssSSxrLEUpe3oub3BlbihLLCJyKyIsKGosVik9PntpZihqKXJldHVybiBFKGopO3ouZnV0aW1lcyhWLEksayxCPT57ei5jbG9z'@;
put 'ZShWLFk9PntFJiZFKEJ8fFkpfSl9KX0pfSx1dGltZXNNaWxsaXNTeW5jOmZ1bmN0aW9uKEssSSxrKXtjb25zdCBFPXoub3BlblN5bmMoSywicisiKTtyZXR1cm4gei5mdXRpbWVzU3luYyhFLEksayksei5jbG9zZVN5bmMoRSl9fX0sNzMzNDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KTtNLmV4'@;
put 'cG9ydHM9WSxZLnJlYWxwYXRoPVksWS5zeW5jPVgsWS5yZWFscGF0aFN5bmM9WCxZLm1vbmtleXBhdGNoPWZ1bmN0aW9uKCl7Sy5yZWFscGF0aD1ZLEsucmVhbHBhdGhTeW5jPVh9LFkudW5tb25rZXlwYXRjaD1mdW5jdGlvbigpe0sucmVhbHBhdGg9SSxLLnJlYWxwYXRoU3luYz1rfTt2YXIg'@;
put 'Sz1SKDI1MzUpLEk9Sy5yZWFscGF0aCxrPUsucmVhbHBhdGhTeW5jLGo9L152WzAtNV1cLi8udGVzdCh6LnZlcnNpb24pLFY9Uig3MDU5KTtmdW5jdGlvbiBCKFUpe3JldHVybiBVJiYicmVhbHBhdGgiPT09VS5zeXNjYWxsJiYoIkVMT09QIj09PVUuY29kZXx8IkVOT01FTSI9PT1VLmNvZGV8'@;
put 'fCJFTkFNRVRPT0xPTkciPT09VS5jb2RlKX1mdW5jdGlvbiBZKFUscSxlZSl7aWYoailyZXR1cm4gSShVLHEsZWUpOyJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoZWU9cSxxPW51bGwpLEkoVSxxLGZ1bmN0aW9uKHRlLG9lKXtCKHRlKT9WLnJlYWxwYXRoKFUscSxlZSk6ZWUodGUsb2UpfSl9ZnVu'@;
put 'Y3Rpb24gWChVLHEpe2lmKGopcmV0dXJuIGsoVSxxKTt0cnl7cmV0dXJuIGsoVSxxKX1jYXRjaChlZSl7aWYoQihlZSkpcmV0dXJuIFYucmVhbHBhdGhTeW5jKFUscSk7dGhyb3cgZWV9fX0sNzA1OTooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST1SKDI1MjApLGs9IndpbjMy'@;
put 'Ij09PXoucGxhdGZvcm0sRT1SKDI1MzUpLGo9ei5lbnYuTk9ERV9ERUJVRyYmL2ZzLy50ZXN0KHouZW52Lk5PREVfREVCVUcpO2lmKGspdmFyIEI9LyguKj8pKD86W1wvXFxdK3wkKS9nO2Vsc2UgQj0vKC4qPykoPzpbXC9dK3wkKS9nO2lmKGspdmFyIFk9L14oPzpbYS16QS1aXTp8W1xcXC9d'@;
put 'ezJ9W15cXFwvXStbXFxcL11bXlxcXC9dKyk/W1xcXC9dKi87ZWxzZSBZPS9eW1wvXSovO08ucmVhbHBhdGhTeW5jPWZ1bmN0aW9uKFgsVSl7aWYoWD1JLnJlc29sdmUoWCksVSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWCkpcmV0dXJuIFVbWF07dmFyIHEsZWUs'@;
put 'dGUsb2Usc2U9WCxoZT17fSx1ZT17fTtmdW5jdGlvbiBjZSgpe3ZhciBnPVkuZXhlYyhYKTtxPWdbMF0ubGVuZ3RoLGVlPWdbMF0sdGU9Z1swXSxvZT0iIixrJiYhdWVbdGVdJiYoRS5sc3RhdFN5bmModGUpLHVlW3RlXT0hMCl9Zm9yKGNlKCk7cTxYLmxlbmd0aDspe0IubGFzdEluZGV4PXE7'@;
put 'dmFyIEc9Qi5leGVjKFgpO2lmKG9lPWVlLGVlKz1HWzBdLHE9Qi5sYXN0SW5kZXgsISh1ZVt0ZT1vZStHWzFdXXx8VSYmVVt0ZV09PT10ZSkpe3ZhciBiO2lmKFUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHRlKSliPVVbdGVdO2Vsc2V7dmFyIEQ9RS5sc3RhdFN5'@;
put 'bmModGUpO2lmKCFELmlzU3ltYm9saWNMaW5rKCkpe3VlW3RlXT0hMCxVJiYoVVt0ZV09dGUpO2NvbnRpbnVlfXZhciBIPW51bGw7aWYoIWspe3ZhciBOPUQuZGV2LnRvU3RyaW5nKDMyKSsiOiIrRC5pbm8udG9TdHJpbmcoMzIpO2hlLmhhc093blByb3BlcnR5KE4pJiYoSD1oZVtOXSl9bnVs'@;
put 'bD09PUgmJihFLnN0YXRTeW5jKHRlKSxIPUUucmVhZGxpbmtTeW5jKHRlKSksYj1JLnJlc29sdmUob2UsSCksVSYmKFVbdGVdPWIpLGt8fChoZVtOXT1IKX1YPUkucmVzb2x2ZShiLFguc2xpY2UocSkpLGNlKCl9fXJldHVybiBVJiYoVVtzZV09WCksWH0sTy5yZWFscGF0aD1mdW5jdGlvbihY'@;
put 'LFUscSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEmJihxPWZ1bmN0aW9uIFYoWCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFg/WDpmdW5jdGlvbigpe3ZhciBVO2lmKGope3ZhciBxPW5ldyBFcnJvcjtVPWZ1bmN0aW9uKHRlKXt0ZSYmKHEubWVzc2FnZT10ZS5tZXNzYWdlLGVlKHRlPXEp'@;
put 'KX19ZWxzZSBVPWVlO3JldHVybiBVO2Z1bmN0aW9uIGVlKHRlKXtpZih0ZSl7aWYoei50aHJvd0RlcHJlY2F0aW9uKXRocm93IHRlO2lmKCF6Lm5vRGVwcmVjYXRpb24pe3ZhciBvZT0iZnM6IG1pc3NpbmcgY2FsbGJhY2sgIisodGUuc3RhY2t8fHRlLm1lc3NhZ2UpO3oudHJhY2VEZXByZWNh'@;
put 'dGlvbj9LLnRyYWNlKG9lKTpLLmVycm9yKG9lKX19fX0oKX0oVSksVT1udWxsKSxYPUkucmVzb2x2ZShYKSxVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxYKSlyZXR1cm4gei5uZXh0VGljayhxLmJpbmQobnVsbCxudWxsLFVbWF0pKTt2YXIgZWUsdGUsb2Usc2Us'@;
put 'aGU9WCx1ZT17fSxjZT17fTtmdW5jdGlvbiBHKCl7dmFyIGc9WS5leGVjKFgpO2VlPWdbMF0ubGVuZ3RoLHRlPWdbMF0sb2U9Z1swXSxzZT0iIixrJiYhY2Vbb2VdP0UubHN0YXQob2UsZnVuY3Rpb24oQyl7aWYoQylyZXR1cm4gcShDKTtjZVtvZV09ITAsYigpfSk6ei5uZXh0VGljayhiKX1m'@;
put 'dW5jdGlvbiBiKCl7aWYoZWU+PVgubGVuZ3RoKXJldHVybiBVJiYoVVtoZV09WCkscShudWxsLFgpO0IubGFzdEluZGV4PWVlO3ZhciBnPUIuZXhlYyhYKTtyZXR1cm4gc2U9dGUsdGUrPWdbMF0sZWU9Qi5sYXN0SW5kZXgsY2Vbb2U9c2UrZ1sxXV18fFUmJlVbb2VdPT09b2U/ei5uZXh0VGlj'@;
put 'ayhiKTpVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxvZSk/TihVW29lXSk6RS5sc3RhdChvZSxEKX1mdW5jdGlvbiBEKGcsQyl7aWYoZylyZXR1cm4gcShnKTtpZighQy5pc1N5bWJvbGljTGluaygpKXJldHVybiBjZVtvZV09ITAsVSYmKFVbb2VdPW9lKSx6Lm5l'@;
put 'eHRUaWNrKGIpO2lmKCFrKXt2YXIgUz1DLmRldi50b1N0cmluZygzMikrIjoiK0MuaW5vLnRvU3RyaW5nKDMyKTtpZih1ZS5oYXNPd25Qcm9wZXJ0eShTKSlyZXR1cm4gSChudWxsLHVlW1NdLG9lKX1FLnN0YXQob2UsZnVuY3Rpb24odil7aWYodilyZXR1cm4gcSh2KTtFLnJlYWRsaW5rKG9l'@;
put 'LGZ1bmN0aW9uKHAsdyl7a3x8KHVlW1NdPXcpLEgocCx3KX0pfSl9ZnVuY3Rpb24gSChnLEMsUyl7aWYoZylyZXR1cm4gcShnKTt2YXIgdj1JLnJlc29sdmUoc2UsQyk7VSYmKFVbU109diksTih2KX1mdW5jdGlvbiBOKGcpe1g9SS5yZXNvbHZlKGcsWC5zbGljZShlZSkpLEcoKX1HKCl9fSw3'@;
put 'NjQ4Ok09PnsidXNlIHN0cmljdCI7dmFyIE89QXJyYXkucHJvdG90eXBlLnNsaWNlLFI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztNLmV4cG9ydHM9ZnVuY3Rpb24oeil7dmFyIEs9dGhpcztpZigiZnVuY3Rpb24iIT10eXBlb2YgS3x8IltvYmplY3QgRnVuY3Rpb25dIiE9PVIuY2FsbChL'@;
put 'KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrSyk7Zm9yKHZhciBJLGs9Ty5jYWxsKGFyZ3VtZW50cywxKSxFPU1hdGgubWF4KDAsSy5sZW5ndGgtay5sZW5ndGgpLGo9W10sVj0wO1Y8RTtWKyspai5wdXNoKCIk'@;
put 'IitWKTtpZihJPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24gKCIrai5qb2luKCIsIikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgSSl7dmFyIFk9Sy5hcHBseSh0aGlzLGsuY29uY2F0'@;
put 'KE8uY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChZKT09PVk/WTp0aGlzfXJldHVybiBLLmFwcGx5KHosay5jb25jYXQoTy5jYWxsKGFyZ3VtZW50cykpKX0pLEsucHJvdG90eXBlKXt2YXIgQj1mdW5jdGlvbigpe307Qi5wcm90b3R5cGU9Sy5wcm90b3R5cGUsSS5wcm90b3R5cGU9'@;
put 'bmV3IEIsQi5wcm90b3R5cGU9bnVsbH1yZXR1cm4gSX19LDg2MTI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDc2NDgpO00uZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8en0sMjEwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1TeW50YXhFcnJvcixJPUZ1'@;
put 'bmN0aW9uLGs9VHlwZUVycm9yLEU9ZnVuY3Rpb24oUyl7dHJ5e3JldHVybiBJKCcidXNlIHN0cmljdCI7IHJldHVybiAoJytTKyIpLmNvbnN0cnVjdG9yOyIpKCl9Y2F0Y2h7fX0saj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2lmKGopdHJ5e2ooe30sIiIpfWNhdGNoe2o9bnVs'@;
put 'bH12YXIgVj1mdW5jdGlvbigpe3Rocm93IG5ldyBrfSxCPWo/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIFZ9Y2F0Y2h7dHJ5e3JldHVybiBqKGFyZ3VtZW50cywiY2FsbGVlIikuZ2V0fWNhdGNoe3JldHVybiBWfX19KCk6VixZPVIoMTQwNSkoKSxYPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVu'@;
put 'Y3Rpb24oUyl7cmV0dXJuIFMuX19wcm90b19ffSxVPXt9LHE9dHlwZW9mIFVpbnQ4QXJyYXk+InUiP3o6WChVaW50OEFycmF5KSxlZT17IiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj4idSI/ejpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1'@;
put 'ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/ejpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpZP1goW11bU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6eiwiJUFzeW5jRnVuY3Rpb24lIjpVLCIlQXN5bmNH'@;
put 'ZW5lcmF0b3IlIjpVLCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOlUsIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6VSwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/ejpBdG9taWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/ejpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5'@;
put 'JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP3o6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij96OkJpZ1VpbnQ2NEFycmF5LCIlQm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/ejpEYXRh'@;
put 'VmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJLCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpFcnJv'@;
put 'ciwiJWV2YWwlIjpldmFsLCIlRXZhbEVycm9yJSI6RXZhbEVycm9yLCIlRmxvYXQzMkFycmF5JSI6dHlwZW9mIEZsb2F0MzJBcnJheT4idSI/ejpGbG9hdDMyQXJyYXksIiVGbG9hdDY0QXJyYXklIjp0eXBlb2YgRmxvYXQ2NEFycmF5PiJ1Ij96OkZsb2F0NjRBcnJheSwiJUZpbmFsaXphdGlv'@;
put 'blJlZ2lzdHJ5JSI6dHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5PiJ1Ij96OkZpbmFsaXphdGlvblJlZ2lzdHJ5LCIlRnVuY3Rpb24lIjpJLCIlR2VuZXJhdG9yRnVuY3Rpb24lIjpVLCIlSW50OEFycmF5JSI6dHlwZW9mIEludDhBcnJheT4idSI/ejpJbnQ4QXJyYXksIiVJbnQxNkFycmF5'@;
put 'JSI6dHlwZW9mIEludDE2QXJyYXk+InUiP3o6SW50MTZBcnJheSwiJUludDMyQXJyYXklIjp0eXBlb2YgSW50MzJBcnJheT4idSI/ejpJbnQzMkFycmF5LCIlaXNGaW5pdGUlIjppc0Zpbml0ZSwiJWlzTmFOJSI6aXNOYU4sIiVJdGVyYXRvclByb3RvdHlwZSUiOlk/WChYKFtdW1N5bWJvbC5p'@;
put 'dGVyYXRvcl0oKSkpOnosIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046eiwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP3o6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPCJ1IiYmWT9YKChuZXcgTWFwKVtTeW1ib2wuaXRlcmF0b3JdKCkpOnosIiVNYXRo'@;
put 'JSI6TWF0aCwiJU51bWJlciUiOk51bWJlciwiJU9iamVjdCUiOk9iamVjdCwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/ejpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP3o6UHJv'@;
put 'eHksIiVSYW5nZUVycm9yJSI6UmFuZ2VFcnJvciwiJVJlZmVyZW5jZUVycm9yJSI6UmVmZXJlbmNlRXJyb3IsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP3o6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUiOnR5cGVvZiBTZXQ+InUiP3o6U2V0LCIlU2V0SXRlcmF0b3JQ'@;
put 'cm90b3R5cGUlIjp0eXBlb2YgU2V0PCJ1IiYmWT9YKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpOnosIiVTaGFyZWRBcnJheUJ1ZmZlciUiOnR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcj4idSI/ejpTaGFyZWRBcnJheUJ1ZmZlciwiJVN0cmluZyUiOlN0cmluZywiJVN0cmluZ0l0ZXJh'@;
put 'dG9yUHJvdG90eXBlJSI6WT9YKCIiW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJVN5bWJvbCUiOlk/U3ltYm9sOnosIiVTeW50YXhFcnJvciUiOkssIiVUaHJvd1R5cGVFcnJvciUiOkIsIiVUeXBlZEFycmF5JSI6cSwiJVR5cGVFcnJvciUiOmssIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4'@;
put 'QXJyYXk+InUiP3o6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij96OlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP3o6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5'@;
put 'cGVvZiBVaW50MzJBcnJheT4idSI/ejpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6VVJJRXJyb3IsIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP3o6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBlb2YgV2Vha1JlZj4idSI/ejpXZWFrUmVmLCIlV2Vha1NldCUiOnR5cGVvZiBXZWFrU2V0'@;
put 'PiJ1Ij96OldlYWtTZXR9O3RyeXtudWxsLmVycm9yfWNhdGNoKFMpe3ZhciB0ZT1YKFgoUykpO2VlWyIlRXJyb3IucHJvdG90eXBlJSJdPXRlfXZhciBvZT1mdW5jdGlvbiBTKHYpe3ZhciBwO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09dilwPUUoImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxz'@;
put 'ZSBpZigiJUdlbmVyYXRvckZ1bmN0aW9uJSI9PT12KXA9RSgiZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIj09PXYpcD1FKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PXYpe3ZhciB3PVMoIiVB'@;
put 'c3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO3cmJihwPXcucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09dil7dmFyIEo9UygiJUFzeW5jR2VuZXJhdG9yJSIpO0omJihwPVgoSi5wcm90b3R5cGUpKX1yZXR1cm4gZWVbdl09cCxwfSxzZT17IiVBcnJheUJ1'@;
put 'ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsi'@;
put 'QXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3lu'@;
put 'Y0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJv'@;
put 'b2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBl'@;
put 'Il0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVG'@;
put 'dW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUlu'@;
put 'dDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpT'@;
put 'T04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInBy'@;
put 'b3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0s'@;
put 'IiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2'@;
put 'ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJv'@;
put 'dG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9s'@;
put 'IiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBl'@;
put 'Il0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3Rv'@;
put 'dHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90'@;
put 'b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0saGU9Uig4NjEyKSx1ZT1SKDc2NDIpLGNlPWhlLmNhbGwoRnVuY3Rpb24uY2FsbCxBcnJheS5wcm90b3R5cGUuY29uY2F0KSxHPWhlLmNhbGwoRnVuY3Rpb24uYXBwbHksQXJyYXkucHJvdG90eXBlLnNwbGljZSksYj1oZS5jYWxsKEZ1'@;
put 'bmN0aW9uLmNhbGwsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxEPWhlLmNhbGwoRnVuY3Rpb24uY2FsbCxTdHJpbmcucHJvdG90eXBlLnNsaWNlKSxIPWhlLmNhbGwoRnVuY3Rpb24uY2FsbCxSZWdFeHAucHJvdG90eXBlLmV4ZWMpLE49L1teJS5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQr'@;
put 'KT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCUkKSkvZyxnPS9cXChcXCk/L2csQz1mdW5jdGlvbihTLHYpe3ZhciBwLHc9UztpZih1ZShzZSx3KSYmKHc9IiUiKyhwPXNlW3ddKVswXSsiJSIpLHVlKGVlLHcpKXt2YXIgSj1l'@;
put 'ZVt3XTtpZihKPT09VSYmKEo9b2UodykpLHZvaWQgMD09PUomJiF2KXRocm93IG5ldyBrKCJpbnRyaW5zaWMgIitTKyIgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOnAsbmFtZTp3LHZhbHVlOkp9fXRocm93IG5ldyBL'@;
put 'KCJpbnRyaW5zaWMgIitTKyIgZG9lcyBub3QgZXhpc3QhIil9O00uZXhwb3J0cz1mdW5jdGlvbihTLHYpe2lmKCJzdHJpbmciIT10eXBlb2YgU3x8MD09PVMubGVuZ3RoKXRocm93IG5ldyBrKCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2Ygdil0aHJvdyBuZXcgaygnImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09SCgvXiU/W14lXSolPyQvLFMpKXRocm93IG5ldyBLKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1'@;
put 'dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIHA9ZnVuY3Rpb24oWWUpe3ZhciBRZT1EKFllLDAsMSksbHQ9RChZZSwtMSk7aWYoIiUiPT09UWUmJiIlIiE9PWx0KXRocm93IG5ldyBLKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVj'@;
put 'dGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09bHQmJiIlIiE9PVFlKXRocm93IG5ldyBLKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIFBlPVtdO3JldHVybiBiKFllLE4sZnVuY3Rpb24oYmUsQWUsVGUscWUpe1BlW1BlLmxlbmd0aF09VGU/'@;
put 'YihxZSxnLCIkMSIpOkFlfHxiZX0pLFBlfShTKSx3PXAubGVuZ3RoPjA/cFswXToiIixKPUMoIiUiK3crIiUiLHYpLG5lPUoubmFtZSxkZT1KLnZhbHVlLGZlPSExLHhlPUouYWxpYXM7eGUmJih3PXhlWzBdLEcocCxjZShbMCwxXSx4ZSkpKTtmb3IodmFyIExlPTEsRmU9ITA7TGU8cC5sZW5n'@;
put 'dGg7TGUrPTEpe3ZhciBPZT1wW0xlXSxqZT1EKE9lLDAsMSksV2U9RChPZSwtMSk7aWYoKCciJz09PWplfHwiJyI9PT1qZXx8ImAiPT09amV8fCciJz09PVdlfHwiJyI9PT1XZXx8ImAiPT09V2UpJiZqZSE9PVdlKXRocm93IG5ldyBLKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0'@;
put 'IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoImNvbnN0cnVjdG9yIiE9PU9lJiZGZXx8KGZlPSEwKSx1ZShlZSxuZT0iJSIrKHcrPSIuIitPZSkrIiUiKSlkZT1lZVtuZV07ZWxzZSBpZihudWxsIT1kZSl7aWYoIShPZSBpbiBkZSkpe2lmKCF2KXRocm93IG5ldyBrKCJiYXNlIGludHJpbnNp'@;
put 'YyBmb3IgIitTKyIgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuIik7cmV0dXJufWlmKGomJkxlKzE+PXAubGVuZ3RoKXt2YXIgS2U9aihkZSxPZSk7ZGU9KEZlPSEhS2UpJiYiZ2V0ImluIEtlJiYhKCJvcmlnaW5hbFZhbHVlImluIEtlLmdldCk/S2UuZ2V0OmRl'@;
put 'W09lXX1lbHNlIEZlPXVlKGRlLE9lKSxkZT1kZVtPZV07RmUmJiFmZSYmKGVlW25lXT1kZSl9fXJldHVybiBkZX19LDY3NzI6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSyhxLGVlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsZWUpfU8u'@;
put 'c2V0b3B0cz1mdW5jdGlvbihxLGVlLHRlKXtpZih0ZXx8KHRlPXt9KSx0ZS5tYXRjaEJhc2UmJi0xPT09ZWUuaW5kZXhPZigiLyIpKXtpZih0ZS5ub2dsb2JzdGFyKXRocm93IG5ldyBFcnJvcigiYmFzZSBtYXRjaGluZyByZXF1aXJlcyBnbG9ic3RhciIpO2VlPSIqKi8iK2VlfXZhciBzZTtx'@;
put 'LnNpbGVudD0hIXRlLnNpbGVudCxxLnBhdHRlcm49ZWUscS5zdHJpY3Q9ITEhPT10ZS5zdHJpY3QscS5yZWFscGF0aD0hIXRlLnJlYWxwYXRoLHEucmVhbHBhdGhDYWNoZT10ZS5yZWFscGF0aENhY2hlfHxPYmplY3QuY3JlYXRlKG51bGwpLHEuZm9sbG93PSEhdGUuZm9sbG93LHEuZG90PSEh'@;
put 'dGUuZG90LHEubWFyaz0hIXRlLm1hcmsscS5ub2Rpcj0hIXRlLm5vZGlyLHEubm9kaXImJihxLm1hcms9ITApLHEuc3luYz0hIXRlLnN5bmMscS5ub3VuaXF1ZT0hIXRlLm5vdW5pcXVlLHEubm9udWxsPSEhdGUubm9udWxsLHEubm9zb3J0PSEhdGUubm9zb3J0LHEubm9jYXNlPSEhdGUubm9j'@;
put 'YXNlLHEuc3RhdD0hIXRlLnN0YXQscS5ub3Byb2Nlc3M9ISF0ZS5ub3Byb2Nlc3MscS5hYnNvbHV0ZT0hIXRlLmFic29sdXRlLHEuZnM9dGUuZnN8fEkscS5tYXhMZW5ndGg9dGUubWF4TGVuZ3RofHwxLzAscS5jYWNoZT10ZS5jYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLnN0YXRDYWNo'@;
put 'ZT10ZS5zdGF0Q2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5zeW1saW5rcz10ZS5zeW1saW5rc3x8T2JqZWN0LmNyZWF0ZShudWxsKSwoc2U9cSkuaWdub3JlPXRlLmlnbm9yZXx8W10sQXJyYXkuaXNBcnJheShzZS5pZ25vcmUpfHwoc2UuaWdub3JlPVtzZS5pZ25vcmVdKSxzZS5pZ25v'@;
put 'cmUubGVuZ3RoJiYoc2UuaWdub3JlPXNlLmlnbm9yZS5tYXAoWSkpLHEuY2hhbmdlZEN3ZD0hMTt2YXIgb2U9ei5jd2QoKTtLKHRlLCJjd2QiKT8ocS5jd2Q9ay5yZXNvbHZlKHRlLmN3ZCkscS5jaGFuZ2VkQ3dkPXEuY3dkIT09b2UpOnEuY3dkPW9lLHEucm9vdD10ZS5yb290fHxrLnJlc29s'@;
put 'dmUocS5jd2QsIi8iKSxxLnJvb3Q9ay5yZXNvbHZlKHEucm9vdCksIndpbjMyIj09PXoucGxhdGZvcm0mJihxLnJvb3Q9cS5yb290LnJlcGxhY2UoL1xcL2csIi8iKSkscS5jd2RBYnM9aihxLmN3ZCk/cS5jd2Q6WChxLHEuY3dkKSwid2luMzIiPT09ei5wbGF0Zm9ybSYmKHEuY3dkQWJzPXEu'@;
put 'Y3dkQWJzLnJlcGxhY2UoL1xcL2csIi8iKSkscS5ub21vdW50PSEhdGUubm9tb3VudCx0ZS5ub25lZ2F0ZT0hMCx0ZS5ub2NvbW1lbnQ9ITAsdGUuYWxsb3dXaW5kb3dzRXNjYXBlPSExLHEubWluaW1hdGNoPW5ldyBWKGVlLHRlKSxxLm9wdGlvbnM9cS5taW5pbWF0Y2gub3B0aW9uc30sTy5v'@;
put 'd25Qcm9wPUssTy5tYWtlQWJzPVgsTy5maW5pc2g9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT1xLm5vdW5pcXVlLHRlPWVlP1tdOk9iamVjdC5jcmVhdGUobnVsbCksb2U9MCxzZT1xLm1hdGNoZXMubGVuZ3RoO29lPHNlO29lKyspe3ZhciBoZT1xLm1hdGNoZXNbb2VdO2lmKGhlJiYwIT09T2Jq'@;
put 'ZWN0LmtleXMoaGUpLmxlbmd0aCl7dmFyIHVlPU9iamVjdC5rZXlzKGhlKTtlZT90ZS5wdXNoLmFwcGx5KHRlLHVlKTp1ZS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3RlW0ddPSEwfSl9ZWxzZSBpZihxLm5vbnVsbCl7dmFyIGNlPXEubWluaW1hdGNoLmdsb2JTZXRbb2VdO2VlP3RlLnB1c2goY2Up'@;
put 'OnRlW2NlXT0hMH19aWYoZWV8fCh0ZT1PYmplY3Qua2V5cyh0ZSkpLHEubm9zb3J0fHwodGU9dGUuc29ydChCKSkscS5tYXJrKXtmb3Iob2U9MDtvZTx0ZS5sZW5ndGg7b2UrKyl0ZVtvZV09cS5fbWFyayh0ZVtvZV0pO3Eubm9kaXImJih0ZT10ZS5maWx0ZXIoZnVuY3Rpb24oRyl7dmFyIGI9'@;
put 'IS9cLyQvLnRlc3QoRyksRD1xLmNhY2hlW0ddfHxxLmNhY2hlW1gocSxHKV07cmV0dXJuIGImJkQmJihiPSJESVIiIT09RCYmIUFycmF5LmlzQXJyYXkoRCkpLGJ9KSl9cS5pZ25vcmUubGVuZ3RoJiYodGU9dGUuZmlsdGVyKGZ1bmN0aW9uKEcpe3JldHVybiFVKHEsRyl9KSkscS5mb3VuZD10'@;
put 'ZX0sTy5tYXJrPWZ1bmN0aW9uKHEsZWUpe3ZhciB0ZT1YKHEsZWUpLG9lPXEuY2FjaGVbdGVdLHNlPWVlO2lmKG9lKXt2YXIgaGU9IkRJUiI9PT1vZXx8QXJyYXkuaXNBcnJheShvZSksdWU9Ii8iPT09ZWUuc2xpY2UoLTEpO2lmKGhlJiYhdWU/c2UrPSIvIjohaGUmJnVlJiYoc2U9c2Uuc2xp'@;
put 'Y2UoMCwtMSkpLHNlIT09ZWUpe3ZhciBjZT1YKHEsc2UpO3Euc3RhdENhY2hlW2NlXT1xLnN0YXRDYWNoZVt0ZV0scS5jYWNoZVtjZV09cS5jYWNoZVt0ZV19fXJldHVybiBzZX0sTy5pc0lnbm9yZWQ9VSxPLmNoaWxkcmVuSWdub3JlZD1mdW5jdGlvbihxLGVlKXtyZXR1cm4hIXEuaWdub3Jl'@;
put 'Lmxlbmd0aCYmcS5pZ25vcmUuc29tZShmdW5jdGlvbih0ZSl7cmV0dXJuISghdGUuZ21hdGNoZXJ8fCF0ZS5nbWF0Y2hlci5tYXRjaChlZSkpfSl9O3ZhciBJPVIoMzcxMCksaz1SKDI1MjApLEU9UigxMTcxKSxqPVIoNDA5NSksVj1FLk1pbmltYXRjaDtmdW5jdGlvbiBCKHEsZWUpe3JldHVy'@;
put 'biBxLmxvY2FsZUNvbXBhcmUoZWUsImVuIil9ZnVuY3Rpb24gWShxKXt2YXIgZWU9bnVsbDtpZigiLyoqIj09PXEuc2xpY2UoLTMpKXt2YXIgdGU9cS5yZXBsYWNlKC8oXC9cKlwqKSskLywiIik7ZWU9bmV3IFYodGUse2RvdDohMH0pfXJldHVybnttYXRjaGVyOm5ldyBWKHEse2RvdDohMH0p'@;
put 'LGdtYXRjaGVyOmVlfX1mdW5jdGlvbiBYKHEsZWUpe3ZhciB0ZT1lZTtyZXR1cm4gdGU9Ii8iPT09ZWUuY2hhckF0KDApP2suam9pbihxLnJvb3QsZWUpOmooZWUpfHwiIj09PWVlP2VlOnEuY2hhbmdlZEN3ZD9rLnJlc29sdmUocS5jd2QsZWUpOmsucmVzb2x2ZShlZSksIndpbjMyIj09PXou'@;
put 'cGxhdGZvcm0mJih0ZT10ZS5yZXBsYWNlKC9cXC9nLCIvIikpLHRlfWZ1bmN0aW9uIFUocSxlZSl7cmV0dXJuISFxLmlnbm9yZS5sZW5ndGgmJnEuaWdub3JlLnNvbWUoZnVuY3Rpb24odGUpe3JldHVybiB0ZS5tYXRjaGVyLm1hdGNoKGVlKXx8ISghdGUuZ21hdGNoZXJ8fCF0ZS5nbWF0Y2hl'@;
put 'ci5tYXRjaChlZSkpfSl9fSwyODg0OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KTtNLmV4cG9ydHM9dWU7dmFyIEk9Uig3MzM0KSxrPVIoMTE3MSksRT1SKDU3MTcpLGo9Uig3MTg3KS5FdmVudEVtaXR0ZXIsVj1SKDI1MjApLEI9Uig5MjgyKSxZPVIoNDA5NSksWD1SKDQ3NTEp'@;
put 'LFU9Uig2NzcyKSxxPVUuc2V0b3B0cyxlZT1VLm93blByb3AsdGU9Uig3ODQ0KSxvZT0oUig5NTM5KSxVLmNoaWxkcmVuSWdub3JlZCksc2U9VS5pc0lnbm9yZWQsaGU9Uig3NzgpO2Z1bmN0aW9uIHVlKGIsRCxIKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRCYmKEg9RCxEPXt9KSxEfHwoRD17'@;
put 'fSksRC5zeW5jKXtpZihIKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYiIpO3JldHVybiBYKGIsRCl9cmV0dXJuIG5ldyBHKGIsRCxIKX11ZS5zeW5jPVg7dmFyIGNlPXVlLkdsb2JTeW5jPVguR2xvYlN5bmM7ZnVuY3Rpb24gRyhiLEQsSCl7aWYo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIEQmJihIPUQsRD1udWxsKSxEJiZELnN5bmMpe2lmKEgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iIik7cmV0dXJuIG5ldyBjZShiLEQpfWlmKCEodGhpcyBpbnN0YW5jZW9mIEcpKXJldHVybiBuZXcgRyhiLEQs'@;
put 'SCk7cSh0aGlzLGIsRCksdGhpcy5fZGlkUmVhbFBhdGg9ITE7dmFyIE49dGhpcy5taW5pbWF0Y2guc2V0Lmxlbmd0aDt0aGlzLm1hdGNoZXM9bmV3IEFycmF5KE4pLCJmdW5jdGlvbiI9PXR5cGVvZiBIJiYoSD1oZShIKSx0aGlzLm9uKCJlcnJvciIsSCksdGhpcy5vbigiZW5kIixmdW5jdGlv'@;
put 'bihwKXtIKG51bGwscCl9KSk7dmFyIGc9dGhpcztpZih0aGlzLl9wcm9jZXNzaW5nPTAsdGhpcy5fZW1pdFF1ZXVlPVtdLHRoaXMuX3Byb2Nlc3NRdWV1ZT1bXSx0aGlzLnBhdXNlZD0hMSx0aGlzLm5vcHJvY2VzcylyZXR1cm4gdGhpcztpZigwPT09TilyZXR1cm4gdigpO2Zvcih2YXIgQz0h'@;
put 'MCxTPTA7UzxOO1MrKyl0aGlzLl9wcm9jZXNzKHRoaXMubWluaW1hdGNoLnNldFtTXSxTLCExLHYpO2Z1bmN0aW9uIHYoKXstLWcuX3Byb2Nlc3NpbmcsZy5fcHJvY2Vzc2luZzw9MCYmKEM/ei5uZXh0VGljayhmdW5jdGlvbigpe2cuX2ZpbmlzaCgpfSk6Zy5fZmluaXNoKCkpfUM9ITF9dWUu'@;
put 'Z2xvYj11ZSx1ZS5oYXNNYWdpYz1mdW5jdGlvbihiLEQpe3ZhciBIPWZ1bmN0aW9uKEMsUyl7aWYobnVsbD09PVN8fCJvYmplY3QiIT10eXBlb2YgUylyZXR1cm4gQztmb3IodmFyIHY9T2JqZWN0LmtleXMoUykscD12Lmxlbmd0aDtwLS07KUNbdltwXV09U1t2W3BdXTtyZXR1cm4gQ30oe30s'@;
put 'RCk7SC5ub3Byb2Nlc3M9ITA7dmFyIE49bmV3IEcoYixIKS5taW5pbWF0Y2guc2V0O2lmKCFiKXJldHVybiExO2lmKE4ubGVuZ3RoPjEpcmV0dXJuITA7Zm9yKHZhciBnPTA7ZzxOWzBdLmxlbmd0aDtnKyspaWYoInN0cmluZyIhPXR5cGVvZiBOWzBdW2ddKXJldHVybiEwO3JldHVybiExfSx1'@;
put 'ZS5HbG9iPUcsRShHLGopLEcucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXtpZihCKHRoaXMgaW5zdGFuY2VvZiBHKSwhdGhpcy5hYm9ydGVkKXtpZih0aGlzLnJlYWxwYXRoJiYhdGhpcy5fZGlkUmVhbHBhdGgpcmV0dXJuIHRoaXMuX3JlYWxwYXRoKCk7VS5maW5pc2godGhpcyksdGhp'@;
put 'cy5lbWl0KCJlbmQiLHRoaXMuZm91bmQpfX0sRy5wcm90b3R5cGUuX3JlYWxwYXRoPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RpZFJlYWxwYXRoKXt0aGlzLl9kaWRSZWFscGF0aD0hMDt2YXIgYj10aGlzLm1hdGNoZXMubGVuZ3RoO2lmKDA9PT1iKXJldHVybiB0aGlzLl9maW5pc2goKTtmb3Io'@;
put 'dmFyIEQ9dGhpcyxIPTA7SDx0aGlzLm1hdGNoZXMubGVuZ3RoO0grKyl0aGlzLl9yZWFscGF0aFNldChILE4pfWZ1bmN0aW9uIE4oKXswPT0tLWImJkQuX2ZpbmlzaCgpfX0sRy5wcm90b3R5cGUuX3JlYWxwYXRoU2V0PWZ1bmN0aW9uKGIsRCl7dmFyIEg9dGhpcy5tYXRjaGVzW2JdO2lmKCFI'@;
put 'KXJldHVybiBEKCk7dmFyIE49T2JqZWN0LmtleXMoSCksZz10aGlzLEM9Ti5sZW5ndGg7aWYoMD09PUMpcmV0dXJuIEQoKTt2YXIgUz10aGlzLm1hdGNoZXNbYl09T2JqZWN0LmNyZWF0ZShudWxsKTtOLmZvckVhY2goZnVuY3Rpb24odixwKXt2PWcuX21ha2VBYnModiksSS5yZWFscGF0aCh2'@;
put 'LGcucmVhbHBhdGhDYWNoZSxmdW5jdGlvbih3LEope3c/InN0YXQiPT09dy5zeXNjYWxsP1Nbdl09ITA6Zy5lbWl0KCJlcnJvciIsdyk6U1tKXT0hMCwwPT0tLUMmJihnLm1hdGNoZXNbYl09UyxEKCkpfSl9KX0sRy5wcm90b3R5cGUuX21hcms9ZnVuY3Rpb24oYil7cmV0dXJuIFUubWFyayh0'@;
put 'aGlzLGIpfSxHLnByb3RvdHlwZS5fbWFrZUFicz1mdW5jdGlvbihiKXtyZXR1cm4gVS5tYWtlQWJzKHRoaXMsYil9LEcucHJvdG90eXBlLmFib3J0PWZ1bmN0aW9uKCl7dGhpcy5hYm9ydGVkPSEwLHRoaXMuZW1pdCgiYWJvcnQiKX0sRy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlz'@;
put 'LnBhdXNlZHx8KHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdCgicGF1c2UiKSl9LEcucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe2lmKHRoaXMucGF1c2VkKXtpZih0aGlzLmVtaXQoInJlc3VtZSIpLHRoaXMucGF1c2VkPSExLHRoaXMuX2VtaXRRdWV1ZS5sZW5ndGgpe3ZhciBiPXRoaXMu'@;
put 'X2VtaXRRdWV1ZS5zbGljZSgwKTt0aGlzLl9lbWl0UXVldWUubGVuZ3RoPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBIPWJbRF07dGhpcy5fZW1pdE1hdGNoKEhbMF0sSFsxXSl9fWlmKHRoaXMuX3Byb2Nlc3NRdWV1ZS5sZW5ndGgpe3ZhciBOPXRoaXMuX3Byb2Nlc3NRdWV1'@;
put 'ZS5zbGljZSgwKTtmb3IodGhpcy5fcHJvY2Vzc1F1ZXVlLmxlbmd0aD0wLEQ9MDtEPE4ubGVuZ3RoO0QrKyl7dmFyIGc9TltEXTt0aGlzLl9wcm9jZXNzaW5nLS0sdGhpcy5fcHJvY2VzcyhnWzBdLGdbMV0sZ1syXSxnWzNdKX19fX0sRy5wcm90b3R5cGUuX3Byb2Nlc3M9ZnVuY3Rpb24oYixE'@;
put 'LEgsTil7aWYoQih0aGlzIGluc3RhbmNlb2YgRyksQigiZnVuY3Rpb24iPT10eXBlb2YgTiksIXRoaXMuYWJvcnRlZClpZih0aGlzLl9wcm9jZXNzaW5nKyssdGhpcy5wYXVzZWQpdGhpcy5fcHJvY2Vzc1F1ZXVlLnB1c2goW2IsRCxILE5dKTtlbHNle2Zvcih2YXIgZyxDPTA7InN0cmluZyI9'@;
put 'PXR5cGVvZiBiW0NdOylDKys7c3dpdGNoKEMpe2Nhc2UgYi5sZW5ndGg6cmV0dXJuIHZvaWQgdGhpcy5fcHJvY2Vzc1NpbXBsZShiLmpvaW4oIi8iKSxELE4pO2Nhc2UgMDpnPW51bGw7YnJlYWs7ZGVmYXVsdDpnPWIuc2xpY2UoMCxDKS5qb2luKCIvIil9dmFyIFMsdj1iLnNsaWNlKEMpO251'@;
put 'bGw9PT1nP1M9Ii4iOigoWShnKXx8WShiLm1hcChmdW5jdGlvbih3KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHc/dzoiWypdIn0pLmpvaW4oIi8iKSkpJiYoZyYmWShnKXx8KGc9Ii8iK2cpKSxTPWcpO3ZhciBwPXRoaXMuX21ha2VBYnMoUyk7aWYob2UodGhpcyxTKSlyZXR1cm4gTigpO3Zb'@;
put 'MF09PT1rLkdMT0JTVEFSP3RoaXMuX3Byb2Nlc3NHbG9iU3RhcihnLFMscCx2LEQsSCxOKTp0aGlzLl9wcm9jZXNzUmVhZGRpcihnLFMscCx2LEQsSCxOKX19LEcucHJvdG90eXBlLl9wcm9jZXNzUmVhZGRpcj1mdW5jdGlvbihiLEQsSCxOLGcsQyxTKXt2YXIgdj10aGlzO3RoaXMuX3JlYWRk'@;
put 'aXIoSCxDLGZ1bmN0aW9uKHAsdyl7cmV0dXJuIHYuX3Byb2Nlc3NSZWFkZGlyMihiLEQsSCxOLGcsQyx3LFMpfSl9LEcucHJvdG90eXBlLl9wcm9jZXNzUmVhZGRpcjI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyx2KXtpZighUylyZXR1cm4gdigpO2Zvcih2YXIgcD1OWzBdLHc9ISF0aGlzLm1p'@;
put 'bmltYXRjaC5uZWdhdGUsbmU9dGhpcy5kb3R8fCIuIj09PXAuX2dsb2IuY2hhckF0KDApLGRlPVtdLGZlPTA7ZmU8Uy5sZW5ndGg7ZmUrKykoIi4iIT09KExlPVNbZmVdKS5jaGFyQXQoMCl8fG5lKSYmKHcmJiFiPyFMZS5tYXRjaChwKTpMZS5tYXRjaChwKSkmJmRlLnB1c2goTGUpO3ZhciB4'@;
put 'ZT1kZS5sZW5ndGg7aWYoMD09PXhlKXJldHVybiB2KCk7aWYoMT09PU4ubGVuZ3RoJiYhdGhpcy5tYXJrJiYhdGhpcy5zdGF0KXtmb3IodGhpcy5tYXRjaGVzW2ddfHwodGhpcy5tYXRjaGVzW2ddPU9iamVjdC5jcmVhdGUobnVsbCkpLGZlPTA7ZmU8eGU7ZmUrKyl7dmFyIExlPWRlW2ZlXTti'@;
put 'JiYoTGU9Ii8iIT09Yj9iKyIvIitMZTpiK0xlKSwiLyIhPT1MZS5jaGFyQXQoMCl8fHRoaXMubm9tb3VudHx8KExlPVYuam9pbih0aGlzLnJvb3QsTGUpKSx0aGlzLl9lbWl0TWF0Y2goZyxMZSl9cmV0dXJuIHYoKX1mb3IoTi5zaGlmdCgpLGZlPTA7ZmU8eGU7ZmUrKylMZT1kZVtmZV0sYiYm'@;
put 'KExlPSIvIiE9PWI/YisiLyIrTGU6YitMZSksdGhpcy5fcHJvY2VzcyhbTGVdLmNvbmNhdChOKSxnLEMsdik7digpfSxHLnByb3RvdHlwZS5fZW1pdE1hdGNoPWZ1bmN0aW9uKGIsRCl7aWYoIXRoaXMuYWJvcnRlZCYmIXNlKHRoaXMsRCkpaWYodGhpcy5wYXVzZWQpdGhpcy5fZW1pdFF1ZXVl'@;
put 'LnB1c2goW2IsRF0pO2Vsc2V7dmFyIEg9WShEKT9EOnRoaXMuX21ha2VBYnMoRCk7aWYodGhpcy5tYXJrJiYoRD10aGlzLl9tYXJrKEQpKSx0aGlzLmFic29sdXRlJiYoRD1IKSwhdGhpcy5tYXRjaGVzW2JdW0RdKXtpZih0aGlzLm5vZGlyKXt2YXIgTj10aGlzLmNhY2hlW0hdO2lmKCJESVIi'@;
put 'PT09Tnx8QXJyYXkuaXNBcnJheShOKSlyZXR1cm59dGhpcy5tYXRjaGVzW2JdW0RdPSEwO3ZhciBnPXRoaXMuc3RhdENhY2hlW0hdO2cmJnRoaXMuZW1pdCgic3RhdCIsRCxnKSx0aGlzLmVtaXQoIm1hdGNoIixEKX19fSxHLnByb3RvdHlwZS5fcmVhZGRpckluR2xvYlN0YXI9ZnVuY3Rpb24o'@;
put 'YixEKXtpZighdGhpcy5hYm9ydGVkKXtpZih0aGlzLmZvbGxvdylyZXR1cm4gdGhpcy5fcmVhZGRpcihiLCExLEQpO3ZhciBIPXRoaXMsTj10ZSgibHN0YXRcMCIrYixmdW5jdGlvbihnLEMpe2lmKGcmJiJFTk9FTlQiPT09Zy5jb2RlKXJldHVybiBEKCk7dmFyIFM9QyYmQy5pc1N5bWJvbGlj'@;
put 'TGluaygpO0guc3ltbGlua3NbYl09UyxTfHwhQ3x8Qy5pc0RpcmVjdG9yeSgpP0guX3JlYWRkaXIoYiwhMSxEKTooSC5jYWNoZVtiXT0iRklMRSIsRCgpKX0pO04mJkguZnMubHN0YXQoYixOKX19LEcucHJvdG90eXBlLl9yZWFkZGlyPWZ1bmN0aW9uKGIsRCxIKXtpZighdGhpcy5hYm9ydGVk'@;
put 'JiYoSD10ZSgicmVhZGRpclwwIitiKyJcMCIrRCxIKSkpe2lmKEQmJiFlZSh0aGlzLnN5bWxpbmtzLGIpKXJldHVybiB0aGlzLl9yZWFkZGlySW5HbG9iU3RhcihiLEgpO2lmKGVlKHRoaXMuY2FjaGUsYikpe3ZhciBOPXRoaXMuY2FjaGVbYl07aWYoIU58fCJGSUxFIj09PU4pcmV0dXJuIEgo'@;
put 'KTtpZihBcnJheS5pc0FycmF5KE4pKXJldHVybiBIKG51bGwsTil9dGhpcy5mcy5yZWFkZGlyKGIsKGc9dGhpcyxDPWIsUz1ILGZ1bmN0aW9uKHYscCl7dj9nLl9yZWFkZGlyRXJyb3IoQyx2LFMpOmcuX3JlYWRkaXJFbnRyaWVzKEMscCxTKX0pKX12YXIgZyxDLFN9LEcucHJvdG90eXBlLl9y'@;
put 'ZWFkZGlyRW50cmllcz1mdW5jdGlvbihiLEQsSCl7aWYoIXRoaXMuYWJvcnRlZCl7aWYoIXRoaXMubWFyayYmIXRoaXMuc3RhdClmb3IodmFyIE49MDtOPEQubGVuZ3RoO04rKyl7dmFyIGc9RFtOXTt0aGlzLmNhY2hlW2c9Ii8iPT09Yj9iK2c6YisiLyIrZ109ITB9cmV0dXJuIHRoaXMuY2Fj'@;
put 'aGVbYl09RCxIKG51bGwsRCl9fSxHLnByb3RvdHlwZS5fcmVhZGRpckVycm9yPWZ1bmN0aW9uKGIsRCxIKXtpZighdGhpcy5hYm9ydGVkKXtzd2l0Y2goRC5jb2RlKXtjYXNlIkVOT1RTVVAiOmNhc2UiRU5PVERJUiI6dmFyIE49dGhpcy5fbWFrZUFicyhiKTtpZih0aGlzLmNhY2hlW05dPSJG'@;
put 'SUxFIixOPT09dGhpcy5jd2RBYnMpe3ZhciBnPW5ldyBFcnJvcihELmNvZGUrIiBpbnZhbGlkIGN3ZCAiK3RoaXMuY3dkKTtnLnBhdGg9dGhpcy5jd2QsZy5jb2RlPUQuY29kZSx0aGlzLmVtaXQoImVycm9yIixnKSx0aGlzLmFib3J0KCl9YnJlYWs7Y2FzZSJFTk9FTlQiOmNhc2UiRUxPT1Ai'@;
put 'OmNhc2UiRU5BTUVUT09MT05HIjpjYXNlIlVOS05PV04iOnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhiKV09ITE7YnJlYWs7ZGVmYXVsdDp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoYildPSExLHRoaXMuc3RyaWN0JiYodGhpcy5lbWl0KCJlcnJvciIsRCksdGhpcy5hYm9ydCgpKSx0aGlz'@;
put 'LnNpbGVudHx8Sy5lcnJvcigiZ2xvYiBlcnJvciIsRCl9cmV0dXJuIEgoKX19LEcucHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXI9ZnVuY3Rpb24oYixELEgsTixnLEMsUyl7dmFyIHY9dGhpczt0aGlzLl9yZWFkZGlyKEgsQyxmdW5jdGlvbihwLHcpe3YuX3Byb2Nlc3NHbG9iU3RhcjIoYixE'@;
put 'LEgsTixnLEMsdyxTKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyMj1mdW5jdGlvbihiLEQsSCxOLGcsQyxTLHYpe2lmKCFTKXJldHVybiB2KCk7dmFyIHA9Ti5zbGljZSgxKSx3PWI/W2JdOltdLEo9dy5jb25jYXQocCk7dGhpcy5fcHJvY2VzcyhKLGcsITEsdik7dmFyIGRlPVMu'@;
put 'bGVuZ3RoO2lmKHRoaXMuc3ltbGlua3NbSF0mJkMpcmV0dXJuIHYoKTtmb3IodmFyIGZlPTA7ZmU8ZGU7ZmUrKylpZigiLiIhPT1TW2ZlXS5jaGFyQXQoMCl8fHRoaXMuZG90KXt2YXIgeGU9dy5jb25jYXQoU1tmZV0scCk7dGhpcy5fcHJvY2Vzcyh4ZSxnLCEwLHYpO3ZhciBMZT13LmNvbmNh'@;
put 'dChTW2ZlXSxOKTt0aGlzLl9wcm9jZXNzKExlLGcsITAsdil9digpfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpczt0aGlzLl9zdGF0KGIsZnVuY3Rpb24oZyxDKXtOLl9wcm9jZXNzU2ltcGxlMihiLEQsZyxDLEgpfSl9LEcucHJvdG90eXBl'@;
put 'Ll9wcm9jZXNzU2ltcGxlMj1mdW5jdGlvbihiLEQsSCxOLGcpe2lmKHRoaXMubWF0Y2hlc1tEXXx8KHRoaXMubWF0Y2hlc1tEXT1PYmplY3QuY3JlYXRlKG51bGwpKSwhTilyZXR1cm4gZygpO2lmKGImJlkoYikmJiF0aGlzLm5vbW91bnQpe3ZhciBDPS9bXC9cXF0kLy50ZXN0KGIpOyIvIj09'@;
put 'PWIuY2hhckF0KDApP2I9Vi5qb2luKHRoaXMucm9vdCxiKTooYj1WLnJlc29sdmUodGhpcy5yb290LGIpLEMmJihiKz0iLyIpKX0id2luMzIiPT09ei5wbGF0Zm9ybSYmKGI9Yi5yZXBsYWNlKC9cXC9nLCIvIikpLHRoaXMuX2VtaXRNYXRjaChELGIpLGcoKX0sRy5wcm90b3R5cGUuX3N0YXQ9'@;
put 'ZnVuY3Rpb24oYixEKXt2YXIgSD10aGlzLl9tYWtlQWJzKGIpLE49Ii8iPT09Yi5zbGljZSgtMSk7aWYoYi5sZW5ndGg+dGhpcy5tYXhMZW5ndGgpcmV0dXJuIEQoKTtpZighdGhpcy5zdGF0JiZlZSh0aGlzLmNhY2hlLEgpKXt2YXIgZz10aGlzLmNhY2hlW0hdO2lmKEFycmF5LmlzQXJyYXko'@;
put 'ZykmJihnPSJESVIiKSwhTnx8IkRJUiI9PT1nKXJldHVybiBEKG51bGwsZyk7aWYoTiYmIkZJTEUiPT09ZylyZXR1cm4gRCgpfXZhciBDPXRoaXMuc3RhdENhY2hlW0hdO2lmKHZvaWQgMCE9PUMpe2lmKCExPT09QylyZXR1cm4gRChudWxsLEMpO3ZhciBTPUMuaXNEaXJlY3RvcnkoKT8iRElS'@;
put 'IjoiRklMRSI7cmV0dXJuIE4mJiJGSUxFIj09PVM/RCgpOkQobnVsbCxTLEMpfXZhciB2PXRoaXMscD10ZSgic3RhdFwwIitILGZ1bmN0aW9uKHcsSil7aWYoSiYmSi5pc1N5bWJvbGljTGluaygpKXJldHVybiB2LmZzLnN0YXQoSCxmdW5jdGlvbihuZSxkZSl7bmU/di5fc3RhdDIoYixILG51'@;
put 'bGwsSixEKTp2Ll9zdGF0MihiLEgsbmUsZGUsRCl9KTt2Ll9zdGF0MihiLEgsdyxKLEQpfSk7cCYmdi5mcy5sc3RhdChILHApfSxHLnByb3RvdHlwZS5fc3RhdDI9ZnVuY3Rpb24oYixELEgsTixnKXtpZihIJiYoIkVOT0VOVCI9PT1ILmNvZGV8fCJFTk9URElSIj09PUguY29kZSkpcmV0dXJu'@;
put 'IHRoaXMuc3RhdENhY2hlW0RdPSExLGcoKTt2YXIgQz0iLyI9PT1iLnNsaWNlKC0xKTtpZih0aGlzLnN0YXRDYWNoZVtEXT1OLCIvIj09PUQuc2xpY2UoLTEpJiZOJiYhTi5pc0RpcmVjdG9yeSgpKXJldHVybiBnKG51bGwsITEsTik7dmFyIFM9ITA7cmV0dXJuIE4mJihTPU4uaXNEaXJlY3Rv'@;
put 'cnkoKT8iRElSIjoiRklMRSIpLHRoaXMuY2FjaGVbRF09dGhpcy5jYWNoZVtEXXx8UyxDJiYiRklMRSI9PT1TP2coKTpnKG51bGwsUyxOKX19LDQ3NTE6KE0sTyxSKT0+e3ZhciB6PVIoNTEwOCksSz1SKDQxNTUpO00uZXhwb3J0cz1lZSxlZS5HbG9iU3luYz10ZTt2YXIgST1SKDczMzQpLGs9'@;
put 'UigxMTcxKSxFPShSKDI4ODQpLFIoOTUzOSksUigyNTIwKSksaj1SKDkyODIpLFY9Uig0MDk1KSxCPVIoNjc3MiksWT1CLnNldG9wdHMsWD1CLm93blByb3AsVT1CLmNoaWxkcmVuSWdub3JlZCxxPUIuaXNJZ25vcmVkO2Z1bmN0aW9uIGVlKG9lLHNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'c2V8fDM9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYlxuU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvMTY3Iik7cmV0dXJuIG5ldyB0ZShvZSxzZSkuZm91bmR9ZnVuY3Rp'@;
put 'b24gdGUob2Usc2Upe2lmKCFvZSl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBwYXR0ZXJuIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwzPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2JcblNlZTog'@;
put 'aHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzE2NyIpO2lmKCEodGhpcyBpbnN0YW5jZW9mIHRlKSlyZXR1cm4gbmV3IHRlKG9lLHNlKTtpZihZKHRoaXMsb2Usc2UpLHRoaXMubm9wcm9jZXNzKXJldHVybiB0aGlzO3ZhciBoZT10aGlzLm1pbmltYXRjaC5zZXQu'@;
put 'bGVuZ3RoO3RoaXMubWF0Y2hlcz1uZXcgQXJyYXkoaGUpO2Zvcih2YXIgdWU9MDt1ZTxoZTt1ZSsrKXRoaXMuX3Byb2Nlc3ModGhpcy5taW5pbWF0Y2guc2V0W3VlXSx1ZSwhMSk7dGhpcy5fZmluaXNoKCl9dGUucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXtpZihqLm9rKHRoaXMgaW5z'@;
put 'dGFuY2VvZiB0ZSksdGhpcy5yZWFscGF0aCl7dmFyIG9lPXRoaXM7dGhpcy5tYXRjaGVzLmZvckVhY2goZnVuY3Rpb24oc2UsaGUpe3ZhciB1ZT1vZS5tYXRjaGVzW2hlXT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgY2UgaW4gc2UpdHJ5e2NlPW9lLl9tYWtlQWJzKGNlKSx1ZVtJLnJl'@;
put 'YWxwYXRoU3luYyhjZSxvZS5yZWFscGF0aENhY2hlKV09ITB9Y2F0Y2goRyl7aWYoInN0YXQiIT09Ry5zeXNjYWxsKXRocm93IEc7dWVbb2UuX21ha2VBYnMoY2UpXT0hMH19KX1CLmZpbmlzaCh0aGlzKX0sdGUucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKG9lLHNlLGhlKXtqLm9rKHRo'@;
put 'aXMgaW5zdGFuY2VvZiB0ZSk7Zm9yKHZhciB1ZSxjZT0wOyJzdHJpbmciPT10eXBlb2Ygb2VbY2VdOyljZSsrO3N3aXRjaChjZSl7Y2FzZSBvZS5sZW5ndGg6cmV0dXJuIHZvaWQgdGhpcy5fcHJvY2Vzc1NpbXBsZShvZS5qb2luKCIvIiksc2UpO2Nhc2UgMDp1ZT1udWxsO2JyZWFrO2RlZmF1'@;
put 'bHQ6dWU9b2Uuc2xpY2UoMCxjZSkuam9pbigiLyIpfXZhciBHLGI9b2Uuc2xpY2UoY2UpO251bGw9PT11ZT9HPSIuIjooKFYodWUpfHxWKG9lLm1hcChmdW5jdGlvbihIKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEg/SDoiWypdIn0pLmpvaW4oIi8iKSkpJiYodWUmJlYodWUpfHwodWU9Ii8i'@;
put 'K3VlKSksRz11ZSk7dmFyIEQ9dGhpcy5fbWFrZUFicyhHKTtVKHRoaXMsRyl8fChiWzBdPT09ay5HTE9CU1RBUj90aGlzLl9wcm9jZXNzR2xvYlN0YXIodWUsRyxELGIsc2UsaGUpOnRoaXMuX3Byb2Nlc3NSZWFkZGlyKHVlLEcsRCxiLHNlLGhlKSl9LHRlLnByb3RvdHlwZS5fcHJvY2Vzc1Jl'@;
put 'YWRkaXI9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7dmFyIGI9dGhpcy5fcmVhZGRpcihoZSxHKTtpZihiKXtmb3IodmFyIEQ9dWVbMF0sSD0hIXRoaXMubWluaW1hdGNoLm5lZ2F0ZSxnPXRoaXMuZG90fHwiLiI9PT1ELl9nbG9iLmNoYXJBdCgwKSxDPVtdLFM9MDtTPGIubGVuZ3RoO1Mr'@;
put 'KykoIi4iIT09KHc9YltTXSkuY2hhckF0KDApfHxnKSYmKEgmJiFvZT8hdy5tYXRjaChEKTp3Lm1hdGNoKEQpKSYmQy5wdXNoKHcpO3ZhciB2PUMubGVuZ3RoO2lmKDAhPT12KWlmKDEhPT11ZS5sZW5ndGh8fHRoaXMubWFya3x8dGhpcy5zdGF0KWZvcih1ZS5zaGlmdCgpLFM9MDtTPHY7Uysr'@;
put 'KXc9Q1tTXSx0aGlzLl9wcm9jZXNzKChvZT9bb2Usd106W3ddKS5jb25jYXQodWUpLGNlLEcpO2Vsc2UgZm9yKHRoaXMubWF0Y2hlc1tjZV18fCh0aGlzLm1hdGNoZXNbY2VdPU9iamVjdC5jcmVhdGUobnVsbCkpLFM9MDtTPHY7UysrKXt2YXIgdz1DW1NdO29lJiYodz0iLyIhPT1vZS5zbGlj'@;
put 'ZSgtMSk/b2UrIi8iK3c6b2UrdyksIi8iIT09dy5jaGFyQXQoMCl8fHRoaXMubm9tb3VudHx8KHc9RS5qb2luKHRoaXMucm9vdCx3KSksdGhpcy5fZW1pdE1hdGNoKGNlLHcpfX19LHRlLnByb3RvdHlwZS5fZW1pdE1hdGNoPWZ1bmN0aW9uKG9lLHNlKXtpZighcSh0aGlzLHNlKSl7dmFyIGhl'@;
put 'PXRoaXMuX21ha2VBYnMoc2UpO2lmKHRoaXMubWFyayYmKHNlPXRoaXMuX21hcmsoc2UpKSx0aGlzLmFic29sdXRlJiYoc2U9aGUpLCF0aGlzLm1hdGNoZXNbb2VdW3NlXSl7aWYodGhpcy5ub2Rpcil7dmFyIHVlPXRoaXMuY2FjaGVbaGVdO2lmKCJESVIiPT09dWV8fEFycmF5LmlzQXJyYXko'@;
put 'dWUpKXJldHVybn10aGlzLm1hdGNoZXNbb2VdW3NlXT0hMCx0aGlzLnN0YXQmJnRoaXMuX3N0YXQoc2UpfX19LHRlLnByb3RvdHlwZS5fcmVhZGRpckluR2xvYlN0YXI9ZnVuY3Rpb24ob2Upe2lmKHRoaXMuZm9sbG93KXJldHVybiB0aGlzLl9yZWFkZGlyKG9lLCExKTt2YXIgc2UsaGU7dHJ5'@;
put 'e2hlPXRoaXMuZnMubHN0YXRTeW5jKG9lKX1jYXRjaChjZSl7aWYoIkVOT0VOVCI9PT1jZS5jb2RlKXJldHVybiBudWxsfXZhciB1ZT1oZSYmaGUuaXNTeW1ib2xpY0xpbmsoKTtyZXR1cm4gdGhpcy5zeW1saW5rc1tvZV09dWUsdWV8fCFoZXx8aGUuaXNEaXJlY3RvcnkoKT9zZT10aGlzLl9y'@;
put 'ZWFkZGlyKG9lLCExKTp0aGlzLmNhY2hlW29lXT0iRklMRSIsc2V9LHRlLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbihvZSxzZSl7aWYoc2UmJiFYKHRoaXMuc3ltbGlua3Msb2UpKXJldHVybiB0aGlzLl9yZWFkZGlySW5HbG9iU3RhcihvZSk7aWYoWCh0aGlzLmNhY2hlLG9lKSl7dmFy'@;
put 'IGhlPXRoaXMuY2FjaGVbb2VdO2lmKCFoZXx8IkZJTEUiPT09aGUpcmV0dXJuIG51bGw7aWYoQXJyYXkuaXNBcnJheShoZSkpcmV0dXJuIGhlfXRyeXtyZXR1cm4gdGhpcy5fcmVhZGRpckVudHJpZXMob2UsdGhpcy5mcy5yZWFkZGlyU3luYyhvZSkpfWNhdGNoKHVlKXtyZXR1cm4gdGhpcy5f'@;
put 'cmVhZGRpckVycm9yKG9lLHVlKSxudWxsfX0sdGUucHJvdG90eXBlLl9yZWFkZGlyRW50cmllcz1mdW5jdGlvbihvZSxzZSl7aWYoIXRoaXMubWFyayYmIXRoaXMuc3RhdClmb3IodmFyIGhlPTA7aGU8c2UubGVuZ3RoO2hlKyspe3ZhciB1ZT1zZVtoZV07dGhpcy5jYWNoZVt1ZT0iLyI9PT1v'@;
put 'ZT9vZSt1ZTpvZSsiLyIrdWVdPSEwfXJldHVybiB0aGlzLmNhY2hlW29lXT1zZSxzZX0sdGUucHJvdG90eXBlLl9yZWFkZGlyRXJyb3I9ZnVuY3Rpb24ob2Usc2Upe3N3aXRjaChzZS5jb2RlKXtjYXNlIkVOT1RTVVAiOmNhc2UiRU5PVERJUiI6dmFyIGhlPXRoaXMuX21ha2VBYnMob2UpO2lm'@;
put 'KHRoaXMuY2FjaGVbaGVdPSJGSUxFIixoZT09PXRoaXMuY3dkQWJzKXt2YXIgdWU9bmV3IEVycm9yKHNlLmNvZGUrIiBpbnZhbGlkIGN3ZCAiK3RoaXMuY3dkKTt0aHJvdyB1ZS5wYXRoPXRoaXMuY3dkLHVlLmNvZGU9c2UuY29kZSx1ZX1icmVhaztjYXNlIkVOT0VOVCI6Y2FzZSJFTE9PUCI6'@;
put 'Y2FzZSJFTkFNRVRPT0xPTkciOmNhc2UiVU5LTk9XTiI6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKG9lKV09ITE7YnJlYWs7ZGVmYXVsdDppZih0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMob2UpXT0hMSx0aGlzLnN0cmljdCl0aHJvdyBzZTt0aGlzLnNpbGVudHx8ei5lcnJvcigiZ2xvYiBl'@;
put 'cnJvciIsc2UpfX0sdGUucHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXI9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyl7dmFyIGI9dGhpcy5fcmVhZGRpcihoZSxHKTtpZihiKXt2YXIgRD11ZS5zbGljZSgxKSxIPW9lP1tvZV06W10sTj1ILmNvbmNhdChEKTt0aGlzLl9wcm9jZXNzKE4sY2Us'@;
put 'ITEpO3ZhciBnPWIubGVuZ3RoO2lmKCF0aGlzLnN5bWxpbmtzW2hlXXx8IUcpZm9yKHZhciBDPTA7QzxnO0MrKylpZigiLiIhPT1iW0NdLmNoYXJBdCgwKXx8dGhpcy5kb3Qpe3ZhciBTPUguY29uY2F0KGJbQ10sRCk7dGhpcy5fcHJvY2VzcyhTLGNlLCEwKTt2YXIgdj1ILmNvbmNhdChiW0Nd'@;
put 'LHVlKTt0aGlzLl9wcm9jZXNzKHYsY2UsITApfX19LHRlLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZT1mdW5jdGlvbihvZSxzZSl7dmFyIGhlPXRoaXMuX3N0YXQob2UpO2lmKHRoaXMubWF0Y2hlc1tzZV18fCh0aGlzLm1hdGNoZXNbc2VdPU9iamVjdC5jcmVhdGUobnVsbCkpLGhlKXtpZihv'@;
put 'ZSYmVihvZSkmJiF0aGlzLm5vbW91bnQpe3ZhciB1ZT0vW1wvXFxdJC8udGVzdChvZSk7Ii8iPT09b2UuY2hhckF0KDApP29lPUUuam9pbih0aGlzLnJvb3Qsb2UpOihvZT1FLnJlc29sdmUodGhpcy5yb290LG9lKSx1ZSYmKG9lKz0iLyIpKX0id2luMzIiPT09Sy5wbGF0Zm9ybSYmKG9lPW9l'@;
put 'LnJlcGxhY2UoL1xcL2csIi8iKSksdGhpcy5fZW1pdE1hdGNoKHNlLG9lKX19LHRlLnByb3RvdHlwZS5fc3RhdD1mdW5jdGlvbihvZSl7dmFyIHNlPXRoaXMuX21ha2VBYnMob2UpLGhlPSIvIj09PW9lLnNsaWNlKC0xKTtpZihvZS5sZW5ndGg+dGhpcy5tYXhMZW5ndGgpcmV0dXJuITE7aWYo'@;
put 'IXRoaXMuc3RhdCYmWCh0aGlzLmNhY2hlLHNlKSl7dmFyIHVlPXRoaXMuY2FjaGVbc2VdO2lmKEFycmF5LmlzQXJyYXkodWUpJiYodWU9IkRJUiIpLCFoZXx8IkRJUiI9PT11ZSlyZXR1cm4gdWU7aWYoaGUmJiJGSUxFIj09PXVlKXJldHVybiExfXZhciBjZT10aGlzLnN0YXRDYWNoZVtzZV07'@;
put 'aWYoIWNlKXt2YXIgRzt0cnl7Rz10aGlzLmZzLmxzdGF0U3luYyhzZSl9Y2F0Y2goYil7aWYoYiYmKCJFTk9FTlQiPT09Yi5jb2RlfHwiRU5PVERJUiI9PT1iLmNvZGUpKXJldHVybiB0aGlzLnN0YXRDYWNoZVtzZV09ITEsITF9aWYoRyYmRy5pc1N5bWJvbGljTGluaygpKXRyeXtjZT10aGlz'@;
put 'LmZzLnN0YXRTeW5jKHNlKX1jYXRjaHtjZT1HfWVsc2UgY2U9R31yZXR1cm4gdGhpcy5zdGF0Q2FjaGVbc2VdPWNlLHVlPSEwLGNlJiYodWU9Y2UuaXNEaXJlY3RvcnkoKT8iRElSIjoiRklMRSIpLHRoaXMuY2FjaGVbc2VdPXRoaXMuY2FjaGVbc2VdfHx1ZSwoIWhlfHwiRklMRSIhPT11ZSkm'@;
put 'JnVlfSx0ZS5wcm90b3R5cGUuX21hcms9ZnVuY3Rpb24ob2Upe3JldHVybiBCLm1hcmsodGhpcyxvZSl9LHRlLnByb3RvdHlwZS5fbWFrZUFicz1mdW5jdGlvbihvZSl7cmV0dXJuIEIubWFrZUFicyh0aGlzLG9lKX19LDcyOTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDIxMCko'@;
put 'IiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSIsITApO2lmKHopdHJ5e3ooW10sImxlbmd0aCIpfWNhdGNoe3o9bnVsbH1NLmV4cG9ydHM9en0sNjQ1ODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihSKXtpZihudWxsPT09Unx8Im9iamVjdCIhPXR5cGVvZiBS'@;
put 'KXJldHVybiBSO2lmKFIgaW5zdGFuY2VvZiBPYmplY3QpdmFyIHo9e19fcHJvdG9fXzpPKFIpfTtlbHNlIHo9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoUikuZm9yRWFjaChmdW5jdGlvbihLKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeixL'@;
put 'LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUixLKSl9KSx6fTt2YXIgTz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKFIpe3JldHVybiBSLl9fcHJvdG9fX319LDc3OihNLE8sUik9Pnt2YXIgeixLLEk9Uig0MTU1KSxrPVIoNTEwOCksRT1SKDU0NDMpLGo9UigyMTYx'@;
put 'KSxWPVIoODUyMCksQj1SKDY0NTgpLFk9Uig5NTM5KTtmdW5jdGlvbiBYKHVlLGNlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodWUseix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNlfX0pfSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yPyh6'@;
put 'PVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnF1ZXVlIiksSz1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5wcmV2aW91cyIpKTooej0iX19fZ3JhY2VmdWwtZnMucXVldWUiLEs9Il9fX2dyYWNlZnVsLWZzLnByZXZpb3VzIik7dmFyIFUscT1mdW5jdGlvbigpe307ZnVuY3Rpb24gdGUodWUpe2oo'@;
put 'dWUpLHVlLmdyYWNlZnVsaWZ5PXRlLHVlLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24oZmUseGUpe3JldHVybiBuZXcgdWUuUmVhZFN0cmVhbShmZSx4ZSl9LHVlLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uKGZlLHhlKXtyZXR1cm4gbmV3IHVlLldyaXRlU3RyZWFtKGZlLHhlKX07dmFy'@;
put 'IGNlPXVlLnJlYWRGaWxlO3VlLnJlYWRGaWxlPWZ1bmN0aW9uKGZlLHhlLExlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGUmJihMZT14ZSx4ZT1udWxsKSxmdW5jdGlvbiBGZShPZSxqZSxXZSxLZSl7cmV0dXJuIGNlKE9lLGplLGZ1bmN0aW9uKFllKXshWWV8fCJFTUZJTEUiIT09WWUu'@;
put 'Y29kZSYmIkVORklMRSIhPT1ZZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBXZSYmV2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtGZSxbT2UsamUsV2VdLFllLEtlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxMZSl9O3ZhciBHPXVlLndyaXRlRmlsZTt1ZS53cml0ZUZp'@;
put 'bGU9ZnVuY3Rpb24oZmUseGUsTGUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMZSYmKEZlPUxlLExlPW51bGwpLGZ1bmN0aW9uIE9lKGplLFdlLEtlLFllLFFlKXtyZXR1cm4gRyhqZSxXZSxLZSxmdW5jdGlvbihsdCl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09'@;
put 'bHQuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxsdCxRZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfTt2YXIgYj11ZS5hcHBlbmRGaWxlO2ImJih1ZS5hcHBlbmRGaWxlPWZ1'@;
put 'bmN0aW9uKGZlLHhlLExlLEZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTGUmJihGZT1MZSxMZT1udWxsKSxmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSxRZSl7cmV0dXJuIGIoamUsV2UsS2UsZnVuY3Rpb24obHQpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNv'@;
put 'ZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZZV0sbHQsUWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLExlLEZlKX0pO3ZhciBEPXVlLmNvcHlGaWxlO0QmJih1ZS5jb3B5RmlsZT1mdW5jdGlvbihm'@;
put 'ZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9MCksZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUsUWUpe3JldHVybiBEKGplLFdlLEtlLGZ1bmN0aW9uKGx0KXshbHR8fCJFTUZJTEUiIT09bHQuY29kZSYmIkVORklMRSIhPT1sdC5jb2RlPyJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBZZSYmWWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbamUsV2UsS2UsWWVdLGx0LFFlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxMZSxGZSl9KTt2YXIgSD11ZS5yZWFkZGlyO3VlLnJlYWRkaXI9ZnVuY3Rpb24oZmUseGUsTGUpeyJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiB4ZSYmKExlPXhlLHhlPW51bGwpO3ZhciBGZT1OLnRlc3QoSS52ZXJzaW9uKT9mdW5jdGlvbihqZSxXZSxLZSxZZSl7cmV0dXJuIEgoamUsT2UoamUsV2UsS2UsWWUpKX06ZnVuY3Rpb24oamUsV2UsS2UsWWUpe3JldHVybiBIKGplLFdlLE9lKGplLFdlLEtlLFllKSl9O3Jl'@;
put 'dHVybiBGZShmZSx4ZSxMZSk7ZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUpe3JldHVybiBmdW5jdGlvbihRZSxsdCl7IVFlfHwiRU1GSUxFIiE9PVFlLmNvZGUmJiJFTkZJTEUiIT09UWUuY29kZT8obHQmJmx0LnNvcnQmJmx0LnNvcnQoKSwiZnVuY3Rpb24iPT10eXBlb2YgS2UmJktlLmNhbGwo'@;
put 'dGhpcyxRZSxsdCkpOm9lKFtGZSxbamUsV2UsS2VdLFFlLFllfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgTj0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBnPVYodWUpO3c9Zy5SZWFkU3RyZWFtLEo9Zy5Xcml0ZVN0cmVhbX12YXIg'@;
put 'Qz11ZS5SZWFkU3RyZWFtO0MmJih3LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlKSx3LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7ZGUoZmUucGF0aCxmZS5mbGFncyxmZS5tb2RlLGZ1bmN0aW9uKHhlLExlKXt4ZT8oZmUuYXV0b0Nsb3NlJiZmZS5k'@;
put 'ZXN0cm95KCksZmUuZW1pdCgiZXJyb3IiLHhlKSk6KGZlLmZkPUxlLGZlLmVtaXQoIm9wZW4iLExlKSxmZS5yZWFkKCkpfSl9KTt2YXIgUz11ZS5Xcml0ZVN0cmVhbTtTJiYoSi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSksSi5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigp'@;
put 'e3ZhciBmZT10aGlzO2RlKGZlLnBhdGgsZmUuZmxhZ3MsZmUubW9kZSxmdW5jdGlvbih4ZSxMZSl7eGU/KGZlLmRlc3Ryb3koKSxmZS5lbWl0KCJlcnJvciIseGUpKTooZmUuZmQ9TGUsZmUuZW1pdCgib3BlbiIsTGUpKX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJSZWFkU3RyZWFt'@;
put 'Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHNldDpmdW5jdGlvbihmZSl7dz1mZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIldyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEp9LHNldDpmdW5jdGlvbihmZSl7'@;
put 'Sj1mZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgdj13O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiRmlsZVJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdn0sc2V0OmZ1bmN0aW9uKGZlKXt2PWZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MH0pO3ZhciBwPUo7ZnVuY3Rpb24gdyhmZSx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB3PyhDLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTp3LmFwcGx5KE9iamVjdC5jcmVhdGUody5wcm90b3R5cGUpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSihmZSx4ZSl7cmV0dXJuIHRoaXMgaW5z'@;
put 'dGFuY2VvZiBKPyhTLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpKLmFwcGx5KE9iamVjdC5jcmVhdGUoSi5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH0sc2V0OmZ1bmN0'@;
put 'aW9uKGZlKXtwPWZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBuZT11ZS5vcGVuO2Z1bmN0aW9uIGRlKGZlLHhlLExlLEZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTGUmJihGZT1MZSxMZT1udWxsKSxmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSxRZSl7cmV0dXJu'@;
put 'IG5lKGplLFdlLEtlLGZ1bmN0aW9uKGx0LFBlKXshbHR8fCJFTUZJTEUiIT09bHQuY29kZSYmIkVORklMRSIhPT1sdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBZZSYmWWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbamUsV2UsS2UsWWVdLGx0LFFlfHxEYXRlLm5vdygpLERhdGUu'@;
put 'bm93KCldKX0pfShmZSx4ZSxMZSxGZSl9cmV0dXJuIHVlLm9wZW49ZGUsdWV9ZnVuY3Rpb24gb2UodWUpe3EoIkVOUVVFVUUiLHVlWzBdLm5hbWUsdWVbMV0pLEVbel0ucHVzaCh1ZSksaGUoKX1mdW5jdGlvbiBzZSgpe2Zvcih2YXIgdWU9RGF0ZS5ub3coKSxjZT0wO2NlPEVbel0ubGVuZ3Ro'@;
put 'OysrY2UpRVt6XVtjZV0ubGVuZ3RoPjImJihFW3pdW2NlXVszXT11ZSxFW3pdW2NlXVs0XT11ZSk7aGUoKX1mdW5jdGlvbiBoZSgpe2lmKGNsZWFyVGltZW91dChVKSxVPXZvaWQgMCwwIT09RVt6XS5sZW5ndGgpe3ZhciB1ZT1FW3pdLnNoaWZ0KCksY2U9dWVbMF0sRz11ZVsxXSxiPXVlWzJd'@;
put 'LEQ9dWVbM10sSD11ZVs0XTtpZih2b2lkIDA9PT1EKXEoIlJFVFJZIixjZS5uYW1lLEcpLGNlLmFwcGx5KG51bGwsRyk7ZWxzZSBpZihEYXRlLm5vdygpLUQ+PTZlNCl7cSgiVElNRU9VVCIsY2UubmFtZSxHKTt2YXIgTj1HLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBOJiZOLmNhbGwobnVs'@;
put 'bCxiKX1lbHNle3ZhciBnPURhdGUubm93KCktSCxDPU1hdGgubWF4KEgtRCwxKTtnPj1NYXRoLm1pbigxLjIqQywxMDApPyhxKCJSRVRSWSIsY2UubmFtZSxHKSxjZS5hcHBseShudWxsLEcuY29uY2F0KFtEXSkpKTpFW3pdLnB1c2godWUpfXZvaWQgMD09PVUmJihVPXNldFRpbWVvdXQoaGUs'@;
put 'MCkpfX1ZLmRlYnVnbG9nP3E9WS5kZWJ1Z2xvZygiZ2ZzNCIpOi9cYmdmczRcYi9pLnRlc3QoSS5lbnYuTk9ERV9ERUJVR3x8IiIpJiYocT1mdW5jdGlvbigpe3ZhciB1ZT1ZLmZvcm1hdC5hcHBseShZLGFyZ3VtZW50cyk7dWU9IkdGUzQ6ICIrdWUuc3BsaXQoL1xuLykuam9pbigiXG5HRlM0'@;
put 'OiAiKSxrLmVycm9yKHVlKX0pLEVbel18fChYKEUsUi5nW3pdfHxbXSksRS5jbG9zZT1mdW5jdGlvbih1ZSl7ZnVuY3Rpb24gY2UoRyxiKXtyZXR1cm4gdWUuY2FsbChFLEcsZnVuY3Rpb24oRCl7RHx8c2UoKSwiZnVuY3Rpb24iPT10eXBlb2YgYiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9'@;
put 'KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLEsse3ZhbHVlOnVlfSksY2V9KEUuY2xvc2UpLEUuY2xvc2VTeW5jPWZ1bmN0aW9uKHVlKXtmdW5jdGlvbiBjZShHKXt1ZS5hcHBseShFLGFyZ3VtZW50cyksc2UoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLEsse3Zh'@;
put 'bHVlOnVlfSksY2V9KEUuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtxKEVbel0pLFIoOTI4MikuZXF1YWwoRVt6XS5sZW5ndGgsMCl9KSksUi5nW3pdfHxYKFIuZyxFW3pdKSxNLmV4cG9ydHM9dGUoQihF'@;
put 'KSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFFLl9fcGF0Y2hlZCYmKE0uZXhwb3J0cz10ZShFKSxFLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDI4MzApLlN0cmVhbTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSl7cmV0dXJue1Jl'@;
put 'YWRTdHJlYW06ZnVuY3Rpb24gayhFLGope2lmKCEodGhpcyBpbnN0YW5jZW9mIGspKXJldHVybiBuZXcgayhFLGopO0suY2FsbCh0aGlzKTt2YXIgVj10aGlzO3RoaXMucGF0aD1FLHRoaXMuZmQ9bnVsbCx0aGlzLnJlYWRhYmxlPSEwLHRoaXMucGF1c2VkPSExLHRoaXMuZmxhZ3M9InIiLHRo'@;
put 'aXMubW9kZT00MzgsdGhpcy5idWZmZXJTaXplPTY1NTM2LGo9anx8e307Zm9yKHZhciBCPU9iamVjdC5rZXlzKGopLFk9MCxYPUIubGVuZ3RoO1k8WDtZKyspe3ZhciBVPUJbWV07dGhpc1tVXT1qW1VdfWlmKHRoaXMuZW5jb2RpbmcmJnRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyks'@;
put 'dm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHZvaWQgMD09PXRoaXMuZW5kKXRoaXMuZW5kPTEvMDtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5lbmQpdGhy'@;
put 'b3cgVHlwZUVycm9yKCJlbmQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ+dGhpcy5lbmQpdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlIDw9IGVuZCIpO3RoaXMucG9zPXRoaXMuc3RhcnR9bnVsbD09PXRoaXMuZmQ/SS5vcGVuKHRoaXMucGF0aCx0aGlzLmZsYWdzLHRo'@;
put 'aXMubW9kZSxmdW5jdGlvbihxLGVlKXtpZihxKXJldHVybiBWLmVtaXQoImVycm9yIixxKSx2b2lkKFYucmVhZGFibGU9ITEpO1YuZmQ9ZWUsVi5lbWl0KCJvcGVuIixlZSksVi5fcmVhZCgpfSk6ei5uZXh0VGljayhmdW5jdGlvbigpe1YuX3JlYWQoKX0pfSxXcml0ZVN0cmVhbTpmdW5jdGlv'@;
put 'biBrKEUsail7aWYoISh0aGlzIGluc3RhbmNlb2YgaykpcmV0dXJuIG5ldyBrKEUsaik7Sy5jYWxsKHRoaXMpLHRoaXMucGF0aD1FLHRoaXMuZmQ9bnVsbCx0aGlzLndyaXRhYmxlPSEwLHRoaXMuZmxhZ3M9InciLHRoaXMuZW5jb2Rpbmc9ImJpbmFyeSIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ5'@;
put 'dGVzV3JpdHRlbj0wLGo9anx8e307Zm9yKHZhciBWPU9iamVjdC5rZXlzKGopLEI9MCxZPVYubGVuZ3RoO0I8WTtCKyspe3ZhciBYPVZbQl07dGhpc1tYXT1qW1hdfWlmKHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3Io'@;
put 'InN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PDApdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlID49IHplcm8iKTt0aGlzLnBvcz10aGlzLnN0YXJ0fXRoaXMuYnVzeT0hMSx0aGlzLl9xdWV1ZT1bXSxudWxsPT09dGhpcy5mZCYmKHRoaXMuX29wZW49SS5vcGVu'@;
put 'LHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sdGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLHZvaWQgMF0pLHRoaXMuZmx1c2goKSl9fX19LDIxNjE6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDMyMDgpLEk9ei5jd2Qsaz1udWxsLEU9ei5lbnYuR1JBQ0VGVUxfRlNfUExB'@;
put 'VEZPUk18fHoucGxhdGZvcm07ei5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4ga3x8KGs9SS5jYWxsKHopKSxrfTt0cnl7ei5jd2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIHouY2hkaXIpe3ZhciBqPXouY2hkaXI7ei5jaGRpcj1mdW5jdGlvbihWKXtrPW51bGwsai5jYWxsKHosVil9'@;
put 'LE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKHouY2hkaXIsail9TS5leHBvcnRzPWZ1bmN0aW9uKFYpe3ZhciBzZSxvZTtmdW5jdGlvbiBCKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlKXtyZXR1cm4gc2UuY2FsbChWLGhlLHVlLGZ1bmN0aW9u'@;
put 'KEcpe3RlKEcpJiYoRz1udWxsKSxjZSYmY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFkoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUpe3RyeXtyZXR1cm4gc2UuY2FsbChWLGhlLHVlKX1jYXRjaChjZSl7aWYoIXRlKGNlKSl0aHJvdyBjZX19fWZ1bmN0aW9uIFgo'@;
put 'c2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2UsRyl7cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSxjZSxmdW5jdGlvbihiKXt0ZShiKSYmKGI9bnVsbCksRyYmRy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gVShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSl7'@;
put 'dHJ5e3JldHVybiBzZS5jYWxsKFYsaGUsdWUsY2UpfWNhdGNoKEcpe2lmKCF0ZShHKSl0aHJvdyBHfX19ZnVuY3Rpb24gcShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSl7ZnVuY3Rpb24gRyhiLEQpe0QmJihELnVpZDwwJiYoRC51aWQrPTQyOTQ5NjcyOTYpLEQuZ2lkPDAmJihE'@;
put 'LmdpZCs9NDI5NDk2NzI5NikpLGNlJiZjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHVlJiYoY2U9dWUsdWU9bnVsbCksdWU/c2UuY2FsbChWLGhlLHVlLEcpOnNlLmNhbGwoVixoZSxHKX19ZnVuY3Rpb24gZWUoc2Upe3JldHVybiBzZSYmZnVuY3Rp'@;
put 'b24oaGUsdWUpe3ZhciBjZT11ZT9zZS5jYWxsKFYsaGUsdWUpOnNlLmNhbGwoVixoZSk7cmV0dXJuIGNlJiYoY2UudWlkPDAmJihjZS51aWQrPTQyOTQ5NjcyOTYpLGNlLmdpZDwwJiYoY2UuZ2lkKz00Mjk0OTY3Mjk2KSksY2V9fWZ1bmN0aW9uIHRlKHNlKXtyZXR1cm4hc2V8fCJFTk9TWVMi'@;
put 'PT09c2UuY29kZXx8ISh6LmdldHVpZCYmMD09PXouZ2V0dWlkKCl8fCJFSU5WQUwiIT09c2UuY29kZSYmIkVQRVJNIiE9PXNlLmNvZGUpfUsuaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZ6LnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmKChzZT1WKS5sY2ht'@;
put 'b2Q9ZnVuY3Rpb24oaGUsdWUsY2Upe3NlLm9wZW4oaGUsSy5PX1dST05MWXxLLk9fU1lNTElOSyx1ZSxmdW5jdGlvbihHLGIpe0c/Y2UmJmNlKEcpOnNlLmZjaG1vZChiLHVlLGZ1bmN0aW9uKEQpe3NlLmNsb3NlKGIsZnVuY3Rpb24oSCl7Y2UmJmNlKER8fEgpfSl9KX0pfSxzZS5sY2htb2RT'@;
put 'eW5jPWZ1bmN0aW9uKGhlLHVlKXt2YXIgY2UsRz1zZS5vcGVuU3luYyhoZSxLLk9fV1JPTkxZfEsuT19TWU1MSU5LLHVlKSxiPSEwO3RyeXtjZT1zZS5mY2htb2RTeW5jKEcsdWUpLGI9ITF9ZmluYWxseXtpZihiKXRyeXtzZS5jbG9zZVN5bmMoRyl9Y2F0Y2h7fWVsc2Ugc2UuY2xvc2VTeW5j'@;
put 'KEcpfXJldHVybiBjZX0pLFYubHV0aW1lc3x8ZnVuY3Rpb24oc2Upe0suaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZzZS5mdXRpbWVzPyhzZS5sdXRpbWVzPWZ1bmN0aW9uKGhlLHVlLGNlLEcpe3NlLm9wZW4oaGUsSy5PX1NZTUxJTkssZnVuY3Rpb24oYixEKXtiP0cmJkcoYik6c2Uu'@;
put 'ZnV0aW1lcyhELHVlLGNlLGZ1bmN0aW9uKEgpe3NlLmNsb3NlKEQsZnVuY3Rpb24oTil7RyYmRyhIfHxOKX0pfSl9KX0sc2UubHV0aW1lc1N5bmM9ZnVuY3Rpb24oaGUsdWUsY2Upe3ZhciBHLGI9c2Uub3BlblN5bmMoaGUsSy5PX1NZTUxJTkspLEQ9ITA7dHJ5e0c9c2UuZnV0aW1lc1N5bmMo'@;
put 'Yix1ZSxjZSksRD0hMX1maW5hbGx5e2lmKEQpdHJ5e3NlLmNsb3NlU3luYyhiKX1jYXRjaHt9ZWxzZSBzZS5jbG9zZVN5bmMoYil9cmV0dXJuIEd9KTpzZS5mdXRpbWVzJiYoc2UubHV0aW1lcz1mdW5jdGlvbihoZSx1ZSxjZSxHKXtHJiZ6Lm5leHRUaWNrKEcpfSxzZS5sdXRpbWVzU3luYz1m'@;
put 'dW5jdGlvbigpe30pfShWKSxWLmNob3duPVgoVi5jaG93biksVi5mY2hvd249WChWLmZjaG93biksVi5sY2hvd249WChWLmxjaG93biksVi5jaG1vZD1CKFYuY2htb2QpLFYuZmNobW9kPUIoVi5mY2htb2QpLFYubGNobW9kPUIoVi5sY2htb2QpLFYuY2hvd25TeW5jPVUoVi5jaG93blN5bmMp'@;
put 'LFYuZmNob3duU3luYz1VKFYuZmNob3duU3luYyksVi5sY2hvd25TeW5jPVUoVi5sY2hvd25TeW5jKSxWLmNobW9kU3luYz1ZKFYuY2htb2RTeW5jKSxWLmZjaG1vZFN5bmM9WShWLmZjaG1vZFN5bmMpLFYubGNobW9kU3luYz1ZKFYubGNobW9kU3luYyksVi5zdGF0PXEoVi5zdGF0KSxWLmZz'@;
put 'dGF0PXEoVi5mc3RhdCksVi5sc3RhdD1xKFYubHN0YXQpLFYuc3RhdFN5bmM9ZWUoVi5zdGF0U3luYyksVi5mc3RhdFN5bmM9ZWUoVi5mc3RhdFN5bmMpLFYubHN0YXRTeW5jPWVlKFYubHN0YXRTeW5jKSxWLmNobW9kJiYhVi5sY2htb2QmJihWLmxjaG1vZD1mdW5jdGlvbihzZSxoZSx1ZSl7'@;
put 'dWUmJnoubmV4dFRpY2sodWUpfSxWLmxjaG1vZFN5bmM9ZnVuY3Rpb24oKXt9KSxWLmNob3duJiYhVi5sY2hvd24mJihWLmxjaG93bj1mdW5jdGlvbihzZSxoZSx1ZSxjZSl7Y2UmJnoubmV4dFRpY2soY2UpfSxWLmxjaG93blN5bmM9ZnVuY3Rpb24oKXt9KSwid2luMzIiPT09RSYmKFYucmVu'@;
put 'YW1lPSJmdW5jdGlvbiIhPXR5cGVvZiBWLnJlbmFtZT9WLnJlbmFtZTpmdW5jdGlvbihzZSl7ZnVuY3Rpb24gaGUodWUsY2UsRyl7dmFyIGI9RGF0ZS5ub3coKSxEPTA7c2UodWUsY2UsZnVuY3Rpb24gSChOKXtpZihOJiYoIkVBQ0NFUyI9PT1OLmNvZGV8fCJFUEVSTSI9PT1OLmNvZGUpJiZE'@;
put 'YXRlLm5vdygpLWI8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Vi5zdGF0KGNlLGZ1bmN0aW9uKGcsQyl7ZyYmIkVOT0VOVCI9PT1nLmNvZGU/c2UodWUsY2UsSCk6RyhOKX0pfSxEKSx2b2lkKEQ8MTAwJiYoRCs9MTApKTtHJiZHKE4pfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90'@;
put 'b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKGhlLHNlKSxoZX0oVi5yZW5hbWUpKSxWLnJlYWQ9ImZ1bmN0aW9uIiE9dHlwZW9mIFYucmVhZD9WLnJlYWQ6ZnVuY3Rpb24oc2Upe2Z1bmN0aW9uIGhlKHVlLGNlLEcsYixELEgpe3ZhciBOO2lmKEgmJiJmdW5jdGlvbiI9PXR5cGVvZiBI'@;
put 'KXt2YXIgZz0wO049ZnVuY3Rpb24oQyxTLHYpe2lmKEMmJiJFQUdBSU4iPT09Qy5jb2RlJiZnPDEwKXJldHVybiBnKyssc2UuY2FsbChWLHVlLGNlLEcsYixELE4pO0guYXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gc2UuY2FsbChWLHVlLGNlLEcsYixELE4pfXJldHVybiBPYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihoZSxzZSksaGV9KFYucmVhZCksVi5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2YgVi5yZWFkU3luYz9WLnJlYWRTeW5jOihvZT1WLnJlYWRTeW5jLGZ1bmN0aW9uKHNlLGhlLHVlLGNlLEcpe2Zvcih2YXIgYj0wOzspdHJ5'@;
put 'e3JldHVybiBvZS5jYWxsKFYsc2UsaGUsdWUsY2UsRyl9Y2F0Y2goRCl7aWYoIkVBR0FJTiI9PT1ELmNvZGUmJmI8MTApe2IrKztjb250aW51ZX10aHJvdyBEfX0pfX0sMTA0NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjEwKSgiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiLCEw'@;
put 'KSxLPWZ1bmN0aW9uKCl7aWYoeil0cnl7cmV0dXJuIHooe30sImEiLHt2YWx1ZToxfSksITB9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITF9O0suaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWc9ZnVuY3Rpb24oKXtpZighSygpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PXooW10sImxlbmd0aCIs'@;
put 'e3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9fSxNLmV4cG9ydHM9S30sMTQwNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wsSz1SKDU0MTkpO00uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB6'@;
put 'JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIHooImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJksoKX19LDU0MTk6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgU3ltYm9s'@;
put 'fHwiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scylyZXR1cm4hMTtpZigic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcilyZXR1cm4hMDt2YXIgTz17fSxSPVN5bWJvbCgidGVzdCIpLHo9T2JqZWN0KFIpO2lmKCJzdHJpbmciPT10eXBlb2YgUnx8'@;
put 'IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUil8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHopKXJldHVybiExO2ZvcihSIGluIE9bUl09NDIsTylyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhPKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pLmxlbmd0aClyZXR1cm4hMTt2YXIgSz1PYmplY3QuZ2V0T3duUHJvcGVy'@;
put 'dHlTeW1ib2xzKE8pO2lmKDEhPT1LLmxlbmd0aHx8S1swXSE9PVJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoTyxSKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIEk9T2JqZWN0'@;
put 'LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLFIpO2lmKDQyIT09SS52YWx1ZXx8ITAhPT1JLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw2NDEwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1NDE5KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4geigpJiYhIVN5'@;
put 'bWJvbC50b1N0cmluZ1RhZ319LDc2NDI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg2MTIpO00uZXhwb3J0cz16LmNhbGwoRnVuY3Rpb24uY2FsbCxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KX0sMzM0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTUw'@;
put 'OSkuQnVmZmVyLEs9Uig4NDczKS5UcmFuc2Zvcm07ZnVuY3Rpb24gSShrKXtLLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9ei5hbGxvY1Vuc2FmZShrKSx0aGlzLl9ibG9ja1NpemU9ayx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSEx'@;
put 'fVIoNTcxNykoSSxLKSxJLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGssRSxqKXt2YXIgVj1udWxsO3RyeXt0aGlzLnVwZGF0ZShrLEUpfWNhdGNoKEIpe1Y9Qn1qKFYpfSxJLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oayl7dmFyIEU9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMu'@;
put 'ZGlnZXN0KCkpfWNhdGNoKGope0U9an1rKEUpfSxJLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oayxFKXtpZihmdW5jdGlvbihVLHEpe2lmKCF6LmlzQnVmZmVyKFUpJiYic3RyaW5nIiE9dHlwZW9mIFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEg'@;
put 'YnVmZmVyIil9KGspLHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3ouaXNCdWZmZXIoayl8fChrPXouZnJvbShrLEUpKTtmb3IodmFyIGo9dGhpcy5fYmxvY2ssVj0wO3RoaXMuX2Jsb2NrT2Zmc2V0K2subGVuZ3RoLVY+PXRoaXMuX2Js'@;
put 'b2NrU2l6ZTspe2Zvcih2YXIgQj10aGlzLl9ibG9ja09mZnNldDtCPHRoaXMuX2Jsb2NrU2l6ZTspaltCKytdPWtbVisrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7VjxrLmxlbmd0aDspalt0aGlzLl9ibG9ja09mZnNldCsrXT1rW1YrK107Zm9yKHZhciBZPTAs'@;
put 'WD04KmsubGVuZ3RoO1g+MDsrK1kpdGhpcy5fbGVuZ3RoW1ldKz1YLChYPXRoaXMuX2xlbmd0aFtZXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbWV0tPTQyOTQ5NjcyOTYqWCk7cmV0dXJuIHRoaXN9LEkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJy'@;
put 'b3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihrKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIEU9dGhpcy5fZGlnZXN0KCk7'@;
put 'dm9pZCAwIT09ayYmKEU9RS50b1N0cmluZyhrKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgaj0wO2o8NDsrK2opdGhpcy5fbGVuZ3RoW2pdPTA7cmV0dXJuIEV9LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3Io'@;
put 'Il9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LE0uZXhwb3J0cz1JfSwzNzE1OihNLE8sUik9Pnt2YXIgej1PO3oudXRpbHM9Uig2NDM2KSx6LmNvbW1vbj1SKDU3NzIpLHouc2hhPVIoOTA0MSksei5yaXBlbWQ9UigyOTQ5KSx6LmhtYWM9UigyMzQ0KSx6LnNoYTE9ei5zaGEuc2hhMSx6'@;
put 'LnNoYTI1Nj16LnNoYS5zaGEyNTYsei5zaGEyMjQ9ei5zaGEuc2hhMjI0LHouc2hhMzg0PXouc2hhLnNoYTM4NCx6LnNoYTUxMj16LnNoYS5zaGE1MTIsei5yaXBlbWQxNjA9ei5yaXBlbWQucmlwZW1kMTYwfSw1NzcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIo'@;
put 'OTc0Nik7ZnVuY3Rpb24gSSgpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0'@;
put 'cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9Ty5CbG9ja0hhc2g9SSxJLnByb3Rv'@;
put 'dHlwZS51cGRhdGU9ZnVuY3Rpb24oayxFKXtpZihrPXoudG9BcnJheShrLEUpLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdChrKTprLHRoaXMucGVuZGluZ1RvdGFsKz1rLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBq'@;
put 'PShrPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9ay5zbGljZShrLmxlbmd0aC1qLGsubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSxrPXouam9pbjMyKGssMCxrLmxlbmd0aC1qLHRoaXMuZW5kaWFuKTtm'@;
put 'b3IodmFyIFY9MDtWPGsubGVuZ3RoO1YrPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKGssVixWK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxJLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxLKG51bGw9PT10aGlzLnBl'@;
put 'bmRpbmcpLHRoaXMuX2RpZ2VzdChrKX0sSS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciBrPXRoaXMucGVuZGluZ1RvdGFsLEU9dGhpcy5fZGVsdGE4LGo9RS0oayt0aGlzLnBhZExlbmd0aCklRSxWPW5ldyBBcnJheShqK3RoaXMucGFkTGVuZ3RoKTtWWzBdPTEyODtmb3IodmFyIEI9'@;
put 'MTtCPGo7QisrKVZbQl09MDtpZihrPDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIFk9ODtZPHRoaXMucGFkTGVuZ3RoO1krKylWW0IrK109MDtWW0IrK109MCxWW0IrK109MCxWW0IrK109MCxWW0IrK109MCxWW0IrK109az4+PjI0JjI1NSxWW0IrK109az4+PjE2JjI1NSxWW0Ir'@;
put 'K109az4+PjgmMjU1LFZbQisrXT0yNTUma31lbHNlIGZvcihWW0IrK109MjU1JmssVltCKytdPWs+Pj44JjI1NSxWW0IrK109az4+PjE2JjI1NSxWW0IrK109az4+PjI0JjI1NSxWW0IrK109MCxWW0IrK109MCxWW0IrK109MCxWW0IrK109MCxZPTg7WTx0aGlzLnBhZExlbmd0aDtZKyspVltC'@;
put 'KytdPTA7cmV0dXJuIFZ9fSwyMzQ0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoOTc0Nik7ZnVuY3Rpb24gSShrLEUsail7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKGssRSxqKTt0aGlzLkhhc2g9ayx0aGlzLmJsb2NrU2l6ZT1rLmJsb2Nr'@;
put 'U2l6ZS84LHRoaXMub3V0U2l6ZT1rLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoei50b0FycmF5KEUsaikpfU0uZXhwb3J0cz1JLEkucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGspe2subGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYoaz0obmV3'@;
put 'IHRoaXMuSGFzaCkudXBkYXRlKGspLmRpZ2VzdCgpKSxLKGsubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBFPWsubGVuZ3RoO0U8dGhpcy5ibG9ja1NpemU7RSsrKWsucHVzaCgwKTtmb3IoRT0wO0U8ay5sZW5ndGg7RSsrKWtbRV1ePTU0O2Zvcih0aGlzLmlubmVyPShuZXcgdGhp'@;
put 'cy5IYXNoKS51cGRhdGUoayksRT0wO0U8ay5sZW5ndGg7RSsrKWtbRV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoayl9LEkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihrLEUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShrLEUpLHRoaXN9LEkucHJvdG90eXBl'@;
put 'LmRpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3Qoayl9fSwyOTQ5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTc3MiksST16LnJvdGwzMixrPXouc3VtMzIsRT16'@;
put 'LnN1bTMyXzMsaj16LnN1bTMyXzQsVj1LLkJsb2NrSGFzaDtmdW5jdGlvbiBCKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCO1YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlz'@;
put 'LmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiBZKHNlLGhlLHVlLGNlKXtyZXR1cm4gc2U8PTE1P2hlXnVlXmNlOnNlPD0zMT9oZSZ1ZXx+aGUmY2U6c2U8PTQ3PyhoZXx+dWUpXmNlOnNlPD02Mz9oZSZjZXx1ZSZ+Y2U6aGVeKHVlfH5jZSl9ZnVuY3Rpb24gWChzZSl7cmV0dXJuIHNlPD0xNT8w'@;
put 'OnNlPD0zMT8xNTE4NTAwMjQ5OnNlPD00Nz8xODU5Nzc1MzkzOnNlPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24gVShzZSl7cmV0dXJuIHNlPD0xNT8xMzUyODI5OTI2OnNlPD0zMT8xNTQ4NjAzNjg0OnNlPD00Nz8xODM2MDcyNjkxOnNlPD02Mz8yMDUzOTk0MjE3OjB9ei5p'@;
put 'bmhlcml0cyhCLFYpLE8ucmlwZW1kMTYwPUIsQi5ibG9ja1NpemU9NTEyLEIub3V0U2l6ZT0xNjAsQi5obWFjU3RyZW5ndGg9MTkyLEIucGFkTGVuZ3RoPTY0LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oc2UsaGUpe2Zvcih2YXIgdWU9dGhpcy5oWzBdLGNlPXRoaXMuaFsxXSxHPXRo'@;
put 'aXMuaFsyXSxiPXRoaXMuaFszXSxEPXRoaXMuaFs0XSxIPXVlLE49Y2UsZz1HLEM9YixTPUQsdj0wO3Y8ODA7disrKXt2YXIgcD1rKEkoaih1ZSxZKHYsY2UsRyxiKSxzZVtxW3ZdK2hlXSxYKHYpKSx0ZVt2XSksRCk7dWU9RCxEPWIsYj1JKEcsMTApLEc9Y2UsY2U9cCxwPWsoSShqKEgsWSg3'@;
put 'OS12LE4sZyxDKSxzZVtlZVt2XStoZV0sVSh2KSksb2Vbdl0pLFMpLEg9UyxTPUMsQz1JKGcsMTApLGc9TixOPXB9cD1FKHRoaXMuaFsxXSxHLEMpLHRoaXMuaFsxXT1FKHRoaXMuaFsyXSxiLFMpLHRoaXMuaFsyXT1FKHRoaXMuaFszXSxELEgpLHRoaXMuaFszXT1FKHRoaXMuaFs0XSx1ZSxO'@;
put 'KSx0aGlzLmhbNF09RSh0aGlzLmhbMF0sY2UsZyksdGhpcy5oWzBdPXB9LEIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oc2Upe3JldHVybiJoZXgiPT09c2U/ei50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6ei5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBxPVswLDEsMiwzLDQs'@;
put 'NSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEs'@;
put 'Myw4LDExLDYsMTUsMTNdLGVlPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3'@;
put 'LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHRlPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEy'@;
put 'LDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxvZT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwx'@;
put 'MywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPLnNoYTE9Uig0'@;
put 'NzYxKSxPLnNoYTIyND1SKDc5OSksTy5zaGEyNTY9Uig5MzQ0KSxPLnNoYTM4ND1SKDc3MiksTy5zaGE1MTI9Uig1OTAwKX0sNDc2MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9Uig3MDM4KSxrPXoucm90bDMyLEU9ei5zdW0zMixqPXouc3VtMzJf'@;
put 'NSxWPUkuZnRfMSxCPUsuQmxvY2tIYXNoLFk9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIFgoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBYKSlyZXR1cm4gbmV3IFg7Qi5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3'@;
put 'LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfXouaW5oZXJpdHMoWCxCKSxNLmV4cG9ydHM9WCxYLmJsb2NrU2l6ZT01MTIsWC5vdXRTaXplPTE2MCxYLmhtYWNTdHJlbmd0aD04MCxYLnBhZExlbmd0aD02NCxYLnByb3RvdHlwZS5fdXBkYXRl'@;
put 'PWZ1bmN0aW9uKFUscSl7Zm9yKHZhciBlZT10aGlzLlcsdGU9MDt0ZTwxNjt0ZSsrKWVlW3RlXT1VW3ErdGVdO2Zvcig7dGU8ZWUubGVuZ3RoO3RlKyspZWVbdGVdPWsoZWVbdGUtM11eZWVbdGUtOF1eZWVbdGUtMTRdXmVlW3RlLTE2XSwxKTt2YXIgb2U9dGhpcy5oWzBdLHNlPXRoaXMuaFsx'@;
put 'XSxoZT10aGlzLmhbMl0sdWU9dGhpcy5oWzNdLGNlPXRoaXMuaFs0XTtmb3IodGU9MDt0ZTxlZS5sZW5ndGg7dGUrKyl7dmFyIEc9fn4odGUvMjApLGI9aihrKG9lLDUpLFYoRyxzZSxoZSx1ZSksY2UsZWVbdGVdLFlbR10pO2NlPXVlLHVlPWhlLGhlPWsoc2UsMzApLHNlPW9lLG9lPWJ9dGhp'@;
put 'cy5oWzBdPUUodGhpcy5oWzBdLG9lKSx0aGlzLmhbMV09RSh0aGlzLmhbMV0sc2UpLHRoaXMuaFsyXT1FKHRoaXMuaFsyXSxoZSksdGhpcy5oWzNdPUUodGhpcy5oWzNdLHVlKSx0aGlzLmhbNF09RSh0aGlzLmhbNF0sY2UpfSxYLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFUpe3JldHVy'@;
put 'biJoZXgiPT09VT96LnRvSGV4MzIodGhpcy5oLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc5OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDkzNDQpO2Z1bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7Sy5j'@;
put 'YWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19ei5pbmhlcml0cyhJLEspLE0uZXhwb3J0cz1JLEkuYmxvY2tTaXplPTUxMixJLm91dFNpemU9MjI0LEku'@;
put 'aG1hY1N0cmVuZ3RoPTE5MixJLnBhZExlbmd0aD02NCxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGspe3JldHVybiJoZXgiPT09az96LnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOnouc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0OihNLE8sUik9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTc3MiksST1SKDcwMzgpLGs9Uig5NzQ2KSxFPXouc3VtMzIsaj16LnN1bTMyXzQsVj16LnN1bTMyXzUsQj1JLmNoMzIsWT1JLm1hajMyLFg9SS5zMF8yNTYsVT1JLnMxXzI1NixxPUkuZzBfMjU2LGVlPUkuZzFfMjU2LHRlPUsuQmxv'@;
put 'Y2tIYXNoLG9lPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYx'@;
put 'NDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUy'@;
put 'ODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3'@;
put 'LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0'@;
put 'MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIHNlKCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygc2UpKXJldHVybiBuZXcgc2U7dGUuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5'@;
put 'MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9b2UsdGhpcy5XPW5ldyBBcnJheSg2NCl9ei5pbmhlcml0cyhzZSx0ZSksTS5leHBvcnRzPXNlLHNlLmJsb2NrU2l6ZT01MTIsc2Uub3V0U2l6ZT0yNTYsc2UuaG1hY1N0cmVuZ3RoPTE5MixzZS5wYWRMZW5ndGg9'@;
put 'NjQsc2UucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oaGUsdWUpe2Zvcih2YXIgY2U9dGhpcy5XLEc9MDtHPDE2O0crKyljZVtHXT1oZVt1ZStHXTtmb3IoO0c8Y2UubGVuZ3RoO0crKyljZVtHXT1qKGVlKGNlW0ctMl0pLGNlW0ctN10scShjZVtHLTE1XSksY2VbRy0xNl0pO3ZhciBiPXRo'@;
put 'aXMuaFswXSxEPXRoaXMuaFsxXSxIPXRoaXMuaFsyXSxOPXRoaXMuaFszXSxnPXRoaXMuaFs0XSxDPXRoaXMuaFs1XSxTPXRoaXMuaFs2XSx2PXRoaXMuaFs3XTtmb3Ioayh0aGlzLmsubGVuZ3RoPT09Y2UubGVuZ3RoKSxHPTA7RzxjZS5sZW5ndGg7RysrKXt2YXIgcD1WKHYsVShnKSxCKGcs'@;
put 'QyxTKSx0aGlzLmtbR10sY2VbR10pLHc9RShYKGIpLFkoYixELEgpKTt2PVMsUz1DLEM9ZyxnPUUoTixwKSxOPUgsSD1ELEQ9YixiPUUocCx3KX10aGlzLmhbMF09RSh0aGlzLmhbMF0sYiksdGhpcy5oWzFdPUUodGhpcy5oWzFdLEQpLHRoaXMuaFsyXT1FKHRoaXMuaFsyXSxIKSx0aGlzLmhb'@;
put 'M109RSh0aGlzLmhbM10sTiksdGhpcy5oWzRdPUUodGhpcy5oWzRdLGcpLHRoaXMuaFs1XT1FKHRoaXMuaFs1XSxDKSx0aGlzLmhbNl09RSh0aGlzLmhbNl0sUyksdGhpcy5oWzddPUUodGhpcy5oWzddLHYpfSxzZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihoZSl7cmV0dXJuImhleCI9'@;
put 'PT1oZT96LnRvSGV4MzIodGhpcy5oLCJiaWciKTp6LnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU5MDApO2Z1bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7Sy5jYWxsKHRo'@;
put 'aXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEy'@;
put 'MDMwNjI4MTMsMzIwNDA3NTQyOF19ei5pbmhlcml0cyhJLEspLE0uZXhwb3J0cz1JLEkuYmxvY2tTaXplPTEwMjQsSS5vdXRTaXplPTM4NCxJLmhtYWNTdHJlbmd0aD0xOTIsSS5wYWRMZW5ndGg9MTI4LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oayl7cmV0dXJuImhleCI9PT1rP3ou'@;
put 'dG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOnouc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sNTkwMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNiksSz1SKDU3NzIpLEk9Uig5NzQ2KSxrPXoucm90cjY0X2hpLEU9ei5yb3RyNjRfbG8saj16'@;
put 'LnNocjY0X2hpLFY9ei5zaHI2NF9sbyxCPXouc3VtNjQsWT16LnN1bTY0X2hpLFg9ei5zdW02NF9sbyxVPXouc3VtNjRfNF9oaSxxPXouc3VtNjRfNF9sbyxlZT16LnN1bTY0XzVfaGksdGU9ei5zdW02NF81X2xvLG9lPUsuQmxvY2tIYXNoLHNlPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5'@;
put 'OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4'@;
put 'ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQw'@;
put 'MSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1'@;
put 'NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcx'@;
put 'NzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYw'@;
put 'MzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0'@;
put 'LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAz'@;
put 'NDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0'@;
put 'NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAs'@;
put 'Mjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5'@;
put 'ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gaGUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBoZSkpcmV0dXJuIG5ldyBoZTtvZS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5'@;
put 'NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXNlLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1m'@;
put 'dW5jdGlvbiB1ZSh3LEosbmUsZGUsZmUpe3ZhciB4ZT13Jm5lXn53JmZlO3JldHVybiB4ZTwwJiYoeGUrPTQyOTQ5NjcyOTYpLHhlfWZ1bmN0aW9uIGNlKHcsSixuZSxkZSxmZSx4ZSl7dmFyIExlPUomZGVefkomeGU7cmV0dXJuIExlPDAmJihMZSs9NDI5NDk2NzI5NiksTGV9ZnVuY3Rpb24g'@;
put 'Ryh3LEosbmUsZGUsZmUpe3ZhciB4ZT13Jm5lXncmZmVebmUmZmU7cmV0dXJuIHhlPDAmJih4ZSs9NDI5NDk2NzI5NikseGV9ZnVuY3Rpb24gYih3LEosbmUsZGUsZmUseGUpe3ZhciBMZT1KJmRlXkomeGVeZGUmeGU7cmV0dXJuIExlPDAmJihMZSs9NDI5NDk2NzI5NiksTGV9ZnVuY3Rpb24g'@;
put 'RCh3LEope3ZhciBuZT1rKHcsSiwyOCleayhKLHcsMileayhKLHcsNyk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gSCh3LEope3ZhciBuZT1FKHcsSiwyOCleRShKLHcsMileRShKLHcsNyk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rp'@;
put 'b24gTih3LEope3ZhciBuZT1rKHcsSiwxNCleayh3LEosMTgpXmsoSix3LDkpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIGcodyxKKXt2YXIgbmU9RSh3LEosMTQpXkUodyxKLDE4KV5FKEosdyw5KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1m'@;
put 'dW5jdGlvbiBDKHcsSil7dmFyIG5lPWsodyxKLDEpXmsodyxKLDgpXmoodyxKLDcpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIFModyxKKXt2YXIgbmU9RSh3LEosMSleRSh3LEosOCleVih3LEosNyk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9'@;
put 'ZnVuY3Rpb24gdih3LEope3ZhciBuZT1rKHcsSiwxOSleayhKLHcsMjkpXmoodyxKLDYpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIHAodyxKKXt2YXIgbmU9RSh3LEosMTkpXkUoSix3LDI5KV5WKHcsSiw2KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2'@;
put 'KSxuZX16LmluaGVyaXRzKGhlLG9lKSxNLmV4cG9ydHM9aGUsaGUuYmxvY2tTaXplPTEwMjQsaGUub3V0U2l6ZT01MTIsaGUuaG1hY1N0cmVuZ3RoPTE5MixoZS5wYWRMZW5ndGg9MTI4LGhlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHcsSil7Zm9yKHZhciBuZT10aGlzLlcs'@;
put 'ZGU9MDtkZTwzMjtkZSsrKW5lW2RlXT13W0orZGVdO2Zvcig7ZGU8bmUubGVuZ3RoO2RlKz0yKXt2YXIgZmU9dihuZVtkZS00XSxuZVtkZS0zXSkseGU9cChuZVtkZS00XSxuZVtkZS0zXSksTGU9bmVbZGUtMTRdLEZlPW5lW2RlLTEzXSxPZT1DKG5lW2RlLTMwXSxuZVtkZS0yOV0pLGplPVMo'@;
put 'bmVbZGUtMzBdLG5lW2RlLTI5XSksV2U9bmVbZGUtMzJdLEtlPW5lW2RlLTMxXTtuZVtkZV09VShmZSx4ZSxMZSxGZSxPZSxqZSxXZSxLZSksbmVbZGUrMV09cShmZSx4ZSxMZSxGZSxPZSxqZSxXZSxLZSl9fSxoZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih3LEope3RoaXMuX3ByZXBh'@;
put 'cmVCbG9jayh3LEopO3ZhciBuZT10aGlzLlcsZGU9dGhpcy5oWzBdLGZlPXRoaXMuaFsxXSx4ZT10aGlzLmhbMl0sTGU9dGhpcy5oWzNdLEZlPXRoaXMuaFs0XSxPZT10aGlzLmhbNV0samU9dGhpcy5oWzZdLFdlPXRoaXMuaFs3XSxLZT10aGlzLmhbOF0sWWU9dGhpcy5oWzldLFFlPXRoaXMu'@;
put 'aFsxMF0sbHQ9dGhpcy5oWzExXSxQZT10aGlzLmhbMTJdLGJlPXRoaXMuaFsxM10sQWU9dGhpcy5oWzE0XSxUZT10aGlzLmhbMTVdO0kodGhpcy5rLmxlbmd0aD09PW5lLmxlbmd0aCk7Zm9yKHZhciBxZT0wO3FlPG5lLmxlbmd0aDtxZSs9Mil7dmFyIFhlPUFlLFVlPVRlLGh0PU4oS2UsWWUp'@;
put 'LE1lPWcoS2UsWWUpLERlPXVlKEtlLDAsUWUsMCxQZSksemU9Y2UoMCxZZSwwLGx0LDAsYmUpLG90PXRoaXMua1txZV0sdXQ9dGhpcy5rW3FlKzFdLE10PW5lW3FlXSxIdD1uZVtxZSsxXSxQdD1lZShYZSxVZSxodCxNZSxEZSx6ZSxvdCx1dCxNdCxIdCksb249dGUoWGUsVWUsaHQsTWUsRGUs'@;
put 'emUsb3QsdXQsTXQsSHQpO1hlPUQoZGUsZmUpLFVlPUgoZGUsZmUpLGh0PUcoZGUsMCx4ZSwwLEZlKSxNZT1iKDAsZmUsMCxMZSwwLE9lKTt2YXIgQ249WShYZSxVZSxodCxNZSksVXQ9WChYZSxVZSxodCxNZSk7QWU9UGUsVGU9YmUsUGU9UWUsYmU9bHQsUWU9S2UsbHQ9WWUsS2U9WShqZSxX'@;
put 'ZSxQdCxvbiksWWU9WChXZSxXZSxQdCxvbiksamU9RmUsV2U9T2UsRmU9eGUsT2U9TGUseGU9ZGUsTGU9ZmUsZGU9WShQdCxvbixDbixVdCksZmU9WChQdCxvbixDbixVdCl9Qih0aGlzLmgsMCxkZSxmZSksQih0aGlzLmgsMix4ZSxMZSksQih0aGlzLmgsNCxGZSxPZSksQih0aGlzLmgsNixq'@;
put 'ZSxXZSksQih0aGlzLmgsOCxLZSxZZSksQih0aGlzLmgsMTAsUWUsbHQpLEIodGhpcy5oLDEyLFBlLGJlKSxCKHRoaXMuaCwxNCxBZSxUZSl9LGhlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz96LnRvSGV4MzIodGhpcy5oLCJiaWciKTp6LnNwbGl0MzIo'@;
put 'dGhpcy5oLCJiaWciKX19LDcwMzg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLnJvdHIzMjtmdW5jdGlvbiBLKEUsaixWKXtyZXR1cm4gRSZqXn5FJlZ9ZnVuY3Rpb24gSShFLGosVil7cmV0dXJuIEUmal5FJlZeaiZWfWZ1bmN0aW9uIGsoRSxqLFYpe3JldHVybiBFXmpe'@;
put 'Vn1PLmZ0XzE9ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIDA9PT1FP0soaixWLEIpOjE9PT1FfHwzPT09RT9rKGosVixCKToyPT09RT9JKGosVixCKTp2b2lkIDB9LE8uY2gzMj1LLE8ubWFqMzI9SSxPLnAzMj1rLE8uczBfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsMileeihFLDEzKV56'@;
put 'KEUsMjIpfSxPLnMxXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4geihFLDYpXnooRSwxMSleeihFLDI1KX0sTy5nMF8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSw3KV56KEUsMTgpXkU+Pj4zfSxPLmcxXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4geihFLDE3KV56KEUsMTkpXkU+Pj4xMH19LDY0'@;
put 'MzY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KTtmdW5jdGlvbiBJKFYsQil7cmV0dXJuIDU1Mjk2PT0oNjQ1MTImVi5jaGFyQ29kZUF0KEIpKSYmIShCPDB8fEIrMT49Vi5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJlYuY2hhckNvZGVBdChCKzEpKX1mdW5j'@;
put 'dGlvbiBrKFYpe3JldHVybihWPj4+MjR8Vj4+PjgmNjUyODB8Vjw8OCYxNjcxMTY4MHwoMjU1JlYpPDwyNCk+Pj4wfWZ1bmN0aW9uIEUoVil7cmV0dXJuIDE9PT1WLmxlbmd0aD8iMCIrVjpWfWZ1bmN0aW9uIGooVil7cmV0dXJuIDc9PT1WLmxlbmd0aD8iMCIrVjo2PT09Vi5sZW5ndGg/IjAw'@;
put 'IitWOjU9PT1WLmxlbmd0aD8iMDAwIitWOjQ9PT1WLmxlbmd0aD8iMDAwMCIrVjozPT09Vi5sZW5ndGg/IjAwMDAwIitWOjI9PT1WLmxlbmd0aD8iMDAwMDAwIitWOjE9PT1WLmxlbmd0aD8iMDAwMDAwMCIrVjpWfU8uaW5oZXJpdHM9SyxPLnRvQXJyYXk9ZnVuY3Rpb24oVixCKXtpZihBcnJh'@;
put 'eS5pc0FycmF5KFYpKXJldHVybiBWLnNsaWNlKCk7aWYoIVYpcmV0dXJuW107dmFyIFk9W107aWYoInN0cmluZyI9PXR5cGVvZiBWKWlmKEIpe2lmKCJoZXgiPT09Qilmb3IoKFY9Vi5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihWPSIwIitWKSxVPTA7VTxWLmxl'@;
put 'bmd0aDtVKz0yKVkucHVzaChwYXJzZUludChWW1VdK1ZbVSsxXSwxNikpfWVsc2UgZm9yKHZhciBYPTAsVT0wO1U8Vi5sZW5ndGg7VSsrKXt2YXIgcT1WLmNoYXJDb2RlQXQoVSk7cTwxMjg/WVtYKytdPXE6cTwyMDQ4PyhZW1grK109cT4+NnwxOTIsWVtYKytdPTYzJnF8MTI4KTpJKFYsVSk/'@;
put 'KHE9NjU1MzYrKCgxMDIzJnEpPDwxMCkrKDEwMjMmVi5jaGFyQ29kZUF0KCsrVSkpLFlbWCsrXT1xPj4xOHwyNDAsWVtYKytdPXE+PjEyJjYzfDEyOCxZW1grK109cT4+NiY2M3wxMjgsWVtYKytdPTYzJnF8MTI4KTooWVtYKytdPXE+PjEyfDIyNCxZW1grK109cT4+NiY2M3wxMjgsWVtYKytd'@;
put 'PTYzJnF8MTI4KX1lbHNlIGZvcihVPTA7VTxWLmxlbmd0aDtVKyspWVtVXT0wfFZbVV07cmV0dXJuIFl9LE8udG9IZXg9ZnVuY3Rpb24oVil7Zm9yKHZhciBCPSIiLFk9MDtZPFYubGVuZ3RoO1krKylCKz1FKFZbWV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gQn0sTy5odG9ubD1rLE8udG9IZXgz'@;
put 'Mj1mdW5jdGlvbihWLEIpe2Zvcih2YXIgWT0iIixYPTA7WDxWLmxlbmd0aDtYKyspe3ZhciBVPVZbWF07ImxpdHRsZSI9PT1CJiYoVT1rKFUpKSxZKz1qKFUudG9TdHJpbmcoMTYpKX1yZXR1cm4gWX0sTy56ZXJvMj1FLE8uemVybzg9aixPLmpvaW4zMj1mdW5jdGlvbihWLEIsWSxYKXt2YXIg'@;
put 'VT1ZLUI7eihVJTQ9PTApO2Zvcih2YXIgcT1uZXcgQXJyYXkoVS80KSxlZT0wLHRlPUI7ZWU8cS5sZW5ndGg7ZWUrKyx0ZSs9NClxW2VlXT0oImJpZyI9PT1YP1ZbdGVdPDwyNHxWW3RlKzFdPDwxNnxWW3RlKzJdPDw4fFZbdGUrM106Vlt0ZSszXTw8MjR8Vlt0ZSsyXTw8MTZ8Vlt0ZSsxXTw8'@;
put 'OHxWW3RlXSk+Pj4wO3JldHVybiBxfSxPLnNwbGl0MzI9ZnVuY3Rpb24oVixCKXtmb3IodmFyIFk9bmV3IEFycmF5KDQqVi5sZW5ndGgpLFg9MCxVPTA7WDxWLmxlbmd0aDtYKyssVSs9NCl7dmFyIHE9VltYXTsiYmlnIj09PUI/KFlbVV09cT4+PjI0LFlbVSsxXT1xPj4+MTYmMjU1LFlbVSsy'@;
put 'XT1xPj4+OCYyNTUsWVtVKzNdPTI1NSZxKTooWVtVKzNdPXE+Pj4yNCxZW1UrMl09cT4+PjE2JjI1NSxZW1UrMV09cT4+PjgmMjU1LFlbVV09MjU1JnEpfXJldHVybiBZfSxPLnJvdHIzMj1mdW5jdGlvbihWLEIpe3JldHVybiBWPj4+QnxWPDwzMi1CfSxPLnJvdGwzMj1mdW5jdGlvbihWLEIp'@;
put 'e3JldHVybiBWPDxCfFY+Pj4zMi1CfSxPLnN1bTMyPWZ1bmN0aW9uKFYsQil7cmV0dXJuIFYrQj4+PjB9LE8uc3VtMzJfMz1mdW5jdGlvbihWLEIsWSl7cmV0dXJuIFYrQitZPj4+MH0sTy5zdW0zMl80PWZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBWK0IrWStYPj4+MH0sTy5zdW0zMl81PWZ1'@;
put 'bmN0aW9uKFYsQixZLFgsVSl7cmV0dXJuIFYrQitZK1grVT4+PjB9LE8uc3VtNjQ9ZnVuY3Rpb24oVixCLFksWCl7dmFyIHE9WCtWW0IrMV0+Pj4wO1ZbQl09KHE8WD8xOjApK1krVltCXT4+PjAsVltCKzFdPXF9LE8uc3VtNjRfaGk9ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuKEIrWD4+PjA8'@;
put 'Qj8xOjApK1YrWT4+PjB9LE8uc3VtNjRfbG89ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIEIrWD4+PjB9LE8uc3VtNjRfNF9oaT1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSl7dmFyIG9lPTAsc2U9QjtyZXR1cm4gb2UrPShzZT1zZStYPj4+MCk8Qj8xOjAsb2UrPShzZT1zZStxPj4+MCk8'@;
put 'cT8xOjAsVitZK1UrZWUrKG9lKz0oc2U9c2UrdGU+Pj4wKTx0ZT8xOjApPj4+MH0sTy5zdW02NF80X2xvPWZ1bmN0aW9uKFYsQixZLFgsVSxxLGVlLHRlKXtyZXR1cm4gQitYK3ErdGU+Pj4wfSxPLnN1bTY0XzVfaGk9ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUsb2Usc2Upe3ZhciBoZT0w'@;
put 'LHVlPUI7cmV0dXJuIGhlKz0odWU9dWUrWD4+PjApPEI/MTowLGhlKz0odWU9dWUrcT4+PjApPHE/MTowLGhlKz0odWU9dWUrdGU+Pj4wKTx0ZT8xOjAsVitZK1UrZWUrb2UrKGhlKz0odWU9dWUrc2U+Pj4wKTxzZT8xOjApPj4+MH0sTy5zdW02NF81X2xvPWZ1bmN0aW9uKFYsQixZLFgsVSxx'@;
put 'LGVlLHRlLG9lLHNlKXtyZXR1cm4gQitYK3ErdGUrc2U+Pj4wfSxPLnJvdHI2NF9oaT1mdW5jdGlvbihWLEIsWSl7cmV0dXJuKEI8PDMyLVl8Vj4+PlkpPj4+MH0sTy5yb3RyNjRfbG89ZnVuY3Rpb24oVixCLFkpe3JldHVybihWPDwzMi1ZfEI+Pj5ZKT4+PjB9LE8uc2hyNjRfaGk9ZnVuY3Rp'@;
put 'b24oVixCLFkpe3JldHVybiBWPj4+WX0sTy5zaHI2NF9sbz1mdW5jdGlvbihWLEIsWSl7cmV0dXJuKFY8PDMyLVl8Qj4+PlkpPj4+MH19LDIxNTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3MTUpLEs9Uig0NTA0KSxJPVIoOTc0Nik7ZnVuY3Rpb24gayhFKXtpZighKHRoaXMg'@;
put 'aW5zdGFuY2VvZiBrKSlyZXR1cm4gbmV3IGsoRSk7dGhpcy5oYXNoPUUuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISFFLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PUUubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlz'@;
put 'Ll9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIGo9Sy50b0FycmF5KEUuZW50cm9weSxFLmVudHJvcHlFbmN8fCJoZXgiKSxWPUsudG9BcnJheShFLm5vbmNlLEUubm9uY2VFbmN8fCJoZXgiKSxCPUsudG9BcnJheShFLnBl'@;
put 'cnMsRS5wZXJzRW5jfHwiaGV4Iik7SShqLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChqLFYsQil9TS5leHBvcnRzPWssay5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rp'@;
put 'b24oRSxqLFYpe3ZhciBCPUUuY29uY2F0KGopLmNvbmNhdChWKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBZPTA7WTx0aGlzLlYubGVuZ3RoO1krKyl0aGlzLktbWV09MCx0aGlzLlZbWV09MTt0aGlzLl91'@;
put 'cGRhdGUoQiksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LGsucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6LmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LGsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRSl7dmFyIGo9'@;
put 'dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO0UmJihqPWoudXBkYXRlKEUpKSx0aGlzLks9ai5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLEUmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0'@;
put 'ZShbMV0pLnVwZGF0ZShFKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0say5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKEUsaixWLEIpeyJzdHJpbmciIT10eXBlb2YgaiYmKEI9VixWPWosaj1udWxsKSxFPUsudG9BcnJheShFLGopLFY9'@;
put 'Sy50b0FycmF5KFYsQiksSShFLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKEUuY29uY2F0KFZ8fFtdKSksdGhpcy5fcmVzZWVkPTF9LGsucHJvdG90eXBlLmdl'@;
put 'bmVyYXRlPWZ1bmN0aW9uKEUsaixWLEIpe2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBqJiYoQj1WLFY9aixqPW51bGwpLFYmJihWPUsudG9BcnJheShWLEJ8fCJoZXgiKSx0'@;
put 'aGlzLl91cGRhdGUoVikpO2Zvcih2YXIgWT1bXTtZLmxlbmd0aDxFOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFk9WS5jb25jYXQodGhpcy5WKTt2YXIgWD1ZLnNsaWNlKDAsRSk7cmV0dXJuIHRoaXMuX3VwZGF0ZShWKSx0aGlzLl9yZXNlZWQrKyxLLmVu'@;
put 'Y29kZShYLGopfX0sNjQ1OihNLE8pPT57Ty5yZWFkPWZ1bmN0aW9uKFIseixLLEksayl7dmFyIEUsaixWPTgqay1JLTEsQj0oMTw8ViktMSxZPUI+PjEsWD0tNyxVPUs/ay0xOjAscT1LPy0xOjEsZWU9Ult6K1VdO2ZvcihVKz1xLEU9ZWUmKDE8PC1YKS0xLGVlPj49LVgsWCs9VjtYPjA7RT0y'@;
put 'NTYqRStSW3orVV0sVSs9cSxYLT04KTtmb3Ioaj1FJigxPDwtWCktMSxFPj49LVgsWCs9STtYPjA7aj0yNTYqaitSW3orVV0sVSs9cSxYLT04KTtpZigwPT09RSlFPTEtWTtlbHNle2lmKEU9PT1CKXJldHVybiBqP05hTjoxLzAqKGVlPy0xOjEpO2orPU1hdGgucG93KDIsSSksRS09WX1yZXR1'@;
put 'cm4oZWU/LTE6MSkqaipNYXRoLnBvdygyLEUtSSl9LE8ud3JpdGU9ZnVuY3Rpb24oUix6LEssSSxrLEUpe3ZhciBqLFYsQixZPTgqRS1rLTEsWD0oMTw8WSktMSxVPVg+PjEscT0yMz09PWs/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGVlPUk/MDpFLTEsdGU9ST8xOi0xLG9l'@;
put 'PXo8MHx8MD09PXomJjEvejwwPzE6MDtmb3Ioej1NYXRoLmFicyh6KSxpc05hTih6KXx8ej09PTEvMD8oVj1pc05hTih6KT8xOjAsaj1YKTooaj1NYXRoLmZsb29yKE1hdGgubG9nKHopL01hdGguTE4yKSx6KihCPU1hdGgucG93KDIsLWopKTwxJiYoai0tLEIqPTIpLCh6Kz1qK1U+PTE/cS9C'@;
put 'OnEqTWF0aC5wb3coMiwxLVUpKSpCPj0yJiYoaisrLEIvPTIpLGorVT49WD8oVj0wLGo9WCk6aitVPj0xPyhWPSh6KkItMSkqTWF0aC5wb3coMixrKSxqKz1VKTooVj16Kk1hdGgucG93KDIsVS0xKSpNYXRoLnBvdygyLGspLGo9MCkpO2s+PTg7UltLK2VlXT0yNTUmVixlZSs9dGUsVi89MjU2'@;
put 'LGstPTgpO2ZvcihqPWo8PGt8VixZKz1rO1k+MDtSW0srZWVdPTI1NSZqLGVlKz10ZSxqLz0yNTYsWS09OCk7UltLK2VlLXRlXXw9MTI4Km9lfX0sNzg0NDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoMjQ3OSksST1PYmplY3QuY3JlYXRlKG51bGwpLGs9Uig3NzgpO00uZXhwb3J0cz1L'@;
put 'KGZ1bmN0aW9uKEUsail7cmV0dXJuIElbRV0/KElbRV0ucHVzaChqKSxudWxsKTooSVtFXT1bal0sVj1FLGsoZnVuY3Rpb24gQigpe3ZhciBZPUlbVl0sWD1ZLmxlbmd0aCxVPWZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlPWVlLmxlbmd0aCxvZT1bXSxzZT0wO3NlPHRlO3NlKyspb2Vbc2VdPWVl'@;
put 'W3NlXTtyZXR1cm4gb2V9KGFyZ3VtZW50cyk7dHJ5e2Zvcih2YXIgcT0wO3E8WDtxKyspWVtxXS5hcHBseShudWxsLFUpfWZpbmFsbHl7WS5sZW5ndGg+WD8oWS5zcGxpY2UoMCxYKSx6Lm5leHRUaWNrKGZ1bmN0aW9uKCl7Qi5hcHBseShudWxsLFUpfSkpOmRlbGV0ZSBJW1ZdfX0pKTt2YXIg'@;
put 'Vn0pfSw1NzE3Ok09PntNLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTyxSKXtSJiYoTy5zdXBlcl89UixPLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6TyxlbnVtZXJhYmxlOiExLHdyaXRh'@;
put 'YmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKE8sUil7aWYoUil7Ty5zdXBlcl89Ujt2YXIgej1mdW5jdGlvbigpe307ei5wcm90b3R5cGU9Ui5wcm90b3R5cGUsTy5wcm90b3R5cGU9bmV3IHosTy5wcm90b3R5cGUuY29uc3RydWN0b3I9T319fSwyNTg0OihNLE8sUik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIHo9Uig2NDEwKSgpLEs9UigxOTI0KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEk9ZnVuY3Rpb24oail7cmV0dXJuISh6JiZqJiYib2JqZWN0Ij09dHlwZW9mIGomJlN5bWJvbC50b1N0cmluZ1RhZyBpbiBqKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1L'@;
put 'KGopfSxrPWZ1bmN0aW9uKGope3JldHVybiEhSShqKXx8bnVsbCE9PWomJiJvYmplY3QiPT10eXBlb2YgaiYmIm51bWJlciI9PXR5cGVvZiBqLmxlbmd0aCYmai5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT1LKGopJiYiW29iamVjdCBGdW5jdGlvbl0iPT09SyhqLmNhbGxlZSl9LEU9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gSShhcmd1bWVudHMpfSgpO0kuaXNMZWdhY3lBcmd1bWVudHM9ayxNLmV4cG9ydHM9RT9JOmt9LDUzMjA6TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTyxSLHo9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLEs9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxs'@;
put 'IT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgSyYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7Tz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IFJ9fSksUj17fSxL'@;
put 'KGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsTyl9Y2F0Y2goVSl7VSE9PVImJihLPW51bGwpfWVsc2UgSz1udWxsO3ZhciBJPS9eXHMqY2xhc3NcYi8saz1mdW5jdGlvbihVKXt0cnl7dmFyIHE9ei5jYWxsKFUpO3JldHVybiBJLnRlc3QocSl9Y2F0Y2h7cmV0dXJuITF9fSxFPWZ1bmN0aW9u'@;
put 'KFUpe3RyeXtyZXR1cm4hayhVKSYmKHouY2FsbChVKSwhMCl9Y2F0Y2h7cmV0dXJuITF9fSxqPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYhIVN5bWJvbC50b1N0cmluZ1RhZyxCPSEoMCBpblssXSksWT1mdW5jdGlvbigpe3JldHVybiEx'@;
put 'fTtpZigib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50KXt2YXIgWD1kb2N1bWVudC5hbGw7ai5jYWxsKFgpPT09ai5jYWxsKGRvY3VtZW50LmFsbCkmJihZPWZ1bmN0aW9uKFUpe2lmKChCfHwhVSkmJih2b2lkIDA9PT1VfHwib2JqZWN0Ij09dHlwZW9mIFUpKXRyeXt2YXIgcT1qLmNhbGwoVSk7'@;
put 'cmV0dXJuKCJbb2JqZWN0IEhUTUxBbGxDb2xsZWN0aW9uXSI9PT1xfHwiW29iamVjdCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09cXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PXF8fCJbb2JqZWN0IE9iamVjdF0iPT09cSkmJm51bGw9PVUoIiIpfWNhdGNoe31yZXR1cm4hMX0p'@;
put 'fU0uZXhwb3J0cz1LP2Z1bmN0aW9uKFUpe2lmKFkoVSkpcmV0dXJuITA7aWYoIVV8fCJmdW5jdGlvbiIhPXR5cGVvZiBVJiYib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuITE7dHJ5e0soVSxudWxsLE8pfWNhdGNoKHEpe2lmKHEhPT1SKXJldHVybiExfXJldHVybiFrKFUpJiZFKFUpfTpmdW5j'@;
put 'dGlvbihVKXtpZihZKFUpKXJldHVybiEwO2lmKCFVfHwiZnVuY3Rpb24iIT10eXBlb2YgVSYmIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO2lmKFYpcmV0dXJuIEUoVSk7aWYoayhVKSlyZXR1cm4hMTt2YXIgcT1qLmNhbGwoVSk7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09cSYm'@;
put 'IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiE9PXEmJiEvXlxbb2JqZWN0IEhUTUwvLnRlc3QocSkpJiZFKFUpfX0sODY2MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxrPS9e'@;
put 'XHMqKD86ZnVuY3Rpb24pP1wqLyxFPVIoNjQxMCkoKSxqPU9iamVjdC5nZXRQcm90b3R5cGVPZjtNLmV4cG9ydHM9ZnVuY3Rpb24oVil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFYpcmV0dXJuITE7aWYoay50ZXN0KEkuY2FsbChWKSkpcmV0dXJuITA7aWYoIUUpcmV0dXJuIltvYmplY3QgR2Vu'@;
put 'ZXJhdG9yRnVuY3Rpb25dIj09PUsuY2FsbChWKTtpZighailyZXR1cm4hMTtpZih2b2lkIDA9PT16KXt2YXIgQj1mdW5jdGlvbigpe2lmKCFFKXJldHVybiExO3RyeXtyZXR1cm4gRnVuY3Rpb24oInJldHVybiBmdW5jdGlvbiooKSB7fSIpKCl9Y2F0Y2h7fX0oKTt6PSEhQiYmaihCKX1yZXR1'@;
put 'cm4gaihWKT09PXp9fSw4NjExOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBPIT1PfX0sMzYwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1NTU5KSxLPVIoNDI4OSksST1SKDg2MTEpLGs9Uig5NDE1KSxFPVIoMzE5NCksaj16KGsoKSxOdW1i'@;
put 'ZXIpO0soaix7Z2V0UG9seWZpbGw6ayxpbXBsZW1lbnRhdGlvbjpJLHNoaW06RX0pLE0uZXhwb3J0cz1qfSw5NDE1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NjExKTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOJiZOdW1iZXIuaXNOYU4oTmFOKSYm'@;
put 'IU51bWJlci5pc05hTigiYSIpP051bWJlci5pc05hTjp6fX0sMzE5NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDI4OSksSz1SKDk0MTUpO00uZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBJPUsoKTtyZXR1cm4geihOdW1iZXIse2lzTmFOOkl9LHtpc05hTjpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBOdW1iZXIuaXNOYU4hPT1JfX0pLEl9fSw1NjkyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MDI5KSxLPVIoMzA4MyksST1SKDE5MjQpLGs9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEU9Uig2NDEwKSgpLGo9Uig3Mjk2KSxWPXR5cGVvZiBnbG9iYWxUaGlz'@;
put 'PiJ1Ij9SLmc6Z2xvYmFsVGhpcyxCPUsoKSxZPUkoIkFycmF5LnByb3RvdHlwZS5pbmRleE9mIiwhMCl8fGZ1bmN0aW9uKGVlLHRlKXtmb3IodmFyIG9lPTA7b2U8ZWUubGVuZ3RoO29lKz0xKWlmKGVlW29lXT09PXRlKXJldHVybiBvZTtyZXR1cm4tMX0sWD1JKCJTdHJpbmcucHJvdG90eXBl'@;
put 'LnNsaWNlIiksVT17fSxxPU9iamVjdC5nZXRQcm90b3R5cGVPZjtFJiZqJiZxJiZ6KEIsZnVuY3Rpb24oZWUpe3ZhciB0ZT1uZXcgVltlZV07aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHRlKXt2YXIgb2U9cSh0ZSksc2U9aihvZSxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFzZSl7dmFyIGhl'@;
put 'PXEob2UpO3NlPWooaGUsU3ltYm9sLnRvU3RyaW5nVGFnKX1VW2VlXT1zZS5nZXR9fSksTS5leHBvcnRzPWZ1bmN0aW9uKGVlKXtpZighZWV8fCJvYmplY3QiIT10eXBlb2YgZWUpcmV0dXJuITE7aWYoIUV8fCEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGVlKSl7dmFyIHRlPVgoayhlZSksOCwt'@;
put 'MSk7cmV0dXJuIFkoQix0ZSk+LTF9cmV0dXJuISFqJiYob2U9ZWUsc2U9ITEseihVLGZ1bmN0aW9uKGhlLHVlKXtpZighc2UpdHJ5e3NlPWhlLmNhbGwob2UpPT09dWV9Y2F0Y2h7fX0pLHNlKTt2YXIgb2Usc2V9fSw2ODEzOihNLE8sUik9PntsZXQgejt0cnl7ej1SKDc3KX1jYXRjaHt6PVIo'@;
put 'NDEyOSl9Y29uc3QgSz1SKDg5ODEpLHtzdHJpbmdpZnk6SSxzdHJpcEJvbTprfT1SKDY3ODApLEU9e3JlYWRGaWxlOksuZnJvbVByb21pc2UoZnVuY3Rpb24oKXt2YXIgaj1hZShmdW5jdGlvbiooVixCPXt9KXsic3RyaW5nIj09dHlwZW9mIEImJihCPXtlbmNvZGluZzpCfSk7Y29uc3QgWT1C'@;
put 'LmZzfHx6LFg9ISgidGhyb3dzImluIEIpfHxCLnRocm93cztsZXQgVSxxPXlpZWxkIEsuZnJvbUNhbGxiYWNrKFkucmVhZEZpbGUpKFYsQik7cT1rKHEpO3RyeXtVPUpTT04ucGFyc2UocSxCP0IucmV2aXZlcjpudWxsKX1jYXRjaChlZSl7aWYoWCl0aHJvdyBlZS5tZXNzYWdlPWAke1Z9OiAk'@;
put 'e2VlLm1lc3NhZ2V9YCxlZTtyZXR1cm4gbnVsbH1yZXR1cm4gVX0pO3JldHVybiBmdW5jdGlvbihWKXtyZXR1cm4gai5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSxyZWFkRmlsZVN5bmM6ZnVuY3Rpb24oaixWPXt9KXsic3RyaW5nIj09dHlwZW9mIFYmJihWPXtlbmNvZGluZzpWfSk7Y29u'@;
put 'c3QgQj1WLmZzfHx6LFk9ISgidGhyb3dzImluIFYpfHxWLnRocm93czt0cnl7bGV0IFg9Qi5yZWFkRmlsZVN5bmMoaixWKTtyZXR1cm4gWD1rKFgpLEpTT04ucGFyc2UoWCxWLnJldml2ZXIpfWNhdGNoKFgpe2lmKFkpdGhyb3cgWC5tZXNzYWdlPWAke2p9OiAke1gubWVzc2FnZX1gLFg7cmV0'@;
put 'dXJuIG51bGx9fSx3cml0ZUZpbGU6Sy5mcm9tUHJvbWlzZShmdW5jdGlvbigpe3ZhciBqPWFlKGZ1bmN0aW9uKihWLEIsWT17fSl7Y29uc3QgWD1ZLmZzfHx6LFU9SShCLFkpO3lpZWxkIEsuZnJvbUNhbGxiYWNrKFgud3JpdGVGaWxlKShWLFUsWSl9KTtyZXR1cm4gZnVuY3Rpb24oVixCKXty'@;
put 'ZXR1cm4gai5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uKGosVixCPXt9KXtjb25zdCBZPUIuZnN8fHosWD1JKFYsQik7cmV0dXJuIFkud3JpdGVGaWxlU3luYyhqLFgsQil9fTtNLmV4cG9ydHM9RX0sNjc4MDooTSxPLFIpPT57dmFyIHo9Uig4NzY0'@;
put 'KS5CdWZmZXI7TS5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24oSyx7RU9MOkk9IlxuIixmaW5hbEVPTDprPSEwLHJlcGxhY2VyOkU9bnVsbCxzcGFjZXM6an09e30pe2NvbnN0IFY9az9JOiIiO3JldHVybiBKU09OLnN0cmluZ2lmeShLLEUsaikucmVwbGFjZSgvXG4vZyxJKStWfSxzdHJp'@;
put 'cEJvbTpmdW5jdGlvbihLKXtyZXR1cm4gei5pc0J1ZmZlcihLKSYmKEs9Sy50b1N0cmluZygidXRmOCIpKSxLLnJlcGxhY2UoL15cdUZFRkYvLCIiKX19fSw2MjQ1OihNLE8sUik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geihqKXt0aGlzLm1lc3NhZ2U9an1SLnIoTyksUi5kKE8se0ludmFs'@;
put 'aWRUb2tlbkVycm9yOigpPT5rLGRlZmF1bHQ6KCk9PkV9KSwoei5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciBLPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihqKXt2'@;
put 'YXIgVj1TdHJpbmcoaikucmVwbGFjZSgvPSskLywiIik7aWYoVi5sZW5ndGglND09MSl0aHJvdyBuZXcgeigiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIEIsWSxYPTAsVT0wLHE9IiI7WT1WLmNoYXJB'@;
put 'dChVKyspO35ZJiYoQj1YJTQ/NjQqQitZOlksWCsrJTQpP3ErPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JkI+PigtMipYJjYpKTowKVk9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKFkpO3JldHVybiBx'@;
put 'fTtmdW5jdGlvbiBrKGope3RoaXMubWVzc2FnZT1qfShrLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9yIjtjb25zdCBFPWZ1bmN0aW9uKGosVil7aWYoInN0cmluZyIhPXR5cGVvZiBqKXRocm93IG5ldyBrKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZCIpO3Zh'@;
put 'ciBCPSEwPT09KFY9Vnx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKGZ1bmN0aW9uIEkoail7dmFyIFY9ai5yZXBsYWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKTtzd2l0Y2goVi5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjpWKz0iPT0iO2JyZWFrO2Nh'@;
put 'c2UgMzpWKz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChLKFYpLnJlcGxhY2UoLyguKS9nLGZ1bmN0aW9uKFksWCl7dmFyIFU9WC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVy'@;
put 'Q2FzZSgpO3JldHVybiBVLmxlbmd0aDwyJiYoVT0iMCIrVSksIiUiK1V9KSl9Y2F0Y2h7cmV0dXJuIEsoVil9fShqLnNwbGl0KCIuIilbQl0pKX1jYXRjaChZKXt0aHJvdyBuZXcgaygiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQ6ICIrWS5tZXNzYWdlKX19fSwyMzE4OihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIHo9Uig1NzE3KSxLPVIoMzM0OSksST1SKDk1MDkpLkJ1ZmZlcixrPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gRSgpe0suY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTcz'@;
put 'Mzg3OH1mdW5jdGlvbiBqKFUscSl7cmV0dXJuIFU8PHF8VT4+PjMyLXF9ZnVuY3Rpb24gVihVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKHEmZWV8fnEmdGUpK29lK3NlfDAsaGUpK3F8MH1mdW5jdGlvbiBCKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsocSZ0ZXxlZSZ+'@;
put 'dGUpK29lK3NlfDAsaGUpK3F8MH1mdW5jdGlvbiBZKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsocV5lZV50ZSkrb2Urc2V8MCxoZSkrcXwwfWZ1bmN0aW9uIFgoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhlZV4ocXx+dGUpKStvZStzZXwwLGhlKStxfDB9eihFLEsp'@;
put 'LEUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIFU9ayxxPTA7cTwxNjsrK3EpVVtxXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnEpO3ZhciBlZT10aGlzLl9hLHRlPXRoaXMuX2Isb2U9dGhpcy5fYyxzZT10aGlzLl9kO2VlPVYoZWUsdGUsb2Usc2UsVVswXSwzNjE0'@;
put 'MDkwMzYwLDcpLHNlPVYoc2UsZWUsdGUsb2UsVVsxXSwzOTA1NDAyNzEwLDEyKSxvZT1WKG9lLHNlLGVlLHRlLFVbMl0sNjA2MTA1ODE5LDE3KSx0ZT1WKHRlLG9lLHNlLGVlLFVbM10sMzI1MDQ0MTk2NiwyMiksZWU9VihlZSx0ZSxvZSxzZSxVWzRdLDQxMTg1NDgzOTksNyksc2U9VihzZSxl'@;
put 'ZSx0ZSxvZSxVWzVdLDEyMDAwODA0MjYsMTIpLG9lPVYob2Usc2UsZWUsdGUsVVs2XSwyODIxNzM1OTU1LDE3KSx0ZT1WKHRlLG9lLHNlLGVlLFVbN10sNDI0OTI2MTMxMywyMiksZWU9VihlZSx0ZSxvZSxzZSxVWzhdLDE3NzAwMzU0MTYsNyksc2U9VihzZSxlZSx0ZSxvZSxVWzldLDIzMzY1'@;
put 'NTI4NzksMTIpLG9lPVYob2Usc2UsZWUsdGUsVVsxMF0sNDI5NDkyNTIzMywxNyksdGU9Vih0ZSxvZSxzZSxlZSxVWzExXSwyMzA0NTYzMTM0LDIyKSxlZT1WKGVlLHRlLG9lLHNlLFVbMTJdLDE4MDQ2MDM2ODIsNyksc2U9VihzZSxlZSx0ZSxvZSxVWzEzXSw0MjU0NjI2MTk1LDEyKSxvZT1W'@;
put 'KG9lLHNlLGVlLHRlLFVbMTRdLDI3OTI5NjUwMDYsMTcpLGVlPUIoZWUsdGU9Vih0ZSxvZSxzZSxlZSxVWzE1XSwxMjM2NTM1MzI5LDIyKSxvZSxzZSxVWzFdLDQxMjkxNzA3ODYsNSksc2U9QihzZSxlZSx0ZSxvZSxVWzZdLDMyMjU0NjU2NjQsOSksb2U9QihvZSxzZSxlZSx0ZSxVWzExXSw2'@;
put 'NDM3MTc3MTMsMTQpLHRlPUIodGUsb2Usc2UsZWUsVVswXSwzOTIxMDY5OTk0LDIwKSxlZT1CKGVlLHRlLG9lLHNlLFVbNV0sMzU5MzQwODYwNSw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbMTBdLDM4MDE2MDgzLDkpLG9lPUIob2Usc2UsZWUsdGUsVVsxNV0sMzYzNDQ4ODk2MSwxNCksdGU9Qih0'@;
put 'ZSxvZSxzZSxlZSxVWzRdLDM4ODk0Mjk0NDgsMjApLGVlPUIoZWUsdGUsb2Usc2UsVVs5XSw1Njg0NDY0MzgsNSksc2U9QihzZSxlZSx0ZSxvZSxVWzE0XSwzMjc1MTYzNjA2LDkpLG9lPUIob2Usc2UsZWUsdGUsVVszXSw0MTA3NjAzMzM1LDE0KSx0ZT1CKHRlLG9lLHNlLGVlLFVbOF0sMTE2'@;
put 'MzUzMTUwMSwyMCksZWU9QihlZSx0ZSxvZSxzZSxVWzEzXSwyODUwMjg1ODI5LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVsyXSw0MjQzNTYzNTEyLDkpLG9lPUIob2Usc2UsZWUsdGUsVVs3XSwxNzM1MzI4NDczLDE0KSxlZT1ZKGVlLHRlPUIodGUsb2Usc2UsZWUsVVsxMl0sMjM2ODM1OTU2Miwy'@;
put 'MCksb2Usc2UsVVs1XSw0Mjk0NTg4NzM4LDQpLHNlPVkoc2UsZWUsdGUsb2UsVVs4XSwyMjcyMzkyODMzLDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbMTFdLDE4MzkwMzA1NjIsMTYpLHRlPVkodGUsb2Usc2UsZWUsVVsxNF0sNDI1OTY1Nzc0MCwyMyksZWU9WShlZSx0ZSxvZSxzZSxVWzFdLDI3'@;
put 'NjM5NzUyMzYsNCksc2U9WShzZSxlZSx0ZSxvZSxVWzRdLDEyNzI4OTMzNTMsMTEpLG9lPVkob2Usc2UsZWUsdGUsVVs3XSw0MTM5NDY5NjY0LDE2KSx0ZT1ZKHRlLG9lLHNlLGVlLFVbMTBdLDMyMDAyMzY2NTYsMjMpLGVlPVkoZWUsdGUsb2Usc2UsVVsxM10sNjgxMjc5MTc0LDQpLHNlPVko'@;
put 'c2UsZWUsdGUsb2UsVVswXSwzOTM2NDMwMDc0LDExKSxvZT1ZKG9lLHNlLGVlLHRlLFVbM10sMzU3MjQ0NTMxNywxNiksdGU9WSh0ZSxvZSxzZSxlZSxVWzZdLDc2MDI5MTg5LDIzKSxlZT1ZKGVlLHRlLG9lLHNlLFVbOV0sMzY1NDYwMjgwOSw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbMTJdLDM4'@;
put 'NzMxNTE0NjEsMTEpLG9lPVkob2Usc2UsZWUsdGUsVVsxNV0sNTMwNzQyNTIwLDE2KSxlZT1YKGVlLHRlPVkodGUsb2Usc2UsZWUsVVsyXSwzMjk5NjI4NjQ1LDIzKSxvZSxzZSxVWzBdLDQwOTYzMzY0NTIsNiksc2U9WChzZSxlZSx0ZSxvZSxVWzddLDExMjY4OTE0MTUsMTApLG9lPVgob2Us'@;
put 'c2UsZWUsdGUsVVsxNF0sMjg3ODYxMjM5MSwxNSksdGU9WCh0ZSxvZSxzZSxlZSxVWzVdLDQyMzc1MzMyNDEsMjEpLGVlPVgoZWUsdGUsb2Usc2UsVVsxMl0sMTcwMDQ4NTU3MSw2KSxzZT1YKHNlLGVlLHRlLG9lLFVbM10sMjM5OTk4MDY5MCwxMCksb2U9WChvZSxzZSxlZSx0ZSxVWzEwXSw0'@;
put 'MjkzOTE1NzczLDE1KSx0ZT1YKHRlLG9lLHNlLGVlLFVbMV0sMjI0MDA0NDQ5NywyMSksZWU9WChlZSx0ZSxvZSxzZSxVWzhdLDE4NzMzMTMzNTksNiksc2U9WChzZSxlZSx0ZSxvZSxVWzE1XSw0MjY0MzU1NTUyLDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbNl0sMjczNDc2ODkxNiwxNSksdGU9'@;
put 'WCh0ZSxvZSxzZSxlZSxVWzEzXSwxMzA5MTUxNjQ5LDIxKSxlZT1YKGVlLHRlLG9lLHNlLFVbNF0sNDE0OTQ0NDIyNiw2KSxzZT1YKHNlLGVlLHRlLG9lLFVbMTFdLDMxNzQ3NTY5MTcsMTApLG9lPVgob2Usc2UsZWUsdGUsVVsyXSw3MTg3ODcyNTksMTUpLHRlPVgodGUsb2Usc2UsZWUsVVs5'@;
put 'XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErZWV8MCx0aGlzLl9iPXRoaXMuX2IrdGV8MCx0aGlzLl9jPXRoaXMuX2Mrb2V8MCx0aGlzLl9kPXRoaXMuX2Qrc2V8MH0sRS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0Kytd'@;
put 'PTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJ'@;
put 'bnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBVPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBVLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLFUud3JpdGVJbnQzMkxFKHRoaXMu'@;
put 'X2IsNCksVS53cml0ZUludDMyTEUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxVfSxNLmV4cG9ydHM9RX0sMzA0NzooTSxPLFIpPT57dmFyIHo9Uig2MjQwKSxLPVIoOTkzMSk7ZnVuY3Rpb24gSShrKXt0aGlzLnJhbmQ9a3x8bmV3IEsuUmFuZH1NLmV4cG9ydHM9SSxJ'@;
put 'LmNyZWF0ZT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IEkoayl9LEkucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oayl7dmFyIEU9ay5iaXRMZW5ndGgoKSxqPU1hdGguY2VpbChFLzgpO2Rve3ZhciBWPW5ldyB6KHRoaXMucmFuZC5nZW5lcmF0ZShqKSl9d2hpbGUoVi5jbXAoayk+PTAp'@;
put 'O3JldHVybiBWfSxJLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKGssRSl7dmFyIGo9RS5zdWIoayk7cmV0dXJuIGsuYWRkKHRoaXMuX3JhbmRiZWxvdyhqKSl9LEkucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oayxFLGope3ZhciBWPWsuYml0TGVuZ3RoKCksQj16Lm1vbnQoayksWT1u'@;
put 'ZXcgeigxKS50b1JlZChCKTtFfHwoRT1NYXRoLm1heCgxLFYvNDh8MCkpO2Zvcih2YXIgWD1rLnN1Ym4oMSksVT0wOyFYLnRlc3RuKFUpO1UrKyk7Zm9yKHZhciBxPWsuc2hybihVKSxlZT1YLnRvUmVkKEIpO0U+MDtFLS0pe3ZhciB0ZT10aGlzLl9yYW5kcmFuZ2UobmV3IHooMiksWCk7aiYm'@;
put 'aih0ZSk7dmFyIG9lPXRlLnRvUmVkKEIpLnJlZFBvdyhxKTtpZigwIT09b2UuY21wKFkpJiYwIT09b2UuY21wKGVlKSl7Zm9yKHZhciBzZT0xO3NlPFU7c2UrKyl7aWYoMD09PShvZT1vZS5yZWRTcXIoKSkuY21wKFkpKXJldHVybiExO2lmKDA9PT1vZS5jbXAoZWUpKWJyZWFrfWlmKHNlPT09'@;
put 'VSlyZXR1cm4hMX19cmV0dXJuITB9LEkucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24oayxFKXt2YXIgaj1rLmJpdExlbmd0aCgpLFY9ei5tb250KGspLEI9bmV3IHooMSkudG9SZWQoVik7RXx8KEU9TWF0aC5tYXgoMSxqLzQ4fDApKTtmb3IodmFyIFk9ay5zdWJuKDEpLFg9MDshWS50'@;
put 'ZXN0bihYKTtYKyspO2Zvcih2YXIgVT1rLnNocm4oWCkscT1ZLnRvUmVkKFYpO0U+MDtFLS0pe3ZhciBlZT10aGlzLl9yYW5kcmFuZ2UobmV3IHooMiksWSksdGU9ay5nY2QoZWUpO2lmKDAhPT10ZS5jbXBuKDEpKXJldHVybiB0ZTt2YXIgb2U9ZWUudG9SZWQoVikucmVkUG93KFUpO2lmKDAh'@;
put 'PT1vZS5jbXAoQikmJjAhPT1vZS5jbXAocSkpe2Zvcih2YXIgc2U9MTtzZTxYO3NlKyspe2lmKDA9PT0ob2U9b2UucmVkU3FyKCkpLmNtcChCKSlyZXR1cm4gb2UuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKGspO2lmKDA9PT1vZS5jbXAocSkpYnJlYWt9aWYoc2U9PT1YKXJldHVybihvZT1vZS5y'@;
put 'ZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKGspfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24g'@;
put 'ayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlz'@;
put 'LndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUs'@;
put 'RS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05'@;
put 'NyYmUzw9MTAyP1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcu'@;
put 'Y2hhckNvZGVBdChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09'@;
put 'PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3Ry'@;
put 'aW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkp'@;
put 'fSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxn'@;
put 'LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9'@;
put 'LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53'@;
put 'b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2'@;
put 'LTJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08'@;
put 'PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0'@;
put 'aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRz'@;
put 'W0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0'@;
put 'aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3Io'@;
put 'dmFyIHc9Zy5sZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09'@;
put 'Sil7dmFyIHhlPTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9'@;
put 'ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJv'@;
put 'dG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3Rv'@;
put 'dHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5n'@;
put 'dGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAw'@;
put 'MCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3'@;
put 'MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2'@;
put 'MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFy'@;
put 'IHY9Zy5sZW5ndGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExl'@;
put 'PTY3MTA4ODYzJmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRz'@;
put 'W2ZlXT0wfExlLGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9'@;
put 'MCxwPTAsdz0wO3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0y'@;
put 'NiYmKHYtPTI2LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4'@;
put 'ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1Mu'@;
put 'bGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRo'@;
put 'aXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1'@;
put 'cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxp'@;
put 'a2UoaixnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJ'@;
put 'KHY8PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5p'@;
put 'c1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09'@;
put 'd31yZXR1cm4gZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04'@;
put 'JiYoUys9NCxDPj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEo'@;
put 'MTUmQykmJihTKz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEp'@;
put 'K0N9LEUucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxF'@;
put 'LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9u'@;
put 'ZSgpfSxFLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90'@;
put 'b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxl'@;
put 'bmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'SSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3Ro'@;
put 'O1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5k'@;
put 'KGcpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlz'@;
put 'LmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2'@;
put 'XT1DLndvcmRzW3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0o'@;
put 'dGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUy'@;
put 'Njt0aGlzLl9leHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90'@;
put 'eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRz'@;
put 'W1NdPUM/dGhpcy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhp'@;
put 'cy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8o'@;
put 'Uz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109'@;
put 'NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29y'@;
put 'ZHNbd107cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5u'@;
put 'ZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0'@;
put 'aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIg'@;
put 'Uyx2LHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0p'@;
put 'LSgwfHYud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8'@;
put 'Uy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5'@;
put 'MSZLZSxRZT1LZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1lLHplPU1lPj4+MTMsb3Q9MHxKWzddLHV0PTgxOTEmb3Qs'@;
put 'TXQ9b3Q+Pj4xMyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkxJkhuLGZuPUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0'@;
put 'PWhuPj4+MTMsX3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkxJkluLHluPUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJu'@;
put 'PXhuPj4+MTMsUm49MHxuZVs4XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9TWF0aC5pbXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUsZW4pLHA9KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5pbXVsKFdl'@;
put 'LGVuKXwwLHc9TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMp'@;
put 'fDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoUWUsZW4pfDAsdz1NYXRoLmltdWwoUWUsJG4pLHY9ditNYXRoLmltdWwoamUsZnQpfDAscD0ocD1wK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5p'@;
put 'bXVsKFdlLGZ0KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXww'@;
put 'KSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4p'@;
put 'fDApK01hdGguaW11bChRZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFFlLGZuKXwwLHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChM'@;
put 'ZSxOdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1uKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9'@;
put 'TWF0aC5pbXVsKFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUs'@;
put 'd3QpfDAscD0ocD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFlLHd0KXwwLHc9dytNYXRoLmltdWwoUWUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSxtbil8'@;
put 'MDt2YXIgS3I9KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUXQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEw'@;
put 'ODg2Myx2PU1hdGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwocWUsZm4pfDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChR'@;
put 'ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFFlLG1uKXwwLHY9ditNYXRoLmltdWwoamUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsUXQpfDA7dmFyIG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRu'@;
put 'KSkrTWF0aC5pbXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChUZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KFllLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11bChRZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFF0KXwwLHY9ditNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2Us'@;
put 'WXQpfDA7dmFyIEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHluKXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9'@;
put 'NjcxMDg4NjMsdj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0'@;
put 'aC5pbXVsKHplLGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmlt'@;
put 'dWwocWUsTnQpfDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFF0KXwwLHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChZZSxZdCl8MCkrTWF0aC5pbXVsKFFlLHB0KXwwLHc9dytNYXRoLmltdWwoUWUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0'@;
put 'aC5pbXVsKExlLHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxl'@;
put 'bikscD0ocD1NYXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGgu'@;
put 'aW11bChEZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVs'@;
put 'KGh0LG1uKXwwLHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsUXQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUs'@;
put 'cHQpfDAsdz13K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFFlLHluKXwwLHY9ditNYXRoLmltdWwoamUsc24pfDAscD0ocD1wK01hdGguaW11bChqZSxC'@;
put 'bil8MCkrTWF0aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5p'@;
put 'bXVsKEZlLFBuKXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoUHQsZm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChE'@;
put 'ZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDApK01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFF0'@;
put 'KXwwLHY9ditNYXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAs'@;
put 'dz13K01hdGguaW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCx3PXcrTWF0aC5pbXVsKFFlLEJuKXwwLHY9ditNYXRoLmltdWwoamUsJHQpfDAscD0ocD1wK01hdGguaW11bChqZSxQbil8MCkr'@;
put 'TWF0aC5pbXVsKFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsUG4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZl'@;
put 'LGpuKXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'UHQsWHQpfDApK01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmltdWwoTXQsbW4pfDAsdj12K01hdGguaW11bChEZSxJdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01h'@;
put 'dGguaW11bChiZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChRZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFBuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01h'@;
put 'dGguaW11bChqZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChi'@;
put 'bix3dCl8MCx3PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUXQp'@;
put 'fDApK01hdGguaW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LFF0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRo'@;
put 'LmltdWwoUGUsJHQpfDAscD0ocD1wK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsUG4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmlt'@;
put 'dWwoUWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1uKSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLG1u'@;
put 'KSx2PXYrTWF0aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUXQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFF0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9'@;
put 'dytNYXRoLmltdWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01h'@;
put 'dGguaW11bChodCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxQbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsUG4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8'@;
put 'MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5p'@;
put 'bXVsKFV0LFF0KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLFF0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYr'@;
put 'TWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFBuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0'@;
put 'aC5pbXVsKHFlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChi'@;
put 'bixZdCksdj12K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsUG4pfDA7dmFyIHlyPShmZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihw'@;
put 'PShwPXArTWF0aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0'@;
put 'aC5pbXVsKGJuLHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bCh1dCxQbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsUG4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcr'@;
put 'TWF0aC5pbXVsKHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFBuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXww'@;
put 'O2ZlPSgodz13K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxQbikpK01hdGguaW11bChibiwkdCl8MCx3PU1hdGguaW11bChibixQbik7dmFyIGhzPShmZSsodj12K01h'@;
put 'dGguaW11bChQdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1N'@;
put 'YXRoLmltdWwoVXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdp'@;
put 'LGRlWzJdPXhyLGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAh'@;
put 'PT1mZSYmKGRlWzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2'@;
put 'YXIgdj10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxl'@;
put 'bmd0aCt3Lmxlbmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2'@;
put 'YXIgV2U9KDB8cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14'@;
put 'ZSx4ZT1kZX1yZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhn'@;
put 'KS0xLHY9MDt2PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJu'@;
put 'IHZ9LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7'@;
put 'Zm9yKHZhciBKPTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0sV2U9dlt4'@;
put 'ZStPZV0sS2U9U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLFFlPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1RZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pdPVdlLVllLE9lIT09bmUmJihRZT1kZSpMZS1mZSpGZSxGZT1kZSpG'@;
put 'ZStmZSpMZSxMZT1RZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxD'@;
put 'LFMpe2lmKCEoUzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0w'@;
put 'O3Y8Qy8yO3YrKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7'@;
put 'Zm9yKHZhciBwPTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3Io'@;
put 'dmFyIEM9bmV3IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcg'@;
put 'QXJyYXkodiksbmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNi'@;
put 'KEMud29yZHMsQy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVbT2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0r'@;
put 'ZGVbT2VdKnhlW09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZl'@;
put 'LFMubGVuZ3RoPWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxm'@;
put 'PWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5'@;
put 'cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2'@;
put 'NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3Fy'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJp'@;
put 'dExlbmd0aCgpKSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNb'@;
put 'dl07disrLFM9Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+'@;
put 'PTApO3ZhciBDLFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4y'@;
put 'Ni1TfXcmJih0aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhp'@;
put 'cy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2'@;
put 'KS8yNjowO3ZhciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUu'@;
put 'bGVuZ3RoPXd9aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhp'@;
put 'cy5sZW5ndGgtMTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgm'@;
put 'Jih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8Qykp'@;
put 'fSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8'@;
put 'PVM/dGhpczooMCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndv'@;
put 'cmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihn'@;
put 'KXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5s'@;
put 'ZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlz'@;
put 'Lm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0'@;
put 'aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlw'@;
put 'ZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnBy'@;
put 'b3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYz'@;
put 'Jm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgp'@;
put 'O2ZvcihJKC0xPT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihn'@;
put 'LEMpe3ZhciBTLHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigi'@;
put 'bW9kIiE9PUMpeyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYm'@;
put 'KHY9ZmUsSiYmKEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1'@;
put 'Ym11bChwLExlLHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1T'@;
put 'JiZ2Lml1c2hybihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRp'@;
put 'dmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10'@;
put 'aGlzLmRpdm1vZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0'@;
put 'aXZlJiZwLmlzdWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/'@;
put 'e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUu'@;
put 'cHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7'@;
put 'cmV0dXJuIHc8MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0x'@;
put 'O3Y+PTA7di0tKVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpD'@;
put 'O3RoaXMud29yZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJv'@;
put 'KCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJu'@;
put 'KDEpLCsrbmU7Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2Rk'@;
put 'KCkpJiYodi5pYWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkm'@;
put 'Jih3LmlhZGQoZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90'@;
put 'b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5j'@;
put 'bXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTsh'@;
put 'KFMud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJu'@;
put 'KHY9MD09PUMuY21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9u'@;
put 'ZSgpO0MubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9'@;
put 'Qy5jbXAoUyk7aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3Rv'@;
put 'dHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxF'@;
put 'LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09'@;
put 'cCYmdzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigp'@;
put 'e3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlw'@;
put 'KCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5j'@;
put 'dGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51'@;
put 'Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1w'@;
put 'KXt2PHA/Qz0tMTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuLTE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10'@;
put 'aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVy'@;
put 'IGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJl'@;
put 'ZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVs'@;
put 'IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVk'@;
put 'LmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZt'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJl'@;
put 'ZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVk'@;
put 'Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRo'@;
put 'aXMuaz1uZXcgRSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZm'@;
put 'ZmMyZiIpfWZ1bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBnKXt2YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9'@;
put 'dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5t'@;
put 'KSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxs'@;
put 'KTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExl'@;
put 'bmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5'@;
put 'cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRo'@;
put 'Lm1pbihnLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtw'@;
put 'PGcubGVuZ3RoO3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tn'@;
put 'Lmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29y'@;
put 'ZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5Kigw'@;
put 'fGcud29yZHNbU10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNl'@;
put 'O2Vsc2UgaWYoInAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rp'@;
put 'b24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwi'@;
put 'cmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3Jj'@;
put 'ZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMu'@;
put 'X3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNt'@;
put 'cCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1'@;
put 'Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9'@;
put 'LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90'@;
put 'eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFy'@;
put 'IEM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNo'@;
put 'cm4oMSk7SSghdi5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSku'@;
put 'Y21wKEopOylkZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9TGUsamU9MDswIT09T2UuY21wKHcpO2plKyspT2U9T2Uu'@;
put 'cmVkU3FyKCk7SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1n'@;
put 'Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigw'@;
put 'PT09Qy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5n'@;
put 'dGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9'@;
put 'PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUu'@;
put 'Y29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRo'@;
put 'aXMuc2hpZnQpKX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVy'@;
put 'biBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMu'@;
put 'bSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFy'@;
put 'IFM9Zy5tdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDAp'@;
put 'PDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSw5NzQ2Ok09Pntm'@;
put 'dW5jdGlvbiBPKFIseil7aWYoIVIpdGhyb3cgbmV3IEVycm9yKHp8fCJBc3NlcnRpb24gZmFpbGVkIil9TS5leHBvcnRzPU8sTy5lcXVhbD1mdW5jdGlvbihSLHosSyl7aWYoUiE9eil0aHJvdyBuZXcgRXJyb3IoS3x8IkFzc2VydGlvbiBmYWlsZWQ6ICIrUisiICE9ICIreil9fSw0NTA0OihN'@;
put 'LE8pPT57InVzZSBzdHJpY3QiO3ZhciBSPU87ZnVuY3Rpb24geihJKXtyZXR1cm4gMT09PUkubGVuZ3RoPyIwIitJOkl9ZnVuY3Rpb24gSyhJKXtmb3IodmFyIGs9IiIsRT0wO0U8SS5sZW5ndGg7RSsrKWsrPXooSVtFXS50b1N0cmluZygxNikpO3JldHVybiBrfVIudG9BcnJheT1mdW5jdGlv'@;
put 'bihJLGspe2lmKEFycmF5LmlzQXJyYXkoSSkpcmV0dXJuIEkuc2xpY2UoKTtpZighSSlyZXR1cm5bXTt2YXIgRT1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEkpe2Zvcih2YXIgaj0wO2o8SS5sZW5ndGg7aisrKUVbal09MHxJW2pdO3JldHVybiBFfWlmKCJoZXgiPT09aylmb3IoKEk9SS5yZXBs'@;
put 'YWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihJPSIwIitJKSxqPTA7ajxJLmxlbmd0aDtqKz0yKUUucHVzaChwYXJzZUludChJW2pdK0lbaisxXSwxNikpO2Vsc2UgZm9yKGo9MDtqPEkubGVuZ3RoO2orKyl7dmFyIFY9SS5jaGFyQ29kZUF0KGopLEI9Vj4+OCxZPTI1NSZW'@;
put 'O0I/RS5wdXNoKEIsWSk6RS5wdXNoKFkpfXJldHVybiBFfSxSLnplcm8yPXosUi50b0hleD1LLFIuZW5jb2RlPWZ1bmN0aW9uKEksayl7cmV0dXJuImhleCI9PT1rP0soSSk6SX19LDExNzE6KE0sTyxSKT0+e3ZhciB6PVIoNTEwOCk7TS5leHBvcnRzPWVlLGVlLk1pbmltYXRjaD10ZTt2YXIg'@;
put 'Sz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gUigyNTIwKX1jYXRjaHt9fSgpfHx7c2VwOiIvIn07ZWUuc2VwPUsuc2VwO3ZhciBJPWVlLkdMT0JTVEFSPXRlLkdMT0JTVEFSPXt9LGs9UigzNjQ0KSxFPXsiISI6e29wZW46Iig/Oig/ISg/OiIsY2xvc2U6IikpW14vXSo/KSJ9LCI/Ijp7b3Blbjoi'@;
put 'KD86IixjbG9zZToiKT8ifSwiKyI6e29wZW46Iig/OiIsY2xvc2U6IikrIn0sIioiOntvcGVuOiIoPzoiLGNsb3NlOiIpKiJ9LCJAIjp7b3BlbjoiKD86IixjbG9zZToiKSJ9fSxqPSJbXi9dIixWPWorIio/IixYPSIoKS4qe30rP1tdXiRcXCEiLnNwbGl0KCIiKS5yZWR1Y2UoZnVuY3Rpb24o'@;
put 'dWUsY2Upe3JldHVybiB1ZVtjZV09ITAsdWV9LHt9KSxVPS9cLysvO2Z1bmN0aW9uIHEodWUsY2Upe2NlPWNlfHx7fTt2YXIgRz17fTtyZXR1cm4gT2JqZWN0LmtleXModWUpLmZvckVhY2goZnVuY3Rpb24oYil7R1tiXT11ZVtiXX0pLE9iamVjdC5rZXlzKGNlKS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KGIpe0dbYl09Y2VbYl19KSxHfWZ1bmN0aW9uIGVlKHVlLGNlLEcpe3JldHVybiBzZShjZSksR3x8KEc9e30pLCEoIUcubm9jb21tZW50JiYiIyI9PT1jZS5jaGFyQXQoMCkpJiZuZXcgdGUoY2UsRykubWF0Y2godWUpfWZ1bmN0aW9uIHRlKHVlLGNlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0'@;
put 'ZSkpcmV0dXJuIG5ldyB0ZSh1ZSxjZSk7c2UodWUpLGNlfHwoY2U9e30pLHVlPXVlLnRyaW0oKSxjZS5hbGxvd1dpbmRvd3NFc2NhcGV8fCIvIj09PUsuc2VwfHwodWU9dWUuc3BsaXQoSy5zZXApLmpvaW4oIi8iKSksdGhpcy5vcHRpb25zPWNlLHRoaXMuc2V0PVtdLHRoaXMucGF0dGVybj11'@;
put 'ZSx0aGlzLnJlZ2V4cD1udWxsLHRoaXMubmVnYXRlPSExLHRoaXMuY29tbWVudD0hMSx0aGlzLmVtcHR5PSExLHRoaXMucGFydGlhbD0hIWNlLnBhcnRpYWwsdGhpcy5tYWtlKCl9ZnVuY3Rpb24gb2UodWUsY2Upe3JldHVybiBjZXx8KGNlPXRoaXMgaW5zdGFuY2VvZiB0ZT90aGlzLm9wdGlv'@;
put 'bnM6e30pLHNlKHVlPXZvaWQgMD09PXVlP3RoaXMucGF0dGVybjp1ZSksY2Uubm9icmFjZXx8IS9ceyg/Oig/IVx7KS4pKlx9Ly50ZXN0KHVlKT9bdWVdOmsodWUpfWVlLmZpbHRlcj1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIGNlPWNlfHx7fSxmdW5jdGlvbihHLGIsRCl7cmV0dXJuIGVlKEcs'@;
put 'dWUsY2UpfX0sZWUuZGVmYXVsdHM9ZnVuY3Rpb24odWUpe2lmKCF1ZXx8Im9iamVjdCIhPXR5cGVvZiB1ZXx8IU9iamVjdC5rZXlzKHVlKS5sZW5ndGgpcmV0dXJuIGVlO3ZhciBjZT1lZSxHPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gY2UoYixELHEodWUsSCkpfTtyZXR1cm4oRy5NaW5pbWF0'@;
put 'Y2g9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbmV3IGNlLk1pbmltYXRjaChiLHEodWUsRCkpfSkuZGVmYXVsdHM9ZnVuY3Rpb24oYil7cmV0dXJuIGNlLmRlZmF1bHRzKHEodWUsYikpLk1pbmltYXRjaH0sRy5maWx0ZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gY2UuZmlsdGVyKGIscSh1ZSxEKSl9'@;
put 'LEcuZGVmYXVsdHM9ZnVuY3Rpb24oYil7cmV0dXJuIGNlLmRlZmF1bHRzKHEodWUsYikpfSxHLm1ha2VSZT1mdW5jdGlvbihiLEQpe3JldHVybiBjZS5tYWtlUmUoYixxKHVlLEQpKX0sRy5icmFjZUV4cGFuZD1mdW5jdGlvbihiLEQpe3JldHVybiBjZS5icmFjZUV4cGFuZChiLHEodWUsRCkp'@;
put 'fSxHLm1hdGNoPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gY2UubWF0Y2goYixELHEodWUsSCkpfSxHfSx0ZS5kZWZhdWx0cz1mdW5jdGlvbih1ZSl7cmV0dXJuIGVlLmRlZmF1bHRzKHVlKS5NaW5pbWF0Y2h9LHRlLnByb3RvdHlwZS5kZWJ1Zz1mdW5jdGlvbigpe30sdGUucHJvdG90eXBlLm1h'@;
put 'a2U9ZnVuY3Rpb24oKXt2YXIgdWU9dGhpcy5wYXR0ZXJuLGNlPXRoaXMub3B0aW9ucztpZihjZS5ub2NvbW1lbnR8fCIjIiE9PXVlLmNoYXJBdCgwKSlpZih1ZSl7dGhpcy5wYXJzZU5lZ2F0ZSgpO3ZhciBHPXRoaXMuZ2xvYlNldD10aGlzLmJyYWNlRXhwYW5kKCk7Y2UuZGVidWcmJih0aGlz'@;
put 'LmRlYnVnPWZ1bmN0aW9uKCl7ei5lcnJvci5hcHBseSh6LGFyZ3VtZW50cyl9KSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSxHPXRoaXMuZ2xvYlBhcnRzPUcubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLnNwbGl0KFUpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz1HLm1hcChm'@;
put 'dW5jdGlvbihiLEQsSCl7cmV0dXJuIGIubWFwKHRoaXMucGFyc2UsdGhpcyl9LHRoaXMpLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLEc9Ry5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuLTE9PT1iLmluZGV4T2YoITEpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksdGhpcy5zZXQ9'@;
put 'R31lbHNlIHRoaXMuZW1wdHk9ITA7ZWxzZSB0aGlzLmNvbW1lbnQ9ITB9LHRlLnByb3RvdHlwZS5wYXJzZU5lZ2F0ZT1mdW5jdGlvbigpe3ZhciB1ZT10aGlzLnBhdHRlcm4sY2U9ITEsYj0wO2lmKCF0aGlzLm9wdGlvbnMubm9uZWdhdGUpe2Zvcih2YXIgRD0wLEg9dWUubGVuZ3RoO0Q8SCYm'@;
put 'IiEiPT09dWUuY2hhckF0KEQpO0QrKyljZT0hY2UsYisrO2ImJih0aGlzLnBhdHRlcm49dWUuc3Vic3RyKGIpKSx0aGlzLm5lZ2F0ZT1jZX19LGVlLmJyYWNlRXhwYW5kPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gb2UodWUsY2UpfSx0ZS5wcm90b3R5cGUuYnJhY2VFeHBhbmQ9b2U7dmFyIHNl'@;
put 'PWZ1bmN0aW9uKHVlKXtpZigic3RyaW5nIiE9dHlwZW9mIHVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgcGF0dGVybiIpO2lmKHVlLmxlbmd0aD42NTUzNil0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXR0ZXJuIGlzIHRvbyBsb25nIil9O3RlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlv'@;
put 'bih1ZSxjZSl7c2UodWUpO3ZhciBHPXRoaXMub3B0aW9ucztpZigiKioiPT09dWUpe2lmKCFHLm5vZ2xvYnN0YXIpcmV0dXJuIEk7dWU9IioifWlmKCIiPT09dWUpcmV0dXJuIiI7dmFyIGIsRD0iIixIPSEhRy5ub2Nhc2UsTj0hMSxnPVtdLEM9W10sUz0hMSx2PS0xLHA9LTEsdz0iLiI9PT11'@;
put 'ZS5jaGFyQXQoMCk/IiI6Ry5kb3Q/Iig/ISg/Ol58XFwvKVxcLnsxLDJ9KD86JHxcXC8pKSI6Iig/IVxcLikiLEo9dGhpcztmdW5jdGlvbiBuZSgpe2lmKGIpe3N3aXRjaChiKXtjYXNlIioiOkQrPVYsSD0hMDticmVhaztjYXNlIj8iOkQrPWosSD0hMDticmVhaztkZWZhdWx0OkQrPSJcXCIr'@;
put 'Yn1KLmRlYnVnKCJjbGVhclN0YXRlQ2hhciAlaiAlaiIsYixEKSxiPSExfX1mb3IodmFyIGRlLGZlPTAseGU9dWUubGVuZ3RoO2ZlPHhlJiYoZGU9dWUuY2hhckF0KGZlKSk7ZmUrKylpZih0aGlzLmRlYnVnKCIlc1x0JXMgJXMgJWoiLHVlLGZlLEQsZGUpLE4mJlhbZGVdKUQrPSJcXCIrZGUs'@;
put 'Tj0hMTtlbHNlIHN3aXRjaChkZSl7Y2FzZSIvIjpyZXR1cm4hMTtjYXNlIlxcIjpuZSgpLE49ITA7Y29udGludWU7Y2FzZSI/IjpjYXNlIioiOmNhc2UiKyI6Y2FzZSJAIjpjYXNlIiEiOmlmKHRoaXMuZGVidWcoIiVzXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyIix1ZSxmZSxELGRlKSxTKXt0'@;
put 'aGlzLmRlYnVnKCIgIGluIGNsYXNzIiksIiEiPT09ZGUmJmZlPT09cCsxJiYoZGU9Il4iKSxEKz1kZTtjb250aW51ZX1KLmRlYnVnKCJjYWxsIGNsZWFyU3RhdGVDaGFyICVqIixiKSxuZSgpLGI9ZGUsRy5ub2V4dCYmbmUoKTtjb250aW51ZTtjYXNlIigiOmlmKFMpe0QrPSIoIjtjb250aW51'@;
put 'ZX1pZighYil7RCs9IlxcKCI7Y29udGludWV9Zy5wdXNoKHt0eXBlOmIsc3RhcnQ6ZmUtMSxyZVN0YXJ0OkQubGVuZ3RoLG9wZW46RVtiXS5vcGVuLGNsb3NlOkVbYl0uY2xvc2V9KSx0aGlzLmRlYnVnKCJwbFR5cGUgJWogJWoiLGIsRCs9IiEiPT09Yj8iKD86KD8hKD86IjoiKD86IiksYj0h'@;
put 'MTtjb250aW51ZTtjYXNlIikiOmlmKFN8fCFnLmxlbmd0aCl7RCs9IlxcKSI7Y29udGludWV9bmUoKSxIPSEwO3ZhciBMZT1nLnBvcCgpO0QrPUxlLmNsb3NlLCIhIj09PUxlLnR5cGUmJkMucHVzaChMZSksTGUucmVFbmQ9RC5sZW5ndGg7Y29udGludWU7Y2FzZSJ8IjppZihTfHwhZy5sZW5n'@;
put 'dGh8fE4pe0QrPSJcXHwiLE49ITE7Y29udGludWV9bmUoKSxEKz0ifCI7Y29udGludWU7Y2FzZSJbIjppZihuZSgpLFMpe0QrPSJcXCIrZGU7Y29udGludWV9Uz0hMCxwPWZlLHY9RC5sZW5ndGgsRCs9ZGU7Y29udGludWU7Y2FzZSJdIjppZihmZT09PXArMXx8IVMpe0QrPSJcXCIrZGUsTj0h'@;
put 'MTtjb250aW51ZX12YXIgRmU9dWUuc3Vic3RyaW5nKHArMSxmZSk7dHJ5e1JlZ0V4cCgiWyIrRmUrIl0iKX1jYXRjaHt2YXIgT2U9dGhpcy5wYXJzZShGZSxoZSk7RD1ELnN1YnN0cigwLHYpKyJcXFsiK09lWzBdKyJcXF0iLEg9SHx8T2VbMV0sUz0hMTtjb250aW51ZX1IPSEwLFM9ITEsRCs9'@;
put 'ZGU7Y29udGludWU7ZGVmYXVsdDpuZSgpLE4/Tj0hMTohWFtkZV18fCJeIj09PWRlJiZTfHwoRCs9IlxcIiksRCs9ZGV9Zm9yKFMmJihGZT11ZS5zdWJzdHIocCsxKSxPZT10aGlzLnBhcnNlKEZlLGhlKSxEPUQuc3Vic3RyKDAsdikrIlxcWyIrT2VbMF0sSD1IfHxPZVsxXSksTGU9Zy5wb3Ao'@;
put 'KTtMZTtMZT1nLnBvcCgpKXt2YXIgamU9RC5zbGljZShMZS5yZVN0YXJ0K0xlLm9wZW4ubGVuZ3RoKTt0aGlzLmRlYnVnKCJzZXR0aW5nIHRhaWwiLEQsTGUpLGplPWplLnJlcGxhY2UoLygoPzpcXHsyfSl7MCw2NH0pKFxcPylcfC9nLGZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gemV8fCh6'@;
put 'ZT0iXFwiKSxEZStEZSt6ZSsifCJ9KSx0aGlzLmRlYnVnKCJ0YWlsPSVqXG4gICAlcyIsamUsamUsTGUsRCk7dmFyIFdlPSIqIj09PUxlLnR5cGU/VjoiPyI9PT1MZS50eXBlP2o6IlxcIitMZS50eXBlO0g9ITAsRD1ELnNsaWNlKDAsTGUucmVTdGFydCkrV2UrIlxcKCIramV9bmUoKSxOJiYo'@;
put 'RCs9IlxcXFwiKTt2YXIgS2U9ITE7c3dpdGNoKEQuY2hhckF0KDApKXtjYXNlIlsiOmNhc2UiLiI6Y2FzZSIoIjpLZT0hMH1mb3IodmFyIFllPUMubGVuZ3RoLTE7WWU+LTE7WWUtLSl7dmFyIFFlPUNbWWVdLGx0PUQuc2xpY2UoMCxRZS5yZVN0YXJ0KSxQZT1ELnNsaWNlKFFlLnJlU3RhcnQs'@;
put 'UWUucmVFbmQtOCksYmU9RC5zbGljZShRZS5yZUVuZC04LFFlLnJlRW5kKSxBZT1ELnNsaWNlKFFlLnJlRW5kKTtiZSs9QWU7dmFyIFRlPWx0LnNwbGl0KCIoIikubGVuZ3RoLTEscWU9QWU7Zm9yKGZlPTA7ZmU8VGU7ZmUrKylxZT1xZS5yZXBsYWNlKC9cKVsrKj9dPy8sIiIpO3ZhciBYZT0i'@;
put 'IjsiIj09PShBZT1xZSkmJmNlIT09aGUmJihYZT0iJCIpLEQ9bHQrUGUrQWUrWGUrYmV9aWYoIiIhPT1EJiZIJiYoRD0iKD89LikiK0QpLEtlJiYoRD13K0QpLGNlPT09aGUpcmV0dXJuW0QsSF07aWYoIUgpcmV0dXJuIHVlLnJlcGxhY2UoL1xcKC4pL2csIiQxIik7dmFyIFVlPUcubm9jYXNl'@;
put 'PyJpIjoiIjt0cnl7dmFyIGh0PW5ldyBSZWdFeHAoIl4iK0QrIiQiLFVlKX1jYXRjaHtyZXR1cm4gbmV3IFJlZ0V4cCgiJC4iKX1yZXR1cm4gaHQuX2dsb2I9dWUsaHQuX3NyYz1ELGh0fTt2YXIgaGU9e307ZWUubWFrZVJlPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gbmV3IHRlKHVlLGNlfHx7'@;
put 'fSkubWFrZVJlKCl9LHRlLnByb3RvdHlwZS5tYWtlUmU9ZnVuY3Rpb24oKXtpZih0aGlzLnJlZ2V4cHx8ITE9PT10aGlzLnJlZ2V4cClyZXR1cm4gdGhpcy5yZWdleHA7dmFyIHVlPXRoaXMuc2V0O2lmKCF1ZS5sZW5ndGgpcmV0dXJuIHRoaXMucmVnZXhwPSExLHRoaXMucmVnZXhwO3ZhciBj'@;
put 'ZT10aGlzLm9wdGlvbnMsRz1jZS5ub2dsb2JzdGFyP1Y6Y2UuZG90PyIoPzooPyEoPzpcXC98XikoPzpcXC57MSwyfSkoJHxcXC8pKS4pKj8iOiIoPzooPyEoPzpcXC98XilcXC4pLikqPyIsYj1jZS5ub2Nhc2U/ImkiOiIiLEQ9dWUubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBILm1hcChmdW5j'@;
put 'dGlvbihOKXtyZXR1cm4gTj09PUk/Rzoic3RyaW5nIj09dHlwZW9mIE4/Ti5yZXBsYWNlKC9bLVtcXXt9KCkqKz8uLFxcXiR8I1xzXS9nLCJcXCQmIik6Ti5fc3JjfSkuam9pbigiXFwvIil9KS5qb2luKCJ8Iik7RD0iXig/OiIrRCsiKSQiLHRoaXMubmVnYXRlJiYoRD0iXig/ISIrRCsiKS4q'@;
put 'JCIpO3RyeXt0aGlzLnJlZ2V4cD1uZXcgUmVnRXhwKEQsYil9Y2F0Y2h7dGhpcy5yZWdleHA9ITF9cmV0dXJuIHRoaXMucmVnZXhwfSxlZS5tYXRjaD1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYj1uZXcgdGUoY2UsRz1HfHx7fSk7cmV0dXJuIHVlPXVlLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1'@;
put 'cm4gYi5tYXRjaChEKX0pLGIub3B0aW9ucy5ub251bGwmJiF1ZS5sZW5ndGgmJnVlLnB1c2goY2UpLHVlfSx0ZS5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odWUsY2Upe2lmKHZvaWQgMD09PWNlJiYoY2U9dGhpcy5wYXJ0aWFsKSx0aGlzLmRlYnVnKCJtYXRjaCIsdWUsdGhpcy5wYXR0ZXJu'@;
put 'KSx0aGlzLmNvbW1lbnQpcmV0dXJuITE7aWYodGhpcy5lbXB0eSlyZXR1cm4iIj09PXVlO2lmKCIvIj09PXVlJiZjZSlyZXR1cm4hMDt2YXIgRz10aGlzLm9wdGlvbnM7Ii8iIT09Sy5zZXAmJih1ZT11ZS5zcGxpdChLLnNlcCkuam9pbigiLyIpKSx1ZT11ZS5zcGxpdChVKSx0aGlzLmRlYnVn'@;
put 'KHRoaXMucGF0dGVybiwic3BsaXQiLHVlKTt2YXIgYixELEg9dGhpcy5zZXQ7Zm9yKHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCJzZXQiLEgpLEQ9dWUubGVuZ3RoLTE7RD49MCYmIShiPXVlW0RdKTtELS0pO2ZvcihEPTA7RDxILmxlbmd0aDtEKyspe3ZhciBOPUhbRF0sZz11ZTtpZihHLm1h'@;
put 'dGNoQmFzZSYmMT09PU4ubGVuZ3RoJiYoZz1bYl0pLHRoaXMubWF0Y2hPbmUoZyxOLGNlKSlyZXR1cm4hIUcuZmxpcE5lZ2F0ZXx8IXRoaXMubmVnYXRlfXJldHVybiFHLmZsaXBOZWdhdGUmJnRoaXMubmVnYXRlfSx0ZS5wcm90b3R5cGUubWF0Y2hPbmU9ZnVuY3Rpb24odWUsY2UsRyl7dmFy'@;
put 'IGI9dGhpcy5vcHRpb25zO3RoaXMuZGVidWcoIm1hdGNoT25lIix7dGhpczp0aGlzLGZpbGU6dWUscGF0dGVybjpjZX0pLHRoaXMuZGVidWcoIm1hdGNoT25lIix1ZS5sZW5ndGgsY2UubGVuZ3RoKTtmb3IodmFyIEQ9MCxIPTAsTj11ZS5sZW5ndGgsZz1jZS5sZW5ndGg7RDxOJiZIPGc7RCsr'@;
put 'LEgrKyl7dGhpcy5kZWJ1ZygibWF0Y2hPbmUgbG9vcCIpO3ZhciBDLFM9Y2VbSF0sdj11ZVtEXTtpZih0aGlzLmRlYnVnKGNlLFMsdiksITE9PT1TKXJldHVybiExO2lmKFM9PT1JKXt0aGlzLmRlYnVnKCJHTE9CU1RBUiIsW2NlLFMsdl0pO3ZhciBwPUQsdz1IKzE7aWYodz09PWcpe2Zvcih0'@;
put 'aGlzLmRlYnVnKCIqKiBhdCB0aGUgZW5kIik7RDxOO0QrKylpZigiLiI9PT11ZVtEXXx8Ii4uIj09PXVlW0RdfHwhYi5kb3QmJiIuIj09PXVlW0RdLmNoYXJBdCgwKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoO3A8Tjspe3ZhciBKPXVlW3BdO2lmKHRoaXMuZGVidWcoIlxuZ2xvYnN0YXIgd2hp'@;
put 'bGUiLHVlLHAsY2UsdyxKKSx0aGlzLm1hdGNoT25lKHVlLnNsaWNlKHApLGNlLnNsaWNlKHcpLEcpKXJldHVybiB0aGlzLmRlYnVnKCJnbG9ic3RhciBmb3VuZCBtYXRjaCEiLHAsTixKKSwhMDtpZigiLiI9PT1KfHwiLi4iPT09Snx8IWIuZG90JiYiLiI9PT1KLmNoYXJBdCgwKSl7dGhpcy5k'@;
put 'ZWJ1ZygiZG90IGRldGVjdGVkISIsdWUscCxjZSx3KTticmVha310aGlzLmRlYnVnKCJnbG9ic3RhciBzd2FsbG93IGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlIikscCsrfXJldHVybiEoIUd8fCh0aGlzLmRlYnVnKCJcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8iLHVlLHAsY2UsdykscCE9PU4p'@;
put 'KX1pZigic3RyaW5nIj09dHlwZW9mIFM/dGhpcy5kZWJ1Zygic3RyaW5nIG1hdGNoIixTLHYsQz12PT09Uyk6KEM9di5tYXRjaChTKSx0aGlzLmRlYnVnKCJwYXR0ZXJuIG1hdGNoIixTLHYsQykpLCFDKXJldHVybiExfWlmKEQ9PT1OJiZIPT09ZylyZXR1cm4hMDtpZihEPT09TilyZXR1cm4g'@;
put 'RztpZihIPT09ZylyZXR1cm4gRD09PU4tMSYmIiI9PT11ZVtEXTt0aHJvdyBuZXcgRXJyb3IoInd0Zj8iKX19LDQyNDQ6TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTz1mdW5jdGlvbihSKXtyZXR1cm4gUiE9Un07TS5leHBvcnRzPWZ1bmN0aW9uKFIseil7cmV0dXJuIDA9PT1SJiYwPT09ej8xL1I9'@;
put 'PTEvejpSPT09enx8ISghTyhSKXx8IU8oeikpfX0sNjA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0Mjg5KSxLPVIoNTU1OSksST1SKDQyNDQpLGs9Uig1NjI0KSxFPVIoMjI4MSksaj1LKGsoKSxPYmplY3QpO3ooaix7Z2V0UG9seWZpbGw6ayxpbXBsZW1lbnRhdGlvbjpJLHNo'@;
put 'aW06RX0pLE0uZXhwb3J0cz1qfSw1NjI0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MjQ0KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczp6fX0sMjI4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'PVIoNTYyNCksSz1SKDQyODkpO00uZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBJPXooKTtyZXR1cm4gSyhPYmplY3Qse2lzOkl9LHtpczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXMhPT1JfX0pLEl9fSw4OTg3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo7aWYoIU9iamVjdC5rZXlz'@;
put 'KXt2YXIgSz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxrPVIoMTQxNCksRT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGo9IUUuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5nIiksVj1FLmNhbGwo'@;
put 'ZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxCPVsidG9TdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sWT1mdW5jdGlvbihxKXt2YXIgZWU9cS5jb25z'@;
put 'dHJ1Y3RvcjtyZXR1cm4gZWUmJmVlLnByb3RvdHlwZT09PXF9LFg9eyRhcHBsaWNhdGlvbkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxs'@;
put 'c2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWlnaHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6'@;
put 'ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86ITAsJHdpbmRvdzohMH0sVT1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2Zvcih2YXIgcSBpbiB3aW5kb3cpdHJ5e2lmKCFYWyIkIitxXSYmSy5jYWxsKHdpbmRvdyxxKSYm'@;
put 'bnVsbCE9PXdpbmRvd1txXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbcV0pdHJ5e1kod2luZG93W3FdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7ej1mdW5jdGlvbihxKXt2YXIgZWU9bnVsbCE9PXEmJiJvYmplY3QiPT10eXBlb2YgcSx0ZT0iW29iamVj'@;
put 'dCBGdW5jdGlvbl0iPT09SS5jYWxsKHEpLG9lPWsocSksc2U9ZWUmJiJbb2JqZWN0IFN0cmluZ10iPT09SS5jYWxsKHEpLGhlPVtdO2lmKCFlZSYmIXRlJiYhb2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciB1ZT1WJiZ0ZTtp'@;
put 'ZihzZSYmcS5sZW5ndGg+MCYmIUsuY2FsbChxLDApKWZvcih2YXIgY2U9MDtjZTxxLmxlbmd0aDsrK2NlKWhlLnB1c2goU3RyaW5nKGNlKSk7aWYob2UmJnEubGVuZ3RoPjApZm9yKHZhciBHPTA7RzxxLmxlbmd0aDsrK0cpaGUucHVzaChTdHJpbmcoRykpO2Vsc2UgZm9yKHZhciBiIGluIHEp'@;
put 'dWUmJiJwcm90b3R5cGUiPT09Ynx8IUsuY2FsbChxLGIpfHxoZS5wdXNoKFN0cmluZyhiKSk7aWYoailmb3IodmFyIEQ9ZnVuY3Rpb24oTil7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCFVKXJldHVybiBZKE4pO3RyeXtyZXR1cm4gWShOKX1jYXRjaHtyZXR1cm4hMX19KHEpLEg9MDtIPEIubGVu'@;
put 'Z3RoOysrSClEJiYiY29uc3RydWN0b3IiPT09QltIXXx8IUsuY2FsbChxLEJbSF0pfHxoZS5wdXNoKEJbSF0pO3JldHVybiBoZX19TS5leHBvcnRzPXp9LDIyMTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1BcnJheS5wcm90b3R5cGUuc2xpY2UsSz1SKDE0MTQpLEk9T2JqZWN0Lmtl'@;
put 'eXMsaz1JP2Z1bmN0aW9uKGope3JldHVybiBJKGopfTpSKDg5ODcpLEU9T2JqZWN0LmtleXM7ay5zaGltPWZ1bmN0aW9uKCl7aWYoT2JqZWN0LmtleXMpe3ZhciBqPWZ1bmN0aW9uKCl7dmFyIFY9T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gViYmVi5sZW5ndGg9PT1hcmd1bWVudHMu'@;
put 'bGVuZ3RofSgxLDIpO2p8fChPYmplY3Qua2V5cz1mdW5jdGlvbihWKXtyZXR1cm4gSyhWKT9FKHouY2FsbChWKSk6RShWKX0pfWVsc2UgT2JqZWN0LmtleXM9aztyZXR1cm4gT2JqZWN0LmtleXN8fGt9LE0uZXhwb3J0cz1rfSwxNDE0Ok09PnsidXNlIHN0cmljdCI7dmFyIE89T2JqZWN0LnBy'@;
put 'b3RvdHlwZS50b1N0cmluZztNLmV4cG9ydHM9ZnVuY3Rpb24oUil7dmFyIHo9Ty5jYWxsKFIpLEs9IltvYmplY3QgQXJndW1lbnRzXSI9PT16O3JldHVybiBLfHwoSz0iW29iamVjdCBBcnJheV0iIT09eiYmbnVsbCE9PVImJiJvYmplY3QiPT10eXBlb2YgUiYmIm51bWJlciI9PXR5cGVvZiBS'@;
put 'Lmxlbmd0aCYmUi5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PLmNhbGwoUi5jYWxsZWUpKSxLfX0sNzc4OihNLE8sUik9Pnt2YXIgej1SKDI0NzkpO2Z1bmN0aW9uIEsoayl7dmFyIEU9ZnVuY3Rpb24oKXtyZXR1cm4gRS5jYWxsZWQ/RS52YWx1ZTooRS5jYWxsZWQ9ITAsRS52'@;
put 'YWx1ZT1rLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9O3JldHVybiBFLmNhbGxlZD0hMSxFfWZ1bmN0aW9uIEkoayl7dmFyIEU9ZnVuY3Rpb24oKXtpZihFLmNhbGxlZCl0aHJvdyBuZXcgRXJyb3IoRS5vbmNlRXJyb3IpO3JldHVybiBFLmNhbGxlZD0hMCxFLnZhbHVlPWsuYXBwbHkodGhpcyxh'@;
put 'cmd1bWVudHMpfTtyZXR1cm4gRS5vbmNlRXJyb3I9KGsubmFtZXx8IkZ1bmN0aW9uIHdyYXBwZWQgd2l0aCBgb25jZWAiKSsiIHNob3VsZG4ndCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UiLEUuY2FsbGVkPSExLEV9TS5leHBvcnRzPXooSyksTS5leHBvcnRzLnN0cmljdD16KEkpLEsucHJv'@;
put 'dG89SyhmdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIm9uY2UiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBLKHRoaXMpfSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCJvbmNlU3Ry'@;
put 'aWN0Iix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzKX0sY29uZmlndXJhYmxlOiEwfSl9KX0sNzQzNTooTSxPKT0+e08uZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LE8uaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlv'@;
put 'bi5ob3N0bmFtZToiIn0sTy5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LE8udXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LE8uZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxPLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFM'@;
put 'VUV9LE8uY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxPLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LE8ucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lvbjoiIn0sTy5uZXR3b3JrSW50ZXJmYWNlcz1PLmdl'@;
put 'dE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319LE8uYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sTy5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0sTy50bXBkaXI9Ty50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LE8uRU9M'@;
put 'PSJcbiIsTy5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0sMjgxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTgwOSk7Ty5jZXJ0aWZpY2F0ZT1SKDE5MzQpO3ZhciBLPXouZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMu'@;
put 'a2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0'@;
put 'aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO08uUlNBUHJpdmF0ZUtleT1LO3ZhciBJPXouZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhp'@;
put 'cy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtPLlJTQVB1YmxpY0tleT1JO3ZhciBrPXouZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNl'@;
put 'KEUpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7Ty5QdWJsaWNLZXk9azt2YXIgRT16LmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9u'@;
put 'ZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSxq'@;
put 'PXouZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoRSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Ty5Qcml2YXRlS2V5PWo7'@;
put 'dmFyIFY9ei5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2Rl'@;
put 'Iikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIp'@;
put 'Lm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7Ty5FbmNyeXB0ZWRQcml2YXRlS2V5PVY7dmFyIEI9ei5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5r'@;
put 'ZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO08uRFNBUHJpdmF0ZUtleT1CLE8uRFNBcGFyYW09'@;
put 'ei5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgWT16LmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtl'@;
put 'eSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKFgpLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO08uRUNQcml2YXRlS2V5PVk7dmFyIFg9ei5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlz'@;
put 'LmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO08uc2lnbmF0dXJlPXouZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwxOTM0OihNLE8sUik9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIHo9Uig5ODA5KSxLPXouZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxJPXouZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEo'@;
put 'KS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLGs9ei5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRl'@;
put 'cnMiKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSxFPXouZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKGspLHRoaXMua2V5KCJzdWJqZWN0UHVi'@;
put 'bGljS2V5IikuYml0c3RyKCkpfSksaj16LmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKEkpfSksVj16LmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihqKX0pLEI9ei5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9u'@;
put 'KCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKFYpfSl9KSxZPXouZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKEspLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShLKSl9KSxYPXouZGVmaW5lKCJF'@;
put 'eHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLFU9ei5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5j'@;
put 'dGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShrKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKEIpLHRoaXMua2V5'@;
put 'KCJ2YWxpZGl0eSIpLnVzZShZKSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UoRSksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVu'@;
put 'aXF1ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKFgpLm9wdGlvbmFsKCkpfSkscT16LmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0'@;
put 'YnNDZXJ0aWZpY2F0ZSIpLnVzZShVKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKGspLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO00uZXhwb3J0cz1xfSw3NjMxOihNLE8sUik9Pnt2YXIgej0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStE'@;
put 'RUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxLPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxJPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8'@;
put 'Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLGs9UigzMDQ4KSxFPVIoNDY5Niksaj1SKDk1MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oVixCKXt2YXIgWSxYPVYudG9TdHJpbmcoKSxVPVgubWF0Y2goeik7aWYoVSl7dmFyIHE9ImFl'@;
put 'cyIrVVsxXSxlZT1qLmZyb20oVVsyXSwiaGV4IiksdGU9ai5mcm9tKFVbM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxvZT1rKEIsZWUuc2xpY2UoMCw4KSxwYXJzZUludChVWzFdLDEwKSkua2V5LHNlPVtdLGhlPUUuY3JlYXRlRGVjaXBoZXJpdihxLG9lLGVlKTtzZS5wdXNo'@;
put 'KGhlLnVwZGF0ZSh0ZSkpLHNlLnB1c2goaGUuZmluYWwoKSksWT1qLmNvbmNhdChzZSl9ZWxzZXt2YXIgdWU9WC5tYXRjaChJKTtZPWouZnJvbSh1ZVsyXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpfXJldHVybnt0YWc6WC5tYXRjaChLKVsxXSxkYXRhOll9fX0sOTgwOihNLE8s'@;
put 'Uik9Pnt2YXIgej1SKDI4MTgpLEs9UigyNTYyKSxJPVIoNzYzMSksaz1SKDQ2OTYpLEU9Uig1NjMyKSxqPVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIFYoQil7dmFyIFk7Im9iamVjdCIhPXR5cGVvZiBCfHxqLmlzQnVmZmVyKEIpfHwoWT1CLnBhc3NwaHJhc2UsQj1CLmtleSksInN0cmluZyI9'@;
put 'PXR5cGVvZiBCJiYoQj1qLmZyb20oQikpO3ZhciBYLFUsb2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcscT1JKEIsWSksZWU9cS50YWcsdGU9cS5kYXRhO3N3aXRjaChlZSl7Y2FzZSJDRVJUSUZJQ0FURSI6VT16LmNlcnRpZmljYXRlLmRlY29kZSh0ZSwiZGVyIikudGJzQ2VydGlmaWNhdGUu'@;
put 'c3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goVXx8KFU9ei5QdWJsaWNLZXkuZGVjb2RlKHRlLCJkZXIiKSksWD1VLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gei5SU0FQdWJsaWNLZXku'@;
put 'ZGVjb2RlKFUuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gVS5zdWJqZWN0UHJpdmF0ZUtleT1VLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOlV9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBVLmFsZ29y'@;
put 'aXRobS5wYXJhbXMucHViX2tleT16LkRTQXBhcmFtLmRlY29kZShVLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpVLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1gpfWNhc2UiRU5DUllQVEVE'@;
put 'IFBSSVZBVEUgS0VZIjpzZT1ZLGhlPShvZT10ZT16LkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKSkuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LHVlPXBhcnNlSW50KG9lLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJp'@;
put 'bmcoKSwxMCksY2U9S1tvZS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLEc9b2UuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGI9b2Uuc3ViamVjdFByaXZhdGVLZXksRD1wYXJzZUludChjZS5zcGxpdCgiLSIpWzFdLDEwKS84LEg9RS5wYmtkZjJTeW5jKHNl'@;
put 'LGhlLHVlLEQsInNoYTEiKSxOPWsuY3JlYXRlRGVjaXBoZXJpdihjZSxILEcpLChnPVtdKS5wdXNoKE4udXBkYXRlKGIpKSxnLnB1c2goTi5maW5hbCgpKSx0ZT1qLmNvbmNhdChnKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goWD0oVT16LlByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKSku'@;
put 'YWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiB6LlJTQVByaXZhdGVLZXkuZGVjb2RlKFUuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpVLmFsZ29yaXRobS5j'@;
put 'dXJ2ZSxwcml2YXRlS2V5OnouRUNQcml2YXRlS2V5LmRlY29kZShVLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKS5wcml2YXRlS2V5fTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gVS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PXouRFNBcGFyYW0uZGVjb2RlKFUuc3ViamVjdFBy'@;
put 'aXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpVLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1gpfWNhc2UiUlNBIFBVQkxJQyBLRVkiOnJldHVybiB6LlJTQVB1YmxpY0tleS5kZWNvZGUodGUsImRlciIpO2Nhc2Ui'@;
put 'UlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gei5SU0FQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczp6LkRTQVByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJu'@;
put 'e2N1cnZlOih0ZT16LkVDUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6dGUucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IHR5cGUgIitlZSl9fU0uZXhwb3J0cz1WLFYuc2lnbmF0dXJlPXouc2ln'@;
put 'bmF0dXJlfSw0MDk1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKGspe3JldHVybiIvIj09PWsuY2hhckF0KDApfWZ1bmN0aW9uIEkoayl7dmFyIEU9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8o'@;
put 'W1xzXFNdKj8pJC8uZXhlYyhrKSxqPUVbMV18fCIiLFY9ISghanx8IjoiPT09ai5jaGFyQXQoMSkpO3JldHVybiEoIUVbMl0mJiFWKX1NLmV4cG9ydHM9IndpbjMyIj09PXoucGxhdGZvcm0/STpLLE0uZXhwb3J0cy5wb3NpeD1LLE0uZXhwb3J0cy53aW4zMj1JfSwxNzI1Ok09PntNLmV4cG9y'@;
put 'dHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTyxSKXtPLnN1cGVyXz1SLE8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpPLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0p'@;
put 'fTpmdW5jdGlvbihPLFIpe08uc3VwZXJfPVI7dmFyIHo9ZnVuY3Rpb24oKXt9O3oucHJvdG90eXBlPVIucHJvdG90eXBlLE8ucHJvdG90eXBlPW5ldyB6LE8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU99fSwyOTc0Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJiJvYmplY3Qi'@;
put 'PT10eXBlb2YgTyYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIE8uZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIE8ucmVhZFVJbnQ4fX0sODA1OTooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST0vJVtzZGolXS9nO08uZm9ybWF0PWZ1bmN0'@;
put 'aW9uKFMpe2lmKCFzZShTKSl7Zm9yKHZhciB2PVtdLHA9MDtwPGFyZ3VtZW50cy5sZW5ndGg7cCsrKXYucHVzaChqKGFyZ3VtZW50c1twXSkpO3JldHVybiB2LmpvaW4oIiAiKX1wPTE7Zm9yKHZhciB3PWFyZ3VtZW50cyxKPXcubGVuZ3RoLG5lPVN0cmluZyhTKS5yZXBsYWNlKEksZnVuY3Rp'@;
put 'b24oZmUpe2lmKCIlJSI9PT1mZSlyZXR1cm4iJSI7aWYocD49SilyZXR1cm4gZmU7c3dpdGNoKGZlKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKHdbcCsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcih3W3ArK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkod1twKytdKX1j'@;
put 'YXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gZmV9fSksZGU9d1twXTtwPEo7ZGU9d1srK3BdKXRlKGRlKXx8IWNlKGRlKT9uZSs9IiAiK2RlOm5lKz0iICIraihkZSk7cmV0dXJuIG5lfSxPLmRlcHJlY2F0ZT1mdW5jdGlvbihTLHYpe2lmKGhlKFIuZy5wcm9jZXNzKSly'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTy5kZXByZWNhdGUoUyx2KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ei5ub0RlcHJlY2F0aW9uKXJldHVybiBTO3ZhciBwPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFwKXtpZih6LnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVy'@;
put 'cm9yKHYpO3oudHJhY2VEZXByZWNhdGlvbj9LLnRyYWNlKHYpOksuZXJyb3IodikscD0hMH1yZXR1cm4gUy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgayxFPXt9O2Z1bmN0aW9uIGooUyx2KXt2YXIgcD17c2VlbjpbXSxzdHlsaXplOkJ9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0z'@;
put 'JiYocC5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihwLmNvbG9ycz1hcmd1bWVudHNbM10pLGVlKHYpP3Auc2hvd0hpZGRlbj12OnYmJk8uX2V4dGVuZChwLHYpLGhlKHAuc2hvd0hpZGRlbikmJihwLnNob3dIaWRkZW49ITEpLGhlKHAuZGVwdGgpJiYocC5kZXB0'@;
put 'aD0yKSxoZShwLmNvbG9ycykmJihwLmNvbG9ycz0hMSksaGUocC5jdXN0b21JbnNwZWN0KSYmKHAuY3VzdG9tSW5zcGVjdD0hMCkscC5jb2xvcnMmJihwLnN0eWxpemU9ViksWShwLFMscC5kZXB0aCl9ZnVuY3Rpb24gVihTLHYpe3ZhciBwPWouc3R5bGVzW3ZdO3JldHVybiBwPyJceDFiWyIr'@;
put 'ai5jb2xvcnNbcF1bMF0rIm0iK1MrIlx4MWJbIitqLmNvbG9yc1twXVsxXSsibSI6U31mdW5jdGlvbiBCKFMsdil7cmV0dXJuIFN9ZnVuY3Rpb24gWShTLHYscCl7aWYoUy5jdXN0b21JbnNwZWN0JiZ2JiZEKHYuaW5zcGVjdCkmJnYuaW5zcGVjdCE9PU8uaW5zcGVjdCYmKCF2LmNvbnN0cnVj'@;
put 'dG9yfHx2LmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXYpKXt2YXIgdz12Lmluc3BlY3QocCxTKTtyZXR1cm4gc2Uodyl8fCh3PVkoUyx3LHApKSx3fXZhciBKPWZ1bmN0aW9uKGplLFdlKXtpZihoZShXZSkpcmV0dXJuIGplLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHNl'@;
put 'KFdlKSl7dmFyIEtlPSInIitKU09OLnN0cmluZ2lmeShXZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gamUuc3R5bGl6ZShLZSwic3RyaW5nIil9cmV0dXJuIG9lKFdlKT9qZS5zdHlsaXplKCIiK1dlLCJu'@;
put 'dW1iZXIiKTplZShXZSk/amUuc3R5bGl6ZSgiIitXZSwiYm9vbGVhbiIpOnRlKFdlKT9qZS5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oUyx2KTtpZihKKXJldHVybiBKO3ZhciBXZSxuZT1PYmplY3Qua2V5cyh2KSxkZT0oV2U9e30sbmUuZm9yRWFjaChmdW5jdGlvbihLZSxZZSl7'@;
put 'V2VbS2VdPSEwfSksV2UpO2lmKFMuc2hvd0hpZGRlbiYmKG5lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHYpKSxiKHYpJiYobmUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxuZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gWCh2KTtpZigwPT09bmUubGVuZ3RoKXtpZihE'@;
put 'KHYpKXJldHVybiBTLnN0eWxpemUoIltGdW5jdGlvbiIrKHYubmFtZT8iOiAiK3YubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYodWUodikpcmV0dXJuIFMuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodiksInJlZ2V4cCIpO2lmKEcodikpcmV0dXJuIFMuc3R5bGl6'@;
put 'ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLCJkYXRlIik7aWYoYih2KSlyZXR1cm4gWCh2KX12YXIgeGUsTGU9IiIsRmU9ITEsT2U9WyJ7IiwifSJdO3JldHVybiBxKHYpJiYoRmU9ITAsT2U9WyJbIiwiXSJdKSxEKHYpJiYoTGU9IiBbRnVuY3Rpb24iKyh2Lm5hbWU/IjogIit2'@;
put 'Lm5hbWU6IiIpKyJdIiksdWUodikmJihMZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpKSxHKHYpJiYoTGU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodikpLGIodikmJihMZT0iICIrWCh2KSksMCE9PW5lLmxlbmd0aHx8RmUmJjAhPXYubGVuZ3Ro'@;
put 'P3A8MD91ZSh2KT9TLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLCJyZWdleHAiKTpTLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihTLnNlZW4ucHVzaCh2KSx4ZT1GZT9mdW5jdGlvbihqZSxXZSxLZSxZZSxRZSl7Zm9yKHZhciBsdD1bXSxQZT0wLGJl'@;
put 'PVdlLmxlbmd0aDtQZTxiZTsrK1BlKUMoV2UsU3RyaW5nKFBlKSk/bHQucHVzaChVKGplLFdlLEtlLFllLFN0cmluZyhQZSksITApKTpsdC5wdXNoKCIiKTtyZXR1cm4gUWUuZm9yRWFjaChmdW5jdGlvbihBZSl7QWUubWF0Y2goL15cZCskLyl8fGx0LnB1c2goVShqZSxXZSxLZSxZZSxBZSwh'@;
put 'MCkpfSksbHR9KFMsdixwLGRlLG5lKTpuZS5tYXAoZnVuY3Rpb24oamUpe3JldHVybiBVKFMsdixwLGRlLGplLEZlKX0pLFMuc2Vlbi5wb3AoKSxmdW5jdGlvbihqZSxXZSxLZSl7cmV0dXJuIGplLnJlZHVjZShmdW5jdGlvbihRZSxsdCl7cmV0dXJuIGx0LmluZGV4T2YoIlxuIiksUWUrbHQu'@;
put 'cmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApPjYwP0tlWzBdKygiIj09PVdlPyIiOldlKyJcbiAiKSsiICIramUuam9pbigiLFxuICAiKSsiICIrS2VbMV06S2VbMF0rV2UrIiAiK2plLmpvaW4oIiwgIikrIiAiK0tlWzFdfSh4ZSxMZSxPZSkpOk9lWzBdK0xlK09l'@;
put 'WzFdfWZ1bmN0aW9uIFgoUyl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFMpKyJdIn1mdW5jdGlvbiBVKFMsdixwLHcsSixuZSl7dmFyIGRlLGZlLHhlO2lmKCh4ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHYsSil8fHt2YWx1ZTp2W0pdfSkuZ2V0'@;
put 'P2ZlPVMuc3R5bGl6ZSh4ZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOnhlLnNldCYmKGZlPVMuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLEModyxKKXx8KGRlPSJbIitKKyJdIiksZmV8fChTLnNlZW4uaW5kZXhPZih4ZS52YWx1ZSk8MD8oZmU9'@;
put 'dGUocCk/WShTLHhlLnZhbHVlLG51bGwpOlkoUyx4ZS52YWx1ZSxwLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoZmU9bmU/ZmUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKExlKXtyZXR1cm4iICAiK0xlfSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitmZS5zcGxpdCgiXG4iKS5tYXAoZnVu'@;
put 'Y3Rpb24oTGUpe3JldHVybiIgICAiK0xlfSkuam9pbigiXG4iKSk6ZmU9Uy5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxoZShkZSkpe2lmKG5lJiZKLm1hdGNoKC9eXGQrJC8pKXJldHVybiBmZTsoZGU9SlNPTi5zdHJpbmdpZnkoIiIrSikpLm1hdGNoKC9eIihbYS16QS1aX11b'@;
put 'YS16QS1aXzAtOV0qKSIkLyk/KGRlPWRlLnN1YnN0cigxLGRlLmxlbmd0aC0yKSxkZT1TLnN0eWxpemUoZGUsIm5hbWUiKSk6KGRlPWRlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxkZT1TLnN0eWxpemUoZGUsInN0cmlu'@;
put 'ZyIpKX1yZXR1cm4gZGUrIjogIitmZX1mdW5jdGlvbiBxKFMpe3JldHVybiBBcnJheS5pc0FycmF5KFMpfWZ1bmN0aW9uIGVlKFMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIFN9ZnVuY3Rpb24gdGUoUyl7cmV0dXJuIG51bGw9PT1TfWZ1bmN0aW9uIG9lKFMpe3JldHVybiJudW1iZXIiPT10'@;
put 'eXBlb2YgU31mdW5jdGlvbiBzZShTKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFN9ZnVuY3Rpb24gaGUoUyl7cmV0dXJuIHZvaWQgMD09PVN9ZnVuY3Rpb24gdWUoUyl7cmV0dXJuIGNlKFMpJiYiW29iamVjdCBSZWdFeHBdIj09PUgoUyl9ZnVuY3Rpb24gY2UoUyl7cmV0dXJuIm9iamVjdCI9'@;
put 'PXR5cGVvZiBTJiZudWxsIT09U31mdW5jdGlvbiBHKFMpe3JldHVybiBjZShTKSYmIltvYmplY3QgRGF0ZV0iPT09SChTKX1mdW5jdGlvbiBiKFMpe3JldHVybiBjZShTKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1IKFMpfHxTIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIEQoUyl7cmV0dXJu'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN9ZnVuY3Rpb24gSChTKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFMpfWZ1bmN0aW9uIE4oUyl7cmV0dXJuIFM8MTA/IjAiK1MudG9TdHJpbmcoMTApOlMudG9TdHJpbmcoMTApfU8uZGVidWdsb2c9ZnVuY3Rpb24oUyl7aWYoaGUo'@;
put 'aykmJihrPXouZW52Lk5PREVfREVCVUd8fCIiKSxTPVMudG9VcHBlckNhc2UoKSwhRVtTXSlpZihuZXcgUmVnRXhwKCJcXGIiK1MrIlxcYiIsImkiKS50ZXN0KGspKXt2YXIgdj16LnBpZDtFW1NdPWZ1bmN0aW9uKCl7dmFyIHA9Ty5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpO0suZXJyb3Io'@;
put 'IiVzICVkOiAlcyIsUyx2LHApfX1lbHNlIEVbU109ZnVuY3Rpb24oKXt9O3JldHVybiBFW1NdfSxPLmluc3BlY3Q9aixqLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJs'@;
put 'YWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sai5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoi'@;
put 'Z3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxPLmlzQXJyYXk9cSxPLmlzQm9vbGVhbj1lZSxPLmlzTnVsbD10ZSxPLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKFMpe3JldHVybiBudWxsPT1TfSxPLmlzTnVtYmVyPW9lLE8u'@;
put 'aXNTdHJpbmc9c2UsTy5pc1N5bWJvbD1mdW5jdGlvbihTKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFN9LE8uaXNVbmRlZmluZWQ9aGUsTy5pc1JlZ0V4cD11ZSxPLmlzT2JqZWN0PWNlLE8uaXNEYXRlPUcsTy5pc0Vycm9yPWIsTy5pc0Z1bmN0aW9uPUQsTy5pc1ByaW1pdGl2ZT1mdW5jdGlv'@;
put 'bihTKXtyZXR1cm4gbnVsbD09PVN8fCJib29sZWFuIj09dHlwZW9mIFN8fCJudW1iZXIiPT10eXBlb2YgU3x8InN0cmluZyI9PXR5cGVvZiBTfHwic3ltYm9sIj09dHlwZW9mIFN8fHZvaWQgMD09PVN9LE8uaXNCdWZmZXI9UigyOTc0KTt2YXIgZz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIs'@;
put 'Ik1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIEMoUyx2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsdil9Ty5sb2c9ZnVuY3Rpb24oKXt2YXIgUyx2O0subG9nKCIlcyAtICVzIiwodj1bTigoUz1u'@;
put 'ZXcgRGF0ZSkuZ2V0SG91cnMoKSksTihTLmdldE1pbnV0ZXMoKSksTihTLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKSxbUy5nZXREYXRlKCksZ1tTLmdldE1vbnRoKCldLHZdLmpvaW4oIiAiKSksTy5mb3JtYXQuYXBwbHkoTyxhcmd1bWVudHMpKX0sTy5pbmhlcml0cz1SKDE3MjUpLE8uX2V4'@;
put 'dGVuZD1mdW5jdGlvbihTLHYpe2lmKCF2fHwhY2UodikpcmV0dXJuIFM7Zm9yKHZhciBwPU9iamVjdC5rZXlzKHYpLHc9cC5sZW5ndGg7dy0tOylTW3Bbd11dPXZbcFt3XV07cmV0dXJuIFN9fSwyNTIwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPSJ3aW4zMiI9PT16'@;
put 'LnBsYXRmb3JtLEk9Uig4MDU5KTtmdW5jdGlvbiBrKG9lLHNlKXtmb3IodmFyIGhlPVtdLHVlPTA7dWU8b2UubGVuZ3RoO3VlKyspe3ZhciBjZT1vZVt1ZV07Y2UmJiIuIiE9PWNlJiYoIi4uIj09PWNlP2hlLmxlbmd0aCYmIi4uIiE9PWhlW2hlLmxlbmd0aC0xXT9oZS5wb3AoKTpzZSYmaGUu'@;
put 'cHVzaCgiLi4iKTpoZS5wdXNoKGNlKSl9cmV0dXJuIGhlfWZ1bmN0aW9uIEUob2Upe2Zvcih2YXIgc2U9b2UubGVuZ3RoLTEsaGU9MDtoZTw9c2UmJiFvZVtoZV07aGUrKyk7Zm9yKHZhciB1ZT1zZTt1ZT49MCYmIW9lW3VlXTt1ZS0tKTtyZXR1cm4gMD09PWhlJiZ1ZT09PXNlP29lOmhlPnVl'@;
put 'P1tdOm9lLnNsaWNlKGhlLHVlKzEpfXZhciBqPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLFY9L14oW1xzXFNdKj8pKCg/OlwuezEsMn18W15cXFwvXSs/fCkoXC5bXi5cL1xcXSp8KSkoPzpbXFxcL10qKSQvLEI9'@;
put 'e307ZnVuY3Rpb24gWShvZSl7dmFyIHNlPWouZXhlYyhvZSksaGU9KHNlWzFdfHwiIikrKHNlWzJdfHwiIiksY2U9Vi5leGVjKHNlWzNdfHwiIik7cmV0dXJuW2hlLGNlWzFdLGNlWzJdLGNlWzNdXX1mdW5jdGlvbiBYKG9lKXt2YXIgc2U9ai5leGVjKG9lKSxoZT1zZVsxXXx8IiIsdWU9ISFo'@;
put 'ZSYmIjoiIT09aGVbMV07cmV0dXJue2RldmljZTpoZSxpc1VuYzp1ZSxpc0Fic29sdXRlOnVlfHwhIXNlWzJdLHRhaWw6c2VbM119fWZ1bmN0aW9uIFUob2Upe3JldHVybiJcXFxcIitvZS5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1CLnJlc29sdmU9'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIG9lPSIiLHNlPSIiLGhlPSExLHVlPWFyZ3VtZW50cy5sZW5ndGgtMTt1ZT49LTE7dWUtLSl7dmFyIGNlO2lmKHVlPj0wP2NlPWFyZ3VtZW50c1t1ZV06b2U/KGNlPXouZW52WyI9IitvZV0pJiZjZS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpPT09b2UudG9M'@;
put 'b3dlckNhc2UoKSsiXFwifHwoY2U9b2UrIlxcIik6Y2U9ei5jd2QoKSwhSS5pc1N0cmluZyhjZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZihjZSl7dmFyIEc9WChjZSksYj1HLmRldmljZSxEPUcuaXNVbmMsSD1H'@;
put 'LmlzQWJzb2x1dGUsTj1HLnRhaWw7aWYoKCFifHwhb2V8fGIudG9Mb3dlckNhc2UoKT09PW9lLnRvTG93ZXJDYXNlKCkpJiYob2V8fChvZT1iKSxoZXx8KHNlPU4rIlxcIitzZSxoZT1IKSxvZSYmaGUpKWJyZWFrfX1yZXR1cm4gRCYmKG9lPVUob2UpKSxvZSsoaGU/IlxcIjoiIikrKHNlPWso'@;
put 'c2Uuc3BsaXQoL1tcXFwvXSsvKSwhaGUpLmpvaW4oIlxcIikpfHwiLiJ9LEIubm9ybWFsaXplPWZ1bmN0aW9uKG9lKXt2YXIgc2U9WChvZSksaGU9c2UuZGV2aWNlLHVlPXNlLmlzVW5jLGNlPXNlLmlzQWJzb2x1dGUsRz1zZS50YWlsLGI9L1tcXFwvXSQvLnRlc3QoRyk7cmV0dXJuKEc9ayhH'@;
put 'LnNwbGl0KC9bXFxcL10rLyksIWNlKS5qb2luKCJcXCIpKXx8Y2V8fChHPSIuIiksRyYmYiYmKEcrPSJcXCIpLHVlJiYoaGU9VShoZSkpLGhlKyhjZT8iXFwiOiIiKStHfSxCLmlzQWJzb2x1dGU9ZnVuY3Rpb24ob2Upe3JldHVybiBYKG9lKS5pc0Fic29sdXRlfSxCLmpvaW49ZnVuY3Rpb24o'@;
put 'KXtmb3IodmFyIG9lPVtdLHNlPTA7c2U8YXJndW1lbnRzLmxlbmd0aDtzZSsrKXt2YXIgaGU9YXJndW1lbnRzW3NlXTtpZighSS5pc1N0cmluZyhoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtoZSYmb2UucHVzaChoZSl9'@;
put 'dmFyIHVlPW9lLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KG9lWzBdKXx8KHVlPXVlLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksQi5ub3JtYWxpemUodWUpfSxCLnJlbGF0aXZlPWZ1bmN0aW9uKG9lLHNlKXtvZT1CLnJlc29sdmUob2UpLHNlPUIucmVz'@;
put 'b2x2ZShzZSk7Zm9yKHZhciBoZT1vZS50b0xvd2VyQ2FzZSgpLHVlPXNlLnRvTG93ZXJDYXNlKCksY2U9RShzZS5zcGxpdCgiXFwiKSksRz1FKGhlLnNwbGl0KCJcXCIpKSxiPUUodWUuc3BsaXQoIlxcIikpLEQ9TWF0aC5taW4oRy5sZW5ndGgsYi5sZW5ndGgpLEg9RCxOPTA7TjxEO04rKylp'@;
put 'ZihHW05dIT09YltOXSl7SD1OO2JyZWFrfWlmKDA9PUgpcmV0dXJuIHNlO3ZhciBnPVtdO2ZvcihOPUg7TjxHLmxlbmd0aDtOKyspZy5wdXNoKCIuLiIpO3JldHVybihnPWcuY29uY2F0KGNlLnNsaWNlKEgpKSkuam9pbigiXFwiKX0sQi5fbWFrZUxvbmc9ZnVuY3Rpb24ob2Upe2lmKCFJLmlz'@;
put 'U3RyaW5nKG9lKSlyZXR1cm4gb2U7aWYoIW9lKXJldHVybiIiO3ZhciBzZT1CLnJlc29sdmUob2UpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHNlKT8iXFxcXD9cXCIrc2U6L15cXFxcW14/Ll0vLnRlc3Qoc2UpPyJcXFxcP1xcVU5DXFwiK3NlLnN1YnN0cmluZygyKTpvZX0sQi5kaXJu'@;
put 'YW1lPWZ1bmN0aW9uKG9lKXt2YXIgc2U9WShvZSksaGU9c2VbMF0sdWU9c2VbMV07cmV0dXJuIGhlfHx1ZT8odWUmJih1ZT11ZS5zdWJzdHIoMCx1ZS5sZW5ndGgtMSkpLGhlK3VlKToiLiJ9LEIuYmFzZW5hbWU9ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZT1ZKG9lKVsyXTtyZXR1cm4gc2UmJmhl'@;
put 'LnN1YnN0cigtMSpzZS5sZW5ndGgpPT09c2UmJihoZT1oZS5zdWJzdHIoMCxoZS5sZW5ndGgtc2UubGVuZ3RoKSksaGV9LEIuZXh0bmFtZT1mdW5jdGlvbihvZSl7cmV0dXJuIFkob2UpWzNdfSxCLmZvcm1hdD1mdW5jdGlvbihvZSl7aWYoIUkuaXNPYmplY3Qob2UpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBvZSk7aWYoIUkuaXNTdHJpbmcob2Uucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBu'@;
put 'b3QgIit0eXBlb2Ygb2Uucm9vdCk7dmFyIGhlPW9lLmRpcix1ZT1vZS5iYXNlfHwiIjtyZXR1cm4gaGU/aGVbaGUubGVuZ3RoLTFdPT09Qi5zZXA/aGUrdWU6aGUrQi5zZXArdWU6dWV9LEIucGFyc2U9ZnVuY3Rpb24ob2Upe2lmKCFJLmlzU3RyaW5nKG9lKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBvZSk7dmFyIHNlPVkob2UpO2lmKCFzZXx8NCE9PXNlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrb2UrIiciKTtyZXR1cm57cm9vdDpzZVswXSxkaXI6c2Vb'@;
put 'MF0rc2VbMV0uc2xpY2UoMCwtMSksYmFzZTpzZVsyXSxleHQ6c2VbM10sbmFtZTpzZVsyXS5zbGljZSgwLHNlWzJdLmxlbmd0aC1zZVszXS5sZW5ndGgpfX0sQi5zZXA9IlxcIixCLmRlbGltaXRlcj0iOyI7dmFyIHE9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwu'@;
put 'W14uXC9dKnwpKSg/OltcL10qKSQvLGVlPXt9O2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gcS5leGVjKG9lKS5zbGljZSgxKX1lZS5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBvZT0iIixzZT0hMSxoZT1hcmd1bWVudHMubGVuZ3RoLTE7aGU+PS0xJiYhc2U7aGUtLSl7dmFyIHVlPWhlPj0w'@;
put 'P2FyZ3VtZW50c1toZV06ei5jd2QoKTtpZighSS5pc1N0cmluZyh1ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTt1ZSYmKG9lPXVlKyIvIitvZSxzZT0iLyI9PT11ZVswXSl9cmV0dXJuKHNlPyIvIjoiIikrKG9lPWso'@;
put 'b2Uuc3BsaXQoIi8iKSwhc2UpLmpvaW4oIi8iKSl8fCIuIn0sZWUubm9ybWFsaXplPWZ1bmN0aW9uKG9lKXt2YXIgc2U9ZWUuaXNBYnNvbHV0ZShvZSksaGU9b2UmJiIvIj09PW9lW29lLmxlbmd0aC0xXTtyZXR1cm4ob2U9ayhvZS5zcGxpdCgiLyIpLCFzZSkuam9pbigiLyIpKXx8c2V8fChv'@;
put 'ZT0iLiIpLG9lJiZoZSYmKG9lKz0iLyIpLChzZT8iLyI6IiIpK29lfSxlZS5pc0Fic29sdXRlPWZ1bmN0aW9uKG9lKXtyZXR1cm4iLyI9PT1vZS5jaGFyQXQoMCl9LGVlLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIG9lPSIiLHNlPTA7c2U8YXJndW1lbnRzLmxlbmd0aDtzZSsrKXt2YXIgaGU9'@;
put 'YXJndW1lbnRzW3NlXTtpZighSS5pc1N0cmluZyhoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtoZSYmKG9lKz1vZT8iLyIraGU6aGUpfXJldHVybiBlZS5ub3JtYWxpemUob2UpfSxlZS5yZWxhdGl2ZT1mdW5jdGlvbihv'@;
put 'ZSxzZSl7b2U9ZWUucmVzb2x2ZShvZSkuc3Vic3RyKDEpLHNlPWVlLnJlc29sdmUoc2UpLnN1YnN0cigxKTtmb3IodmFyIGhlPUUob2Uuc3BsaXQoIi8iKSksdWU9RShzZS5zcGxpdCgiLyIpKSxjZT1NYXRoLm1pbihoZS5sZW5ndGgsdWUubGVuZ3RoKSxHPWNlLGI9MDtiPGNlO2IrKylpZiho'@;
put 'ZVtiXSE9PXVlW2JdKXtHPWI7YnJlYWt9dmFyIEQ9W107Zm9yKGI9RztiPGhlLmxlbmd0aDtiKyspRC5wdXNoKCIuLiIpO3JldHVybihEPUQuY29uY2F0KHVlLnNsaWNlKEcpKSkuam9pbigiLyIpfSxlZS5fbWFrZUxvbmc9ZnVuY3Rpb24ob2Upe3JldHVybiBvZX0sZWUuZGlybmFtZT1mdW5j'@;
put 'dGlvbihvZSl7dmFyIHNlPXRlKG9lKSxoZT1zZVswXSx1ZT1zZVsxXTtyZXR1cm4gaGV8fHVlPyh1ZSYmKHVlPXVlLnN1YnN0cigwLHVlLmxlbmd0aC0xKSksaGUrdWUpOiIuIn0sZWUuYmFzZW5hbWU9ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZT10ZShvZSlbMl07cmV0dXJuIHNlJiZoZS5zdWJz'@;
put 'dHIoLTEqc2UubGVuZ3RoKT09PXNlJiYoaGU9aGUuc3Vic3RyKDAsaGUubGVuZ3RoLXNlLmxlbmd0aCkpLGhlfSxlZS5leHRuYW1lPWZ1bmN0aW9uKG9lKXtyZXR1cm4gdGUob2UpWzNdfSxlZS5mb3JtYXQ9ZnVuY3Rpb24ob2Upe2lmKCFJLmlzT2JqZWN0KG9lKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2Ygb2UpO2lmKCFJLmlzU3RyaW5nKG9lLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90'@;
put 'ICIrdHlwZW9mIG9lLnJvb3QpO3JldHVybihvZS5kaXI/b2UuZGlyK2VlLnNlcDoiIikrKG9lLmJhc2V8fCIiKX0sZWUucGFyc2U9ZnVuY3Rpb24ob2Upe2lmKCFJLmlzU3RyaW5nKG9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJp'@;
put 'bmcsIG5vdCAiK3R5cGVvZiBvZSk7dmFyIHNlPXRlKG9lKTtpZighc2V8fDQhPT1zZS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK29lKyInIik7cmV0dXJuIHNlWzFdPXNlWzFdfHwiIixzZVsyXT1zZVsyXXx8IiIsc2VbM109c2VbM118fCIiLHtyb290OnNl'@;
put 'WzBdLGRpcjpzZVswXStzZVsxXS5zbGljZSgwLC0xKSxiYXNlOnNlWzJdLGV4dDpzZVszXSxuYW1lOnNlWzJdLnNsaWNlKDAsc2VbMl0ubGVuZ3RoLXNlWzNdLmxlbmd0aCl9fSxlZS5zZXA9Ii8iLGVlLmRlbGltaXRlcj0iOiIsTS5leHBvcnRzPUs/QjplZSxNLmV4cG9ydHMucG9zaXg9ZWUs'@;
put 'TS5leHBvcnRzLndpbjMyPUJ9LDU2MzI6KE0sTyxSKT0+e08ucGJrZGYyPVIoODYzOCksTy5wYmtkZjJTeW5jPVIoMTI1Nyl9LDg2Mzg6KE0sTyxSKT0+e3ZhciB6LEssST1SKDk1MDkpLkJ1ZmZlcixrPVIoNzM1NyksRT1SKDIzNjgpLGo9UigxMjU3KSxWPVIoNzc3NyksQj1SLmcuY3J5cHRv'@;
put 'JiZSLmcuY3J5cHRvLnN1YnRsZSxZPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6'@;
put 'IlNIQS01MTIifSxYPVtdO2Z1bmN0aW9uIFUoKXtyZXR1cm4gS3x8KEs9Ui5nLnByb2Nlc3MmJlIuZy5wcm9jZXNzLm5leHRUaWNrP1IuZy5wcm9jZXNzLm5leHRUaWNrOlIuZy5xdWV1ZU1pY3JvdGFzaz9SLmcucXVldWVNaWNyb3Rhc2s6Ui5nLnNldEltbWVkaWF0ZT9SLmcuc2V0SW1tZWRp'@;
put 'YXRlOlIuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBxKGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gQi5pbXBvcnRLZXkoInJhdyIsZWUse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gQi5kZXJpdmVCaXRzKHtuYW1lOiJQQktERjIiLHNh'@;
put 'bHQ6dGUsaXRlcmF0aW9uczpvZSxoYXNoOntuYW1lOmhlfX0sdWUsc2U8PDMpfSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIEkuZnJvbSh1ZSl9KX1NLmV4cG9ydHM9ZnVuY3Rpb24oZWUsdGUsb2Usc2UsaGUsdWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBoZSYmKHVlPWhlLGhlPXZvaWQgMCk7'@;
put 'dmFyIEcsYixjZT1ZWyhoZT1oZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihjZSYmImZ1bmN0aW9uIj09dHlwZW9mIFIuZy5Qcm9taXNlKXtpZihrKG9lLHNlKSxlZT1WKGVlLEUsIlBhc3N3b3JkIiksdGU9Vih0ZSxFLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIHVlKXRocm93IG5l'@;
put 'dyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7Rz1mdW5jdGlvbihHKXtpZihSLmcucHJvY2VzcyYmIVIuZy5wcm9jZXNzLmJyb3dzZXJ8fCFCfHwhQi5pbXBvcnRLZXl8fCFCLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09'@;
put 'WFtHXSlyZXR1cm4gWFtHXTt2YXIgYj1xKHo9enx8SS5hbGxvYyg4KSx6LDEwLDEyOCxHKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIFhbR109YixifShjZSkudGhlbihmdW5jdGlvbihHKXtyZXR1cm4gRz9xKGVlLHRlLG9l'@;
put 'LHNlLGNlKTpqKGVlLHRlLG9lLHNlLGhlKX0pLGI9dWUsRy50aGVuKGZ1bmN0aW9uKEQpe1UoKShmdW5jdGlvbigpe2IobnVsbCxEKX0pfSxmdW5jdGlvbihEKXtVKCkoZnVuY3Rpb24oKXtiKEQpfSl9KX1lbHNlIFUoKShmdW5jdGlvbigpe3ZhciBHO3RyeXtHPWooZWUsdGUsb2Usc2UsaGUp'@;
put 'fWNhdGNoKGIpe3JldHVybiB1ZShiKX11ZShudWxsLEcpfSl9fSwyMzY4OihNLE8sUik9Pnt2YXIgeixLPVIoNDE1NSk7ej1SLmcucHJvY2VzcyYmUi5nLnByb2Nlc3MuYnJvd3Nlcj8idXRmLTgiOlIuZy5wcm9jZXNzJiZSLmcucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KEsudmVyc2lvbi5z'@;
put 'cGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsTS5leHBvcnRzPXp9LDczNTc6TT0+e3ZhciBPPU1hdGgucG93KDIsMzApLTE7TS5leHBvcnRzPWZ1bmN0aW9uKFIseil7aWYoIm51bWJlciIhPXR5cGVvZiBSKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'Ikl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoUjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiB6KXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoejwwfHx6Pk98fHohPXopdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KE0sTyxSKT0+e3ZhciB6PVIoODAyOCksSz1SKDk3ODUpLEk9Uig5MDcyKSxrPVIoOTUwOSkuQnVmZmVyLEU9Uig3MzU3KSxqPVIoMjM2OCksVj1SKDc3NzcpLEI9ay5hbGxvYygxMjgpLFk9e21kNToxNixzaGExOjIwLHNo'@;
put 'YTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBYKFUscSxlZSl7dmFyIEcsdGU9InJtZDE2MCI9PT0oRz1VKXx8InJpcGVtZDE2MCI9PT1HP2Z1bmN0aW9uIEQoSCl7cmV0dXJuKG5ldyBLKS51cGRhdGUoSCkuZGln'@;
put 'ZXN0KCl9OiJtZDUiPT09Rz96OmZ1bmN0aW9uIGIoSCl7cmV0dXJuIEkoRykudXBkYXRlKEgpLmRpZ2VzdCgpfSxvZT0ic2hhNTEyIj09PVV8fCJzaGEzODQiPT09VT8xMjg6NjQ7cS5sZW5ndGg+b2U/cT10ZShxKTpxLmxlbmd0aDxvZSYmKHE9ay5jb25jYXQoW3EsQl0sb2UpKTtmb3IodmFy'@;
put 'IHNlPWsuYWxsb2NVbnNhZmUob2UrWVtVXSksaGU9ay5hbGxvY1Vuc2FmZShvZStZW1VdKSx1ZT0wO3VlPG9lO3VlKyspc2VbdWVdPTU0XnFbdWVdLGhlW3VlXT05Ml5xW3VlXTt2YXIgY2U9ay5hbGxvY1Vuc2FmZShvZStlZSs0KTtzZS5jb3B5KGNlLDAsMCxvZSksdGhpcy5pcGFkMT1jZSx0'@;
put 'aGlzLmlwYWQyPXNlLHRoaXMub3BhZD1oZSx0aGlzLmFsZz1VLHRoaXMuYmxvY2tzaXplPW9lLHRoaXMuaGFzaD10ZSx0aGlzLnNpemU9WVtVXX1YLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVSxxKXtyZXR1cm4gVS5jb3B5KHEsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChxKS5jb3B5KHRo'@;
put 'aXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LE0uZXhwb3J0cz1mdW5jdGlvbihVLHEsZWUsdGUsb2Upe0UoZWUsdGUpO3ZhciBzZT1uZXcgWChvZT1vZXx8InNoYTEiLFU9VihVLGosIlBhc3N3b3JkIiksKHE9VihxLGosIlNhbHQiKSkubGVuZ3RoKSxoZT1r'@;
put 'LmFsbG9jVW5zYWZlKHRlKSx1ZT1rLmFsbG9jVW5zYWZlKHEubGVuZ3RoKzQpO3EuY29weSh1ZSwwLDAscS5sZW5ndGgpO2Zvcih2YXIgY2U9MCxHPVlbb2VdLGI9TWF0aC5jZWlsKHRlL0cpLEQ9MTtEPD1iO0QrKyl7dWUud3JpdGVVSW50MzJCRShELHEubGVuZ3RoKTtmb3IodmFyIEg9c2Uu'@;
put 'cnVuKHVlLHNlLmlwYWQxKSxOPUgsZz0xO2c8ZWU7ZysrKXtOPXNlLnJ1bihOLHNlLmlwYWQyKTtmb3IodmFyIEM9MDtDPEc7QysrKUhbQ11ePU5bQ119SC5jb3B5KGhlLGNlKSxjZSs9R31yZXR1cm4gaGV9fSw3Nzc3OihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oSyxJLGspe2lmKHouaXNCdWZmZXIoSykpcmV0dXJuIEs7aWYoInN0cmluZyI9PXR5cGVvZiBLKXJldHVybiB6LmZyb20oSyxJKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoSykpcmV0dXJuIHouZnJvbShLLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihrKyIgbXVzdCBiZSBh'@;
put 'IHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sNDE1NTpNPT57dmFyIE8sUix6PU0uZXhwb3J0cz17fTtmdW5jdGlvbiBLKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gSSgpe3Rocm93'@;
put 'IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gayhlZSl7aWYoTz09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZWUsMCk7aWYoKE89PT1LfHwhTykmJnNldFRpbWVvdXQpcmV0dXJuIE89c2V0VGltZW91dCxzZXRUaW1lb3V0KGVl'@;
put 'LDApO3RyeXtyZXR1cm4gTyhlZSwwKX1jYXRjaHt0cnl7cmV0dXJuIE8uY2FsbChudWxsLGVlLDApfWNhdGNoe3JldHVybiBPLmNhbGwodGhpcyxlZSwwKX19fSFmdW5jdGlvbigpe3RyeXtPPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6S31jYXRjaHtPPUt9dHJ5'@;
put 'e1I9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6SX1jYXRjaHtSPUl9fSgpO3ZhciBFLGo9W10sVj0hMSxCPS0xO2Z1bmN0aW9uIFkoKXtWJiZFJiYoVj0hMSxFLmxlbmd0aD9qPUUuY29uY2F0KGopOkI9LTEsai5sZW5ndGgmJlgoKSl9ZnVuY3Rpb24gWCgp'@;
put 'e2lmKCFWKXt2YXIgZWU9ayhZKTtWPSEwO2Zvcih2YXIgdGU9ai5sZW5ndGg7dGU7KXtmb3IoRT1qLGo9W107KytCPHRlOylFJiZFW0JdLnJ1bigpO0I9LTEsdGU9ai5sZW5ndGh9RT1udWxsLFY9ITEsZnVuY3Rpb24ob2Upe2lmKFI9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91'@;
put 'dChvZSk7aWYoKFI9PT1JfHwhUikmJmNsZWFyVGltZW91dClyZXR1cm4gUj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KG9lKTt0cnl7cmV0dXJuIFIob2UpfWNhdGNoe3RyeXtyZXR1cm4gUi5jYWxsKG51bGwsb2UpfWNhdGNoe3JldHVybiBSLmNhbGwodGhpcyxvZSl9fX0oZWUpfX1mdW5j'@;
put 'dGlvbiBVKGVlLHRlKXt0aGlzLmZ1bj1lZSx0aGlzLmFycmF5PXRlfWZ1bmN0aW9uIHEoKXt9ei5uZXh0VGljaz1mdW5jdGlvbihlZSl7dmFyIHRlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG9lPTE7b2U8YXJndW1lbnRzLmxl'@;
put 'bmd0aDtvZSsrKXRlW29lLTFdPWFyZ3VtZW50c1tvZV07ai5wdXNoKG5ldyBVKGVlLHRlKSksMSE9PWoubGVuZ3RofHxWfHxrKFgpfSxVLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSx6LnRpdGxlPSJicm93c2VyIix6LmJyb3dzZXI9'@;
put 'ITAsei5lbnY9e30sei5hcmd2PVtdLHoudmVyc2lvbj0iIix6LnZlcnNpb25zPXt9LHoub249cSx6LmFkZExpc3RlbmVyPXEsei5vbmNlPXEsei5vZmY9cSx6LnJlbW92ZUxpc3RlbmVyPXEsei5yZW1vdmVBbGxMaXN0ZW5lcnM9cSx6LmVtaXQ9cSx6LnByZXBlbmRMaXN0ZW5lcj1xLHoucHJl'@;
put 'cGVuZE9uY2VMaXN0ZW5lcj1xLHoubGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtyZXR1cm5bXX0sei5iaW5kaW5nPWZ1bmN0aW9uKGVlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LHouY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSx6LmNoZGly'@;
put 'PWZ1bmN0aW9uKGVlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSx6LnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw2MjQ0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNjg5KSxLPXt9O0sucnVsZXM9UigzNzA0KS5tYXAoZnVu'@;
put 'Y3Rpb24oSSl7cmV0dXJue3J1bGU6SSxzdWZmaXg6SS5yZXBsYWNlKC9eKFwqXC58XCEpLywiIikscHVueVN1ZmZpeDotMSx3aWxkY2FyZDoiKiI9PT1JLmNoYXJBdCgwKSxleGNlcHRpb246IiEiPT09SS5jaGFyQXQoMCl9fSksSy5lbmRzV2l0aD1mdW5jdGlvbihJLGspe3JldHVybi0xIT09'@;
put 'SS5pbmRleE9mKGssSS5sZW5ndGgtay5sZW5ndGgpfSxLLmZpbmRSdWxlPWZ1bmN0aW9uKEkpe3ZhciBrPXoudG9BU0NJSShJKTtyZXR1cm4gSy5ydWxlcy5yZWR1Y2UoZnVuY3Rpb24oRSxqKXtyZXR1cm4tMT09PWoucHVueVN1ZmZpeCYmKGoucHVueVN1ZmZpeD16LnRvQVNDSUkoai5zdWZm'@;
put 'aXgpKSxLLmVuZHNXaXRoKGssIi4iK2oucHVueVN1ZmZpeCl8fGs9PT1qLnB1bnlTdWZmaXg/ajpFfSxudWxsKX0sTy5lcnJvckNvZGVzPXtET01BSU5fVE9PX1NIT1JUOiJEb21haW4gbmFtZSB0b28gc2hvcnQuIixET01BSU5fVE9PX0xPTkc6IkRvbWFpbiBuYW1lIHRvbyBsb25nLiBJdCBz'@;
put 'aG91bGQgYmUgbm8gbW9yZSB0aGFuIDI1NSBjaGFycy4iLExBQkVMX1NUQVJUU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3Qgc3RhcnQgd2l0aCBhIGRhc2guIixMQUJFTF9FTkRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBlbmQgd2l0aCBhIGRh'@;
put 'c2guIixMQUJFTF9UT09fTE9ORzoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IG1vc3QgNjMgY2hhcnMgbG9uZy4iLExBQkVMX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IGxlYXN0IDEgY2hhcmFjdGVyIGxvbmcuIixMQUJFTF9JTlZBTElEX0NIQVJT'@;
put 'OiJEb21haW4gbmFtZSBsYWJlbCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGRhc2hlcy4ifSxLLnZhbGlkYXRlPWZ1bmN0aW9uKEkpe3ZhciBrPXoudG9BU0NJSShJKTtpZihrLmxlbmd0aDwxKXJldHVybiJET01BSU5fVE9PX1NIT1JUIjtpZihrLmxlbmd0'@;
put 'aD4yNTUpcmV0dXJuIkRPTUFJTl9UT09fTE9ORyI7Zm9yKHZhciBFLGo9ay5zcGxpdCgiLiIpLFY9MDtWPGoubGVuZ3RoOysrVil7aWYoIShFPWpbVl0pLmxlbmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihFLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9PX0xPTkciO2lmKCItIj09'@;
put 'PUUuY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1FLmNoYXJBdChFLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV0rJC8udGVzdChFKSlyZXR1cm4iTEFCRUxfSU5WQUxJRF9DSEFSUyJ9fSxPLnBh'@;
put 'cnNlPWZ1bmN0aW9uKEkpe2lmKCJzdHJpbmciIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO3ZhciBrPUkuc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsiLiI9PT1rLmNoYXJBdChrLmxlbmd0aC0xKSYmKGs9ay5zbGljZSgwLGsu'@;
put 'bGVuZ3RoLTEpKTt2YXIgRT1LLnZhbGlkYXRlKGspO2lmKEUpcmV0dXJue2lucHV0OkksZXJyb3I6e21lc3NhZ2U6Ty5lcnJvckNvZGVzW0VdLGNvZGU6RX19O3ZhciBqPXtpbnB1dDpJLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0sVj1r'@;
put 'LnNwbGl0KCIuIik7aWYoImxvY2FsIj09PVZbVi5sZW5ndGgtMV0pcmV0dXJuIGo7dmFyIEI9ZnVuY3Rpb24oKXtyZXR1cm4veG4tLS8udGVzdChrKSYmKGouZG9tYWluJiYoai5kb21haW49ei50b0FTQ0lJKGouZG9tYWluKSksai5zdWJkb21haW4mJihqLnN1YmRvbWFpbj16LnRvQVNDSUko'@;
put 'ai5zdWJkb21haW4pKSksan0sWT1LLmZpbmRSdWxlKGspO2lmKCFZKXJldHVybiBWLmxlbmd0aDwyP2o6KGoudGxkPVYucG9wKCksai5zbGQ9Vi5wb3AoKSxqLmRvbWFpbj1bai5zbGQsai50bGRdLmpvaW4oIi4iKSxWLmxlbmd0aCYmKGouc3ViZG9tYWluPVYucG9wKCkpLEIoKSk7ai5saXN0'@;
put 'ZWQ9ITA7dmFyIFg9WS5zdWZmaXguc3BsaXQoIi4iKSxVPVYuc2xpY2UoMCxWLmxlbmd0aC1YLmxlbmd0aCk7cmV0dXJuIFkuZXhjZXB0aW9uJiZVLnB1c2goWC5zaGlmdCgpKSxqLnRsZD1YLmpvaW4oIi4iKSxVLmxlbmd0aD8oWS53aWxkY2FyZCYmKFgudW5zaGlmdChVLnBvcCgpKSxqLnRs'@;
put 'ZD1YLmpvaW4oIi4iKSksVS5sZW5ndGgmJihqLnNsZD1VLnBvcCgpLGouZG9tYWluPVtqLnNsZCxqLnRsZF0uam9pbigiLiIpLFUubGVuZ3RoJiYoai5zdWJkb21haW49VS5qb2luKCIuIikpKSxCKCkpOkIoKX0sTy5nZXQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJk8ucGFyc2UoSSkuZG9tYWlu'@;
put 'fHxudWxsfSxPLmlzVmFsaWQ9ZnVuY3Rpb24oSSl7dmFyIGs9Ty5wYXJzZShJKTtyZXR1cm4hKCFrLmRvbWFpbnx8IWsubGlzdGVkKX19LDc5MDA6KE0sTyxSKT0+e08ucHVibGljRW5jcnlwdD1SKDY1NTkpLE8ucHJpdmF0ZURlY3J5cHQ9Uig2MTM4KSxPLnByaXZhdGVFbmNyeXB0PWZ1bmN0'@;
put 'aW9uKHosSyl7cmV0dXJuIE8ucHVibGljRW5jcnlwdCh6LEssITApfSxPLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oeixLKXtyZXR1cm4gTy5wcml2YXRlRGVjcnlwdCh6LEssITApfX0sOTE5OTooTSxPLFIpPT57dmFyIHo9UigzNDgyKSxLPVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEkoayl7'@;
put 'dmFyIEU9Sy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gRS53cml0ZVVJbnQzMkJFKGssMCksRX1NLmV4cG9ydHM9ZnVuY3Rpb24oayxFKXtmb3IodmFyIGosVj1LLmFsbG9jKDApLEI9MDtWLmxlbmd0aDxFOylqPUkoQisrKSxWPUsuY29uY2F0KFtWLHooInNoYTEiKS51cGRhdGUoaykudXBkYXRl'@;
put 'KGopLmRpZ2VzdCgpXSk7cmV0dXJuIFYuc2xpY2UoMCxFKX19LDIxNDQ6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cu'@;
put 'c3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51'@;
put 'bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6'@;
put 'ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBWKGcsQyl7dmFyIFM9Zy5jaGFyQ29kZUF0KEMpO3JldHVybiBTPj02NSYmUzw9NzA/Uy01NTpTPj05NyYmUzw9MTAy'@;
put 'P1MtODc6Uy00OCYxNX1mdW5jdGlvbiBCKGcsQyxTKXt2YXIgdj1WKGcsUyk7cmV0dXJuIFMtMT49QyYmKHZ8PVYoZyxTLTEpPDw0KSx2fWZ1bmN0aW9uIFkoZyxDLFMsdil7Zm9yKHZhciBwPTAsdz1NYXRoLm1pbihnLmxlbmd0aCxTKSxKPUM7Sjx3O0orKyl7dmFyIG5lPWcuY2hhckNvZGVB'@;
put 'dChKKS00ODtwKj12LHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9RS5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2YgRXx8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNp'@;
put 'emUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPjA/ZzpDfSxFLm1pbj1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChDKTwwP2c6Q30sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxDLFMpe2lmKCJudW1iZXIiPT10eXBl'@;
put 'b2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLEMsUyk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxDLFMpOyJoZXgiPT09QyYmKEM9MTYpLEkoQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHY9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVw'@;
put 'bGFjZSgvXHMrL2csIiIpKVswXSYmKHYrKyx0aGlzLm5lZ2F0aXZlPTEpLHY8Zy5sZW5ndGgmJigxNj09PUM/dGhpcy5fcGFyc2VIZXgoZyx2LFMpOih0aGlzLl9wYXJzZUJhc2UoZyxDLHYpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKSkpfSxFLnByb3Rv'@;
put 'dHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLEMsUyl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0'@;
put 'JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUyl9LEUucHJvdG90'@;
put 'eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxDLFMpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcg'@;
put 'QXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09MDt2YXIgcCx3LEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xLHA9MDt2Pj0wO3YtPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YtMV08PDh8Z1t2LTJdPDwxNik8'@;
put 'PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT1TKWZvcih2PTAscD0wO3Y8Zy5sZW5ndGg7dis9Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdisxXTw8OHxnW3YrMl08PDE2KTw8SiY2'@;
put 'NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLEMsUyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1DKS82KSx0'@;
put 'aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHc9MCxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMTt2Pj1DO3YtPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEw'@;
put 'ODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRzW0orPTFdfD1wPj4+MjYpOncrPTg7ZWxzZSBmb3Iodj0oZy5sZW5ndGgtQyklMj09MD9DKzE6Qzt2PGcubGVuZ3RoO3YrPTIpcD1CKGcsQyx2KTw8dyx0aGlzLndvcmRzW0pdfD02NzEwODg2MyZwLHc+PTE4Pyh3LT0xOCx0aGlzLndvcmRz'@;
put 'W0orPTFdfD1wPj4+MjYpOncrPTg7dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsQyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgdj0wLHA9MTtwPD02NzEwODg2MztwKj1DKXYrKzt2LS0scD1wL0N8MDtmb3IodmFyIHc9Zy5s'@;
put 'ZW5ndGgtUyxKPXcldixuZT1NYXRoLm1pbih3LHctSikrUyxkZT0wLGZlPVM7ZmU8bmU7ZmUrPXYpZGU9WShnLGZlLGZlK3YsQyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKTtpZigwIT09Sil7dmFyIHhl'@;
put 'PTE7Zm9yKGRlPVkoZyxmZSxnLmxlbmd0aCxDKSxmZT0wO2ZlPEo7ZmUrKyl4ZSo9Qzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK2RlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWRlOnRoaXMuX2lhZGRuKGRlKX10aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24o'@;
put 'Zyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKWcud29yZHNbQ109dGhpcy53b3Jkc1tDXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LEUucHJvdG90eXBlLmNs'@;
put 'b25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5zdHJp'@;
put 'cD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LEUucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10'@;
put 'aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxFLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBYPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAw'@;
put 'IiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4'@;
put 'MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1'@;
put 'NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZShnLEMsUyl7Uy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIHY9Zy5sZW5n'@;
put 'dGgrQy5sZW5ndGh8MDtTLmxlbmd0aD12LHY9di0xfDA7dmFyIHA9MHxnLndvcmRzWzBdLHc9MHxDLndvcmRzWzBdLEo9cCp3LGRlPUovNjcxMDg4NjR8MDtTLndvcmRzWzBdPTY3MTA4ODYzJko7Zm9yKHZhciBmZT0xO2ZlPHY7ZmUrKyl7Zm9yKHZhciB4ZT1kZT4+PjI2LExlPTY3MTA4ODYz'@;
put 'JmRlLEZlPU1hdGgubWluKGZlLEMubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtZy5sZW5ndGgrMSk7T2U8PUZlO09lKyspeGUrPShKPShwPTB8Zy53b3Jkc1tmZS1PZXwwXSkqKHc9MHxDLndvcmRzW09lXSkrTGUpLzY3MTA4ODY0fDAsTGU9NjcxMDg4NjMmSjtTLndvcmRzW2ZlXT0wfExl'@;
put 'LGRlPTB8eGV9cmV0dXJuIDAhPT1kZT9TLndvcmRzW2ZlXT0wfGRlOlMubGVuZ3RoLS0sUy5zdHJpcCgpfUUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsQyl7dmFyIFM7aWYoQz0wfEN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7Uz0iIjtmb3IodmFyIHY9MCxwPTAsdz0w'@;
put 'O3c8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj10aGlzLndvcmRzW3ddLG5lPSgxNjc3NzIxNSYoSjw8dnxwKSkudG9TdHJpbmcoMTYpO1M9MCE9KHA9Sj4+PjI0LXYmMTY3NzcyMTUpfHx3IT09dGhpcy5sZW5ndGgtMT9YWzYtbmUubGVuZ3RoXStuZStTOm5lK1MsKHYrPTIpPj0yNiYmKHYtPTI2'@;
put 'LHctLSl9Zm9yKDAhPT1wJiYoUz1wLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIGRlPVVbZ10sZmU9cVtnXTtTPSIiO3ZhciB4ZT10aGlzLmNs'@;
put 'b25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIExlPXhlLm1vZG4oZmUpLnRvU3RyaW5nKGcpO1M9KHhlPXhlLmlkaXZuKGZlKSkuaXNaZXJvKCk/TGUrUzpYW2RlLUxlLmxlbmd0aF0rTGUrU31mb3IodGhpcy5pc1plcm8oKSYmKFM9IjAiK1MpO1MubGVuZ3RoJUMh'@;
put 'PTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LEUucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3Ro'@;
put 'P2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBi'@;
put 'aXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sRS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxFLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLEMpe3JldHVybiBJKHZvaWQgMCE9PWopLHRoaXMudG9BcnJheUxpa2UoaixnLEMp'@;
put 'fSxFLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PXRoaXMuYnl0ZUxlbmd0aCgpLHA9U3x8TWF0aC5tYXgoMSx2KTtJKHY8PXAsImJ5'@;
put 'dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB3LEosbmU9ImxlIj09PUMsZGU9bmV3IGcocCksZmU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSj0wOyFmZS5pc1plcm8oKTtK'@;
put 'Kyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtKXT13O2Zvcig7SjxwO0orKylkZVtKXT0wfWVsc2V7Zm9yKEo9MDtKPHAtdjtKKyspZGVbSl09MDtmb3IoSj0wOyFmZS5pc1plcm8oKTtKKyspdz1mZS5hbmRsbigyNTUpLGZlLml1c2hybig4KSxkZVtwLUotMV09d31yZXR1cm4g'@;
put 'ZGV9LEUucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIEM9ZyxTPTA7cmV0dXJuIEM+PTQwOTYmJihTKz0xMyxDPj4+PTEzKSxDPj02NCYmKFMrPTcsQz4+Pj03KSxDPj04JiYoUys9NCxD'@;
put 'Pj4+PTQpLEM+PTImJihTKz0yLEM+Pj49MiksUytDfSxFLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBDPWcsUz0wO3JldHVybiEoODE5MSZDKSYmKFMrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYoUys9NyxDPj4+PTcpLCEoMTUmQykmJihT'@;
put 'Kz00LEM+Pj49NCksISgzJkMpJiYoUys9MixDPj4+PTIpLCEoMSZDKSYmUysrLFN9LEUucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBDPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0N9LEUucHJv'@;
put 'dG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbQ10pO2lmKGcrPVMsMjYhPT1TKWJyZWFrfXJldHVybiBnfSxFLnByb3RvdHlw'@;
put 'ZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxFLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxFLnBy'@;
put 'b3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxFLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sRS5wcm90b3R5cGUubmVn'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LEUucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LEUucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxl'@;
put 'bmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgQz0wO0M8Zy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXXxnLndvcmRzW0NdO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhp'@;
put 'cy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxFLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxFLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxFLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgQztDPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIFM9MDtTPEMubGVuZ3RoO1MrKyl0aGlz'@;
put 'LndvcmRzW1NdPXRoaXMud29yZHNbU10mZy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxFLnBy'@;
put 'b3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCku'@;
put 'aXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgQyxTO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhDPXRoaXMsUz1nKTooQz1nLFM9dGhpcyk7Zm9yKHZhciB2PTA7djxTLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1DLndvcmRz'@;
put 'W3ZdXlMud29yZHNbdl07aWYodGhpcyE9PUMpZm9yKDt2PEMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdh'@;
put 'dGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sRS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sRS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sRS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPTB8TWF0aC5jZWlsKGcvMjYpLFM9ZyUyNjt0aGlzLl9l'@;
put 'eHBhbmQoQyksUz4wJiZDLS07Zm9yKHZhciB2PTA7djxDO3YrKyl0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJn50aGlzLndvcmRzW3ZdO3JldHVybiBTPjAmJih0aGlzLndvcmRzW3ZdPX50aGlzLndvcmRzW3ZdJjY3MTA4ODYzPj4yNi1TKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLm5vdG49'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sRS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLEMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nLzI2fDAsdj1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPUM/dGhp'@;
put 'cy53b3Jkc1tTXXwxPDx2OnRoaXMud29yZHNbU10mfigxPDx2KSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIEMsUyx2O2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcp'@;
put 'LHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHY9'@;
put 'Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pKygwfHYud29yZHNbd10pK3ApLHA9Qz4+PjI2O2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMm'@;
put 'KEM9KDB8Uy53b3Jkc1t3XSkrcCkscD1DPj4+MjY7aWYodGhpcy5sZW5ndGg9Uy5sZW5ndGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNbd107cmV0'@;
put 'dXJuIHRoaXN9LEUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgQztyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsQz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLEMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8o'@;
put 'dGhpcy5uZWdhdGl2ZT0wLEM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEMpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxFLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5l'@;
put 'Z2F0aXZlPTA7dmFyIEM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsQy5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgUyx2LHA9dGhp'@;
put 'cy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oUz10aGlzLHY9Zyk6KFM9Zyx2PXRoaXMpO2Zvcih2YXIgdz0wLEo9MDtKPHYubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pLSgwfHYud29y'@;
put 'ZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7Zm9yKDswIT09dyYmSjxTLmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2lmKDA9PT13JiZKPFMubGVuZ3RoJiZTIT09dGhpcylmb3IoO0o8Uy5sZW5ndGg7'@;
put 'SisrKXRoaXMud29yZHNbSl09Uy53b3Jkc1tKXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsSiksUyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1'@;
put 'YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwLHcsSj1nLndvcmRzLG5lPUMud29yZHMsZGU9Uy53b3JkcyxmZT0wLHhlPTB8SlswXSxMZT04MTkxJnhlLEZlPXhlPj4+MTMsT2U9MHxKWzFdLGplPTgxOTEmT2UsV2U9T2U+Pj4xMyxLZT0wfEpbMl0sWWU9ODE5MSZLZSxRZT1L'@;
put 'ZT4+PjEzLGx0PTB8SlszXSxQZT04MTkxJmx0LGJlPWx0Pj4+MTMsQWU9MHxKWzRdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfEpbNV0sVWU9ODE5MSZYZSxodD1YZT4+PjEzLE1lPTB8Sls2XSxEZT04MTkxJk1lLHplPU1lPj4+MTMsb3Q9MHxKWzddLHV0PTgxOTEmb3QsTXQ9b3Q+Pj4x'@;
put 'MyxIdD0wfEpbOF0sUHQ9ODE5MSZIdCxvbj1IdD4+PjEzLENuPTB8Sls5XSxVdD04MTkxJkNuLGJuPUNuPj4+MTMsV249MHxuZVswXSxlbj04MTkxJlduLCRuPVduPj4+MTMsSG49MHxuZVsxXSxmdD04MTkxJkhuLGZuPUhuPj4+MTMsaG49MHxuZVsyXSx3dD04MTkxJmhuLFh0PWhuPj4+MTMs'@;
put 'X3Q9MHxuZVszXSxOdD04MTkxJl90LG1uPV90Pj4+MTMscnQ9MHxuZVs0XSxJdD04MTkxJnJ0LFF0PXJ0Pj4+MTMsRHQ9MHxuZVs1XSxwdD04MTkxJkR0LFl0PUR0Pj4+MTMsSW49MHxuZVs2XSx6dD04MTkxJkluLHluPUluPj4+MTMseG49MHxuZVs3XSxzbj04MTkxJnhuLEJuPXhuPj4+MTMs'@;
put 'Um49MHxuZVs4XSwkdD04MTkxJlJuLFBuPVJuPj4+MTMsbmk9MHxuZVs5XSxsbj04MTkxJm5pLGpuPW5pPj4+MTM7Uy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9MTk7dmFyIHFyPShmZSsodj1NYXRoLmltdWwoTGUsZW4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5p'@;
put 'bXVsKExlLCRuKSkrTWF0aC5pbXVsKEZlLGVuKXwwKSk8PDEzKXwwO2ZlPSgodz1NYXRoLmltdWwoRmUsJG4pKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoamUsZW4pLHA9KHA9TWF0aC5pbXVsKGplLCRuKSkrTWF0aC5pbXVsKFdlLGVuKXwwLHc9'@;
put 'TWF0aC5pbXVsKFdlLCRuKTt2YXIgZ2k9KGZlKyh2PXYrTWF0aC5pbXVsKExlLGZ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChGZSxmdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsZm4pfDApKyhwPj4+MTMpfDApKyhnaT4+'@;
put 'PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChZZSxlbikscD0ocD1NYXRoLmltdWwoWWUsJG4pKStNYXRoLmltdWwoUWUsZW4pfDAsdz1NYXRoLmltdWwoUWUsJG4pLHY9ditNYXRoLmltdWwoamUsZnQpfDAscD0ocD1wK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKFdlLGZ0'@;
put 'KXwwLHc9dytNYXRoLmltdWwoV2UsZm4pfDA7dmFyIHhyPShmZSsodj12K01hdGguaW11bChMZSx3dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFh0KXwwKStNYXRoLmltdWwoRmUsd3QpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFh0KXwwKSsocD4+PjEz'@;
put 'KXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUGUsZW4pLHA9KHA9TWF0aC5pbXVsKFBlLCRuKSkrTWF0aC5pbXVsKGJlLGVuKXwwLHc9TWF0aC5pbXVsKGJlLCRuKSx2PXYrTWF0aC5pbXVsKFllLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsZm4pfDApK01hdGgu'@;
put 'aW11bChRZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFFlLGZuKXwwLHY9ditNYXRoLmltdWwoamUsd3QpfDAscD0ocD1wK01hdGguaW11bChqZSxYdCl8MCkrTWF0aC5pbXVsKFdlLHd0KXwwLHc9dytNYXRoLmltdWwoV2UsWHQpfDA7dmFyIFVpPShmZSsodj12K01hdGguaW11bChMZSxOdCl8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG1uKXwwKStNYXRoLmltdWwoRmUsTnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLG1uKXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVGUsZW4pLHA9KHA9TWF0aC5pbXVs'@;
put 'KFRlLCRuKSkrTWF0aC5pbXVsKHFlLGVuKXwwLHc9TWF0aC5pbXVsKHFlLCRuKSx2PXYrTWF0aC5pbXVsKFBlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsZm4pfDApK01hdGguaW11bChiZSxmdCl8MCx3PXcrTWF0aC5pbXVsKGJlLGZuKXwwLHY9ditNYXRoLmltdWwoWWUsd3QpfDAscD0o'@;
put 'cD1wK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKFFlLHd0KXwwLHc9dytNYXRoLmltdWwoUWUsWHQpfDAsdj12K01hdGguaW11bChqZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLG1uKXwwKStNYXRoLmltdWwoV2UsTnQpfDAsdz13K01hdGguaW11bChXZSxtbil8MDt2YXIgS3I9'@;
put 'KGZlKyh2PXYrTWF0aC5pbXVsKExlLEl0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChGZSxJdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUXQpfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1h'@;
put 'dGguaW11bChVZSxlbikscD0ocD1NYXRoLmltdWwoVWUsJG4pKStNYXRoLmltdWwoaHQsZW4pfDAsdz1NYXRoLmltdWwoaHQsJG4pLHY9ditNYXRoLmltdWwoVGUsZnQpfDAscD0ocD1wK01hdGguaW11bChUZSxmbil8MCkrTWF0aC5pbXVsKHFlLGZ0KXwwLHc9dytNYXRoLmltdWwocWUsZm4p'@;
put 'fDAsdj12K01hdGguaW11bChQZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFh0KXwwKStNYXRoLmltdWwoYmUsd3QpfDAsdz13K01hdGguaW11bChiZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFllLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChRZSxOdCl8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFFlLG1uKXwwLHY9ditNYXRoLmltdWwoamUsSXQpfDAscD0ocD1wK01hdGguaW11bChqZSxRdCl8MCkrTWF0aC5pbXVsKFdlLEl0KXwwLHc9dytNYXRoLmltdWwoV2UsUXQpfDA7dmFyIG5vPShmZSsodj12K01hdGguaW11bChMZSxwdCl8MCl8MCkrKCg4MTkxJihwPShw'@;
put 'PXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoRmUscHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFl0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoRGUsZW4pLHA9KHA9TWF0aC5pbXVsKERlLCRuKSkrTWF0aC5p'@;
put 'bXVsKHplLGVuKXwwLHc9TWF0aC5pbXVsKHplLCRuKSx2PXYrTWF0aC5pbXVsKFVlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChodCxmdCl8MCx3PXcrTWF0aC5pbXVsKGh0LGZuKXwwLHY9ditNYXRoLmltdWwoVGUsd3QpfDAscD0ocD1wK01hdGguaW11bChU'@;
put 'ZSxYdCl8MCkrTWF0aC5pbXVsKHFlLHd0KXwwLHc9dytNYXRoLmltdWwocWUsWHQpfDAsdj12K01hdGguaW11bChQZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwoYmUsTnQpfDAsdz13K01hdGguaW11bChiZSxtbil8MCx2PXYrTWF0aC5pbXVsKFllLEl0KXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoWWUsUXQpfDApK01hdGguaW11bChRZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFF0KXwwLHY9ditNYXRoLmltdWwoamUscHQpfDAscD0ocD1wK01hdGguaW11bChqZSxZdCl8MCkrTWF0aC5pbXVsKFdlLHB0KXwwLHc9dytNYXRoLmltdWwoV2UsWXQpfDA7dmFy'@;
put 'IEhyPShmZSsodj12K01hdGguaW11bChMZSx6dCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLHluKXwwKStNYXRoLmltdWwoRmUsenQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLHluKXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMs'@;
put 'dj1NYXRoLmltdWwodXQsZW4pLHA9KHA9TWF0aC5pbXVsKHV0LCRuKSkrTWF0aC5pbXVsKE10LGVuKXwwLHc9TWF0aC5pbXVsKE10LCRuKSx2PXYrTWF0aC5pbXVsKERlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZm4pfDApK01hdGguaW11bCh6ZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHpl'@;
put 'LGZuKXwwLHY9ditNYXRoLmltdWwoVWUsd3QpfDAscD0ocD1wK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLHc9dytNYXRoLmltdWwoaHQsWHQpfDAsdj12K01hdGguaW11bChUZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG1uKXwwKStNYXRoLmltdWwocWUsTnQp'@;
put 'fDAsdz13K01hdGguaW11bChxZSxtbil8MCx2PXYrTWF0aC5pbXVsKFBlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUXQpfDApK01hdGguaW11bChiZSxJdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFF0KXwwLHY9ditNYXRoLmltdWwoWWUscHQpfDAscD0ocD1wK01hdGguaW11bChZZSxZdCl8'@;
put 'MCkrTWF0aC5pbXVsKFFlLHB0KXwwLHc9dytNYXRoLmltdWwoUWUsWXQpfDAsdj12K01hdGguaW11bChqZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLHluKXwwKStNYXRoLmltdWwoV2UsenQpfDAsdz13K01hdGguaW11bChXZSx5bil8MDt2YXIgcWk9KGZlKyh2PXYrTWF0aC5pbXVsKExl'@;
put 'LHNuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsQm4pfDApK01hdGguaW11bChGZSxzbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsQm4pfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChQdCxlbikscD0ocD1N'@;
put 'YXRoLmltdWwoUHQsJG4pKStNYXRoLmltdWwob24sZW4pfDAsdz1NYXRoLmltdWwob24sJG4pLHY9ditNYXRoLmltdWwodXQsZnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxmbil8MCkrTWF0aC5pbXVsKE10LGZ0KXwwLHc9dytNYXRoLmltdWwoTXQsZm4pfDAsdj12K01hdGguaW11bChEZSx3'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFh0KXwwKStNYXRoLmltdWwoemUsd3QpfDAsdz13K01hdGguaW11bCh6ZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFVlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCx3PXcrTWF0aC5pbXVsKGh0LG1uKXww'@;
put 'LHY9ditNYXRoLmltdWwoVGUsSXQpfDAscD0ocD1wK01hdGguaW11bChUZSxRdCl8MCkrTWF0aC5pbXVsKHFlLEl0KXwwLHc9dytNYXRoLmltdWwocWUsUXQpfDAsdj12K01hdGguaW11bChQZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFl0KXwwKStNYXRoLmltdWwoYmUscHQpfDAsdz13'@;
put 'K01hdGguaW11bChiZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFllLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChRZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFFlLHluKXwwLHY9ditNYXRoLmltdWwoamUsc24pfDAscD0ocD1wK01hdGguaW11bChqZSxCbil8MCkrTWF0'@;
put 'aC5pbXVsKFdlLHNuKXwwLHc9dytNYXRoLmltdWwoV2UsQm4pfDA7dmFyIEppPShmZSsodj12K01hdGguaW11bChMZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwoRmUsJHQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLFBu'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZW4pLHA9KHA9TWF0aC5pbXVsKFV0LCRuKSkrTWF0aC5pbXVsKGJuLGVuKXwwLHc9TWF0aC5pbXVsKGJuLCRuKSx2PXYrTWF0aC5pbXVsKFB0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQs'@;
put 'Zm4pfDApK01hdGguaW11bChvbixmdCl8MCx3PXcrTWF0aC5pbXVsKG9uLGZuKXwwLHY9ditNYXRoLmltdWwodXQsd3QpfDAscD0ocD1wK01hdGguaW11bCh1dCxYdCl8MCkrTWF0aC5pbXVsKE10LHd0KXwwLHc9dytNYXRoLmltdWwoTXQsWHQpfDAsdj12K01hdGguaW11bChEZSxOdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsdz13K01hdGguaW11bCh6ZSxtbil8MCx2PXYrTWF0aC5pbXVsKFVlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDApK01hdGguaW11bChodCxJdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFF0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoVGUscHQpfDAscD0ocD1wK01hdGguaW11bChUZSxZdCl8MCkrTWF0aC5pbXVsKHFlLHB0KXwwLHc9dytNYXRoLmltdWwocWUsWXQpfDAsdj12K01hdGguaW11bChQZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsdz13K01hdGgu'@;
put 'aW11bChiZSx5bil8MCx2PXYrTWF0aC5pbXVsKFllLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsQm4pfDApK01hdGguaW11bChRZSxzbil8MCx3PXcrTWF0aC5pbXVsKFFlLEJuKXwwLHY9ditNYXRoLmltdWwoamUsJHQpfDAscD0ocD1wK01hdGguaW11bChqZSxQbil8MCkrTWF0aC5pbXVs'@;
put 'KFdlLCR0KXwwLHc9dytNYXRoLmltdWwoV2UsUG4pfDA7dmFyIGFvPShmZSsodj12K01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLGpuKXwwKStNYXRoLmltdWwoRmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGpuKXwwKSso'@;
put 'cD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsZnQpLHA9KHA9TWF0aC5pbXVsKFV0LGZuKSkrTWF0aC5pbXVsKGJuLGZ0KXwwLHc9TWF0aC5pbXVsKGJuLGZuKSx2PXYrTWF0aC5pbXVsKFB0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWHQpfDAp'@;
put 'K01hdGguaW11bChvbix3dCl8MCx3PXcrTWF0aC5pbXVsKG9uLFh0KXwwLHY9ditNYXRoLmltdWwodXQsTnQpfDAscD0ocD1wK01hdGguaW11bCh1dCxtbil8MCkrTWF0aC5pbXVsKE10LE50KXwwLHc9dytNYXRoLmltdWwoTXQsbW4pfDAsdj12K01hdGguaW11bChEZSxJdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKERlLFF0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsdz13K01hdGguaW11bCh6ZSxRdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChodCxwdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFl0KXwwLHY9ditNYXRoLmlt'@;
put 'dWwoVGUsenQpfDAscD0ocD1wK01hdGguaW11bChUZSx5bil8MCkrTWF0aC5pbXVsKHFlLHp0KXwwLHc9dytNYXRoLmltdWwocWUseW4pfDAsdj12K01hdGguaW11bChQZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsdz13K01hdGguaW11bChi'@;
put 'ZSxCbil8MCx2PXYrTWF0aC5pbXVsKFllLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsUG4pfDApK01hdGguaW11bChRZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFFlLFBuKXwwO3ZhciBybz0oZmUrKHY9ditNYXRoLmltdWwoamUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChq'@;
put 'ZSxqbil8MCkrTWF0aC5pbXVsKFdlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChXZSxqbil8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHd0KSxwPShwPU1hdGguaW11bChVdCxYdCkpK01hdGguaW11bChibix3dCl8MCx3'@;
put 'PU1hdGguaW11bChibixYdCksdj12K01hdGguaW11bChQdCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LG1uKXwwKStNYXRoLmltdWwob24sTnQpfDAsdz13K01hdGguaW11bChvbixtbil8MCx2PXYrTWF0aC5pbXVsKHV0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUXQpfDApK01hdGgu'@;
put 'aW11bChNdCxJdCl8MCx3PXcrTWF0aC5pbXVsKE10LFF0KXwwLHY9ditNYXRoLmltdWwoRGUscHQpfDAscD0ocD1wK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLHc9dytNYXRoLmltdWwoemUsWXQpfDAsdj12K01hdGguaW11bChVZSx6dCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKFVlLHluKXwwKStNYXRoLmltdWwoaHQsenQpfDAsdz13K01hdGguaW11bChodCx5bil8MCx2PXYrTWF0aC5pbXVsKFRlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQm4pfDApK01hdGguaW11bChxZSxzbil8MCx3PXcrTWF0aC5pbXVsKHFlLEJuKXwwLHY9ditNYXRoLmltdWwoUGUs'@;
put 'JHQpfDAscD0ocD1wK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLHc9dytNYXRoLmltdWwoYmUsUG4pfDA7dmFyIGlvPShmZSsodj12K01hdGguaW11bChZZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFllLGpuKXwwKStNYXRoLmltdWwoUWUsbG4p'@;
put 'fDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsTnQpLHA9KHA9TWF0aC5pbXVsKFV0LG1uKSkrTWF0aC5pbXVsKGJuLE50KXwwLHc9TWF0aC5pbXVsKGJuLG1uKSx2PXYrTWF0'@;
put 'aC5pbXVsKFB0LEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsUXQpfDApK01hdGguaW11bChvbixJdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFF0KXwwLHY9ditNYXRoLmltdWwodXQscHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoTXQsWXQpfDAsdj12K01hdGguaW11bChEZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKERlLHluKXwwKStNYXRoLmltdWwoemUsenQpfDAsdz13K01hdGguaW11bCh6ZSx5bil8MCx2PXYrTWF0aC5pbXVsKFVlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsQm4pfDApK01hdGguaW11bCho'@;
put 'dCxzbil8MCx3PXcrTWF0aC5pbXVsKGh0LEJuKXwwLHY9ditNYXRoLmltdWwoVGUsJHQpfDAscD0ocD1wK01hdGguaW11bChUZSxQbil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLHc9dytNYXRoLmltdWwocWUsUG4pfDA7dmFyIEdpPShmZSsodj12K01hdGguaW11bChQZSxsbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKFBlLGpuKXwwKStNYXRoLmltdWwoYmUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGJlLGpuKXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsSXQpLHA9KHA9TWF0aC5pbXVsKFV0LFF0'@;
put 'KSkrTWF0aC5pbXVsKGJuLEl0KXwwLHc9TWF0aC5pbXVsKGJuLFF0KSx2PXYrTWF0aC5pbXVsKFB0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsWXQpfDApK01hdGguaW11bChvbixwdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFl0KXwwLHY9ditNYXRoLmltdWwodXQsenQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVsKE10LHp0KXwwLHc9dytNYXRoLmltdWwoTXQseW4pfDAsdj12K01hdGguaW11bChEZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKERlLEJuKXwwKStNYXRoLmltdWwoemUsc24pfDAsdz13K01hdGguaW11bCh6ZSxCbil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUG4pfDApK01hdGguaW11bChodCwkdCl8MCx3PXcrTWF0aC5pbXVsKGh0LFBuKXwwO3ZhciBobz0oZmUrKHY9ditNYXRoLmltdWwoVGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFl'@;
put 'LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChxZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHB0KSxwPShwPU1hdGguaW11bChVdCxZdCkpK01hdGguaW11bChibixwdCl8MCx3PU1hdGguaW11bChibixZdCksdj12'@;
put 'K01hdGguaW11bChQdCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LHluKXwwKStNYXRoLmltdWwob24senQpfDAsdz13K01hdGguaW11bChvbix5bil8MCx2PXYrTWF0aC5pbXVsKHV0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwodXQsQm4pfDApK01hdGguaW11bChNdCxzbil8MCx3PXcrTWF0'@;
put 'aC5pbXVsKE10LEJuKXwwLHY9ditNYXRoLmltdWwoRGUsJHQpfDAscD0ocD1wK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLHc9dytNYXRoLmltdWwoemUsUG4pfDA7dmFyIHlyPShmZSsodj12K01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0'@;
put 'aC5pbXVsKFVlLGpuKXwwKStNYXRoLmltdWwoaHQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKGh0LGpuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsenQpLHA9KHA9TWF0aC5pbXVsKFV0LHluKSkrTWF0aC5pbXVsKGJu'@;
put 'LHp0KXwwLHc9TWF0aC5pbXVsKGJuLHluKSx2PXYrTWF0aC5pbXVsKFB0LHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsQm4pfDApK01hdGguaW11bChvbixzbil8MCx3PXcrTWF0aC5pbXVsKG9uLEJuKXwwLHY9ditNYXRoLmltdWwodXQsJHQpfDAscD0ocD1wK01hdGguaW11bCh1dCxQbil8'@;
put 'MCkrTWF0aC5pbXVsKE10LCR0KXwwLHc9dytNYXRoLmltdWwoTXQsUG4pfDA7dmFyIFBpPShmZSsodj12K01hdGguaW11bChEZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLGpuKXwwKStNYXRoLmltdWwoemUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVs'@;
put 'KHplLGpuKXwwKSsocD4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsc24pLHA9KHA9TWF0aC5pbXVsKFV0LEJuKSkrTWF0aC5pbXVsKGJuLHNuKXwwLHc9TWF0aC5pbXVsKGJuLEJuKSx2PXYrTWF0aC5pbXVsKFB0LCR0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoUHQsUG4pfDApK01hdGguaW11bChvbiwkdCl8MCx3PXcrTWF0aC5pbXVsKG9uLFBuKXwwO3ZhciBMbz0oZmUrKHY9ditNYXRoLmltdWwodXQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13'@;
put 'K01hdGguaW11bChNdCxqbil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LCR0KSxwPShwPU1hdGguaW11bChVdCxQbikpK01hdGguaW11bChibiwkdCl8MCx3PU1hdGguaW11bChibixQbik7dmFyIGhzPShmZSsodj12K01hdGguaW11bChQ'@;
put 'dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFB0LGpuKXwwKStNYXRoLmltdWwob24sbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKG9uLGpuKXwwKSsocD4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjM7dmFyIHJzPShmZSsodj1NYXRoLmltdWwo'@;
put 'VXQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKFV0LGpuKSkrTWF0aC5pbXVsKGJuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBmZT0oKHc9TWF0aC5pbXVsKGJuLGpuKSkrKHA+Pj4xMyl8MCkrKHJzPj4+MjYpfDAscnMmPTY3MTA4ODYzLGRlWzBdPXFyLGRlWzFdPWdpLGRlWzJdPXhy'@;
put 'LGRlWzNdPVVpLGRlWzRdPUtyLGRlWzVdPW5vLGRlWzZdPUhyLGRlWzddPXFpLGRlWzhdPUppLGRlWzldPWFvLGRlWzEwXT1ybyxkZVsxMV09aW8sZGVbMTJdPUdpLGRlWzEzXT1obyxkZVsxNF09eXIsZGVbMTVdPVBpLGRlWzE2XT1MbyxkZVsxN109aHMsZGVbMThdPXJzLDAhPT1mZSYmKGRl'@;
put 'WzE5XT1mZSxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBvZShnLEMsUyl7cmV0dXJuKG5ldyBzZSkubXVscChnLEMsUyl9ZnVuY3Rpb24gc2UoZyxDKXt0aGlzLng9Zyx0aGlzLnk9Q31NYXRoLmltdWx8fCh0ZT1lZSksRS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxDKXt2YXIgdj10aGlz'@;
put 'Lmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsQyk6djw2Mz9lZSh0aGlzLGcsQyk6djwxMDI0P2Z1bmN0aW9uKHAsdyxKKXtKLm5lZ2F0aXZlPXcubmVnYXRpdmVecC5uZWdhdGl2ZSxKLmxlbmd0aD1wLmxlbmd0aCt3Lmxl'@;
put 'bmd0aDtmb3IodmFyIG5lPTAsZGU9MCxmZT0wO2ZlPEoubGVuZ3RoLTE7ZmUrKyl7dmFyIHhlPWRlO2RlPTA7Zm9yKHZhciBMZT02NzEwODg2MyZuZSxGZT1NYXRoLm1pbihmZSx3Lmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLXAubGVuZ3RoKzEpO09lPD1GZTtPZSsrKXt2YXIgV2U9KDB8'@;
put 'cC53b3Jkc1tmZS1PZV0pKigwfHcud29yZHNbT2VdKSxLZT02NzEwODg2MyZXZTtMZT02NzEwODg2MyYoS2U9S2UrTGV8MCksZGUrPSh4ZT0oeGU9eGUrKFdlLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31KLndvcmRzW2ZlXT1MZSxuZT14ZSx4ZT1kZX1y'@;
put 'ZXR1cm4gMCE9PW5lP0oud29yZHNbZmVdPW5lOkoubGVuZ3RoLS0sSi5zdHJpcCgpfSh0aGlzLGcsQyk6b2UodGhpcyxnLEMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3IEFycmF5KGcpLFM9RS5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLHY9MDt2'@;
put 'PGc7disrKUNbdl09dGhpcy5yZXZCaW4odixTLGcpO3JldHVybiBDfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsQyxTKXtpZigwPT09Z3x8Zz09PVMtMSlyZXR1cm4gZztmb3IodmFyIHY9MCxwPTA7cDxDO3ArKyl2fD0oMSZnKTw8Qy1wLTEsZz4+PTE7cmV0dXJuIHZ9LHNlLnBy'@;
put 'b3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXtmb3IodmFyIEo9MDtKPHc7SisrKXZbSl09Q1tnW0pdXSxwW0pdPVNbZ1tKXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3RoaXMucGVybXV0ZSh3LGcsQyxTLHYscCk7Zm9yKHZhciBK'@;
put 'PTE7SjxwO0o8PD0xKWZvcih2YXIgbmU9Sjw8MSxkZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGZlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIExlPWRlLEZlPWZlLE9lPTA7T2U8SjtPZSsrKXt2YXIgamU9U1t4ZStPZV0sV2U9dlt4ZStPZV0sS2U9'@;
put 'U1t4ZStPZStKXSxZZT12W3hlK09lK0pdLFFlPUxlKktlLUZlKlllO1llPUxlKlllK0ZlKktlLFNbeGUrT2VdPWplKyhLZT1RZSksdlt4ZStPZV09V2UrWWUsU1t4ZStPZStKXT1qZS1LZSx2W3hlK09lK0pdPVdlLVllLE9lIT09bmUmJihRZT1kZSpMZS1mZSpGZSxGZT1kZSpGZStmZSpMZSxM'@;
put 'ZT1RZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxDKXt2YXIgUz0xfE1hdGgubWF4KEMsZyksdj0xJlMscD0wO2ZvcihTPVMvMnwwO1M7Uz4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK3Z9LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxDLFMpe2lmKCEo'@;
put 'Uzw9MSkpZm9yKHZhciB2PTA7djxTLzI7disrKXt2YXIgcD1nW3ZdO2dbdl09Z1tTLXYtMV0sZ1tTLXYtMV09cCxwPUNbdl0sQ1t2XT0tQ1tTLXYtMV0sQ1tTLXYtMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTAsdj0wO3Y8Qy8yO3Yr'@;
put 'Kyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMip2KzFdL0MpK01hdGgucm91bmQoZ1syKnZdL0MpK1M7Z1t2XT02NzEwODg2MyZwLFM9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxDLFMsdil7Zm9yKHZhciBw'@;
put 'PTAsdz0wO3c8Qzt3KyspU1syKnddPTgxOTEmKHArPTB8Z1t3XSksU1syKncrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3Iodz0yKkM7dzx2OysrdylTW3ddPTA7SSgwPT09cCksSSgwPT0oLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIEM9bmV3'@;
put 'IEFycmF5KGcpLFM9MDtTPGc7UysrKUNbU109MDtyZXR1cm4gQ30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2PTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxDLmxlbmd0aCkscD10aGlzLm1ha2VSQlQodiksdz10aGlzLnN0dWIodiksSj1uZXcgQXJyYXkodiks'@;
put 'bmU9bmV3IEFycmF5KHYpLGRlPW5ldyBBcnJheSh2KSxmZT1uZXcgQXJyYXkodikseGU9bmV3IEFycmF5KHYpLExlPW5ldyBBcnJheSh2KSxGZT1TLndvcmRzO0ZlLmxlbmd0aD12LHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEosdiksdGhpcy5jb252ZXJ0MTNiKEMud29yZHMs'@;
put 'Qy5sZW5ndGgsZmUsdiksdGhpcy50cmFuc2Zvcm0oSix3LG5lLGRlLHYscCksdGhpcy50cmFuc2Zvcm0oZmUsdyx4ZSxMZSx2LHApO2Zvcih2YXIgT2U9MDtPZTx2O09lKyspe3ZhciBqZT1uZVtPZV0qeGVbT2VdLWRlW09lXSpMZVtPZV07ZGVbT2VdPW5lW09lXSpMZVtPZV0rZGVbT2VdKnhl'@;
put 'W09lXSxuZVtPZV09amV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLGRlLHYpLHRoaXMudHJhbnNmb3JtKG5lLGRlLEZlLHcsdixwKSx0aGlzLmNvbmp1Z2F0ZShGZSx3LHYpLHRoaXMubm9ybWFsaXplMTNiKEZlLHYpLFMubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3Ro'@;
put 'PWcubGVuZ3RoK0MubGVuZ3RoLFMuc3RyaXAoKX0sRS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLEMpfSxFLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9u'@;
put 'KGcpe3ZhciBDPW5ldyBFKG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksb2UodGhpcyxnLEMpfSxFLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sRS5wcm90b3R5cGUuaW11bG49'@;
put 'ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpnLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9di82NzEwODg2NHwwLEMrPXA+'@;
put 'Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sRS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxFLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxFLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIEM9ZnVuY3Rpb24odyl7Zm9yKHZhciBKPW5ldyBBcnJheSh3LmJpdExlbmd0aCgp'@;
put 'KSxuZT0wO25lPEoubGVuZ3RoO25lKyspe3ZhciBmZT1uZSUyNjtKW25lXT0ody53b3Jkc1tuZS8yNnwwXSYxPDxmZSk+Pj5mZX1yZXR1cm4gSn0oZyk7aWYoMD09PUMubGVuZ3RoKXJldHVybiBuZXcgRSgxKTtmb3IodmFyIFM9dGhpcyx2PTA7djxDLmxlbmd0aCYmMD09PUNbdl07disrLFM9'@;
put 'Uy5zcXIoKSk7aWYoKyt2PEMubGVuZ3RoKWZvcih2YXIgcD1TLnNxcigpO3Y8Qy5sZW5ndGg7disrLHA9cC5zcXIoKSkwIT09Q1t2XSYmKFM9Uy5tdWwocCkpO3JldHVybiBTfSxFLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBD'@;
put 'LFM9ZyUyNix2PShnLVMpLzI2LHA9NjcxMDg4NjM+Pj4yNi1TPDwyNi1TO2lmKDAhPT1TKXt2YXIgdz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBKPXRoaXMud29yZHNbQ10mcDt0aGlzLndvcmRzW0NdPSgwfHRoaXMud29yZHNbQ10pLUo8PFN8dyx3PUo+Pj4yNi1TfXcmJih0'@;
put 'aGlzLndvcmRzW0NdPXcsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXYpe2ZvcihDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pdGhpcy53b3Jkc1tDK3ZdPXRoaXMud29yZHNbQ107Zm9yKEM9MDtDPHY7QysrKXRoaXMud29yZHNbQ109MDt0aGlzLmxlbmd0aCs9dn1yZXR1cm4gdGhpcy5zdHJpcCgp'@;
put 'fSxFLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LEUucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLEMsUyl7dmFyIHY7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLHY9Qz8oQy1DJTI2KS8yNjowO3Zh'@;
put 'ciBwPWclMjYsdz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSj02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9UztpZih2LT13LHY9TWF0aC5tYXgoMCx2KSxuZSl7Zm9yKHZhciBkZT0wO2RlPHc7ZGUrKyluZS53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZV07bmUubGVuZ3RoPXd9'@;
put 'aWYoMCE9PXcpaWYodGhpcy5sZW5ndGg+dylmb3IodGhpcy5sZW5ndGgtPXcsZGU9MDtkZTx0aGlzLmxlbmd0aDtkZSsrKXRoaXMud29yZHNbZGVdPXRoaXMud29yZHNbZGUrd107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZmU9MDtmb3IoZGU9dGhpcy5sZW5ndGgt'@;
put 'MTtkZT49MCYmKDAhPT1mZXx8ZGU+PXYpO2RlLS0pe3ZhciB4ZT0wfHRoaXMud29yZHNbZGVdO3RoaXMud29yZHNbZGVdPWZlPDwyNi1wfHhlPj4+cCxmZT14ZSZKfXJldHVybiBuZSYmMCE9PWZlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWZlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndv'@;
put 'cmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsQyxTKX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u'@;
put 'ZSgpLmlzaGxuKGcpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxFLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1TfHwhKHRoaXMud29yZHNbU10mMTw8QykpfSxFLnByb3Rv'@;
put 'dHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBDPWclMjYsUz0oZy1DKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PVM/dGhpczoo'@;
put 'MCE9PUMmJlMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihTLHRoaXMubGVuZ3RoKSwwIT09QyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Qzw8QyksdGhpcy5zdHJpcCgpKX0sRS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pbWFza24oZyl9LEUucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxn'@;
put 'Pyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LEUucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndv'@;
put 'cmRzWzBdKz1nO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0'@;
put 'aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSxFLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZl'@;
put 'PTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0'@;
put 'aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxFLnByb3RvdHlwZS5zdWJuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxFLnByb3RvdHlwZS5f'@;
put 'aXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK1MpO3ZhciBKPTA7Zm9yKHY9MDt2PGcubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrU10pK0o7dmFyIG5lPSgwfGcud29yZHNbdl0pKkM7Sj0oKHAtPTY3MTA4ODYzJm5lKT4+MjYp'@;
put 'LShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtUzt2KyspSj0ocD0oMHx0aGlzLndvcmRzW3YrU10pK0opPj4yNix0aGlzLndvcmRzW3YrU109NjcxMDg4NjMmcDtpZigwPT09SilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0x'@;
put 'PT09SiksSj0wLHY9MDt2PHRoaXMubGVuZ3RoO3YrKylKPShwPS0oMHx0aGlzLndvcmRzW3ZdKStKKT4+MjYsdGhpcy53b3Jkc1t2XT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLEMpe3ZhciBT'@;
put 'LHY9dGhpcy5jbG9uZSgpLHA9Zyx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHModykpJiYocD1wLnVzaGxuKFMpLHYuaXVzaGxuKFMpLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSixuZT12Lmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PUMp'@;
put 'eyhKPW5ldyBFKG51bGwpKS5sZW5ndGg9bmUrMSxKLndvcmRzPW5ldyBBcnJheShKLmxlbmd0aCk7Zm9yKHZhciBkZT0wO2RlPEoubGVuZ3RoO2RlKyspSi53b3Jkc1tkZV09MH12YXIgZmU9di5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1mZS5uZWdhdGl2ZSYmKHY9ZmUsSiYm'@;
put 'KEoud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfHYud29yZHNbcC5sZW5ndGgreGVdKSsoMHx2LndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvd3wwLDY3MTA4ODYzKSx2Ll9pc2hsbnN1Ym11bChwLExl'@;
put 'LHhlKTswIT09di5uZWdhdGl2ZTspTGUtLSx2Lm5lZ2F0aXZlPTAsdi5faXNobG5zdWJtdWwocCwxLHhlKSx2LmlzWmVybygpfHwodi5uZWdhdGl2ZV49MSk7SiYmKEoud29yZHNbeGVdPUxlKX1yZXR1cm4gSiYmSi5zdHJpcCgpLHYuc3RyaXAoKSwiZGl2IiE9PUMmJjAhPT1TJiZ2Lml1c2hy'@;
put 'bihTKSx7ZGl2Okp8fG51bGwsbW9kOnZ9fSxFLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxDLFMpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IEUoMCksbW9kOm5ldyBFKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KHc9dGhp'@;
put 'cy5uZWcoKS5kaXZtb2QoZyxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6dixtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8odz10aGlzLmRpdm1v'@;
put 'ZChnLm5lZygpLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLHtkaXY6dixtb2Q6dy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KHc9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxDKSwiZGl2IiE9PUMmJihwPXcubW9kLm5lZygpLFMmJjAhPT1wLm5lZ2F0aXZlJiZwLmlz'@;
put 'dWIoZykpLHtkaXY6dy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBFKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1DP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUM/e2RpdjpudWxs'@;
put 'LG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLEMpO3ZhciB2LHAsd30sRS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz'@;
put 'LmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LEUucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxFLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LEUucHJvdG90eXBl'@;
put 'LmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuZGl2bW9kKGcpO2lmKEMubW9kLmlzWmVybygpKXJldHVybiBDLmRpdjt2YXIgUz0wIT09Qy5kaXYubmVnYXRpdmU/Qy5tb2QuaXN1YihnKTpDLm1vZCx2PWcudXNocm4oMSkscD1nLmFuZGxuKDEpLHc9Uy5jbXAodik7cmV0dXJuIHc8'@;
put 'MHx8MT09PXAmJjA9PT13P0MuZGl2OjAhPT1DLmRpdi5uZWdhdGl2ZT9DLmRpdi5pc3VibigxKTpDLmRpdi5pYWRkbigxKX0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlZyxTPTAsdj10aGlzLmxlbmd0aC0xO3Y+PTA7di0t'@;
put 'KVM9KEMqUysoMHx0aGlzLndvcmRzW3ZdKSklZztyZXR1cm4gU30sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSs2NzEwODg2NCpDO3RoaXMud29y'@;
put 'ZHNbU109di9nfDAsQz12JWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxFLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBD'@;
put 'PXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdj1uZXcgRSgxKSxwPW5ldyBFKDApLHc9bmV3IEUoMCksSj1uZXcgRSgxKSxuZT0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpLCsrbmU7'@;
put 'Zm9yKHZhciBkZT1TLmNsb25lKCksZmU9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShDLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKEMuaXVzaHJuKHhlKTt4ZS0tID4wOykodi5pc09kZCgpfHxwLmlzT2RkKCkpJiYodi5p'@;
put 'YWRkKGRlKSxwLmlzdWIoZmUpKSx2Lml1c2hybigxKSxwLml1c2hybigxKTtmb3IodmFyIEZlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZGZTwyNjsrK0ZlLE9lPDw9MSk7aWYoRmU+MClmb3IoUy5pdXNocm4oRmUpO0ZlLS0gPjA7KSh3LmlzT2RkKCl8fEouaXNPZGQoKSkmJih3LmlhZGQo'@;
put 'ZGUpLEouaXN1YihmZSkpLHcuaXVzaHJuKDEpLEouaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUyksdi5pc3ViKHcpLHAuaXN1YihKKSk6KFMuaXN1YihDKSx3LmlzdWIodiksSi5pc3ViKHApKX1yZXR1cm57YTp3LGI6SixnY2Q6Uy5pdXNobG4obmUpfX0sRS5wcm90b3R5cGUuX2lu'@;
put 'dm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBDPXRoaXMsUz1nLmNsb25lKCk7Qz0wIT09Qy5uZWdhdGl2ZT9DLnVtb2QoZyk6Qy5jbG9uZSgpO2Zvcih2YXIgdixwPW5ldyBFKDEpLHc9bmV3IEUoMCksSj1TLmNsb25lKCk7Qy5jbXBuKDEpPjAm'@;
put 'JlMuY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLGRlPTE7IShDLndvcmRzWzBdJmRlKSYmbmU8MjY7KytuZSxkZTw8PTEpO2lmKG5lPjApZm9yKEMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChKKSxwLml1c2hybigxKTtmb3IodmFyIGZlPTAseGU9MTshKFMud29yZHNb'@;
put 'MF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoUy5pdXNocm4oZmUpO2ZlLS0gPjA7KXcuaXNPZGQoKSYmdy5pYWRkKEopLHcuaXVzaHJuKDEpO0MuY21wKFMpPj0wPyhDLmlzdWIoUykscC5pc3ViKHcpKTooUy5pc3ViKEMpLHcuaXN1YihwKSl9cmV0dXJuKHY9MD09PUMu'@;
put 'Y21wbigxKT9wOncpLmNtcG4oMCk8MCYmdi5pYWRkKGcpLHZ9LEUucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEM9dGhpcy5jbG9uZSgpLFM9Zy5jbG9uZSgpO0MubmVn'@;
put 'YXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB2PTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt2KyspQy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0MuaXNFdmVuKCk7KUMuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIHA9Qy5jbXAoUyk7'@;
put 'aWYocDwwKXt2YXIgdz1DO0M9UyxTPXd9ZWxzZSBpZigwPT09cHx8MD09PVMuY21wbigxKSlicmVhaztDLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxFLnByb3RvdHlwZS5pc0V2'@;
put 'ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxFLnByb3RvdHlw'@;
put 'ZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIEM9ZyUyNixTPShnLUMpLzI2LHY9MTw8QztpZih0aGlzLmxlbmd0aDw9UylyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXXw9dix0aGlzO2Zvcih2YXIgcD12LHc9UzswIT09cCYmdzx0aGlz'@;
put 'Lmxlbmd0aDt3Kyspe3ZhciBKPTB8dGhpcy53b3Jkc1t3XTtwPShKKz1wKT4+PjI2LHRoaXMud29yZHNbd109SiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1t3XT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LEUucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAx'@;
put 'PT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxFLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciBDLFM9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhUylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmUylyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5s'@;
put 'ZW5ndGg+MSlDPTE7ZWxzZXtTJiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgdj0wfHRoaXMud29yZHNbMF07Qz12PT09Zz8wOnY8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtp'@;
put 'ZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBDPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS51Y21wPWZ1bmN0'@;
put 'aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9MHx0aGlzLndvcmRzW1NdLHA9MHxnLndvcmRzW1NdO2lmKHYhPT1wKXt2PHA/Qz0t'@;
put 'MTp2PnAmJihDPTEpO2JyZWFrfX1yZXR1cm4gQ30sRS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmNtcG4oZyk+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10'@;
put 'aGlzLmNtcChnKX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4o'@;
put 'Zyl9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LEUucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVj'@;
put 'dGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBv'@;
put 'bmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu'@;
put 'cmVkLmFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuaXN1Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9u'@;
put 'bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk'@;
put 'Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhp'@;
put 'cyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkx'@;
put 'KHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgaGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB1ZShnLEMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgRShDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcg'@;
put 'RSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gY2UoKXt1ZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1'@;
put 'bmN0aW9uIEcoKXt1ZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIGIoKXt1ZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEQoKXt1ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2'@;
put 'YXIgQz1FLl9wcmltZShnKTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIEkoZy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBOKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJp'@;
put 'dExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IEUoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1p'@;
put 'bnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9dWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4g'@;
put 'Zy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LHVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciBDLFM9Zztkb3t0aGlzLnNwbGl0KFMsdGhpcy50bXApLEM9KFM9KFM9dGhpcy5pbXVsSyhTKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdo'@;
put 'aWxlKEM+dGhpcy5uKTt2YXIgdj1DPHRoaXMubj8tMTpTLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PXY/KFMud29yZHNbMF09MCxTLmxlbmd0aD0xKTp2PjA/Uy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Uy5zdHJpcD9TLnN0cmlwKCk6Uy5fc3RyaXAoKSxTfSx1ZS5wcm90b3R5cGUuc3BsaXQ9'@;
put 'ZnVuY3Rpb24oZyxDKXtnLml1c2hybih0aGlzLm4sMCxDKX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sayhjZSx1ZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zm9yKHZhciBTPTQxOTQzMDMsdj1NYXRoLm1pbihnLmxl'@;
put 'bmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPWcud29yZHNbcF07aWYoQy5sZW5ndGg9dixnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIHc9Zy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT13JlMscD0xMDtwPGcubGVuZ3Ro'@;
put 'O3ArKyl7dmFyIEo9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEomUyk8PDR8dz4+PjIyLHc9Sn1nLndvcmRzW3AtMTBdPXc+Pj49MjIsZy5sZW5ndGgtPTA9PT13JiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09'@;
put 'MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0wfGcud29yZHNbU107Zy53b3Jkc1tTXT02NzEwODg2MyYoQys9OTc3KnYpLEM9NjQqdisoQy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5n'@;
put 'dGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxrKEcsdWUpLGsoYix1ZSksayhELHVlKSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTE5KigwfGcud29yZHNb'@;
put 'U10pK0MscD02NzEwODg2MyZ2O3Y+Pj49MjYsZy53b3Jkc1tTXT1wLEM9dn1yZXR1cm4gMCE9PUMmJihnLndvcmRzW2cubGVuZ3RoKytdPUMpLGd9LEUuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGhlW2ddKXJldHVybiBoZVtnXTt2YXIgQztpZigiazI1NiI9PT1nKUM9bmV3IGNlO2Vsc2UgaWYo'@;
put 'InAyMjQiPT09ZylDPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylDPW5ldyBiO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO0M9bmV3IER9cmV0dXJuIGhlW2ddPUMsQ30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgw'@;
put 'PT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsQyl7SSgwPT0oZy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSwicmVkIHdvcmtz'@;
put 'IG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PUMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlz'@;
put 'KTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIo'@;
put 'ZyxDKTt2YXIgUz1nLmFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0p'@;
put 'Pj0wJiZTLmlzdWIodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5zdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlv'@;
put 'bihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlzdWIoQyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTfSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihDKSl9LEgucHJvdG90'@;
put 'eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLmltdWwoQykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLEMpLHRoaXMuaW1vZChnLm11bChDKSl9LEgucHJvdG90eXBlLmlzcXI9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9dGhpcy5t'@;
put 'LmFuZGxuKDMpO2lmKEkoQyUyPT0xKSwzPT09Qyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLFMpfWZvcih2YXIgdj10aGlzLm0uc3VibigxKSxwPTA7IXYuaXNaZXJvKCkmJjA9PT12LmFuZGxuKDEpOylwKyssdi5pdXNocm4oMSk7SSgh'@;
put 'di5pc1plcm8oKSk7dmFyIHc9bmV3IEUoMSkudG9SZWQodGhpcyksSj13LnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxkZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGRlPW5ldyBFKDIqZGUqZGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhkZSxuZSkuY21wKEopOylk'@;
put 'ZS5yZWRJQWRkKEopO2Zvcih2YXIgZmU9dGhpcy5wb3coZGUsdikseGU9dGhpcy5wb3coZyx2LmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhnLHYpLEZlPXA7MCE9PUxlLmNtcCh3KTspe2Zvcih2YXIgT2U9TGUsamU9MDswIT09T2UuY21wKHcpO2plKyspT2U9T2UucmVkU3FyKCk7'@;
put 'SShqZTxGZSk7dmFyIFdlPXRoaXMucG93KGZlLG5ldyBFKDEpLml1c2hsbihGZS1qZS0xKSk7eGU9eGUucmVkTXVsKFdlKSxmZT1XZS5yZWRTcXIoKSxMZT1MZS5yZWRNdWwoZmUpLEZlPWplfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgQz1nLl9pbnZtcCh0'@;
put 'aGlzLm0pO3JldHVybiAwIT09Qy5uZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChDKS5yZWROZWcoKSk6dGhpcy5pbW9kKEMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxDKXtpZihDLmlzWmVybygpKXJldHVybiBuZXcgRSgxKS50b1JlZCh0aGlzKTtpZigwPT09Qy5jbXBu'@;
put 'KDEpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBFKDEpLnRvUmVkKHRoaXMpLFNbMV09Zztmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVsKFNbdi0xXSxnKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Qy5iaXRMZW5ndGgoKSUyNjtm'@;
put 'b3IoMD09PW5lJiYobmU9MjYpLHY9Qy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1DLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09'@;
put 'PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBDPWcudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Zz9DLmNsb25lKCk6Q30sSC5wcm90b3R5cGUuY29udmVydEZy'@;
put 'b209ZnVuY3Rpb24oZyl7dmFyIEM9Zy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LEUubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE4oZyl9LGsoTixIKSxOLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQp'@;
put 'KX0sTi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LE4ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBnLndvcmRz'@;
put 'WzBdPTAsZy5sZW5ndGg9MSxnO3ZhciBTPWcuaW11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1w'@;
put 'LmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxDKXtpZihnLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgRSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIFM9Zy5tdWwo'@;
put 'Qyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAu'@;
put 'aWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlzKX0sTi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShNPVIubm1kKE0pLHRoaXMpfSw2MTM4OihNLE8sUik9Pnt2YXIg'@;
put 'ej1SKDk4MCksSz1SKDkxOTkpLEk9Uig3ODU5KSxrPVIoMjE0NCksRT1SKDM2NjMpLGo9UigzNDgyKSxWPVIoNDgxOCksQj1SKDk1MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oWSxYLFUpe3ZhciBxO3E9WS5wYWRkaW5nP1kucGFkZGluZzpVPzE6NDt2YXIgZWUsdGU9eihZKSxvZT10'@;
put 'ZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihYLmxlbmd0aD5vZXx8bmV3IGsoWCkuY21wKHRlLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2VlPVU/VihuZXcgayhYKSx0ZSk6RShYLHRlKTt2YXIgc2U9Qi5hbGxvYyhvZS1lZS5sZW5ndGgpO2lmKGVl'@;
put 'PUIuY29uY2F0KFtzZSxlZV0sb2UpLDQ9PT1xKXJldHVybiBmdW5jdGlvbihoZSx1ZSl7dmFyIGNlPWhlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEc9aigic2hhMSIpLnVwZGF0ZShCLmFsbG9jKDApKS5kaWdlc3QoKSxiPUcubGVuZ3RoO2lmKDAhPT11ZVswXSl0aHJvdyBuZXcgRXJyb3IoImRl'@;
put 'Y3J5cHRpb24gZXJyb3IiKTt2YXIgRD11ZS5zbGljZSgxLGIrMSksSD11ZS5zbGljZShiKzEpLE49SShELEsoSCxiKSksZz1JKEgsSyhOLGNlLWItMSkpO2lmKGZ1bmN0aW9uKFMsdil7Uz1CLmZyb20oUyksdj1CLmZyb20odik7dmFyIHA9MCx3PVMubGVuZ3RoO1MubGVuZ3RoIT09di5sZW5n'@;
put 'dGgmJihwKyssdz1NYXRoLm1pbihTLmxlbmd0aCx2Lmxlbmd0aCkpO2Zvcih2YXIgSj0tMTsrK0o8dzspcCs9U1tKXV52W0pdO3JldHVybiBwfShHLGcuc2xpY2UoMCxiKSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciBDPWI7MD09PWdbQ107KUMrKztpZigx'@;
put 'IT09Z1tDKytdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBnLnNsaWNlKEMpfSh0ZSxlZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlKXtmb3IodmFyIEc9dWUuc2xpY2UoMCwyKSxiPTIsRD0wOzAhPT11ZVtiKytdOylpZihiPj11ZS5sZW5n'@;
put 'dGgpe0QrKzticmVha312YXIgSD11ZS5zbGljZSgyLGItMSk7aWYoKCIwMDAyIiE9PUcudG9TdHJpbmcoImhleCIpJiYhY2V8fCIwMDAxIiE9PUcudG9TdHJpbmcoImhleCIpJiZjZSkmJkQrKyxILmxlbmd0aDw4JiZEKyssRCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTty'@;
put 'ZXR1cm4gdWUuc2xpY2UoYil9KDAsZWUsVSk7aWYoMz09PXEpcmV0dXJuIGVlO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSw2NTU5OihNLE8sUik9Pnt2YXIgej1SKDk4MCksSz1SKDE3OTgpLEk9UigzNDgyKSxrPVIoOTE5OSksRT1SKDc4NTkpLGo9UigyMTQ0KSxWPVIo'@;
put 'NDgxOCksQj1SKDM2NjMpLFk9Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKFgsVSxxKXt2YXIgZWU7ZWU9WC5wYWRkaW5nP1gucGFkZGluZzpxPzE6NDt2YXIgdGUsb2U9eihYKTtpZig0PT09ZWUpdGU9ZnVuY3Rpb24oc2UsaGUpe3ZhciB1ZT1zZS5tb2R1bHVzLmJ5dGVMZW5n'@;
put 'dGgoKSxjZT1oZS5sZW5ndGgsRz1JKCJzaGExIikudXBkYXRlKFkuYWxsb2MoMCkpLmRpZ2VzdCgpLGI9Ry5sZW5ndGgsRD0yKmI7aWYoY2U+dWUtRC0yKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBIPVkuYWxsb2ModWUtY2UtRC0yKSxOPXVlLWItMSxnPUsoYiks'@;
put 'Qz1FKFkuY29uY2F0KFtHLEgsWS5hbGxvYygxLDEpLGhlXSxOKSxrKGcsTikpLFM9RShnLGsoQyxiKSk7cmV0dXJuIG5ldyBqKFkuY29uY2F0KFtZLmFsbG9jKDEpLFMsQ10sdWUpKX0ob2UsVSk7ZWxzZSBpZigxPT09ZWUpdGU9ZnVuY3Rpb24oc2UsaGUsdWUpe3ZhciBjZSxHPWhlLmxlbmd0'@;
put 'aCxiPXNlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKEc+Yi0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gY2U9dWU/WS5hbGxvYyhiLUctMywyNTUpOmZ1bmN0aW9uKEQpe2Zvcih2YXIgSCxOPVkuYWxsb2NVbnNhZmUoRCksZz0wLEM9SygyKkQpLFM9MDtn'@;
put 'PEQ7KVM9PT1DLmxlbmd0aCYmKEM9SygyKkQpLFM9MCksKEg9Q1tTKytdKSYmKE5bZysrXT1IKTtyZXR1cm4gTn0oYi1HLTMpLG5ldyBqKFkuY29uY2F0KFtZLmZyb20oWzAsdWU/MToyXSksY2UsWS5hbGxvYygxKSxoZV0sYikpfShvZSxVLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBF'@;
put 'cnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKHRlPW5ldyBqKFUpKS5jbXAob2UubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHE/Qih0ZSxvZSk6Vih0ZSxvZSl9fSw0ODE4OihNLE8sUik9Pnt2YXIgej1SKDIxNDQpLEs9'@;
put 'Uig5NTA5KS5CdWZmZXI7TS5leHBvcnRzPWZ1bmN0aW9uKEksayl7cmV0dXJuIEsuZnJvbShJLnRvUmVkKHoubW9udChrLm1vZHVsdXMpKS5yZWRQb3cobmV3IHooay5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sNzg1OTpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8s'@;
put 'Uil7Zm9yKHZhciB6PU8ubGVuZ3RoLEs9LTE7KytLPHo7KU9bS11ePVJbS107cmV0dXJuIE99fSwzNjg5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Ui5yKE8pLFIuZChPLHtkZWNvZGU6KCk9Pm9lLGRlZmF1bHQ6KCk9PmNlLGVuY29kZTooKT0+c2UsdG9BU0NJSTooKT0+dWUsdG9Vbmljb2Rl'@;
put 'OigpPT5oZSx1Y3MyZGVjb2RlOigpPT5VLHVjczJlbmNvZGU6KCk9PnF9KTtjb25zdCB6PTIxNDc0ODM2NDcsSz0zNixJPS9eeG4tLS8saz0vW15cMC1ceDdGXS8sRT0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csaj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBp'@;
put 'bnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sVj1NYXRoLmZsb29yLEI9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBZKEcpe3Ro'@;
put 'cm93IG5ldyBSYW5nZUVycm9yKGpbR10pfWZ1bmN0aW9uIFgoRyxiKXtjb25zdCBEPUcuc3BsaXQoIkAiKTtsZXQgSD0iIjtyZXR1cm4gRC5sZW5ndGg+MSYmKEg9RFswXSsiQCIsRz1EWzFdKSxIK2Z1bmN0aW9uKGcsQyl7Y29uc3QgUz1bXTtsZXQgdj1nLmxlbmd0aDtmb3IoO3YtLTspU1t2'@;
put 'XT1DKGdbdl0pO3JldHVybiBTfSgoRz1HLnJlcGxhY2UoRSwiLiIpKS5zcGxpdCgiLiIpLGIpLmpvaW4oIi4iKX1mdW5jdGlvbiBVKEcpe2NvbnN0IGI9W107bGV0IEQ9MDtjb25zdCBIPUcubGVuZ3RoO2Zvcig7RDxIOyl7Y29uc3QgTj1HLmNoYXJDb2RlQXQoRCsrKTtpZihOPj01NTI5NiYm'@;
put 'Tjw9NTYzMTkmJkQ8SCl7Y29uc3QgZz1HLmNoYXJDb2RlQXQoRCsrKTs1NjMyMD09KDY0NTEyJmcpP2IucHVzaCgoKDEwMjMmTik8PDEwKSsoMTAyMyZnKSs2NTUzNik6KGIucHVzaChOKSxELS0pfWVsc2UgYi5wdXNoKE4pfXJldHVybiBifWNvbnN0IHE9Rz0+U3RyaW5nLmZyb21Db2RlUG9p'@;
put 'bnQoLi4uRyksZWU9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gRysyMis3NSooRzwyNiktKCgwIT1iKTw8NSl9LHRlPWZ1bmN0aW9uKEcsYixEKXtsZXQgSD0wO2ZvcihHPUQ/VihHLzcwMCk6Rz4+MSxHKz1WKEcvYik7Rz40NTU7SCs9SylHPVYoRy8zNSk7cmV0dXJuIFYoSCszNipHLyhHKzM4KSl9'@;
put 'LG9lPWZ1bmN0aW9uKEcpe2NvbnN0IGI9W10sRD1HLmxlbmd0aDtsZXQgSD0wLE49MTI4LGc9NzIsQz1HLmxhc3RJbmRleE9mKCItIik7QzwwJiYoQz0wKTtmb3IobGV0IHY9MDt2PEM7Kyt2KUcuY2hhckNvZGVBdCh2KT49MTI4JiZZKCJub3QtYmFzaWMiKSxiLnB1c2goRy5jaGFyQ29kZUF0'@;
put 'KHYpKTtmb3IobGV0IHY9Qz4wP0MrMTowO3Y8RDspe2NvbnN0IHA9SDtmb3IobGV0IEo9MSxuZT1LOztuZSs9Syl7dj49RCYmWSgiaW52YWxpZC1pbnB1dCIpO2NvbnN0IGRlPShTPUcuY2hhckNvZGVBdCh2KyspKT49NDgmJlM8NTg/Uy00OCsyNjpTPj02NSYmUzw5MT9TLTY1OlM+PTk3JiZT'@;
put 'PDEyMz9TLTk3Oks7ZGU+PUsmJlkoImludmFsaWQtaW5wdXQiKSxkZT5WKCh6LUgpL0opJiZZKCJvdmVyZmxvdyIpLEgrPWRlKko7Y29uc3QgZmU9bmU8PWc/MTpuZT49ZysyNj8yNjpuZS1nO2lmKGRlPGZlKWJyZWFrO2NvbnN0IHhlPUstZmU7Sj5WKHoveGUpJiZZKCJvdmVyZmxvdyIpLEoq'@;
put 'PXhlfWNvbnN0IHc9Yi5sZW5ndGgrMTtnPXRlKEgtcCx3LDA9PXApLFYoSC93KT56LU4mJlkoIm92ZXJmbG93IiksTis9VihIL3cpLEglPXcsYi5zcGxpY2UoSCsrLDAsTil9dmFyIFM7cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmIpfSxzZT1mdW5jdGlvbihHKXtjb25zdCBiPVtd'@;
put 'LEQ9KEc9VShHKSkubGVuZ3RoO2xldCBIPTEyOCxOPTAsZz03Mjtmb3IoY29uc3QgdiBvZiBHKXY8MTI4JiZiLnB1c2goQih2KSk7Y29uc3QgQz1iLmxlbmd0aDtsZXQgUz1DO2ZvcihDJiZiLnB1c2goIi0iKTtTPEQ7KXtsZXQgdj16O2Zvcihjb25zdCB3IG9mIEcpdz49SCYmdzx2JiYodj13'@;
put 'KTtjb25zdCBwPVMrMTt2LUg+Vigoei1OKS9wKSYmWSgib3ZlcmZsb3ciKSxOKz0odi1IKSpwLEg9djtmb3IoY29uc3QgdyBvZiBHKWlmKHc8SCYmKytOPnomJlkoIm92ZXJmbG93Iiksdz09PUgpe2xldCBKPU47Zm9yKGxldCBuZT1LOztuZSs9Syl7Y29uc3QgZGU9bmU8PWc/MTpuZT49Zysy'@;
put 'Nj8yNjpuZS1nO2lmKEo8ZGUpYnJlYWs7Y29uc3QgZmU9Si1kZSx4ZT1LLWRlO2IucHVzaChCKGVlKGRlK2ZlJXhlLDApKSksSj1WKGZlL3hlKX1iLnB1c2goQihlZShKLDApKSksZz10ZShOLHAsUz09PUMpLE49MCwrK1N9KytOLCsrSH1yZXR1cm4gYi5qb2luKCIiKX0saGU9ZnVuY3Rpb24o'@;
put 'Ryl7cmV0dXJuIFgoRyxmdW5jdGlvbihiKXtyZXR1cm4gSS50ZXN0KGIpP29lKGIuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6Yn0pfSx1ZT1mdW5jdGlvbihHKXtyZXR1cm4gWChHLGZ1bmN0aW9uKGIpe3JldHVybiBrLnRlc3QoYik/InhuLS0iK3NlKGIpOmJ9KX0sY2U9e3ZlcnNpb246IjIu'@;
put 'MS4wIix1Y3MyOntkZWNvZGU6VSxlbmNvZGU6cX0sZGVjb2RlOm9lLGVuY29kZTpzZSx0b0FTQ0lJOnVlLHRvVW5pY29kZTpoZX19LDcxMjk6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB6KEkpe3RyeXtyZXR1cm4g'@;
put 'ZGVjb2RlVVJJQ29tcG9uZW50KEkucmVwbGFjZSgvXCsvZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSyhJKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChJKX1jYXRjaHtyZXR1cm4gbnVsbH19Ty5zdHJpbmdpZnk9ZnVuY3Rpb24oSSxrKXtrPWt8fCIiO3ZhciBF'@;
put 'LGosVj1bXTtmb3IoaiBpbiJzdHJpbmciIT10eXBlb2YgayYmKGs9Ij8iKSxJKWlmKFIuY2FsbChJLGopKXtpZigoRT1JW2pdKXx8bnVsbCE9RSYmIWlzTmFOKEUpfHwoRT0iIiksaj1LKGopLEU9SyhFKSxudWxsPT09anx8bnVsbD09PUUpY29udGludWU7Vi5wdXNoKGorIj0iK0UpfXJldHVy'@;
put 'biBWLmxlbmd0aD9rK1Yuam9pbigiJiIpOiIifSxPLnBhcnNlPWZ1bmN0aW9uKEkpe2Zvcih2YXIgayxFPS8oW149PyMmXSspPT8oW14mXSopL2csaj17fTtrPUUuZXhlYyhJKTspe3ZhciBWPXooa1sxXSksQj16KGtbMl0pO251bGw9PT1WfHxudWxsPT09Qnx8ViBpbiBqfHwoaltWXT1CKX1y'@;
put 'ZXR1cm4gan19LDE3OTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9NjU1MzYsaz1SKDk1MDkpLkJ1ZmZlcixFPVIuZy5jcnlwdG98fFIuZy5tc0NyeXB0bztNLmV4cG9ydHM9RSYmRS5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24oaixWKXtpZihqPjQyOTQ5NjcyOTUp'@;
put 'dGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgQj1rLmFsbG9jVW5zYWZlKGopO2lmKGo+MClpZihqPkspZm9yKHZhciBZPTA7WTxqO1krPUspRS5nZXRSYW5kb21WYWx1ZXMoQi5zbGljZShZLFkrSykpO2Vsc2UgRS5nZXRSYW5kb21W'@;
put 'YWx1ZXMoQik7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFY/ei5uZXh0VGljayhmdW5jdGlvbigpe1YobnVsbCxCKX0pOkJ9OmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2Vy'@;
put 'LlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7ZnVuY3Rpb24gSygpe3Rocm93IG5ldyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9y'@;
put 'dGVkIGJ5IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfXZhciBJPVIoOTUwOSksaz1SKDE3OTgpLEU9SS5CdWZmZXIsaj1JLmtNYXhMZW5ndGgsVj1SLmcuY3J5cHRvfHxSLmcubXNDcnlwdG8sQj1NYXRoLnBvdygyLDMyKS0xO2Z1'@;
put 'bmN0aW9uIFkocSxlZSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxIT1xKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYocT5CfHxxPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihxPmp8fHE+ZWUpdGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBYKHEsZWUsdGUpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cSE9cSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihxPkJ8fHE8MCl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihxK2VlPnRlfHxxPmopdGhyb3cgbmV3IFJhbmdlRXJyb3IoImJ1ZmZlciB0b28gc21hbGwiKX1mdW5jdGlvbiBVKHEsZWUsdGUsb2Upe2lmKHouYnJvd3Nlcil7dmFyIGhlPW5ldyBVaW50OEFycmF5KHEuYnVmZmVyLGVlLHRlKTtyZXR1cm4g'@;
put 'Vi5nZXRSYW5kb21WYWx1ZXMoaGUpLG9lP3ZvaWQgei5uZXh0VGljayhmdW5jdGlvbigpe29lKG51bGwscSl9KTpxfWlmKCFvZSlyZXR1cm4gayh0ZSkuY29weShxLGVlKSxxO2sodGUsZnVuY3Rpb24odWUsY2Upe2lmKHVlKXJldHVybiBvZSh1ZSk7Y2UuY29weShxLGVlKSxvZShudWxsLHEp'@;
put 'fSl9ViYmVi5nZXRSYW5kb21WYWx1ZXN8fCF6LmJyb3dzZXI/KE8ucmFuZG9tRmlsbD1mdW5jdGlvbihxLGVlLHRlLG9lKXtpZighKEUuaXNCdWZmZXIocSl8fHEgaW5zdGFuY2VvZiBSLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBh'@;
put 'IEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGVlKW9lPWVlLGVlPTAsdGU9cS5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgdGUpb2U9dGUsdGU9cS5sZW5ndGgtZWU7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygb2UpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gWShlZSxxLmxlbmd0aCksWCh0ZSxlZSxxLmxlbmd0aCksVShxLGVlLHRlLG9lKX0sTy5yYW5kb21GaWxsU3luYz1mdW5jdGlvbihxLGVlLHRlKXtpZih2b2lkIDA9PT1lZSYmKGVlPTApLCEoRS5pc0J1'@;
put 'ZmZlcihxKXx8cSBpbnN0YW5jZW9mIFIuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4gWShlZSxxLmxlbmd0aCksdm9pZCAwPT09dGUmJih0ZT1xLmxlbmd0aC1lZSksWCh0ZSxl'@;
put 'ZSxxLmxlbmd0aCksVShxLGVlLHRlKX0pOihPLnJhbmRvbUZpbGw9SyxPLnJhbmRvbUZpbGxTeW5jPUspfSw0MjgxOk09PnsidXNlIHN0cmljdCI7dmFyIE89e307ZnVuY3Rpb24gUihLLEksayl7a3x8KGs9RXJyb3IpO3ZhciBFPWZ1bmN0aW9uKGope3ZhciBWLEI7ZnVuY3Rpb24gWShYLFUs'@;
put 'cSl7cmV0dXJuIGouY2FsbCh0aGlzLCJzdHJpbmciPT10eXBlb2YgST9JOkkoWCxVLHEpKXx8dGhpc31yZXR1cm4gQj1qLChWPVkpLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIucHJvdG90eXBlKSxWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WLFYuX19wcm90b19fPUIsWX0oayk7RS5wcm90'@;
put 'b3R5cGUubmFtZT1rLm5hbWUsRS5wcm90b3R5cGUuY29kZT1LLE9bS109RX1mdW5jdGlvbiB6KEssSSl7aWYoQXJyYXkuaXNBcnJheShLKSl7dmFyIGs9Sy5sZW5ndGg7cmV0dXJuIEs9Sy5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIFN0cmluZyhFKX0pLGs+Mj8ib25lIG9mICIuY29uY2F0KEks'@;
put 'IiAiKS5jb25jYXQoSy5zbGljZSgwLGstMSkuam9pbigiLCAiKSwiLCBvciAiKStLW2stMV06Mj09PWs/Im9uZSBvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KEtbMF0sIiBvciAiKS5jb25jYXQoS1sxXSk6Im9mICIuY29uY2F0KEksIiAiKS5jb25jYXQoS1swXSl9cmV0dXJuIm9mICIuY29u'@;
put 'Y2F0KEksIiAiKS5jb25jYXQoU3RyaW5nKEspKX1SKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKEssSSl7cmV0dXJuJ1RoZSB2YWx1ZSAiJytJKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytLKyciJ30sVHlwZUVycm9yKSxSKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVu'@;
put 'Y3Rpb24oSyxJLGspe3ZhciBFLEIsWCxxO2lmKCJzdHJpbmciPT10eXBlb2YgSSYmIm5vdCAiPT09SS5zdWJzdHIoMCw0KT8oRT0ibXVzdCBub3QgYmUiLEk9SS5yZXBsYWNlKC9ebm90IC8sIiIpKTpFPSJtdXN0IGJlIixYPUssKHZvaWQgMD09PXF8fHE+WC5sZW5ndGgpJiYocT1YLmxlbmd0'@;
put 'aCksIiBhcmd1bWVudCI9PT1YLnN1YnN0cmluZyhxLTkscSkpQj0iVGhlICIuY29uY2F0KEssIiAiKS5jb25jYXQoRSwiICIpLmNvbmNhdCh6KEksInR5cGUiKSk7ZWxzZXt2YXIgWT1mdW5jdGlvbihYLFUscSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBxJiYocT0wKSwhKHErMT5YLmxlbmd0'@;
put 'aCkmJi0xIT09WC5pbmRleE9mKCIuIixxKX0oSyk/InByb3BlcnR5IjoiYXJndW1lbnQiO0I9J1RoZSAiJy5jb25jYXQoSywnIiAnKS5jb25jYXQoWSwiICIpLmNvbmNhdChFLCIgIikuY29uY2F0KHooSSwidHlwZSIpKX1yZXR1cm4gQisiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHR5cGVv'@;
put 'ZiBrKX0sVHlwZUVycm9yKSxSKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxSKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oSyl7cmV0dXJuIlRoZSAiK0srIiBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIn0pLFIo'@;
put 'IkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIiksUigiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1bmN0aW9uKEspe3JldHVybiJDYW5ub3QgY2FsbCAiK0srIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLFIoIkVSUl9NVUxUSVBMRV9DQUxMQkFD'@;
put 'SyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLFIoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIiksUigiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxSKCJFUlJfU1RSRUFNX05VTExfVkFM'@;
put 'VUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksUigiRVJSX1VOS05PV05fRU5DT0RJTkciLGZ1bmN0aW9uKEspe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK0t9LFR5cGVFcnJvciksUigiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9F'@;
put 'VkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksTS5leHBvcnRzLnE9T30sNjc1MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oVSl7dmFyIHE9W107Zm9yKHZhciBlZSBpbiBVKXEucHVzaChlZSk7cmV0'@;
put 'dXJuIHF9O00uZXhwb3J0cz1CO3ZhciBJPVIoOTQ4MSksaz1SKDQyMjkpO1IoNTcxNykoQixJKTtmb3IodmFyIEU9SyhrLnByb3RvdHlwZSksaj0wO2o8RS5sZW5ndGg7aisrKXt2YXIgVj1FW2pdO0IucHJvdG90eXBlW1ZdfHwoQi5wcm90b3R5cGVbVl09ay5wcm90b3R5cGVbVl0pfWZ1bmN0'@;
put 'aW9uIEIoVSl7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKFUpO0kuY2FsbCh0aGlzLFUpLGsuY2FsbCh0aGlzLFUpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxVJiYoITE9PT1VLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1VLndyaXRhYmxlJiYodGhpcy53'@;
put 'cml0YWJsZT0hMSksITE9PT1VLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLFkpKSl9ZnVuY3Rpb24gWSgpe3RoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fHoubmV4dFRpY2soWCx0aGlzKX1mdW5jdGlvbiBYKFUpe1UuZW5kKCl9T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJ3cml0'@;
put 'YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFi'@;
put 'bGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVT'@;
put 'dGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oVSl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFi'@;
put 'bGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9VSl9fSl9LDI3MjU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9Szt2YXIgej1SKDQ2MDUpO2Z1bmN0aW9uIEsoSSl7aWYoISh0aGlzIGluc3RhbmNl'@;
put 'b2YgSykpcmV0dXJuIG5ldyBLKEkpO3ouY2FsbCh0aGlzLEkpfVIoNTcxNykoSyx6KSxLLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEksayxFKXtFKG51bGwsSSl9fSw5NDgxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDQxNTUpO00uZXhwb3J0cz1ILEguUmVhZGFi'@;
put 'bGVTdGF0ZT1ELFIoNzE4Nyk7dmFyIFYsST1mdW5jdGlvbihXZSxLZSl7cmV0dXJuIFdlLmxpc3RlbmVycyhLZSkubGVuZ3RofSxrPVIoMjUwMyksRT1SKDg3NjQpLkJ1ZmZlcixqPSh2b2lkIDAhPT1SLmc/Ui5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2Vs'@;
put 'Zjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEI9Uig0NjE2KTtWPUImJkIuZGVidWdsb2c/Qi5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBZLFgsVSxxPVIoNzMyNyksZWU9UigxMTk1KSx0ZT1SKDI0NTcpLmdldEhpZ2hXYXRlck1hcmssb2U9Uig0MjgxKS5xLHNl'@;
put 'PW9lLkVSUl9JTlZBTElEX0FSR19UWVBFLGhlPW9lLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsdWU9b2UuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsY2U9b2UuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtSKDU3MTcpKEgsayk7dmFyIEc9ZWUuZXJyb3JPckRlc3Ry'@;
put 'b3ksYj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBEKFdlLEtlLFllKXt6PXp8fFIoNjc1MyksImJvb2xlYW4iIT10eXBlb2YgWWUmJihZZT1LZSBpbnN0YW5jZW9mIHopLHRoaXMub2JqZWN0TW9kZT0hIShXZT1XZXx8e30pLm9iamVjdE1v'@;
put 'ZGUsWWUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIVdlLnJlYWRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPXRlKHRoaXMsV2UsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsWWUpLHRoaXMuYnVmZmVyPW5ldyBxLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBl'@;
put 'cz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxp'@;
put 'c3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PVdlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhV2UuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9V2UuZGVmYXVs'@;
put 'dEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsV2UuZW5jb2RpbmcmJihZfHwoWT1SKDI1NTMpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgWShXZS5lbmNvZGlu'@;
put 'ZyksdGhpcy5lbmNvZGluZz1XZS5lbmNvZGluZyl9ZnVuY3Rpb24gSChXZSl7aWYoej16fHxSKDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIEgpKXJldHVybiBuZXcgSChXZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgRChXZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiB6KSx0aGlzLnJlYWRhYmxl'@;
put 'PSEwLFdlJiYoImZ1bmN0aW9uIj09dHlwZW9mIFdlLnJlYWQmJih0aGlzLl9yZWFkPVdlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBXZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1XZS5kZXN0cm95KSksay5jYWxsKHRoaXMpfWZ1bmN0aW9uIE4oV2UsS2UsWWUsUWUsbHQpe1YoInJlYWRh'@;
put 'YmxlQWRkQ2h1bmsiLEtlKTt2YXIgUGUsQWUsVGUscWUsWGUsYmU9V2UuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUtlKWJlLnJlYWRpbmc9ITEsZnVuY3Rpb24oQWUsVGUpe2lmKFYoIm9uRW9mQ2h1bmsiKSwhVGUuZW5kZWQpe2lmKFRlLmRlY29kZXIpe3ZhciBxZT1UZS5kZWNvZGVyLmVu'@;
put 'ZCgpO3FlJiZxZS5sZW5ndGgmJihUZS5idWZmZXIucHVzaChxZSksVGUubGVuZ3RoKz1UZS5vYmplY3RNb2RlPzE6cWUubGVuZ3RoKX1UZS5lbmRlZD0hMCxUZS5zeW5jP3YoQWUpOihUZS5uZWVkUmVhZGFibGU9ITEsVGUuZW1pdHRlZFJlYWRhYmxlfHwoVGUuZW1pdHRlZFJlYWRhYmxlPSEw'@;
put 'LHAoQWUpKSl9fShXZSxiZSk7ZWxzZSBpZihsdHx8KEFlPWJlLEUuaXNCdWZmZXIoWGU9VGU9S2UpfHxYZSBpbnN0YW5jZW9mIGp8fCJzdHJpbmciPT10eXBlb2YgVGV8fHZvaWQgMD09PVRlfHxBZS5vYmplY3RNb2RlfHwocWU9bmV3IHNlKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJV'@;
put 'aW50OEFycmF5Il0sVGUpKSxQZT1xZSksUGUpRyhXZSxQZSk7ZWxzZSBpZihiZS5vYmplY3RNb2RlfHxLZSYmS2UubGVuZ3RoPjApaWYoInN0cmluZyI9PXR5cGVvZiBLZXx8YmUub2JqZWN0TW9kZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEtlKT09PUUucHJvdG90eXBlfHwoS2U9ZnVuY3Rp'@;
put 'b24oQWUpe3JldHVybiBFLmZyb20oQWUpfShLZSkpLFFlKWJlLmVuZEVtaXR0ZWQ/RyhXZSxuZXcgY2UpOmcoV2UsYmUsS2UsITApO2Vsc2UgaWYoYmUuZW5kZWQpRyhXZSxuZXcgaGUpO2Vsc2V7aWYoYmUuZGVzdHJveWVkKXJldHVybiExO2JlLnJlYWRpbmc9ITEsYmUuZGVjb2RlciYmIVll'@;
put 'PyhLZT1iZS5kZWNvZGVyLndyaXRlKEtlKSxiZS5vYmplY3RNb2RlfHwwIT09S2UubGVuZ3RoP2coV2UsYmUsS2UsITEpOncoV2UsYmUpKTpnKFdlLGJlLEtlLCExKX1lbHNlIFFlfHwoYmUucmVhZGluZz0hMSx3KFdlLGJlKSk7cmV0dXJuIWJlLmVuZGVkJiYoYmUubGVuZ3RoPGJlLmhpZ2hX'@;
put 'YXRlck1hcmt8fDA9PT1iZS5sZW5ndGgpfWZ1bmN0aW9uIGcoV2UsS2UsWWUsUWUpe0tlLmZsb3dpbmcmJjA9PT1LZS5sZW5ndGgmJiFLZS5zeW5jPyhLZS5hd2FpdERyYWluPTAsV2UuZW1pdCgiZGF0YSIsWWUpKTooS2UubGVuZ3RoKz1LZS5vYmplY3RNb2RlPzE6WWUubGVuZ3RoLFFlP0tl'@;
put 'LmJ1ZmZlci51bnNoaWZ0KFllKTpLZS5idWZmZXIucHVzaChZZSksS2UubmVlZFJlYWRhYmxlJiZ2KFdlKSksdyhXZSxLZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10'@;
put 'aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFdlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9V2UpfX0pLEgucHJvdG90eXBlLmRlc3Ryb3k9ZWUuZGVzdHJveSxILnByb3Rv'@;
put 'dHlwZS5fdW5kZXN0cm95PWVlLnVuZGVzdHJveSxILnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihXZSxLZSl7S2UoV2UpfSxILnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWUsUWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gUWUub2JqZWN0TW9kZT9ZZT0hMDoi'@;
put 'c3RyaW5nIj09dHlwZW9mIFdlJiYoKEtlPUtlfHxRZS5kZWZhdWx0RW5jb2RpbmcpIT09UWUuZW5jb2RpbmcmJihXZT1FLmZyb20oV2UsS2UpLEtlPSIiKSxZZT0hMCksTih0aGlzLFdlLEtlLCExLFllKX0sSC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihXZSl7cmV0dXJuIE4odGhpcyxX'@;
put 'ZSxudWxsLCEwLCExKX0sSC5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sSC5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oV2Upe1l8fChZPVIoMjU1MykuU3RyaW5nRGVjb2Rlcik7dmFyIEtlPW5ldyBZ'@;
put 'KFdlKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9S2UsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBZZT10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLFFlPSIiO251bGwhPT1ZZTspUWUr'@;
put 'PUtlLndyaXRlKFllLmRhdGEpLFllPVllLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1RZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChRZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9UWUubGVuZ3RoLHRoaXN9O3ZhciBD'@;
put 'PTEwNzM3NDE4MjQ7ZnVuY3Rpb24gUyhXZSxLZSl7cmV0dXJuIFdlPD0wfHwwPT09S2UubGVuZ3RoJiZLZS5lbmRlZD8wOktlLm9iamVjdE1vZGU/MTpXZSE9V2U/S2UuZmxvd2luZyYmS2UubGVuZ3RoP0tlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOktlLmxlbmd0aDooV2U+S2UuaGlnaFdh'@;
put 'dGVyTWFyayYmKEtlLmhpZ2hXYXRlck1hcms9KChZZT1XZSk+PUM/WWU9QzooWWUtLSxZZXw9WWU+Pj4xLFllfD1ZZT4+PjIsWWV8PVllPj4+NCxZZXw9WWU+Pj44LFllfD1ZZT4+PjE2LFllKyspLFllKSksV2U8PUtlLmxlbmd0aD9XZTpLZS5lbmRlZD9LZS5sZW5ndGg6KEtlLm5lZWRSZWFk'@;
put 'YWJsZT0hMCwwKSk7dmFyIFllfWZ1bmN0aW9uIHYoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtWKCJlbWl0UmVhZGFibGUiLEtlLm5lZWRSZWFkYWJsZSxLZS5lbWl0dGVkUmVhZGFibGUpLEtlLm5lZWRSZWFkYWJsZT0hMSxLZS5lbWl0dGVkUmVhZGFibGV8fChWKCJlbWl0UmVhZGFi'@;
put 'bGUiLEtlLmZsb3dpbmcpLEtlLmVtaXR0ZWRSZWFkYWJsZT0hMCxLLm5leHRUaWNrKHAsV2UpKX1mdW5jdGlvbiBwKFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7VigiZW1pdFJlYWRhYmxlXyIsS2UuZGVzdHJveWVkLEtlLmxlbmd0aCxLZS5lbmRlZCksS2UuZGVzdHJveWVkfHwhS2Uu'@;
put 'bGVuZ3RoJiYhS2UuZW5kZWR8fChXZS5lbWl0KCJyZWFkYWJsZSIpLEtlLmVtaXR0ZWRSZWFkYWJsZT0hMSksS2UubmVlZFJlYWRhYmxlPSFLZS5mbG93aW5nJiYhS2UuZW5kZWQmJktlLmxlbmd0aDw9S2UuaGlnaFdhdGVyTWFyayx4ZShXZSl9ZnVuY3Rpb24gdyhXZSxLZSl7S2UucmVhZGlu'@;
put 'Z01vcmV8fChLZS5yZWFkaW5nTW9yZT0hMCxLLm5leHRUaWNrKEosV2UsS2UpKX1mdW5jdGlvbiBKKFdlLEtlKXtmb3IoOyFLZS5yZWFkaW5nJiYhS2UuZW5kZWQmJihLZS5sZW5ndGg8S2UuaGlnaFdhdGVyTWFya3x8S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCk7KXt2YXIgWWU9S2UubGVu'@;
put 'Z3RoO2lmKFYoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksV2UucmVhZCgwKSxZZT09PUtlLmxlbmd0aClicmVha31LZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBuZShXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO0tlLnJlYWRhYmxlTGlzdGVuaW5nPVdlLmxpc3RlbmVyQ291bnQoInJl'@;
put 'YWRhYmxlIik+MCxLZS5yZXN1bWVTY2hlZHVsZWQmJiFLZS5wYXVzZWQ/S2UuZmxvd2luZz0hMDpXZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmV2UucmVzdW1lKCl9ZnVuY3Rpb24gZGUoV2Upe1YoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLFdlLnJlYWQoMCl9ZnVuY3Rpb24gZmUo'@;
put 'V2UsS2Upe1YoInJlc3VtZSIsS2UucmVhZGluZyksS2UucmVhZGluZ3x8V2UucmVhZCgwKSxLZS5yZXN1bWVTY2hlZHVsZWQ9ITEsV2UuZW1pdCgicmVzdW1lIikseGUoV2UpLEtlLmZsb3dpbmcmJiFLZS5yZWFkaW5nJiZXZS5yZWFkKDApfWZ1bmN0aW9uIHhlKFdlKXt2YXIgS2U9V2UuX3Jl'@;
put 'YWRhYmxlU3RhdGU7Zm9yKFYoImZsb3ciLEtlLmZsb3dpbmcpO0tlLmZsb3dpbmcmJm51bGwhPT1XZS5yZWFkKCk7KTt9ZnVuY3Rpb24gTGUoV2UsS2Upe3JldHVybiAwPT09S2UubGVuZ3RoP251bGw6KEtlLm9iamVjdE1vZGU/WWU9S2UuYnVmZmVyLnNoaWZ0KCk6IVdlfHxXZT49S2UubGVu'@;
put 'Z3RoPyhZZT1LZS5kZWNvZGVyP0tlLmJ1ZmZlci5qb2luKCIiKToxPT09S2UuYnVmZmVyLmxlbmd0aD9LZS5idWZmZXIuZmlyc3QoKTpLZS5idWZmZXIuY29uY2F0KEtlLmxlbmd0aCksS2UuYnVmZmVyLmNsZWFyKCkpOlllPUtlLmJ1ZmZlci5jb25zdW1lKFdlLEtlLmRlY29kZXIpLFllKTt2'@;
put 'YXIgWWV9ZnVuY3Rpb24gRmUoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtWKCJlbmRSZWFkYWJsZSIsS2UuZW5kRW1pdHRlZCksS2UuZW5kRW1pdHRlZHx8KEtlLmVuZGVkPSEwLEsubmV4dFRpY2soT2UsS2UsV2UpKX1mdW5jdGlvbiBPZShXZSxLZSl7aWYoVigiZW5kUmVhZGFibGVO'@;
put 'VCIsV2UuZW5kRW1pdHRlZCxXZS5sZW5ndGgpLCFXZS5lbmRFbWl0dGVkJiYwPT09V2UubGVuZ3RoJiYoV2UuZW5kRW1pdHRlZD0hMCxLZS5yZWFkYWJsZT0hMSxLZS5lbWl0KCJlbmQiKSxXZS5hdXRvRGVzdHJveSkpe3ZhciBZZT1LZS5fd3JpdGFibGVTdGF0ZTsoIVllfHxZZS5hdXRvRGVz'@;
put 'dHJveSYmWWUuZmluaXNoZWQpJiZLZS5kZXN0cm95KCl9fWZ1bmN0aW9uIGplKFdlLEtlKXtmb3IodmFyIFllPTAsUWU9V2UubGVuZ3RoO1llPFFlO1llKyspaWYoV2VbWWVdPT09S2UpcmV0dXJuIFllO3JldHVybi0xfUgucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oV2Upe1YoInJlYWQiLFdl'@;
put 'KSxXZT1wYXJzZUludChXZSwxMCk7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWWU9V2U7aWYoMCE9PVdlJiYoS2UuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09V2UmJktlLm5lZWRSZWFkYWJsZSYmKCgwIT09S2UuaGlnaFdhdGVyTWFyaz9LZS5sZW5ndGg+PUtlLmhpZ2hXYXRlck1hcms6'@;
put 'S2UubGVuZ3RoPjApfHxLZS5lbmRlZCkpcmV0dXJuIFYoInJlYWQ6IGVtaXRSZWFkYWJsZSIsS2UubGVuZ3RoLEtlLmVuZGVkKSwwPT09S2UubGVuZ3RoJiZLZS5lbmRlZD9GZSh0aGlzKTp2KHRoaXMpLG51bGw7aWYoMD09PShXZT1TKFdlLEtlKSkmJktlLmVuZGVkKXJldHVybiAwPT09S2Uu'@;
put 'bGVuZ3RoJiZGZSh0aGlzKSxudWxsO3ZhciBRZSxsdD1LZS5uZWVkUmVhZGFibGU7cmV0dXJuIFYoIm5lZWQgcmVhZGFibGUiLGx0KSwoMD09PUtlLmxlbmd0aHx8S2UubGVuZ3RoLVdlPEtlLmhpZ2hXYXRlck1hcmspJiZWKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsbHQ9ITApLEtl'@;
put 'LmVuZGVkfHxLZS5yZWFkaW5nP1YoInJlYWRpbmcgb3IgZW5kZWQiLGx0PSExKTpsdCYmKFYoImRvIHJlYWQiKSxLZS5yZWFkaW5nPSEwLEtlLnN5bmM9ITAsMD09PUtlLmxlbmd0aCYmKEtlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChLZS5oaWdoV2F0ZXJNYXJrKSxLZS5zeW5jPSEx'@;
put 'LEtlLnJlYWRpbmd8fChXZT1TKFllLEtlKSkpLG51bGw9PT0oUWU9V2U+MD9MZShXZSxLZSk6bnVsbCk/KEtlLm5lZWRSZWFkYWJsZT1LZS5sZW5ndGg8PUtlLmhpZ2hXYXRlck1hcmssV2U9MCk6KEtlLmxlbmd0aC09V2UsS2UuYXdhaXREcmFpbj0wKSwwPT09S2UubGVuZ3RoJiYoS2UuZW5k'@;
put 'ZWR8fChLZS5uZWVkUmVhZGFibGU9ITApLFllIT09V2UmJktlLmVuZGVkJiZGZSh0aGlzKSksbnVsbCE9PVFlJiZ0aGlzLmVtaXQoImRhdGEiLFFlKSxRZX0sSC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oV2Upe0codGhpcyxuZXcgdWUoIl9yZWFkKCkiKSl9LEgucHJvdG90eXBlLnBpcGU9'@;
put 'ZnVuY3Rpb24oV2UsS2Upe3ZhciBZZT10aGlzLFFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKFFlLnBpcGVzQ291bnQpe2Nhc2UgMDpRZS5waXBlcz1XZTticmVhaztjYXNlIDE6UWUucGlwZXM9W1FlLnBpcGVzLFdlXTticmVhaztkZWZhdWx0OlFlLnBpcGVzLnB1c2goV2UpfVFlLnBp'@;
put 'cGVzQ291bnQrPTEsVigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixRZS5waXBlc0NvdW50LEtlKTt2YXIgbHQ9S2UmJiExPT09S2UuZW5kfHxXZT09PUsuc3Rkb3V0fHxXZT09PUsuc3RkZXJyP01lOmJlO2Z1bmN0aW9uIGJlKCl7Vigib25lbmQiKSxXZS5lbmQoKX1RZS5lbmRFbWl0dGVkP0su'@;
put 'bmV4dFRpY2sobHQpOlllLm9uY2UoImVuZCIsbHQpLFdlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIFBlKERlLHplKXtWKCJvbnVucGlwZSIpLERlPT09WWUmJnplJiYhMT09PXplLmhhc1VucGlwZWQmJih6ZS5oYXNVbnBpcGVkPSEwLFYoImNsZWFudXAiKSxXZS5yZW1vdmVMaXN0ZW5lcigiY2xv'@;
put 'c2UiLFVlKSxXZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixodCksV2UucmVtb3ZlTGlzdGVuZXIoImRyYWluIixBZSksV2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixYZSksV2UucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsUGUpLFllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGJlKSxZZS5yZW1v'@;
put 'dmVMaXN0ZW5lcigiZW5kIixNZSksWWUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHFlKSxUZT0hMCwhUWUuYXdhaXREcmFpbnx8V2UuX3dyaXRhYmxlU3RhdGUmJiFXZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fEFlKCkpfSk7dmFyIERlLEFlPShEZT1ZZSxmdW5jdGlvbigpe3ZhciB6ZT1E'@;
put 'ZS5fcmVhZGFibGVTdGF0ZTtWKCJwaXBlT25EcmFpbiIsemUuYXdhaXREcmFpbiksemUuYXdhaXREcmFpbiYmemUuYXdhaXREcmFpbi0tLDA9PT16ZS5hd2FpdERyYWluJiZJKERlLCJkYXRhIikmJih6ZS5mbG93aW5nPSEwLHhlKERlKSl9KTtXZS5vbigiZHJhaW4iLEFlKTt2YXIgVGU9ITE7'@;
put 'ZnVuY3Rpb24gcWUoRGUpe1YoIm9uZGF0YSIpO3ZhciB6ZT1XZS53cml0ZShEZSk7VigiZGVzdC53cml0ZSIsemUpLCExPT09emUmJigoMT09PVFlLnBpcGVzQ291bnQmJlFlLnBpcGVzPT09V2V8fFFlLnBpcGVzQ291bnQ+MSYmLTEhPT1qZShRZS5waXBlcyxXZSkpJiYhVGUmJihWKCJmYWxz'@;
put 'ZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLFFlLmF3YWl0RHJhaW4pLFFlLmF3YWl0RHJhaW4rKyksWWUucGF1c2UoKSl9ZnVuY3Rpb24gWGUoRGUpe1YoIm9uZXJyb3IiLERlKSxNZSgpLFdlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWGUpLDA9PT1JKFdlLCJlcnJvciIpJiZHKFdlLERlKX1m'@;
put 'dW5jdGlvbiBVZSgpe1dlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGh0KSxNZSgpfWZ1bmN0aW9uIGh0KCl7Vigib25maW5pc2giKSxXZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFVlKSxNZSgpfWZ1bmN0aW9uIE1lKCl7VigidW5waXBlIiksWWUudW5waXBlKFdlKX1yZXR1cm4gWWUub24o'@;
put 'ImRhdGEiLHFlKSxmdW5jdGlvbihEZSx6ZSxvdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIERlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gRGUucHJlcGVuZExpc3RlbmVyKHplLG90KTtEZS5fZXZlbnRzJiZEZS5fZXZlbnRzW3plXT9BcnJheS5pc0FycmF5KERlLl9ldmVudHNbemVdKT9EZS5f'@;
put 'ZXZlbnRzW3plXS51bnNoaWZ0KG90KTpEZS5fZXZlbnRzW3plXT1bb3QsRGUuX2V2ZW50c1t6ZV1dOkRlLm9uKHplLG90KX0oV2UsImVycm9yIixYZSksV2Uub25jZSgiY2xvc2UiLFVlKSxXZS5vbmNlKCJmaW5pc2giLGh0KSxXZS5lbWl0KCJwaXBlIixZZSksUWUuZmxvd2luZ3x8KFYoInBp'@;
put 'cGUgcmVzdW1lIiksWWUucmVzdW1lKCkpLFdlfSxILnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oV2Upe3ZhciBLZT10aGlzLl9yZWFkYWJsZVN0YXRlLFllPXtoYXNVbnBpcGVkOiExfTtpZigwPT09S2UucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09S2UucGlwZXNDb3VudClyZXR1'@;
put 'cm4gV2UmJldlIT09S2UucGlwZXN8fChXZXx8KFdlPUtlLnBpcGVzKSxLZS5waXBlcz1udWxsLEtlLnBpcGVzQ291bnQ9MCxLZS5mbG93aW5nPSExLFdlJiZXZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWWUpKSx0aGlzO2lmKCFXZSl7dmFyIFFlPUtlLnBpcGVzLGx0PUtlLnBpcGVzQ291bnQ7S2Uu'@;
put 'cGlwZXM9bnVsbCxLZS5waXBlc0NvdW50PTAsS2UuZmxvd2luZz0hMTtmb3IodmFyIFBlPTA7UGU8bHQ7UGUrKylRZVtQZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIGJlPWplKEtlLnBpcGVzLFdlKTtyZXR1cm4tMT09PWJlfHwoS2UucGlw'@;
put 'ZXMuc3BsaWNlKGJlLDEpLEtlLnBpcGVzQ291bnQtPTEsMT09PUtlLnBpcGVzQ291bnQmJihLZS5waXBlcz1LZS5waXBlc1swXSksV2UuZW1pdCgidW5waXBlIix0aGlzLFllKSksdGhpc30sSC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9SC5wcm90b3R5cGUub249ZnVuY3Rpb24oV2UsS2Upe3Zh'@;
put 'ciBZZT1rLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsV2UsS2UpLFFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuImRhdGEiPT09V2U/KFFlLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09UWUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKSk6'@;
put 'InJlYWRhYmxlIj09PVdlJiYoUWUuZW5kRW1pdHRlZHx8UWUucmVhZGFibGVMaXN0ZW5pbmd8fChRZS5yZWFkYWJsZUxpc3RlbmluZz1RZS5uZWVkUmVhZGFibGU9ITAsUWUuZmxvd2luZz0hMSxRZS5lbWl0dGVkUmVhZGFibGU9ITEsVigib24gcmVhZGFibGUiLFFlLmxlbmd0aCxRZS5yZWFk'@;
put 'aW5nKSxRZS5sZW5ndGg/dih0aGlzKTpRZS5yZWFkaW5nfHxLLm5leHRUaWNrKGRlLHRoaXMpKSksWWV9LEgucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKFdlLEtlKXt2YXIgWWU9ay5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLFdlLEtlKTtyZXR1cm4icmVh'@;
put 'ZGFibGUiPT09V2UmJksubmV4dFRpY2sobmUsdGhpcyksWWV9LEgucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihXZSl7dmFyIEtlPWsucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuInJlYWRhYmxlIiE9PVdlJiZ2'@;
put 'b2lkIDAhPT1XZXx8Sy5uZXh0VGljayhuZSx0aGlzKSxLZX0sSC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIFllLFdlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFdlLmZsb3dpbmd8fChWKCJyZXN1bWUiKSxXZS5mbG93aW5nPSFXZS5yZWFkYWJsZUxpc3RlbmluZywoWWU9'@;
put 'V2UpLnJlc3VtZVNjaGVkdWxlZHx8KFllLnJlc3VtZVNjaGVkdWxlZD0hMCxLLm5leHRUaWNrKGZlLHRoaXMsWWUpKSksV2UucGF1c2VkPSExLHRoaXN9LEgucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFYoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVT'@;
put 'dGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKFYoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sSC5wcm90b3R5cGUud3JhcD1m'@;
put 'dW5jdGlvbihXZSl7dmFyIEtlPXRoaXMsWWU9dGhpcy5fcmVhZGFibGVTdGF0ZSxRZT0hMTtmb3IodmFyIGx0IGluIFdlLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYoVigid3JhcHBlZCBlbmQiKSxZZS5kZWNvZGVyJiYhWWUuZW5kZWQpe3ZhciBiZT1ZZS5kZWNvZGVyLmVuZCgpO2JlJiZiZS5s'@;
put 'ZW5ndGgmJktlLnB1c2goYmUpfUtlLnB1c2gobnVsbCl9KSxXZS5vbigiZGF0YSIsZnVuY3Rpb24oYmUpe1YoIndyYXBwZWQgZGF0YSIpLFllLmRlY29kZXImJihiZT1ZZS5kZWNvZGVyLndyaXRlKGJlKSksWWUub2JqZWN0TW9kZSYmbnVsbD09YmV8fChZZS5vYmplY3RNb2RlfHxiZSYmYmUu'@;
put 'bGVuZ3RoKSYmKEtlLnB1c2goYmUpfHwoUWU9ITAsV2UucGF1c2UoKSkpfSksV2Updm9pZCAwPT09dGhpc1tsdF0mJiJmdW5jdGlvbiI9PXR5cGVvZiBXZVtsdF0mJih0aGlzW2x0XT1mdW5jdGlvbihiZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFdlW2JlXS5hcHBseShXZSxhcmd1bWVu'@;
put 'dHMpfX0obHQpKTtmb3IodmFyIFBlPTA7UGU8Yi5sZW5ndGg7UGUrKylXZS5vbihiW1BlXSx0aGlzLmVtaXQuYmluZCh0aGlzLGJbUGVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oYmUpe1YoIndyYXBwZWQgX3JlYWQiLGJlKSxRZSYmKFFlPSExLFdlLnJlc3VtZSgpKX0sdGhpc30s'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEgucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1YJiYoWD1SKDU4NTApKSxYKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRl'@;
put 'ck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5m'@;
put 'bG93aW5nfSxzZXQ6ZnVuY3Rpb24oV2Upe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9V2UpfX0pLEguX2Zyb21MaXN0PUxlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSC5mcm9tPWZ1bmN0aW9uKFdlLEtlKXtyZXR1cm4gdm9pZCAwPT09VSYmKFU9Uig1MTY3KSksVShILFdlLEtlKX0pfSw0NjA1OihNLE8sUik9PnsidXNl'@;
put 'IHN0cmljdCI7TS5leHBvcnRzPUI7dmFyIHo9Uig0MjgxKS5xLEs9ei5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxJPXouRVJSX01VTFRJUExFX0NBTExCQUNLLGs9ei5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLEU9ei5FUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAs'@;
put 'aj1SKDY3NTMpO2Z1bmN0aW9uIFYoVSxxKXt2YXIgZWU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ZWUudHJhbnNmb3JtaW5nPSExO3ZhciB0ZT1lZS53cml0ZWNiO2lmKG51bGw9PT10ZSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEkpO2VlLndyaXRlY2h1bms9bnVsbCxlZS53cml0ZWNi'@;
put 'PW51bGwsbnVsbCE9cSYmdGhpcy5wdXNoKHEpLHRlKFUpO3ZhciBvZT10aGlzLl9yZWFkYWJsZVN0YXRlO29lLnJlYWRpbmc9ITEsKG9lLm5lZWRSZWFkYWJsZXx8b2UubGVuZ3RoPG9lLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKG9lLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIEIoVSl7'@;
put 'aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBCKFUpO2ouY2FsbCh0aGlzLFUpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpWLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVs'@;
put 'bCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxVJiYoImZ1bmN0aW9uIj09dHlwZW9mIFUudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPVUudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgVS5mbHVzaCYmKHRoaXMuX2ZsdXNoPVUuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLFkpfWZ1bmN0aW9uIFkoKXt2YXIgVT10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/WCh0aGlzLG51bGwsbnVsbCk6'@;
put 'dGhpcy5fZmx1c2goZnVuY3Rpb24ocSxlZSl7WChVLHEsZWUpfSl9ZnVuY3Rpb24gWChVLHEsZWUpe2lmKHEpcmV0dXJuIFUuZW1pdCgiZXJyb3IiLHEpO2lmKG51bGwhPWVlJiZVLnB1c2goZWUpLFUuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBFO2lmKFUuX3RyYW5zZm9ybVN0'@;
put 'YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgaztyZXR1cm4gVS5wdXNoKG51bGwpfVIoNTcxNykoQixqKSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFUscSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsai5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMs'@;
put 'VSxxKX0sQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihVLHEsZWUpe2VlKG5ldyBLKCJfdHJhbnNmb3JtKCkiKSl9LEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLHEsZWUpe3ZhciB0ZT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZih0ZS53cml0ZWNiPWVlLHRlLndyaXRlY2h1'@;
put 'bms9VSx0ZS53cml0ZWVuY29kaW5nPXEsIXRlLnRyYW5zZm9ybWluZyl7dmFyIG9lPXRoaXMuX3JlYWRhYmxlU3RhdGU7KHRlLm5lZWRUcmFuc2Zvcm18fG9lLm5lZWRSZWFkYWJsZXx8b2UubGVuZ3RoPG9lLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKG9lLmhpZ2hXYXRlck1hcmspfX0s'@;
put 'Qi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oVSl7dmFyIHE9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PXEud3JpdGVjaHVua3x8cS50cmFuc2Zvcm1pbmc/cS5uZWVkVHJhbnNmb3JtPSEwOihxLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0ocS53cml0ZWNodW5rLHEud3Jp'@;
put 'dGVlbmNvZGluZyxxLmFmdGVyVHJhbnNmb3JtKSl9LEIucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKFUscSl7ai5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLFUsZnVuY3Rpb24oZWUpe3EoZWUpfSl9fSw0MjI5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDQxNTUp'@;
put 'O2Z1bmN0aW9uIEkodyl7dmFyIEo9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24obmUsZGUsZmUpe3ZhciB4ZT1uZS5lbnRyeTtmb3IobmUuZW50cnk9bnVsbDt4ZTspe3ZhciBMZT14ZS5jYWxsYmFjaztkZS5wZW5k'@;
put 'aW5nY2ItLSxMZSh2b2lkIDApLHhlPXhlLm5leHR9ZGUuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9bmV9KEosdyl9fU0uZXhwb3J0cz1ILEguV3JpdGFibGVTdGF0ZT1EO3ZhciBCLGs9e2RlcHJlY2F0ZTpSKDQ5MjcpfSxFPVIoMjUwMyksaj1SKDg3NjQpLkJ1ZmZlcixWPSh2b2lkIDAhPT1S'@;
put 'Lmc/Ui5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFk9UigxMTk1KSxYPVIoMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxVPVIoNDI4MSkucSxxPVUuRVJSX0lOVkFMSURfQVJHX1RZUEUsZWU9VS5FUlJf'@;
put 'TUVUSE9EX05PVF9JTVBMRU1FTlRFRCx0ZT1VLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxvZT1VLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsc2U9VS5FUlJfU1RSRUFNX0RFU1RST1lFRCxoZT1VLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsdWU9VS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxj'@;
put 'ZT1VLkVSUl9VTktOT1dOX0VOQ09ESU5HLEc9WS5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIEQodyxKLG5lKXt6PXp8fFIoNjc1MyksImJvb2xlYW4iIT10eXBlb2YgbmUmJihuZT1KIGluc3RhbmNlb2YgeiksdGhpcy5vYmplY3RNb2RlPSEhKHc9d3x8e30pLm9iamVj'@;
put 'dE1vZGUsbmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXcud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9WCh0aGlzLHcsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsbmUpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhp'@;
put 'cy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09dy5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz13LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAs'@;
put 'dGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oZmUpeyFmdW5jdGlvbih4ZSxMZSl7dmFyIEtlLEZlPXhlLl93cml0YWJsZVN0YXRlLE9lPUZlLnN5bmMsamU9RmUud3JpdGVjYjtp'@;
put 'ZigiZnVuY3Rpb24iIT10eXBlb2YgamUpdGhyb3cgbmV3IHRlO2lmKChLZT1GZSkud3JpdGluZz0hMSxLZS53cml0ZWNiPW51bGwsS2UubGVuZ3RoLT1LZS53cml0ZWxlbixLZS53cml0ZWxlbj0wLExlKSFmdW5jdGlvbihLZSxZZSxRZSxsdCxQZSl7LS1ZZS5wZW5kaW5nY2IsUWU/KEsubmV4'@;
put 'dFRpY2soUGUsbHQpLEsubmV4dFRpY2socCxLZSxZZSksS2UuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEcoS2UsbHQpKTooUGUobHQpLEtlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxHKEtlLGx0KSxwKEtlLFllKSl9KHhlLEZlLE9lLExlLGplKTtlbHNle3ZhciBX'@;
put 'ZT1TKEZlKXx8eGUuZGVzdHJveWVkO1dlfHxGZS5jb3JrZWR8fEZlLmJ1ZmZlclByb2Nlc3Npbmd8fCFGZS5idWZmZXJlZFJlcXVlc3R8fEMoeGUsRmUpLE9lP0submV4dFRpY2soZyx4ZSxGZSxXZSxqZSk6Zyh4ZSxGZSxXZSxqZSl9fShKLGZlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53'@;
put 'cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09dy5lbWl0Q2xvc2UsdGhpcy5hdXRv'@;
put 'RGVzdHJveT0hIXcuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBJKHRoaXMpfWZ1bmN0aW9uIEgodyl7dmFyIEo9dGhpcyBpbnN0YW5jZW9mKHo9enx8Uig2NzUzKSk7aWYoIUomJiFCLmNhbGwoSCx0aGlzKSlyZXR1'@;
put 'cm4gbmV3IEgodyk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgRCh3LHRoaXMsSiksdGhpcy53cml0YWJsZT0hMCx3JiYoImZ1bmN0aW9uIj09dHlwZW9mIHcud3JpdGUmJih0aGlzLl93cml0ZT13LndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2Ygdy53cml0ZXYmJih0aGlzLl93cml0ZXY9dy53'@;
put 'cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiB3LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXcuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIHcuZmluYWwmJih0aGlzLl9maW5hbD13LmZpbmFsKSksRS5jYWxsKHRoaXMpfWZ1bmN0aW9uIE4odyxKLG5lLGRlLGZlLHhlLExlKXtKLndyaXRl'@;
put 'bGVuPWRlLEoud3JpdGVjYj1MZSxKLndyaXRpbmc9ITAsSi5zeW5jPSEwLEouZGVzdHJveWVkP0oub253cml0ZShuZXcgc2UoIndyaXRlIikpOm5lP3cuX3dyaXRldihmZSxKLm9ud3JpdGUpOncuX3dyaXRlKGZlLHhlLEoub253cml0ZSksSi5zeW5jPSExfWZ1bmN0aW9uIGcodyxKLG5lLGRl'@;
put 'KXt2YXIgZmUseGU7bmV8fChmZT13LDA9PT0oeGU9SikubGVuZ3RoJiZ4ZS5uZWVkRHJhaW4mJih4ZS5uZWVkRHJhaW49ITEsZmUuZW1pdCgiZHJhaW4iKSkpLEoucGVuZGluZ2NiLS0sZGUoKSxwKHcsSil9ZnVuY3Rpb24gQyh3LEope0ouYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgbmU9Si5i'@;
put 'dWZmZXJlZFJlcXVlc3Q7aWYody5fd3JpdGV2JiZuZSYmbmUubmV4dCl7dmFyIGZlPW5ldyBBcnJheShKLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSx4ZT1KLmNvcmtlZFJlcXVlc3RzRnJlZTt4ZS5lbnRyeT1uZTtmb3IodmFyIExlPTAsRmU9ITA7bmU7KWZlW0xlXT1uZSxuZS5pc0J1Znx8KEZl'@;
put 'PSExKSxuZT1uZS5uZXh0LExlKz0xO2ZlLmFsbEJ1ZmZlcnM9RmUsTih3LEosITAsSi5sZW5ndGgsZmUsIiIseGUuZmluaXNoKSxKLnBlbmRpbmdjYisrLEoubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHhlLm5leHQ/KEouY29ya2VkUmVxdWVzdHNGcmVlPXhlLm5leHQseGUubmV4dD1udWxs'@;
put 'KTpKLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgSShKKSxKLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO25lOyl7dmFyIE9lPW5lLmNodW5rO2lmKE4odyxKLCExLEoub2JqZWN0TW9kZT8xOk9lLmxlbmd0aCxPZSxuZS5lbmNvZGluZyxuZS5jYWxsYmFjayksbmU9bmUubmV4dCxK'@;
put 'LmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sSi53cml0aW5nKWJyZWFrfW51bGw9PT1uZSYmKEoubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1KLmJ1ZmZlcmVkUmVxdWVzdD1uZSxKLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gUyh3KXtyZXR1cm4gdy5lbmRpbmcmJjA9PT13Lmxlbmd0'@;
put 'aCYmbnVsbD09PXcuYnVmZmVyZWRSZXF1ZXN0JiYhdy5maW5pc2hlZCYmIXcud3JpdGluZ31mdW5jdGlvbiB2KHcsSil7dy5fZmluYWwoZnVuY3Rpb24obmUpe0oucGVuZGluZ2NiLS0sbmUmJkcodyxuZSksSi5wcmVmaW5pc2hlZD0hMCx3LmVtaXQoInByZWZpbmlzaCIpLHAodyxKKX0pfWZ1'@;
put 'bmN0aW9uIHAodyxKKXt2YXIgZmUseGUsbmU9UyhKKTtpZihuZSYmKGZlPXcsKHhlPUopLnByZWZpbmlzaGVkfHx4ZS5maW5hbENhbGxlZHx8KCJmdW5jdGlvbiIhPXR5cGVvZiBmZS5fZmluYWx8fHhlLmRlc3Ryb3llZD8oeGUucHJlZmluaXNoZWQ9ITAsZmUuZW1pdCgicHJlZmluaXNoIikp'@;
put 'Oih4ZS5wZW5kaW5nY2IrKyx4ZS5maW5hbENhbGxlZD0hMCxLLm5leHRUaWNrKHYsZmUseGUpKSksMD09PUoucGVuZGluZ2NiJiYoSi5maW5pc2hlZD0hMCx3LmVtaXQoImZpbmlzaCIpLEouYXV0b0Rlc3Ryb3kpKSl7dmFyIGRlPXcuX3JlYWRhYmxlU3RhdGU7KCFkZXx8ZGUuYXV0b0Rlc3Ry'@;
put 'b3kmJmRlLmVuZEVtaXR0ZWQpJiZ3LmRlc3Ryb3koKX1yZXR1cm4gbmV9Uig1NzE3KShILEUpLEQucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgdz10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxKPVtdO3c7KUoucHVzaCh3KSx3PXcubmV4dDtyZXR1cm4gSn0sZnVuY3Rpb24o'@;
put 'KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEQucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6ay5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVm'@;
put 'ZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oQj1GdW5jdGlvbi5wcm90b3R5cGVb'@;
put 'U3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHcpe3JldHVybiEhQi5jYWxsKHRoaXMsdyl8fHRoaXM9PT1IJiZ3JiZ3Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgRH19KSk6Qj1mdW5jdGlvbih3'@;
put 'KXtyZXR1cm4gdyBpbnN0YW5jZW9mIHRoaXN9LEgucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtHKHRoaXMsbmV3IG9lKX0sSC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odyxKLG5lKXt2YXIgZGUsRmUsT2UsamUsZmU9dGhpcy5fd3JpdGFibGVTdGF0ZSx4ZT0hMSxMZT0hZmUub2JqZWN0'@;
put 'TW9kZSYmKGouaXNCdWZmZXIoZGU9dyl8fGRlIGluc3RhbmNlb2YgVik7cmV0dXJuIExlJiYhai5pc0J1ZmZlcih3KSYmKHc9ai5mcm9tKHcpKSwiZnVuY3Rpb24iPT10eXBlb2YgSiYmKG5lPUosSj1udWxsKSxMZT9KPSJidWZmZXIiOkp8fChKPWZlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIG5lJiYobmU9YiksZmUuZW5kaW5nPyhGZT10aGlzLE9lPW5lLGplPW5ldyB1ZSxHKEZlLGplKSxLLm5leHRUaWNrKE9lLGplKSk6KExlfHxmdW5jdGlvbihGZSxPZSxqZSxXZSl7dmFyIEtlO3JldHVybiBudWxsPT09amU/S2U9bmV3IGhlOiJzdHJpbmciPT10eXBlb2Yg'@;
put 'amV8fE9lLm9iamVjdE1vZGV8fChLZT1uZXcgcSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0samUpKSwhS2V8fChHKEZlLEtlKSxLLm5leHRUaWNrKFdlLEtlKSwhMSl9KHRoaXMsZmUsdyxuZSkpJiYoZmUucGVuZGluZ2NiKysseGU9ZnVuY3Rpb24oRmUsT2UsamUsV2UsS2UsWWUpe2lm'@;
put 'KCFqZSl7dmFyIFFlPShUZT1XZSwoQWU9T2UpLm9iamVjdE1vZGV8fCExPT09QWUuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiBUZXx8KFRlPWouZnJvbShUZSxLZSkpLFRlKTtXZSE9PVFlJiYoamU9ITAsS2U9ImJ1ZmZlciIsV2U9UWUpfXZhciBBZSxUZSxsdD1PZS5vYmplY3RN'@;
put 'b2RlPzE6V2UubGVuZ3RoO09lLmxlbmd0aCs9bHQ7dmFyIFBlPU9lLmxlbmd0aDxPZS5oaWdoV2F0ZXJNYXJrO2lmKFBlfHwoT2UubmVlZERyYWluPSEwKSxPZS53cml0aW5nfHxPZS5jb3JrZWQpe3ZhciBiZT1PZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O09lLmxhc3RCdWZmZXJlZFJlcXVlc3Q9'@;
put 'e2NodW5rOldlLGVuY29kaW5nOktlLGlzQnVmOmplLGNhbGxiYWNrOlllLG5leHQ6bnVsbH0sYmU/YmUubmV4dD1PZS5sYXN0QnVmZmVyZWRSZXF1ZXN0Ok9lLmJ1ZmZlcmVkUmVxdWVzdD1PZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LE9lLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgTihG'@;
put 'ZSxPZSwhMSxsdCxXZSxLZSxZZSk7cmV0dXJuIFBlfSh0aGlzLGZlLExlLHcsSixuZSkpLHhlfSxILnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSC5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fd3JpdGFibGVT'@;
put 'dGF0ZTt3LmNvcmtlZCYmKHcuY29ya2VkLS0sdy53cml0aW5nfHx3LmNvcmtlZHx8dy5idWZmZXJQcm9jZXNzaW5nfHwhdy5idWZmZXJlZFJlcXVlc3R8fEModGhpcyx3KSl9LEgucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih3KXtpZigic3RyaW5nIj09dHlwZW9mIHcm'@;
put 'Jih3PXcudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigodysiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBjZSh3KTty'@;
put 'ZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9dyx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5f'@;
put 'd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxILnBy'@;
put 'b3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odyxKLG5lKXtuZShuZXcgZWUoIl93cml0ZSgpIikpfSxILnByb3RvdHlwZS5fd3JpdGV2PW51bGwsSC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHcsSixuZSl7dmFyIHhlLExlLGRlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIHc/KG5lPXcsdz1udWxsLEo9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIEomJihuZT1KLEo9bnVsbCksbnVsbCE9dyYmdGhpcy53cml0ZSh3LEopLGRlLmNvcmtlZCYmKGRlLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLGRlLmVuZGluZ3x8KExlPW5lLCh4ZT1kZSkuZW5kaW5nPSEw'@;
put 'LHAodGhpcyx4ZSksTGUmJih4ZS5maW5pc2hlZD9LLm5leHRUaWNrKExlKTp0aGlzLm9uY2UoImZpbmlzaCIsTGUpKSx4ZS5lbmRlZD0hMCx0aGlzLndyaXRhYmxlPSExKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJs'@;
put 'ZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0'@;
put 'YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHcpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD13KX19KSxILnByb3RvdHlwZS5kZXN0cm95PVkuZGVzdHJveSxILnByb3RvdHlwZS5fdW5kZXN0cm95PVku'@;
put 'dW5kZXN0cm95LEgucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHcsSil7Sih3KX19LDU4NTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDE1NSk7ZnVuY3Rpb24gSShoZSx1ZSxjZSl7cmV0dXJuKHVlPSJzeW1ib2wiPT10eXBlb2YoYj1mdW5jdGlvbihELEgpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgRHx8bnVsbD09PUQpcmV0dXJuIEQ7dmFyIE49RFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PU4pe3ZhciBnPU4uY2FsbChELCJzdHJpbmciKTtpZigib2JqZWN0IiE9dHlwZW9mIGcpcmV0dXJuIGc7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p'@;
put 'dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKEQpfSh1ZSkpP2I6U3RyaW5nKGIpKWluIGhlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShoZSx1ZSx7dmFsdWU6Y2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpoZVt1'@;
put 'ZV09Y2UsaGU7dmFyIGJ9dmFyIGs9Uig4NjEwKSxFPVN5bWJvbCgibGFzdFJlc29sdmUiKSxqPVN5bWJvbCgibGFzdFJlamVjdCIpLFY9U3ltYm9sKCJlcnJvciIpLEI9U3ltYm9sKCJlbmRlZCIpLFk9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLFg9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksVT1T'@;
put 'eW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIHEoaGUsdWUpe3JldHVybnt2YWx1ZTpoZSxkb25lOnVlfX1mdW5jdGlvbiBlZShoZSl7dmFyIHVlPWhlW0VdO2lmKG51bGwhPT11ZSl7dmFyIGNlPWhlW1VdLnJlYWQoKTtudWxsIT09Y2UmJihoZVtZXT1udWxsLGhlW0VdPW51bGwsaGVbal09bnVs'@;
put 'bCx1ZShxKGNlLCExKSkpfX1mdW5jdGlvbiB0ZShoZSl7Sy5uZXh0VGljayhlZSxoZSl9dmFyIG9lPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLHNlPU9iamVjdC5zZXRQcm90b3R5cGVPZigoSSh6PXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbVV19LG5leHQ6ZnVuY3Rp'@;
put 'b24oKXt2YXIgaGU9dGhpcyx1ZT10aGlzW1ZdO2lmKG51bGwhPT11ZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QodWUpO2lmKHRoaXNbQl0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShxKHZvaWQgMCwhMCkpO2lmKHRoaXNbVV0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihE'@;
put 'LEgpe0submV4dFRpY2soZnVuY3Rpb24oKXtoZVtWXT9IKGhlW1ZdKTpEKHEodm9pZCAwLCEwKSl9KX0pO3ZhciBjZSxELEgsRz10aGlzW1ldO2lmKEcpY2U9bmV3IFByb21pc2UoKEQ9RyxIPXRoaXMsZnVuY3Rpb24oTixnKXtELnRoZW4oZnVuY3Rpb24oKXtIW0JdP04ocSh2b2lkIDAsITAp'@;
put 'KTpIW1hdKE4sZyl9LGcpfSkpO2Vsc2V7dmFyIGI9dGhpc1tVXS5yZWFkKCk7aWYobnVsbCE9PWIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShxKGIsITEpKTtjZT1uZXcgUHJvbWlzZSh0aGlzW1hdKX1yZXR1cm4gdGhpc1tZXT1jZSxjZX19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXN9KSxJKHosInJldHVybiIsZnVuY3Rpb24oKXt2YXIgaGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odWUsY2Upe2hlW1VdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihHKXtHP2NlKEcpOnVlKHEodm9pZCAwLCEwKSl9KX0pfSkseiksb2UpO00uZXhwb3J0'@;
put 'cz1mdW5jdGlvbihoZSl7dmFyIHVlLGNlPU9iamVjdC5jcmVhdGUoc2UsKEkodWU9e30sVSx7dmFsdWU6aGUsd3JpdGFibGU6ITB9KSxJKHVlLEUse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxJKHVlLGose3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxJKHVlLFYse3ZhbHVlOm51bGwsd3Jp'@;
put 'dGFibGU6ITB9KSxJKHVlLEIse3ZhbHVlOmhlLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxJKHVlLFgse3ZhbHVlOmZ1bmN0aW9uKEcsYil7dmFyIEQ9Y2VbVV0ucmVhZCgpO0Q/KGNlW1ldPW51bGwsY2VbRV09bnVsbCxjZVtqXT1udWxsLEcocShELCExKSkpOihj'@;
put 'ZVtFXT1HLGNlW2pdPWIpfSx3cml0YWJsZTohMH0pLHVlKSk7cmV0dXJuIGNlW1ldPW51bGwsayhoZSxmdW5jdGlvbihHKXtpZihHJiYiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiIT09Ry5jb2RlKXt2YXIgYj1jZVtqXTtyZXR1cm4gbnVsbCE9PWImJihjZVtZXT1udWxsLGNlW0VdPW51'@;
put 'bGwsY2Vbal09bnVsbCxiKEcpKSx2b2lkKGNlW1ZdPUcpfXZhciBEPWNlW0VdO251bGwhPT1EJiYoY2VbWV09bnVsbCxjZVtFXT1udWxsLGNlW2pdPW51bGwsRChxKHZvaWQgMCwhMCkpKSxjZVtCXT0hMH0pLGhlLm9uKCJyZWFkYWJsZSIsdGUuYmluZChudWxsLGNlKSksY2V9fSw3MzI3OihN'@;
put 'LE8sUik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24geihZLFgpe3ZhciBVPU9iamVjdC5rZXlzKFkpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBxPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoWSk7WCYmKHE9cS5maWx0ZXIoZnVuY3Rpb24oZWUpe3JldHVybiBP'@;
put 'YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFksZWUpLmVudW1lcmFibGV9KSksVS5wdXNoLmFwcGx5KFUscSl9cmV0dXJuIFV9ZnVuY3Rpb24gSyhZKXtmb3IodmFyIFg9MTtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKXt2YXIgVT1udWxsIT1hcmd1bWVudHNbWF0/YXJndW1lbnRzW1hd'@;
put 'Ont9O1glMj96KE9iamVjdChVKSwhMCkuZm9yRWFjaChmdW5jdGlvbihxKXtJKFkscSxVW3FdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoVSkpOnooT2JqZWN0KFUp'@;
put 'KS5mb3JFYWNoKGZ1bmN0aW9uKHEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLHEsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihVLHEpKX0pfXJldHVybiBZfWZ1bmN0aW9uIEkoWSxYLFUpe3JldHVybihYPUUoWCkpaW4gWT9PYmplY3QuZGVmaW5lUHJvcGVydHkoWSxYLHt2YWx1'@;
put 'ZTpVLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6WVtYXT1VLFl9ZnVuY3Rpb24gRShZKXt2YXIgWD1mdW5jdGlvbihVLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgVXx8bnVsbD09PVUpcmV0dXJuIFU7dmFyIGVlPVVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2'@;
put 'b2lkIDAhPT1lZSl7dmFyIHRlPWVlLmNhbGwoVSwic3RyaW5nIik7aWYoIm9iamVjdCIhPXR5cGVvZiB0ZSlyZXR1cm4gdGU7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4gU3RyaW5nKFUpfShZKTtyZXR1'@;
put 'cm4ic3ltYm9sIj09dHlwZW9mIFg/WDpTdHJpbmcoWCl9dmFyIGo9Uig4NzY0KS5CdWZmZXIsVj1SKDIzNjEpLmluc3BlY3QsQj1WJiZWLmN1c3RvbXx8Imluc3BlY3QiO00uZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFkoKXsoZnVuY3Rpb24oZWUsdGUpe2lmKCEoZWUgaW5zdGFuY2Vv'@;
put 'ZiB0ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFkpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIFgsVTtyZXR1cm4gWD1ZLChVPVt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlv'@;
put 'bihlZSl7dmFyIHRlPXtkYXRhOmVlLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD10ZTp0aGlzLmhlYWQ9dGUsdGhpcy50YWlsPXRlLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIHRlPXtkYXRhOmVlLG5leHQ6dGhp'@;
put 'cy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9dGUpLHRoaXMuaGVhZD10ZSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhp'@;
put 'cy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigw'@;
put 'PT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciB0ZT10aGlzLmhlYWQsb2U9IiIrdGUuZGF0YTt0ZT10ZS5uZXh0OylvZSs9ZWUrdGUuZGF0YTtyZXR1cm4gb2V9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGouYWxsb2Mo'@;
put 'MCk7Zm9yKHZhciBoZT1qLmFsbG9jVW5zYWZlKGVlPj4+MCksdWU9dGhpcy5oZWFkLGNlPTA7dWU7KWoucHJvdG90eXBlLmNvcHkuY2FsbCh1ZS5kYXRhLGhlLGNlKSxjZSs9dWUuZGF0YS5sZW5ndGgsdWU9dWUubmV4dDtyZXR1cm4gaGV9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlv'@;
put 'bihlZSx0ZSl7dmFyIG9lO3JldHVybiBlZTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KG9lPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsZWUpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKGVlKSk6b2U9ZWU9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOnRl'@;
put 'P3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxvZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgdGU9dGhpcy5oZWFkLG9lPTEsc2U9dGUu'@;
put 'ZGF0YTtmb3IoZWUtPXNlLmxlbmd0aDt0ZT10ZS5uZXh0Oyl7dmFyIGhlPXRlLmRhdGEsdWU9ZWU+aGUubGVuZ3RoP2hlLmxlbmd0aDplZTtpZihzZSs9dWU9PT1oZS5sZW5ndGg/aGU6aGUuc2xpY2UoMCxlZSksMD09KGVlLT11ZSkpe3VlPT09aGUubGVuZ3RoPygrK29lLHRoaXMuaGVhZD10'@;
put 'ZS5uZXh0P3RlLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9dGUsdGUuZGF0YT1oZS5zbGljZSh1ZSkpO2JyZWFrfSsrb2V9cmV0dXJuIHRoaXMubGVuZ3RoLT1vZSxzZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgdGU9ai5hbGxvY1Vuc2FmZShl'@;
put 'ZSksb2U9dGhpcy5oZWFkLHNlPTE7Zm9yKG9lLmRhdGEuY29weSh0ZSksZWUtPW9lLmRhdGEubGVuZ3RoO29lPW9lLm5leHQ7KXt2YXIgaGU9b2UuZGF0YSx1ZT1lZT5oZS5sZW5ndGg/aGUubGVuZ3RoOmVlO2lmKGhlLmNvcHkodGUsdGUubGVuZ3RoLWVlLDAsdWUpLDA9PShlZS09dWUpKXt1'@;
put 'ZT09PWhlLmxlbmd0aD8oKytzZSx0aGlzLmhlYWQ9b2UubmV4dD9vZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPW9lLG9lLmRhdGE9aGUuc2xpY2UodWUpKTticmVha30rK3NlfXJldHVybiB0aGlzLmxlbmd0aC09c2UsdGV9fSx7a2V5OkIsdmFsdWU6ZnVuY3Rpb24oZWUsdGUp'@;
put 'e3JldHVybiBWKHRoaXMsSyhLKHt9LHRlKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSYmZnVuY3Rpb24gayhZLFgpe2Zvcih2YXIgVT0wO1U8WC5sZW5ndGg7VSsrKXt2YXIgcT1YW1VdO3EuZW51bWVyYWJsZT1xLmVudW1lcmFibGV8fCExLHEuY29uZmlndXJhYmxlPSEw'@;
put 'LCJ2YWx1ZSJpbiBxJiYocS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksRShxLmtleSkscSl9fShYLnByb3RvdHlwZSxVKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxZfSgpfSwxMTk1OihNLE8sUik9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKEUsail7ayhFLGopLEkoRSl9ZnVuY3Rpb24gSShFKXtFLl93cml0YWJsZVN0YXRlJiYhRS5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fEUuX3JlYWRhYmxlU3RhdGUmJiFFLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8RS5lbWl0KCJjbG9z'@;
put 'ZSIpfWZ1bmN0aW9uIGsoRSxqKXtFLmVtaXQoImVycm9yIixqKX1NLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24oRSxqKXt2YXIgVj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhp'@;
put 'cy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KGo/aihFKTpFJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHoubmV4dFRpY2soayx0aGlzLEUpKTp6Lm5leHRUaWNrKGss'@;
put 'dGhpcyxFKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KEV8fG51bGwsZnVuY3Rpb24oWCl7IWom'@;
put 'Jlg/Vi5fd3JpdGFibGVTdGF0ZT9WLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD96Lm5leHRUaWNrKEksVik6KFYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHoubmV4dFRpY2soSyxWLFgpKTp6Lm5leHRUaWNrKEssVixYKTpqPyh6Lm5leHRUaWNrKEksViksaihYKSk6ei5u'@;
put 'ZXh0VGljayhJLFYpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9y'@;
put 'ZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmlu'@;
put 'YWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24oRSxqKXt2YXIgVj1FLl9yZWFkYWJsZVN0'@;
put 'YXRlLEI9RS5fd3JpdGFibGVTdGF0ZTtWJiZWLmF1dG9EZXN0cm95fHxCJiZCLmF1dG9EZXN0cm95P0UuZGVzdHJveShqKTpFLmVtaXQoImVycm9yIixqKX19fSw4NjEwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MjgxKS5xLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1'@;
put 'bmN0aW9uIEsoKXt9TS5leHBvcnRzPWZ1bmN0aW9uIEkoayxFLGope2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBFKXJldHVybiBJKGssbnVsbCxFKTt2YXIgaGUsdWU7RXx8KEU9e30pLGhlPWp8fEssdWU9ITEsaj1mdW5jdGlvbigpe2lmKCF1ZSl7dWU9ITA7Zm9yKHZhciBjZT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLEc9bmV3IEFycmF5KGNlKSxiPTA7YjxjZTtiKyspR1tiXT1hcmd1bWVudHNbYl07aGUuYXBwbHkodGhpcyxHKX19O3ZhciBWPUUucmVhZGFibGV8fCExIT09RS5yZWFkYWJsZSYmay5yZWFkYWJsZSxCPUUud3JpdGFibGV8fCExIT09RS53cml0YWJsZSYmay53cml0YWJsZSxZPWZ1'@;
put 'bmN0aW9uKCl7ay53cml0YWJsZXx8VSgpfSxYPWsuX3dyaXRhYmxlU3RhdGUmJmsuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsVT1mdW5jdGlvbigpe0I9ITEsWD0hMCxWfHxqLmNhbGwoayl9LHE9ay5fcmVhZGFibGVTdGF0ZSYmay5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLGVlPWZ1bmN0'@;
put 'aW9uKCl7Vj0hMSxxPSEwLEJ8fGouY2FsbChrKX0sdGU9ZnVuY3Rpb24oaGUpe2ouY2FsbChrLGhlKX0sb2U9ZnVuY3Rpb24oKXt2YXIgaGU7cmV0dXJuIFYmJiFxPyhrLl9yZWFkYWJsZVN0YXRlJiZrLl9yZWFkYWJsZVN0YXRlLmVuZGVkfHwoaGU9bmV3IHopLGouY2FsbChrLGhlKSk6QiYm'@;
put 'IVg/KGsuX3dyaXRhYmxlU3RhdGUmJmsuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fChoZT1uZXcgeiksai5jYWxsKGssaGUpKTp2b2lkIDB9LHNlPWZ1bmN0aW9uKCl7ay5yZXEub24oImZpbmlzaCIsVSl9O3JldHVybiBmdW5jdGlvbihoZSl7cmV0dXJuIGhlLnNldEhlYWRlciYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGhlLmFib3J0fShrKT8oay5vbigiY29tcGxldGUiLFUpLGsub24oImFib3J0IixvZSksay5yZXE/c2UoKTprLm9uKCJyZXF1ZXN0IixzZSkpOkImJiFrLl93cml0YWJsZVN0YXRlJiYoay5vbigiZW5kIixZKSxrLm9uKCJjbG9zZSIsWSkpLGsub24oImVuZCIsZWUpLGsub24o'@;
put 'ImZpbmlzaCIsVSksITEhPT1FLmVycm9yJiZrLm9uKCJlcnJvciIsdGUpLGsub24oImNsb3NlIixvZSksZnVuY3Rpb24oKXtrLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsVSksay5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLG9lKSxrLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixzZSksay5y'@;
put 'ZXEmJmsucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLGsucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksay5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFkpLGsucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksay5yZW1vdmVMaXN0ZW5lcigiZW5kIixlZSksay5yZW1vdmVMaXN0ZW5lcigi'@;
put 'ZXJyb3IiLHRlKSxrLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsb2UpfX19LDUxNjc6TT0+e00uZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2OihNLE8sUik9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIHosSz1SKDQyODEpLnEsST1LLkVSUl9NSVNTSU5HX0FSR1Msaz1LLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIEUoQil7aWYoQil0aHJvdyBCfWZ1bmN0aW9uIGooQil7QigpfWZ1bmN0aW9uIFYoQixZKXtyZXR1cm4gQi5waXBlKFkpfU0uZXhwb3J0cz1mdW5jdGlvbigp'@;
put 'e2Zvcih2YXIgQj1hcmd1bWVudHMubGVuZ3RoLFk9bmV3IEFycmF5KEIpLFg9MDtYPEI7WCsrKVlbWF09YXJndW1lbnRzW1hdO3ZhciBVLHRlLHE9KHRlPVkpLmxlbmd0aD8iZnVuY3Rpb24iIT10eXBlb2YgdGVbdGUubGVuZ3RoLTFdP0U6dGUucG9wKCk6RTtpZihBcnJheS5pc0FycmF5KFlb'@;
put 'MF0pJiYoWT1ZWzBdKSxZLmxlbmd0aDwyKXRocm93IG5ldyBJKCJzdHJlYW1zIik7dmFyIGVlPVkubWFwKGZ1bmN0aW9uKHRlLG9lKXt2YXIgc2U9b2U8WS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2UsRyl7dmFyIEgsTjtIPUcsTj0hMSxHPWZ1bmN0aW9uKCl7Tnx8KE49ITAs'@;
put 'SC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9O3ZhciBiPSExO2hlLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtiPSEwfSksdm9pZCAwPT09eiYmKHo9Uig4NjEwKSkseihoZSx7cmVhZGFibGU6dWUsd3JpdGFibGU6Y2V9LGZ1bmN0aW9uKEgpe2lmKEgpcmV0dXJuIEcoSCk7Yj0hMCxHKCl9KTt2'@;
put 'YXIgRD0hMTtyZXR1cm4gZnVuY3Rpb24oSCl7aWYoIWImJiFEKXJldHVybiBEPSEwLGZ1bmN0aW9uKE4pe3JldHVybiBOLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIE4uYWJvcnR9KGhlKT9oZS5hYm9ydCgpOiJmdW5jdGlvbiI9PXR5cGVvZiBoZS5kZXN0cm95P2hlLmRlc3Ryb3ko'@;
put 'KTp2b2lkIEcoSHx8bmV3IGsoInBpcGUiKSl9fSh0ZSxzZSxvZT4wLGZ1bmN0aW9uKGhlKXtVfHwoVT1oZSksaGUmJmVlLmZvckVhY2goaiksc2V8fChlZS5mb3JFYWNoKGopLHEoVSkpfSl9KTtyZXR1cm4gWS5yZWR1Y2UoVil9fSwyNDU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9'@;
put 'Uig0MjgxKS5xLkVSUl9JTlZBTElEX09QVF9WQUxVRTtNLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24oSyxJLGssRSl7dmFyIFYsaj1udWxsIT0oVj1JKS5oaWdoV2F0ZXJNYXJrP1YuaGlnaFdhdGVyTWFyazpFP1Zba106bnVsbDtpZihudWxsIT1qKXtpZighaXNGaW5pdGUo'@;
put 'ail8fE1hdGguZmxvb3IoaikhPT1qfHxqPDApdGhyb3cgbmV3IHooRT9rOiJoaWdoV2F0ZXJNYXJrIixqKTtyZXR1cm4gTWF0aC5mbG9vcihqKX1yZXR1cm4gSy5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LDI1MDM6KE0sTyxSKT0+e00uZXhwb3J0cz1SKDcxODcpLkV2ZW50RW1pdHRlcn0sODQ3'@;
put 'MzooTSxPLFIpPT57KE89TS5leHBvcnRzPVIoOTQ4MSkpLlN0cmVhbT1PLE8uUmVhZGFibGU9TyxPLldyaXRhYmxlPVIoNDIyOSksTy5EdXBsZXg9Uig2NzUzKSxPLlRyYW5zZm9ybT1SKDQ2MDUpLE8uUGFzc1Rocm91Z2g9UigyNzI1KSxPLmZpbmlzaGVkPVIoODYxMCksTy5waXBlbGluZT1S'@;
put 'KDk5NDYpfSw3NDE4Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8sUil7aWYoUj1SLnNwbGl0KCI6IilbMF0sIShPPStPKSlyZXR1cm4hMTtzd2l0Y2goUil7Y2FzZSJodHRwIjpjYXNlIndzIjpyZXR1cm4gODAhPT1PO2Nhc2UiaHR0cHMiOmNhc2Uid3NzIjpyZXR1cm4g'@;
put 'NDQzIT09TztjYXNlImZ0cCI6cmV0dXJuIDIxIT09TztjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09TztjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09T319LDk4NDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KTtjb25zdCBLPVIoOTI4MiksST1SKDI1MjApLGs9Uig3MjE3KTtsZXQgRTt0'@;
put 'cnl7RT1SKDI4ODQpfWNhdGNoe31jb25zdCBqPXtub3NvcnQ6ITAsc2lsZW50OiEwfTtsZXQgVj0wO2NvbnN0IEI9IndpbjMyIj09PXoucGxhdGZvcm0sWT1jZT0+e2lmKFsidW5saW5rIiwiY2htb2QiLCJzdGF0IiwibHN0YXQiLCJybWRpciIsInJlYWRkaXIiXS5mb3JFYWNoKEc9PntjZVtH'@;
put 'XT1jZVtHXXx8a1tHXSxjZVtHKz0iU3luYyJdPWNlW0ddfHxrW0ddfSksY2UubWF4QnVzeVRyaWVzPWNlLm1heEJ1c3lUcmllc3x8MyxjZS5lbWZpbGVXYWl0PWNlLmVtZmlsZVdhaXR8fDFlMywhMT09PWNlLmdsb2ImJihjZS5kaXNhYmxlR2xvYj0hMCksITAhPT1jZS5kaXNhYmxlR2xvYiYm'@;
put 'dm9pZCAwPT09RSl0aHJvdyBFcnJvcigiZ2xvYiBkZXBlbmRlbmN5IG5vdCBmb3VuZCwgc2V0IGBvcHRpb25zLmRpc2FibGVHbG9iID0gdHJ1ZWAgaWYgaW50ZW50aW9uYWwiKTtjZS5kaXNhYmxlR2xvYj1jZS5kaXNhYmxlR2xvYnx8ITEsY2UuZ2xvYj1jZS5nbG9ifHxqfSxYPShjZSxHLGIp'@;
put 'PT57ImZ1bmN0aW9uIj09dHlwZW9mIEcmJihiPUcsRz17fSksSyhjZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxLLmVxdWFsKHR5cGVvZiBjZSwic3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLEsuZXF1YWwodHlwZW9mIGIsImZ1bmN0aW9uIiwicmltcmFmOiBj'@;
put 'YWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCIpLEsoRywicmltcmFmOiBpbnZhbGlkIG9wdGlvbnMgYXJndW1lbnQgcHJvdmlkZWQiKSxLLmVxdWFsKHR5cGVvZiBHLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpLFkoRyk7bGV0IEQ9MCxIPW51bGwsTj0wO2Nv'@;
put 'bnN0IGc9KEMsUyk9PkM/YihDKTooTj1TLmxlbmd0aCwwPT09Tj9iKCk6dm9pZCBTLmZvckVhY2godj0+e2NvbnN0IHA9dz0+e2lmKHcpe2lmKCgiRUJVU1kiPT09dy5jb2RlfHwiRU5PVEVNUFRZIj09PXcuY29kZXx8IkVQRVJNIj09PXcuY29kZSkmJkQ8Ry5tYXhCdXN5VHJpZXMpcmV0dXJu'@;
put 'IEQrKyxzZXRUaW1lb3V0KCgpPT5VKHYsRyxwKSwxMDAqRCk7aWYoIkVNRklMRSI9PT13LmNvZGUmJlY8Ry5lbWZpbGVXYWl0KXJldHVybiBzZXRUaW1lb3V0KCgpPT5VKHYsRyxwKSxWKyspOyJFTk9FTlQiPT09dy5jb2RlJiYodz1udWxsKX1WPTAsSD1IfHx3LDA9PS0tTiYmYihIKX07VSh2'@;
put 'LEcscCl9KSk7aWYoRy5kaXNhYmxlR2xvYnx8IUUuaGFzTWFnaWMoY2UpKXJldHVybiBnKG51bGwsW2NlXSk7Ry5sc3RhdChjZSwoQyxTKT0+e2lmKCFDKXJldHVybiBnKG51bGwsW2NlXSk7RShjZSxHLmdsb2IsZyl9KX0sVT0oY2UsRyxiKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgYiksRy5sc3RhdChjZSwoRCxIKT0+RCYmIkVOT0VOVCI9PT1ELmNvZGU/YihudWxsKTooRCYmIkVQRVJNIj09PUQuY29kZSYmQiYmcShjZSxHLEQsYiksSCYmSC5pc0RpcmVjdG9yeSgpP3RlKGNlLEcsRCxiKTp2b2lkIEcudW5saW5rKGNlLE49PntpZihOKXtpZigiRU5PRU5UIj09'@;
put 'PU4uY29kZSlyZXR1cm4gYihudWxsKTtpZigiRVBFUk0iPT09Ti5jb2RlKXJldHVybiBCP3EoY2UsRyxOLGIpOnRlKGNlLEcsTixiKTtpZigiRUlTRElSIj09PU4uY29kZSlyZXR1cm4gdGUoY2UsRyxOLGIpfXJldHVybiBiKE4pfSkpKX0scT0oY2UsRyxiLEQpPT57SyhjZSksSyhHKSxLKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBEKSxHLmNobW9kKGNlLDQzOCxIPT57SD9EKCJFTk9FTlQiPT09SC5jb2RlP251bGw6Yik6Ry5zdGF0KGNlLChOLGcpPT57Tj9EKCJFTk9FTlQiPT09Ti5jb2RlP251bGw6Yik6Zy5pc0RpcmVjdG9yeSgpP3RlKGNlLEcsYixEKTpHLnVubGluayhjZSxEKX0pfSl9'@;
put 'LGVlPShjZSxHLGIpPT57SyhjZSksSyhHKTt0cnl7Ry5jaG1vZFN5bmMoY2UsNDM4KX1jYXRjaChIKXtpZigiRU5PRU5UIj09PUguY29kZSlyZXR1cm47dGhyb3cgYn1sZXQgRDt0cnl7RD1HLnN0YXRTeW5jKGNlKX1jYXRjaChIKXtpZigiRU5PRU5UIj09PUguY29kZSlyZXR1cm47dGhyb3cg'@;
put 'Yn1ELmlzRGlyZWN0b3J5KCk/aGUoY2UsRyxiKTpHLnVubGlua1N5bmMoY2UpfSx0ZT0oY2UsRyxiLEQpPT57SyhjZSksSyhHKSxLKCJmdW5jdGlvbiI9PXR5cGVvZiBEKSxHLnJtZGlyKGNlLEg9PnshSHx8IkVOT1RFTVBUWSIhPT1ILmNvZGUmJiJFRVhJU1QiIT09SC5jb2RlJiYiRVBFUk0i'@;
put 'IT09SC5jb2RlP0QoSCYmIkVOT1RESVIiPT09SC5jb2RlP2I6SCk6b2UoY2UsRyxEKX0pfSxvZT0oY2UsRyxiKT0+e0soY2UpLEsoRyksSygiZnVuY3Rpb24iPT10eXBlb2YgYiksRy5yZWFkZGlyKGNlLChELEgpPT57aWYoRClyZXR1cm4gYihEKTtsZXQgTixnPUgubGVuZ3RoO2lmKDA9PT1n'@;
put 'KXJldHVybiBHLnJtZGlyKGNlLGIpO0guZm9yRWFjaChDPT57WChJLmpvaW4oY2UsQyksRyxTPT57aWYoIU4pcmV0dXJuIFM/YihOPVMpOnZvaWQoMD09LS1nJiZHLnJtZGlyKGNlLGIpKX0pfSl9KX0sc2U9KGNlLEcpPT57bGV0IGI7aWYoWShHPUd8fHt9KSxLKGNlLCJyaW1yYWY6IG1pc3Np'@;
put 'bmcgcGF0aCIpLEsuZXF1YWwodHlwZW9mIGNlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksSyhHLCJyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucyIpLEsuZXF1YWwodHlwZW9mIEcsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0Iiks'@;
put 'Ry5kaXNhYmxlR2xvYnx8IUUuaGFzTWFnaWMoY2UpKWI9W2NlXTtlbHNlIHRyeXtHLmxzdGF0U3luYyhjZSksYj1bY2VdfWNhdGNoe2I9RS5zeW5jKGNlLEcuZ2xvYil9aWYoYi5sZW5ndGgpZm9yKGxldCBEPTA7RDxiLmxlbmd0aDtEKyspe2NvbnN0IEg9YltEXTtsZXQgTjt0cnl7Tj1HLmxz'@;
put 'dGF0U3luYyhIKX1jYXRjaChnKXtpZigiRU5PRU5UIj09PWcuY29kZSlyZXR1cm47IkVQRVJNIj09PWcuY29kZSYmQiYmZWUoSCxHLGcpfXRyeXtOJiZOLmlzRGlyZWN0b3J5KCk/aGUoSCxHLG51bGwpOkcudW5saW5rU3luYyhIKX1jYXRjaChnKXtpZigiRU5PRU5UIj09PWcuY29kZSlyZXR1'@;
put 'cm47aWYoIkVQRVJNIj09PWcuY29kZSlyZXR1cm4gQj9lZShILEcsZyk6aGUoSCxHLGcpO2lmKCJFSVNESVIiIT09Zy5jb2RlKXRocm93IGc7aGUoSCxHLGcpfX19LGhlPShjZSxHLGIpPT57SyhjZSksSyhHKTt0cnl7Ry5ybWRpclN5bmMoY2UpfWNhdGNoKEQpe2lmKCJFTk9FTlQiPT09RC5j'@;
put 'b2RlKXJldHVybjtpZigiRU5PVERJUiI9PT1ELmNvZGUpdGhyb3cgYjsiRU5PVEVNUFRZIiE9PUQuY29kZSYmIkVFWElTVCIhPT1ELmNvZGUmJiJFUEVSTSIhPT1ELmNvZGV8fHVlKGNlLEcpfX0sdWU9KGNlLEcpPT57SyhjZSksSyhHKSxHLnJlYWRkaXJTeW5jKGNlKS5mb3JFYWNoKEg9PnNl'@;
put 'KEkuam9pbihjZSxIKSxHKSk7Y29uc3QgYj1CPzEwMDoxO2xldCBEPTA7Zm9yKDs7KXtsZXQgSD0hMDt0cnl7Y29uc3QgTj1HLnJtZGlyU3luYyhjZSxHKTtyZXR1cm4gSD0hMSxOfWZpbmFsbHl7aWYoKytEPGImJkgpY29udGludWV9fX07TS5leHBvcnRzPVgsWC5zeW5jPXNlfSw5Nzg1OihN'@;
put 'LE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDU3MTcpLEk9UigzMzQ5KSxrPW5ldyBBcnJheSgxNiksRT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQs'@;
put 'NCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxqPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwx'@;
put 'MCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLFY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMs'@;
put 'MTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQs'@;
put 'MTEsOCw1LDZdLEI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEy'@;
put 'LDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLFk9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sWD1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBVKCl7SS5j'@;
put 'YWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBxKHVlLGNlKXtyZXR1cm4gdWU8PGNlfHVlPj4+MzItY2V9ZnVuY3Rpb24gZWUodWUs'@;
put 'Y2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZV5HXmIpK0grTnwwLGcpK0R8MH1mdW5jdGlvbiB0ZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlJkd8fmNlJmIpK0grTnwwLGcpK0R8MH1mdW5jdGlvbiBvZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKChj'@;
put 'ZXx+RyleYikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIHNlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2UmYnxHJn5iKStIK058MCxnKStEfDB9ZnVuY3Rpb24gaGUodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZV4oR3x+YikpK0grTnwwLGcpK0R8MH1LKFUsSSks'@;
put 'VS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdWU9ayxjZT0wO2NlPDE2OysrY2UpdWVbY2VdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqY2UpO2Zvcih2YXIgRz0wfHRoaXMuX2EsYj0wfHRoaXMuX2IsRD0wfHRoaXMuX2MsSD0wfHRoaXMuX2QsTj0wfHRoaXMuX2Us'@;
put 'Zz0wfHRoaXMuX2EsQz0wfHRoaXMuX2IsUz0wfHRoaXMuX2Msdj0wfHRoaXMuX2QscD0wfHRoaXMuX2Usdz0wO3c8ODA7dys9MSl7dmFyIEosbmU7dzwxNj8oSj1lZShHLGIsRCxILE4sdWVbRVt3XV0sWVswXSxWW3ddKSxuZT1oZShnLEMsUyx2LHAsdWVbalt3XV0sWFswXSxCW3ddKSk6dzwz'@;
put 'Mj8oSj10ZShHLGIsRCxILE4sdWVbRVt3XV0sWVsxXSxWW3ddKSxuZT1zZShnLEMsUyx2LHAsdWVbalt3XV0sWFsxXSxCW3ddKSk6dzw0OD8oSj1vZShHLGIsRCxILE4sdWVbRVt3XV0sWVsyXSxWW3ddKSxuZT1vZShnLEMsUyx2LHAsdWVbalt3XV0sWFsyXSxCW3ddKSk6dzw2ND8oSj1zZShH'@;
put 'LGIsRCxILE4sdWVbRVt3XV0sWVszXSxWW3ddKSxuZT10ZShnLEMsUyx2LHAsdWVbalt3XV0sWFszXSxCW3ddKSk6KEo9aGUoRyxiLEQsSCxOLHVlW0Vbd11dLFlbNF0sVlt3XSksbmU9ZWUoZyxDLFMsdixwLHVlW2pbd11dLFhbNF0sQlt3XSkpLEc9TixOPUgsSD1xKEQsMTApLEQ9YixiPUos'@;
put 'Zz1wLHA9dix2PXEoUywxMCksUz1DLEM9bmV9dmFyIGRlPXRoaXMuX2IrRCt2fDA7dGhpcy5fYj10aGlzLl9jK0grcHwwLHRoaXMuX2M9dGhpcy5fZCtOK2d8MCx0aGlzLl9kPXRoaXMuX2UrRytDfDAsdGhpcy5fZT10aGlzLl9hK2IrU3wwLHRoaXMuX2E9ZGV9LFUucHJvdG90eXBlLl9kaWdl'@;
put 'c3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZp'@;
put 'bGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgdWU9ei5hbGxvYz96LmFsbG9jKDIwKTpuZXcg'@;
put 'eigyMCk7cmV0dXJuIHVlLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLHVlLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLHVlLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLHVlLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSx1ZS53cml0ZUludDMyTEUodGhpcy5fZSwxNiksdWV9LE0uZXhwb3J0cz1V'@;
put 'fSw5NTA5OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLEs9ei5CdWZmZXI7ZnVuY3Rpb24gSShFLGope2Zvcih2YXIgViBpbiBFKWpbVl09RVtWXX1mdW5jdGlvbiBrKEUsaixWKXtyZXR1cm4gSyhFLGosVil9Sy5mcm9tJiZLLmFsbG9jJiZLLmFsbG9jVW5zYWZlJiZLLmFsbG9jVW5zYWZlU2xv'@;
put 'dz9NLmV4cG9ydHM9ejooSSh6LE8pLE8uQnVmZmVyPWspLGsucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSy5wcm90b3R5cGUpLEkoSyxrKSxrLmZyb209ZnVuY3Rpb24oRSxqLFYpe2lmKCJudW1iZXIiPT10eXBlb2YgRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBi'@;
put 'ZSBhIG51bWJlciIpO3JldHVybiBLKEUsaixWKX0say5hbGxvYz1mdW5jdGlvbihFLGosVil7aWYoIm51bWJlciIhPXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgQj1LKEUpO3JldHVybiB2b2lkIDAhPT1qPyJzdHJpbmciPT10'@;
put 'eXBlb2YgVj9CLmZpbGwoaixWKTpCLmZpbGwoaik6Qi5maWxsKDApLEJ9LGsuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oRSl7aWYoIm51bWJlciIhPXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSyhFKX0say5hbGxvY1Vuc2Fm'@;
put 'ZVNsb3c9ZnVuY3Rpb24oRSl7aWYoIm51bWJlciIhPXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gei5TbG93QnVmZmVyKEUpfX0sMjM5OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KSxJPVIoODc2'@;
put 'NCksaz1JLkJ1ZmZlcixFPXt9O2Zvcih6IGluIEkpSS5oYXNPd25Qcm9wZXJ0eSh6KSYmIlNsb3dCdWZmZXIiIT09eiYmIkJ1ZmZlciIhPT16JiYoRVt6XT1JW3pdKTt2YXIgaj1FLkJ1ZmZlcj17fTtmb3IoeiBpbiBrKWsuaGFzT3duUHJvcGVydHkoeikmJiJhbGxvY1Vuc2FmZSIhPT16JiYi'@;
put 'YWxsb2NVbnNhZmVTbG93IiE9PXomJihqW3pdPWtbel0pO2lmKEUuQnVmZmVyLnByb3RvdHlwZT1rLnByb3RvdHlwZSxqLmZyb20mJmouZnJvbSE9PVVpbnQ4QXJyYXkuZnJvbXx8KGouZnJvbT1mdW5jdGlvbihWLEIsWSl7aWYoIm51bWJlciI9PXR5cGVvZiBWKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFYpO2lmKFYmJnZvaWQgMD09PVYubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0'@;
put 'cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFYpO3JldHVybiBrKFYsQixZKX0pLGouYWxsb2N8fChqLmFsbG9jPWZ1bmN0aW9uKFYsQixZKXtpZigibnVtYmVyIiE9dHlwZW9mIFYpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcignVGhlICJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFYpO2lmKFY8MHx8Vj49MjE0NzQ4MzY0OCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9u'@;
put 'ICJzaXplIicpO3ZhciBYPWsoVik7cmV0dXJuIEImJjAhPT1CLmxlbmd0aD8ic3RyaW5nIj09dHlwZW9mIFk/WC5maWxsKEIsWSk6WC5maWxsKEIpOlguZmlsbCgwKSxYfSksIUUua1N0cmluZ01heExlbmd0aCl0cnl7RS5rU3RyaW5nTWF4TGVuZ3RoPUsuYmluZGluZygiYnVmZmVyIikua1N0'@;
put 'cmluZ01heExlbmd0aH1jYXRjaHt9RS5jb25zdGFudHN8fChFLmNvbnN0YW50cz17TUFYX0xFTkdUSDpFLmtNYXhMZW5ndGh9LEUua1N0cmluZ01heExlbmd0aCYmKEUuY29uc3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIPUUua1N0cmluZ01heExlbmd0aCkpLE0uZXhwb3J0cz1FfSw0MTg5OihN'@;
put 'LE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBLKEksayl7dGhpcy5fYmxvY2s9ei5hbGxvYyhJKSx0aGlzLl9maW5hbFNpemU9ayx0aGlzLl9ibG9ja1NpemU9SSx0aGlzLl9sZW49MH1LLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSSxrKXsic3RyaW5nIj09dHlwZW9m'@;
put 'IEkmJihJPXouZnJvbShJLGs9a3x8InV0ZjgiKSk7Zm9yKHZhciBFPXRoaXMuX2Jsb2NrLGo9dGhpcy5fYmxvY2tTaXplLFY9SS5sZW5ndGgsQj10aGlzLl9sZW4sWT0wO1k8Vjspe2Zvcih2YXIgWD1CJWosVT1NYXRoLm1pbihWLVksai1YKSxxPTA7cTxVO3ErKylFW1grcV09SVtZK3FdO1kr'@;
put 'PVUsKEIrPVUpJWo9PTAmJnRoaXMuX3VwZGF0ZShFKX1yZXR1cm4gdGhpcy5fbGVuKz1WLHRoaXN9LEsucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihJKXt2YXIgaz10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW2tdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsaysxKSxr'@;
put 'Pj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciBFPTgqdGhpcy5fbGVuO2lmKEU8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShFLHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBqPSg0Mjk0'@;
put 'OTY3Mjk1JkUpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKChFLWopLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoaix0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgQj10aGlzLl9oYXNo'@;
put 'KCk7cmV0dXJuIEk/Qi50b1N0cmluZyhJKTpCfSxLLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sTS5leHBvcnRzPUt9LDkwNzI6KE0sTyxSKT0+e3ZhciB6PU0uZXhwb3J0cz1m'@;
put 'dW5jdGlvbihLKXtLPUsudG9Mb3dlckNhc2UoKTt2YXIgST16W0tdO2lmKCFJKXRocm93IG5ldyBFcnJvcihLKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBJfTt6LnNoYT1SKDQ0NDgpLHouc2hhMT1SKDgzMzYpLHouc2hhMjI0PVIo'@;
put 'ODQzMiksei5zaGEyNTY9Uig3NDk5KSx6LnNoYTM4ND1SKDE2ODYpLHouc2hhNTEyPVIoNzgxNil9LDQ0NDg6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDQxODkpLEk9Uig5NTA5KS5CdWZmZXIsaz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLEU9'@;
put 'bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEsuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBWKFkpe3JldHVybiBZPDwzMHxZPj4+Mn1mdW5jdGlvbiBCKFksWCxVLHEpe3JldHVybiAwPT09WT9YJlV8flgmcToyPT09WT9YJlV8WCZxfFUmcTpYXlVe'@;
put 'cX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sai5wcm90b3R5cGUuX3VwZGF0ZT1m'@;
put 'dW5jdGlvbihZKXtmb3IodmFyIFgsVT10aGlzLl93LHE9MHx0aGlzLl9hLGVlPTB8dGhpcy5fYix0ZT0wfHRoaXMuX2Msb2U9MHx0aGlzLl9kLHNlPTB8dGhpcy5fZSxoZT0wO2hlPDE2OysraGUpVVtoZV09WS5yZWFkSW50MzJCRSg0KmhlKTtmb3IoO2hlPDgwOysraGUpVVtoZV09VVtoZS0z'@;
put 'XV5VW2hlLThdXlVbaGUtMTRdXlVbaGUtMTZdO2Zvcih2YXIgdWU9MDt1ZTw4MDsrK3VlKXt2YXIgY2U9fn4odWUvMjApLEc9MHwoKFg9cSk8PDV8WD4+PjI3KStCKGNlLGVlLHRlLG9lKStzZStVW3VlXStrW2NlXTtzZT1vZSxvZT10ZSx0ZT1WKGVlKSxlZT1xLHE9R310aGlzLl9hPXErdGhp'@;
put 'cy5fYXwwLHRoaXMuX2I9ZWUrdGhpcy5fYnwwLHRoaXMuX2M9dGUrdGhpcy5fY3wwLHRoaXMuX2Q9b2UrdGhpcy5fZHwwLHRoaXMuX2U9c2UrdGhpcy5fZXwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBZPUkuYWxsb2NVbnNhZmUoMjApO3JldHVybiBZLndyaXRlSW50MzJC'@;
put 'RSgwfHRoaXMuX2EsMCksWS53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksWX0sTS5leHBvcnRzPWp9LDgzMzY6KE0sTyxSKT0+e3ZhciB6'@;
put 'PVIoNTcxNyksSz1SKDQxODkpLEk9Uig5NTA5KS5CdWZmZXIsaz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLEU9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEsuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBW'@;
put 'KFgpe3JldHVybiBYPDw1fFg+Pj4yN31mdW5jdGlvbiBCKFgpe3JldHVybiBYPDwzMHxYPj4+Mn1mdW5jdGlvbiBZKFgsVSxxLGVlKXtyZXR1cm4gMD09PVg/VSZxfH5VJmVlOjI9PT1YP1UmcXxVJmVlfHEmZWU6VV5xXmVlfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFgpe2Zvcih2YXIgVSxxPXRoaXMuX3csZWU9MHx0aGlz'@;
put 'Ll9hLHRlPTB8dGhpcy5fYixvZT0wfHRoaXMuX2Msc2U9MHx0aGlzLl9kLGhlPTB8dGhpcy5fZSx1ZT0wO3VlPDE2OysrdWUpcVt1ZV09WC5yZWFkSW50MzJCRSg0KnVlKTtmb3IoO3VlPDgwOysrdWUpcVt1ZV09KFU9cVt1ZS0zXV5xW3VlLThdXnFbdWUtMTRdXnFbdWUtMTZdKTw8MXxVPj4+'@;
put 'MzE7Zm9yKHZhciBjZT0wO2NlPDgwOysrY2Upe3ZhciBHPX5+KGNlLzIwKSxiPVYoZWUpK1koRyx0ZSxvZSxzZSkraGUrcVtjZV0ra1tHXXwwO2hlPXNlLHNlPW9lLG9lPUIodGUpLHRlPWVlLGVlPWJ9dGhpcy5fYT1lZSt0aGlzLl9hfDAsdGhpcy5fYj10ZSt0aGlzLl9ifDAsdGhpcy5fYz1v'@;
put 'ZSt0aGlzLl9jfDAsdGhpcy5fZD1zZSt0aGlzLl9kfDAsdGhpcy5fZT1oZSt0aGlzLl9lfDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFg9SS5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxYLndyaXRlSW50MzJCRSgwfHRoaXMu'@;
put 'X2IsNCksWC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksWC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxYfSxNLmV4cG9ydHM9an0sODQzMjooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNzQ5OSksST1SKDQxODkpLGs9Uig5NTA5'@;
put 'KS5CdWZmZXIsRT1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSS5jYWxsKHRoaXMsNjQsNTYpfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9j'@;
put 'PTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFY9ay5hbGxvY1Vuc2FmZSgyOCk7'@;
put 'cmV0dXJuIFYud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksVi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxWLndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLFYud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLFYud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLFYud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjAp'@;
put 'LFYud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLFZ9LE0uZXhwb3J0cz1qfSw3NDk5OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5'@;
put 'OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEy'@;
put 'NDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4'@;
put 'MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4Nzcs'@;
put 'OTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sRT1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIGooKXt0aGlz'@;
put 'LmluaXQoKSx0aGlzLl93PUUsSy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFYocSxlZSx0ZSl7cmV0dXJuIHRlXnEmKGVlXnRlKX1mdW5jdGlvbiBCKHEsZWUsdGUpe3JldHVybiBxJmVlfHRlJihxfGVlKX1mdW5jdGlvbiBZKHEpe3JldHVybihxPj4+MnxxPDwzMCleKHE+Pj4xM3xxPDwx'@;
put 'OSleKHE+Pj4yMnxxPDwxMCl9ZnVuY3Rpb24gWChxKXtyZXR1cm4ocT4+PjZ8cTw8MjYpXihxPj4+MTF8cTw8MjEpXihxPj4+MjV8cTw8Nyl9ZnVuY3Rpb24gVShxKXtyZXR1cm4ocT4+Pjd8cTw8MjUpXihxPj4+MTh8cTw8MTQpXnE+Pj4zfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0'@;
put 'aGlzfSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWUsdGU9dGhpcy5fdyxvZT0wfHRoaXMuX2Esc2U9MHx0aGlzLl9iLGhlPTB8dGhpcy5fYyx1ZT0wfHRoaXMuX2QsY2U9MHx0aGlzLl9lLEc9MHx0aGlzLl9mLGI9MHx0aGlzLl9nLEQ9MHx0aGlzLl9oLEg9MDtI'@;
put 'PDE2OysrSCl0ZVtIXT1xLnJlYWRJbnQzMkJFKDQqSCk7Zm9yKDtIPDY0OysrSCl0ZVtIXT0wfCgoKGVlPXRlW0gtMl0pPj4+MTd8ZWU8PDE1KV4oZWU+Pj4xOXxlZTw8MTMpXmVlPj4+MTApK3RlW0gtN10rVSh0ZVtILTE1XSkrdGVbSC0xNl07Zm9yKHZhciBOPTA7Tjw2NDsrK04pe3ZhciBn'@;
put 'PUQrWChjZSkrVihjZSxHLGIpK2tbTl0rdGVbTl18MCxDPVkob2UpK0Iob2Usc2UsaGUpfDA7RD1iLGI9RyxHPWNlLGNlPXVlK2d8MCx1ZT1oZSxoZT1zZSxzZT1vZSxvZT1nK0N8MH10aGlzLl9hPW9lK3RoaXMuX2F8MCx0aGlzLl9iPXNlK3RoaXMuX2J8MCx0aGlzLl9jPWhlK3RoaXMuX2N8'@;
put 'MCx0aGlzLl9kPXVlK3RoaXMuX2R8MCx0aGlzLl9lPWNlK3RoaXMuX2V8MCx0aGlzLl9mPUcrdGhpcy5fZnwwLHRoaXMuX2c9Yit0aGlzLl9nfDAsdGhpcy5faD1EK3RoaXMuX2h8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgcT1JLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4g'@;
put 'cS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxxLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLHEud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCkscS53cml0ZUludDMyQkUodGhpcy5fZCwxMikscS53cml0ZUludDMyQkUodGhpcy5fZSwxNikscS53cml0ZUludDMyQkUodGhpcy5fZiwyMCkscS53cml0'@;
put 'ZUludDMyQkUodGhpcy5fZywyNCkscS53cml0ZUludDMyQkUodGhpcy5faCwyOCkscX0sTS5leHBvcnRzPWp9LDE2ODY6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDc4MTYpLEk9Uig0MTg5KSxrPVIoOTUwOSkuQnVmZmVyLEU9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gaigpe3RoaXMu'@;
put 'aW5pdCgpLHRoaXMuX3c9RSxJLmNhbGwodGhpcywxMjgsMTEyKX16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5f'@;
put 'ZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00Mjkw'@;
put 'Nzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFY9ay5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gQihZLFgsVSl7Vi53cml0ZUludDMyQkUoWSxVKSxW'@;
put 'LndyaXRlSW50MzJCRShYLFUrNCl9cmV0dXJuIEIodGhpcy5fYWgsdGhpcy5fYWwsMCksQih0aGlzLl9iaCx0aGlzLl9ibCw4KSxCKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxCKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxCKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxCKHRoaXMuX2ZoLHRoaXMuX2Zs'@;
put 'LDQwKSxWfSxNLmV4cG9ydHM9an0sNzgxNjooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksST1SKDk1MDkpLkJ1ZmZlcixrPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0'@;
put 'OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4Nywz'@;
put 'NTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgw'@;
put 'NzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4'@;
put 'NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1'@;
put 'MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1'@;
put 'OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgx'@;
put 'OTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUs'@;
put 'MTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1'@;
put 'MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2'@;
put 'LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sRT1uZXcgQXJyYXko'@;
put 'MTYwKTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0KCksdGhpcy5fdz1FLEsuY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIFYoc2UsaGUsdWUpe3JldHVybiB1ZV5zZSYoaGVedWUpfWZ1bmN0aW9uIEIoc2UsaGUsdWUpe3JldHVybiBzZSZoZXx1ZSYoc2V8aGUpfWZ1bmN0aW9uIFkoc2UsaGUp'@;
put 'e3JldHVybihzZT4+PjI4fGhlPDw0KV4oaGU+Pj4yfHNlPDwzMCleKGhlPj4+N3xzZTw8MjUpfWZ1bmN0aW9uIFgoc2UsaGUpe3JldHVybihzZT4+PjE0fGhlPDwxOCleKHNlPj4+MTh8aGU8PDE0KV4oaGU+Pj45fHNlPDwyMyl9ZnVuY3Rpb24gVShzZSxoZSl7cmV0dXJuKHNlPj4+MXxoZTw8'@;
put 'MzEpXihzZT4+Pjh8aGU8PDI0KV5zZT4+Pjd9ZnVuY3Rpb24gcShzZSxoZSl7cmV0dXJuKHNlPj4+MXxoZTw8MzEpXihzZT4+Pjh8aGU8PDI0KV4oc2U+Pj43fGhlPDwyNSl9ZnVuY3Rpb24gZWUoc2UsaGUpe3JldHVybihzZT4+PjE5fGhlPDwxMyleKGhlPj4+Mjl8c2U8PDMpXnNlPj4+Nn1m'@;
put 'dW5jdGlvbiB0ZShzZSxoZSl7cmV0dXJuKHNlPj4+MTl8aGU8PDEzKV4oaGU+Pj4yOXxzZTw8MyleKHNlPj4+NnxoZTw8MjYpfWZ1bmN0aW9uIG9lKHNlLGhlKXtyZXR1cm4gc2U+Pj4wPGhlPj4+MD8xOjB9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f'@;
put 'YWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4'@;
put 'OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxqLnByb3RvdHlwZS5f'@;
put 'dXBkYXRlPWZ1bmN0aW9uKHNlKXtmb3IodmFyIGhlPXRoaXMuX3csdWU9MHx0aGlzLl9haCxjZT0wfHRoaXMuX2JoLEc9MHx0aGlzLl9jaCxiPTB8dGhpcy5fZGgsRD0wfHRoaXMuX2VoLEg9MHx0aGlzLl9maCxOPTB8dGhpcy5fZ2gsZz0wfHRoaXMuX2hoLEM9MHx0aGlzLl9hbCxTPTB8dGhp'@;
put 'cy5fYmwsdj0wfHRoaXMuX2NsLHA9MHx0aGlzLl9kbCx3PTB8dGhpcy5fZWwsSj0wfHRoaXMuX2ZsLG5lPTB8dGhpcy5fZ2wsZGU9MHx0aGlzLl9obCxmZT0wO2ZlPDMyO2ZlKz0yKWhlW2ZlXT1zZS5yZWFkSW50MzJCRSg0KmZlKSxoZVtmZSsxXT1zZS5yZWFkSW50MzJCRSg0KmZlKzQpO2Zv'@;
put 'cig7ZmU8MTYwO2ZlKz0yKXt2YXIgeGU9aGVbZmUtMzBdLExlPWhlW2ZlLTMwKzFdLEZlPVUoeGUsTGUpLE9lPXEoTGUseGUpLGplPWVlKHhlPWhlW2ZlLTRdLExlPWhlW2ZlLTQrMV0pLFdlPXRlKExlLHhlKSxRZT1oZVtmZS0zMl0sbHQ9aGVbZmUtMzIrMV0sUGU9T2UraGVbZmUtMTQrMV18'@;
put 'MCxiZT1GZStoZVtmZS0xNF0rb2UoUGUsT2UpfDA7YmU9KGJlPWJlK2plK29lKFBlPVBlK1dlfDAsV2UpfDApK1FlK29lKFBlPVBlK2x0fDAsbHQpfDAsaGVbZmVdPWJlLGhlW2ZlKzFdPVBlfWZvcih2YXIgQWU9MDtBZTwxNjA7QWUrPTIpe2JlPWhlW0FlXSxQZT1oZVtBZSsxXTt2YXIgVGU9'@;
put 'Qih1ZSxjZSxHKSxxZT1CKEMsUyx2KSxYZT1ZKHVlLEMpLFVlPVkoQyx1ZSksaHQ9WChELHcpLE1lPVgodyxEKSxEZT1rW0FlXSx6ZT1rW0FlKzFdLG90PVYoRCxILE4pLHV0PVYodyxKLG5lKSxNdD1kZStNZXwwLEh0PWcraHQrb2UoTXQsZGUpfDA7SHQ9KEh0PShIdD1IdCtvdCtvZShNdD1N'@;
put 'dCt1dHwwLHV0KXwwKStEZStvZShNdD1NdCt6ZXwwLHplKXwwKStiZStvZShNdD1NdCtQZXwwLFBlKXwwO3ZhciBQdD1VZStxZXwwLG9uPVhlK1RlK29lKFB0LFVlKXwwO2c9TixkZT1uZSxOPUgsbmU9SixIPUQsSj13LEQ9YitIdCtvZSh3PXArTXR8MCxwKXwwLGI9RyxwPXYsRz1jZSx2PVMs'@;
put 'Y2U9dWUsUz1DLHVlPUh0K29uK29lKEM9TXQrUHR8MCxNdCl8MH10aGlzLl9hbD10aGlzLl9hbCtDfDAsdGhpcy5fYmw9dGhpcy5fYmwrU3wwLHRoaXMuX2NsPXRoaXMuX2NsK3Z8MCx0aGlzLl9kbD10aGlzLl9kbCtwfDAsdGhpcy5fZWw9dGhpcy5fZWwrd3wwLHRoaXMuX2ZsPXRoaXMuX2Zs'@;
put 'K0p8MCx0aGlzLl9nbD10aGlzLl9nbCtuZXwwLHRoaXMuX2hsPXRoaXMuX2hsK2RlfDAsdGhpcy5fYWg9dGhpcy5fYWgrdWUrb2UodGhpcy5fYWwsQyl8MCx0aGlzLl9iaD10aGlzLl9iaCtjZStvZSh0aGlzLl9ibCxTKXwwLHRoaXMuX2NoPXRoaXMuX2NoK0crb2UodGhpcy5fY2wsdil8MCx0'@;
put 'aGlzLl9kaD10aGlzLl9kaCtiK29lKHRoaXMuX2RsLHApfDAsdGhpcy5fZWg9dGhpcy5fZWgrRCtvZSh0aGlzLl9lbCx3KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK0grb2UodGhpcy5fZmwsSil8MCx0aGlzLl9naD10aGlzLl9naCtOK29lKHRoaXMuX2dsLG5lKXwwLHRoaXMuX2hoPXRoaXMuX2ho'@;
put 'K2crb2UodGhpcy5faGwsZGUpfDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHNlPUkuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGhlKHVlLGNlLEcpe3NlLndyaXRlSW50MzJCRSh1ZSxHKSxzZS53cml0ZUludDMyQkUoY2UsRys0KX1yZXR1cm4gaGUodGhpcy5fYWgsdGhp'@;
put 'cy5fYWwsMCksaGUodGhpcy5fYmgsdGhpcy5fYmwsOCksaGUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGhlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxoZSh0aGlzLl9laCx0aGlzLl9lbCwzMiksaGUodGhpcy5fZmgsdGhpcy5fZmwsNDApLGhlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxoZSh0aGlz'@;
put 'Ll9oaCx0aGlzLl9obCw1Niksc2V9LE0uZXhwb3J0cz1qfSwyODMwOihNLE8sUik9PntNLmV4cG9ydHM9Szt2YXIgej1SKDcxODcpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBLKCl7ei5jYWxsKHRoaXMpfVIoNTcxNykoSyx6KSxLLlJlYWRhYmxlPVIoOTQ4MSksSy5Xcml0YWJsZT1SKDQyMjkp'@;
put 'LEsuRHVwbGV4PVIoNjc1MyksSy5UcmFuc2Zvcm09Uig0NjA1KSxLLlBhc3NUaHJvdWdoPVIoMjcyNSksSy5maW5pc2hlZD1SKDg2MTApLEsucGlwZWxpbmU9Uig5OTQ2KSxLLlN0cmVhbT1LLEsucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oSSxrKXt2YXIgRT10aGlzO2Z1bmN0aW9uIGooZWUp'@;
put 'e0kud3JpdGFibGUmJiExPT09SS53cml0ZShlZSkmJkUucGF1c2UmJkUucGF1c2UoKX1mdW5jdGlvbiBWKCl7RS5yZWFkYWJsZSYmRS5yZXN1bWUmJkUucmVzdW1lKCl9RS5vbigiZGF0YSIsaiksSS5vbigiZHJhaW4iLFYpLEkuX2lzU3RkaW98fGsmJiExPT09ay5lbmR8fChFLm9uKCJlbmQi'@;
put 'LFkpLEUub24oImNsb3NlIixYKSk7dmFyIEI9ITE7ZnVuY3Rpb24gWSgpe0J8fChCPSEwLEkuZW5kKCkpfWZ1bmN0aW9uIFgoKXtCfHwoQj0hMCwiZnVuY3Rpb24iPT10eXBlb2YgSS5kZXN0cm95JiZJLmRlc3Ryb3koKSl9ZnVuY3Rpb24gVShlZSl7aWYocSgpLDA9PT16Lmxpc3RlbmVyQ291'@;
put 'bnQodGhpcywiZXJyb3IiKSl0aHJvdyBlZX1mdW5jdGlvbiBxKCl7RS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsaiksSS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFYpLEUucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksRS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFgpLEUucmVtb3ZlTGlzdGVuZXIo'@;
put 'ImVycm9yIixVKSxJLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsVSksRS5yZW1vdmVMaXN0ZW5lcigiZW5kIixxKSxFLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscSksSS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHEpfXJldHVybiBFLm9uKCJlcnJvciIsVSksSS5vbigiZXJyb3IiLFUpLEUub24o'@;
put 'ImVuZCIscSksRS5vbigiY2xvc2UiLHEpLEkub24oImNsb3NlIixxKSxJLmVtaXQoInBpcGUiLEUpLEl9fSwyNTUzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz16LmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHEpe3N3aXRjaCgocT0iIitxKSYmcS50b0xvd2Vy'@;
put 'Q2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4h'@;
put 'MX19O2Z1bmN0aW9uIEkocSl7dmFyIGVlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKHRlKXt2YXIgb2U9ZnVuY3Rpb24oc2Upe2lmKCFzZSlyZXR1cm4idXRmOCI7Zm9yKHZhciBoZTs7KXN3aXRjaChzZSl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1'@;
put 'Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHNlO2RlZmF1bHQ6aWYoaGUpcmV0'@;
put 'dXJuO3NlPSgiIitzZSkudG9Mb3dlckNhc2UoKSxoZT0hMH19KHRlKTtpZigic3RyaW5nIiE9dHlwZW9mIG9lJiYoei5pc0VuY29kaW5nPT09S3x8IUsodGUpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrdGUpO3JldHVybiBvZXx8dGV9KHEpLHRoaXMuZW5jb2Rpbmcp'@;
put 'e2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PWosdGhpcy5lbmQ9VixlZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1FLGVlPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1CLHRoaXMuZW5kPVksZWU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPVgsdm9p'@;
put 'ZCh0aGlzLmVuZD1VKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPXouYWxsb2NVbnNhZmUoZWUpfWZ1bmN0aW9uIGsocSl7cmV0dXJuIHE8PTEyNz8wOnE+PjU9PTY/MjpxPj40PT0xND8zOnE+PjM9PTMwPzQ6cT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBF'@;
put 'KHEpe3ZhciBlZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHRlPWZ1bmN0aW9uKG9lLHNlLGhlKXtpZigxMjghPSgxOTImc2VbMF0pKXJldHVybiBvZS5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKG9lLmxhc3ROZWVkPjEmJnNlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImc2VbMV0pKXJl'@;
put 'dHVybiBvZS5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKG9lLmxhc3ROZWVkPjImJnNlLmxlbmd0aD4yJiYxMjghPSgxOTImc2VbMl0pKXJldHVybiBvZS5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxxKTtyZXR1cm4gdm9pZCAwIT09dGU/dGU6dGhpcy5sYXN0TmVlZDw9cS5sZW5ndGg/KHEu'@;
put 'Y29weSh0aGlzLmxhc3RDaGFyLGVlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToocS5jb3B5KHRoaXMubGFzdENoYXIsZWUsMCxxLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1xLmxlbmd0aCkpfWZ1'@;
put 'bmN0aW9uIGoocSxlZSl7aWYoKHEubGVuZ3RoLWVlKSUyPT0wKXt2YXIgdGU9cS50b1N0cmluZygidXRmMTZsZSIsZWUpO2lmKHRlKXt2YXIgb2U9dGUuY2hhckNvZGVBdCh0ZS5sZW5ndGgtMSk7aWYob2U+PTU1Mjk2JiZvZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxh'@;
put 'c3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXFbcS5sZW5ndGgtMV0sdGUuc2xpY2UoMCwtMSl9cmV0dXJuIHRlfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgt'@;
put 'MV0scS50b1N0cmluZygidXRmMTZsZSIsZWUscS5sZW5ndGgtMSl9ZnVuY3Rpb24gVihxKXt2YXIgZWU9cSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9lZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRo'@;
put 'aXMubGFzdE5lZWQpOmVlfWZ1bmN0aW9uIEIocSxlZSl7dmFyIHRlPShxLmxlbmd0aC1lZSklMztyZXR1cm4gMD09PXRlP3EudG9TdHJpbmcoImJhc2U2NCIsZWUpOih0aGlzLmxhc3ROZWVkPTMtdGUsdGhpcy5sYXN0VG90YWw9MywxPT09dGU/dGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3Ro'@;
put 'LTFdOih0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdKSxxLnRvU3RyaW5nKCJiYXNlNjQiLGVlLHEubGVuZ3RoLXRlKSl9ZnVuY3Rpb24gWShxKXt2YXIgZWU9cSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIjtyZXR1cm4gdGhp'@;
put 'cy5sYXN0TmVlZD9lZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTplZX1mdW5jdGlvbiBYKHEpe3JldHVybiBxLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIFUocSl7cmV0dXJuIHEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiJ9'@;
put 'Ty5TdHJpbmdEZWNvZGVyPUksSS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7aWYoMD09PXEubGVuZ3RoKXJldHVybiIiO3ZhciBlZSx0ZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oZWU9dGhpcy5maWxsTGFzdChxKSkpcmV0dXJuIiI7dGU9dGhpcy5sYXN0TmVlZCx0aGlz'@;
put 'Lmxhc3ROZWVkPTB9ZWxzZSB0ZT0wO3JldHVybiB0ZTxxLmxlbmd0aD9lZT9lZSt0aGlzLnRleHQocSx0ZSk6dGhpcy50ZXh0KHEsdGUpOmVlfHwiIn0sSS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHEpe3ZhciBlZT1xJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxh'@;
put 'c3ROZWVkP2VlKyJcdWZmZmQiOmVlfSxJLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHEsZWUpe3ZhciB0ZT1mdW5jdGlvbihzZSxoZSx1ZSl7dmFyIGNlPWhlLmxlbmd0aC0xO2lmKGNlPHVlKXJldHVybiAwO3ZhciBHPWsoaGVbY2VdKTtyZXR1cm4gRz49MD8oRz4wJiYoc2UubGFzdE5lZWQ9'@;
put 'Ry0xKSxHKTotLWNlPHVlfHwtMj09PUc/MDooRz1rKGhlW2NlXSkpPj0wPyhHPjAmJihzZS5sYXN0TmVlZD1HLTIpLEcpOi0tY2U8dWV8fC0yPT09Rz8wOihHPWsoaGVbY2VdKSk+PTA/KEc+MCYmKDI9PT1HP0c9MDpzZS5sYXN0TmVlZD1HLTMpLEcpOjB9KHRoaXMscSxlZSk7aWYoIXRoaXMu'@;
put 'bGFzdE5lZWQpcmV0dXJuIHEudG9TdHJpbmcoInV0ZjgiLGVlKTt0aGlzLmxhc3RUb3RhbD10ZTt2YXIgb2U9cS5sZW5ndGgtKHRlLXRoaXMubGFzdE5lZWQpO3JldHVybiBxLmNvcHkodGhpcy5sYXN0Q2hhciwwLG9lKSxxLnRvU3RyaW5nKCJ1dGY4IixlZSxvZSl9LEkucHJvdG90eXBlLmZp'@;
put 'bGxMYXN0PWZ1bmN0aW9uKHEpe2lmKHRoaXMubGFzdE5lZWQ8PXEubGVuZ3RoKXJldHVybiBxLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5s'@;
put 'YXN0VG90YWwpO3EuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxxLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09cS5sZW5ndGh9fSw3ODU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDM2ODkpLEs9Uig0NTY0KSxJPVIoNzUyKSxrPVIo'@;
put 'MjIyNCkueSxFPVIoNTc2MSkubSxqPVIoODk3MSkuVSxWPVIoNzY1MiksQj1SKDQ1Nikse2Zyb21DYWxsYmFjazpZfT1SKDcwNDEpLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOlh9PVIoMTI2OSksVT0vXltceDIxXHgyMy1ceDJCXHgyRC1ceDNBXHgzQy1ceDVCXHg1RC1ceDdFXSskLyxxPS9b'@;
put 'XHgwMC1ceDFGXS8sZWU9WyJcbiIsIlxyIiwiXDAiXSx0ZT0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxvZT0vW1x4MDlceDIwLVx4MkZceDNCLVx4NDBceDVCLVx4NjBceDdCLVx4N0VdLyxzZT17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgs'@;
put 'b2N0Ojksbm92OjEwLGRlYzoxMX0saGU9MjE0NzQ4MzY0N2UzLHVlPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBjZShRZSl7Vi52YWxpZGF0ZShWLmlz'@;
put 'Tm9uRW1wdHlTdHJpbmcoUWUpLFFlKTtjb25zdCBsdD1TdHJpbmcoUWUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5vbmUiPT09bHR8fCJsYXgiPT09bHR8fCJzdHJpY3QiPT09bHQ/bHQ6bnVsbH1jb25zdCBHPU9iamVjdC5mcmVlemUoe1NJTEVOVDoic2lsZW50IixTVFJJQ1Q6InN0cmljdCIs'@;
put 'RElTQUJMRUQ6InVuc2FmZS1kaXNhYmxlZCJ9KSxiPS8oPzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpeKD86KD86W2EtZlxkXXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18'@;
put 'Oil8KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18Mlsw'@;
put 'LTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxk'@;
put 'XGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1c'@;
put 'ZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpc'@;
put 'Lig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAt'@;
put 'NV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxk'@;
put 'fFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6KSkpJCkvLEQ9IlxuXFxbPyg/OlxuKD86W2EtZkEtRlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1c'@;
put 'XGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVb'@;
put 'MC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8'@;
put 'XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwx'@;
put 'XFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVb'@;
put 'MC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsx'@;
put 'LDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0p'@;
put 'ezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJl'@;
put 'cGxhY2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxhY2UoL1xuL2csIiIpLnRyaW0oKSxIPW5ldyBSZWdFeHAoYF4ke0R9JGApO2Z1bmN0aW9uIE4oUWUsbHQsUGUsYmUpe2xldCBBZT0wO2Zvcig7QWU8UWUubGVuZ3RoOyl7Y29uc3QgVGU9UWUuY2hhckNvZGVBdChBZSk7aWYoVGU8PTQ3fHxU'@;
put 'ZT49NTgpYnJlYWs7QWUrK31yZXR1cm4gQWU8bHR8fEFlPlBlP251bGw6YmV8fEFlPT1RZS5sZW5ndGg/cGFyc2VJbnQoUWUuc3Vic3RyKDAsQWUpLDEwKTpudWxsfWZ1bmN0aW9uIGcoUWUpe2NvbnN0IGx0PVFlLnNwbGl0KCI6IiksUGU9WzAsMCwwXTtpZigzIT09bHQubGVuZ3RoKXJldHVy'@;
put 'biBudWxsO2ZvcihsZXQgYmU9MDtiZTwzO2JlKyspe2NvbnN0IFRlPU4obHRbYmVdLDEsMiwyPT1iZSk7aWYobnVsbD09PVRlKXJldHVybiBudWxsO1BlW2JlXT1UZX1yZXR1cm4gUGV9ZnVuY3Rpb24gQyhRZSl7UWU9U3RyaW5nKFFlKS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0'@;
put 'IGx0PXNlW1FlXTtyZXR1cm4gbHQ+PTA/bHQ6bnVsbH1mdW5jdGlvbiBTKFFlKXtpZighUWUpcmV0dXJuO2NvbnN0IGx0PVFlLnNwbGl0KG9lKTtpZighbHQpcmV0dXJuO2xldCBQZT1udWxsLGJlPW51bGwsQWU9bnVsbCxUZT1udWxsLHFlPW51bGwsWGU9bnVsbDtmb3IobGV0IFVlPTA7VWU8'@;
put 'bHQubGVuZ3RoO1VlKyspe2NvbnN0IGh0PWx0W1VlXS50cmltKCk7aWYoIWh0Lmxlbmd0aCljb250aW51ZTtsZXQgTWU7bnVsbD09PUFlJiYoTWU9ZyhodCksTWUpPyhQZT1NZVswXSxiZT1NZVsxXSxBZT1NZVsyXSk6bnVsbCE9PVRlfHwoTWU9TihodCwxLDIsITApLG51bGw9PT1NZSk/bnVs'@;
put 'bCE9PXFlfHwoTWU9QyhodCksbnVsbD09PU1lKT9udWxsPT09WGUmJihNZT1OKGh0LDIsNCwhMCksbnVsbCE9PU1lJiYoWGU9TWUsWGU+PTcwJiZYZTw9OTk/WGUrPTE5MDA6WGU+PTAmJlhlPD02OSYmKFhlKz0yZTMpKSk6cWU9TWU6VGU9TWV9cmV0dXJuIG51bGw9PT1UZXx8bnVsbD09PXFl'@;
put 'fHxudWxsPT09WGV8fG51bGw9PT1BZXx8VGU8MXx8VGU+MzF8fFhlPDE2MDF8fFBlPjIzfHxiZT41OXx8QWU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKFhlLHFlLFRlLFBlLGJlLEFlKSl9ZnVuY3Rpb24gdihRZSl7cmV0dXJuIFYudmFsaWRhdGUoVi5pc0RhdGUoUWUpLFFlKSxRZS50'@;
put 'b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHAoUWUpe3JldHVybiBudWxsPT1RZT9udWxsOihRZT1RZS50cmltKCkucmVwbGFjZSgvXlwuLywiIiksSC50ZXN0KFFlKSYmKFFlPVFlLnJlcGxhY2UoIlsiLCIiKS5yZXBsYWNlKCJdIiwiIikpLHomJi9bXlx1MDAwMS1cdTAwN2ZdLy50ZXN0KFFlKSYm'@;
put 'KFFlPXoudG9BU0NJSShRZSkpLFFlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHcoUWUsbHQsUGUpe2lmKG51bGw9PVFlfHxudWxsPT1sdClyZXR1cm4gbnVsbDtpZighMSE9PVBlJiYoUWU9cChRZSksbHQ9cChsdCkpLFFlPT1sdClyZXR1cm4hMDtjb25zdCBiZT1RZS5sYXN0SW5kZXhPZihs'@;
put 'dCk7cmV0dXJuIShiZTw9MHx8UWUubGVuZ3RoIT09bHQubGVuZ3RoK2JlfHwiLiIhPT1RZS5zdWJzdHIoYmUtMSwxKXx8Yi50ZXN0KFFlKSl9ZnVuY3Rpb24gSihRZSl7aWYoIVFlfHwiLyIhPT1RZS5zdWJzdHIoMCwxKSlyZXR1cm4iLyI7aWYoIi8iPT09UWUpcmV0dXJuIFFlO2NvbnN0IGx0'@;
put 'PVFlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1sdD8iLyI6UWUuc2xpY2UoMCxsdCl9ZnVuY3Rpb24gZGUoUWUsbHQpe2lmKGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0fHwobHQ9e30pLFYuaXNFbXB0eVN0cmluZyhRZSl8fCFWLmlzU3RyaW5nKFFlKSlyZXR1cm4gbnVsbDtjb25zdCBQ'@;
put 'ZT0oUWU9UWUudHJpbSgpKS5pbmRleE9mKCI7IiksYmU9ZnVuY3Rpb24gbmUoUWUsbHQpe1FlPWZ1bmN0aW9uKHFlKXtpZihWLmlzRW1wdHlTdHJpbmcocWUpKXJldHVybiBxZTtmb3IobGV0IFhlPTA7WGU8ZWUubGVuZ3RoO1hlKyspe2NvbnN0IFVlPXFlLmluZGV4T2YoZWVbWGVdKTstMSE9'@;
put 'PVVlJiYocWU9cWUuc3Vic3RyKDAsVWUpKX1yZXR1cm4gcWV9KFFlKSxWLnZhbGlkYXRlKFYuaXNTdHJpbmcoUWUpLFFlKTtsZXQgUGUsYmUsQWU9UWUuaW5kZXhPZigiPSIpO2lmKGx0KTA9PT1BZSYmKEFlPShRZT1RZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihBZTw9MCly'@;
put 'ZXR1cm47aWYoQWU8PTA/KFBlPSIiLGJlPVFlLnRyaW0oKSk6KFBlPVFlLnN1YnN0cigwLEFlKS50cmltKCksYmU9UWUuc3Vic3RyKEFlKzEpLnRyaW0oKSkscS50ZXN0KFBlKXx8cS50ZXN0KGJlKSlyZXR1cm47Y29uc3QgVGU9bmV3IGplO3JldHVybiBUZS5rZXk9UGUsVGUudmFsdWU9YmUs'@;
put 'VGV9KC0xPT09UGU/UWU6UWUuc3Vic3RyKDAsUGUpLCEhbHQubG9vc2UpO2lmKCFiZSlyZXR1cm47aWYoLTE9PT1QZSlyZXR1cm4gYmU7Y29uc3QgQWU9UWUuc2xpY2UoUGUrMSkudHJpbSgpO2lmKDA9PT1BZS5sZW5ndGgpcmV0dXJuIGJlO2NvbnN0IFRlPUFlLnNwbGl0KCI7Iik7Zm9yKDtU'@;
put 'ZS5sZW5ndGg7KXtjb25zdCBxZT1UZS5zaGlmdCgpLnRyaW0oKTtpZigwPT09cWUubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IFhlPXFlLmluZGV4T2YoIj0iKTtsZXQgVWUsaHQ7c3dpdGNoKC0xPT09WGU/KFVlPXFlLGh0PW51bGwpOihVZT1xZS5zdWJzdHIoMCxYZSksaHQ9cWUuc3Vic3RyKFhl'@;
put 'KzEpKSxVZT1VZS50cmltKCkudG9Mb3dlckNhc2UoKSxodCYmKGh0PWh0LnRyaW0oKSksVWUpe2Nhc2UiZXhwaXJlcyI6aWYoaHQpe2NvbnN0IE1lPVMoaHQpO01lJiYoYmUuZXhwaXJlcz1NZSl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihodCYmL14tP1swLTldKyQvLnRlc3QoaHQpKXtjb25z'@;
put 'dCBNZT1wYXJzZUludChodCwxMCk7YmUuc2V0TWF4QWdlKE1lKX1icmVhaztjYXNlImRvbWFpbiI6aWYoaHQpe2NvbnN0IE1lPWh0LnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTtNZSYmKGJlLmRvbWFpbj1NZS50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOmJlLnBhdGg9aHQmJiIv'@;
put 'Ij09PWh0WzBdP2h0Om51bGw7YnJlYWs7Y2FzZSJzZWN1cmUiOmJlLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpiZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRlIjpzd2l0Y2goaHQ/aHQudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOmJlLnNhbWVTaXRlPSJz'@;
put 'dHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpiZS5zYW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUiOmJlLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OmJlLnNhbWVTaXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OmJlLmV4dGVuc2lvbnM9YmUuZXh0ZW5zaW9uc3x8W10sYmUuZXh0ZW5z'@;
put 'aW9ucy5wdXNoKHFlKX19cmV0dXJuIGJlfWZ1bmN0aW9uIGZlKFFlKXtsZXQgbHQ7dHJ5e2x0PUpTT04ucGFyc2UoUWUpfWNhdGNoKFBlKXtyZXR1cm4gUGV9cmV0dXJuIGx0fWZ1bmN0aW9uIHhlKFFlKXtpZighUWV8fFYuaXNFbXB0eVN0cmluZyhRZSkpcmV0dXJuIG51bGw7bGV0IGx0O2lm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgUWUpe2lmKGx0PWZlKFFlKSxsdCBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBudWxsfWVsc2UgbHQ9UWU7Y29uc3QgUGU9bmV3IGplO2ZvcihsZXQgYmU9MDtiZTxqZS5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtiZSsrKXtjb25zdCBBZT1qZS5zZXJp'@;
put 'YWxpemFibGVQcm9wZXJ0aWVzW2JlXTt2b2lkIDAhPT1sdFtBZV0mJmx0W0FlXSE9PU9lW0FlXSYmKFBlW0FlXT0iZXhwaXJlcyI9PT1BZXx8ImNyZWF0aW9uIj09PUFlfHwibGFzdEFjY2Vzc2VkIj09PUFlP251bGw9PT1sdFtBZV0/bnVsbDoiSW5maW5pdHkiPT1sdFtBZV0/IkluZmluaXR5'@;
put 'IjpuZXcgRGF0ZShsdFtBZV0pOmx0W0FlXSl9cmV0dXJuIFBlfWZ1bmN0aW9uIExlKFFlLGx0KXtWLnZhbGlkYXRlKFYuaXNPYmplY3QoUWUpLFFlKSxWLnZhbGlkYXRlKFYuaXNPYmplY3QobHQpLGx0KTtsZXQgUGU9MDtyZXR1cm4gUGU9KGx0LnBhdGg/bHQucGF0aC5sZW5ndGg6MCktKFFl'@;
put 'LnBhdGg/UWUucGF0aC5sZW5ndGg6MCksMCE9PVBlfHwoUGU9KFFlLmNyZWF0aW9uP1FlLmNyZWF0aW9uLmdldFRpbWUoKTpoZSktKGx0LmNyZWF0aW9uP2x0LmNyZWF0aW9uLmdldFRpbWUoKTpoZSksMCE9PVBlfHwoUGU9UWUuY3JlYXRpb25JbmRleC1sdC5jcmVhdGlvbkluZGV4KSksUGV9'@;
put 'ZnVuY3Rpb24gRmUoUWUpe2lmKFFlIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiBRZTt0cnl7UWU9ZGVjb2RlVVJJKFFlKX1jYXRjaHt9cmV0dXJuIEsoUWUpfWNvbnN0IE9lPXtrZXk6IiIsdmFsdWU6IiIsZXhwaXJlczoiSW5maW5pdHkiLG1heEFnZTpudWxsLGRvbWFpbjpudWxsLHBhdGg6'@;
put 'bnVsbCxzZWN1cmU6ITEsaHR0cE9ubHk6ITEsZXh0ZW5zaW9uczpudWxsLGhvc3RPbmx5Om51bGwscGF0aElzRGVmYXVsdDpudWxsLGNyZWF0aW9uOm51bGwsbGFzdEFjY2Vzc2VkOm51bGwsc2FtZVNpdGU6dm9pZCAwfTtjbGFzcyBqZXtjb25zdHJ1Y3RvcihsdD17fSl7Y29uc3QgUGU9WCgp'@;
put 'O1BlJiYodGhpc1tQZV09dGhpcy5pbnNwZWN0KSxPYmplY3QuYXNzaWduKHRoaXMsT2UsbHQpLHRoaXMuY3JlYXRpb249dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNyZWF0aW9uSW5kZXgiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZToh'@;
put 'MSx3cml0YWJsZTohMCx2YWx1ZTorK2plLmNvb2tpZXNDcmVhdGVkfSl9aW5zcGVjdCgpe2NvbnN0IGx0PURhdGUubm93KCksUGU9bnVsbCE9dGhpcy5ob3N0T25seT90aGlzLmhvc3RPbmx5OiI/IixiZT10aGlzLmNyZWF0aW9uP2x0LXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKyJtcyI6Ij8i'@;
put 'LEFlPXRoaXMubGFzdEFjY2Vzc2VkP2x0LXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSsibXMiOiI/IjtyZXR1cm5gQ29va2llPSIke3RoaXMudG9TdHJpbmcoKX07IGhvc3RPbmx5PSR7UGV9OyBhQWdlPSR7QWV9OyBjQWdlPSR7YmV9ImB9dG9KU09OKCl7Y29uc3QgbHQ9e307Zm9yKGNv'@;
put 'bnN0IFBlIG9mIGplLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMpdGhpc1tQZV0hPT1PZVtQZV0mJigiZXhwaXJlcyI9PT1QZXx8ImNyZWF0aW9uIj09PVBlfHwibGFzdEFjY2Vzc2VkIj09PVBlP2x0W1BlXT1udWxsPT09dGhpc1tQZV0/bnVsbDoiSW5maW5pdHkiPT10aGlzW1BlXT8iSW5maW5p'@;
put 'dHkiOnRoaXNbUGVdLnRvSVNPU3RyaW5nKCk6Im1heEFnZSI9PT1QZT9udWxsIT09dGhpc1tQZV0mJihsdFtQZV09dGhpc1tQZV09PTEvMHx8dGhpc1tQZV09PS0xLzA/dGhpc1tQZV0udG9TdHJpbmcoKTp0aGlzW1BlXSk6dGhpc1tQZV0hPT1PZVtQZV0mJihsdFtQZV09dGhpc1tQZV0pKTty'@;
put 'ZXR1cm4gbHR9Y2xvbmUoKXtyZXR1cm4geGUodGhpcy50b0pTT04oKSl9dmFsaWRhdGUoKXtpZighVS50ZXN0KHRoaXMudmFsdWUpfHwhKHRoaXMuZXhwaXJlcz09MS8wfHx0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlfHxTKHRoaXMuZXhwaXJlcykpfHxudWxsIT10aGlzLm1heEFnZSYm'@;
put 'dGhpcy5tYXhBZ2U8PTB8fG51bGwhPXRoaXMucGF0aCYmIXRlLnRlc3QodGhpcy5wYXRoKSlyZXR1cm4hMTtjb25zdCBsdD10aGlzLmNkb21haW4oKTtyZXR1cm4hKGx0JiYobHQubWF0Y2goL1wuJC8pfHxudWxsPT1JLmdldFB1YmxpY1N1ZmZpeChsdCkpKX1zZXRFeHBpcmVzKGx0KXt0aGlz'@;
put 'LmV4cGlyZXM9bHQgaW5zdGFuY2VvZiBEYXRlP2x0OlMobHQpfHwiSW5maW5pdHkifXNldE1heEFnZShsdCl7dGhpcy5tYXhBZ2U9bHQ9PT0xLzB8fGx0PT09LTEvMD9sdC50b1N0cmluZygpOmx0fWNvb2tpZVN0cmluZygpe2xldCBsdD10aGlzLnZhbHVlO3JldHVybiBudWxsPT1sdCYmKGx0'@;
put 'PSIiKSwiIj09PXRoaXMua2V5P2x0OmAke3RoaXMua2V5fT0ke2x0fWB9dG9TdHJpbmcoKXtsZXQgbHQ9dGhpcy5jb29raWVTdHJpbmcoKTtpZih0aGlzLmV4cGlyZXMhPTEvMCYmKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/bHQrPWA7IEV4cGlyZXM9JHt2KHRoaXMuZXhwaXJlcyl9'@;
put 'YDpsdCs9YDsgRXhwaXJlcz0ke3RoaXMuZXhwaXJlc31gKSxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2UhPTEvMCYmKGx0Kz1gOyBNYXgtQWdlPSR7dGhpcy5tYXhBZ2V9YCksdGhpcy5kb21haW4mJiF0aGlzLmhvc3RPbmx5JiYobHQrPWA7IERvbWFpbj0ke3RoaXMuZG9tYWlufWAp'@;
put 'LHRoaXMucGF0aCYmKGx0Kz1gOyBQYXRoPSR7dGhpcy5wYXRofWApLHRoaXMuc2VjdXJlJiYobHQrPSI7IFNlY3VyZSIpLHRoaXMuaHR0cE9ubHkmJihsdCs9IjsgSHR0cE9ubHkiKSx0aGlzLnNhbWVTaXRlJiYibm9uZSIhPT10aGlzLnNhbWVTaXRlKXtjb25zdCBQZT1qZS5zYW1lU2l0ZUNh'@;
put 'bm9uaWNhbFt0aGlzLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCldO2x0Kz1gOyBTYW1lU2l0ZT0ke1BlfHx0aGlzLnNhbWVTaXRlfWB9cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucyYmdGhpcy5leHRlbnNpb25zLmZvckVhY2goUGU9PntsdCs9YDsgJHtQZX1gfSksbHR9VFRMKGx0KXtpZihudWxsIT10'@;
put 'aGlzLm1heEFnZSlyZXR1cm4gdGhpcy5tYXhBZ2U8PTA/MDoxZTMqdGhpcy5tYXhBZ2U7bGV0IFBlPXRoaXMuZXhwaXJlcztyZXR1cm4gUGUhPTEvMD8oUGUgaW5zdGFuY2VvZiBEYXRlfHwoUGU9UyhQZSl8fDEvMCksUGU9PTEvMD8xLzA6UGUuZ2V0VGltZSgpLShsdHx8RGF0ZS5ub3coKSkp'@;
put 'OjEvMH1leHBpcnlUaW1lKGx0KXtpZihudWxsIT10aGlzLm1heEFnZSl7Y29uc3QgYmU9dGhpcy5tYXhBZ2U8PTA/LTEvMDoxZTMqdGhpcy5tYXhBZ2U7cmV0dXJuKGx0fHx0aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSkuZ2V0VGltZSgpK2JlfXJldHVybiB0aGlzLmV4cGlyZXM9PTEvMD8xLzA6'@;
put 'dGhpcy5leHBpcmVzLmdldFRpbWUoKX1leHBpcnlEYXRlKGx0KXtjb25zdCBQZT10aGlzLmV4cGlyeVRpbWUobHQpO3JldHVybiBQZT09MS8wP25ldyBEYXRlKGhlKTpQZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShQZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4'@;
put 'QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1jYW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRoaXMuZG9tYWluP251bGw6cCh0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24gV2UoUWUpe2lmKG51bGwhPVFlKXtj'@;
put 'b25zdCBsdD1RZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsdCl7Y2FzZSBHLlNUUklDVDpjYXNlIEcuU0lMRU5UOmNhc2UgRy5ESVNBQkxFRDpyZXR1cm4gbHR9fXJldHVybiBHLlNJTEVOVH1qZS5jb29raWVzQ3JlYXRlZD0wLGplLnBhcnNlPWRlLGplLmZyb21KU09OPXhlLGplLnNlcmlhbGl6'@;
put 'YWJsZVByb3BlcnRpZXM9T2JqZWN0LmtleXMoT2UpLGplLnNhbWVTaXRlTGV2ZWw9e3N0cmljdDozLGxheDoyLG5vbmU6MX0samUuc2FtZVNpdGVDYW5vbmljYWw9e3N0cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIEtle2NvbnN0cnVjdG9yKGx0LFBlPXtyZWplY3RQdWJsaWNTdWZm'@;
put 'aXhlczohMH0peyJib29sZWFuIj09dHlwZW9mIFBlJiYoUGU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOlBlfSksVi52YWxpZGF0ZShWLmlzT2JqZWN0KFBlKSxQZSksdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcz1QZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3NlTW9kZT0h'@;
put 'IVBlLmxvb3NlTW9kZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5cGVvZiBQZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fFBlLmFsbG93U3BlY2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPWx0fHxuZXcgRSx0aGlzLnByZWZpeFNlY3VyaXR5PVdlKFBlLnByZWZpeFNl'@;
put 'Y3VyaXR5KSx0aGlzLl9jbG9uZVN5bmM9WWUoImNsb25lIiksdGhpcy5faW1wb3J0Q29va2llc1N5bmM9WWUoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVzU3luYz1ZZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1ZZSgiZ2V0Q29va2llU3RyaW5nIiks'@;
put 'dGhpcy5nZXRTZXRDb29raWVTdHJpbmdzU3luYz1ZZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIpLHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9WWUoInJlbW92ZUFsbENvb2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9WWUoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1ZZSgic2Vy'@;
put 'aWFsaXplIil9c2V0Q29va2llKGx0LFBlLGJlLEFlKXtsZXQgVGU7aWYoVi52YWxpZGF0ZShWLmlzTm9uRW1wdHlTdHJpbmcoUGUpLEFlLGJlKSxWLmlzRnVuY3Rpb24oUGUpKXJldHVybihBZT1QZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBxZT1GZShQZSk7'@;
put 'aWYoVi5pc0Z1bmN0aW9uKGJlKSYmKEFlPWJlLGJlPXt9KSxWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihBZSksQWUpLCFWLmlzTm9uRW1wdHlTdHJpbmcobHQpJiYhVi5pc09iamVjdChsdCkmJmx0IGluc3RhbmNlb2YgU3RyaW5nJiYwPT1sdC5sZW5ndGgpcmV0dXJuIEFlKG51bGwpO2NvbnN0'@;
put 'IFhlPXAocWUuaG9zdG5hbWUpLFVlPWJlLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTtsZXQgaHQ9bnVsbDtpZihiZS5zYW1lU2l0ZUNvbnRleHQmJihodD1jZShiZS5zYW1lU2l0ZUNvbnRleHQpLCFodCkpcmV0dXJuIEFlKG5ldyBFcnJvcih1ZSkpO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'bHR8fGx0IGluc3RhbmNlb2YgU3RyaW5nKXtpZighKGx0PWplLnBhcnNlKGx0LHtsb29zZTpVZX0pKSlyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSl9ZWxzZSBpZighKGx0IGluc3RhbmNlb2YgamUpKXJldHVy'@;
put 'biBUZT1uZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2llIG9iamVjdCBvciBzdHJpbmciKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtjb25zdCBNZT1iZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJmx0'@;
put 'LmRvbWFpbiYmbnVsbD09SS5nZXRQdWJsaWNTdWZmaXgobHQuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6YmUuaWdub3JlRXJyb3J9KSYmIUgudGVzdChsdC5kb21haW4pKXJldHVybiBUZT1uZXcgRXJyb3Io'@;
put 'IkNvb2tpZSBoYXMgZG9tYWluIHNldCB0byBhIHB1YmxpYyBzdWZmaXgiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtpZihsdC5kb21haW4pe2lmKCF3KFhlLGx0LmNkb21haW4oKSwhMSkpcmV0dXJuIFRlPW5ldyBFcnJvcihgQ29va2llIG5vdCBpbiB0aGlzIGhvc3QncyBkb21haW4u'@;
put 'IENvb2tpZToke2x0LmNkb21haW4oKX0gUmVxdWVzdDoke1hlfWApLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO251bGw9PWx0Lmhvc3RPbmx5JiYobHQuaG9zdE9ubHk9ITEpfWVsc2UgbHQuaG9zdE9ubHk9ITAsbHQuZG9tYWluPVhlO2lmKGx0LnBhdGgmJiIvIj09PWx0LnBhdGhbMF18'@;
put 'fChsdC5wYXRoPUoocWUucGF0aG5hbWUpLGx0LnBhdGhJc0RlZmF1bHQ9ITApLCExPT09YmUuaHR0cCYmbHQuaHR0cE9ubHkpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpU'@;
put 'ZSk7aWYoIm5vbmUiIT09bHQuc2FtZVNpdGUmJnZvaWQgMCE9PWx0LnNhbWVTaXRlJiZodCYmIm5vbmUiPT09aHQpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29va2llIGlzIFNhbWVTaXRlIGJ1dCB0aGlzIGlzIGEgY3Jvc3Mtb3JpZ2luIHJlcXVlc3QiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxs'@;
put 'OlRlKTtjb25zdCBEZT10aGlzLnByZWZpeFNlY3VyaXR5PT09Ry5TSUxFTlQ7aWYodGhpcy5wcmVmaXhTZWN1cml0eSE9PUcuRElTQUJMRUQpe2xldCBvdCx1dD0hMTtpZihWLnZhbGlkYXRlKFYuaXNPYmplY3QoTXQ9bHQpLE10KSwhTXQua2V5LnN0YXJ0c1dpdGgoIl9fU2VjdXJlLSIpfHxN'@;
put 'dC5zZWN1cmU/ZnVuY3Rpb24oTXQpe3JldHVybiBWLnZhbGlkYXRlKFYuaXNPYmplY3QoTXQpKSwhTXQua2V5LnN0YXJ0c1dpdGgoIl9fSG9zdC0iKXx8TXQuc2VjdXJlJiZNdC5ob3N0T25seSYmbnVsbCE9TXQucGF0aCYmIi8iPT09TXQucGF0aH0obHQpfHwodXQ9ITAsb3Q9IkNvb2tpZSBo'@;
put 'YXMgX19Ib3N0IHByZWZpeCBidXQgZWl0aGVyIFNlY3VyZSBvciBIb3N0T25seSBhdHRyaWJ1dGUgaXMgbm90IHNldCBvciBQYXRoIGlzIG5vdCAnLyciKToodXQ9ITAsb3Q9IkNvb2tpZSBoYXMgX19TZWN1cmUgcHJlZml4IGJ1dCBTZWN1cmUgYXR0cmlidXRlIGlzIG5vdCBzZXQiKSx1dCly'@;
put 'ZXR1cm4gQWUoYmUuaWdub3JlRXJyb3J8fERlP251bGw6bmV3IEVycm9yKG90KSl9dmFyIE10O2NvbnN0IHplPXRoaXMuc3RvcmU7emUudXBkYXRlQ29va2llfHwoemUudXBkYXRlQ29va2llPWZ1bmN0aW9uKG90LHV0LE10KXt0aGlzLnB1dENvb2tpZSh1dCxNdCl9KSx6ZS5maW5kQ29va2ll'@;
put 'KGx0LmRvbWFpbixsdC5wYXRoLGx0LmtleSxmdW5jdGlvbihvdCx1dCl7aWYob3QpcmV0dXJuIEFlKG90KTtjb25zdCBNdD1mdW5jdGlvbihIdCl7aWYoSHQpcmV0dXJuIEFlKEh0KTtBZShudWxsLGx0KX07aWYodXQpe2lmKCExPT09YmUuaHR0cCYmdXQuaHR0cE9ubHkpcmV0dXJuIG90PW5l'@;
put 'dyBFcnJvcigib2xkIENvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6b3QpO2x0LmNyZWF0aW9uPXV0LmNyZWF0aW9uLGx0LmNyZWF0aW9uSW5kZXg9dXQuY3JlYXRpb25JbmRleCxsdC5sYXN0QWNjZXNzZWQ9TWUs'@;
put 'emUudXBkYXRlQ29va2llKHV0LGx0LE10KX1lbHNlIGx0LmNyZWF0aW9uPWx0Lmxhc3RBY2Nlc3NlZD1NZSx6ZS5wdXRDb29raWUobHQsTXQpfSl9Z2V0Q29va2llcyhsdCxQZSxiZSl7Vi52YWxpZGF0ZShWLmlzTm9uRW1wdHlTdHJpbmcobHQpLGJlLGx0KTtjb25zdCBBZT1GZShsdCk7Vi5p'@;
put 'c0Z1bmN0aW9uKFBlKSYmKGJlPVBlLFBlPXt9KSxWLnZhbGlkYXRlKFYuaXNPYmplY3QoUGUpLGJlLFBlKSxWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihiZSksYmUpO2NvbnN0IFRlPXAoQWUuaG9zdG5hbWUpLHFlPUFlLnBhdGhuYW1lfHwiLyI7bGV0IFhlPVBlLnNlY3VyZTtudWxsIT1YZXx8'@;
put 'IUFlLnByb3RvY29sfHwiaHR0cHM6IiE9QWUucHJvdG9jb2wmJiJ3c3M6IiE9QWUucHJvdG9jb2x8fChYZT0hMCk7bGV0IFVlPTA7aWYoUGUuc2FtZVNpdGVDb250ZXh0KXtjb25zdCBNdD1jZShQZS5zYW1lU2l0ZUNvbnRleHQpO2lmKFVlPWplLnNhbWVTaXRlTGV2ZWxbTXRdLCFVZSlyZXR1'@;
put 'cm4gYmUobmV3IEVycm9yKHVlKSl9bGV0IGh0PVBlLmh0dHA7bnVsbD09aHQmJihodD0hMCk7Y29uc3QgTWU9UGUubm93fHxEYXRlLm5vdygpLERlPSExIT09UGUuZXhwaXJlLHplPSEhUGUuYWxsUGF0aHMsb3Q9dGhpcy5zdG9yZTtmdW5jdGlvbiB1dChNdCl7aWYoTXQuaG9zdE9ubHkpe2lm'@;
put 'KE10LmRvbWFpbiE9VGUpcmV0dXJuITF9ZWxzZSBpZighdyhUZSxNdC5kb21haW4sITEpKXJldHVybiExO3JldHVybiEoIXplJiYhaihxZSxNdC5wYXRoKXx8TXQuc2VjdXJlJiYhWGV8fE10Lmh0dHBPbmx5JiYhaHR8fFVlJiZqZS5zYW1lU2l0ZUxldmVsW010LnNhbWVTaXRlfHwibm9uZSJd'@;
put 'PlVlfHxEZSYmTXQuZXhwaXJ5VGltZSgpPD1NZSYmKG90LnJlbW92ZUNvb2tpZShNdC5kb21haW4sTXQucGF0aCxNdC5rZXksKCk9Pnt9KSwxKSl9b3QuZmluZENvb2tpZXMoVGUsemU/bnVsbDpxZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbiwoTXQsSHQpPT57aWYoTXQpcmV0dXJuIGJl'@;
put 'KE10KTtIdD1IdC5maWx0ZXIodXQpLCExIT09UGUuc29ydCYmKEh0PUh0LnNvcnQoTGUpKTtjb25zdCBQdD1uZXcgRGF0ZTtmb3IoY29uc3Qgb24gb2YgSHQpb24ubGFzdEFjY2Vzc2VkPVB0O2JlKG51bGwsSHQpfSl9Z2V0Q29va2llU3RyaW5nKC4uLmx0KXtjb25zdCBQZT1sdC5wb3AoKTtW'@;
put 'LnZhbGlkYXRlKFYuaXNGdW5jdGlvbihQZSksUGUpLGx0LnB1c2goZnVuY3Rpb24oYmUsQWUpe2JlP1BlKGJlKTpQZShudWxsLEFlLnNvcnQoTGUpLm1hcChUZT0+VGUuY29va2llU3RyaW5nKCkpLmpvaW4oIjsgIikpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsbHQpfWdldFNldENv'@;
put 'b2tpZVN0cmluZ3MoLi4ubHQpe2NvbnN0IFBlPWx0LnBvcCgpO1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKFBlKSxQZSksbHQucHVzaChmdW5jdGlvbihiZSxBZSl7YmU/UGUoYmUpOlBlKG51bGwsQWUubWFwKFRlPT5UZS50b1N0cmluZygpKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhp'@;
put 'cyxsdCl9c2VyaWFsaXplKGx0KXtWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihsdCksbHQpO2xldCBQZT10aGlzLnN0b3JlLmNvbnN0cnVjdG9yLm5hbWU7Vi5pc09iamVjdChQZSkmJihQZT1udWxsKTtjb25zdCBiZT17dmVyc2lvbjpgdG91Z2gtY29va2llQCR7Qn1gLHN0b3JlVHlwZTpQZSxy'@;
put 'ZWplY3RQdWJsaWNTdWZmaXhlczohIXRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMsZW5hYmxlTG9vc2VNb2RlOiEhdGhpcy5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOiEhdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6V2UodGhpcy5wcmVm'@;
put 'aXhTZWN1cml0eSksY29va2llczpbXX07aWYoIXRoaXMuc3RvcmUuZ2V0QWxsQ29va2llc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc3RvcmUuZ2V0QWxsQ29va2llcylyZXR1cm4gbHQobmV3IEVycm9yKCJzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IGdldEFsbENvb2tpZXMgYW5kIGNhbm5v'@;
put 'dCBiZSBzZXJpYWxpemVkIikpO3RoaXMuc3RvcmUuZ2V0QWxsQ29va2llcygoQWUsVGUpPT5BZT9sdChBZSk6KGJlLmNvb2tpZXM9VGUubWFwKHFlPT4oZGVsZXRlKHFlPXFlIGluc3RhbmNlb2YgamU/cWUudG9KU09OKCk6cWUpLmNyZWF0aW9uSW5kZXgscWUpKSxsdChudWxsLGJlKSkpfXRv'@;
put 'SlNPTigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKX1faW1wb3J0Q29va2llcyhsdCxQZSl7bGV0IGJlPWx0LmNvb2tpZXM7aWYoIWJlfHwhQXJyYXkuaXNBcnJheShiZSkpcmV0dXJuIFBlKG5ldyBFcnJvcigic2VyaWFsaXplZCBqYXIgaGFzIG5vIGNvb2tpZXMgYXJyYXkiKSk7YmU9'@;
put 'YmUuc2xpY2UoKTtjb25zdCBBZT1UZT0+e2lmKFRlKXJldHVybiBQZShUZSk7aWYoIWJlLmxlbmd0aClyZXR1cm4gUGUoVGUsdGhpcyk7bGV0IHFlO3RyeXtxZT14ZShiZS5zaGlmdCgpKX1jYXRjaChYZSl7cmV0dXJuIFBlKFhlKX1pZihudWxsPT09cWUpcmV0dXJuIEFlKG51bGwpO3RoaXMu'@;
put 'c3RvcmUucHV0Q29va2llKHFlLEFlKX07QWUoKX1jbG9uZShsdCxQZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihQZT1sdCxsdD1udWxsKSx0aGlzLnNlcmlhbGl6ZSgoYmUsQWUpPT57aWYoYmUpcmV0dXJuIFBlKGJlKTtLZS5kZXNlcmlhbGl6ZShBZSxsdCxQZSl9KX1jbG9uZVN5bmMobHQp'@;
put 'e2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jbG9uZVN5bmMoKTtpZighbHQuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgY2xvbmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7'@;
put 'cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhsdCl9cmVtb3ZlQWxsQ29va2llcyhsdCl7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24obHQpLGx0KTtjb25zdCBQZT10aGlzLnN0b3JlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQZS5yZW1vdmVBbGxDb29raWVzJiZQZS5yZW1vdmVBbGxDb29raWVzIT09'@;
put 'ay5wcm90b3R5cGUucmVtb3ZlQWxsQ29va2llcylyZXR1cm4gUGUucmVtb3ZlQWxsQ29va2llcyhsdCk7UGUuZ2V0QWxsQ29va2llcygoYmUsQWUpPT57aWYoYmUpcmV0dXJuIGx0KGJlKTtpZigwPT09QWUubGVuZ3RoKXJldHVybiBsdChudWxsKTtsZXQgVGU9MDtjb25zdCBxZT1bXTtmdW5j'@;
put 'dGlvbiBYZShVZSl7aWYoVWUmJnFlLnB1c2goVWUpLFRlKyssVGU9PT1BZS5sZW5ndGgpcmV0dXJuIGx0KHFlLmxlbmd0aD9xZVswXTpudWxsKX1BZS5mb3JFYWNoKFVlPT57UGUucmVtb3ZlQ29va2llKFVlLmRvbWFpbixVZS5wYXRoLFVlLmtleSxYZSl9KX0pfXN0YXRpYyBkZXNlcmlhbGl6'@;
put 'ZShsdCxQZSxiZSl7bGV0IEFlO2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoJiYoYmU9UGUsUGU9bnVsbCksVi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oYmUpLGJlKSwic3RyaW5nIj09dHlwZW9mIGx0KXtpZihBZT1mZShsdCksQWUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gYmUoQWUpfWVsc2Ug'@;
put 'QWU9bHQ7Y29uc3QgVGU9bmV3IEtlKFBlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpBZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6QWUuZW5hYmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjpBZS5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6QWUu'@;
put 'cHJlZml4U2VjdXJpdHl9KTtUZS5faW1wb3J0Q29va2llcyhBZSxxZT0+e2lmKHFlKXJldHVybiBiZShxZSk7YmUobnVsbCxUZSl9KX1zdGF0aWMgZGVzZXJpYWxpemVTeW5jKGx0LFBlKXtjb25zdCBiZT0ic3RyaW5nIj09dHlwZW9mIGx0P0pTT04ucGFyc2UobHQpOmx0LEFlPW5ldyBLZShQ'@;
put 'ZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6YmUucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOmJlLmVuYWJsZUxvb3NlTW9kZX0pO2lmKCFBZS5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3lu'@;
put 'YyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gQWUuX2ltcG9ydENvb2tpZXNTeW5jKGJlKSxBZX19ZnVuY3Rpb24gWWUoUWUpe3JldHVybiBmdW5jdGlvbiguLi5sdCl7aWYoIXRoaXMuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNo'@;
put 'cm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7bGV0IFBlLGJlO2lmKHRoaXNbUWVdKC4uLmx0LChBZSxUZSk9PntQZT1BZSxiZT1UZX0pLFBlKXRocm93IFBlO3JldHVybiBiZX19S2UuZnJvbUpTT049S2UuZGVzZXJpYWxpemVTeW5jLFsiX2ltcG9ydENvb2tpZXMiLCJjbG9uZSIs'@;
put 'ImdldENvb2tpZXMiLCJnZXRDb29raWVTdHJpbmciLCJnZXRTZXRDb29raWVTdHJpbmdzIiwicmVtb3ZlQWxsQ29va2llcyIsInNlcmlhbGl6ZSIsInNldENvb2tpZSJdLmZvckVhY2goUWU9PntLZS5wcm90b3R5cGVbUWVdPVkoS2UucHJvdG90eXBlW1FlXSl9KSxLZS5kZXNlcmlhbGl6ZT1Z'@;
put 'KEtlLmRlc2VyaWFsaXplKSxPLnZlcnNpb249QixPLkNvb2tpZUphcj1LZSxPLkNvb2tpZT1qZSxPLlN0b3JlPWssTy5NZW1vcnlDb29raWVTdG9yZT1FLE8ucGFyc2VEYXRlPVMsTy5mb3JtYXREYXRlPXYsTy5wYXJzZT1kZSxPLmZyb21KU09OPXhlLE8uZG9tYWluTWF0Y2g9dyxPLmRlZmF1'@;
put 'bHRQYXRoPUosTy5wYXRoTWF0Y2g9aixPLmdldFB1YmxpY1N1ZmZpeD1JLmdldFB1YmxpY1N1ZmZpeCxPLmNvb2tpZUNvbXBhcmU9TGUsTy5wZXJtdXRlRG9tYWluPVIoNzMyNCkucGVybXV0ZURvbWFpbixPLnBlcm11dGVQYXRoPWZ1bmN0aW9uKFFlKXtpZihWLnZhbGlkYXRlKFYuaXNTdHJp'@;
put 'bmcoUWUpKSwiLyI9PT1RZSlyZXR1cm5bIi8iXTtjb25zdCBsdD1bUWVdO2Zvcig7UWUubGVuZ3RoPjE7KXtjb25zdCBQZT1RZS5sYXN0SW5kZXhPZigiLyIpO2lmKDA9PT1QZSlicmVhaztRZT1RZS5zdWJzdHIoMCxQZSksbHQucHVzaChRZSl9cmV0dXJuIGx0LnB1c2goIi8iKSxsdH0sTy5j'@;
put 'YW5vbmljYWxEb21haW49cCxPLlByZWZpeFNlY3VyaXR5RW51bT1HLE8uUGFyYW1ldGVyRXJyb3I9Vi5QYXJhbWV0ZXJFcnJvcn0sNTc2MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazp6fT1SKDcwNDEpLEs9UigyMjI0KS55LEk9Uig3MzI0KS5wZXJtdXRlRG9t'@;
put 'YWluLGs9Uig4OTcxKS5VLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOkUsZ2V0VXRpbEluc3BlY3Q6an09UigxMjY5KTtjbGFzcyBWIGV4dGVuZHMgS3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0hMCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IFg9'@;
put 'RSgpO1gmJih0aGlzW1hdPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtqKEIpKHRoaXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKFgsVSxxLGVlKXtyZXR1cm4gZWUobnVsbCx0aGlzLmlkeFtYXSYmdGhpcy5pZHhbWF1bVV0/dGhpcy5pZHhbWF1bVV1bcV18fG51'@;
put 'bGw6dm9pZCAwKX1maW5kQ29va2llcyhYLFUscSxlZSl7Y29uc3QgdGU9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIHEmJihlZT1xLHE9ITApLCFYKXJldHVybiBlZShudWxsLFtdKTtsZXQgb2U7b2U9VT9mdW5jdGlvbih1ZSl7T2JqZWN0LmtleXModWUpLmZvckVhY2goY2U9PntpZihrKFUs'@;
put 'Y2UpKXtjb25zdCBHPXVlW2NlXTtmb3IoY29uc3QgYiBpbiBHKXRlLnB1c2goR1tiXSl9fSl9OmZ1bmN0aW9uKHVlKXtmb3IoY29uc3QgY2UgaW4gdWUpe2NvbnN0IEc9dWVbY2VdO2Zvcihjb25zdCBiIGluIEcpdGUucHVzaChHW2JdKX19O2NvbnN0IHNlPUkoWCxxKXx8W1hdLGhlPXRoaXMu'@;
put 'aWR4O3NlLmZvckVhY2godWU9Pntjb25zdCBjZT1oZVt1ZV07Y2UmJm9lKGNlKX0pLGVlKG51bGwsdGUpfXB1dENvb2tpZShYLFUpe3RoaXMuaWR4W1guZG9tYWluXXx8KHRoaXMuaWR4W1guZG9tYWluXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtYLmRvbWFpbl1bWC5wYXRoXXx8'@;
put 'KHRoaXMuaWR4W1guZG9tYWluXVtYLnBhdGhdPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W1guZG9tYWluXVtYLnBhdGhdW1gua2V5XT1YLFUobnVsbCl9dXBkYXRlQ29va2llKFgsVSxxKXt0aGlzLnB1dENvb2tpZShVLHEpfXJlbW92ZUNvb2tpZShYLFUscSxlZSl7dGhpcy5pZHhb'@;
put 'WF0mJnRoaXMuaWR4W1hdW1VdJiZ0aGlzLmlkeFtYXVtVXVtxXSYmZGVsZXRlIHRoaXMuaWR4W1hdW1VdW3FdLGVlKG51bGwpfXJlbW92ZUNvb2tpZXMoWCxVLHEpe3JldHVybiB0aGlzLmlkeFtYXSYmKFU/ZGVsZXRlIHRoaXMuaWR4W1hdW1VdOmRlbGV0ZSB0aGlzLmlkeFtYXSkscShudWxs'@;
put 'KX1yZW1vdmVBbGxDb29raWVzKFgpe3JldHVybiB0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpLFgobnVsbCl9Z2V0QWxsQ29va2llcyhYKXtjb25zdCBVPVtdLHE9dGhpcy5pZHg7T2JqZWN0LmtleXMocSkuZm9yRWFjaChlZT0+e09iamVjdC5rZXlzKHFbZWVdKS5mb3JFYWNoKHRlPT57'@;
put 'T2JqZWN0LmtleXMocVtlZV1bdGVdKS5mb3JFYWNoKG9lPT57bnVsbCE9PW9lJiZVLnB1c2gocVtlZV1bdGVdW29lXSl9KX0pfSksVS5zb3J0KChlZSx0ZSk9PihlZS5jcmVhdGlvbkluZGV4fHwwKS0odGUuY3JlYXRpb25JbmRleHx8MCkpLFgobnVsbCxVKX19ZnVuY3Rpb24gQihZKXtjb25z'@;
put 'dCBYPU9iamVjdC5rZXlzKFkpO2lmKDA9PT1YLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgVT0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKFkpLmZvckVhY2goKHEsZWUpPT57VSs9ZnVuY3Rpb24odGUsb2Up'@;
put 'e2xldCBoZT1gICAnJHt0ZX0nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMob2UpLmZvckVhY2goKHVlLGNlLEcpPT57aGUrPWZ1bmN0aW9uKGIsRCl7Y29uc3QgSD0iICAgICI7bGV0IE49YCR7SH0nJHtifSc6IFtPYmplY3Q6IG51bGwgcHJvdG90'@;
put 'eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhEKS5mb3JFYWNoKChnLEMsUyk9PntOKz1gICAgICAgJHtnfTogJHtEW2ddLmluc3BlY3QoKX1gLEM8Uy5sZW5ndGgtMSYmKE4rPSIsIiksTis9IlxuIn0pLE4rPWAke0h9fWAsTn0odWUsb2VbdWVdKSxjZTxHLmxlbmd0aC0xJiYoaGUrPSIs'@;
put 'IiksaGUrPSJcbiJ9KSxoZSs9IiAgfSIsaGV9KHEsWVtxXSksZWU8WC5sZW5ndGgtMSYmKFUrPSIsIiksVSs9IlxuIn0pLFUrPSJ9IixVfVsiZmluZENvb2tpZSIsImZpbmRDb29raWVzIiwicHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIs'@;
put 'InJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChZPT57Vi5wcm90b3R5cGVbWV09eihWLnByb3RvdHlwZVtZXSl9KSxPLm09Vn0sODk3MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLlU9ZnVuY3Rpb24oUix6KXtyZXR1cm4gej09PVJ8fDA9PT1SLmluZGV4T2Yoeikm'@;
put 'JigiLyI9PT16LnN1YnN0cigtMSl8fCIvIj09PVIuc3Vic3RyKHoubGVuZ3RoLDEpKX19LDczMjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzUyKTtPLnBlcm11dGVEb21haW49ZnVuY3Rpb24oSyxJKXtjb25zdCBrPXouZ2V0UHVibGljU3VmZml4KEsse2FsbG93U3BlY2lh'@;
put 'bFVzZURvbWFpbjpJfSk7aWYoIWspcmV0dXJuIG51bGw7aWYoaz09SylyZXR1cm5bS107Ii4iPT1LLnNsaWNlKC0xKSYmKEs9Sy5zbGljZSgwLC0xKSk7Y29uc3QgRT1LLnNsaWNlKDAsLShrLmxlbmd0aCsxKSkuc3BsaXQoIi4iKS5yZXZlcnNlKCk7bGV0IGo9aztjb25zdCBWPVtqXTtmb3Io'@;
put 'O0UubGVuZ3RoOylqPWAke0Uuc2hpZnQoKX0uJHtqfWAsVi5wdXNoKGopO3JldHVybiBWfX0sNzUyOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDYyNDQpLEs9WyJsb2NhbCIsImV4YW1wbGUiLCJpbnZhbGlkIiwibG9jYWxob3N0IiwidGVzdCJdLEk9WyJsb2NhbGhvc3QiLCJp'@;
put 'bnZhbGlkIl07Ty5nZXRQdWJsaWNTdWZmaXg9ZnVuY3Rpb24oayxFPXt9KXtjb25zdCBqPWsuc3BsaXQoIi4iKSxWPWpbai5sZW5ndGgtMV0sWT0hIUUuaWdub3JlRXJyb3I7aWYoRS5hbGxvd1NwZWNpYWxVc2VEb21haW4mJksuaW5jbHVkZXMoVikpe2lmKGoubGVuZ3RoPjEpcmV0dXJuYCR7'@;
put 'altqLmxlbmd0aC0yXX0uJHtWfWA7aWYoSS5pbmNsdWRlcyhWKSlyZXR1cm5gJHtWfWB9aWYoIVkmJksuaW5jbHVkZXMoVikpdGhyb3cgbmV3IEVycm9yKGBDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gdGhlIHB1YmxpYyBzdWZmaXggIiR7Vn0iIHdoaWNoIGlzIGEgc3BlY2lhbCB1c2UgZG9t'@;
put 'YWluLiBUbyBhbGxvdyB0aGlzLCBjb25maWd1cmUgeW91ciBDb29raWVKYXIgd2l0aCB7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRydWUsIHJlamVjdFB1YmxpY1N1ZmZpeGVzOiBmYWxzZX0uYCk7cmV0dXJuIHouZ2V0KGspfX0sMjIyNDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLnk9Y2xhc3N7'@;
put 'Y29uc3RydWN0b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoUix6LEssSSl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWZpbmRDb29raWVzKFIseixLLEkpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90IGltcGxl'@;
put 'bWVudGVkIil9cHV0Q29va2llKFIseil7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2llKFIseixLKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoUix6LEssSSl7'@;
put 'dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llcyhSLHosSyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUFsbENvb2tpZXMoUil7dGhyb3cgbmV3IEVycm9yKCJyZW1v'@;
put 'dmVBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoUil7dGhyb3cgbmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUgc2VyaWFsaXplZCkiKX19fSwxMjY5OihNLE8sUik9PntmdW5jdGlv'@;
put 'biB6KCl7dHJ5e3JldHVybiBSKDk1MzkpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBLKCl7cmV0dXJuIFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIil9Ty5nZXRVdGlsSW5zcGVjdD1mdW5jdGlvbihJLGs9e30pe2NvbnN0IEU9KGsucmVxdWlyZVV0aWx8fHop'@;
put 'KCk7cmV0dXJuIGZ1bmN0aW9uKGosVixCKXtyZXR1cm4gRT9FLmluc3BlY3QoaixWLEIpOkkoail9fSxPLmdldEN1c3RvbUluc3BlY3RTeW1ib2w9ZnVuY3Rpb24oST17fSl7cmV0dXJuKEkubG9va3VwQ3VzdG9tSW5zcGVjdFN5bWJvbHx8SykoKXx8ZnVuY3Rpb24oayl7Y29uc3QgRT0oay5y'@;
put 'ZXF1aXJlVXRpbHx8eikoKTtyZXR1cm4gRT9FLmluc3BlY3QuY3VzdG9tOm51bGx9KEkpfX0sNzY1MjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBSKGspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBrfWZ1bmN0aW9uIHooayl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBrfHxrIGlu'@;
put 'c3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIEsoayl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0cmluZy5jYWxsKGspfWNsYXNzIEkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi5FKXtzdXBlciguLi5FKX19Ty5QYXJhbWV0ZXJFcnJvcj1JLE8uaXNGdW5jdGlvbj1SLE8uaXNO'@;
put 'b25FbXB0eVN0cmluZz1mdW5jdGlvbihrKXtyZXR1cm4geihrKSYmIiIhPT1rfSxPLmlzRGF0ZT1mdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24oRSxqKXt0cnl7cmV0dXJuIEUgaW5zdGFuY2VvZiBqfWNhdGNoe3JldHVybiExfX0oayxEYXRlKSYmIm51bWJlciI9PXR5cGVvZihFPWsuZ2V0'@;
put 'VGltZSgpKSYmRSUxPT0wO3ZhciBFfSxPLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24oayl7cmV0dXJuIiI9PT1rfHxrIGluc3RhbmNlb2YgU3RyaW5nJiYiIj09PWsudG9TdHJpbmcoKX0sTy5pc1N0cmluZz16LE8uaXNPYmplY3Q9SyxPLnZhbGlkYXRlPWZ1bmN0aW9uKGssRSxqKXtpZihSKEUp'@;
put 'fHwoaj1FLEU9bnVsbCksSyhqKXx8KGo9e0Vycm9yOiJGYWlsZWQgQ2hlY2sifSksIWspe2lmKCFFKXRocm93IG5ldyBJKGopO0UobmV3IEkoaikpfX19LDQ1NjpNPT57TS5leHBvcnRzPSI0LjEuMyJ9LDcwNDE6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24o'@;
put 'Uil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKHosSyk9Pnthcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aF09KEksayk9PntpZihJKXJl'@;
put 'dHVybiBLKEkpO3ooayl9LGFyZ3VtZW50cy5sZW5ndGgrKyxSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO1IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfSxPLmZyb21Qcm9taXNlPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'ZnVuY3Rpb24oKXtjb25zdCB6PWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB6KXJldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0sYXJndW1lbnRzLmxlbmd0aC0tLFIuYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpLnRoZW4oSz0+eihudWxsLEspLHopfSwibmFtZSIse3ZhbHVlOlIubmFtZX0pfX0sNjcyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gej1PYmplY3QuYXNzaWdufHxmdW5j'@;
put 'dGlvbihWKXtmb3IodmFyIEIsWT0xLFg9YXJndW1lbnRzLmxlbmd0aDtZPFg7WSsrKWZvcih2YXIgVSBpbiBCPWFyZ3VtZW50c1tZXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixVKSYmKFZbVV09QltVXSk7cmV0dXJuIFZ9LHouYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'fSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihVLHEpe2Z1bmN0aW9uIGVlKHNlKXt0cnl7b2UoWC5uZXh0KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5e29lKFgudGhy'@;
put 'b3coc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIG9lKHNlKXt2YXIgaGU7c2UuZG9uZT9VKHNlLnZhbHVlKTooaGU9c2UudmFsdWUsaGUgaW5zdGFuY2VvZiBZP2hlOm5ldyBZKGZ1bmN0aW9uKHVlKXt1ZShoZSl9KSkudGhlbihlZSx0ZSl9b2UoKFg9WC5hcHBseShWLEJ8fFtdKSku'@;
put 'bmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFYsQil7dmFyIFksWCxVLHEsZWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVVswXSl0aHJvdyBVWzFdO3JldHVybiBVWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhy'@;
put 'b3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihoZSl7aWYoWSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtlZTspdHJ5e2lmKFk9MSxYJiYoVT0yJmhlWzBdP1gucmV0dXJuOmhlWzBdP1gudGhyb3d8fCgoVT1YLnJldHVybikmJlUuY2FsbChYKSwwKTpYLm5leHQpJiYhKFU9VS5jYWxsKFgsaGVbMV0pKS5k'@;
put 'b25lKXJldHVybiBVO3N3aXRjaChYPTAsVSYmKGhlPVsyJmhlWzBdLFUudmFsdWVdKSxoZVswXSl7Y2FzZSAwOmNhc2UgMTpVPWhlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZWUubGFiZWwrKyx7dmFsdWU6aGVbMV0sZG9uZTohMX07Y2FzZSA1OmVlLmxhYmVsKyssWD1oZVsxXSxoZT1bMF07Y29u'@;
put 'dGludWU7Y2FzZSA3OmhlPWVlLm9wcy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVT0oVT1lZS50cnlzKS5sZW5ndGg+MCYmVVtVLmxlbmd0aC0xXSl8fDYhPT1oZVswXSYmMiE9PWhlWzBdKSl7ZWU9MDtjb250aW51ZX1pZigzPT09aGVbMF0mJighVXx8aGVb'@;
put 'MV0+VVswXSYmaGVbMV08VVszXSkpe2VlLmxhYmVsPWhlWzFdO2JyZWFrfWlmKDY9PT1oZVswXSYmZWUubGFiZWw8VVsxXSl7ZWUubGFiZWw9VVsxXSxVPWhlO2JyZWFrfWlmKFUmJmVlLmxhYmVsPFVbMl0pe2VlLmxhYmVsPVVbMl0sZWUub3BzLnB1c2goaGUpO2JyZWFrfVVbMl0mJmVlLm9w'@;
put 'cy5wb3AoKSxlZS50cnlzLnBvcCgpO2NvbnRpbnVlfWhlPUIuY2FsbChWLGVlKX1jYXRjaCh1ZSl7aGU9WzYsdWVdLFg9MH1maW5hbGx5e1k9VT0wfWlmKDUmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJue3ZhbHVlOmhlWzBdP2hlWzFdOnZvaWQgMCxkb25lOiEwfX0oW29lLHNlXSl9fX07T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQ29udGV4dE1hbmFnZXI9dm9pZCAwO3ZhciBrPVIoNTkyOCksRT1SKDk3NzgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBWKEIsWSl7dGhpcy5zZXJ2ZXJVcmw9Qix0aGlzLnJlcXVlc3RDbGllbnQ9WSx0aGlz'@;
put 'LmRlZmF1bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Iiwi'@;
put 'U0FTIE1vZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRlIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVy'@;
put 'IGNvbnRleHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIE1vZGVsIE1h'@;
put 'bmFnZXIgbGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLEImJigwLGsuaXNVcmwpKEIpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImdldERlZmF1'@;
put 'bHRDb21wdXRlQ29udGV4dHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwiZ2V0RGVmYXVsdExhdW5jaGVyQ29udGV4dHMi'@;
put 'LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0c30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxWLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oQil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'KCl7dmFyIFk7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIpLEIpLmNhdGNoKGZ1bmN0aW9u'@;
put 'KFUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dHMuICIpfSldO2Nhc2UgMTpyZXR1cm5bMiwoKFk9WC5zZW50KCkucmVzdWx0KSYmWS5pdGVtcz9ZLml0ZW1zOltdKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJue2NyZWF0ZWRC'@;
put 'eTpVLmNyZWF0ZWRCeSxpZDpVLmlkLG5hbWU6VS5uYW1lLHZlcnNpb246VS52ZXJzaW9uLGF0dHJpYnV0ZXM6e319fSldfX0pfSl9LFYucHJvdG90eXBlLmdldExhdW5jaGVyQ29udGV4dHM9ZnVuY3Rpb24oQil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFk7'@;
put 'cmV0dXJuIEkodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9MTAwMDAiKSxCKS5jYXRjaChmdW5jdGlvbihVKXt0aHJv'@;
put 'dygwLEUucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9KV07Y2FzZSAxOnJldHVyblsyLCgoWT1YLnNlbnQoKS5yZXN1bHQpJiZZLml0ZW1zP1kuaXRlbXM6W10pLm1hcChmdW5jdGlvbihVKXtyZXR1cm57Y3JlYXRlZEJ5OlUuY3Jl'@;
put 'YXRlZEJ5LGlkOlUuaWQsbmFtZTpVLm5hbWUsdmVyc2lvbjpVLnZlcnNpb24sYXR0cmlidXRlczp7fX19KV19fSl9KX0sVi5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oQixZLFgsVSxxLGVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgdGUsb2Usc2UsaGUsdWU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShCKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoQix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkNvbXB1dGUg'@;
put 'Y29udGV4dCAnIi5jb25jYXQoQiwiJyBhbHJlYWR5IGV4aXN0cy4iKSksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dHMocSldO2Nhc2UgMTppZihjZS5zZW50KCkuZmluZChmdW5jdGlvbihHKXtyZXR1cm4gRy5uYW1lPT09Qn0pKXRocm93IG5ldyBFcnJvcigiQ29tcHV0ZSBjb250ZXh0ICci'@;
put 'LmNvbmNhdChCLCInIGFscmVhZHkgZXhpc3RzLiIpKTtyZXR1cm4gWT90aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1ZGVzKFkpP1szLDRdOls0LHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhxKV06WzMsNF07Y2FzZSAyOnJldHVybiBjZS5zZW50KCkuZmluZChmdW5jdGlvbihH'@;
put 'KXtyZXR1cm4gRy5uYW1lPT09WX0pP1szLDRdOih0ZT0iVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICIuY29uY2F0KFkpLFs0LHRoaXMuY3JlYXRlTGF1bmNoZXJDb250ZXh0KFksdGUsImRpcmVjdCIscSkuY2F0Y2goZnVuY3Rpb24oRyl7dGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBj'@;
put 'cmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAiLmNvbmNhdChHKSl9KV0pO2Nhc2UgMzppZighKG9lPWNlLnNlbnQoKSl8fCFvZS5uYW1lKXRocm93IG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4iKTtZPW9lLm5hbWUsY2UubGFiZWw9NDtjYXNlIDQ6'@;
put 'cmV0dXJuIHNlPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LHEmJihzZS5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQocSkpLGhlPXtyZXVzZVNlcnZlclByb2Nlc3NlczohMH0sWCYmKGhlPXooeih7fSxoZSkse3J1blNlcnZlckFzOlh9KSksdWU9e25hbWU6Qixs'@;
put 'YXVuY2hDb250ZXh0Ontjb250ZXh0TmFtZTpZfHwiIn0sYXR0cmlidXRlczpoZX0sZWUmJmVlLmxlbmd0aD91ZS5hdXRob3JpemVkVXNlcnM9ZWU6dWUuYXV0aG9yaXplQWxsQXV0aGVudGljYXRlZFVzZXJzPSEwLFUmJih1ZS5lbnZpcm9ubWVudD17YXV0b0V4ZWNMaW5lczpVfSksWzQsdGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cyIpLHVlLHEpLmNhdGNoKGZ1bmN0aW9uKEcpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShHLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSldO2Nh'@;
put 'c2UgNTpyZXR1cm5bMixjZS5zZW50KCkucmVzdWx0XX19KX0pfSxWLnByb3RvdHlwZS5jcmVhdGVMYXVuY2hlckNvbnRleHQ9ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIHZvaWQgMD09PVgmJihYPSJkaXJlY3QiKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlO3Jl'@;
put 'dHVybiBJKHRoaXMsZnVuY3Rpb24odGUpe3N3aXRjaCh0ZS5sYWJlbCl7Y2FzZSAwOmlmKCFCKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0aGlzLmlzRGVmYXVsdENvbnRleHQoQix0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLCJMYXVu'@;
put 'Y2hlciBjb250ZXh0ICciLmNvbmNhdChCLCInIGFscmVhZHkgZXhpc3RzLiIpKSxbNCx0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoVSldO2Nhc2UgMTppZih0ZS5zZW50KCkuZmluZChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLm5hbWU9PT1CfSkpdGhyb3cgbmV3IEVycm9yKCJMYXVuY2hlciBj'@;
put 'b250ZXh0ICciLmNvbmNhdChCLCInIGFscmVhZHkgZXhpc3RzLiIpKTtyZXR1cm4gcT17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxVJiYocS5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoVSkpLGVlPXtuYW1lOkIsZGVzY3JpcHRpb246WSxsYXVuY2hUeXBlOlh9'@;
put 'LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2xhdW5jaGVyL2NvbnRleHRzIiksZWUsVSkuY2F0Y2goZnVuY3Rpb24ob2Upe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShvZSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4'@;
put 'dC4gIil9KV07Y2FzZSAyOnJldHVyblsyLHRlLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFYucHJvdG90eXBlLmVkaXRDb21wdXRlQ29udGV4dD1mdW5jdGlvbihCLFksWCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFUscSxlZSx0ZTtyZXR1cm4gSSh0aGlzLGZ1'@;
put 'bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEIpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRWRpdGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5v'@;
put 'dCBhbGxvd2VkLiIsITApLFs0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoQixYKV07Y2FzZSAxOnJldHVybihVPW9lLnNlbnQoKSk/WzMsM106WzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5SWQoWS5pZCxYKV07Y2FzZSAyOlU9b2Uuc2VudCgpLG9lLmxhYmVsPTM7Y2FzZSAzOnJl'@;
put 'dHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQoVS5pZCksWCkuY2F0Y2goZnVuY3Rpb24oc2Upe3Rocm93IHNlJiY0MDQ9PT1zZS5zdGF0dXM/bmV3IEVycm9yKCJUaGUgY29udGV4dCAnIi5j'@;
put 'b25jYXQoQiwiJyB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLiIpKTpzZX0pXTtjYXNlIDQ6cmV0dXJuIHE9b2Uuc2VudCgpLHRlPXEuZXRhZyxbNCx0aGlzLnJlcXVlc3RDbGllbnQucHV0KCIvY29tcHV0ZS9jb250ZXh0cy8iLmNvbmNhdCgoZWU9cS5yZXN1bHQpLmlkKSx6KHooeih7'@;
put 'fSxlZSksWSkse2F0dHJpYnV0ZXM6eih6KHt9LGVlLmF0dHJpYnV0ZXMpLFkuYXR0cmlidXRlcyl9KSxYLHsiSWYtTWF0Y2giOnRlfSldO2Nhc2UgNTpyZXR1cm5bMixvZS5zZW50KCldfX0pfSl9LFYucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlOYW1lPWZ1bmN0aW9uKEIsWSl7cmV0'@;
put 'dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFg7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihVKXtzd2l0Y2goVS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCcvY29tcHV0ZS9jb250ZXh0'@;
put 'cz9maWx0ZXI9ZXEobmFtZSwgIicpLmNvbmNhdChCLCciKScpLFkpLmNhdGNoKGZ1bmN0aW9uKHEpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShxLCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pXTtjYXNlIDE6aWYoIShYPVUuc2VudCgpLnJlc3Vs'@;
put 'dCl8fCFYLml0ZW1zfHwhWC5pdGVtcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgY29udGV4dCAnIi5jb25jYXQoQiwiJyB3YXMgbm90IGZvdW5kIGF0ICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIicuIikpO3JldHVyblsyLFguaXRlbXNbMF1dfX0pfSl9LFYucHJvdG90eXBlLmdl'@;
put 'dENvbXB1dGVDb250ZXh0QnlJZD1mdW5jdGlvbihCLFkpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0'@;
put 'aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KEIpLFkpLmNhdGNoKGZ1bmN0aW9uKFUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBpZC4gIil9KV07Y2FzZSAxOnJldHVyblsyLFguc2Vu'@;
put 'dCgpLnJlc3VsdF19fSl9KX0sVi5wcm90b3R5cGUuZ2V0RXhlY3V0YWJsZUNvbnRleHRzPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFgsVSxxLGVlLHRlLG9lLHNlLHVlLGNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNo'@;
put 'KEcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiKSxZPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKGZ1bmN0aW9uKGIpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdl'@;
put 'KShiLCJFcnJvciB3aGlsZSBmZXRjaGluZyBjb21wdXRlIGNvbnRleHRzLiIpfSldO2Nhc2UgMTpYPUcuc2VudCgpLnJlc3VsdCxxPVtdLGVlPShVPVguaXRlbXN8fFtdKS5tYXAoZnVuY3Rpb24oYil7dmFyIEQ9WyIlcHV0ICY9c3lzdXNlcmlkOyJdO3JldHVybiBmdW5jdGlvbigpe3JldHVy'@;
put 'biBCKCJ0ZXN0LSIuY29uY2F0KGIubmFtZSksRCxiLm5hbWUsWSxudWxsLCExLCEwLCEwKS5jYXRjaChmdW5jdGlvbihIKXtyZXR1cm4gSH0pfX0pLHRlPVtdLG9lPTAsc2U9ZWUsRy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gb2U8c2UubGVuZ3RoPyhjZT0odWU9dGUpLnB1c2gsWzQsKDAsc2Vb'@;
put 'b2VdKSgpXSk6WzMsNV07Y2FzZSAzOmNlLmFwcGx5KHVlLFtHLnNlbnQoKV0pLEcubGFiZWw9NDtjYXNlIDQ6cmV0dXJuIG9lKyssWzMsMl07Y2FzZSA1OnJldHVybiB0ZS5mb3JFYWNoKGZ1bmN0aW9uKGIsRCl7aWYoYiYmYi5sb2cpdHJ5e3ZhciBOPSIiLGc9Yi5sb2cuc3BsaXQoIlxuIiku'@;
put 'ZmluZChmdW5jdGlvbihDKXtyZXR1cm4gQy5zdGFydHNXaXRoKCJTWVNVU0VSSUQ9Iil9KTtnJiYoTj1nLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxxLnB1c2goe2NyZWF0ZWRCeTpVW0RdLmNyZWF0ZWRCeSxpZDpVW0RdLmlkLG5hbWU6VVtEXS5uYW1lLHZlcnNpb246VVtEXS52ZXJzaW9u'@;
put 'LGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpOfX0pKX1jYXRjaChDKXt0aHJvdyBDfX0pLFsyLHFdfX0pfSl9LFYucHJvdG90eXBlLmRlbGV0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEIsWSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFgsVTtyZXR1cm4gSSh0'@;
put 'aGlzLGZ1bmN0aW9uKHEpe3N3aXRjaChxLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShCKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoQix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkRlbGV0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMg'@;
put 'aXMgbm90IGFsbG93ZWQuIiwhMCksWD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxZJiYoWC5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoWSkpLFs0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoQixZKV07Y2FzZSAxOnJldHVybiBVPXEuc2VudCgpLFs0'@;
put 'LHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQoVS5pZCksWSldO2Nhc2UgMjpyZXR1cm5bMixxLnNlbnQoKV19fSl9KX0sVi5wcm90b3R5cGUudmFsaWRhdGVDb250ZXh0TmFtZT1mdW5jdGlvbihC'@;
put 'KXtpZighQil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKX0sVi5wcm90b3R5cGUuaXNEZWZhdWx0Q29udGV4dD1mdW5jdGlvbihCLFksWCxVKXtpZih2b2lkIDA9PT1ZJiYoWT10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMpLHZvaWQgMD09PVgmJihYPSIi'@;
put 'KSx2b2lkIDA9PT1VJiYoVT0hMSksWS5pbmNsdWRlcyhCKSl0aHJvdyBuZXcgRXJyb3IoIiIuY29uY2F0KFgpLmNvbmNhdChVPyJcbkRlZmF1bHQgY29udGV4dHM6IitZLm1hcChmdW5jdGlvbihxLGVlKXtyZXR1cm4iXG4iLmNvbmNhdChlZSsxLCIuICIpLmNvbmNhdChxKX0pOiIiKSl9LFZ9'@;
put 'KCk7Ty5Db250ZXh0TWFuYWdlcj1qfSw4MzA2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFgsVSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24gc2UoY2Upe3Ry'@;
put 'eXt1ZShlZS5uZXh0KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIGhlKGNlKXt0cnl7dWUoZWUudGhyb3coY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gdWUoY2Upe3ZhciBHO2NlLmRvbmU/dGUoY2UudmFsdWUpOihHPWNlLnZhbHVlLEcgaW5zdGFuY2VvZiBxP0c6bmV3IHEo'@;
put 'ZnVuY3Rpb24oYil7YihHKX0pKS50aGVuKHNlLGhlKX11ZSgoZWU9ZWUuYXBwbHkoWCxVfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihYLFUpe3ZhciBxLGVlLHRlLG9lLHNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRo'@;
put 'cm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvZT17bmV4dDpoZSgwKSx0aHJvdzpoZSgxKSxyZXR1cm46aGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihvZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvZTtm'@;
put 'dW5jdGlvbiBoZSh1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYocSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtzZTspdHJ5e2lmKHE9MSxlZSYmKHRlPTImR1swXT9lZS5yZXR1cm46R1swXT9l'@;
put 'ZS50aHJvd3x8KCh0ZT1lZS5yZXR1cm4pJiZ0ZS5jYWxsKGVlKSwwKTplZS5uZXh0KSYmISh0ZT10ZS5jYWxsKGVlLEdbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2goZWU9MCx0ZSYmKEc9WzImR1swXSx0ZS52YWx1ZV0pLEdbMF0pe2Nhc2UgMDpjYXNlIDE6dGU9RzticmVhaztjYXNlIDQ6'@;
put 'cmV0dXJuIHNlLmxhYmVsKysse3ZhbHVlOkdbMV0sZG9uZTohMX07Y2FzZSA1OnNlLmxhYmVsKyssZWU9R1sxXSxHPVswXTtjb250aW51ZTtjYXNlIDc6Rz1zZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1zZS50cnlzKS5sZW5ndGg+MCYm'@;
put 'dGVbdGUubGVuZ3RoLTFdKXx8NiE9PUdbMF0mJjIhPT1HWzBdKSl7c2U9MDtjb250aW51ZX1pZigzPT09R1swXSYmKCF0ZXx8R1sxXT50ZVswXSYmR1sxXTx0ZVszXSkpe3NlLmxhYmVsPUdbMV07YnJlYWt9aWYoNj09PUdbMF0mJnNlLmxhYmVsPHRlWzFdKXtzZS5sYWJlbD10ZVsxXSx0ZT1H'@;
put 'O2JyZWFrfWlmKHRlJiZzZS5sYWJlbDx0ZVsyXSl7c2UubGFiZWw9dGVbMl0sc2Uub3BzLnB1c2goRyk7YnJlYWt9dGVbMl0mJnNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlfUc9VS5jYWxsKFgsc2UpfWNhdGNoKGIpe0c9WzYsYl0sZWU9MH1maW5hbGx5e3E9dGU9MH1pZig1'@;
put 'JkdbMF0pdGhyb3cgR1sxXTtyZXR1cm57dmFsdWU6R1swXT9HWzFdOnZvaWQgMCxkb25lOiEwfX0oW3VlLGNlXSl9fX0sST10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKFgsVSxxKXtpZihxfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGVlLHRlPTAsb2U9VS5sZW5n'@;
put 'dGg7dGU8b2U7dGUrKykhZWUmJnRlIGluIFV8fChlZXx8KGVlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFUsMCx0ZSkpLGVlW3RlXT1VW3RlXSk7cmV0dXJuIFguY29uY2F0KGVlfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChVKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBUzlBcGlDbGllbnQ9dm9pZCAwO3ZhciBrPVIoNzc1NyksRT1SKDYyMzApLGo9Uig3OTUpLFY9Uig1OTI4KSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWChVLHEsZWUpe3RoaXMuc2VydmVyVXJsPVUsdGhpcy5qb2JzUGF0aD1xLFUmJigwLFYuaXNV'@;
put 'cmwpKFUpLHRoaXMucmVxdWVzdENsaWVudD1uZXcgai5TYXM5UmVxdWVzdENsaWVudChVLGVlKX1yZXR1cm4gWC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue3NlcnZlclVybDp0aGlzLnNlcnZlclVybH19LFgucHJvdG90eXBlLnNldENvbmZpZz1mdW5jdGlvbihVKXtV'@;
put 'JiYodGhpcy5zZXJ2ZXJVcmw9VSl9LFgucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24oVSxxLGVlKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGUsb2Usc2UsaGUsdWUsY2UsRztyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxh'@;
put 'YmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmxvZ2luKHEsZWUsdGhpcy5qb2JzUGF0aCldO2Nhc2UgMTpyZXR1cm4gYi5zZW50KCksdGU9WyJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRlZCBzYXNqcyBydW4nOyIsInJ1bjsiXSxvZT1Z'@;
put 'KEkoSShbXSxVLCEwKSx0ZSwhMCkuam9pbigiXG4iKSksc2U9Ii9Vc2VyIEZvbGRlcnMvIi5jb25jYXQocSwiL015IEZvbGRlci9zYXNqcy9ydW5uZXIiKSxoZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitvZS5nZXRCb3VuZGFyeSgpLHVlPW9lLmdldExlbmd0aFN5bmMoKSxj'@;
put 'ZT17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOmhlLCJDb250ZW50LUxlbmd0aCI6dWUsQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LEc9IiIuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3JhbT0iK3NlKyImX2Rl'@;
put 'YnVnPWxvZyIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KEcsb2Usdm9pZCAwLGhlLGNlKV07Y2FzZSAyOnJldHVyblsyLGIuc2VudCgpLnJlc3VsdF19fSl9KX0sWH0oKTtPLlNBUzlBcGlDbGllbnQ9Qjt2YXIgWT1mdW5jdGlvbihYKXt2YXIgVT1uZXcgRSxxPSJzYXNqcy1leGVjdXRl'@;
put 'LXNhczktIi5jb25jYXQoKDAsay5nZW5lcmF0ZVRpbWVzdGFtcCkoIiIpLCIuc2FzIik7cmV0dXJuIFUuYXBwZW5kKHEsWCx7ZmlsZW5hbWU6cSxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSxVfX0sOTgyMTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1S'@;
put 'KDUxMDgpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGNlLEcsYixEKXtyZXR1cm4gbmV3KGJ8fChiPVByb21pc2UpKShmdW5jdGlvbihILE4pe2Z1bmN0aW9uIGcodil7dHJ5e1MoRC5uZXh0KHYpKX1jYXRjaChwKXtOKHApfX1mdW5jdGlvbiBDKHYpe3RyeXtTKEQudGhyb3co'@;
put 'dikpfWNhdGNoKHApe04ocCl9fWZ1bmN0aW9uIFModil7dmFyIHA7di5kb25lP0godi52YWx1ZSk6KHA9di52YWx1ZSxwIGluc3RhbmNlb2YgYj9wOm5ldyBiKGZ1bmN0aW9uKHcpe3cocCl9KSkudGhlbihnLEMpfVMoKEQ9RC5hcHBseShjZSxHfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0'@;
put 'aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihjZSxHKXt2YXIgYixELEgsTixnPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkhbMF0pdGhyb3cgSFsxXTtyZXR1cm4gSFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBOPXtuZXh0OkMoMCksdGhyb3c6QygxKSxyZXR1cm46QygyKX0s'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKE5bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksTjtmdW5jdGlvbiBDKFMpe3JldHVybiBmdW5jdGlvbih2KXtyZXR1cm4gZnVuY3Rpb24ocCl7aWYoYil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMg'@;
put 'YWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtnOyl0cnl7aWYoYj0xLEQmJihIPTImcFswXT9ELnJldHVybjpwWzBdP0QudGhyb3d8fCgoSD1ELnJldHVybikmJkguY2FsbChEKSwwKTpELm5leHQpJiYhKEg9SC5jYWxsKEQscFsxXSkpLmRvbmUpcmV0dXJuIEg7c3dpdGNoKEQ9MCxIJiYocD1b'@;
put 'MiZwWzBdLEgudmFsdWVdKSxwWzBdKXtjYXNlIDA6Y2FzZSAxOkg9cDticmVhaztjYXNlIDQ6cmV0dXJuIGcubGFiZWwrKyx7dmFsdWU6cFsxXSxkb25lOiExfTtjYXNlIDU6Zy5sYWJlbCsrLEQ9cFsxXSxwPVswXTtjb250aW51ZTtjYXNlIDc6cD1nLm9wcy5wb3AoKSxnLnRyeXMucG9wKCk7'@;
put 'Y29udGludWU7ZGVmYXVsdDppZighKChIPShIPWcudHJ5cykubGVuZ3RoPjAmJkhbSC5sZW5ndGgtMV0pfHw2IT09cFswXSYmMiE9PXBbMF0pKXtnPTA7Y29udGludWV9aWYoMz09PXBbMF0mJighSHx8cFsxXT5IWzBdJiZwWzFdPEhbM10pKXtnLmxhYmVsPXBbMV07YnJlYWt9aWYoNj09PXBb'@;
put 'MF0mJmcubGFiZWw8SFsxXSl7Zy5sYWJlbD1IWzFdLEg9cDticmVha31pZihIJiZnLmxhYmVsPEhbMl0pe2cubGFiZWw9SFsyXSxnLm9wcy5wdXNoKHApO2JyZWFrfUhbMl0mJmcub3BzLnBvcCgpLGcudHJ5cy5wb3AoKTtjb250aW51ZX1wPUcuY2FsbChjZSxnKX1jYXRjaCh3KXtwPVs2LHdd'@;
put 'LEQ9MH1maW5hbGx5e2I9SD0wfWlmKDUmcFswXSl0aHJvdyBwWzFdO3JldHVybnt2YWx1ZTpwWzBdP3BbMV06dm9pZCAwLGRvbmU6ITB9fShbUyx2XSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTVml5YUFwaUNsaWVudD12b2lkIDA7'@;
put 'dmFyIEU9Uig1OTI4KSxqPVIoNjIzMCksVj1SKDEzOTUpLEI9Uig2OTAzKSxZPVIoNjcyKSxYPVIoOTA5NyksVT1SKDk3NzgpLHE9UigxMzQzKSxlZT1SKDcwNCksdGU9Uig2NDk2KSxvZT1SKDE2MjIpLHNlPVIoMzU2OSksaGU9UigzNjYpLHVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gY2UoRyxi'@;
put 'LEQsSCl7dGhpcy5zZXJ2ZXJVcmw9Ryx0aGlzLnJvb3RGb2xkZXJOYW1lPWIsdGhpcy5jb250ZXh0TmFtZT1ELHRoaXMucmVxdWVzdENsaWVudD1ILHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vzc2lvbk1hbmFnZXI9bmV3IEIuU2Vzc2lvbk1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250'@;
put 'ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IFkuQ29udGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmZvbGRlck1hcD1uZXcgTWFwLEcmJigwLEUuaXNVcmwpKEcpfXJldHVybiBjZS5wcm90b3R5cGUu'@;
put 'YXBwZW5kUmVxdWVzdD1mdW5jdGlvbihHLGIsRCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoRyxiLEQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UucHJvdG90eXBlLCJkZWJ1ZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z30sc2V0OmZ1bmN0aW9uKEcp'@;
put 'e3RoaXMuX2RlYnVnPUcsdGhpcy5zZXNzaW9uTWFuYWdlciYmKHRoaXMuc2Vzc2lvbk1hbmFnZXIuZGVidWc9Ryl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksY2UucHJvdG90eXBlLmdldEpvYnNJbkZvbGRlcj1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQoRyk6Ryx0aGlzLmZvbGRlck1hcC5n'@;
put 'ZXQoYik/WzIsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpXTpbNCx0aGlzLnBvcHVsYXRlRm9sZGVyTWFwKGIpXTtjYXNlIDE6cmV0dXJuIEQuc2VudCgpLFsyLHRoaXMuZm9sZGVyTWFwLmdldChiKV19fSl9KX0sY2UucHJvdG90eXBlLmdldENvbmZpZz1mdW5jdGlvbigpe3JldHVybntzZXJ2ZXJV'@;
put 'cmw6dGhpcy5zZXJ2ZXJVcmwscm9vdEZvbGRlck5hbWU6dGhpcy5yb290Rm9sZGVyTmFtZX19LGNlLnByb3RvdHlwZS5zZXRDb25maWc9ZnVuY3Rpb24oRyxiKXtHJiYodGhpcy5zZXJ2ZXJVcmw9RyksYiYmKHRoaXMucm9vdEZvbGRlck5hbWU9Yil9LGNlLnByb3RvdHlwZS5nZXRDb21wdXRl'@;
put 'Q29udGV4dHM9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRzKEcpXTtjYXNl'@;
put 'IDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0c30sY2UucHJvdG90eXBlLmdldExhdW5jaGVyQ29udGV4dHM9'@;
put 'ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0TGF1bmNoZXJDb250ZXh0cyhHKV07Y2FzZSAxOnJldHVy'@;
put 'blsyLGIuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0RXhlY3V0YWJsZUNvbnRleHRzPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1'@;
put 'cm4gYj10aGlzLmV4ZWN1dGVTY3JpcHQuYmluZCh0aGlzKSxbNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldEV4ZWN1dGFibGVDb250ZXh0cyhiLEcpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9uPWZ1bmN0aW9uKEcsYil7cmV0dXJu'@;
put 'IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSCxOO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxiJiYoRC5BdXRob3JpemF0aW9uPSJCZWFyZXIg'@;
put 'Ii5jb25jYXQoYikpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIixiKV07Y2FzZSAxOmlmKEg9Zy5zZW50KCkucmVzdWx0LCEoTj1ILml0ZW1zJiZILml0ZW1zLmxlbmd0aD9ILml0ZW1zLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEMu'@;
put 'bmFtZT09PUd9KTpudWxsKSl0aHJvdyBuZXcgRXJyb3IoIkV4ZWN1dGlvbiBjb250ZXh0ICIuY29uY2F0KEcsIiBub3QgZm91bmQuIikpO3JldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIvY29tcHV0ZS9jb250ZXh0cy8iLmNvbmNhdChOLmlkLCIvc2Vzc2lvbnMiKSx7fSxiKV07'@;
put 'Y2FzZSAyOnJldHVyblsyLGcuc2VudCgpLnJlc3VsdF19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEcsYixELEgsTixnKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRj'@;
put 'aChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChHLGIsRCxILE4sZyldO2Nhc2UgMTpyZXR1cm5bMixDLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUxhdW5jaGVyQ29udGV4dD1mdW5jdGlvbihHLGIsRCxI'@;
put 'KXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9ImRpcmVjdCIpLEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuY3JlYXRlTGF1bmNoZXJDb250ZXh0'@;
put 'KEcsYixELEgpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5lZGl0Q29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgu'@;
put 'bGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmVkaXRDb21wdXRlQ29udGV4dChHLGIsRCldO2Nhc2UgMTpyZXR1cm5bMixILnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmRlbGV0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZGVsZXRlQ29tcHV0ZUNvbnRleHQoRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5w'@;
put 'cm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihHLGIsRCxILE4sZyxDLFMsdixwLHcpe3JldHVybiB2b2lkIDA9PT1OJiYoTj1udWxsKSx2b2lkIDA9PT1nJiYoZz0hMSksdm9pZCAwPT09QyYmKEM9ITEpLHZvaWQgMD09PVMmJihTPSEwKSx2b2lkIDA9PT1wJiYocD0hMSksSSh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEope3JldHVyblsyLCgwLG9lLmV4ZWN1dGVPbkNvbXB1dGVBcGkpKHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9vdEZvbGRlck5hbWUsRyxiLEQsSCxOLGcsQyxTLHYs'@;
put 'cCx3KV19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Rm9sZGVyPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5n'@;
put 'ZXQoIi9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iLmNvbmNhdChHKSxiKS50aGVuKGZ1bmN0aW9uKEgpe3JldHVybiBILnJlc3VsdH0pXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKEcsYixELEgsTil7cmV0dXJu'@;
put 'IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsQztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6aWYoIUQmJiFIKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7'@;
put 'cmV0dXJuIEh8fCFEP1szLDJdOls0LHRoaXMuZ2V0Rm9sZGVyVXJpKEQsTildO2Nhc2UgMTpIPVMuc2VudCgpLFMubGFiZWw9MjtjYXNlIDI6cmV0dXJuIGc9e0FjY2VwdDoiYXBwbGljYXRpb24vdm5kLnNhcy5maWxlK2pzb24iLCJDb250ZW50LURpc3Bvc2l0aW9uIjonZmlsZW5hbWU9Iicu'@;
put 'Y29uY2F0KEcsJyI7Jyl9LChDPW5ldyBqKS5hcHBlbmQoImZpbGUiLGIsRyksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJVcmk9Ii5jb25jYXQoSCwiJnR5cGVEZWZOYW1lPWZpbGUjcmF3VXBsb2FkIiksQyxOLCJtdWx0aXBhcnQvZm9ybS1k'@;
put 'YXRhOyBib3VuZGFyeT0iK0MuX2JvdW5kYXJ5LGcpXTtjYXNlIDM6cmV0dXJuWzIsUy5zZW50KCkucmVzdWx0XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlRm9sZGVyPWZ1bmN0aW9uKEcsYixELEgsTil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsQyxT'@;
put 'LHYsdztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEope3N3aXRjaChKLmxhYmVsKXtjYXNlIDA6aWYoZz16LmxvZ2dlcnx8SywhYiYmIUQpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gRHx8IWI/WzMsNl06WzQs'@;
put 'dGhpcy5nZXRGb2xkZXJVcmkoYixIKV07Y2FzZSAxOmlmKEQ9Si5zZW50KCkpcmV0dXJuWzMsM107aWYoZy5pbmZvKCJQYXJlbnQgZm9sZGVyIGF0IHBhdGggJyIuY29uY2F0KGIsIicgaXMgbm90IHByZXNlbnQuIikpLEM9Yi5zdWJzdHJpbmcoMCxiLmxhc3RJbmRleE9mKCIvIikpLFM9IiIu'@;
put 'Y29uY2F0KGIuc3BsaXQoIi8iKS5wb3AoKSksIiI9PT1DKXRocm93IG5ldyBWLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yKGIsdGhpcy5zZXJ2ZXJVcmwsSCk7cmV0dXJuIGcuaW5mbygiQ3JlYXRpbmcgcGFyZW50IGZvbGRlcjpcbiciLmNvbmNhdChTLCInIGluICciKS5jb25jYXQoQywiJyIp'@;
put 'KSxbNCx0aGlzLmNyZWF0ZUZvbGRlcihTLEMsdm9pZCAwLEgpXTtjYXNlIDI6cmV0dXJuIHY9Si5zZW50KCksZy5pbmZvKCJQYXJlbnQgZm9sZGVyICciLmNvbmNhdChTLCInIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLiIpKSxEPSIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KHYu'@;
put 'aWQpLFszLDZdO2Nhc2UgMzpyZXR1cm4gTj9bNCx0aGlzLmdldEZvbGRlclVyaShiKyIvIitHLEgpXTpbMyw2XTtjYXNlIDQ6cmV0dXJuIEouc2VudCgpP1s0LHRoaXMuZGVsZXRlRm9sZGVyKGIrIi8iK0csSCldOlszLDZdO2Nhc2UgNTpKLnNlbnQoKSxKLmxhYmVsPTY7Y2FzZSA2OnJldHVy'@;
put 'bls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIvZm9sZGVycy9mb2xkZXJzP3BhcmVudEZvbGRlclVyaT0iLmNvbmNhdChEKSx7bmFtZTpHLHR5cGU6ImZvbGRlciJ9LEgpLmNhdGNoKGZ1bmN0aW9uKG5lKXt2YXIgZGU9bmUubWVzc2FnZSxmZT1uZS5yZXNwb25zZTtpZihkZSYmZmUmJmZl'@;
put 'LmRhdGEmJmZlLmRhdGEubWVzc2FnZSl7dmFyIHhlPWZlLnN0YXR1cyxMZT1bZGUsZmUuZGF0YS5tZXNzYWdlXS5tYXAoZnVuY3Rpb24oRmUpe3JldHVybi9cLiQvLnRlc3QoRmUpP0ZlOiIiLmNvbmNhdChGZSwiLiIpfSk7dGhyb3cgTnx8NDA5IT09eGV8fExlLnB1c2goJ1RvIG92ZXJyaWRl'@;
put 'LCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLExlLmpvaW4oIiAiKX10aHJvdyBuZX0pXTtjYXNlIDc6cmV0dXJuIHc9Si5zZW50KCkucmVzdWx0LFs0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoIiIuY29uY2F0KGIsIi8iKS5jb25jYXQoRyksSCldO2Nhc2UgODpyZXR1cm4g'@;
put 'Si5zZW50KCksWzIsd119fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUpvYkRlZmluaXRpb249ZnVuY3Rpb24oRyxiLEQsSCxOKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6aWYo'@;
put 'IUQmJiFIKXRocm93IG5ldyBFcnJvcigiUGF0aCB0byBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7cmV0dXJuIEh8fCFEP1szLDJdOls0LHRoaXMuZ2V0Rm9sZGVyVXJpKEQsTildO2Nhc2UgMTpIPWcuc2VudCgpLGcubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzQs'@;
put 'dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvam9iRGVmaW5pdGlvbnMvZGVmaW5pdGlvbnM/cGFyZW50Rm9sZGVyVXJpPSIpLmNvbmNhdChIKSx7bmFtZTpHLHBhcmFtZXRlcnM6W3tuYW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNI'@;
put 'QVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOmJ9LE4pXTtjYXNlIDM6cmV0dXJuWzIsZy5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRBdXRoQ29kZT1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXt2YXIgYixEPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybiBiPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL1NBU0xvZ29uL29hdXRoL2F1dGhvcml6ZT9jbGllbnRfaWQ9IikuY29uY2F0KEcsIiZyZXNwb25zZV90eXBlPWNv'@;
put 'ZGUiKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGIsdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihmdW5jdGlvbihOKXtyZXR1cm4gTi5yZXN1bHR9KS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybiBJKEQsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2O3JldHVybiBrKHRo'@;
put 'aXMsZnVuY3Rpb24ocCl7c3dpdGNoKHAubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZz0iIiwoMCxYLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKShOKT9bNCx0aGlzLnJlcXVlc3RDbGllbnQuYXV0aG9yaXplKE4pXTpbMywyXTtjYXNlIDE6cmV0dXJuIEM9cC5zZW50KCksUz1DLnNwbGl0KCI8Ym9k'@;
put 'eT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLCh2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9UyxbMixnPXYucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHRdO2Nhc2UgMjpyZXR1cm4gUz1OLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgi'@;
put 'PC9ib2R5PiIpWzBdLCh2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9Uyx2JiYoZz12LnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0KSxbMixnXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pXTtjYXNlIDE6cmV0dXJu'@;
put 'WzIsSC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtyZXR1cm5bMiwoMCxzZS5nZXRBY2Nlc3NUb2tlbkZvclZpeWEp'@;
put 'KHRoaXMucmVxdWVzdENsaWVudCxHLGIsRCldfSl9KX0sY2UucHJvdG90eXBlLnJlZnJlc2hUb2tlbnM9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuWzIsKDAsaGUucmVmcmVzaFRv'@;
put 'a2Vuc0ZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxHLGIsRCldfSl9KX0sY2UucHJvdG90eXBlLmRlbGV0ZUNsaWVudD1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEg7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2go'@;
put 'Ti5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPXRoaXMuc2VydmVyVXJsKyIvb2F1dGgvY2xpZW50cy8iLmNvbmNhdChHKSxIPXt9LGImJihILkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChiKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShELGIpXTtjYXNlIDE6cmV0dXJuWzIs'@;
put 'Ti5zZW50KCkucmVzdWx0XX19KX0pfSxjZS5wcm90b3R5cGUuZXhlY3V0ZUNvbXB1dGVKb2I9ZnVuY3Rpb24oRyxiLEQsSCxOLGcsQyxTLHYscCl7cmV0dXJuIHZvaWQgMD09PWcmJihnPSEwKSx2b2lkIDA9PT1DJiYoQz0hMSksdm9pZCAwPT09diYmKHY9ITEpLEkodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKCl7dmFyIHcsSixuZSxkZSxmZSx4ZSxMZSxGZSxPZSxqZSxXZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEtlKXtzd2l0Y2goS2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdz0oTnx8e30pLmFjY2Vzc190b2tlbixOP1s0LCgwLGVlLmdldFRva2VucykodGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LE4pXTpbMywyXTtjYXNlIDE6dz1LZS5zZW50KCkuYWNjZXNzX3Rva2VuLEtlLmxhYmVsPTI7Y2FzZSAyOmlmKCgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdp'@;
put 'dGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUiKTtyZXR1cm4gSj1HLnNwbGl0KCIvIiksbmU9Si5wb3AoKSxkZT1KLmpvaW4oIi8iKSxmZT0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChkZSk6ZGUsWzQs'@;
put 'dGhpcy5wb3B1bGF0ZUZvbGRlck1hcChmZSx3KS5jYXRjaChmdW5jdGlvbihZZSl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKFllLCJFcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZvbGRlciBtYXAuICIpfSldO2Nhc2UgMzppZihLZS5zZW50KCksISh4ZT10aGlzLmZvbGRlck1hcC5nZXQoZmUp'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBmb2xkZXIgJyIuY29uY2F0KGZlLCInIHdhcyBub3QgZm91bmQgb24gJyIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiJyIpKTtpZighKExlPXhlPy5maW5kKGZ1bmN0aW9uKFllKXtyZXR1cm4gWWUubmFtZT09PW5lfSkpKXRocm93IG5ldyBFcnJvcigi'@;
put 'Sm9iIHdhcyBub3QgZm91bmQuIik7aWYoRmU9TGU/LmNvZGUpcmV0dXJuWzMsNV07aWYoIShPZT1MZT8ubGlua3MuZmluZChmdW5jdGlvbihZZSl7cmV0dXJuImdldFJlc291cmNlIj09PVllLnJlbH0pKSl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZv'@;
put 'dW5kLiIpO3JldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoT2UuaHJlZiksdykuY2F0Y2goZnVuY3Rpb24oWWUpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShZZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IgZGVmaW5pdGlv'@;
put 'bi4gIil9KV07Y2FzZSA0OmplPUtlLnNlbnQoKS5yZXN1bHQsTGUuY29kZT1GZT1qZS5jb2RlLEtlLmxhYmVsPTU7Y2FzZSA1OnJldHVybiBGZXx8KEZlPSIiKSxXZT1GZS5yZXBsYWNlKC9cclxuL2csIlxuIikuc3BsaXQoIlxuIiksWzQsdGhpcy5leGVjdXRlU2NyaXB0KEcsV2UsYixOLEgs'@;
put 'RCxDLGcsUyx2LHApXTtjYXNlIDY6cmV0dXJuWzIsS2Uuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZXhlY3V0ZUpvYj1mdW5jdGlvbihHLGIsRCxILE4pe3ZhciBnLEMsUztyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdixwLHcsSixuZSxkZSxmZSx4ZSxM'@;
put 'ZSxGZSxPZSxqZSxXZSxLZSxZZSxRZSxsdCxQZSxiZSxBZSxUZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHFlKXtzd2l0Y2gocWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdj0oTnx8e30pLmFjY2Vzc190b2tlbixOP1s0LCgwLGVlLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LE4pXTpb'@;
put 'MywyXTtjYXNlIDE6dj1xZS5zZW50KCkuYWNjZXNzX3Rva2VuLHFlLmxhYmVsPTI7Y2FzZSAyOmlmKCgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lm'@;
put 'eWluZyBhIHJvb3QgZm9sZGVyIG5hbWUuIik7cmV0dXJuIHA9Ry5zcGxpdCgiLyIpLHc9cC5wb3AoKSxKPXAuam9pbigiLyIpLG5lPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KEopOkosWzQsdGhpcy5wb3B1bGF0ZUZv'@;
put 'bGRlck1hcChuZSx2KV07Y2FzZSAzOmlmKHFlLnNlbnQoKSwhKGRlPXRoaXMuZm9sZGVyTWFwLmdldChuZSkpKXRocm93IG5ldyBFcnJvcigiVGhlIGZvbGRlciAnIi5jb25jYXQobmUsIicgd2FzIG5vdCBmb3VuZCBvbiAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInLiIpKTtyZXR1cm4g'@;
put 'ZmU9ZGU/LmZpbmQoZnVuY3Rpb24oWGUpe3JldHVybiBYZS5uYW1lPT09d30pLHhlPVtdLEgmJk9iamVjdC5rZXlzKEgpLmxlbmd0aD9bNCx0aGlzLnVwbG9hZFRhYmxlcyhILHYpXTpbMyw1XTtjYXNlIDQ6eGU9cWUuc2VudCgpLHFlLmxhYmVsPTU7Y2FzZSA1OmlmKCFmZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO3JldHVybiBMZT1udWxsPT09KGc9ZmU/LmxpbmtzLmZpbmQoZnVuY3Rpb24oWGUpe3JldHVybiJnZXRSZXNvdXJjZSI9PT1YZS5yZWx9KSl8fHZvaWQgMD09PWc/dm9pZCAwOmcuaHJlZixbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNv'@;
put 'bmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KExlKSx2KV07Y2FzZSA2OnJldHVybiBGZT1xZS5zZW50KCkucmVzdWx0LE9lPXtfY29udGV4dE5hbWU6YixfcHJvZ3JhbToiIi5jb25jYXQobmUsIi8iKS5jb25jYXQodyksX3dlYmluX2ZpbGVfY291bnQ6eGUubGVuZ3RoLF9PTUlUSlNPTkxJ'@;
put 'U1RJTkc6ITAsX09NSVRKU09OTE9HOiEwLF9PTUlUU0VTU0lPTlJFU1VMVFM6ITAsX09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6ITB9LEQmJihPZS5fT01JVFRFWFRMT0c9ImZhbHNlIixPZS5fT01JVFNFU1NJT05SRVNVTFRTPSJmYWxzZSIsT2UuX0RFQlVHPTEzMSkseGUuZm9y'@;
put 'RWFjaChmdW5jdGlvbihYZSxVZSl7T2VbIl93ZWJpbl9maWxldXJpIi5jb25jYXQoVWUrMSldPSIvZmlsZXMvZmlsZXMvIi5jb25jYXQoWGUuZmlsZS5pZCksT2VbIl93ZWJpbl9uYW1lIi5jb25jYXQoVWUrMSldPVhlLnRhYmxlTmFtZX0pLGplPXtuYW1lOiJleGVjLSIuY29uY2F0KHcpLGRl'@;
put 'c2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixqb2JEZWZpbml0aW9uOkZlLGFyZ3VtZW50czpPZX0sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0IiksamUsdildO2Nhc2UgNzpyZXR1'@;
put 'cm4gV2U9cWUuc2VudCgpLnJlc3VsdCxbNCx0aGlzLnBvbGxKb2JTdGF0ZShXZSxOKS5jYXRjaChmdW5jdGlvbihYZSl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKFhlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSldO2Nhc2UgODpyZXR1cm4gS2U9cWUuc2VudCgpLFs0'@;
put 'LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvam9iRXhlY3V0aW9uL2pvYnMvIikuY29uY2F0KFdlLmlkKSx2KV07Y2FzZSA5OnJldHVybiBZZT1xZS5zZW50KCkucmVzdWx0LFBlPVllLnJlc3VsdHNbIl93ZWJvdXQuanNvbiJdLGJlPVllLmxpbmtz'@;
put 'LmZpbmQoZnVuY3Rpb24oWGUpe3JldHVybiJsb2ciPT09WGUucmVsfSksUGU/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChQZSwiL2NvbnRlbnQiKSx2LCJ0ZXh0L3BsYWluIildOlszLDExXTtjYXNlIDEwOlFlPXFlLnNlbnQoKSxx'@;
put 'ZS5sYWJlbD0xMTtjYXNlIDExOnJldHVybiBEJiZiZT9bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KGJlLmhyZWYsIi9jb250ZW50IiksdikudGhlbihmdW5jdGlvbihYZSl7cmV0dXJuIFhlLnJlc3VsdC5pdGVtcy5tYXAoZnVuY3Rp'@;
put 'b24oVWUpe3JldHVybiBVZS5saW5lfSkuam9pbigiXG4iKX0pXTpbMywxM107Y2FzZSAxMjpsdD1xZS5zZW50KCkscWUubGFiZWw9MTM7Y2FzZSAxMzppZigiZmFpbGVkIj09PUtlKXRocm93IG5ldyBWLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oQz1ZZS5lcnJvcil8fHZvaWQgMD09PUM/'@;
put 'dm9pZCAwOkMuZXJyb3JDb2RlLG51bGw9PT0oUz1ZZS5lcnJvcil8fHZvaWQgMD09PVM/dm9pZCAwOlMubWVzc2FnZSxsdCk7cmV0dXJuIEFlPXtyZXN1bHQ6UWU/LnJlc3VsdCxsb2c6bHR9LChUZT1ZZS5lcnJvcikmJihBZS5lcnJvcj1UZSksWzIsQWVdfX0pfSl9LGNlLnByb3RvdHlwZS5w'@;
put 'b3B1bGF0ZUZvbGRlck1hcD1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELE4sZztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIu'@;
put 'Y29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQoRyk6Ryx0aGlzLmZvbGRlck1hcC5nZXQoRCk/WzJdOls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KCIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9IitEKSxiKS5jYXRjaChmdW5jdGlvbih2KXt0aHJv'@;
put 'dygwLFUucHJlZml4TWVzc2FnZSkodiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBmb2xkZXIuICIpfSldO2Nhc2UgMTppZighKE49Uy5zZW50KCkucmVzdWx0KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXRoICIuY29uY2F0KEQsIiBkb2VzIG5vdCBleGlzdCBvbiAiKS5jb25jYXQodGhpcy5zZXJ2'@;
put 'ZXJVcmwpKTtyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KE4uaWQsIi9tZW1iZXJzP2xpbWl0PSIpLmNvbmNhdChOLm1lbWJlckNvdW50PDUwMD81MDA6Ti5tZW1iZXJDb3VudCksYikuY2F0Y2goZnVuY3Rpb24odil7dGhyb3coMCxV'@;
put 'LnByZWZpeE1lc3NhZ2UpKHYsIkVycm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KV07Y2FzZSAyOnJldHVybiBnPVMuc2VudCgpLnJlc3VsdCx0aGlzLmZvbGRlck1hcC5zZXQoRCxnLml0ZW1zKSxbMl19fSl9KX0sY2UucHJvdG90eXBlLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbihHLGIs'@;
put 'RCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtyZXR1cm5bMiwoMCxxLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0Q2xpZW50LEcsdGhpcy5kZWJ1ZyxiLEQpXX0pfSl9LGNlLnByb3RvdHlwZS51cGxvYWRUYWJsZXM9'@;
put 'ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3JldHVyblsyLCgwLHRlLnVwbG9hZFRhYmxlcykodGhpcy5yZXF1ZXN0Q2xpZW50LEcsYildfSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRlckRldGFp'@;
put 'bHM9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxIO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD0oMCxFLmlzVXJpKShHKT9HOiIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3Bh'@;
put 'dGg9Ii5jb25jYXQoRyksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChEKSxiKS5jYXRjaChmdW5jdGlvbihnKXtpZihnIGluc3RhbmNlb2YgVi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IGc7cmV0dXJue3Jlc3VsdDpudWxsfX0pXTtj'@;
put 'YXNlIDE6cmV0dXJuKEg9Ti5zZW50KCkucmVzdWx0KT9bMixIXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXJVcmk9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgp'@;
put 'e3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRGb2xkZXJEZXRhaWxzKEcsYildO2Nhc2UgMTpyZXR1cm4oRD1ILnNlbnQoKSk/WzIsIi9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoRC5pZCldOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldFJlY3ljbGVC'@;
put 'aW5Vcmk9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVy'@;
put 'VXJsKS5jb25jYXQoIi9mb2xkZXJzL2ZvbGRlcnMvQG15UmVjeWNsZUJpbiIpLEcpLmNhdGNoKGZ1bmN0aW9uKEgpe2lmKEggaW5zdGFuY2VvZiBWLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgSDtyZXR1cm57cmVzdWx0Om51bGx9fSldO2Nhc2UgMTpyZXR1cm4oYj1ELnNlbnQoKS5yZXN1bHQp'@;
put 'P1syLCIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KGIuaWQpXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rp'@;
put 'b24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEcsYildO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlJZD1mdW5jdGlvbihH'@;
put 'LGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlJZChHLGIpXTtjYXNlIDE6cmV0dXJuWzIs'@;
put 'RC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5saXN0Rm9sZGVyPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9MjApLEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTixnO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMubGFiZWwp'@;
put 'e2Nhc2UgMDpyZXR1cm4oMCxFLmlzVXJpKShHKT8oTj1HLFszLDNdKTpbMywxXTtjYXNlIDE6cmV0dXJuWzQsdGhpcy5nZXRGb2xkZXJVcmkoRyxiKV07Y2FzZSAyOk49Qy5zZW50KCksQy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gSD1OLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29u'@;
put 'Y2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoSCwiL21lbWJlcnM/bGltaXQ9IikuY29uY2F0KEQpLGIpXTtjYXNlIDQ6cmV0dXJuKGc9Qy5zZW50KCkucmVzdWx0KSYmZy5pdGVtcz9bMixnLml0ZW1zLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gUy5uYW1lfSldOlsyLFtdXX19KX0pfSxjZS5w'@;
put 'cm90b3R5cGUubW92ZUZvbGRlcj1mdW5jdGlvbihHLGIsRCxIKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTixnLEMsUyx2LHA7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih3KXtzd2l0Y2gody5sYWJlbCl7Y2FzZSAwOnJldHVybiBOPUcuc3BsaXQoIi8iKS5w'@;
put 'b3AoKSxbNCx0aGlzLmdldEZvbGRlckRldGFpbHMoYixIKV07Y2FzZSAxOnJldHVybiB3LnNlbnQoKT9EPU46KChnPWIuc3BsaXQoIi8iKSkuc3BsaWNlKGcubGVuZ3RoLTEsMSksYj1nLmpvaW4oIi8iKSksWzQsdGhpcy5nZXRGb2xkZXJVcmkoRyxIKV07Y2FzZSAyOnJldHVybiBDPXcuc2Vu'@;
put 'dCgpLFs0LHRoaXMuZ2V0Rm9sZGVyVXJpKGIsSCldO2Nhc2UgMzpyZXR1cm4gUz13LnNlbnQoKSxDPyh2PUM/LnNwbGl0KCIvIikucG9wKCksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBhdGNoKCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEMpLHtpZDp2LG5hbWU6RCxwYXJlbnRG'@;
put 'b2xkZXJVcmk6U30sSCkuY2F0Y2goZnVuY3Rpb24oSil7dGhyb3cgSi5jb2RlJiYiRU5PVEZPVU5EIj09PUouY29kZT97Ym9keTp7bWVzc2FnZToiRm9sZGVyICciLmNvbmNhdChHLnNwbGl0KCIvIikucG9wKCksIicgd2FzIG5vdCBmb3VuZC4iKX19Okp9KV0pOlsyLHZvaWQgMF07Y2FzZSA0'@;
put 'OnJldHVybihwPXcuc2VudCgpLnJlc3VsdCk/WzIscF06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlRm9sZGVyPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSCxOLGc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihT'@;
put 'KXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0UmVjeWNsZUJpblVyaShiKV07Y2FzZSAxOnJldHVybiBEPVMuc2VudCgpLEg9Ry5zcGxpdCgiLyIpLnBvcCgpfHwiIixnPShOPW5ldyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSsiICIrTi50b0xvY2FsZVRpbWVT'@;
put 'dHJpbmcoKSxbNCx0aGlzLm1vdmVGb2xkZXIoRyxELEgrIiAiK2csYildO2Nhc2UgMjpyZXR1cm5bMixTLnNlbnQoKV19fSl9KX0sY2V9KCk7Ty5TQVNWaXlhQXBpQ2xpZW50PXVlfSw1OTU2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gej1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihoZSl7Zm9yKHZhciB1ZSxjZT0xLEc9YXJndW1lbnRzLmxlbmd0aDtjZTxHO2NlKyspZm9yKHZhciBiIGluIHVlPWFyZ3VtZW50c1tjZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVlLGIp'@;
put 'JiYoaGVbYl09dWVbYl0pO3JldHVybiBoZX0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGhlLHVlLGNlLEcpe3JldHVybiBuZXcoY2V8fChjZT1Qcm9taXNlKSkoZnVuY3Rpb24oYixEKXtmdW5jdGlvbiBIKEMpe3RyeXtnKEcubmV4'@;
put 'dChDKSl9Y2F0Y2goUyl7RChTKX19ZnVuY3Rpb24gTihDKXt0cnl7ZyhHLnRocm93KEMpKX1jYXRjaChTKXtEKFMpfX1mdW5jdGlvbiBnKEMpe3ZhciBTO0MuZG9uZT9iKEMudmFsdWUpOihTPUMudmFsdWUsUyBpbnN0YW5jZW9mIGNlP1M6bmV3IGNlKGZ1bmN0aW9uKHYpe3YoUyl9KSkudGhl'@;
put 'bihILE4pfWcoKEc9Ry5hcHBseShoZSx1ZXx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaGUsdWUpe3ZhciBjZSxHLGIsRCxIPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmJbMF0pdGhyb3cgYlsxXTtyZXR1cm4gYlsxXX0sdHJ5czpb'@;
put 'XSxvcHM6W119O3JldHVybiBEPXtuZXh0Ok4oMCksdGhyb3c6TigxKSxyZXR1cm46TigyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKERbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRDtmdW5jdGlvbiBOKGcpe3JldHVybiBmdW5jdGlvbihDKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24oUyl7aWYoY2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7SDspdHJ5e2lmKGNlPTEsRyYmKGI9MiZTWzBdP0cucmV0dXJuOlNbMF0/Ry50aHJvd3x8KChiPUcucmV0dXJuKSYmYi5jYWxsKEcpLDApOkcubmV4'@;
put 'dCkmJiEoYj1iLmNhbGwoRyxTWzFdKSkuZG9uZSlyZXR1cm4gYjtzd2l0Y2goRz0wLGImJihTPVsyJlNbMF0sYi52YWx1ZV0pLFNbMF0pe2Nhc2UgMDpjYXNlIDE6Yj1TO2JyZWFrO2Nhc2UgNDpyZXR1cm4gSC5sYWJlbCsrLHt2YWx1ZTpTWzFdLGRvbmU6ITF9O2Nhc2UgNTpILmxhYmVsKyss'@;
put 'Rz1TWzFdLFM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpTPUgub3BzLnBvcCgpLEgudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGI9KGI9SC50cnlzKS5sZW5ndGg+MCYmYltiLmxlbmd0aC0xXSl8fDYhPT1TWzBdJiYyIT09U1swXSkpe0g9MDtjb250aW51ZX1pZigzPT09U1swXSYm'@;
put 'KCFifHxTWzFdPmJbMF0mJlNbMV08YlszXSkpe0gubGFiZWw9U1sxXTticmVha31pZig2PT09U1swXSYmSC5sYWJlbDxiWzFdKXtILmxhYmVsPWJbMV0sYj1TO2JyZWFrfWlmKGImJkgubGFiZWw8YlsyXSl7SC5sYWJlbD1iWzJdLEgub3BzLnB1c2goUyk7YnJlYWt9YlsyXSYmSC5vcHMucG9w'@;
put 'KCksSC50cnlzLnBvcCgpO2NvbnRpbnVlfVM9dWUuY2FsbChoZSxIKX1jYXRjaCh2KXtTPVs2LHZdLEc9MH1maW5hbGx5e2NlPWI9MH1pZig1JlNbMF0pdGhyb3cgU1sxXTtyZXR1cm57dmFsdWU6U1swXT9TWzFdOnZvaWQgMCxkb25lOiEwfX0oW2csQ10pfX19LGs9dGhpcyYmdGhpcy5fX3Nw'@;
put 'cmVhZEFycmF5fHxmdW5jdGlvbihoZSx1ZSxjZSl7aWYoY2V8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgRyxiPTAsRD11ZS5sZW5ndGg7YjxEO2IrKykhRyYmYiBpbiB1ZXx8KEd8fChHPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHVlLDAsYikpLEdbYl09dWVbYl0pO3JldHVy'@;
put 'biBoZS5jb25jYXQoR3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodWUpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFPVIoNTkyOCksaj1SKDEyMzApLFY9Uig5ODIxKSxCPVIoODMwNiksWT1SKDM0NjcpLFg9UigxNTI3KSxVPVIo'@;
put 'MzkwMCkscT1SKDQ1ODgpLGVlPVIoMzYwMiksdGU9Uig4MjE3KSxvZT17c2VydmVyVXJsOiIiLHBhdGhTQVNKUzoiL1NBU2pzQXBpL3N0cC9leGVjdXRlIixwYXRoU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8iLHBhdGhTQVNWaXlhOiIvU0FTSm9iRXhlY3V0aW9uIixhcHBMb2M6Ii9QdWJs'@;
put 'aWMvc2VlZGFwcCIsc2VydmVyVHlwZTpVLlNlcnZlclR5cGUuU2FzVml5YSxkZWJ1ZzohMSxjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0Iix1c2VDb21wdXRlQXBpOm51bGwsbG9naW5NZWNoYW5pc206ai5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0fSxzZT1m'@;
put 'dW5jdGlvbigpe2Z1bmN0aW9uIGhlKHVlKXt2YXIgY2U9dGhpczt0aGlzLnNhc2pzQ29uZmlnPW5ldyBqLlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9IiIsdGhpcy5zYXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxs'@;
put 'LHRoaXMuZmlsZVVwbG9hZGVyPW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRoaXMucmVxdWVzdENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhl'@;
put 'Y3V0b3I9bnVsbCx0aGlzLnNhczlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEsoY2Usdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLGIsRCxILE47cmV0dXJuIEkodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJl'@;
put 'bCl7Y2FzZSAwOnJldHVybls0LG51bGw9PT0oRz10aGlzLndlYkpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Rz92b2lkIDA6Ry5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSAxOnJldHVybiBnLnNlbnQoKSxbNCxudWxsPT09KGI9dGhpcy5jb21wdXRlSm9iRXhlY3V0b3IpfHx2b2lkIDA9'@;
put 'PT1iP3ZvaWQgMDpiLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDI6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oRD10aGlzLmplc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09RD92b2lkIDA6RC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKV07Y2FzZSAzOnJldHVybiBnLnNlbnQoKSxb'@;
put 'NCxudWxsPT09KEg9dGhpcy5maWxlVXBsb2FkZXIpfHx2b2lkIDA9PT1IP3ZvaWQgMDpILnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDQ6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oTj10aGlzLnNhc2pzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1OP3ZvaWQgMDpOLnJlc2VuZFdh'@;
put 'aXRpbmdSZXF1ZXN0cygpXTtjYXNlIDU6cmV0dXJuIGcuc2VudCgpLFsyXX19KX0pfSx0aGlzLnNldFZlcmJvc2VNb2RlPWZ1bmN0aW9uKEcpe3ZhciBiO251bGw9PT0oYj1jZS5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09Ynx8Yi5zZXRWZXJib3NlTW9kZShHKX0sdGhpcy5zYXNqc0NvbmZp'@;
put 'Zz16KHooe30sb2UpLHVlKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfXJldHVybiBoZS5wcm90b3R5cGUuZ2V0Q3NyZlRva2VuPWZ1bmN0aW9uKHVlKXt2YXIgY2U7cmV0dXJuIHZvaWQgMD09PXVlJiYodWU9ImdlbmVyYWwiKSxudWxsPT09KGNlPXRoaXMucmVxdWVzdENsaWVudCl8fHZv'@;
put 'aWQgMD09PWNlP3ZvaWQgMDpjZS5nZXRDc3JmVG9rZW4odWUpfSxoZS5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbih1ZSl7dmFyIGNlLEcsYj11ZS5saW5lc09mQ29kZSxEPXVlLmZpbGVOYW1lLEg9dWUuY29udGV4dE5hbWUsTj11ZS5ydW5UaW1lLGc9dWUuYXV0aENvbmZpZyxD'@;
put 'PXVlLmF1dGhDb25maWdTYXM5LFM9dWUuZGVidWc7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih2KXtzd2l0Y2godi5sYWJlbCl7Y2FzZSAwOmlmKHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtVLlNl'@;
put 'cnZlclR5cGUuU2FzOSxVLlNlcnZlclR5cGUuU2FzanMsVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzOSlyZXR1cm5bMywyXTtpZighQyl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5v'@;
put 'dCBwcm92aWRlZCIpO3JldHVybls0LG51bGw9PT0oY2U9dGhpcy5zYXM5QXBpQ2xpZW50KXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNlLmV4ZWN1dGVTY3JpcHQoYixDLnVzZXJOYW1lLEMucGFzc3dvcmQpXTtjYXNlIDE6Y2FzZSAzOmNhc2UgNTpyZXR1cm5bMix2LnNlbnQoKV07Y2FzZSAyOnJl'@;
put 'dHVybiB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsNF06WzQsbnVsbD09PShHPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1HP3ZvaWQgMDpHLmV4ZWN1dGVTY3JpcHQoYi5qb2luKCJcbiIpLE4sZyldO2Nhc2UgNDppZih0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzVml5YSlyZXR1cm5bMyw2XTtpZighKEg9SHx8dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSkpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1l'@;
put 'YCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtpZighRCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgbmFtZSBpcyByZXF1aXJlZCBpbiBjYXNlIG9mIFNBUyBWSVlBLiBQbGVhc2UgcHJvdmlkZSBhIGBmaWxlTmFtZWAuIik7cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50'@;
put 'LmV4ZWN1dGVTY3JpcHQoRCxiLEgsZyxudWxsLFN8fHRoaXMuc2FzanNDb25maWcuZGVidWcpXTtjYXNlIDY6cmV0dXJuWzJdfX0pfSl9LGhlLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiO3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW1UuU2VydmVyVHlwZS5TYXNqc10pLFs0LG51bGw9PT0oYj10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09Yj92'@;
put 'b2lkIDA6Yi5leGVjdXRlSm9iKHVlLGNlLEcpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24odWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rp'@;
put 'b24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dHModWUpXTtjYXNlIDE6cmV0'@;
put 'dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5jdGlvbih1ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJu'@;
put 'IHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBl'@;
put 'LmdldERlZmF1bHRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldERlZmF1bHRDb21wdXRlQ29udGV4'@;
put 'dHMoKX0saGUucHJvdG90eXBlLmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbih1ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RT'@;
put 'dXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVDb21w'@;
put 'dXRlQ29udGV4dD1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUNvbXB1'@;
put 'dGVDb250ZXh0IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQodWUsY2UsRyxiLEQsSCldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZUxhdW5jaGVyQ29udGV4dD1m'@;
put 'dW5jdGlvbih1ZSxjZSxHLGIpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlTGF1bmNoZXJDb250ZXh0IixbVS5T'@;
put 'ZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlTGF1bmNoZXJDb250ZXh0KHVlLGNlLEcsYildO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmVkaXRDb21wdXRlQ29udGV4dD1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1'@;
put 'cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhp'@;
put 'cy5zYXNWaXlhQXBpQ2xpZW50LmVkaXRDb21wdXRlQ29udGV4dCh1ZSxjZSxHKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'bigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ29tcHV0ZUNvbnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDb21w'@;
put 'dXRlQ29udGV4dCh1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlOYW1lPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9u'@;
put 'KEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlOYW1lIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUodWUsY2UpXTtj'@;
put 'YXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQ9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nh'@;
put 'c2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeUlkIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19'@;
put 'KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlU2Vzc2lvbj1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVk'@;
put 'KCJjcmVhdGVTZXNzaW9uIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlU2Vzc2lvbih1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZUZvbGRlcj1mdW5jdGlvbih1ZSxjZSxHLGIs'@;
put 'RCxIKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEQ/WzQsRC5jcmVhdGVGb2xkZXIodWUsY2UsRyxiLEgpXTpbMywyXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLE4u'@;
put 'c2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZvbGRlcih1ZSxjZSxHLGIsSCldfX0pfSl9LGhlLnByb3RvdHlwZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigp'@;
put 'e3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gSD9bNCxILmNyZWF0ZUZpbGUodWUsY2UsRyxiLEQpXTpbMywyXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLE4uc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50'@;
put 'LmNyZWF0ZUZpbGUodWUsY2UsRyxiLEQpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Rm9sZGVyPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJu'@;
put 'IHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcih1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmRlbGV0ZUZvbGRlcj1mdW5j'@;
put 'dGlvbih1ZSxjZSl7dmFyIEc7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVGb2xkZXIiLFtVLlNlcnZlclR5cGUu'@;
put 'U2FzVml5YV0pLFs0LG51bGw9PT0oRz10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1HP3ZvaWQgMDpHLmRlbGV0ZUZvbGRlcih1ZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixiLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmxpc3RGb2xkZXI9ZnVuY3Rpb24odWUsY2UsRyl7dmFy'@;
put 'IGI7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJsaXN0Rm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCxudWxs'@;
put 'PT09KGI9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Yj92b2lkIDA6Yi5saXN0Rm9sZGVyKHVlLGNlLEcpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5tb3ZlRm9sZGVyPWZ1bmN0aW9uKHVlLGNlLEcsYil7dmFyIEQ7cmV0dXJuIEsodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJtb3ZlRm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCxudWxsPT09KEQ9dGhpcy5zYXNW'@;
put 'aXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09RD92b2lkIDA6RC5tb3ZlRm9sZGVyKHVlLGNlLEcsYildO2Nhc2UgMTpyZXR1cm5bMixILnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZUpvYkRlZmluaXRpb249ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxIP1s0LEguY3JlYXRlSm9iRGVm'@;
put 'aW5pdGlvbih1ZSxjZSxHLGIsRCldOlszLDJdO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsTi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVmaW5pdGlvbih1ZSxjZSxHLGIsRCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRBdXRoQ29kZT1m'@;
put 'dW5jdGlvbih1ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbVS5TZXJ2ZXJUeXBlLlNhc1Zp'@;
put 'eWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QXV0aENvZGUodWUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW49ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBY2Nlc3NUb2tlbiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhLFUuU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw'@;
put 'ZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnNhc0pTQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKHVlLEcpXTtjYXNlIDE6Y2FzZSAzOnJldHVyblsyLGIuc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEFjY2Vzc1Rva2VuKHVlLGNl'@;
put 'LEcpXX19KX0pfSxoZS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RT'@;
put 'dXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtVLlNlcnZlclR5cGUuU2FzVml5YSxVLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUhPT1VLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKEcpXTtj'@;
put 'YXNlIDE6Y2FzZSAzOnJldHVyblsyLGIuc2VudCgpXTtjYXNlIDI6cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnModWUsY2UsRyldfX0pfSl9LGhlLnByb3RvdHlwZS5kZWxldGVDbGllbnQ9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ2xpZW50IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRl'@;
put 'Q2xpZW50KHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0U2FzanNDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZ30saGUucHJvdG90eXBlLmdldFVzZXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXV0aE1h'@;
put 'bmFnZXIudXNlck5hbWV9LGhlLnByb3RvdHlwZS5zZXRTQVNqc0NvbmZpZz1mdW5jdGlvbih1ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihjZSl7cmV0dXJuIHRoaXMuc2FzanNDb25maWc9eih6KHt9LHRoaXMuc2FzanND'@;
put 'b25maWcpLHVlKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpLFsyXX0pfSl9LGhlLnByb3RvdHlwZS5zZXREZWJ1Z1N0YXRlPWZ1bmN0aW9uKHVlKXt0aGlzLnNhc2pzQ29uZmlnLmRlYnVnPXVlLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz11'@;
put 'ZSl9LGhlLnByb3RvdHlwZS5jaGVja1Nlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHVlKXtyZXR1cm5bMix0aGlzLmF1dGhNYW5hZ2VyLmNoZWNrU2Vzc2lvbigpXX0pfSl9LGhlLnByb3RvdHlw'@;
put 'ZS5sb2dJbj1mdW5jdGlvbih1ZSxjZSxHLGIpe3JldHVybiB2b2lkIDA9PT1iJiYoYj17fSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209PT1qLkxvZ2luTWVjaGFuaXNt'@;
put 'LkRlZmF1bHQpe2lmKCF1ZXx8IWNlKXRocm93IG5ldyBFcnJvcigiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJlIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgbG9naW4gbWVjaGFuaXNtLiIpO3JldHVyblsyLHRoaXMuYXV0aE1hbmFnZXIubG9nSW4odWUsY2UpXX1pZih0eXBl'@;
put 'b2Ygd2luZG93PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlRoZSByZWRpcmVjdGVkIGxvZ2luIG1lY2hhbmlzbSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIHRoZSBicm93c2VyLiIpO3JldHVyblsyLHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKGIpXX0pfSl9LGhlLnByb3Rv'@;
put 'dHlwZS5sb2dPdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dPdXQoKX0saGUucHJvdG90eXBlLnVwbG9hZEZpbGU9ZnVuY3Rpb24odWUsY2UsRyxiLEQpe3JldHVybiB2b2lkIDA9PT1iJiYoYj17fSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9eih6KHt9LHRoaXMuc2FzanNDb25maWcpLGIpLFs0LHRoaXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUodWUse2ZpbGVzOmNlLHBhcmFtczpHfSxiLEQpXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCld'@;
put 'fX0pfSl9LGhlLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksdm9pZCAwPT09SCYmKEg9W10pLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE47cmV0dXJuIEkodGhpcyxmdW5jdGlvbihnKXtzd2l0'@;
put 'Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiBHPXooeih7fSx0aGlzLnNhc2pzQ29uZmlnKSxHKSwoTj0oMCxFLnZhbGlkYXRlSW5wdXQpKGNlKSkuc3RhdHVzP0cuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnNhc2pzSm9iRXhlY3V0b3IuZXhlY3V0ZSh1'@;
put 'ZSxjZSxHLGIsRCxIKV06WzMsMTJdO2Nhc2UgMTpjYXNlIDM6Y2FzZSA1OmNhc2UgODpjYXNlIDEwOnJldHVyblsyLGcuc2VudCgpXTtjYXNlIDI6cmV0dXJuIEcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNWaXlhfHxudWxsPT1HLnVzZUNvbXB1dGVBcGk/WzMsN106Ry51c2VDb21w'@;
put 'dXRlQXBpP1s0LHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQpXTpbMyw0XTtjYXNlIDQ6cmV0dXJuIEcuY29udGV4dE5hbWV8fChHPXooeih7fSxHKSx7Y29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9KSksWzQsdGhpcy5q'@;
put 'ZXNKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcsYixELEgpXTtjYXNlIDY6cmV0dXJuWzMsMTFdO2Nhc2UgNzpyZXR1cm4gRy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJkcudXNlcm5hbWUmJkcucGFzc3dvcmQ/WzQsdGhpcy5zYXM5Sm9iRXhlY3V0b3IuZXhlY3V0ZSh1ZSxj'@;
put 'ZSxHKV06WzMsOV07Y2FzZSA5OnJldHVybls0LHRoaXMud2ViSm9iRXhlY3V0b3IuZXhlY3V0ZSh1ZSxjZSxHLGIsRCxIKV07Y2FzZSAxMTpyZXR1cm5bMywxM107Y2FzZSAxMjpyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgai5FcnJvclJlc3BvbnNlKE4ubXNnKSldO2Nhc2UgMTM6cmV0'@;
put 'dXJuWzJdfX0pfSl9LGhlLnByb3RvdHlwZS5kZXBsb3lTZXJ2aWNlUGFjaz1mdW5jdGlvbih1ZSxjZSxHLGIsRCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPSExKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE47cmV0dXJuIEkodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2go'@;
put 'Qy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksSD1udWxsLEd8fGNlPyhHfHwoRz10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCksY2V8fChjZT10aGlzLnNhc2pzQ29uZmlnLmFw'@;
put 'cExvYyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/KEg9bmV3IFYuU0FTVml5YUFwaUNsaWVudChHLGNlLHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSkuZGVidWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1'@;
put 'Zzp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmKEg9bmV3IEIuU0FTOUFwaUNsaWVudChHLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpKTooTj1udWxsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09'@;
put 'PVUuU2VydmVyVHlwZS5TYXNWaXlhP049dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbmZpZygpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiYoTj10aGlzLnNhczlBcGlDbGllbnQuZ2V0Q29uZmlnKCkpLEc9Ti5zZXJ2ZXJVcmwsY2U9Ti5yb290'@;
put 'Rm9sZGVyTmFtZSksdWUubWVtYmVyc1swXS5tZW1iZXJzJiZ1ZS5tZW1iZXJzWzBdLm1lbWJlcnMuc29ydChmdW5jdGlvbihTKXtyZXR1cm4iZm9sZGVyIj09PVMudHlwZT8tMToxfSksWzQsdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoY2UsdWUubWVtYmVycyxiLEgsRCldO2Nhc2Ug'@;
put 'MTpyZXR1cm4gQy5zZW50KCksWzJdfX0pfSl9LGhlLnByb3RvdHlwZS5zdGFydENvbXB1dGVKb2I9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCxOLGcsQyl7dmFyIFMsdixwLHc7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSx2b2lkIDA9PT1OJiYoTj0hMSksSyh0aGlzLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEope2lmKEc9eih6KHt9LHRoaXMuc2FzanNDb25maWcpLEcpLHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInN0YXJ0Q29tcHV0ZUpvYiIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksIUcuY29udGV4dE5hbWUpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJDb250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm4gQz8obnVsbD09PShTPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PVN8fFMuc2V0VmVyYm9zZU1vZGUoQyks'@;
put 'bnVsbD09PSh2PXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PXZ8fHYuZW5hYmxlVmVyYm9zZU1vZGUoKSk6ITE9PT1DJiYobnVsbD09PShwPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PXB8fHAuZGlzYWJsZVZlcmJvc2VNb2RlKCkpLFsyLG51bGw9PT0odz10aGlzLnNhc1Zp'@;
put 'eWFBcGlDbGllbnQpfHx2b2lkIDA9PT13P3ZvaWQgMDp3LmV4ZWN1dGVDb21wdXRlSm9iKHVlLEcuY29udGV4dE5hbWUsRy5kZWJ1ZyxjZSxiLCEhRCwhMSxILE4sZyldfSl9KX0saGUucHJvdG90eXBlLmZldGNoTG9nRmlsZUNvbnRlbnQ9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHVlLGNlKS50aGVuKGZ1bmN0aW9uKGIpe2lmKCFiKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgai5F'@;
put 'cnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFJlc3BvbnNlIHdhcyBub3QgcHJvdmlkZWQuIikpO3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYi5yZXN1bHQpfWNhdGNoKEQpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgai5FcnJvclJlc3BvbnNlKCJFcnJvciB3'@;
put 'aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsRCkpfX0pXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRTYXNSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBrKFtdLHRoaXMucmVxdWVzdENsaWVudC5nZXRSZXF1ZXN0'@;
put 'cygpLCEwKS5zb3J0KEUuY29tcGFyZVRpbWVzdGFtcHMpfSxoZS5wcm90b3R5cGUuY2xlYXJTYXNSZXF1ZXN0cz1mdW5jdGlvbigpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9LGhlLnByb3RvdHlwZS5zZXR1cENvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtpZih2b2lkIDA9'@;
put 'PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybHx8IiI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybClpZih0eXBlb2YgbG9jYXRpb248InUiKXt2YXIgdWU9IiIuY29uY2F0KGxvY2F0aW9uLnByb3RvY29sLCIvLyIpLmNvbmNhdChsb2NhdGlvbi5ob3N0bmFtZSk7bG9jYXRpb24ucG9y'@;
put 'dCYmKHVlPSIiLmNvbmNhdCh1ZSwiOiIpLmNvbmNhdChsb2NhdGlvbi5wb3J0KSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9dWV9ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0'@;
put 'aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzanM/ZWUuU2FzanNSZXF1ZXN0Q2xpZW50OnEuUmVxdWVzdENsaWVudCkodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRw'@;
put 'c0FnZW50T3B0aW9ucyx0aGlzLnNhc2pzQ29uZmlnLnJlcXVlc3RIaXN0b3J5TGltaXQsdGhpcy5zYXNqc0NvbmZpZy52ZXJib3NlKSx0aGlzLmpvYnNQYXRoPXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNWaXlhP3RoaXMuc2FzanNDb25maWcucGF0aFNB'@;
put 'U1ZpeWE6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczk/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTOTp0aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNKUyx0aGlzLmF1dGhNYW5hZ2VyPW5ldyBYLkF1dGhNYW5hZ2VyKHRoaXMuc2FzanNDb25maWcuc2VydmVy'@;
put 'VXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHMpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNWaXlhJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50P3RoaXMuc2FzVml5'@;
put 'YUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpOnRoaXMuc2FzVml5YUFwaUNsaWVudD1uZXcgVi5TQVNWaXlhQXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBw'@;
put 'TG9jLHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVidWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJih0aGlzLnNhczlB'@;
put 'cGlDbGllbnQ/dGhpcy5zYXM5QXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCk6dGhpcy5zYXM5QXBpQ2xpZW50PW5ldyBCLlNBUzlBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0'@;
put 'dHBzQWdlbnRPcHRpb25zKSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc2pzJiYodGhpcy5zYXNKU0FwaUNsaWVudHx8KHRoaXMuc2FzSlNBcGlDbGllbnQ9bmV3IFkuU0FTanNBcGlDbGllbnQodGhpcy5yZXF1ZXN0Q2xpZW50KSkpLHRoaXMuZmlsZVVw'@;
put 'bG9hZGVyPW5ldyB0ZS5GaWxlVXBsb2FkZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLndlYkpvYkV4ZWN1dG9yPW5ldyB0ZS5XZWJKb2JFeGVjdXRvcih0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IHRlLlNhc2pzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZp'@;
put 'Zy5zZXJ2ZXJVcmwsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzOUpvYkV4ZWN1dG9yPW5ldyB0ZS5TYXM5Sm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50LHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW5ldyB0ZS5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1'@;
put 'dG9yPW5ldyB0ZS5KZXNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpfSxoZS5wcm90b3R5cGUuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzPWZ1bmN0aW9uKHVlLGNlLEcsYixEKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAs'@;
put 'ZnVuY3Rpb24oKXt2YXIgSD10aGlzO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxFLmFzeW5jRm9yRWFjaCkoY2UsZnVuY3Rpb24oZyl7cmV0dXJuIEsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxm'@;
put 'dW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnN3aXRjaChnLnR5cGUpe2Nhc2UiZm9sZGVyIjpyZXR1cm5bMywxXTtjYXNlImZpbGUiOnJldHVyblszLDNdO2Nhc2Uic2VydmljZSI6cmV0dXJuWzMsNV19cmV0dXJuWzMsN107Y2FzZSAxOnJldHVybls0LHRoaXMuY3JlYXRlRm9s'@;
put 'ZGVyKGcubmFtZSx1ZSx2b2lkIDAsRyxiLEQpXTtjYXNlIDI6cmV0dXJuIEMuc2VudCgpLFszLDhdO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLmNyZWF0ZUZpbGUoZy5uYW1lLGcuY29kZSx1ZSx2b2lkIDAsRyxiKV07Y2FzZSA0OnJldHVybiBDLnNlbnQoKSxbMyw4XTtjYXNlIDU6cmV0dXJuWzQs'@;
put 'dGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKGcubmFtZSxnLmNvZGUsdWUsdm9pZCAwLEcsYildO2Nhc2UgNjpyZXR1cm4gQy5zZW50KCksWzMsOF07Y2FzZSA3OnRocm93IG5ldyBFcnJvcigiVW5pZGVudGlmaWVkIG1lbWJlciAnIi5jb25jYXQoZy5uYW1lLCInIHByb3ZpZGVkLiIpKTtjYXNl'@;
put 'IDg6cmV0dXJuImZvbGRlciI9PT1nLnR5cGUmJmcubWVtYmVycyYmZy5tZW1iZXJzLmxlbmd0aD9bNCx0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcygiIi5jb25jYXQodWUsIi8iKS5jb25jYXQoZy5uYW1lKSxnLm1lbWJlcnMsRyxiLEQpXTpbMywxMF07Y2FzZSA5OkMuc2VudCgpLEMu'@;
put 'bGFiZWw9MTA7Y2FzZSAxMDpyZXR1cm5bMl19fSl9KX0pXTtjYXNlIDE6cmV0dXJuIE4uc2VudCgpLFsyXX19KX0pfSxoZS5wcm90b3R5cGUuaXNNZXRob2RTdXBwb3J0ZWQ9ZnVuY3Rpb24odWUsY2Upe2lmKCF0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGV8fCFjZS5pbmNsdWRlcyh0aGlz'@;
put 'LnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICciLmNvbmNhdCh1ZSwiJyBpcyBvbmx5IHN1cHBvcnRlZCBvbiAiKS5jb25jYXQoY2Uuam9pbigiLCAiKSwiIHNlcnZlcnMuIikpfSxoZS5wcm90b3R5cGUuZW5hYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24o'@;
put 'dWUsY2Upe3ZhciBHO251bGw9PT0oRz10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1HfHxHLmVuYWJsZVZlcmJvc2VNb2RlKHVlLGNlKX0saGUucHJvdG90eXBlLmRpc2FibGVWZXJib3NlTW9kZT1mdW5jdGlvbigpe3ZhciB1ZTtudWxsPT09KHVlPXRoaXMucmVxdWVzdENsaWVudCl8'@;
put 'fHZvaWQgMD09PXVlfHx1ZS5kaXNhYmxlVmVyYm9zZU1vZGUoKX0saGV9KCk7Ty5kZWZhdWx0PXNlfSwzNDY3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gej1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihV'@;
put 'KXtmb3IodmFyIHEsZWU9MSx0ZT1hcmd1bWVudHMubGVuZ3RoO2VlPHRlO2VlKyspZm9yKHZhciBvZSBpbiBxPWFyZ3VtZW50c1tlZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsb2UpJiYoVVtvZV09cVtvZV0pO3JldHVybiBVfSx6LmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX0sSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVSxxLGVlLHRlKXtyZXR1cm4gbmV3KGVlfHwoZWU9UHJvbWlzZSkpKGZ1bmN0aW9uKG9lLHNlKXtmdW5jdGlvbiBoZShHKXt0cnl7Y2UodGUubmV4dChHKSl9Y2F0Y2goYil7c2UoYil9fWZ1bmN0aW9uIHVlKEcpe3RyeXtj'@;
put 'ZSh0ZS50aHJvdyhHKSl9Y2F0Y2goYil7c2UoYil9fWZ1bmN0aW9uIGNlKEcpe3ZhciBiO0cuZG9uZT9vZShHLnZhbHVlKTooYj1HLnZhbHVlLGIgaW5zdGFuY2VvZiBlZT9iOm5ldyBlZShmdW5jdGlvbihEKXtEKGIpfSkpLnRoZW4oaGUsdWUpfWNlKCh0ZT10ZS5hcHBseShVLHF8fFtdKSku'@;
put 'bmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFUscSl7dmFyIGVlLHRlLG9lLHNlLGhlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9lWzBdKXRocm93IG9lWzFdO3JldHVybiBvZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzZT17bmV4dDp1'@;
put 'ZSgwKSx0aHJvdzp1ZSgxKSxyZXR1cm46dWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihzZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzZTtmdW5jdGlvbiB1ZShjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe3JldHVybiBmdW5jdGlvbihiKXtpZihl'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtoZTspdHJ5e2lmKGVlPTEsdGUmJihvZT0yJmJbMF0/dGUucmV0dXJuOmJbMF0/dGUudGhyb3d8fCgob2U9dGUucmV0dXJuKSYmb2UuY2FsbCh0ZSksMCk6dGUubmV4dCkmJiEob2U9'@;
put 'b2UuY2FsbCh0ZSxiWzFdKSkuZG9uZSlyZXR1cm4gb2U7c3dpdGNoKHRlPTAsb2UmJihiPVsyJmJbMF0sb2UudmFsdWVdKSxiWzBdKXtjYXNlIDA6Y2FzZSAxOm9lPWI7YnJlYWs7Y2FzZSA0OnJldHVybiBoZS5sYWJlbCsrLHt2YWx1ZTpiWzFdLGRvbmU6ITF9O2Nhc2UgNTpoZS5sYWJlbCsr'@;
put 'LHRlPWJbMV0sYj1bMF07Y29udGludWU7Y2FzZSA3OmI9aGUub3BzLnBvcCgpLGhlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChvZT0ob2U9aGUudHJ5cykubGVuZ3RoPjAmJm9lW29lLmxlbmd0aC0xXSl8fDYhPT1iWzBdJiYyIT09YlswXSkpe2hlPTA7Y29udGludWV9aWYo'@;
put 'Mz09PWJbMF0mJighb2V8fGJbMV0+b2VbMF0mJmJbMV08b2VbM10pKXtoZS5sYWJlbD1iWzFdO2JyZWFrfWlmKDY9PT1iWzBdJiZoZS5sYWJlbDxvZVsxXSl7aGUubGFiZWw9b2VbMV0sb2U9YjticmVha31pZihvZSYmaGUubGFiZWw8b2VbMl0pe2hlLmxhYmVsPW9lWzJdLGhlLm9wcy5wdXNo'@;
put 'KGIpO2JyZWFrfW9lWzJdJiZoZS5vcHMucG9wKCksaGUudHJ5cy5wb3AoKTtjb250aW51ZX1iPXEuY2FsbChVLGhlKX1jYXRjaChEKXtiPVs2LERdLHRlPTB9ZmluYWxseXtlZT1vZT0wfWlmKDUmYlswXSl0aHJvdyBiWzFdO3JldHVybnt2YWx1ZTpiWzBdP2JbMV06dm9pZCAwLGRvbmU6ITB9'@;
put 'fShbY2UsR10pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNBU2pzQXBpQ2xpZW50PXZvaWQgMDt2YXIgaz1SKDYyMzApLEU9UigzOTAwKSxqPVIoOTc3OCksVj1SKDU3KSxCPVIoMjQ5KSxZPVIoNzA0KSxYPWZ1bmN0aW9uKCl7ZnVuY3Rp'@;
put 'b24gVShxKXt0aGlzLnJlcXVlc3RDbGllbnQ9cX1yZXR1cm4gVS5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0PWZ1bmN0aW9uKHEpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZWUpe3N3aXRjaChlZS5sYWJl'@;
put 'bCl7Y2FzZSAwOnJldHVybiBxP1s0LCgwLFkuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQscSxFLlNlcnZlclR5cGUuU2FzanMpXTpbMywyXTtjYXNlIDE6cmV0dXJuWzIsZWUuc2VudCgpLmFjY2Vzc190b2tlbl07Y2FzZSAyOnJldHVyblsyXX19KX0pfSxVLnByb3RvdHlwZS5kZXBs'@;
put 'b3k9ZnVuY3Rpb24ocSxlZSx0ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KHRlKV07'@;
put 'Y2FzZSAxOnJldHVybiBvZT1oZS5zZW50KCkscS5hcHBMb2M9cS5hcHBMb2N8fGVlLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kiLHEsb2Usdm9pZCAwLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pXTtjYXNlIDI6'@;
put 'cmV0dXJuIHNlPWhlLnNlbnQoKS5yZXN1bHQsWzIsUHJvbWlzZS5yZXNvbHZlKHNlKV19fSl9KX0sVS5wcm90b3R5cGUuZGVwbG95WmlwRmlsZT1mdW5jdGlvbihxLGVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGUsb2Usc2UsaGUsdWUsY2U7cmV0dXJu'@;
put 'IEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0ZT1SKDI5NzUpLmNyZWF0ZVJlYWRTdHJlYW0sWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoZWUpXTtjYXNlIDE6cmV0dXJuIG9lPUcuc2VudCgpLFs0LHRlKHEpXTtjYXNlIDI6cmV0dXJu'@;
put 'IHNlPUcuc2VudCgpLChoZT1uZXcgaykuYXBwZW5kKCJmaWxlIixzZSksdWU9Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIuY29uY2F0KGhlLmdldEJvdW5kYXJ5KCkpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kvdXBsb2FkIixoZSxv'@;
put 'ZSx1ZSx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KV07Y2FzZSAzOnJldHVybiBjZT1HLnNlbnQoKS5yZXN1bHQsWzIsUHJvbWlzZS5yZXNvbHZlKGNlKV19fSl9KX0sVS5wcm90b3R5cGUuZXhlY3V0ZUpvYj1mdW5jdGlvbihxLGVlLHRlKXtyZXR1cm4gSyh0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2UsaGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbih1ZSl7c3dpdGNoKHVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG9lPXRlP3RlLmFjY2Vzc190b2tlbjp2b2lkIDAsc2U9cS5fcHJvZ3JhbS5zdGFydHNXaXRoKCIvIik/cS5fcHJv'@;
put 'Z3JhbToiIi5jb25jYXQoZWUsIi8iKS5jb25jYXQocS5fcHJvZ3JhbSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL3N0cC9leGVjdXRlIix6KHooe19kZWJ1ZzoxMzF9LHEpLHtfcHJvZ3JhbTpzZX0pLG9lKV07Y2FzZSAxOnJldHVyblsyLHtyZXN1bHQ6KGhlPXVlLnNl'@;
put 'bnQoKSkucmVzdWx0LGxvZzpoZS5sb2d9XX19KX0pfSxVLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKHEsZWUsdGUpe3JldHVybiB2b2lkIDA9PT1lZSYmKGVlPSJzYXMiKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZTtyZXR1cm4gSSh0aGlzLGZ1'@;
put 'bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdCh0ZSldO2Nhc2UgMTpyZXR1cm4gb2U9aGUuc2VudCgpLHNlPXtsb2c6IiJ9LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9jb2RlL2V4ZWN1'@;
put 'dGUiLHtjb2RlOnEscnVuVGltZTplZX0sb2UpLnRoZW4oZnVuY3Rpb24odWUpe3ZhciBHPXVlLnByaW50T3V0cHV0LGI9dWUucmVzdWx0O3NlLmxvZz11ZS5sb2csRyYmKHNlLnByaW50T3V0cHV0PUcpLGImJihzZS53ZWJvdXQ9Yil9KS5jYXRjaChmdW5jdGlvbih1ZSl7dGhyb3coMCxqLnBy'@;
put 'ZWZpeE1lc3NhZ2UpKHVlLCJFcnJvciB3aGlsZSBzZW5kaW5nIFBPU1QgcmVxdWVzdCB0byBleGVjdXRlIGNvZGUuICIpfSldO2Nhc2UgMjpyZXR1cm4gaGUuc2VudCgpLFsyLHNlXX19KX0pfSxVLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbihxLGVlKXtyZXR1cm4gSyh0aGlz'@;
put 'LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHRlKXtyZXR1cm5bMiwoMCxWLmdldEFjY2Vzc1Rva2VuRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxxLGVlKV19KX0pfSxVLnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKHEpe3JldHVy'@;
put 'biBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZWUpe3JldHVyblsyLCgwLEIucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQscSldfSl9KX0sVX0oKTtPLlNBU2pzQXBpQ2xpZW50PVh9LDY5MDM6ZnVuY3Rpb24o'@;
put 'TSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihYLFUscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKGNlKXt0cnl7dWUoZWUubmV4dChjZSkp'@;
put 'fWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiBoZShjZSl7dHJ5e3VlKGVlLnRocm93KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIHVlKGNlKXt2YXIgRztjZS5kb25lP3RlKGNlLnZhbHVlKTooRz1jZS52YWx1ZSxHIGluc3RhbmNlb2YgcT9HOm5ldyBxKGZ1bmN0aW9uKGIpe2IoRyl9'@;
put 'KSkudGhlbihzZSxoZSl9dWUoKGVlPWVlLmFwcGx5KFgsVXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWCxVKXt2YXIgcSxlZSx0ZSxvZSxzZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm4g'@;
put 'dGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gb2U9e25leHQ6aGUoMCksdGhyb3c6aGUoMSkscmV0dXJuOmhlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYob2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksb2U7ZnVuY3Rpb24gaGUodWUpe3Jl'@;
put 'dHVybiBmdW5jdGlvbihjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe2lmKHEpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7c2U7KXRyeXtpZihxPTEsZWUmJih0ZT0yJkdbMF0/ZWUucmV0dXJuOkdbMF0/ZWUudGhyb3d8fCgodGU9ZWUu'@;
put 'cmV0dXJuKSYmdGUuY2FsbChlZSksMCk6ZWUubmV4dCkmJiEodGU9dGUuY2FsbChlZSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKGVlPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsr'@;
put 'LHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLGVlPUdbMV0sRz1bMF07Y29udGludWU7Y2FzZSA3Okc9c2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh0ZT0odGU9c2UudHJ5cykubGVuZ3RoPjAmJnRlW3RlLmxlbmd0aC0xXSl8'@;
put 'fDYhPT1HWzBdJiYyIT09R1swXSkpe3NlPTA7Y29udGludWV9aWYoMz09PUdbMF0mJighdGV8fEdbMV0+dGVbMF0mJkdbMV08dGVbM10pKXtzZS5sYWJlbD1HWzFdO2JyZWFrfWlmKDY9PT1HWzBdJiZzZS5sYWJlbDx0ZVsxXSl7c2UubGFiZWw9dGVbMV0sdGU9RzticmVha31pZih0ZSYmc2Uu'@;
put 'bGFiZWw8dGVbMl0pe3NlLmxhYmVsPXRlWzJdLHNlLm9wcy5wdXNoKEcpO2JyZWFrfXRlWzJdJiZzZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZX1HPVUuY2FsbChYLHNlKX1jYXRjaChiKXtHPVs2LGJdLGVlPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBdKXRocm93IEdbMV07'@;
put 'cmV0dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFt1ZSxjZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNlc3Npb25NYW5hZ2VyPXZvaWQgMDt2YXIgRT1SKDEyMzApLGo9UigxMzk1KSxWPVIoNTkyOCksQj1SKDk3'@;
put 'NzgpLFk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBYKFUscSxlZSl7dGhpcy5zZXJ2ZXJVcmw9VSx0aGlzLmNvbnRleHROYW1lPXEsdGhpcy5yZXF1ZXN0Q2xpZW50PWVlLHRoaXMubG9nZ2VkRXJyb3JzPVtdLHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yPSJFcnJvciB3aGlsZSBnZXR0aW5nIHNl'@;
put 'c3Npb24gc3RhdGUgbGluay4gIix0aGlzLnNlc3Npb25zPVtdLHRoaXMuY3VycmVudENvbnRleHQ9bnVsbCx0aGlzLnNldHRpbmdDb250ZXh0PSExLHRoaXMuX2RlYnVnPSExLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZT17cHJpbnRlZDohMSxzdGF0ZTpFLlNlc3Npb25TdGF0ZS5Ob1N0YXRl'@;
put 'fSxVJiYoMCxWLmlzVXJsKShVKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJkZWJ1ZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z30sc2V0OmZ1bmN0aW9uKFUpe3RoaXMuX2RlYnVnPVV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw'@;
put 'fSksWC5wcm90b3R5cGUuaXNTZXNzaW9uVmFsaWQ9ZnVuY3Rpb24oVSl7aWYoIVUpcmV0dXJuITE7dmFyIHE9KChuZXcgRGF0ZSkuZ2V0VGltZSgpLW5ldyBEYXRlKFUuY3JlYXRpb25UaW1lU3RhbXApLmdldFRpbWUoKSkvMWUzO3JldHVybiEoIVUuYXR0cmlidXRlc3x8cT49VS5hdHRyaWJ1'@;
put 'dGVzLnNlc3Npb25JbmFjdGl2ZVRpbWVvdXQpfSxYLnByb3RvdHlwZS5yZW1vdmVTZXNzaW9uRnJvbVBvb2w9ZnVuY3Rpb24oVSl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4gcS5pZCE9PVUuaWR9KX0sWC5wcm90b3R5cGUucmVtb3ZlRXhw'@;
put 'aXJlZFNlc3Npb25zPWZ1bmN0aW9uKCl7dmFyIFU9dGhpczt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBVLmlzU2Vzc2lvblZhbGlkKHEpfSl9LFgucHJvdG90eXBlLnRocm93RXJyb3JzPWZ1bmN0aW9uKFUscSl7dGhyb3cgcT8oMCxCLnBy'@;
put 'ZWZpeE1lc3NhZ2UpKG5ldyBFcnJvcihVLmpvaW4oIi4gIikpLHEpOm5ldyBFcnJvcihVLm1hcChmdW5jdGlvbihlZSl7cmV0dXJuIGVlLm1lc3NhZ2U/ZWUubWVzc2FnZTplZX0pLmpvaW4oIi4gIikpfSxYLnByb3RvdHlwZS5nZXRTZXNzaW9uPWZ1bmN0aW9uKFUpe3JldHVybiBJKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9W10sZWU9ITEsdGU9ZnVuY3Rpb24oKXtxLmxlbmd0aCYmIWVlJiYoZWU9ITAsc2UudGhyb3dFcnJv'@;
put 'cnMocSkpfSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3RoPyh0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChvZT10aGlzLnNlc3Npb25zWzBdKSx0aGlzLmNyZWF0ZVNlc3Npb25zKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2godWUpfSksdGhp'@;
put 'cy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5wdXNoKHVlKX0pLHRlKCksWzIsb2VdKTpbMywxXTtjYXNlIDE6cmV0dXJuIHRoaXMuY3JlYXRlU2Vzc2lvbnMoVSkuY2F0Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KSxbNCx0aGlzLmNyZWF0ZUFu'@;
put 'ZFdhaXRGb3JTZXNzaW9uKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2godWUpfSldO2Nhc2UgMjpyZXR1cm4gaGUuc2VudCgpLHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksb2U9dGhpcy5zZXNzaW9ucy5wb3AoKSx0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChvZSksdGUoKSxb'@;
put 'MixvZV19fSl9KX0sWC5wcm90b3R5cGUuZ2V0RXJyb3JNZXNzYWdlPWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJuIiIuY29uY2F0KGVlLCIgcmVxdWVzdCB0byAiKS5jb25jYXQocSwiIGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIpLmNvbmNhdChVLnJlc3BvbnNlLnN0YXR1c3x8InVua25vd24i'@;
put 'LCIuICIpK1UucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHwiIn0sWC5wcm90b3R5cGUuY2xlYXJTZXNzaW9uPWZ1bmN0aW9uKFUscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9l'@;
put 'LmxhYmVsKXtjYXNlIDA6cmV0dXJuIGVlPSIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChVKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGVlLHEpLnRoZW4oZnVuY3Rpb24oKXt0ZS5zZXNzaW9ucz10ZS5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24oc2Upe3JldHVybiBzZS5pZCE9'@;
put 'PVV9KX0pLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkodGUuZ2V0RXJyb3JNZXNzYWdlKHNlLGVlLCJERUxFVEUiKSwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSAxOnJldHVyblsyLG9lLnNlbnQoKV19fSl9KX0sWC5wcm90b3R5'@;
put 'cGUuY3JlYXRlU2Vzc2lvbnM9ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT1bXSx0aGlzLnNlc3Npb25zLmxlbmd0'@;
put 'aD9bMywyXTpbNCwoMCxWLmFzeW5jRm9yRWFjaCkobmV3IEFycmF5KDEpLGZ1bmN0aW9uKCl7cmV0dXJuIEkoZWUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY3JlYXRlQW5k'@;
put 'V2FpdEZvclNlc3Npb24oVSkuY2F0Y2goZnVuY3Rpb24oc2Upe3EucHVzaChzZSl9KV07Y2FzZSAxOnJldHVybiBvZS5zZW50KCksWzJdfX0pfSl9KV07Y2FzZSAxOnRlLnNlbnQoKSx0ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gcS5sZW5ndGgmJnRoaXMudGhyb3dFcnJvcnMocSwiRXJyb3Ig'@;
put 'd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIiksWzJdfX0pfSl9LFgucHJvdG90eXBlLndhaXRGb3JDdXJyZW50Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihxKXtyZXR1cm5b'@;
put 'MixuZXcgUHJvbWlzZShmdW5jdGlvbihlZSl7dmFyIHRlPXNldEludGVydmFsKGZ1bmN0aW9uKCl7VS5jdXJyZW50Q29udGV4dCYmKFUuc2V0dGluZ0NvbnRleHQ9ITEsY2xlYXJJbnRlcnZhbCh0ZSksZWUoKSl9LDEwMCl9KV19KX0pfSxYLnByb3RvdHlwZS5jcmVhdGVBbmRXYWl0Rm9yU2Vz'@;
put 'c2lvbj1mdW5jdGlvbihVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZSxoZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmN1cnJlbnRDb250ZXh0P1szLDRd'@;
put 'OnRoaXMuc2V0dGluZ0NvbnRleHQ/WzMsMl06WzQsdGhpcy5zZXRDdXJyZW50Q29udGV4dChVKV07Y2FzZSAxOnJldHVybiB1ZS5zZW50KCksWzMsNF07Y2FzZSAyOnJldHVybls0LHRoaXMud2FpdEZvckN1cnJlbnRDb250ZXh0KCldO2Nhc2UgMzp1ZS5zZW50KCksdWUubGFiZWw9NDtjYXNl'@;
put 'IDQ6cmV0dXJuIHE9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQodGhpcy5jdXJyZW50Q29udGV4dC5pZCwiL3Nlc3Npb25zIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QocSx7fSxVKS5jYXRjaChmdW5jdGlvbihjZSl7dGhyb3coMCxC'@;
put 'LnByZWZpeE1lc3NhZ2UpKGhlLmdldEVycm9yTWVzc2FnZShjZSxxLCJQT1NUIiksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgNTppZihlZT11ZS5zZW50KCksKHRlPWVlLnJlc3VsdCkuZXRhZz1vZT1lZS5ldGFnLCEoc2U9dGUubGlua3MuZmluZChmdW5jdGlv'@;
put 'bihjZSl7cmV0dXJuInN0YXRlIj09PWNlLnJlbH0pKSl0aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcjtyZXR1cm4gdGUuc3RhdGVVcmw9c2UuaHJlZixbNCx0aGlzLndhaXRGb3JTZXNzaW9uKHRlLG9lLFUpXTtjYXNlIDY6cmV0dXJuIHVlLnNlbnQoKSx0aGlzLnNlc3Npb25zLnB1'@;
put 'c2godGUpLFsyLHRlXX19KX0pfSxYLnByb3RvdHlwZS5zZXRDdXJyZW50Q29udGV4dD1mdW5jdGlvbihVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSxvZSxzZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybiB0aGlzLmN1cnJlbnRDb250ZXh0P1szLDJdOihxPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiKSx0aGlzLnNldHRpbmdDb250ZXh0PSEwLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQocSxVKS5jYXRjaChmdW5j'@;
put 'dGlvbih1ZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKHNlLmdldEVycm9yTWVzc2FnZSh1ZSxxLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsaXN0IG9mIGNvbnRleHRzLiAiKX0pXSk7Y2FzZSAxOmlmKGVlPWhlLnNlbnQoKS5yZXN1bHQsIShvZT0oZWUmJmVlLml0ZW1zJiZlZS5p'@;
put 'dGVtcy5sZW5ndGg/ZWUuaXRlbXM6W10pLmZpbmQoZnVuY3Rpb24odWUpe3JldHVybiB1ZS5uYW1lPT09c2UuY29udGV4dE5hbWV9KSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgY29udGV4dCAnIi5jb25jYXQodGhpcy5jb250ZXh0TmFtZSwiJyB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIg'@;
put 'IikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIuIikpO3RoaXMuY3VycmVudENvbnRleHQ9b2UsUHJvbWlzZS5yZXNvbHZlKCksaGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9LFgucHJvdG90eXBlLndhaXRGb3JTZXNzaW9uPWZ1bmN0aW9uKFUscSxlZSl7dmFyIHRlO3JldHVybiBJ'@;
put 'KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZSxoZSx1ZSxjZSxiLEQ7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybiBzZT1VLnN0YXRlVXJsLGhlPXoubG9nZ2VyfHxLLChvZT1VLnN0YXRlKSE9PUUuU2Vzc2lvblN0'@;
put 'YXRlLlBlbmRpbmcmJm9lIT09RS5TZXNzaW9uU3RhdGUuUnVubmluZyYmb2UhPT1FLlNlc3Npb25TdGF0ZS5Ob1N0YXRlP1szLDZdOnNlPyh0aGlzLmRlYnVnJiYhdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQmJihoZS5pbmZvKCJQb2xsaW5nOiAiLmNvbmNhdCh0aGlzLnNlcnZl'@;
put 'clVybCtzZSkpLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSEwKSx1ZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChzZSwiP3dhaXQ9MzAiKSxbNCx0aGlzLmdldFNlc3Npb25TdGF0ZSh1ZSxxLGVlKS5jYXRjaChmdW5jdGlvbihOKXt0aHJvdygwLEIucHJlZml4'@;
put 'TWVzc2FnZSkoTiwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3Igc2Vzc2lvbi4gIil9KV0pOlszLDRdO2Nhc2UgMTpyZXR1cm4gY2U9SC5zZW50KCksYj1jZS5yZXNwb25zZVN0YXR1cyxvZT1jZS5yZXN1bHQudHJpbSgpLHRoaXMuZGVidWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0'@;
put 'ZSE9PW9lJiYoaGUuaW5mbygiQ3VycmVudCBzZXNzaW9uIHN0YXRlIGlzICciLmNvbmNhdChvZSwiJyIpKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9b2UsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITEpLG9lP1szLDNdOihEPW5ldyBqLk5vU2Vzc2lvblN0YXRl'@;
put 'RXJyb3IoYix0aGlzLnNlcnZlclVybCtzZSxudWxsPT09KHRlPVUubGlua3MuZmluZChmdW5jdGlvbihOKXtyZXR1cm4ibG9nIj09PU4ucmVsfSkpfHx2b2lkIDA9PT10ZT92b2lkIDA6dGUuaHJlZiksdGhpcy5sb2dnZWRFcnJvcnMuZmluZChmdW5jdGlvbihOKXtyZXR1cm4gTi5zZXJ2ZXJS'@;
put 'ZXNwb25zZVN0YXR1cz09PUQuc2VydmVyUmVzcG9uc2VTdGF0dXN9KXx8KHRoaXMubG9nZ2VkRXJyb3JzLnB1c2goRCksaGUuaW5mbyhELm1lc3NhZ2UpKSxbNCx0aGlzLndhaXRGb3JTZXNzaW9uKFUscSxlZSldKTtjYXNlIDI6cmV0dXJuWzIsSC5zZW50KCldO2Nhc2UgMzpjYXNlIDY6cmV0'@;
put 'dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFsyLG9lXTtjYXNlIDQ6dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7Y2FzZSA1OnJldHVyblszLDddO2Nhc2UgNzpyZXR1cm5bMl19fSl9KX0sWC5wcm90b3R5cGUuZ2V0U2Vzc2lvblN0YXRlPWZ1bmN0aW9uKFUscSxlZSl7cmV0dXJu'@;
put 'IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChVLGVlLCJ0ZXh0L3BsYWluIix7IklmLU5vbmUtTWF0Y2giOnF9'@;
put 'KS50aGVuKGZ1bmN0aW9uKHNlKXtyZXR1cm57cmVzdWx0OnNlLnJlc3VsdCxyZXNwb25zZVN0YXR1czpzZS5zdGF0dXN9fSkuY2F0Y2goZnVuY3Rpb24oc2Upe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKSh0ZS5nZXRFcnJvck1lc3NhZ2Uoc2UsVSwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRp'@;
put 'bmcgc2Vzc2lvbiBzdGF0ZS4gIil9KV07Y2FzZSAxOnJldHVyblsyLG9lLnNlbnQoKV19fSl9KX0sWC5wcm90b3R5cGUuZ2V0VmFyaWFibGU9ZnVuY3Rpb24oVSxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGUsb2U9dGhpcztyZXR1cm4gayh0aGlz'@;
put 'LGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGU9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9zZXNzaW9ucy8iKS5jb25jYXQoVSwiL3ZhcmlhYmxlcy8iKS5jb25jYXQocSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0ZSxlZSkuY2F0'@;
put 'Y2goZnVuY3Rpb24oaGUpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShvZS5nZXRFcnJvck1lc3NhZ2UoaGUsdGUsIkdFVCIpLCJFcnJvciB3aGlsZSBmZXRjaGluZyBzZXNzaW9uIHZhcmlhYmxlICciLmNvbmNhdChxLCInLiAiKSl9KV07Y2FzZSAxOnJldHVyblsyLHNlLnNlbnQoKV19fSl9'@;
put 'KX0sWH0oKTtPLlNlc3Npb25NYW5hZ2VyPVl9LDE2MjI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odGUpe2Zvcih2YXIg'@;
put 'b2Usc2U9MSxoZT1hcmd1bWVudHMubGVuZ3RoO3NlPGhlO3NlKyspZm9yKHZhciB1ZSBpbiBvZT1hcmd1bWVudHNbc2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvZSx1ZSkmJih0ZVt1ZV09b2VbdWVdKTtyZXR1cm4gdGV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMp'@;
put 'fSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih0ZSxvZSxzZSxoZSl7cmV0dXJuIG5ldyhzZXx8KHNlPVByb21pc2UpKShmdW5jdGlvbih1ZSxjZSl7ZnVuY3Rpb24gRyhIKXt0cnl7RChoZS5uZXh0KEgpKX1jYXRjaChOKXtjZShOKX19ZnVuY3Rpb24gYihIKXt0cnl7RChoZS50'@;
put 'aHJvdyhIKSl9Y2F0Y2goTil7Y2UoTil9fWZ1bmN0aW9uIEQoSCl7dmFyIE47SC5kb25lP3VlKEgudmFsdWUpOihOPUgudmFsdWUsTiBpbnN0YW5jZW9mIHNlP046bmV3IHNlKGZ1bmN0aW9uKGcpe2coTil9KSkudGhlbihHLGIpfUQoKGhlPWhlLmFwcGx5KHRlLG9lfHxbXSkpLm5leHQoKSl9'@;
put 'KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbih0ZSxvZSl7dmFyIHNlLGhlLHVlLGNlLEc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdWVbMF0pdGhyb3cgdWVbMV07cmV0dXJuIHVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGNlPXtuZXh0OmIoMCksdGhy'@;
put 'b3c6YigxKSxyZXR1cm46YigyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGNlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGNlO2Z1bmN0aW9uIGIoRCl7cmV0dXJuIGZ1bmN0aW9uKEgpe3JldHVybiBmdW5jdGlvbihOKXtpZihzZSl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtHOyl0cnl7aWYoc2U9MSxoZSYmKHVlPTImTlswXT9oZS5yZXR1cm46TlswXT9oZS50aHJvd3x8KCh1ZT1oZS5yZXR1cm4pJiZ1ZS5jYWxsKGhlKSwwKTpoZS5uZXh0KSYmISh1ZT11ZS5jYWxsKGhlLE5b'@;
put 'MV0pKS5kb25lKXJldHVybiB1ZTtzd2l0Y2goaGU9MCx1ZSYmKE49WzImTlswXSx1ZS52YWx1ZV0pLE5bMF0pe2Nhc2UgMDpjYXNlIDE6dWU9TjticmVhaztjYXNlIDQ6cmV0dXJuIEcubGFiZWwrKyx7dmFsdWU6TlsxXSxkb25lOiExfTtjYXNlIDU6Ry5sYWJlbCsrLGhlPU5bMV0sTj1bMF07'@;
put 'Y29udGludWU7Y2FzZSA3Ok49Ry5vcHMucG9wKCksRy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodWU9KHVlPUcudHJ5cykubGVuZ3RoPjAmJnVlW3VlLmxlbmd0aC0xXSl8fDYhPT1OWzBdJiYyIT09TlswXSkpe0c9MDtjb250aW51ZX1pZigzPT09TlswXSYmKCF1ZXx8Tlsx'@;
put 'XT51ZVswXSYmTlsxXTx1ZVszXSkpe0cubGFiZWw9TlsxXTticmVha31pZig2PT09TlswXSYmRy5sYWJlbDx1ZVsxXSl7Ry5sYWJlbD11ZVsxXSx1ZT1OO2JyZWFrfWlmKHVlJiZHLmxhYmVsPHVlWzJdKXtHLmxhYmVsPXVlWzJdLEcub3BzLnB1c2goTik7YnJlYWt9dWVbMl0mJkcub3BzLnBv'@;
put 'cCgpLEcudHJ5cy5wb3AoKTtjb250aW51ZX1OPW9lLmNhbGwodGUsRyl9Y2F0Y2goZyl7Tj1bNixnXSxoZT0wfWZpbmFsbHl7c2U9dWU9MH1pZig1Jk5bMF0pdGhyb3cgTlsxXTtyZXR1cm57dmFsdWU6TlswXT9OWzFdOnZvaWQgMCxkb25lOiEwfX0oW0QsSF0pfX19O09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO3ZhciBqPVIoNzc1NyksVj1SKDk3NzgpLEI9UigzNjA3KSxZPVIoNzA0KSxYPVIoNTkyOCksVT1SKDcxNCkscT1SKDEzNDMpLGVlPVIoNjQ5Nik7Ty5leGVjdXRlT25Db21wdXRl'@;
put 'QXBpPWZ1bmN0aW9uIHRlKG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLEMsUyx2KXt2YXIgcCx3O3JldHVybiB2b2lkIDA9PT1EJiYoRD1udWxsKSx2b2lkIDA9PT1IJiYoSD0hMSksdm9pZCAwPT09TiYmKE49ITEpLHZvaWQgMD09PWcmJihnPSEwKSx2b2lkIDA9PT1TJiYoUz0hMSksayh0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSixuZSxkZSxmZSx4ZSxMZSxGZSxPZSxqZSxXZSxLZSxZZSxRZSxsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodCxNZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRGUpe3N3aXRjaChEZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBK'@;
put 'PShifHx7fSkuYWNjZXNzX3Rva2VuLGI/WzQsKDAsWS5nZXRUb2tlbnMpKG9lLGIpXTpbMywyXTtjYXNlIDE6Sj1EZS5zZW50KCkuYWNjZXNzX3Rva2VuLERlLmxhYmVsPTI7Y2FzZSAyOm5lPXoubG9nZ2VyfHxLLERlLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBEZS50cnlzLnB1c2goWzMsMTks'@;
put 'LDIwXSksZGU9dm9pZCAwLFs0LHNlLmdldFNlc3Npb24oSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDQ6cmV0dXJuIGZlPURlLnNlbnQoKSxkZT1mZS5pZCxTP1s0LHNlLmdl'@;
put 'dFZhcmlhYmxlKGRlLCJTWVNKT0JJRCIsSikuY2F0Y2goZnVuY3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHZhcmlhYmxlLiAiKX0pXTpbMyw2XTtjYXNlIDU6KHhlPURlLnNlbnQoKS5yZXN1bHQpJiZ4ZS52YWx1ZSYm'@;
put 'KExlPWhlP3VlLnNwbGl0KGhlKS5qb2luKCIiKS5yZXBsYWNlKC9eXC8vLCIiKTp1ZSwoei5sb2dnZXJ8fEspLmluZm8oIlRyaWdnZXJpbmcgJyIuY29uY2F0KExlLCInIHdpdGggUElEICIpLmNvbmNhdCh4ZS52YWx1ZSwiIGF0ICIpLmNvbmNhdCgoMCxqLnRpbWVzdGFtcFRvWVlZWU1NRERI'@;
put 'SE1NU1MpKCkpKSksRGUubGFiZWw9NjtjYXNlIDY6cmV0dXJuIEZlPXZvaWQgMCwoMCxYLmlzUmVsYXRpdmVQYXRoKSh1ZSk/RmU9ImV4ZWMtIi5jb25jYXQodWUuaW5jbHVkZXMoIi8iKT91ZS5zcGxpdCgiLyIpWzFdOnVlKTooT2U9dWUuc3BsaXQoIi8iKSxGZT1PZS5wb3AoKSksamU9e1NZ'@;
put 'U19KRVNfSk9CX1VSSToiIixfcHJvZ3JhbTooMCxYLmlzUmVsYXRpdmVQYXRoKSh1ZSk/aGUrIi8iK3VlOnVlfSx2JiYoamU9SShJKHt9LGplKSx2KSksSCYmKGplPUkoSSh7fSxqZSkse19ERUJVRzoxMzF9KSksV2U9W10sRD9KU09OLnN0cmluZ2lmeShEKS5pbmNsdWRlcygiOyIpP1s0LCgw'@;
put 'LGVlLnVwbG9hZFRhYmxlcykob2UsRCxKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgdGFibGVzLiAiKX0pXTpbMyw4XTpbMyw5XTtjYXNlIDc6cmV0dXJuIFdlPURlLnNlbnQoKSxqZS5fd2ViaW5fZmlsZV9j'@;
put 'b3VudD1XZS5sZW5ndGgsV2UuZm9yRWFjaChmdW5jdGlvbih6ZSxvdCl7amVbIl93ZWJpbl9maWxldXJpIi5jb25jYXQob3QrMSldPSIvZmlsZXMvZmlsZXMvIi5jb25jYXQoemUuZmlsZS5pZCksamVbIl93ZWJpbl9uYW1lIi5jb25jYXQob3QrMSldPXplLnRhYmxlTmFtZX0pLFszLDldO2Nh'@;
put 'c2UgODpqZT1JKEkoe30samUpLCgwLFUuZm9ybWF0RGF0YUZvclJlcXVlc3QpKEQpKSxEZS5sYWJlbD05O2Nhc2UgOTpyZXR1cm4gS2U9e25hbWU6RmV8fCJEZWZhdWx0IEpvYiBOYW1lIixkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsY29kZTpjZSx2YXJpYWJsZXM6amUsdmVyc2lv'@;
put 'bjoyfSxbNCxvZS5wb3N0KCIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChkZSwiL2pvYnMiKSxLZSxKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBwb3N0aW5nIGpvYi4gIil9KV07Y2FzZSAxMDpyZXR1cm4gWWU9RGUuc2Vu'@;
put 'dCgpLFFlPVllLnJlc3VsdCxnPyhIJiYobmUuaW5mbygiSm9iIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgJyIuY29uY2F0KEZlLCInLiIpKSxuZS5pbmZvKCJZb3UgY2FuIG1vbml0b3IgdGhlIGpvYiBwcm9ncmVzcyBhdCAnIi5jb25jYXQob2UuZ2V0QmFzZVVybCgpKS5jb25jYXQoUWUubGlu'@;
put 'a3MuZmluZChmdW5jdGlvbih6ZSl7cmV0dXJuInN0YXRlIj09PXplLnJlbH0pLmhyZWYsIicuIikpKSxbNCwoMCxxLnBvbGxKb2JTdGF0ZSkob2UsUWUsSCxiLEMse3Nlc3Npb246ZmUsc2Vzc2lvbk1hbmFnZXI6c2V9KS5jYXRjaChmdW5jdGlvbih6ZSl7cmV0dXJuIGsoTWUsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbigpe3ZhciBvdCx1dCxNdCxIdCxQdCxvbjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKENuKXtzd2l0Y2goQ24ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gb3Q9bnVsbD09PShQdD16ZT8ucmVzcG9uc2UpfHx2b2lkIDA9PT1QdD92b2lkIDA6UHQuZGF0YSx1dD0vZXJyPVswLTld'@;
put 'KiwvLmV4ZWMob3QpLCI1MTEzIiE9PShudWxsPT09KG9uPXV0Py5bMF0pfHx2b2lkIDA9PT1vbj92b2lkIDA6b24uc2xpY2UoNCwtMSkpP1szLDJdOihNdD1RZS5saW5rcy5maW5kKGZ1bmN0aW9uKFV0KXtyZXR1cm4idXAiPT09VXQucmVsfSkuaHJlZisiL2xvZyIsSHQ9emUsWzQsKDAsWC5m'@;
put 'ZXRjaExvZ0J5Q2h1bmtzKShvZSxKLE10LDFlNildKTtjYXNlIDE6SHQubG9nPUNuLnNlbnQoKSxDbi5sYWJlbD0yO2Nhc2UgMjp0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9fSl9KX0pXSk6WzIsZmVdO2Nhc2UgMTE6cmV0'@;
put 'dXJuIGx0PURlLnNlbnQoKSxiP1s0LCgwLFkuZ2V0VG9rZW5zKShvZSxiKV06WzMsMTNdO2Nhc2UgMTI6Sj1EZS5zZW50KCkuYWNjZXNzX3Rva2VuLERlLmxhYmVsPTEzO2Nhc2UgMTM6cmV0dXJuWzQsb2UuZ2V0KCIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdChkZSwiL2pvYnMvIikuY29u'@;
put 'Y2F0KFFlLmlkKSxKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYi4gIil9KV07Y2FzZSAxNDpyZXR1cm4gUGU9RGUuc2VudCgpLnJlc3VsdCxiZT12b2lkIDAsQWU9IiIsVGU9UGUubGlua3MuZmluZChmdW5j'@;
put 'dGlvbih6ZSl7cmV0dXJuImxvZyI9PT16ZS5yZWx9KSxIJiZUZT8ocWU9IiIuY29uY2F0KFRlLmhyZWYsIi9jb250ZW50IiksWGU9bnVsbCE9PSh3PW51bGw9PT0ocD1QZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09cD92b2lkIDA6cC5saW5lQ291bnQpJiZ2b2lkIDAhPT13P3c6MWU2LFs0'@;
put 'LCgwLFguZmV0Y2hMb2dCeUNodW5rcykob2UsSixxZSxYZSldKTpbMywxNl07Y2FzZSAxNTpBZT1EZS5zZW50KCksRGUubGFiZWw9MTY7Y2FzZSAxNjppZihsdD09PXEuSm9iU3RhdGUuRmFpbGVkfHxsdD09PXEuSm9iU3RhdGUuRXJyb3IpdGhyb3cgbmV3IEIuQ29tcHV0ZUpvYkV4ZWN1dGlv'@;
put 'bkVycm9yKFBlLEFlKTtyZXR1cm4gTj8oVWU9Ii9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KGRlLCIvZmlsZXJlZnMvX3dlYm91dC9jb250ZW50IiksWzQsb2UuZ2V0KFVlLEosInRleHQvcGxhaW4iKS5jYXRjaChmdW5jdGlvbih6ZSl7cmV0dXJuIGsoTWUsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbigpe3ZhciBvdCx1dCxNdCxIdDtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFB0KXtzd2l0Y2goUHQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gemUgaW5zdGFuY2VvZiBCLk5vdEZvdW5kRXJyb3ImJlRlPyhvdD0iIi5jb25jYXQoVGUuaHJlZiwiL2NvbnRlbnQiKSx1dD1udWxsIT09KEh0PW51'@;
put 'bGw9PT0oTXQ9UGUubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PU10P3ZvaWQgMDpNdC5saW5lQ291bnQpJiZ2b2lkIDAhPT1IdD9IdDoxZTYsWzQsKDAsWC5mZXRjaExvZ0J5Q2h1bmtzKShvZSxKLG90LHV0KV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gQWU9UHQuc2VudCgpLFsyLFByb21pc2Uu'@;
put 'cmVqZWN0KHtzdGF0dXM6NTAwLGxvZzpBZX0pXTtjYXNlIDI6cmV0dXJuWzIse3Jlc3VsdDpKU09OLnN0cmluZ2lmeSh6ZSl9XX19KX0pfSldKTpbMix7am9iOlBlLGxvZzpBZX1dO2Nhc2UgMTc6cmV0dXJuIGJlPURlLnNlbnQoKSxbNCxzZS5jbGVhclNlc3Npb24oZGUsSikuY2F0Y2goZnVu'@;
put 'Y3Rpb24oemUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgY2xlYXJpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSAxODpyZXR1cm4gRGUuc2VudCgpLFsyLHtyZXN1bHQ6YmU/LnJlc3VsdCxsb2c6QWV9XTtjYXNlIDE5OmlmKDQwND09PShodD1EZS5zZW50KCkpLnN0'@;
put 'YXR1cylyZXR1cm5bMix0ZShvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILCExLCEwKV07dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKGh0LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgc2NyaXB0LiAiKTtjYXNlIDIwOnJldHVyblsyXX19KX0pfX0sNzQ1ODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJp'@;
put 'Y3QiO3ZhciB6PVIoNDE1NSksSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oWCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShv'@;
put 'ZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUsc2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFw'@;
put 'cGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtu'@;
put 'ZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Up'@;
put 'e2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1kucmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxs'@;
put 'KFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0s'@;
put 'c2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAmJlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJigh'@;
put 'WHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2JyZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3Bz'@;
put 'LnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0RmlsZVN0cmVhbT12b2lkIDA7dmFyIGs9UigyOTc1KSxFPVIoNzc1Nyk7Ty5nZXRGaWxlU3RyZWFtPWZ1bmN0aW9uKGosVil7cmV0dXJuIEsodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'QixZLFgsVSxxO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZWUpe3N3aXRjaChlZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBCPVIoMjk3NSkuY3JlYXRlV3JpdGVTdHJlYW0sWT1WfHx6LmN3ZCgpLFs0LCgwLGsuaXNGb2xkZXIpKFkpXTtjYXNlIDE6cmV0dXJuIGVlLnNlbnQoKT8oWD0iIi5jb25j'@;
put 'YXQoai5uYW1lfHwiam9iIiwiLSIpLmNvbmNhdCgoMCxFLmdlbmVyYXRlVGltZXN0YW1wKSgpLCIubG9nIiksVT1SKDI1MjApLHE9VS5qb2luKFZ8fHouY3dkKCksWCksWzQsQihxKV0pOlszLDNdO2Nhc2UgMjpjYXNlIDQ6cmV0dXJuWzIsZWUuc2VudCgpXTtjYXNlIDM6cmV0dXJuWzQsQihZ'@;
put 'KV19fSl9KX19LDEzNDM6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24ob2Upe2Zvcih2YXIgc2UsaGU9MSx1ZT1hcmd1bWVu'@;
put 'dHMubGVuZ3RoO2hlPHVlO2hlKyspZm9yKHZhciBjZSBpbiBzZT1hcmd1bWVudHNbaGVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxjZSkmJihvZVtjZV09c2VbY2VdKTtyZXR1cm4gb2V9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19h'@;
put 'd2FpdGVyfHxmdW5jdGlvbihvZSxzZSxoZSx1ZSl7cmV0dXJuIG5ldyhoZXx8KGhlPVByb21pc2UpKShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiBiKE4pe3RyeXtIKHVlLm5leHQoTikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEQoTil7dHJ5e0godWUudGhyb3coTikpfWNhdGNoKGcpe0co'@;
put 'Zyl9fWZ1bmN0aW9uIEgoTil7dmFyIGc7Ti5kb25lP2NlKE4udmFsdWUpOihnPU4udmFsdWUsZyBpbnN0YW5jZW9mIGhlP2c6bmV3IGhlKGZ1bmN0aW9uKEMpe0MoZyl9KSkudGhlbihiLEQpfUgoKHVlPXVlLmFwcGx5KG9lLHNlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2Vu'@;
put 'ZXJhdG9yfHxmdW5jdGlvbihvZSxzZSl7dmFyIGhlLHVlLGNlLEcsYj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm4gY2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRz17bmV4dDpEKDApLHRocm93OkQoMSkscmV0dXJuOkQoMil9LCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihHW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEc7ZnVuY3Rpb24gRChIKXtyZXR1cm4gZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKGcpe2lmKGhlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBh'@;
put 'bHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2I7KXRyeXtpZihoZT0xLHVlJiYoY2U9MiZnWzBdP3VlLnJldHVybjpnWzBdP3VlLnRocm93fHwoKGNlPXVlLnJldHVybikmJmNlLmNhbGwodWUpLDApOnVlLm5leHQpJiYhKGNlPWNlLmNhbGwodWUsZ1sxXSkpLmRvbmUpcmV0dXJuIGNlO3N3aXRj'@;
put 'aCh1ZT0wLGNlJiYoZz1bMiZnWzBdLGNlLnZhbHVlXSksZ1swXSl7Y2FzZSAwOmNhc2UgMTpjZT1nO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYi5sYWJlbCsrLHt2YWx1ZTpnWzFdLGRvbmU6ITF9O2Nhc2UgNTpiLmxhYmVsKyssdWU9Z1sxXSxnPVswXTtjb250aW51ZTtjYXNlIDc6Zz1iLm9wcy5w'@;
put 'b3AoKSxiLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChjZT0oY2U9Yi50cnlzKS5sZW5ndGg+MCYmY2VbY2UubGVuZ3RoLTFdKXx8NiE9PWdbMF0mJjIhPT1nWzBdKSl7Yj0wO2NvbnRpbnVlfWlmKDM9PT1nWzBdJiYoIWNlfHxnWzFdPmNlWzBdJiZnWzFdPGNlWzNdKSl7Yi5s'@;
put 'YWJlbD1nWzFdO2JyZWFrfWlmKDY9PT1nWzBdJiZiLmxhYmVsPGNlWzFdKXtiLmxhYmVsPWNlWzFdLGNlPWc7YnJlYWt9aWYoY2UmJmIubGFiZWw8Y2VbMl0pe2IubGFiZWw9Y2VbMl0sYi5vcHMucHVzaChnKTticmVha31jZVsyXSYmYi5vcHMucG9wKCksYi50cnlzLnBvcCgpO2NvbnRpbnVl'@;
put 'fWc9c2UuY2FsbChvZSxiKX1jYXRjaChDKXtnPVs2LENdLHVlPTB9ZmluYWxseXtoZT1jZT0wfWlmKDUmZ1swXSl0aHJvdyBnWzFdO3JldHVybnt2YWx1ZTpnWzBdP2dbMV06dm9pZCAwLGRvbmU6ITB9fShbSCxOXSl9fX0saj10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKG9l'@;
put 'LHNlLGhlKXtpZihoZXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciB1ZSxjZT0wLEc9c2UubGVuZ3RoO2NlPEc7Y2UrKykhdWUmJmNlIGluIHNlfHwodWV8fCh1ZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzZSwwLGNlKSksdWVbY2VdPXNlW2NlXSk7cmV0dXJuIG9lLmNvbmNh'@;
put 'dCh1ZXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2UpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZG9Qb2xsPU8ucG9sbEpvYlN0YXRlPU8uSm9iU3RhdGU9dm9pZCAwO3ZhciBWLG9lLEI9Uig3MDQpLFk9UigxMzk1KSxYPVIoMTIz'@;
put 'MCksVT1SKDU5MjgpOyhvZT1WPU8uSm9iU3RhdGV8fChPLkpvYlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLG9lLlJ1bm5pbmc9InJ1bm5pbmciLG9lLlBlbmRpbmc9InBlbmRpbmciLG9lLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsb2UuTm9TdGF0ZT0iIixvZS5GYWlsZWQ9'@;
put 'ImZhaWxlZCIsb2UuRXJyb3I9ImVycm9yIixPLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixELEgsTixnLEMsUyx2LHAsdyxKO3JldHVybiBFKHRoaXMsZnVuY3Rpb24obmUpe3N3aXRj'@;
put 'aChuZS5sYWJlbCl7Y2FzZSAwOmlmKGI9ei5sb2dnZXJ8fEssRD1jZT8uc3RyZWFtTG9nfHwhMSxIPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxwb2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUwMCxwb2xsSW50ZXJ2YWw6M2U0'@;
put 'fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dLHZvaWQgMCE9PWNlPyhOPVtjZV0sdm9pZCAwIT09KGc9Y2UucG9sbFN0cmF0ZWd5KT8odGUoZyksZz1nLnNvcnQoZnVuY3Rpb24oZGUsZmUpe3JldHVybiBkZS5tYXhQb2xsQ291bnQtZmUubWF4UG9sbENvdW50fSksTj1q'@;
put 'KGooW10sTiwhMCksZywhMCkpOk49aihqKFtdLE4sITApLEgsITApKTpOPUgsQz1OLnNwbGljZSgwLDEpWzBdLGNlPUkoSSh7fSxDKSxjZXx8e30pLCEoUz1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKGRlKXtyZXR1cm4ic3RhdGUiPT09ZGUucmVsfSkpKXRocm93IG5ldyBFcnJvcigiSm9iIHN0'@;
put 'YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm5bNCxxKG9lLHNlLFYuTm9TdGF0ZSxoZSx1ZSkuY2F0Y2goZnVuY3Rpb24oZGUpe3JldHVybiBiLmVycm9yKCJFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAiLmNvbmNhdChTLmhyZWYsIi4gU3RhcnRpbmcgcG9sbCwgYXNzdW1p'@;
put 'bmcgam9iIHRvIGJlIHJ1bm5pbmcuIiksZGUpLFYuVW5hdmFpbGFibGV9KV07Y2FzZSAxOnJldHVybiB2PW5lLnNlbnQoKSxwPTAsdj09PVYuQ29tcGxldGVkP1syLFByb21pc2UucmVzb2x2ZSh2KV06RCYmKDAsVS5pc05vZGUpKCk/WzQsKDAsUig3NDU4KS5nZXRGaWxlU3RyZWFtKShzZSxj'@;
put 'ZS5sb2dGb2xkZXJQYXRoKV06WzMsM107Y2FzZSAyOnc9bmUuc2VudCgpLG5lLmxhYmVsPTM7Y2FzZSAzOnJldHVybls0LCgwLE8uZG9Qb2xsKShvZSxzZSx2LGhlLHAsY2UsdWUsRCx3LEcpXTtjYXNlIDQ6aWYoSj1uZS5zZW50KCkscD1KLnBvbGxDb3VudCwhZWUodj1KLnN0YXRlKXx8cD49'@;
put 'Y2UubWF4UG9sbENvdW50JiYhTi5sZW5ndGgpcmV0dXJuWzIsdl07bmUubGFiZWw9NTtjYXNlIDU6cmV0dXJuIE4ubGVuZ3RoJiZlZSh2KT8oQz1OLnNwbGljZSgwLDEpWzBdLGNlJiYoQy5sb2dGb2xkZXJQYXRoPWNlLmxvZ0ZvbGRlclBhdGgpLFs0LCgwLE8uZG9Qb2xsKShvZSxzZSx2LGhl'@;
put 'LHAsQyx1ZSxELHcsRyldKTpbMyw3XTtjYXNlIDY6cmV0dXJuIEo9bmUuc2VudCgpLHY9Si5zdGF0ZSxwPUoucG9sbENvdW50LFszLDVdO2Nhc2UgNzpyZXR1cm4gdyYmdy5lbmQoKSxbMix2XX19KX0pfTt2YXIgcT1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSl7cmV0dXJuIGsodm9pZCAwLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyxiO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRz1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKEgpe3JldHVybiJzdGF0ZSI9PT1ILnJlbH0pLGVlKGhlKT8oYj12b2lkIDAsY2U/WzQsKDAs'@;
put 'Qi5nZXRUb2tlbnMpKG9lLGNlKV06WzMsMl0pOlszLDRdO2Nhc2UgMTpiPUQuc2VudCgpLEQubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzQsb2UuZ2V0KCIiLmNvbmNhdChHLmhyZWYsIj9fYWN0aW9uPXdhaXQmd2FpdD0zMDAiKSxiPy5hY2Nlc3NfdG9rZW4sInRleHQvcGxhaW4iLHt9LHVlKS5j'@;
put 'YXRjaChmdW5jdGlvbihIKXt0aHJvdyBuZXcgWS5Kb2JTdGF0ZVBvbGxFcnJvcihzZS5pZCxIKX0pXTtjYXNlIDM6cmV0dXJuWzIsRC5zZW50KCkucmVzdWx0LnRyaW0oKV07Y2FzZSA0OnJldHVyblsyLGhlXX19KX0pfSxlZT1mdW5jdGlvbihvZSl7cmV0dXJuIG9lPT09Vi5SdW5uaW5nfHxv'@;
put 'ZT09PVYuTm9TdGF0ZXx8b2U9PT1WLlBlbmRpbmd8fG9lPT09Vi5VbmF2YWlsYWJsZX07Ty5kb1BvbGw9ZnVuY3Rpb24ob2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOKXtyZXR1cm4gayh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLEMsUyx2LHAsdyxKLG5lLGRlLGZlLHhl'@;
put 'O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTGUpe3N3aXRjaChMZS5sYWJlbCl7Y2FzZSAwOmc9Ry5tYXhQb2xsQ291bnQsQz1HLnBvbGxJbnRlcnZhbCxTPXoubG9nZ2VyfHxLLHY9c2UubGlua3MuZmluZChmdW5jdGlvbihGZSl7cmV0dXJuInN0YXRlIj09PUZlLnJlbH0pLHA9MCx3PWhlLEo9'@;
put 'Vi5Ob1N0YXRlLG5lPTAsZGU9ZnVuY3Rpb24oKXt2YXIgRmUsT2UsS2UsWWUsUWUsbHQsUGUsYmUsQWUsVGUscWUsWGUsVWUsaHQ7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihNZSl7c3dpdGNoKE1lLmxhYmVsKXtjYXNlIDA6cmV0dXJuIE4mJmNlJiZjZSUxMD09MCYmYj8oS2U9KEZlPU4uc2Vz'@;
put 'c2lvbikuaWQsUWU9c2UuaWQsWzQsKE9lPU4uc2Vzc2lvbk1hbmFnZXIpLmdldFNlc3Npb25TdGF0ZShGZS5zdGF0ZVVybCxGZS5ldGFnLFllPWIuYWNjZXNzX3Rva2VuKS5jYXRjaChmdW5jdGlvbihEZSl7dGhyb3cgbmV3IFkuSm9iU3RhdGVQb2xsRXJyb3IoUWUsRGUpfSldKTpbMywyXTtj'@;
put 'YXNlIDE6aWYobHQ9TWUuc2VudCgpLGJlPWx0LnJlc3BvbnNlU3RhdHVzLCEoQWU9ZnVuY3Rpb24oRGUpe3JldHVybltYLlNlc3Npb25TdGF0ZS5SdW5uaW5nLFguU2Vzc2lvblN0YXRlLklkbGVdLmluY2x1ZGVzKERlKX0pKFBlPWx0LnJlc3VsdCl8fDIwMCE9PWJlKXRocm93IE9lLmNsZWFy'@;
put 'U2Vzc2lvbihLZSxZZSksVGU9QWUoUGUpPyJTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyBub3QgMjAwLiBTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyAiLmNvbmNhdChiZSwiLiIpOiJTZXNzaW9uIHN0YXRlIG9mIHRoZSBqb2IgaXMgbm90ICdydW5uaW5nJyBvciAnaWRsZScuIFNlc3Np'@;
put 'b24gc3RhdGUgaXMgJyIuY29uY2F0KFBlLCInIiksbmV3IFkuSm9iU3RhdGVQb2xsRXJyb3IoUWUsbmV3IEVycm9yKFRlKSk7TWUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzQscShvZSxzZSx3LHVlLGIpLmNhdGNoKGZ1bmN0aW9uKERlKXtpZihwKyssY2U+PWd8fHA+PTUpdGhyb3cgRGU7cmV0'@;
put 'dXJuIFMuZXJyb3IoIkVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICIuY29uY2F0KHYuaHJlZiwiLiBSZXN1bWluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy4iKSxEZSksVi5VbmF2YWlsYWJsZX0pXTtjYXNlIDM6cmV0dXJuIHc9TWUuc2VudCgpLGNlKysscWU9c2Uu'@;
put 'bGlua3MuZmluZChmdW5jdGlvbihEZSl7cmV0dXJuInNlbGYiPT09RGUucmVsfSkuaHJlZixEP1s0LG9lLmdldChxZSxiPy5hY2Nlc3NfdG9rZW4pXTpbMyw3XTtjYXNlIDQ6cmV0dXJuIFhlPU1lLnNlbnQoKS5yZXN1bHQsVWU9bnVsbCE9PSh4ZT1udWxsPT09KGZlPVhlLmxvZ1N0YXRpc3Rp'@;
put 'Y3MpfHx2b2lkIDA9PT1mZT92b2lkIDA6ZmUubGluZUNvdW50KSYmdm9pZCAwIT09eGU/eGU6MWU2LChodD0oKDAsVS5pc05vZGUpKCk/UigyMDgwKTp7c2F2ZUxvZzpudWxsfSkuc2F2ZUxvZyk/WzQsaHQoc2Usb2UsbmUsVWUsSCxiPy5hY2Nlc3NfdG9rZW4pXTpbMyw2XTtjYXNlIDU6TWUu'@;
put 'c2VudCgpLE1lLmxhYmVsPTY7Y2FzZSA2Om5lKz1VZSxNZS5sYWJlbD03O2Nhc2UgNzpyZXR1cm4gdWUmJkohPT13JiYoUy5pbmZvKCJQb2xsaW5nOiAiLmNvbmNhdChvZS5nZXRCYXNlVXJsKCkrcWUsIi9zdGF0ZSIpKSxTLmluZm8oIkN1cnJlbnQgam9iIHN0YXRlOiAiLmNvbmNhdCh3KSks'@;
put 'Sj13KSx3IT09Vi5VbmF2YWlsYWJsZSYmcD4wJiYocD0wKSx3PT09Vi5Db21wbGV0ZWQ/WzMsOV06WzQsKDAsVS5kZWxheSkoQyldO2Nhc2UgODpNZS5zZW50KCksTWUubGFiZWw9OTtjYXNlIDk6cmV0dXJuWzJdfX0pfSxMZS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gZWUodykmJmNlPD1nP1s1'@;
put 'LGRlKCldOlszLDNdO2Nhc2UgMjpyZXR1cm4gTGUuc2VudCgpLFszLDFdO2Nhc2UgMzpyZXR1cm5bMix7c3RhdGU6dyxwb2xsQ291bnQ6Y2V9XX19KX0pfTt2YXIgdGU9ZnVuY3Rpb24ob2Upe3ZhciBzZT1mdW5jdGlvbihoZSx1ZSl7dGhyb3cgbmV3IEVycm9yKCJQb2xsIHN0cmF0ZWdpZXMg'@;
put 'YXJlIG5vdCB2YWxpZC4iLmNvbmNhdChoZT8iICIuY29uY2F0KGhlKToiIikuY29uY2F0KHVlPyIgSW52YWxpZCBwb2xsIHN0cmF0ZWd5OiBcbiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHVlLG51bGwsMikpOiIiKSl9O29lLmZvckVhY2goZnVuY3Rpb24oaGUsdWUpe3ZhciBjZT1oZS5tYXhQ'@;
put 'b2xsQ291bnQsRz1oZS5wb2xsSW50ZXJ2YWw7Y2U8MT9zZSgiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIsaGUpOjAhPT11ZT9jZTw9b2VbdWUtMV0ubWF4UG9sbENvdW50JiZzZSgiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAnbWF4UG9s'@;
put 'bENvdW50JyBpbiBwcmV2aW91cyBwb2xsIHN0cmF0ZWd5LiIsaGUpOkc8MSYmc2UoIidwb2xsSW50ZXJ2YWwnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLGhlKX0pfX0sMjA4MDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYm'@;
put 'dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKFUscSl7ZnVuY3Rpb24gZWUoc2Upe3RyeXtvZShYLm5leHQoc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIHRlKHNlKXt0cnl7b2UoWC50aHJvdyhzZSkpfWNh'@;
put 'dGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gb2Uoc2Upe3ZhciBoZTtzZS5kb25lP1Uoc2UudmFsdWUpOihoZT1zZS52YWx1ZSxoZSBpbnN0YW5jZW9mIFk/aGU6bmV3IFkoZnVuY3Rpb24odWUpe3VlKGhlKX0pKS50aGVuKGVlLHRlKX1vZSgoWD1YLmFwcGx5KFYsQnx8W10pKS5uZXh0KCkpfSl9'@;
put 'LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVixCKXt2YXIgWSxYLFUscSxlZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZVWzBdKXRocm93IFVbMV07cmV0dXJuIFVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcT17bmV4dDp0ZSgwKSx0aHJvdzp0ZSgxKSxy'@;
put 'ZXR1cm46dGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihxW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHE7ZnVuY3Rpb24gdGUob2Upe3JldHVybiBmdW5jdGlvbihzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtpZihZKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2VlOyl0cnl7aWYoWT0xLFgmJihVPTImaGVbMF0/WC5yZXR1cm46aGVbMF0/WC50aHJvd3x8KChVPVgucmV0dXJuKSYmVS5jYWxsKFgpLDApOlgubmV4dCkmJiEoVT1VLmNhbGwoWCxoZVsxXSkpLmRvbmUpcmV0dXJu'@;
put 'IFU7c3dpdGNoKFg9MCxVJiYoaGU9WzImaGVbMF0sVS52YWx1ZV0pLGhlWzBdKXtjYXNlIDA6Y2FzZSAxOlU9aGU7YnJlYWs7Y2FzZSA0OnJldHVybiBlZS5sYWJlbCsrLHt2YWx1ZTpoZVsxXSxkb25lOiExfTtjYXNlIDU6ZWUubGFiZWwrKyxYPWhlWzFdLGhlPVswXTtjb250aW51ZTtjYXNl'@;
put 'IDc6aGU9ZWUub3BzLnBvcCgpLGVlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChVPShVPWVlLnRyeXMpLmxlbmd0aD4wJiZVW1UubGVuZ3RoLTFdKXx8NiE9PWhlWzBdJiYyIT09aGVbMF0pKXtlZT0wO2NvbnRpbnVlfWlmKDM9PT1oZVswXSYmKCFVfHxoZVsxXT5VWzBdJiZo'@;
put 'ZVsxXTxVWzNdKSl7ZWUubGFiZWw9aGVbMV07YnJlYWt9aWYoNj09PWhlWzBdJiZlZS5sYWJlbDxVWzFdKXtlZS5sYWJlbD1VWzFdLFU9aGU7YnJlYWt9aWYoVSYmZWUubGFiZWw8VVsyXSl7ZWUubGFiZWw9VVsyXSxlZS5vcHMucHVzaChoZSk7YnJlYWt9VVsyXSYmZWUub3BzLnBvcCgpLGVl'@;
put 'LnRyeXMucG9wKCk7Y29udGludWV9aGU9Qi5jYWxsKFYsZWUpfWNhdGNoKHVlKXtoZT1bNix1ZV0sWD0wfWZpbmFsbHl7WT1VPTB9aWYoNSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm57dmFsdWU6aGVbMF0/aGVbMV06dm9pZCAwLGRvbmU6ITB9fShbb2Usc2VdKX19fTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5zYXZlTG9nPXZvaWQgMDt2YXIgRT1SKDU5MjgpLGo9Uig2MTMxKTtPLnNhdmVMb2c9ZnVuY3Rpb24oVixCLFksWCxVLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZTtyZXR1'@;
put 'cm4gayh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDppZighcSl0aHJvdyBuZXcgRXJyb3IoIkxvZ3MgZm9yIGpvYiAiLmNvbmNhdChWLmlkLCIgY2Fubm90IGJlIGZldGNoZWQgd2l0aG91dCBhIHZhbGlkIGFjY2VzcyB0b2tlbi4iKSk7aWYoIVUpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJMb2dzIGZvciBqb2IgIi5jb25jYXQoVi5pZCwiIGNhbm5vdCBiZSB3cml0dGVuIHdpdGhvdXQgYSB2YWxpZCB3cml0ZSBzdHJlYW0uIikpO2lmKGVlPXoubG9nZ2VyfHxLLCEodGU9Vi5saW5rcy5maW5kKGZ1bmN0aW9uKGhlKXtyZXR1cm4ibG9nIj09PWhlLnJlbH0pKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkxvZyBVUkwgZm9yIGpvYiAiLmNvbmNhdChWLmlkLCIgd2FzIG5vdCBmb3VuZC4iKSk7cmV0dXJuWzQsKDAsRS5mZXRjaExvZykoQixxLCIiLmNvbmNhdCh0ZS5ocmVmLCIvY29udGVudCIpLFksWCldO2Nhc2UgMTpyZXR1cm4gb2U9c2Uuc2VudCgpLGVlLmluZm8oIldy'@;
put 'aXRpbmcgbG9ncyB0byAiLmNvbmNhdChVLnBhdGgpKSxbNCwoMCxqLndyaXRlU3RyZWFtKShVLG9lfHwiIildO2Nhc2UgMjpyZXR1cm4gc2Uuc2VudCgpLFsyXX19KX0pfX0sNjQ5NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5j'@;
put 'dGlvbihFLGosVixCKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIFUodGUpe3RyeXtlZShCLm5leHQodGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIHEodGUpe3RyeXtlZShCLnRocm93KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlv'@;
put 'biBlZSh0ZSl7dmFyIG9lO3RlLmRvbmU/WSh0ZS52YWx1ZSk6KG9lPXRlLnZhbHVlLG9lIGluc3RhbmNlb2YgVj9vZTpuZXcgVihmdW5jdGlvbihzZSl7c2Uob2UpfSkpLnRoZW4oVSxxKX1lZSgoQj1CLmFwcGx5KEUsanx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRv'@;
put 'cnx8ZnVuY3Rpb24oRSxqKXt2YXIgVixCLFksWCxVPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJllbMF0pdGhyb3cgWVsxXTtyZXR1cm4gWVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBYPXtuZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmKFhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWDtmdW5jdGlvbiBxKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihvZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVj'@;
put 'dXRpbmcuIik7Zm9yKDtVOyl0cnl7aWYoVj0xLEImJihZPTImb2VbMF0/Qi5yZXR1cm46b2VbMF0/Qi50aHJvd3x8KChZPUIucmV0dXJuKSYmWS5jYWxsKEIpLDApOkIubmV4dCkmJiEoWT1ZLmNhbGwoQixvZVsxXSkpLmRvbmUpcmV0dXJuIFk7c3dpdGNoKEI9MCxZJiYob2U9WzImb2VbMF0s'@;
put 'WS52YWx1ZV0pLG9lWzBdKXtjYXNlIDA6Y2FzZSAxOlk9b2U7YnJlYWs7Y2FzZSA0OnJldHVybiBVLmxhYmVsKysse3ZhbHVlOm9lWzFdLGRvbmU6ITF9O2Nhc2UgNTpVLmxhYmVsKyssQj1vZVsxXSxvZT1bMF07Y29udGludWU7Y2FzZSA3Om9lPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtj'@;
put 'b250aW51ZTtkZWZhdWx0OmlmKCEoKFk9KFk9VS50cnlzKS5sZW5ndGg+MCYmWVtZLmxlbmd0aC0xXSl8fDYhPT1vZVswXSYmMiE9PW9lWzBdKSl7VT0wO2NvbnRpbnVlfWlmKDM9PT1vZVswXSYmKCFZfHxvZVsxXT5ZWzBdJiZvZVsxXTxZWzNdKSl7VS5sYWJlbD1vZVsxXTticmVha31pZig2'@;
put 'PT09b2VbMF0mJlUubGFiZWw8WVsxXSl7VS5sYWJlbD1ZWzFdLFk9b2U7YnJlYWt9aWYoWSYmVS5sYWJlbDxZWzJdKXtVLmxhYmVsPVlbMl0sVS5vcHMucHVzaChvZSk7YnJlYWt9WVsyXSYmVS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfW9lPWouY2FsbChFLFUpfWNhdGNoKHNl'@;
put 'KXtvZT1bNixzZV0sQj0wfWZpbmFsbHl7Vj1ZPTB9aWYoNSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm57dmFsdWU6b2VbMF0/b2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZWUsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy51cGxvYWRU'@;
put 'YWJsZXM9dm9pZCAwO3ZhciBJPVIoOTc3OCksaz1SKDI0MDIpO08udXBsb2FkVGFibGVzPWZ1bmN0aW9uKEUsaixWKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgQixZLFgsVSxxLGVlLHRlO3JldHVybiBLKHRoaXMsZnVuY3Rpb24ob2Upe3N3aXRjaChvZS5s'@;
put 'YWJlbCl7Y2FzZSAwOmZvcihYIGluIEI9W10sWT1bXSxqKVkucHVzaChYKTtVPTAsb2UubGFiZWw9MTtjYXNlIDE6aWYoIShVPFkubGVuZ3RoKSlyZXR1cm5bMyw0XTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09KGVlPSgwLGsuY29udmVydFRvQ1NWKShqLHE9WVtVXSkpKXRo'@;
put 'cm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtyZXR1cm5bNCxFLnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLGVlLFYpLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdygwLEkucHJl'@;
put 'Zml4TWVzc2FnZSkoc2UsIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlLiAiKX0pXTtjYXNlIDI6dGU9b2Uuc2VudCgpLEIucHVzaCh7dGFibGVOYW1lOnEsZmlsZTp0ZS5yZXN1bHR9KSxvZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gVSsrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMixCXX19KX0p'@;
put 'fX0sNjEzMTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oSyxJLGssRSl7cmV0dXJuIG5ldyhrfHwoaz1Qcm9taXNlKSkoZnVuY3Rpb24oaixWKXtmdW5jdGlvbiBCKFUpe3RyeXtYKEUubmV4dChVKSl9Y2F0Y2gocSl7Vihx'@;
put 'KX19ZnVuY3Rpb24gWShVKXt0cnl7WChFLnRocm93KFUpKX1jYXRjaChxKXtWKHEpfX1mdW5jdGlvbiBYKFUpe3ZhciBxO1UuZG9uZT9qKFUudmFsdWUpOihxPVUudmFsdWUscSBpbnN0YW5jZW9mIGs/cTpuZXcgayhmdW5jdGlvbihlZSl7ZWUocSl9KSkudGhlbihCLFkpfVgoKEU9RS5hcHBs'@;
put 'eShLLEl8fFtdKSkubmV4dCgpKX0pfSx6PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEssSSl7dmFyIGssRSxqLFYsQj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZqWzBdKXRocm93IGpbMV07cmV0dXJuIGpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVj17bmV4'@;
put 'dDpZKDApLHRocm93OlkoMSkscmV0dXJuOlkoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFY7ZnVuY3Rpb24gWShYKXtyZXR1cm4gZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEpe2lmKGspdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7QjspdHJ5e2lmKGs9MSxFJiYoaj0yJnFbMF0/RS5yZXR1cm46cVswXT9FLnRocm93fHwoKGo9RS5yZXR1cm4pJiZqLmNhbGwoRSksMCk6RS5uZXh0KSYmIShqPWouY2FsbChFLHFbMV0pKS5k'@;
put 'b25lKXJldHVybiBqO3N3aXRjaChFPTAsaiYmKHE9WzImcVswXSxqLnZhbHVlXSkscVswXSl7Y2FzZSAwOmNhc2UgMTpqPXE7YnJlYWs7Y2FzZSA0OnJldHVybiBCLmxhYmVsKysse3ZhbHVlOnFbMV0sZG9uZTohMX07Y2FzZSA1OkIubGFiZWwrKyxFPXFbMV0scT1bMF07Y29udGludWU7Y2Fz'@;
put 'ZSA3OnE9Qi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaj0oaj1CLnRyeXMpLmxlbmd0aD4wJiZqW2oubGVuZ3RoLTFdKXx8NiE9PXFbMF0mJjIhPT1xWzBdKSl7Qj0wO2NvbnRpbnVlfWlmKDM9PT1xWzBdJiYoIWp8fHFbMV0+alswXSYmcVsxXTxqWzNd'@;
put 'KSl7Qi5sYWJlbD1xWzFdO2JyZWFrfWlmKDY9PT1xWzBdJiZCLmxhYmVsPGpbMV0pe0IubGFiZWw9alsxXSxqPXE7YnJlYWt9aWYoaiYmQi5sYWJlbDxqWzJdKXtCLmxhYmVsPWpbMl0sQi5vcHMucHVzaChxKTticmVha31qWzJdJiZCLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWV9'@;
put 'cT1JLmNhbGwoSyxCKX1jYXRjaChlZSl7cT1bNixlZV0sRT0wfWZpbmFsbHl7az1qPTB9aWYoNSZxWzBdKXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsxXTp2b2lkIDAsZG9uZTohMH19KFtYLFVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVl'@;
put 'OiEwfSksTy53cml0ZVN0cmVhbT12b2lkIDAsTy53cml0ZVN0cmVhbT1mdW5jdGlvbihLLEkpe3JldHVybiBSKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihrKXtyZXR1cm5bMixLLndyaXRlKEkrIlxuIixmdW5jdGlvbihFKXtyZXR1cm4g'@;
put 'RT9Qcm9taXNlLnJlamVjdChFKTpQcm9taXNlLnJlc29sdmUoKX0pXX0pfSl9fSwyODUxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KSxLPVIoNDE1NSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ob2Usc2UsaGUsdWUpe3JldHVybiBuZXcoaGV8'@;
put 'fChoZT1Qcm9taXNlKSkoZnVuY3Rpb24oY2UsRyl7ZnVuY3Rpb24gYihOKXt0cnl7SCh1ZS5uZXh0KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBEKE4pe3RyeXtIKHVlLnRocm93KE4pKX1jYXRjaChnKXtHKGcpfX1mdW5jdGlvbiBIKE4pe3ZhciBnO04uZG9uZT9jZShOLnZhbHVlKToo'@;
put 'Zz1OLnZhbHVlLGcgaW5zdGFuY2VvZiBoZT9nOm5ldyBoZShmdW5jdGlvbihDKXtDKGcpfSkpLnRoZW4oYixEKX1IKCh1ZT11ZS5hcHBseShvZSxzZXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ob2Usc2Upe3ZhciBoZSx1ZSxjZSxHLGI9e2xh'@;
put 'YmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJuIGNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEc9e25leHQ6RCgwKSx0aHJvdzpEKDEpLHJldHVybjpEKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoR1tTeW1ib2wuaXRlcmF0b3Jd'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxHO2Z1bmN0aW9uIEQoSCl7cmV0dXJuIGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihnKXtpZihoZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtiOyl0cnl7aWYoaGU9MSx1ZSYm'@;
put 'KGNlPTImZ1swXT91ZS5yZXR1cm46Z1swXT91ZS50aHJvd3x8KChjZT11ZS5yZXR1cm4pJiZjZS5jYWxsKHVlKSwwKTp1ZS5uZXh0KSYmIShjZT1jZS5jYWxsKHVlLGdbMV0pKS5kb25lKXJldHVybiBjZTtzd2l0Y2godWU9MCxjZSYmKGc9WzImZ1swXSxjZS52YWx1ZV0pLGdbMF0pe2Nhc2Ug'@;
put 'MDpjYXNlIDE6Y2U9ZzticmVhaztjYXNlIDQ6cmV0dXJuIGIubGFiZWwrKyx7dmFsdWU6Z1sxXSxkb25lOiExfTtjYXNlIDU6Yi5sYWJlbCsrLHVlPWdbMV0sZz1bMF07Y29udGludWU7Y2FzZSA3Omc9Yi5vcHMucG9wKCksYi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoY2U9'@;
put 'KGNlPWIudHJ5cykubGVuZ3RoPjAmJmNlW2NlLmxlbmd0aC0xXSl8fDYhPT1nWzBdJiYyIT09Z1swXSkpe2I9MDtjb250aW51ZX1pZigzPT09Z1swXSYmKCFjZXx8Z1sxXT5jZVswXSYmZ1sxXTxjZVszXSkpe2IubGFiZWw9Z1sxXTticmVha31pZig2PT09Z1swXSYmYi5sYWJlbDxjZVsxXSl7'@;
put 'Yi5sYWJlbD1jZVsxXSxjZT1nO2JyZWFrfWlmKGNlJiZiLmxhYmVsPGNlWzJdKXtiLmxhYmVsPWNlWzJdLGIub3BzLnB1c2goZyk7YnJlYWt9Y2VbMl0mJmIub3BzLnBvcCgpLGIudHJ5cy5wb3AoKTtjb250aW51ZX1nPXNlLmNhbGwob2UsYil9Y2F0Y2goQyl7Zz1bNixDXSx1ZT0wfWZpbmFs'@;
put 'bHl7aGU9Y2U9MH1pZig1JmdbMF0pdGhyb3cgZ1sxXTtyZXR1cm57dmFsdWU6Z1swXT9nWzFdOnZvaWQgMCxkb25lOiEwfX0oW0gsTl0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkF1dGhNYW5hZ2VyPXZvaWQgMDt2YXIgRT1SKDM5MDAp'@;
put 'LGo9UigxMzk1KSxWPVIoNTkyOCksQj1SKDExNzApLFk9Uig1NDE4KSxYPVIoNDU4MiksVT1SKDY1NDcpLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBvZShzZSxoZSx1ZSxjZSl7dmFyIEc9dGhpczt0aGlzLnNlcnZlclVybD1zZSx0aGlzLnNlcnZlclR5cGU9aGUsdGhpcy5yZXF1ZXN0Q2xpZW50'@;
put 'PXVlLHRoaXMubG9naW5DYWxsYmFjaz1jZSx0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPSIvU0FTTG9nb24iLHRoaXMuZXh0cmFjdFVzZXJOYW1lPWZ1bmN0aW9uKGIpe3N3aXRjaChHLnNlcnZlclR5cGUpe2Nhc2UgRS5TZXJ2'@;
put 'ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIGI/LmlkO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuIiI7Y2FzZSBFLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIGI/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIHouZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5h'@;
put 'bWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZT1mdW5jdGlvbihiKXtzd2l0Y2goRy5zZXJ2ZXJUeXBlKXtjYXNlIEUuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiBiPy5uYW1lO2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuKDAsQi5leHRyYWN0VXNlckxv'@;
put 'bmdOYW1lU2FzOSkoYik7Y2FzZSBFLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIGI/LmRpc3BsYXlOYW1lO2RlZmF1bHQ6cmV0dXJuIHouZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rpb24iKSwiIn19LHRoaXMuc2V0TG9naW5Vcmw9ZnVuY3Rp'@;
put 'b24oYil7dmFyIEQ9YlsxXS5yZXBsYWNlKC9cPy4qLywiIik7aWYoIi8iPT09RFswXSl7RD1ELnN1YnN0cigxKTt2YXIgSD1HLnNlcnZlclVybD8iIi5jb25jYXQoRy5zZXJ2ZXJVcmwsIi8iKS5jb25jYXQoRCk6IiIuY29uY2F0KEQpO0cubG9naW5Vcmw9Ry5zZXJ2ZXJUeXBlPT09RS5TZXJ2'@;
put 'ZXJUeXBlLlNhc1ZpeWE/SDpILnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpfX0sdGhpcy5sb2dpblVybD0iL1NBU0xvZ29uL2xvZ2luIix0aGlzLmxvZ291dFVybD10aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzOT8iL1NBU0xvZ29uL2xv'@;
put 'Z291dD8iOnRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNWaXlhPyIvU0FTTG9nb24vbG9nb3V0LmRvPyI6Ii9TQVNMb2dvbi9sb2dvdXQiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPXRoaXMuc2VydmVyVXJsK3RoaXMucmVkaXJlY3RlZExvZ2luVXJsfXJldHVybiBvZS5wcm90'@;
put 'b3R5cGUucmVkaXJlY3RlZExvZ0luPWZ1bmN0aW9uKHNlKXt2YXIgaGU9c2Uub25Mb2dnZWRPdXQ7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLEcsYixELEgsTixnLEMsUztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHYpe3N3aXRjaCh2LmxhYmVsKXtjYXNl'@;
put 'IDA6cmV0dXJuWzQsdGhpcy5mZXRjaFVzZXJOYW1lKCldO2Nhc2UgMTpyZXR1cm4gdWU9di5zZW50KCksRz11ZS51c2VyTmFtZSxiPXVlLnVzZXJMb25nTmFtZSx1ZS5pc0xvZ2dlZEluPygoSy5sb2dnZXJ8fHopLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNz'@;
put 'aW9uIGFscmVhZHkgZXhpc3RzIiksWzQsdGhpcy5sb2dpbkNhbGxiYWNrKCldKTpbMywzXTtjYXNlIDI6cmV0dXJuIHYuc2VudCgpLFsyLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOkcsdXNlckxvbmdOYW1lOmJ9XTtjYXNlIDM6cmV0dXJuWzQsKDAsWS5vcGVuV2ViUGFnZSkodGhpcy5yZWRp'@;
put 'cmVjdGVkTG9naW5VcmwsIlNBU0xvZ29uIix7d2lkdGg6NTAwLGhlaWdodDo2MDB9LGhlKV07Y2FzZSA0OnJldHVybihEPXYuc2VudCgpKT90aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZlclR5cGUuU2FzVml5YT9bMyw2XTpbNCwoMCxVLnZlcmlmeVNhc1ZpeWFMb2dpbikoRCldOlsyLHtpc0xv'@;
put 'Z2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn1dO2Nhc2UgNTpyZXR1cm4gTj12LnNlbnQoKSxbMyw4XTtjYXNlIDY6cmV0dXJuWzQsKDAsWC52ZXJpZnlTYXM5TG9naW4pKEQpXTtjYXNlIDc6Tj12LnNlbnQoKSx2LmxhYmVsPTg7Y2FzZSA4OnJldHVybiBIPU4uaXNMb2dn'@;
put 'ZWRJbixELmNsb3NlKCksSD90aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZlclR5cGUuU2FzOT9bMywxMF06WzQsdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpXTpbMywxM107Y2FzZSA5OnYuc2VudCgpLHYubGFiZWw9MTA7Y2FzZSAxMDpyZXR1cm5bNCx0aGlzLmZldGNoVXNlck5hbWUo'@;
put 'KV07Y2FzZSAxMTpyZXR1cm4gZz12LnNlbnQoKSxDPWcudXNlck5hbWUsUz1nLnVzZXJMb25nTmFtZSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV07Y2FzZSAxMjpyZXR1cm4gdi5zZW50KCksWzIse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6Qyx1c2VyTG9uZ05hbWU6U31dO2Nhc2UgMTM6cmV0'@;
put 'dXJuWzIse2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifV19fSl9KX0sb2UucHJvdG90eXBlLmxvZ0luPWZ1bmN0aW9uKHNlLGhlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsY2UsYixELEgsTixnLEM7cmV0dXJuIGsodGhp'@;
put 'cyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOnJldHVybiB1ZT17X3NlcnZpY2U6ImRlZmF1bHQiLHVzZXJuYW1lOnNlLHBhc3N3b3JkOmhlfSx0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiLFs0LHRoaXMuY2hlY2tTZXNzaW9uKCldO2Nhc2UgMTpyZXR1'@;
put 'cm4gY2U9Uy5zZW50KCksYj1jZS5sb2dpbkZvcm0sRD1jZS51c2VyTG9uZ05hbWUsY2UuaXNMb2dnZWRJbj8oKEsubG9nZ2VyfHx6KS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLFs0LHRoaXMubG9naW5DYWxsYmFjaygp'@;
put 'XSk6WzMsM107Y2FzZSAyOnJldHVybiBTLnNlbnQoKSx0aGlzLnVzZXJOYW1lPXVlLnVzZXJuYW1lLHRoaXMudXNlckxvbmdOYW1lPUQsWzIse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9XTtjYXNlIDM6cmV0dXJu'@;
put 'WzQsdGhpcy5zZW5kTG9naW5SZXF1ZXN0KGIsdWUpXTtjYXNlIDQ6cmV0dXJuIEg9Uy5zZW50KCksKE49dGUodGhpcy5zZXJ2ZXJUeXBlLEgpKT9bMyw5XTplZShIKT9bNCx0aGlzLmdldExvZ2luRm9ybShIKV06WzMsN107Y2FzZSA1OnJldHVybiBnPVMuc2VudCgpLFs0LHRoaXMuc2VuZExv'@;
put 'Z2luUmVxdWVzdChnLHVlKV07Y2FzZSA2Okg9Uy5zZW50KCksUy5sYWJlbD03O2Nhc2UgNzpyZXR1cm5bNCx0aGlzLmNoZWNrU2Vzc2lvbigpXTtjYXNlIDg6Qz1TLnNlbnQoKSxOPUMuaXNMb2dnZWRJbix0aGlzLnVzZXJMb25nTmFtZT1DLnVzZXJMb25nTmFtZSxTLmxhYmVsPTk7Y2FzZSA5'@;
put 'OnJldHVybiBOP3RoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXM5P1szLDExXTpbNCx0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCldOlszLDEyXTtjYXNlIDEwOlMuc2VudCgpLFMubGFiZWw9MTE7Y2FzZSAxMTp0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1l'@;
put 'PXVlLnVzZXJuYW1lLFMubGFiZWw9MTI7Y2FzZSAxMjpyZXR1cm5bMix7aXNMb2dnZWRJbjpOLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfV19fSl9KX0sb2UucHJvdG90eXBlLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBzZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9TQVNTdG9yZWRQcm9jZXNzL2pfc3ByaW5nX2Nhc19z'@;
put 'ZWN1cml0eV9jaGVjayIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9TQVNMb2dvbi9sb2dpbj9zZXJ2aWNlPSIuY29uY2F0KHNlKSx2b2lkIDApLmNhdGNoKGZ1bmN0aW9uKHVlKXtpZighKHVlIGluc3RhbmNlb2Ygai5Ob3RGb3VuZEVycm9yKSl0aHJvdyB1ZX0pXTtjYXNlIDE6cmV0'@;
put 'dXJuIGhlLnNlbnQoKSxbMl19fSl9KX0sb2UucHJvdG90eXBlLnNlbmRMb2dpblJlcXVlc3Q9ZnVuY3Rpb24oc2UsaGUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLGI7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAw'@;
put 'OnJldHVybiB0aGlzLnNlcnZlclR5cGUhPT1FLlNlcnZlclR5cGUuU2FzanM/WzMsMl06WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCx7dXNlcm5hbWU6aGUudXNlcm5hbWUscGFzc3dvcmQ6aGUucGFzc3dvcmR9LHZvaWQgMCldO2Nhc2UgMTpjYXNlIDM6cmV0dXJu'@;
put 'WzIsRC5zZW50KCkucmVzdWx0XTtjYXNlIDI6Zm9yKEcgaW4gc2UpaGVbR109c2VbR107cmV0dXJuIGI9KDAsVi5zZXJpYWxpemUpKGhlKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLGIsdm9pZCAwLCJ0ZXh0L3BsYWluIix7IkNvbnRlbnQtVHlwZSI6ImFwcGxp'@;
put 'Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsQWNjZXB0OiIqLyoifSldfX0pfSl9LG9lLnByb3RvdHlwZS5jaGVja1Nlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2UsaGUsdWUsY2UsRztyZXR1cm4gayh0aGlzLGZ1bmN0'@;
put 'aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5mZXRjaFVzZXJOYW1lKCldO2Nhc2UgMTpyZXR1cm4gc2U9Yi5zZW50KCksdWU9c2UudXNlck5hbWUsY2U9c2UudXNlckxvbmdOYW1lLEc9bnVsbCwoaGU9c2UuaXNMb2dnZWRJbik/WzMsNF06WzQsdGhpcy5sb2dP'@;
put 'dXQoKV07Y2FzZSAyOnJldHVybiBiLnNlbnQoKSxbNCx0aGlzLmdldE5ld0xvZ2luRm9ybSgpXTtjYXNlIDM6Rz1iLnNlbnQoKSxiLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLFByb21pc2UucmVzb2x2ZSh7aXNMb2dnZWRJbjpoZSx1c2VyTmFtZTp1ZSx1c2VyTG9uZ05hbWU6Y2UsbG9naW5G'@;
put 'b3JtOkd9KV19fSl9KX0sb2UucHJvdG90eXBlLmdldE5ld0xvZ2luRm9ybT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5z'@;
put 'ZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc2pzP1syLHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi8iLHZvaWQgMCkudGhlbihmdW5jdGlvbih1ZSl7dmFyIGNlLGI9bnVsbD09PShjZT0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7'@;
put 'IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWModWUucmVzdWx0KSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZVsxXTtiJiYoZG9jdW1lbnQuY29va2llPWIpfSldOls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIvU0FTTG9n'@;
put 'b24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQvcGxhaW4iKV07Y2FzZSAxOnJldHVybiBzZT1oZS5zZW50KCkucmVzdWx0LFs0LHRoaXMuZ2V0TG9naW5Gb3JtKHNlKV07Y2FzZSAyOnJldHVyblsyLGhlLnNlbnQoKV19fSl9KX0sb2UucHJvdG90eXBlLmZldGNo'@;
put 'VXNlck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2UsaGUsdWU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHNlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCx0aGlzLnNl'@;
put 'cnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzVml5YT8iL2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyIjp0aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzOT8iL1NBU1N0b3JlZFByb2Nlc3MiOiIvU0FTanNBcGkvc2Vzc2lvbiIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5n'@;
put 'ZXQoc2Usdm9pZCAwLCJ0ZXh0L3BsYWluIikuY2F0Y2goZnVuY3Rpb24oRyl7cmV0dXJue3Jlc3VsdDoiYXV0aEVyciJ9fSldO2Nhc2UgMTpyZXR1cm4gaGU9Y2Uuc2VudCgpLnJlc3VsdCwodWU9ImF1dGhFcnIiIT09aGUpP1szLDNdOls0LHRoaXMubG9nT3V0KCldO2Nhc2UgMjpyZXR1cm4g'@;
put 'Y2Uuc2VudCgpLFsyLHtpc0xvZ2dlZEluOnVlLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn1dO2Nhc2UgMzpyZXR1cm5bMix7aXNMb2dnZWRJbjp1ZSx1c2VyTmFtZTp0aGlzLmV4dHJhY3RVc2VyTmFtZShoZSksdXNlckxvbmdOYW1lOnRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZShoZSl9'@;
put 'XX19KX0pfSxvZS5wcm90b3R5cGUuZ2V0TG9naW5Gb3JtPWZ1bmN0aW9uKHNlKXt2YXIgaGU9Lzxmb3JtLithY3Rpb249IiguKihMb2dvbnxsb2dpbilbXiJdKikuKj4vLmV4ZWMoc2UpLHVlPXt9O2lmKGhlJiZoZS5sZW5ndGgpe3RoaXMuc2V0TG9naW5VcmwoaGUpO3ZhciBjZT0oc2U9c2Uu'@;
put 'cmVwbGFjZSgvPGlucHV0L2csIlxuPGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4iW14+XSo+L2cpO2NlJiZjZS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBiPUcubWF0Y2goL25hbWU9IihbXiJdKikiXHN2YWx1ZT0iKFteIl0qKS8pO2ImJmIubGVuZ3RoJiYodWVbYlsxXV09Ylsy'@;
put 'XSl9KX1yZXR1cm4gT2JqZWN0LmtleXModWUpLmxlbmd0aD91ZTpudWxsfSxvZS5wcm90b3R5cGUubG9nT3V0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7cmV0dXJuIHRoaXMucmVxdWVzdENsaWVu'@;
put 'dC5jbGVhckNzcmZUb2tlbnMoKSxbMix0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9nb3V0VXJsLHZvaWQgMCkudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSldfSl9KX0sb2V9KCk7Ty5BdXRoTWFuYWdlcj1xO3ZhciBlZT1mdW5jdGlvbihvZSl7cmV0dXJuL0FuIGVycm9yIG9jY3Vy'@;
put 'cmVkIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHZlcmlmeWluZyB5b3VyIGNyZWRlbnRpYWxzLiBQbGVhc2UgZW50ZXIgeW91ciBjcmVkZW50aWFscyBhZ2Fpbi4vZ20udGVzdChvZSl9LHRlPWZ1bmN0aW9uKG9lLHNlKXtyZXR1cm4gb2U9PT1FLlNlcnZlclR5cGUuU2FzanM/c2U/LmxvZ2dlZGlu'@;
put 'Oi9Zb3UgaGF2ZSBzaWduZWQgaW4vZ20udGVzdChzZSl9fSw1NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEo'@;
put 'b2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/'@;
put 'c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFsw'@;
put 'XSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1'@;
put 'bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50'@;
put 'aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxh'@;
put 'YmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8'@;
put 'fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJl'@;
put 'bDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57'@;
put 'dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPXZvaWQgMDt2YXIgST1SKDk3NzgpLGs9Uig5MDE3KSxFPVIoMzkwMCk7Ty5n'@;
put 'ZXRBY2Nlc3NUb2tlbkZvclNhc2pzPWZ1bmN0aW9uKGosVixCKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWDtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFUpe3N3aXRjaChVLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsai5wb3N0KCIvU0FTanNBcGkvYXV0aC90'@;
put 'b2tlbiIsWD17Y2xpZW50SWQ6Vixjb2RlOkJ9LHZvaWQgMCkudGhlbihmdW5jdGlvbihxKXt2YXIgZWU9cS5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjplZS5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOmVlLnJlZnJlc2hUb2tlbn19KS5jYXRjaChmdW5jdGlvbihxKXt0aHJvdygwLEku'@;
put 'cHJlZml4TWVzc2FnZSkocSwoMCxrLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsRS5TZXJ2ZXJUeXBlLlNhc2pzLCIvU0FTanNBcGkvYXV0aC90b2tlbiIsWCxWKSl9KV07Y2FzZSAxOnJldHVyblsy'@;
put 'LFUuc2VudCgpXX19KX0pfX0sMzU2OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9u'@;
put 'IHRlKGhlKXt0cnl7c2UoVS5uZXh0KGhlKSl9Y2F0Y2godWUpe2VlKHVlKX19ZnVuY3Rpb24gb2UoaGUpe3RyeXtzZShVLnRocm93KGhlKSl9Y2F0Y2godWUpe2VlKHVlKX19ZnVuY3Rpb24gc2UoaGUpe3ZhciB1ZTtoZS5kb25lP3EoaGUudmFsdWUpOih1ZT1oZS52YWx1ZSx1ZSBpbnN0YW5j'@;
put 'ZW9mIFg/dWU6bmV3IFgoZnVuY3Rpb24oY2Upe2NlKHVlKX0pKS50aGVuKHRlLG9lKX1zZSgoVT1VLmFwcGx5KEIsWXx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oQixZKXt2YXIgWCxVLHEsZWUsdGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigp'@;
put 'e2lmKDEmcVswXSl0aHJvdyBxWzFdO3JldHVybiBxWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGVlPXtuZXh0Om9lKDApLHRocm93Om9lKDEpLHJldHVybjpvZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGVlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpc30pLGVlO2Z1bmN0aW9uIG9lKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7aWYoWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt0ZTspdHJ5e2lmKFg9MSxVJiYocT0yJnVlWzBdP1UucmV0'@;
put 'dXJuOnVlWzBdP1UudGhyb3d8fCgocT1VLnJldHVybikmJnEuY2FsbChVKSwwKTpVLm5leHQpJiYhKHE9cS5jYWxsKFUsdWVbMV0pKS5kb25lKXJldHVybiBxO3N3aXRjaChVPTAscSYmKHVlPVsyJnVlWzBdLHEudmFsdWVdKSx1ZVswXSl7Y2FzZSAwOmNhc2UgMTpxPXVlO2JyZWFrO2Nhc2Ug'@;
put 'NDpyZXR1cm4gdGUubGFiZWwrKyx7dmFsdWU6dWVbMV0sZG9uZTohMX07Y2FzZSA1OnRlLmxhYmVsKyssVT11ZVsxXSx1ZT1bMF07Y29udGludWU7Y2FzZSA3OnVlPXRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgocT0ocT10ZS50cnlzKS5sZW5ndGg+'@;
put 'MCYmcVtxLmxlbmd0aC0xXSl8fDYhPT11ZVswXSYmMiE9PXVlWzBdKSl7dGU9MDtjb250aW51ZX1pZigzPT09dWVbMF0mJighcXx8dWVbMV0+cVswXSYmdWVbMV08cVszXSkpe3RlLmxhYmVsPXVlWzFdO2JyZWFrfWlmKDY9PT11ZVswXSYmdGUubGFiZWw8cVsxXSl7dGUubGFiZWw9cVsxXSxx'@;
put 'PXVlO2JyZWFrfWlmKHEmJnRlLmxhYmVsPHFbMl0pe3RlLmxhYmVsPXFbMl0sdGUub3BzLnB1c2godWUpO2JyZWFrfXFbMl0mJnRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlfXVlPVkuY2FsbChCLHRlKX1jYXRjaChjZSl7dWU9WzYsY2VdLFU9MH1maW5hbGx5e1g9cT0wfWlm'@;
put 'KDUmdWVbMF0pdGhyb3cgdWVbMV07cmV0dXJue3ZhbHVlOnVlWzBdP3VlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3NlLGhlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPXZvaWQgMDt2YXIgaz1SKDM5'@;
put 'MDApLEU9Uig5Nzc4KSxqPVIoMTM5NSksVj1SKDkwMTcpO08uZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPWZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRj'@;
put 'aChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPXZvaWQgMD09PXo/YnRvYShZKyI6IitYKTp6LmZyb20oWSsiOiIrWCkudG9TdHJpbmcoImJhc2U2NCIpLGVlPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHRlPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK3EsQWNjZXB0OiJhcHBsaWNhdGlvbi9q'@;
put 'c29uIn0sb2U9bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOlV9KSxzZT1uZXcgVVJMU2VhcmNoUGFyYW1zKG9lKSxbNCxCLnBvc3QoZWUsc2Usdm9pZCAwLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHRlKS50aGVu'@;
put 'KGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUucmVzdWx0fSkuY2F0Y2goZnVuY3Rpb24odWUpe3Rocm93IHVlIGluc3RhbmNlb2Ygai5DZXJ0aWZpY2F0ZUVycm9yP3VlOigwLEUucHJlZml4TWVzc2FnZSkodWUsKDAsVi5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2Vz'@;
put 'cyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yVml5YSIsay5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZWUsb2UsdGUsWSxYKSl9KV07Y2FzZSAxOnJldHVyblsyLGhlLnNlbnQoKV19fSl9KX19LDkwMTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPU8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9dm9pZCAwO3ZhciB6PVIoMzkwMCksSz1mdW5jdGlvbihJKXtyZXR1cm4iUmVzcG9uc2UgZnJvbSAiLmNvbmNhdChJPT09ei5TZXJ2ZXJUeXBl'@;
put 'LlNhc1ZpeWE/IlZpeWEiOiJTYXNqcyIsIiBpcyBiZWxvdy4iKX07Ty5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeD1mdW5jdGlvbihJLGssRSxqLFYsQixZLFgpe3ZhciBVPWZ1bmN0aW9uKGVlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZWUsbnVsbCwyKX0scT1bIkVycm9yIHdoaWxlICIu'@;
put 'Y29uY2F0KEksIiBmcm9tICIpLmNvbmNhdChqKSwiVGhyb3duIGJ5IHRoZSBAc2FzanMvYWRhcHRlciAiLmNvbmNhdChrLCIgZnVuY3Rpb24uIildO3JldHVybiBWJiYocS5wdXNoKCJQYXlsb2FkOiIpLHEucHVzaChVKFYpKSksQiYmKHEucHVzaCgiSGVhZGVyczoiKSxxLnB1c2goVShCKSkp'@;
put 'LFkmJnEucHVzaCgiQ2xpZW50SWQ6ICIuY29uY2F0KFkpKSxYJiZxLnB1c2goIkNsaWVudFNlY3JldDogIi5jb25jYXQoWCkpLHEucHVzaCgiIikscS5wdXNoKCIiLmNvbmNhdChLKEUpKSkscS5wdXNoKCIiKSxxLmpvaW4oIlxuIil9LE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNw'@;
put 'b25zZT1mdW5jdGlvbihJLGspe3JldHVybiBJLnNwbGl0KCIiLmNvbmNhdChLKGspLCJcbiIpKS5wb3AoKX19LDcwNDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3Jl'@;
put 'dHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIHNlKHVlKXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2'@;
put 'YXIgY2U7dWUuZG9uZT9lZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKG9lLHNlKX1oZSgocT1xLmFwcGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rp'@;
put 'b24oWSxYKXt2YXIgVSxxLGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVlWzFdO3JldHVybiBlZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBTeW1ib2wmJih0ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlvbiBzZShoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkg'@;
put 'ZXhlY3V0aW5nLiIpO2Zvcig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChlZT1xLnJldHVybikmJmVlLmNhbGwocSksMCk6cS5uZXh0KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBlZTtzd2l0Y2gocT0wLGVlJiYo'@;
put 'Y2U9WzImY2VbMF0sZWUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIG9lLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9w'@;
put 'KCksb2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVbZWUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtvZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNd'@;
put 'KSl7b2UubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0sZWU9Y2U7YnJlYWt9aWYoZWUmJm9lLmxhYmVsPGVlWzJdKXtvZS5sYWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50'@;
put 'cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRUb2tlbnM9dm9pZCAwO3ZhciBFPVIoNjc5OSksaj1SKDM5MDApLFY9UigzNjYpLEI9UigyNDkpO08uZ2V0VG9rZW5zPWZ1bmN0aW9uKFksWCxVKXtyZXR1cm4gdm9pZCAwPT09VSYmKFU9ai5TZXJ2ZXJUeXBlLlNhc1ZpeWEp'@;
put 'LEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2UsdWUsY2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOmlmKHE9ei5sb2dnZXJ8fEssdGU9WC5yZWZyZXNoX3Rva2VuLG9lPVguY2xpZW50LHNlPVguc2VjcmV0'@;
put 'LCEoMCxFLmlzQWNjZXNzVG9rZW5FeHBpcmluZykoZWU9WC5hY2Nlc3NfdG9rZW4pJiYhKDAsRS5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKSh0ZSkpcmV0dXJuWzMsNV07aWYoKDAsRS5oYXNUb2tlbkV4cGlyZWQpKHRlKSl0aHJvdyBxLmVycm9yKCJVbmFibGUgdG8gb2J0YWluIG5ldyBhY2Nl'@;
put 'c3MgdG9rZW4uIFlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iKSxuZXcgRXJyb3IoIlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiIpO3JldHVybiBxLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZy'@;
put 'ZXNoIHRva2Vucy4iKSxVIT09ai5TZXJ2ZXJUeXBlLlNhc1ZpeWE/WzMsMl06WzQsKDAsVi5yZWZyZXNoVG9rZW5zRm9yVml5YSkoWSxvZSxzZSx0ZSldO2Nhc2UgMTpyZXR1cm4gY2U9Ry5zZW50KCksWzMsNF07Y2FzZSAyOnJldHVybls0LCgwLEIucmVmcmVzaFRva2Vuc0ZvclNhc2pzKShZ'@;
put 'LHRlKV07Y2FzZSAzOmNlPUcuc2VudCgpLEcubGFiZWw9NDtjYXNlIDQ6ZWU9KHVlPWNlKS5hY2Nlc3NfdG9rZW4sdGU9dWUucmVmcmVzaF90b2tlbixHLmxhYmVsPTU7Y2FzZSA1OnJldHVyblsyLHthY2Nlc3NfdG9rZW46ZWUscmVmcmVzaF90b2tlbjp0ZSxjbGllbnQ6b2Usc2VjcmV0OnNl'@;
put 'fV19fSl9KX19LDE1Mjc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv'@;
put 'cihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lk'@;
put 'IDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigyODUxKSxPKSxLKFIoOTA5NyksTyksSyhSKDkxNjYpLE8pfSw5MDk3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzQXV0aG9yaXplRm9y'@;
put 'bVJlcXVpcmVkPXZvaWQgMCxPLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPWZ1bmN0aW9uKFIpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KFIpfX0sOTE2NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0xvZ0luUmVxdWlyZWQ9dm9pZCAwLE8uaXNMb2dJblJlcXVpcmVkPWZ1bmN0aW9uKFIpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb24pfChsb2dpbilbXiJdKikuKj4vZ20udGVzdChSKX19LDU0MTg6ZnVuY3Rp'@;
put 'b24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBVKHRlKXt0cnl7ZWUoQi5uZXh0KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5j'@;
put 'dGlvbiBxKHRlKXt0cnl7ZWUoQi50aHJvdyh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gZWUodGUpe3ZhciBvZTt0ZS5kb25lP1kodGUudmFsdWUpOihvZT10ZS52YWx1ZSxvZSBpbnN0YW5jZW9mIFY/b2U6bmV3IFYoZnVuY3Rpb24oc2Upe3NlKG9lKX0pKS50aGVuKFUscSl9ZWUo'@;
put 'KEI9Qi5hcHBseShFLGp8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1'@;
put 'cm4gWD17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihYW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFg7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24o'@;
put 'b2Upe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKFY9MSxCJiYoWT0yJm9lWzBdP0IucmV0dXJuOm9lWzBdP0IudGhyb3d8fCgoWT1CLnJldHVybikmJlkuY2FsbChCKSwwKTpCLm5leHQpJiYhKFk9WS5j'@;
put 'YWxsKEIsb2VbMV0pKS5kb25lKXJldHVybiBZO3N3aXRjaChCPTAsWSYmKG9lPVsyJm9lWzBdLFkudmFsdWVdKSxvZVswXSl7Y2FzZSAwOmNhc2UgMTpZPW9lO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTpvZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLEI9b2Vb'@;
put 'MV0sb2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpvZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChZPShZPVUudHJ5cykubGVuZ3RoPjAmJllbWS5sZW5ndGgtMV0pfHw2IT09b2VbMF0mJjIhPT1vZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09b2VbMF0m'@;
put 'JighWXx8b2VbMV0+WVswXSYmb2VbMV08WVszXSkpe1UubGFiZWw9b2VbMV07YnJlYWt9aWYoNj09PW9lWzBdJiZVLmxhYmVsPFlbMV0pe1UubGFiZWw9WVsxXSxZPW9lO2JyZWFrfWlmKFkmJlUubGFiZWw8WVsyXSl7VS5sYWJlbD1ZWzJdLFUub3BzLnB1c2gob2UpO2JyZWFrfVlbMl0mJlUu'@;
put 'b3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1vZT1qLmNhbGwoRSxVKX1jYXRjaChzZSl7b2U9WzYsc2VdLEI9MH1maW5hbGx5e1Y9WT0wfWlmKDUmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJue3ZhbHVlOm9lWzBdP29lWzFdOnZvaWQgMCxkb25lOiEwfX0oW2VlLHRlXSl9fX07T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ub3BlbldlYlBhZ2U9dm9pZCAwO3ZhciBJPVIoMTIxMCksaz17d2lkdGg6NTAwLGhlaWdodDo2MDB9O08ub3BlbldlYlBhZ2U9ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIHZvaWQgMD09PWomJihqPSIiKSx2'@;
put 'b2lkIDA9PT1WJiYoVj1rKSx6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZLFgsVSxxLGVlO3JldHVybiBLKHRoaXMsZnVuY3Rpb24odGUpe3N3aXRjaCh0ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBZPVYud2lkdGgsWD1WLmhlaWdodCxVPXNjcmVlbi53aWR0aC8yLVkvMixx'@;
put 'PXNjcmVlbi5oZWlnaHQvMi1YLzIsKGVlPXdpbmRvdy5vcGVuKEUsaiwidG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSIuY29uY2F0KFksIixoZWlnaHQ9IikuY29uY2F0KFgsIixsZWZ0PSIpLmNvbmNhdChVLCIsdG9wPSIpLmNvbmNhdChxKSkpP1szLDJdOls0LChCPz9J'@;
put 'Lm9wZW5Mb2dpblByb21wdCkoKV07Y2FzZSAxOnJldHVyblsyLHRlLnNlbnQoKT93aW5kb3cub3BlbihFLGosInRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0iLmNvbmNhdChZLCIsaGVpZ2h0PSIpLmNvbmNhdChYLCIsbGVmdD0iKS5jb25jYXQoVSwiLHRvcD0iKS5jb25j'@;
put 'YXQocSkpOm51bGxdO2Nhc2UgMjpyZXR1cm5bMixlZV19fSl9KX19LDI0OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0'@;
put 'aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5j'@;
put 'ZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lm'@;
put 'KDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9'@;
put 'KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2Vb'@;
put 'MF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVy'@;
put 'biBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0'@;
put 'aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYm'@;
put 'cS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTty'@;
put 'ZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5yZWZyZXNoVG9rZW5zRm9yU2FzanM9dm9pZCAwO3ZhciBJPVIoOTc3OCksaz1SKDkwMTcpLEU9UigzOTAw'@;
put 'KTtPLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbihqLFYpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxqLnBvc3QoIi9TQVNqc0FwaS9hdXRoL3JlZnJl'@;
put 'c2giLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHtBdXRob3JpemF0aW9uOiJCZWFyZXIgIitWfSkudGhlbihmdW5jdGlvbihVKXt2YXIgcT1VLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOnEuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpxLnJlZnJlc2hUb2tlbn19KS5jYXRjaChmdW5jdGlv'@;
put 'bihVKXt0aHJvdygwLEkucHJlZml4TWVzc2FnZSkoVSwoMCxrLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yU2FzanMiLEUuU2VydmVyVHlwZS5TYXNqcywiL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIpKX0pXTtjYXNlIDE6'@;
put 'cmV0dXJuWzIsWC5zZW50KCldfX0pfSl9fSwzNjY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7'@;
put 'ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShxLm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxj'@;
put 'ZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUoZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1'@;
put 'bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0y'@;
put 'JmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNl'@;
put 'IDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChl'@;
put 'ZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAmJmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2Uu'@;
put 'bGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVlWzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2go'@;
put 'Ryl7Y2U9WzYsR10scT0wfWZpbmFsbHl7VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucmVmcmVz'@;
put 'aFRva2Vuc0ZvclZpeWE9dm9pZCAwO3ZhciBrPVIoMzkwMCksRT1SKDk3NzgpLGo9Uig2MjMwKSxWPVIoNTkyOCksQj1SKDkwMTcpO08ucmVmcmVzaFRva2Vuc0ZvclZpeWE9ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRl'@;
put 'LG9lLHNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOmlmKCEoMCxWLmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4iKTtyZXR1cm4gZWU9Ii9T'@;
put 'QVNMb2dvbi9vYXV0aC90b2tlbiIsdGU9dm9pZCAwPT09ej9idG9hKFgrIjoiK1UpOnouZnJvbShYKyI6IitVKS50b1N0cmluZygiYmFzZTY0Iiksb2U9e0F1dGhvcml6YXRpb246IkJhc2ljICIrdGV9LChzZT1uZXcgaikuYXBwZW5kKCJncmFudF90eXBlIiwicmVmcmVzaF90b2tlbiIpLHNl'@;
put 'LmFwcGVuZCgicmVmcmVzaF90b2tlbiIscSksWzQsWS5wb3N0KGVlLHNlLHZvaWQgMCwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitzZS5fYm91bmRhcnksb2UpLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiB1ZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbih1ZSl7dGhyb3coMCxF'@;
put 'LnByZWZpeE1lc3NhZ2UpKHVlLCgwLEIuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JWaXlhIixrLlNlcnZlclR5cGUuU2FzVml5YSxlZSxzZSxvZSxYLFUpKX0pXTtjYXNlIDE6cmV0dXJuWzIsaGUuc2VudCgpXX19KX0p'@;
put 'fX0sNDU4MjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihrLEUsaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihCLFkpe2Z1bmN0aW9uIFgoZWUpe3RyeXtxKFYubmV4dChlZSkpfWNhdGNoKHRl'@;
put 'KXtZKHRlKX19ZnVuY3Rpb24gVShlZSl7dHJ5e3EoVi50aHJvdyhlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gcShlZSl7dmFyIHRlO2VlLmRvbmU/QihlZS52YWx1ZSk6KHRlPWVlLnZhbHVlLHRlIGluc3RhbmNlb2Ygaj90ZTpuZXcgaihmdW5jdGlvbihvZSl7b2UodGUpfSkpLnRo'@;
put 'ZW4oWCxVKX1xKChWPVYuYXBwbHkoayxFfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZLFg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9w'@;
put 'czpbXX07cmV0dXJuIFk9e25leHQ6VSgwKSx0aHJvdzpVKDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxZO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24odGUpe2lmKGopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7WDspdHJ5e2lmKGo9MSxWJiYoQj0yJnRlWzBdP1YucmV0dXJuOnRlWzBdP1YudGhyb3d8fCgoQj1WLnJldHVybikmJkIuY2FsbChWKSwwKTpWLm5leHQp'@;
put 'JiYhKEI9Qi5jYWxsKFYsdGVbMV0pKS5kb25lKXJldHVybiBCO3N3aXRjaChWPTAsQiYmKHRlPVsyJnRlWzBdLEIudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpCPXRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gWC5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6WC5sYWJl'@;
put 'bCsrLFY9dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp0ZT1YLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChCPShCPVgudHJ5cykubGVuZ3RoPjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1g9MDtjb250aW51ZX1pZigz'@;
put 'PT09dGVbMF0mJighQnx8dGVbMV0+QlswXSYmdGVbMV08QlszXSkpe1gubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZYLmxhYmVsPEJbMV0pe1gubGFiZWw9QlsxXSxCPXRlO2JyZWFrfWlmKEImJlgubGFiZWw8QlsyXSl7WC5sYWJlbD1CWzJdLFgub3BzLnB1c2godGUpO2JyZWFr'@;
put 'fUJbMl0mJlgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZX10ZT1FLmNhbGwoayxYKX1jYXRjaChvZSl7dGU9WzYsb2VdLFY9MH1maW5hbGx5e2o9Qj0wfWlmKDUmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsZWVd'@;
put 'KX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy52ZXJpZnlTYXM5TG9naW49dm9pZCAwO3ZhciBJPVIoNTkyOCk7Ty52ZXJpZnlTYXM5TG9naW49ZnVuY3Rpb24oayl7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IEUsaixWO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oQil7c3dpdGNoKEIubGFiZWwpe2Nhc2UgMDpFPSExLGo9bmV3IERhdGUsVj0wLEIubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSAyOmlmKEIuc2VudCgpLGsuY2xvc2VkKXJldHVyblszLDRdO0U9ay53'@;
put 'aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKSYmay53aW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lclRleHQuaW5jbHVkZXMoIllvdSBoYXZlIHNpZ25lZCBpbi4iKSxWPSgobmV3IERhdGUpLnZhbHVlT2YoKS1qLnZhbHVlT2YoKSkvMWUzLEIubGFiZWw9MztjYXNlIDM6'@;
put 'aWYoIUUmJlY8MzAwKXJldHVyblszLDFdO0IubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIse2lzTG9nZ2VkSW46RX1dfX0pfSl9fSw2NTQ3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGssRSxqLFYpe3JldHVybiBuZXco'@;
put 'anx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKEIsWSl7ZnVuY3Rpb24gWChlZSl7dHJ5e3EoVi5uZXh0KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBVKGVlKXt0cnl7cShWLnRocm93KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBxKGVlKXt2YXIgdGU7ZWUuZG9uZT9CKGVl'@;
put 'LnZhbHVlKToodGU9ZWUudmFsdWUsdGUgaW5zdGFuY2VvZiBqP3RlOm5ldyBqKGZ1bmN0aW9uKG9lKXtvZSh0ZSl9KSkudGhlbihYLFUpfXEoKFY9Vi5hcHBseShrLEV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFks'@;
put 'WD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZCWzBdKXRocm93IEJbMV07cmV0dXJuIEJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWT17bmV4dDpVKDApLHRocm93OlUoMSkscmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihZW1N5bWJvbC5pdGVyYXRv'@;
put 'cl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFk7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtYOyl0cnl7aWYoaj0xLFYm'@;
put 'JihCPTImdGVbMF0/Vi5yZXR1cm46dGVbMF0/Vi50aHJvd3x8KChCPVYucmV0dXJuKSYmQi5jYWxsKFYpLDApOlYubmV4dCkmJiEoQj1CLmNhbGwoVix0ZVsxXSkpLmRvbmUpcmV0dXJuIEI7c3dpdGNoKFY9MCxCJiYodGU9WzImdGVbMF0sQi52YWx1ZV0pLHRlWzBdKXtjYXNlIDA6Y2FzZSAx'@;
put 'OkI9dGU7YnJlYWs7Y2FzZSA0OnJldHVybiBYLmxhYmVsKysse3ZhbHVlOnRlWzFdLGRvbmU6ITF9O2Nhc2UgNTpYLmxhYmVsKyssVj10ZVsxXSx0ZT1bMF07Y29udGludWU7Y2FzZSA3OnRlPVgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9WC50'@;
put 'cnlzKS5sZW5ndGg+MCYmQltCLmxlbmd0aC0xXSl8fDYhPT10ZVswXSYmMiE9PXRlWzBdKSl7WD0wO2NvbnRpbnVlfWlmKDM9PT10ZVswXSYmKCFCfHx0ZVsxXT5CWzBdJiZ0ZVsxXTxCWzNdKSl7WC5sYWJlbD10ZVsxXTticmVha31pZig2PT09dGVbMF0mJlgubGFiZWw8QlsxXSl7WC5sYWJl'@;
put 'bD1CWzFdLEI9dGU7YnJlYWt9aWYoQiYmWC5sYWJlbDxCWzJdKXtYLmxhYmVsPUJbMl0sWC5vcHMucHVzaCh0ZSk7YnJlYWt9QlsyXSYmWC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlfXRlPUUuY2FsbChrLFgpfWNhdGNoKG9lKXt0ZT1bNixvZV0sVj0wfWZpbmFsbHl7aj1CPTB9'@;
put 'aWYoNSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm57dmFsdWU6dGVbMF0/dGVbMV06dm9pZCAwLGRvbmU6ITB9fShbcSxlZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzTG9nZ2VkSW5TQVNWSVlBPU8udmVyaWZ5U2FzVml5YUxvZ2lu'@;
put 'PXZvaWQgMDt2YXIgST1SKDU5MjgpO08udmVyaWZ5U2FzVml5YUxvZ2luPWZ1bmN0aW9uKGspe3ZhciBFLGo7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFYsQixZLFg7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihVKXtzd2l0Y2goVS5sYWJlbCl7Y2FzZSAwOlY9'@;
put 'ITEsQj1uZXcgRGF0ZSxZPTAsVS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm5bNCwoMCxJLmRlbGF5KSgxZTMpXTtjYXNlIDI6aWYoVS5zZW50KCksay5jbG9zZWQpcmV0dXJuWzMsNF07Vj0oMCxPLmlzTG9nZ2VkSW5TQVNWSVlBKSgpLFk9KChuZXcgRGF0ZSkudmFsdWVPZigpLUIudmFsdWVPZigp'@;
put 'KS8xZTMsVS5sYWJlbD0zO2Nhc2UgMzppZighViYmWTwzMDApcmV0dXJuWzMsMV07VS5sYWJlbD00O2Nhc2UgNDpYPSExLEI9bmV3IERhdGUsVS5sYWJlbD01O2Nhc2UgNTpyZXR1cm5bNCwoMCxJLmRlbGF5KSgxZTMpXTtjYXNlIDY6aWYoVS5zZW50KCksay5jbG9zZWQpcmV0dXJuWzMsOF07'@;
put 'WD1rLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpfHwobnVsbD09PShqPW51bGw9PT0oRT1rLndpbmRvdy5kb2N1bWVudC5ib2R5KXx8dm9pZCAwPT09RT92b2lkIDA6RS5pbm5lclRleHQpfHx2b2lkIDA9PT1qP3ZvaWQgMDpqLmluY2x1ZGVzKCJZb3UgaGF2ZSBz'@;
put 'aWduZWQgaW4uIikpLFk9KChuZXcgRGF0ZSkudmFsdWVPZigpLUIudmFsdWVPZigpKS8xZTMsVS5sYWJlbD03O2Nhc2UgNzppZighWCYmWTwzMDApcmV0dXJuWzMsNV07VS5sYWJlbD04O2Nhc2UgODpyZXR1cm5bMix7aXNMb2dnZWRJbjpWJiZYfV19fSl9KX0sTy5pc0xvZ2dlZEluU0FTVklZ'@;
put 'QT1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jb29raWUuaW5jbHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVudC5jb29raWUuaW5jbHVkZXMoInVzZXJJZCIpfX0sNDAzNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KSxPLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09dm9pZCAwO3ZhciB6PVIoMjQwMiksSz1SKDU5MjgpO08uZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT1mdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBrKWlmKEFycmF5LmlzQXJyYXkoa1tFXSkpe3ZhciBqPUUsVj0oMCx6LmNvbnZl'@;
put 'cnRUb0NTVikoayxFKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Vil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7aWYoKDAsSy5pc05vZGUpKCkpSS5hcHBlbmQoaixWLHtm'@;
put 'aWxlbmFtZToiIi5jb25jYXQoaiwiLmNzdiIpLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7ZWxzZXt2YXIgQj1uZXcgQmxvYihbVl0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtJLmFwcGVuZChqLEIsIiIuY29uY2F0KGosIi5jc3YiKSl9fXJldHVybiBJfX0sMjE3MDooTSxP'@;
put 'LFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPXZvaWQgMDt2YXIgej1SKDI0MDIpLEs9Uig0Nzk5KTtPLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPWZ1bmN0aW9uKEksayl7'@;
put 'dmFyIEU9W10saj17fSxWPTA7Zm9yKHZhciBCIGluIGspe1YrKywoMCx6LmlzRm9ybWF0c1RhYmxlKShCKXx8RS5wdXNoKEIpO3ZhciBZPSgwLHouY29udmVydFRvQ1NWKShrLEIpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1ZKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBs'@;
put 'ZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtZLmxlbmd0aD4xNmUzPygwLEsuc3BsaXRDaHVua3MpKFkpLm1hcChmdW5jdGlvbihYKXtJLmFwcGVuZCgic2FzanMiLmNvbmNhdChWLCJkYXRhIiksWCl9KTpqWyJzYXNqcyIuY29uY2F0KFYs'@;
put 'ImRhdGEiKV09WX1yZXR1cm4gai5zYXNqc190YWJsZXM9RS5qb2luKCIgIikse2Zvcm1EYXRhOkkscmVxdWVzdFBhcmFtczpqfX19LDM2MDc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rp'@;
put 'b24oayxFLGosVil7dm9pZCAwPT09ViYmKFY9aik7dmFyIEI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFLGopO0ImJiEoImdldCJpbiBCPyFFLl9fZXNNb2R1bGU6Qi53cml0YWJsZXx8Qi5jb25maWd1cmFibGUpfHwoQj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gRVtqXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoayxWLEIpfTpmdW5jdGlvbihrLEUsaixWKXt2b2lkIDA9PT1WJiYoVj1qKSxrW1ZdPUVbal19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihrLEUpe2Zvcih2YXIgaiBpbiBrKSJkZWZhdWx0Ij09PWp8fE9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChFLGopfHx6KEUsayxqKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJPVIoNTk1Nik7SyhSKDEyMzApLE8pLEsoUigxMzk1KSxPKSxLKFIoOTgyMSksTyksSyhSKDgzMDYpLE8p'@;
put 'LEsoUigzNDY3KSxPKSxLKFIoMzYwMiksTyksTy5kZWZhdWx0PUkuZGVmYXVsdH0sMTU3MDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKEIsWSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19w'@;
put 'cm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFgsVSl7WC5fX3Byb3RvX189VX18fGZ1bmN0aW9uKFgsVSl7Zm9yKHZhciBxIGluIFUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUscSkmJihYW3FdPVVbcV0pfSkoQixZKX0sZnVuY3Rpb24oQixZKXtp'@;
put 'ZigiZnVuY3Rpb24iIT10eXBlb2YgWSYmbnVsbCE9PVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhZKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBYKCl7dGhpcy5jb25zdHJ1Y3Rvcj1CfXooQixZKSxCLnByb3Rv'@;
put 'dHlwZT1udWxsPT09WT9PYmplY3QuY3JlYXRlKFkpOihYLnByb3RvdHlwZT1ZLnByb3RvdHlwZSxuZXcgWCl9KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiB0ZShoZSl7'@;
put 'dHJ5e3NlKFUubmV4dChoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIG9lKGhlKXt0cnl7c2UoVS50aHJvdyhoZSkpfWNhdGNoKHVlKXtlZSh1ZSl9fWZ1bmN0aW9uIHNlKGhlKXt2YXIgdWU7aGUuZG9uZT9xKGhlLnZhbHVlKToodWU9aGUudmFsdWUsdWUgaW5zdGFuY2VvZiBYP3Vl'@;
put 'Om5ldyBYKGZ1bmN0aW9uKGNlKXtjZSh1ZSl9KSkudGhlbih0ZSxvZSl9c2UoKFU9VS5hcHBseShCLFl8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEIsWSl7dmFyIFgsVSxxLGVlLHRlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnFb'@;
put 'MF0pdGhyb3cgcVsxXTtyZXR1cm4gcVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBlZT17bmV4dDpvZSgwKSx0aHJvdzpvZSgxKSxyZXR1cm46b2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihlZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxl'@;
put 'ZTtmdW5jdGlvbiBvZShzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe2lmKFgpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7dGU7KXRyeXtpZihYPTEsVSYmKHE9MiZ1ZVswXT9VLnJldHVybjp1ZVsw'@;
put 'XT9VLnRocm93fHwoKHE9VS5yZXR1cm4pJiZxLmNhbGwoVSksMCk6VS5uZXh0KSYmIShxPXEuY2FsbChVLHVlWzFdKSkuZG9uZSlyZXR1cm4gcTtzd2l0Y2goVT0wLHEmJih1ZT1bMiZ1ZVswXSxxLnZhbHVlXSksdWVbMF0pe2Nhc2UgMDpjYXNlIDE6cT11ZTticmVhaztjYXNlIDQ6cmV0dXJu'@;
put 'IHRlLmxhYmVsKysse3ZhbHVlOnVlWzFdLGRvbmU6ITF9O2Nhc2UgNTp0ZS5sYWJlbCsrLFU9dWVbMV0sdWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp1ZT10ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHE9KHE9dGUudHJ5cykubGVuZ3RoPjAmJnFbcS5s'@;
put 'ZW5ndGgtMV0pfHw2IT09dWVbMF0mJjIhPT11ZVswXSkpe3RlPTA7Y29udGludWV9aWYoMz09PXVlWzBdJiYoIXF8fHVlWzFdPnFbMF0mJnVlWzFdPHFbM10pKXt0ZS5sYWJlbD11ZVsxXTticmVha31pZig2PT09dWVbMF0mJnRlLmxhYmVsPHFbMV0pe3RlLmxhYmVsPXFbMV0scT11ZTticmVh'@;
put 'a31pZihxJiZ0ZS5sYWJlbDxxWzJdKXt0ZS5sYWJlbD1xWzJdLHRlLm9wcy5wdXNoKHVlKTticmVha31xWzJdJiZ0ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZX11ZT1ZLmNhbGwoQix0ZSl9Y2F0Y2goY2Upe3VlPVs2LGNlXSxVPTB9ZmluYWxseXtYPXE9MH1pZig1JnVlWzBd'@;
put 'KXRocm93IHVlWzFdO3JldHVybnt2YWx1ZTp1ZVswXT91ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtzZSxoZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbXB1dGVKb2JFeGVjdXRvcj12b2lkIDA7dmFyIEU9UigzOTAwKSxqPVIoMTM5'@;
put 'NSksVj1mdW5jdGlvbihCKXtmdW5jdGlvbiBZKFgsVSl7dmFyIHE9Qi5jYWxsKHRoaXMsWCxFLlNlcnZlclR5cGUuU2FzVml5YSl8fHRoaXM7cmV0dXJuIHEuc2FzVml5YUFwaUNsaWVudD1VLHF9cmV0dXJuIEsoWSxCKSxZLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKFgsVSxxLGVlLHRl'@;
put 'KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2UsaGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHVlKXtyZXR1cm4gb2U9ZWV8fGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihjZSxHKXt2'@;
put 'YXIgYjtudWxsPT09KGI9aGUuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWJ8fGIuZXhlY3V0ZUNvbXB1dGVKb2IoWCxxLmNvbnRleHROYW1lLHEuZGVidWcsVSx0ZSwhMCwhMCkudGhlbihmdW5jdGlvbihEKXtoZS5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoRCxYLHEuZGVi'@;
put 'dWcpLGNlKEQucmVzdWx0KX0pLmNhdGNoKGZ1bmN0aW9uKEQpe3JldHVybiBJKGhlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSD10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRCBpbnN0YW5jZW9mIGouQ29tcHV0ZUpv'@;
put 'YkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoRCxYLHEuZGVidWcpLEcobmV3IGouRXJyb3JSZXNwb25zZShEPy5tZXNzYWdlLEQpKSksRCBpbnN0YW5jZW9mIGouTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0'@;
put 'KGZ1bmN0aW9uKCl7cmV0dXJuIEguZXhlY3V0ZShYLFUscSxlZSkudGhlbihmdW5jdGlvbihnKXtjZShnKX0sZnVuY3Rpb24oZyl7RyhnKX0pfSksWzQsb2UoKV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gTi5zZW50KCksWzMsM107Y2FzZSAyOkcobmV3IGouRXJyb3JSZXNwb25zZShEPy5tZXNz'@;
put 'YWdlLEQpKSxOLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSxZfShSKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7Ty5Db21wdXRlSm9iRXhlY3V0b3I9Vn0sMzQ5MTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8'@;
put 'fCh6PWZ1bmN0aW9uKFksWCl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFUscSl7VS5fX3Byb3RvX189cX18fGZ1bmN0aW9uKFUscSl7Zm9yKHZhciBlZSBpbiBxKU9iamVjdC5wcm90b3R5cGUuaGFzT3du'@;
put 'UHJvcGVydHkuY2FsbChxLGVlKSYmKFVbZWVdPXFbZWVdKX0pKFksWCl9LGZ1bmN0aW9uKFksWCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFgmJm51bGwhPT1YKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoWCkrIiBpcyBub3QgYSBjb25zdHJ1Y3Rv'@;
put 'ciBvciBudWxsIik7ZnVuY3Rpb24gVSgpe3RoaXMuY29uc3RydWN0b3I9WX16KFksWCksWS5wcm90b3R5cGU9bnVsbD09PVg/T2JqZWN0LmNyZWF0ZShYKTooVS5wcm90b3R5cGU9WC5wcm90b3R5cGUsbmV3IFUpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7'@;
put 'cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUp'@;
put 'e3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5j'@;
put 'dGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFk'@;
put 'eSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUm'@;
put 'JihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5w'@;
put 'b3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVb'@;
put 'M10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9l'@;
put 'LnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtoZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkZpbGVVcGxvYWRlcj12b2lkIDA7dmFyIEU9Uig1OTI4KSxqPVIoMTM5NSksVj1SKDM5MDApLEI9ZnVuY3Rpb24oWSl7ZnVuY3Rpb24gWChVLHEsZWUsdGUpe3ZhciBvZT1ZLmNhbGwodGhpcyxVLHEpfHx0aGlzO3JldHVybiBv'@;
put 'ZS5qb2JzUGF0aD1lZSxvZS5yZXF1ZXN0Q2xpZW50PXRlLG9lfXJldHVybiBLKFgsWSksWC5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihVLHEsZWUsdGUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxDLFMs'@;
put 'cD10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odyl7aWYob2U9cS5maWxlcyxzZT1xLnBhcmFtcyxoZT10ZXx8ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LCFvZT8ubGVuZ3RoKXRocm93IG5ldyBqLkVycm9yUmVzcG9uc2UoIkF0IGxlYXN0IG9uZSBmaWxlIG11c3Qg'@;
put 'YmUgcHJvdmlkZWQuIik7aWYoIVV8fCIiPT09VSl0aHJvdyBuZXcgai5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtmb3IoY2UgaW4gdWU9IiIsc2Upc2UuaGFzT3duUHJvcGVydHkoY2UpJiYodWUrPSImIi5jb25jYXQoY2UsIj0iKS5jb25jYXQoc2VbY2VdKSk7'@;
put 'Zm9yKEc9ZWUuYXBwTG9jP2VlLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK1UucmVwbGFjZSgvXlwvLywiIik6VSxiPSIiLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitHKS5jb25jYXQodWUpLEQ9bmV3IEZvcm1EYXRhLEg9MCxOPW9lO0g8Ti5sZW5n'@;
put 'dGg7SCsrKUQuYXBwZW5kKCJmaWxlIiwoZz1OW0hdKS5maWxlLGcuZmlsZU5hbWUpO3JldHVybihDPXRoaXMucmVxdWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUiKSkmJkQuYXBwZW5kKCJfY3NyZiIsQy52YWx1ZSksZWUuZGVidWcmJkQuYXBwZW5kKCJfZGVidWciLCIxMzEiKSxlZS5z'@;
put 'ZXJ2ZXJUeXBlPT09Vi5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmVlLmNvbnRleHROYW1lJiZELmFwcGVuZCgiX2NvbnRleHRuYW1lIixlZS5jb250ZXh0TmFtZSksUz17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn0sWzIs'@;
put 'bmV3IFByb21pc2UoZnVuY3Rpb24oSixuZSl7cC5yZXF1ZXN0Q2xpZW50LnBvc3QoYixELHZvaWQgMCwiYXBwbGljYXRpb24vanNvbiIsUykudGhlbihmdW5jdGlvbihkZSl7cmV0dXJuIEkocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24o'@;
put 'eGUpe3N3aXRjaCh4ZS5sYWJlbCl7Y2FzZSAwOmlmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLFUsZWUuZGVidWcpLGZlPWRlLnJlc3VsdCwhZWUuZGVidWcpcmV0dXJuWzMsNl07c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTpy'@;
put 'ZXR1cm5bMywxXTtjYXNlIFYuU2VydmVyVHlwZS5TYXM5OnJldHVyblszLDNdO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVyblszLDRdfXJldHVyblszLDVdO2Nhc2UgMTpyZXR1cm5bNCwoMCxFLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKGRlLnJlc3VsdCx0aGlzLnJlcXVlc3RD'@;
put 'bGllbnQsZWUuc2VydmVyVXJsKV07Y2FzZSAyOnJldHVybiBmZT14ZS5zZW50KCksWzMsNV07Y2FzZSAzOnJldHVybiBmZT0ic3RyaW5nIj09dHlwZW9mIGRlLnJlc3VsdD8oMCxFLnBhcnNlV2Vib3V0UmVzcG9uc2UpKGRlLnJlc3VsdCxiKTpkZS5yZXN1bHQsWzMsNV07Y2FzZSA0OnJldHVy'@;
put 'biBmZT0ic3RyaW5nIj09dHlwZW9mIGRlLnJlc3VsdD8oMCxFLmdldFZhbGlkSnNvbikoZGUucmVzdWx0KTpkZS5yZXN1bHQsWzMsNV07Y2FzZSA1OnJldHVyblszLDddO2Nhc2UgNjpmZT0ic3RyaW5nIj09dHlwZW9mIGRlLnJlc3VsdD8oMCxFLmdldFZhbGlkSnNvbikoZGUucmVzdWx0KTpk'@;
put 'ZS5yZXN1bHQseGUubGFiZWw9NztjYXNlIDc6cmV0dXJuIEooZmUpLFsyXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oZGUpe3JldHVybiBJKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeGUpe3N3aXRjaCh4ZS5sYWJlbCl7Y2Fz'@;
put 'ZSAwOnJldHVybiBkZSBpbnN0YW5jZW9mIGouSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxVLGVlLmRlYnVnKSxuZShuZXcgai5FcnJvclJlc3BvbnNlKGRlPy5tZXNzYWdlLGRlKSkpLGRlIGluc3RhbmNlb2Ygai5Mb2dpblJlcXVpcmVk'@;
put 'RXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gZmUuZXhlY3V0ZShVLHEsZWUsdGUpLnRoZW4oZnVuY3Rpb24oTGUpe0ooTGUpfSxmdW5jdGlvbihMZSl7bmUoTGUpfSl9KSxbNCxoZSgpXSk6WzMsMl07Y2FzZSAxOnJldHVybiB4ZS5zZW50KCksWzMs'@;
put 'M107Y2FzZSAyOm5lKG5ldyBqLkVycm9yUmVzcG9uc2UoIkZpbGUgdXBsb2FkIHJlcXVlc3QgZmFpbGVkLiIsZGUpKSx4ZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sWH0oUig2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO08uRmlsZVVwbG9hZGVyPUJ9LDQ0NDY6ZnVu'@;
put 'Y3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihYLFUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihxLGVlKXtxLl9fcHJvdG9fXz1l'@;
put 'ZX18fGZ1bmN0aW9uKHEsZWUpe2Zvcih2YXIgdGUgaW4gZWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVlLHRlKSYmKHFbdGVdPWVlW3RlXSl9KShYLFUpfSxmdW5jdGlvbihYLFUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBVJiZudWxsIT09VSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPVh9eihYLFUpLFgucHJvdG90eXBlPW51bGw9PT1VP09iamVjdC5jcmVhdGUoVSk6KHEucHJvdG90eXBlPVUu'@;
put 'cHJvdG90eXBlLG5ldyBxKX0pLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFgsVSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24gc2UoY2Upe3RyeXt1ZShlZS5uZXh0KGNlKSl9Y2F0Y2goRyl7b2UoRyl9fWZ1bmN0aW9u'@;
put 'IGhlKGNlKXt0cnl7dWUoZWUudGhyb3coY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gdWUoY2Upe3ZhciBHO2NlLmRvbmU/dGUoY2UudmFsdWUpOihHPWNlLnZhbHVlLEcgaW5zdGFuY2VvZiBxP0c6bmV3IHEoZnVuY3Rpb24oYil7YihHKX0pKS50aGVuKHNlLGhlKX11ZSgoZWU9ZWUu'@;
put 'YXBwbHkoWCxVfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihYLFUpe3ZhciBxLGVlLHRlLG9lLHNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3Jl'@;
put 'dHVybiBvZT17bmV4dDpoZSgwKSx0aHJvdzpoZSgxKSxyZXR1cm46aGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihvZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvZTtmdW5jdGlvbiBoZSh1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oRyl7aWYocSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtzZTspdHJ5e2lmKHE9MSxlZSYmKHRlPTImR1swXT9lZS5yZXR1cm46R1swXT9lZS50aHJvd3x8KCh0ZT1lZS5yZXR1cm4pJiZ0ZS5jYWxsKGVlKSwwKTpl'@;
put 'ZS5uZXh0KSYmISh0ZT10ZS5jYWxsKGVlLEdbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2goZWU9MCx0ZSYmKEc9WzImR1swXSx0ZS52YWx1ZV0pLEdbMF0pe2Nhc2UgMDpjYXNlIDE6dGU9RzticmVhaztjYXNlIDQ6cmV0dXJuIHNlLmxhYmVsKysse3ZhbHVlOkdbMV0sZG9uZTohMX07Y2Fz'@;
put 'ZSA1OnNlLmxhYmVsKyssZWU9R1sxXSxHPVswXTtjb250aW51ZTtjYXNlIDc6Rz1zZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1zZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PUdbMF0mJjIhPT1HWzBdKSl7c2U9'@;
put 'MDtjb250aW51ZX1pZigzPT09R1swXSYmKCF0ZXx8R1sxXT50ZVswXSYmR1sxXTx0ZVszXSkpe3NlLmxhYmVsPUdbMV07YnJlYWt9aWYoNj09PUdbMF0mJnNlLmxhYmVsPHRlWzFdKXtzZS5sYWJlbD10ZVsxXSx0ZT1HO2JyZWFrfWlmKHRlJiZzZS5sYWJlbDx0ZVsyXSl7c2UubGFiZWw9dGVb'@;
put 'Ml0sc2Uub3BzLnB1c2goRyk7YnJlYWt9dGVbMl0mJnNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlfUc9VS5jYWxsKFgsc2UpfWNhdGNoKGIpe0c9WzYsYl0sZWU9MH1maW5hbGx5e3E9dGU9MH1pZig1JkdbMF0pdGhyb3cgR1sxXTtyZXR1cm57dmFsdWU6R1swXT9HWzFdOnZv'@;
put 'aWQgMCxkb25lOiEwfX0oW3VlLGNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSmVzSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1SKDEzOTUpLFY9Uig2MTE4KSxCPVIoNTkyOCksWT1mdW5jdGlvbihYKXtmdW5jdGlv'@;
put 'biBVKHEsZWUpe3ZhciB0ZT1YLmNhbGwodGhpcyxxLEUuU2VydmVyVHlwZS5TYXNWaXlhKXx8dGhpcztyZXR1cm4gdGUuc2FzVml5YUFwaUNsaWVudD1lZSx0ZX1yZXR1cm4gSyhVLFgpLFUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ocSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIHZvaWQg'@;
put 'MD09PWhlJiYoaGU9W10pLEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHVlLEc9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiB1ZT1vZXx8ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEQs'@;
put 'SCl7dmFyIE47bnVsbD09PShOPUcuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PU58fE4uZXhlY3V0ZUpvYihxLHRlLmNvbnRleHROYW1lLHRlLmRlYnVnLGVlLHNlKS50aGVuKGZ1bmN0aW9uKGcpe0cuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KGcscSx0ZS5kZWJ1Zyk7dmFy'@;
put 'IEM9KDAsQi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoZyxoZSk7RChDKX0pLmNhdGNoKGZ1bmN0aW9uKGcpe3JldHVybiBJKEcsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBDPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAw'@;
put 'OnJldHVybiBnIGluc3RhbmNlb2Ygai5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KGcscSx0ZS5kZWJ1ZyksSChuZXcgai5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpKSxnIGluc3RhbmNlb2Ygai5Mb2dpblJlcXVpcmVkRXJyb3I/'@;
put 'KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gQy5leGVjdXRlKHEsZWUsdGUsb2Usc2UsaGUpLnRoZW4oZnVuY3Rpb24odil7RCh2KX0sZnVuY3Rpb24odil7SCh2KX0pfSksWzQsdWUoKV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gUy5zZW50KCksWzMsM107Y2Fz'@;
put 'ZSAyOkgobmV3IGouRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSxTLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSxVfShWLkJhc2VKb2JFeGVjdXRvcik7Ty5KZXNKb2JFeGVjdXRvcj1ZfSw2MTE4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9'@;
put 'dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEUsaixWLEIpe3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gVSh0ZSl7dHJ5e2VlKEIubmV4dCh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e2VlKEIudGhyb3codGUp'@;
put 'KX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIGVlKHRlKXt2YXIgb2U7dGUuZG9uZT9ZKHRlLnZhbHVlKToob2U9dGUudmFsdWUsb2UgaW5zdGFuY2VvZiBWP29lOm5ldyBWKGZ1bmN0aW9uKHNlKXtzZShvZSl9KSkudGhlbihVLHEpfWVlKChCPUIuYXBwbHkoRSxqfHxbXSkpLm5leHQoKSl9'@;
put 'KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihFLGope3ZhciBWLEIsWSxYLFU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWVswXSl0aHJvdyBZWzFdO3JldHVybiBZWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFg9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJl'@;
put 'dHVybjpxKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxYO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3Io'@;
put 'IkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1U7KXRyeXtpZihWPTEsQiYmKFk9MiZvZVswXT9CLnJldHVybjpvZVswXT9CLnRocm93fHwoKFk9Qi5yZXR1cm4pJiZZLmNhbGwoQiksMCk6Qi5uZXh0KSYmIShZPVkuY2FsbChCLG9lWzFdKSkuZG9uZSlyZXR1cm4gWTtz'@;
put 'd2l0Y2goQj0wLFkmJihvZT1bMiZvZVswXSxZLnZhbHVlXSksb2VbMF0pe2Nhc2UgMDpjYXNlIDE6WT1vZTticmVhaztjYXNlIDQ6cmV0dXJuIFUubGFiZWwrKyx7dmFsdWU6b2VbMV0sZG9uZTohMX07Y2FzZSA1OlUubGFiZWwrKyxCPW9lWzFdLG9lPVswXTtjb250aW51ZTtjYXNlIDc6b2U9'@;
put 'VS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWT0oWT1VLnRyeXMpLmxlbmd0aD4wJiZZW1kubGVuZ3RoLTFdKXx8NiE9PW9lWzBdJiYyIT09b2VbMF0pKXtVPTA7Y29udGludWV9aWYoMz09PW9lWzBdJiYoIVl8fG9lWzFdPllbMF0mJm9lWzFdPFlbM10p'@;
put 'KXtVLmxhYmVsPW9lWzFdO2JyZWFrfWlmKDY9PT1vZVswXSYmVS5sYWJlbDxZWzFdKXtVLmxhYmVsPVlbMV0sWT1vZTticmVha31pZihZJiZVLmxhYmVsPFlbMl0pe1UubGFiZWw9WVsyXSxVLm9wcy5wdXNoKG9lKTticmVha31ZWzJdJiZVLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGlu'@;
put 'dWV9b2U9ai5jYWxsKEUsVSl9Y2F0Y2goc2Upe29lPVs2LHNlXSxCPTB9ZmluYWxseXtWPVk9MH1pZig1Jm9lWzBdKXRocm93IG9lWzFdO3JldHVybnt2YWx1ZTpvZVswXT9vZVsxXTp2b2lkIDAsZG9uZTohMH19KFtlZSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxPLkJhc2VKb2JFeGVjdXRvcj12b2lkIDA7dmFyIEk9Uig1OTI4KSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRShqLFYpe3ZhciBCPXRoaXM7dGhpcy5zZXJ2ZXJVcmw9aix0aGlzLnNlcnZlclR5cGU9Vix0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSx0aGlzLnJlc2Vu'@;
put 'ZFdhaXRpbmdSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiB6KEIsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBZPXRoaXM7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLEkuYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRpbmdS'@;
put 'ZXF1ZXN0cyxmdW5jdGlvbihVKXtyZXR1cm4geihZLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHEpe3N3aXRjaChxLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsVSgpXTtjYXNlIDE6cmV0dXJuIHEuc2VudCgpLFsyXX19KX0pfSldO2Nhc2UgMTpyZXR1'@;
put 'cm4gWC5zZW50KCksdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sWzJdfX0pfSl9fXJldHVybiBFLnByb3RvdHlwZS5hcHBlbmRXYWl0aW5nUmVxdWVzdD1mdW5jdGlvbihqKXt0aGlzLndhaXRpbmdSZXF1ZXN0cy5wdXNoKGopfSxFLnByb3RvdHlwZS5nZXRSZXF1ZXN0UGFyYW1zPWZ1bmN0aW9u'@;
put 'KGope3ZhciBWPXt9O3JldHVybiBqLmRlYnVnJiYoVi5fb21pdHRleHRsb2c9ImZhbHNlIixWLl9vbWl0c2Vzc2lvbnJlc3VsdHM9ImZhbHNlIixWLl9kZWJ1Zz0xMzEpLFZ9LEV9KCk7Ty5CYXNlSm9iRXhlY3V0b3I9a30sMjY5MzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6'@;
put 'LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ob2Usc2Upe29lLl9fcHJvdG9fXz1zZX18fGZ1bmN0aW9uKG9lLHNlKXtmb3IodmFy'@;
put 'IGhlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxoZSkmJihvZVtoZV09c2VbaGVdKX0pKGVlLHRlKX0sZnVuY3Rpb24oZWUsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9PXRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVu'@;
put 'ZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG9lKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lZX16KGVlLHRlKSxlZS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5jcmVhdGUodGUpOihvZS5wcm90b3R5cGU9dGUucHJvdG90eXBl'@;
put 'LG5ldyBvZSl9KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGUsb2U9MSxzZT1hcmd1bWVudHMubGVuZ3RoO29lPHNlO29lKyspZm9yKHZhciBoZSBpbiB0ZT1hcmd1bWVudHNbb2VdKU9iamVj'@;
put 'dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxoZSkmJihlZVtoZV09dGVbaGVdKTtyZXR1cm4gZWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlZSx0ZSxvZSxzZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2Up'@;
put 'KShmdW5jdGlvbihoZSx1ZSl7ZnVuY3Rpb24gY2UoRCl7dHJ5e2Ioc2UubmV4dChEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIEcoRCl7dHJ5e2Ioc2UudGhyb3coRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBiKEQpe3ZhciBIO0QuZG9uZT9oZShELnZhbHVlKTooSD1ELnZhbHVl'@;
put 'LEggaW5zdGFuY2VvZiBvZT9IOm5ldyBvZShmdW5jdGlvbihOKXtOKEgpfSkpLnRoZW4oY2UsRyl9Yigoc2U9c2UuYXBwbHkoZWUsdGV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U9e2xhYmVsOjAs'@;
put 'c2VudDpmdW5jdGlvbigpe2lmKDEmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJuIGhlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHVlPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHVlW1N5bWJvbC5pdGVyYXRvcl09ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlO2Z1bmN0aW9uIEcoYil7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihIKXtpZihvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lmKG9lPTEsc2UmJiho'@;
put 'ZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgoaGU9c2UucmV0dXJuKSYmaGUuY2FsbChzZSksMCk6c2UubmV4dCkmJiEoaGU9aGUuY2FsbChzZSxIWzFdKSkuZG9uZSlyZXR1cm4gaGU7c3dpdGNoKHNlPTAsaGUmJihIPVsyJkhbMF0saGUudmFsdWVdKSxIWzBdKXtjYXNlIDA6'@;
put 'Y2FzZSAxOmhlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5sYWJlbCsrLHt2YWx1ZTpIWzFdLGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0sSD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCho'@;
put 'ZT0oaGU9Y2UudHJ5cykubGVuZ3RoPjAmJmhlW2hlLmxlbmd0aC0xXSl8fDYhPT1IWzBdJiYyIT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0mJighaGV8fEhbMV0+aGVbMF0mJkhbMV08aGVbM10pKXtjZS5sYWJlbD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBdJiZjZS5sYWJlbDxo'@;
put 'ZVsxXSl7Y2UubGFiZWw9aGVbMV0saGU9SDticmVha31pZihoZSYmY2UubGFiZWw8aGVbMl0pe2NlLmxhYmVsPWhlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFrfWhlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZX1IPXRlLmNhbGwoZWUsY2UpfWNhdGNoKE4pe0g9WzYs'@;
put 'Tl0sc2U9MH1maW5hbGx5e29lPWhlPTB9aWYoNSZIWzBdKXRocm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFtiLERdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TYXM5Sm9iRXhlY3V0b3I9dm9p'@;
put 'ZCAwO3ZhciBqPVIoNjIzMCksVj1SKDEzOTUpLEI9Uig1OTI4KSxZPVIoNjExOCksWD1SKDc5NSksVT1mdW5jdGlvbihlZSl7ZnVuY3Rpb24gdGUob2Usc2UsaGUsdWUsY2Upe3ZhciBHPWVlLmNhbGwodGhpcyxvZSxzZSl8fHRoaXM7cmV0dXJuIEcuam9ic1BhdGg9aGUsRy5yZXF1ZXN0Q2xp'@;
put 'ZW50PXVlLEcuc2FzOVJlcXVlc3RDbGllbnQ9bmV3IFguU2FzOVJlcXVlc3RDbGllbnQob2UsY2UpLEd9cmV0dXJuIEsodGUsZWUpLHRlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKG9lLHNlLGhlKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsY2Us'@;
put 'RyxiLEQsSCxOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOmlmKHVlPSgwLEIuaXNSZWxhdGl2ZVBhdGgpKG9lKSYmaGUuYXBwTG9jP2hlLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK29lLnJlcGxhY2UoL15cLy8sIiIpOm9lLGNlPSIi'@;
put 'LmNvbmNhdChoZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCI/IikuY29uY2F0KCJfcHJvZ3JhbT0iK3VlKSxjZT0iIi5jb25jYXQoY2UpLmNvbmNhdChoZS51c2VybmFtZSYmaGUucGFzc3dvcmQ/IiZfdXNlcm5hbWU9IitoZS51c2VybmFtZSsiJl9wYXNzd29yZD0iK2hlLnBh'@;
put 'c3N3b3JkOiIiKSxjZT0iIi5jb25jYXQoY2UpLmNvbmNhdChoZS5kZWJ1Zz8iJl9kZWJ1Zz0xMzEiOiIiKSxHPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGhlKSksYj1uZXcgaixzZSl0cnl7Yj1xKGIsc2UpfWNhdGNoKEMpe3JldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBWLkVycm9y'@;
put 'UmVzcG9uc2UoQz8ubWVzc2FnZSxDKSldfWVsc2Ugc2U9IiI7Zm9yKEQgaW4gRylHLmhhc093blByb3BlcnR5KEQpJiZiLmFwcGVuZChELEdbRF0pO3JldHVybls0LHRoaXMuc2FzOVJlcXVlc3RDbGllbnQubG9naW4oaGUudXNlcm5hbWUsaGUucGFzc3dvcmQsdGhpcy5qb2JzUGF0aCldO2Nh'@;
put 'c2UgMTpyZXR1cm4gZy5zZW50KCksSD1zZSYmT2JqZWN0LmtleXMoc2UpLmxlbmd0aD8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitiLl9ib3VuZGFyeToidGV4dC9wbGFpbiIsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oQyxTKXtyZXR1cm4gTi5zYXM5UmVxdWVzdENsaWVudC5w'@;
put 'b3N0KGNlLGIsdm9pZCAwLEgse0FjY2VwdDoiKi8qIixDb25uZWN0aW9uOiJLZWVwLUFsaXZlIn0pLnRoZW4oZnVuY3Rpb24odil7Ti5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QodixvZSxoZS5kZWJ1ZyksQyh2KX0pLmNhdGNoKGZ1bmN0aW9uKHYpe3ZhciBwPXY7di5yZXN1bHQmJiIi'@;
put 'IT09di5yZXN1bHQ/cD12LnJlc3VsdDp2Lm1lc3NhZ2UmJihwPXYubWVzc2FnZSksTi5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QocCxvZSxoZS5kZWJ1ZyksUyhuZXcgVi5FcnJvclJlc3BvbnNlKHY/Lm1lc3NhZ2UsdikpfSl9KV19fSl9KX0sdGUucHJvdG90eXBlLmdldFJlcXVlc3RQ'@;
put 'YXJhbXM9ZnVuY3Rpb24ob2Upe3ZhciBzZT17fTtyZXR1cm4gb2UuZGVidWcmJihzZS5fZGVidWc9MTMxKSxzZX0sdGV9KFkuQmFzZUpvYkV4ZWN1dG9yKTtPLlNhczlKb2JFeGVjdXRvcj1VO3ZhciBxPWZ1bmN0aW9uKGVlLHRlKXtmb3IodmFyIG9lIGluIHRlKXt2YXIgc2U9b2UsaGU9KDAs'@;
put 'Qi5jb252ZXJ0VG9DU1YpKHRlLG9lKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09aGUpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2VlLmFwcGVuZChzZSxoZSx7ZmlsZW5h'@;
put 'bWU6IiIuY29uY2F0KHNlLCIuY3N2IiksY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1yZXR1cm4gZWV9fSwxMDY1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oZWUsdGUpe3JldHVybih6PU9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihvZSxzZSl7b2UuX19wcm90b19fPXNlfXx8ZnVuY3Rpb24ob2Usc2Upe2Zvcih2YXIgaGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGhlKSYmKG9l'@;
put 'W2hlXT1zZVtoZV0pfSkoZWUsdGUpfSxmdW5jdGlvbihlZSx0ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVu'@;
put 'Y3Rpb24gb2UoKXt0aGlzLmNvbnN0cnVjdG9yPWVlfXooZWUsdGUpLGVlLnByb3RvdHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KG9lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IG9lKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmpl'@;
put 'Y3QuYXNzaWdufHxmdW5jdGlvbihlZSl7Zm9yKHZhciB0ZSxvZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7b2U8c2U7b2UrKylmb3IodmFyIGhlIGluIHRlPWFyZ3VtZW50c1tvZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGhlKSYmKGVlW2hlXT10ZVtoZV0pO3Jl'@;
put 'dHVybiBlZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGVlLHRlLG9lLHNlKXtyZXR1cm4gbmV3KG9lfHwob2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGhlLHVlKXtmdW5jdGlvbiBjZShEKXt0cnl7YihzZS5uZXh0KEQpKX1jYXRjaChI'@;
put 'KXt1ZShIKX19ZnVuY3Rpb24gRyhEKXt0cnl7YihzZS50aHJvdyhEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIGIoRCl7dmFyIEg7RC5kb25lP2hlKEQudmFsdWUpOihIPUQudmFsdWUsSCBpbnN0YW5jZW9mIG9lP0g6bmV3IG9lKGZ1bmN0aW9uKE4pe04oSCl9KSkudGhlbihjZSxHKX1i'@;
put 'KChzZT1zZS5hcHBseShlZSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm4gaGVbMV19LHRyeXM6'@;
put 'W10sb3BzOltdfTtyZXR1cm4gdWU9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gRyhiKXtyZXR1cm4gZnVuY3Rpb24oRCl7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKG9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2NlOyl0cnl7aWYob2U9MSxzZSYmKGhlPTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChoZT1zZS5yZXR1cm4pJiZoZS5jYWxs'@;
put 'KHNlKSwwKTpzZS5uZXh0KSYmIShoZT1oZS5jYWxsKHNlLEhbMV0pKS5kb25lKXJldHVybiBoZTtzd2l0Y2goc2U9MCxoZSYmKEg9WzImSFswXSxoZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpjYXNlIDE6aGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9u'@;
put 'ZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVswXTtjb250aW51ZTtjYXNlIDc6SD1jZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGhlPShoZT1jZS50cnlzKS5sZW5ndGg+MCYmaGVbaGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1I'@;
put 'WzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFoZXx8SFsxXT5oZVswXSYmSFsxXTxoZVszXSkpe2NlLmxhYmVsPUhbMV07YnJlYWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGhlWzFdKXtjZS5sYWJlbD1oZVsxXSxoZT1IO2JyZWFrfWlmKGhlJiZjZS5sYWJlbDxoZVsyXSl7Y2Uu'@;
put 'bGFiZWw9aGVbMl0sY2Uub3BzLnB1c2goSCk7YnJlYWt9aGVbMl0mJmNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlfUg9dGUuY2FsbChlZSxjZSl9Y2F0Y2goTil7SD1bNixOXSxzZT0wfWZpbmFsbHl7b2U9aGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFsdWU6'@;
put 'SFswXT9IWzFdOnZvaWQgMCxkb25lOiEwfX0oW2IsRF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNhc2pzSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBqPVIoNjIzMCksVj1SKDM5MDApLEI9UigxMzk1KSxZPVIoNDAzNyksWD1SKDU5Mjgp'@;
put 'LFU9Uig1OTI4KSxxPWZ1bmN0aW9uKGVlKXtmdW5jdGlvbiB0ZShvZSxzZSxoZSl7dmFyIHVlPWVlLmNhbGwodGhpcyxvZSxWLlNlcnZlclR5cGUuU2FzanMpfHx0aGlzO3JldHVybiB1ZS5qb2JzUGF0aD1zZSx1ZS5yZXF1ZXN0Q2xpZW50PWhlLHVlfXJldHVybiBLKHRlLGVlKSx0ZS5wcm90'@;
put 'b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRCxILE4sZyxDLFMscD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odyl7aWYoYj11ZSxEPSgwLFUu'@;
put 'aXNSZWxhdGl2ZVBhdGgpKG9lKSYmaGUuYXBwTG9jP2hlLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK29lLnJlcGxhY2UoL15cLy8sIiIpOm9lLEg9IiIuY29uY2F0KGhlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3JhbT0iK0QpLE49SSh7'@;
put 'fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoaGUpKSxnPSgwLFguZ2V0Rm9ybURhdGEpKCksc2UpdHJ5e2c9KDAsWS5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShnLHNlKX1jYXRjaChKKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgQi5FcnJvclJlc3BvbnNlKEo/Lm1lc3NhZ2UsSikpXX1m'@;
put 'b3IoQyBpbiBOKU4uaGFzT3duUHJvcGVydHkoQykmJmcuYXBwZW5kKEMsTltDXSk7cmV0dXJuIFM9ZyBpbnN0YW5jZW9mIGomJnR5cGVvZiBGb3JtRGF0YT4idSI/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIuY29uY2F0KGcuZ2V0Qm91bmRhcnkoKSk6dm9pZCAwLFsyLG5ldyBQ'@;
put 'cm9taXNlKGZ1bmN0aW9uKEosbmUpe3AucmVxdWVzdENsaWVudC5wb3N0KEgsZyxjZT8uYWNjZXNzX3Rva2VuLFMpLnRoZW4oZnVuY3Rpb24oZGUpe3JldHVybiBrKHAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBmZSx4ZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKExlKXtpZihPYmpl'@;
put 'Y3QuZW50cmllcyhkZS5yZXN1bHQpLmxlbmd0aDwxKXRocm93IG5ldyBCLkpvYkV4ZWN1dGlvbkVycm9yKDAsIk5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICIuY29uY2F0KEQsIi4gIFBsZWFzZSBjaGVjayB0aGUgU0FTIGxvZyBmb3IgbW9yZSBpbmZvLiIpLGRlLmxvZyk7cmV0dXJu'@;
put 'KGZlPWRlLnJlc3VsdCkmJiJzdHJpbmciPT10eXBlb2YgZmUmJmZlLnRyaW0oKSYmKGRlLnJlc3VsdD0oMCxVLmdldFZhbGlkSnNvbikoZmUpKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxvZSxoZS5kZWJ1ZykseGU9KDAsVS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmli'@;
put 'dXRlcykoZGUsRyksSih4ZSksWzJdfSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGRlKXtyZXR1cm4gayhwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHhlKXtzd2l0Y2goeGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZGUgaW5zdGFuY2Vv'@;
put 'ZiBCLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUsb2UsaGUuZGVidWcpLG5lKG5ldyBCLkVycm9yUmVzcG9uc2UoZGU/Lm1lc3NhZ2UsZGUpKSksZGUgaW5zdGFuY2VvZiBCLkxvZ2luUmVxdWlyZWRFcnJvcj8odWV8fG5lKG5ldyBCLkVy'@;
put 'cm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixkZSkpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gZmUuZXhlY3V0ZShvZSxzZSxoZSx1'@;
put 'ZSxjZSxHKS50aGVuKGZ1bmN0aW9uKExlKXtKKExlKX0sZnVuY3Rpb24oTGUpe25lKExlKX0pfSksYj9bNCxiKCldOlszLDJdKTpbMywzXTtjYXNlIDE6eGUuc2VudCgpLHhlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblszLDRdO2Nhc2UgMzpuZShuZXcgQi5FcnJvclJlc3BvbnNlKGRlPy5tZXNz'@;
put 'YWdlLGRlKSkseGUubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LHRlfShSKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7Ty5TYXNqc0pvYkV4ZWN1dG9yPXF9LDYwODQ6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRz'@;
put 'fHwoej1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG9lLHNlKXtvZS5fX3Byb3RvX189c2V9fHxmdW5jdGlvbihvZSxzZSl7Zm9yKHZhciBoZSBpbiBzZSlPYmplY3QucHJvdG90'@;
put 'eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsaGUpJiYob2VbaGVdPXNlW2hlXSl9KShlZSx0ZSl9LGZ1bmN0aW9uKGVlLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsi'@;
put 'IGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvZSgpe3RoaXMuY29uc3RydWN0b3I9ZWV9eihlZSx0ZSksZWUucHJvdG90eXBlPW51bGw9PT10ZT9PYmplY3QuY3JlYXRlKHRlKToob2UucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgb2UpfSksST10aGlzJiZ0aGlz'@;
put 'Ll9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlLG9lPTEsc2U9YXJndW1lbnRzLmxlbmd0aDtvZTxzZTtvZSsrKWZvcih2YXIgaGUgaW4gdGU9YXJndW1lbnRzW29lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl'@;
put 'cnR5LmNhbGwodGUsaGUpJiYoZWVbaGVdPXRlW2hlXSk7cmV0dXJuIGVlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oZWUsdGUsb2Usc2Upe3JldHVybiBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24oaGUsdWUpe2Z1bmN0'@;
put 'aW9uIGNlKEQpe3RyeXtiKHNlLm5leHQoRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBHKEQpe3RyeXtiKHNlLnRocm93KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24gYihEKXt2YXIgSDtELmRvbmU/aGUoRC52YWx1ZSk6KEg9RC52YWx1ZSxIIGluc3RhbmNlb2Ygb2U/SDpuZXcg'@;
put 'b2UoZnVuY3Rpb24oTil7TihIKX0pKS50aGVuKGNlLEcpfWIoKHNlPXNlLmFwcGx5KGVlLHRlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlLGhlLHVlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmhl'@;
put 'WzBdKXRocm93IGhlWzFdO3JldHVybiBoZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB1ZT17bmV4dDpHKDApLHRocm93OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih1ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1'@;
put 'ZTtmdW5jdGlvbiBHKGIpe3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7aWYob2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7Y2U7KXRyeXtpZihvZT0xLHNlJiYoaGU9MiZIWzBdP3NlLnJldHVybjpIWzBd'@;
put 'P3NlLnRocm93fHwoKGhlPXNlLnJldHVybikmJmhlLmNhbGwoc2UpLDApOnNlLm5leHQpJiYhKGhlPWhlLmNhbGwoc2UsSFsxXSkpLmRvbmUpcmV0dXJuIGhlO3N3aXRjaChzZT0wLGhlJiYoSD1bMiZIWzBdLGhlLnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpoZT1IO2JyZWFrO2Nhc2Ug'@;
put 'NDpyZXR1cm4gY2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBdO2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaGU9KGhlPWNlLnRyeXMpLmxlbmd0aD4w'@;
put 'JiZoZVtoZS5sZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2NvbnRpbnVlfWlmKDM9PT1IWzBdJiYoIWhlfHxIWzFdPmhlWzBdJiZIWzFdPGhlWzNdKSl7Y2UubGFiZWw9SFsxXTticmVha31pZig2PT09SFswXSYmY2UubGFiZWw8aGVbMV0pe2NlLmxhYmVsPWhlWzFdLGhl'@;
put 'PUg7YnJlYWt9aWYoaGUmJmNlLmxhYmVsPGhlWzJdKXtjZS5sYWJlbD1oZVsyXSxjZS5vcHMucHVzaChIKTticmVha31oZVsyXSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWV9SD10ZS5jYWxsKGVlLGNlKX1jYXRjaChOKXtIPVs2LE5dLHNlPTB9ZmluYWxseXtvZT1oZT0w'@;
put 'fWlmKDUmSFswXSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9pZCAwLGRvbmU6ITB9fShbYixEXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uV2ViSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBqPVIoNjIzMCksVj1SKDM5'@;
put 'MDApLEI9UigxMzk1KSxZPVIoNDAzNyksWD1SKDIxNzApLFU9Uig1OTI4KSxxPWZ1bmN0aW9uKGVlKXtmdW5jdGlvbiB0ZShvZSxzZSxoZSx1ZSxjZSl7dmFyIEc9ZWUuY2FsbCh0aGlzLG9lLHNlKXx8dGhpcztyZXR1cm4gRy5qb2JzUGF0aD1oZSxHLnJlcXVlc3RDbGllbnQ9dWUsRy5zYXNW'@;
put 'aXlhQXBpQ2xpZW50PWNlLEd9cmV0dXJuIEsodGUsZWUpLHRlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3JldHVybiB2b2lkIDA9PT1HJiYoRz1bXSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixELEgsTixnLEMsUyx2LHAsSixu'@;
put 'ZSxkZSx4ZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTGUpe3N3aXRjaChMZS5sYWJlbCl7Y2FzZSAwOmlmKGI9dWUsRD0oMCxVLmlzUmVsYXRpdmVQYXRoKShvZSkmJmhlLmFwcExvYz9oZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStvZS5yZXBsYWNlKC9eXC8vLCIiKTpvZSxI'@;
put 'PSIiLmNvbmNhdChoZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitEKSxoZS5zZXJ2ZXJUeXBlIT09Vi5TZXJ2ZXJUeXBlLlNhc1ZpeWEpcmV0dXJuWzMsNV07Tj12b2lkIDAsTGUubGFiZWw9MTtjYXNlIDE6cmV0dXJuIExlLnRyeXMu'@;
put 'cHVzaChbMSwzLCw0XSksWzQsdGhpcy5nZXRKb2JVcmkob2UpXTtjYXNlIDI6cmV0dXJuIE49TGUuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gZz1MZS5zZW50KCksWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRmUsT2Upe3JldHVybiBrKHhlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgamU9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFdlKXtzd2l0Y2goV2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZyBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGplLmV4ZWN1dGUob2Usc2Us'@;
put 'aGUsdWUsY2UsRykudGhlbihmdW5jdGlvbihLZSl7RmUoS2UpfSxmdW5jdGlvbihLZSl7T2UoS2UpfSl9KSxiP1s0LGIoKV06WzMsMl0pOlszLDNdO2Nhc2UgMTpXZS5zZW50KCksV2UubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNF07Y2FzZSAzOk9lKG5ldyBCLkVycm9yUmVzcG9uc2UoZz8u'@;
put 'bWVzc2FnZSxnKSksV2UubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KV07Y2FzZSA0OkgrPU4ubGVuZ3RoPjA/IiZfam9iPSIrTjoiIixOLmxlbmd0aD4wJiYoSD0oSCs9IiZfam9iPSIrTikucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxIKz1oZS5jb250ZXh0TmFt'@;
put 'ZSYmIS9ccy8udGVzdChoZS5jb250ZXh0TmFtZSk/IiZfY29udGV4dG5hbWU9Ii5jb25jYXQoaGUuY29udGV4dE5hbWUpOiIiLExlLmxhYmVsPTU7Y2FzZSA1OmlmKEM9SSh7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoaGUpKSxTPSgwLFUuZ2V0Rm9ybURhdGEpKCksc2UpaWYodj1KU09OLnN0'@;
put 'cmluZ2lmeShzZSksaGUuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXM5fHx2Lmxlbmd0aD41ZTV8fHYuaW5jbHVkZXMoIjsiKSl0cnl7Uz0oMCxZLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKFMsc2UpfWNhdGNoKEZlKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgQi5FcnJvclJl'@;
put 'c3BvbnNlKEZlPy5tZXNzYWdlLEZlKSldfWVsc2UgdHJ5e3A9KDAsWC5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybSkoUyxzZSksSj1wLnJlcXVlc3RQYXJhbXMsUz1wLmZvcm1EYXRhLEM9SShJKHt9LEMpLEopfWNhdGNoKEZlKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgQi5FcnJvclJl'@;
put 'c3BvbnNlKEZlPy5tZXNzYWdlLEZlKSldfWZvcihuZSBpbiBDKUMuaGFzT3duUHJvcGVydHkobmUpJiZTLmFwcGVuZChuZSxDW25lXSk7cmV0dXJuIGRlPVMgaW5zdGFuY2VvZiBqJiZ0eXBlb2YgRm9ybURhdGE+InUiPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChT'@;
put 'LmdldEJvdW5kYXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihGZSxPZSl7eGUucmVxdWVzdENsaWVudC5wb3N0KEgsUyxjZT8uYWNjZXNzX3Rva2VuLGRlKS50aGVuKGZ1bmN0aW9uKGplKXtyZXR1cm4gayh4ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFdlLEtl'@;
put 'O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oWWUpe3N3aXRjaChZZS5sYWJlbCl7Y2FzZSAwOmlmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGplLG9lLGhlLmRlYnVnKSxXZT1qZS5yZXN1bHQsIWhlLmRlYnVnKXJldHVyblszLDRdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nh'@;
put 'c2UgVi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBWLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXX1yZXR1cm5bMyw0XTtjYXNlIDE6cmV0dXJuWzQsKDAsVS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShqZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMu'@;
put 'c2VydmVyVXJsKV07Y2FzZSAyOnJldHVybiBXZT1ZZS5zZW50KCksWzMsNF07Y2FzZSAzOnJldHVybiBXZT0ic3RyaW5nIj09dHlwZW9mIGplLnJlc3VsdD8oMCxVLnBhcnNlV2Vib3V0UmVzcG9uc2UpKGplLnJlc3VsdCxIKTpqZS5yZXN1bHQsWzMsNF07Y2FzZSA0OnJldHVybiBLZT0oMCxV'@;
put 'LmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKSh7cmVzdWx0OldlLGxvZzpqZS5sb2d9LEcpLEZlKEtlKSxbMl19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKGplKXtyZXR1cm4gayh4ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFdlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlv'@;
put 'bihLZSl7c3dpdGNoKEtlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGplIGluc3RhbmNlb2YgQi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGplLG9lLGhlLmRlYnVnKSxPZShuZXcgQi5FcnJvclJlc3BvbnNlKGplPy5tZXNzYWdlLGplKSkpLGpl'@;
put 'IGluc3RhbmNlb2YgQi5Mb2dpblJlcXVpcmVkRXJyb3I/KHVlfHxPZShuZXcgQi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsamUpKSx0aGlzLmFwcGVuZFdhaXRp'@;
put 'bmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIFdlLmV4ZWN1dGUob2Usc2UsaGUsdWUsY2UsRykudGhlbihmdW5jdGlvbihZZSl7RmUoWWUpfSxmdW5jdGlvbihZZSl7T2UoWWUpfSl9KSxiP1s0LGIoKV06WzMsMl0pOlszLDNdO2Nhc2UgMTpLZS5zZW50KCksS2UubGFiZWw9MjtjYXNlIDI6'@;
put 'cmV0dXJuWzMsNF07Y2FzZSAzOk9lKG5ldyBCLkVycm9yUmVzcG9uc2UoamU/Lm1lc3NhZ2UsamUpKSxLZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0pfSldfX0pfSl9LHRlLnByb3RvdHlwZS5nZXRKb2JVcmk9ZnVuY3Rpb24ob2Upe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQg'@;
put 'MCxmdW5jdGlvbigpe3ZhciBzZSxoZSx1ZSxjZSxHLGI7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOmlmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJuWzIsIiJdO2lmKHNlPSIiLCgwLFUuaXNSZWxhdGl2ZVBhdGgpKG9lKT8oY2U9b2Uuc3Bs'@;
put 'aXQoIi8iKSxoZT1jZS5sZW5ndGg+MT9jZVswXToiIix1ZT1jZS5sZW5ndGg+MT9jZVsxXToiIik6KGNlPW9lLnNwbGl0KCIvIiksdWU9Y2UucG9wKCl8fCIiLGhlPWNlLmpvaW4oIi8iKSksIXVlKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVk'@;
put 'LiIpO3JldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoaGUpXTtjYXNlIDE6cmV0dXJuKEc9RC5zZW50KCkpJiYoYj1HLmZpbmQoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZT09PXVlJiYiam9iRGVmaW5pdGlvbiI9PT1ILmNvbnRlbnRUeXBlfSkpJiYoc2U9'@;
put 'Yi51cmkpLFsyLHNlXX19KX0pfSx0ZX0oUig2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO08uV2ViSm9iRXhlY3V0b3I9cX0sODIxNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGss'@;
put 'RSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01vZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChWPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBr'@;
put 'W0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGosVil9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnBy'@;
put 'b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDE1NzApLE8pLEsoUigzNDkxKSxPKSxLKFIoNDQ0NiksTyksSyhSKDYxMTgpLE8pLEsoUigyNjkzKSxPKSxLKFIoNjA4'@;
put 'NCksTyksSyhSKDEwNjUpLE8pfSw0NTg4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHVlKXtmb3IodmFyIGNlLEc9MSxi'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg7RzxiO0crKylmb3IodmFyIEQgaW4gY2U9YXJndW1lbnRzW0ddKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjZSxEKSYmKHVlW0RdPWNlW0RdKTtyZXR1cm4gdWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19h'@;
put 'd2FpdGVyfHxmdW5jdGlvbih1ZSxjZSxHLGIpe3JldHVybiBuZXcoR3x8KEc9UHJvbWlzZSkpKGZ1bmN0aW9uKEQsSCl7ZnVuY3Rpb24gTihTKXt0cnl7QyhiLm5leHQoUykpfWNhdGNoKHYpe0godil9fWZ1bmN0aW9uIGcoUyl7dHJ5e0MoYi50aHJvdyhTKSl9Y2F0Y2godil7SCh2KX19ZnVu'@;
put 'Y3Rpb24gQyhTKXt2YXIgdjtTLmRvbmU/RChTLnZhbHVlKToodj1TLnZhbHVlLHYgaW5zdGFuY2VvZiBHP3Y6bmV3IEcoZnVuY3Rpb24ocCl7cCh2KX0pKS50aGVuKE4sZyl9QygoYj1iLmFwcGx5KHVlLGNlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5j'@;
put 'dGlvbih1ZSxjZSl7dmFyIEcsYixELEgsTj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZEWzBdKXRocm93IERbMV07cmV0dXJuIERbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gSD17bmV4dDpnKDApLHRocm93OmcoMSkscmV0dXJuOmcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJihIW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEg7ZnVuY3Rpb24gZyhDKXtyZXR1cm4gZnVuY3Rpb24oUyl7cmV0dXJuIGZ1bmN0aW9uKHYpe2lmKEcpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIp'@;
put 'O2Zvcig7TjspdHJ5e2lmKEc9MSxiJiYoRD0yJnZbMF0/Yi5yZXR1cm46dlswXT9iLnRocm93fHwoKEQ9Yi5yZXR1cm4pJiZELmNhbGwoYiksMCk6Yi5uZXh0KSYmIShEPUQuY2FsbChiLHZbMV0pKS5kb25lKXJldHVybiBEO3N3aXRjaChiPTAsRCYmKHY9WzImdlswXSxELnZhbHVlXSksdlsw'@;
put 'XSl7Y2FzZSAwOmNhc2UgMTpEPXY7YnJlYWs7Y2FzZSA0OnJldHVybiBOLmxhYmVsKysse3ZhbHVlOnZbMV0sZG9uZTohMX07Y2FzZSA1Ok4ubGFiZWwrKyxiPXZbMV0sdj1bMF07Y29udGludWU7Y2FzZSA3OnY9Ti5vcHMucG9wKCksTi50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYo'@;
put 'ISgoRD0oRD1OLnRyeXMpLmxlbmd0aD4wJiZEW0QubGVuZ3RoLTFdKXx8NiE9PXZbMF0mJjIhPT12WzBdKSl7Tj0wO2NvbnRpbnVlfWlmKDM9PT12WzBdJiYoIUR8fHZbMV0+RFswXSYmdlsxXTxEWzNdKSl7Ti5sYWJlbD12WzFdO2JyZWFrfWlmKDY9PT12WzBdJiZOLmxhYmVsPERbMV0pe04u'@;
put 'bGFiZWw9RFsxXSxEPXY7YnJlYWt9aWYoRCYmTi5sYWJlbDxEWzJdKXtOLmxhYmVsPURbMl0sTi5vcHMucHVzaCh2KTticmVha31EWzJdJiZOLm9wcy5wb3AoKSxOLnRyeXMucG9wKCk7Y29udGludWV9dj1jZS5jYWxsKHVlLE4pfWNhdGNoKHApe3Y9WzYscF0sYj0wfWZpbmFsbHl7Rz1EPTB9'@;
put 'aWYoNSZ2WzBdKXRocm93IHZbMV07cmV0dXJue3ZhbHVlOnZbMF0/dlsxXTp2b2lkIDAsZG9uZTohMH19KFtDLFNdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy50aHJvd0lmRXJyb3I9Ty5SZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgaj1S'@;
put 'KDk2NjkpLFY9Uig4MzczKSxCPVIoMTUyNyksWT1SKDEzOTUpLFg9UigyODEzKSxVPVIoOTc3OCkscT1SKDk1MjYpLGVlPVIoNTkyOCksdGU9UigxMDA1KSxvZT1SKDk1MzkpLHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdWUoY2UsRyxiLEQpe3ZhciBIPXRoaXM7dGhpcy5iYXNlVXJsPWNlLHRo'@;
put 'aXMucmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSC5yZXF1ZXN0c30sdGhpcy5jbGVhclJlcXVlc3RzPWZ1'@;
put 'bmN0aW9uKCl7SC5yZXF1ZXN0cz1bXX0sdGhpcy5hdXRob3JpemU9ZnVuY3Rpb24oTil7cmV0dXJuIGsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsQyxTLHYscCx3LEosbmUsZGUsZmUseGUsTGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihGZSl7c3dpdGNoKEZlLmxhYmVsKXtj'@;
put 'YXNlIDA6Zm9yKEM9e30sUz1OLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLCh2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9UyxwPXYucXVlcnlTZWxlY3RvcigiI2FwcGxpY2F0aW9uX2F1dGhvcml6YXRpb24iKSxnPXA/dGhpcy5iYXNl'@;
put 'VXJsK3AuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTpudWxsLHc9cD8ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKSxKPTAsbmU9dztKPG5lLmxlbmd0aDtKKyspInVzZXJfb2F1dGhfYXBwcm92YWwiPT09KGRlPW5lW0pdKS5uYW1lJiYoZGUudmFsdWU9InRydWUiKSxDW2RlLm5hbWVdPWRlLnZh'@;
put 'bHVlO2ZvcihMZSBpbihmZT1PYmplY3Qua2V5cyhDKS5maW5kKGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2U/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImNzcmYiKX0pKSYmKHRoaXMuY3NyZlRva2VuLnZhbHVlPUNbZmVdLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWU9dGhpcy5jc3JmVG9rZW4u'@;
put 'aGVhZGVyTmFtZXx8IngtY3NyZi10b2tlbiIpLHhlPW5ldyBGb3JtRGF0YSxDKUMuaGFzT3duUHJvcGVydHkoTGUpJiZ4ZS5hcHBlbmQoTGUsQ1tMZV0pO2lmKCFnKXRocm93IG5ldyBFcnJvcigiQXV0aCBGb3JtIFVSTCBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm5bNCx0aGlzLmh0'@;
put 'dHBDbGllbnQucG9zdChnLHhlLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6e0FjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9fSkudGhlbihmdW5jdGlvbihPZSl7cmV0dXJuIE9lLmRhdGF9KS5jYXRjaChmdW5jdGlvbihPZSl7KHoubG9nZ2VyfHxLKS5lcnJv'@;
put 'cihPZSl9KV07Y2FzZSAxOnJldHVyblsyLEZlLnNlbnQoKV19fSl9KX0sdGhpcy5wcmV0dGlmeVN0cmluZz1mdW5jdGlvbihOKXtyZXR1cm4oMCxvZS5pbnNwZWN0KShOLHtjb2xvcnM6ImJsZWFjaGVkIiE9PUgudmVyYm9zZU1vZGV9KX0sdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1mdW5j'@;
put 'dGlvbihOKXtpZighTilyZXR1cm4iIjt2YXIgZztpZigic3RyaW5nIj09dHlwZW9mIE4pdHJ5e2c9SlNPTi5wYXJzZShOKX1jYXRjaHtnPU59ZWxzZSBnPU47dmFyIEM9SC5wcmV0dGlmeVN0cmluZyhnKS5zcGxpdCgiXG4iKTtyZXR1cm4gQy5sZW5ndGg+NTEmJihDLnNwbGljZSg1MCksQy5w'@;
put 'dXNoKCIuLi4iKSksQy5qb2luKCJcbiIpfSx0aGlzLmRlZmF1bHRJbnRlcmNlcHRpb25DYWxsQmFjaz1mdW5jdGlvbihOKXt2YXIgZyxDPSJOb3QgcHJvdmlkZWQiLFM9e19oZWFkZXI6IiIuY29uY2F0KEMsIlxuIikscmVzOntyYXdIZWFkZXJzOltDXX19LHY9TjtpZihqLmRlZmF1bHQuaXNB'@;
put 'eGlvc0Vycm9yKE4pKXt2YXIgcD1OLnJlc3BvbnNlLHc9Ti5yZXF1ZXN0LEo9Ti5jb25maWc7aWYocCl2PXA7ZWxzZXtpZih3KXt2YXIgbmU9dy5faGVhZGVyLGRlPXcuX2N1cnJlbnRSZXF1ZXN0O25lP1MuX2hlYWRlcj1uZTpkZSYmZGUuX2hlYWRlciYmKFMuX2hlYWRlcj1kZS5faGVhZGVy'@;
put 'KTt2YXIgZmU9dy5yZXM7ZmUmJmZlLnJhd0hlYWRlcnMmJihTLnJlcy5yYXdIZWFkZXJzPWZlLnJhd0hlYWRlcnMpfXY9e3N0YXR1czpDLHJlcXVlc3Q6Uyxjb25maWc6Snx8e2RhdGE6Q30sZGF0YTpDfX19dmFyIHhlPXYuc3RhdHVzLE9lPXYuZGF0YSxqZT12LmNvbmZpZy5kYXRhLFdlPXYu'@;
put 'cmVxdWVzdHx8UyxLZT1XZS5faGVhZGVyLFllPVdlLnJlcy5yYXdIZWFkZXJzLnJlZHVjZShmdW5jdGlvbihsdCxQZSxiZSl7cmV0dXJuIGx0KyhiZSUyPT0wPyIiLmNvbmNhdCgwPT09YmU/IiI6IlxuIikuY29uY2F0KFBlKToiOiAiLmNvbmNhdChQZSkpfSwiIiksUWU9SC5wYXJzZUludGVy'@;
put 'Y2VwdGVkQm9keShPZSk7cmV0dXJuIG51bGw9PT0oZz16LmxvZ2dlcil8fHZvaWQgMD09PWd8fGcuaW5mbygiSFRUUCBSZXF1ZXN0IChmaXJzdCA1MCBsaW5lcyk6XG4iLmNvbmNhdChLZSkuY29uY2F0KEgucGFyc2VJbnRlcmNlcHRlZEJvZHkoamUpLCJcblxuSFRUUCBSZXNwb25zZSBDb2Rl'@;
put 'OiAiKS5jb25jYXQoSC5wcmV0dGlmeVN0cmluZyh4ZSksIlxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4iKS5jb25jYXQoWWUpLmNvbmNhdChRZT8iXG5cbiIuY29uY2F0KFFlKToiIiwiXG4iKSksTn0sdGhpcy5zZXRWZXJib3NlTW9kZT1mdW5jdGlvbihOKXtILnZlcmJv'@;
put 'c2VNb2RlPU4sSC52ZXJib3NlTW9kZT9ILmVuYWJsZVZlcmJvc2VNb2RlKCk6SC5kaXNhYmxlVmVyYm9zZU1vZGUoKX0sdGhpcy5lbmFibGVWZXJib3NlTW9kZT1mdW5jdGlvbihOLGcpe3ZvaWQgMD09PU4mJihOPUguZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrKSx2b2lkIDA9PT1nJiYo'@;
put 'Zz1ILmRlZmF1bHRJbnRlcmNlcHRpb25DYWxsQmFjayksSC5odHRwSW50ZXJjZXB0b3I9SC5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoTixnKX0sdGhpcy5kaXNhYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oKXtILmh0dHBJbnRlcmNlcHRvciYmSC5odHRwQ2xpZW50Lmlu'@;
put 'dGVyY2VwdG9ycy5yZXNwb25zZS5lamVjdChILmh0dHBJbnRlcmNlcHRvcil9LHRoaXMuZ2V0SGVhZGVycz1mdW5jdGlvbihOLGcpe3ZhciBDPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09ZyYmKENbIkNvbnRlbnQtVHlwZSJdPWcpLEMuQWNjZXB0PSJh'@;
put 'cHBsaWNhdGlvbi9qc29uIj09PWc/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLE4mJihDLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChOKSksSC5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmSC5jc3JmVG9rZW4udmFsdWUmJihDW0guY3NyZlRva2VuLmhlYWRlck5hbWVdPUguY3NyZlRv'@;
put 'a2VuLnZhbHVlKSxDfSx0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbj1mdW5jdGlvbihOKXt2YXIgZz1ILnBhcnNlQ3NyZlRva2VuKE4pO2cmJihILmZpbGVVcGxvYWRDc3JmVG9rZW49Zyl9LHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW49ZnVuY3Rpb24oTil7dmFyIGc9SC5w'@;
put 'YXJzZUNzcmZUb2tlbihOKTtnJiYoSC5jc3JmVG9rZW49Zyl9LHRoaXMucGFyc2VDc3JmVG9rZW49ZnVuY3Rpb24oTil7dmFyIGcsQz1udWxsPT09KGc9Ti5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1nP3ZvaWQgMDpnLnRvTG93ZXJDYXNlKCk7aWYoQylyZXR1cm57aGVh'@;
put 'ZGVyTmFtZTpDLHZhbHVlOk4uaGVhZGVyc1tDXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPWZ1bmN0aW9uKE4sZyxDKXtyZXR1cm4gdm9pZCAwPT09QyYmKEM9ITEpLGsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFMsdjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHApe3N3aXRjaChw'@;
put 'LmxhYmVsKXtjYXNlIDA6cmV0dXJuIFM9Ti5yZXNwb25zZSxOIGluc3RhbmNlb2YgWS5BdXRob3JpemVFcnJvcj9bNCx0aGlzLmh0dHBDbGllbnQuZ2V0KE4uY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0'@;
put 'OiIqLyoifX0pLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1VcmwuICIpfSldOlszLDVdO2Nhc2UgMTpyZXR1cm4gdj1wLnNlbnQoKSwoMCxCLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKSh2Py5k'@;
put 'YXRhKT9bNCx0aGlzLmF1dGhvcml6ZSh2LmRhdGEpLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSBhdXRob3JpemluZyByZXF1ZXN0LiAiKX0pXTpbMywzXTtjYXNlIDI6cC5zZW50KCkscC5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCxn'@;
put 'KCkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV07Y2FzZSA0OnJldHVyblsyLHAuc2VudCgpXTtjYXNlIDU6aWYoTiBpbnN0YW5jZW9mIFkuTG9naW5SZXF1aXJl'@;
put 'ZEVycm9yKXRocm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCksTjtyZXR1cm4gTiBpbnN0YW5jZW9mIHRlLkludmFsaWRTQVNqc0NzcmZFcnJvcj9bNCx0aGlzLmh0dHBDbGllbnQuZ2V0KCIvIix7d2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbih3KXt2YXIgSixuZT1udWxsPT09'@;
put 'KEo9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHcuZGF0YSkpfHx2b2lkIDA9PT1KP3ZvaWQgMDpKWzFdO25lJiYoZG9jdW1lbnQuY29va2llPW5lKX0p'@;
put 'LmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSByZS1mZXRjaGluZyBDU1JGIHRva2VuLiIpfSldOlszLDhdO2Nhc2UgNjpyZXR1cm4gcC5zZW50KCksWzQsZygpLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdl'@;
put 'KSh3LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSldO2Nhc2UgNzpyZXR1cm5bMixwLnNlbnQoKV07Y2FzZSA4OnJldHVybiA0MDMhPT1TPy5zdGF0dXMmJjQ0OSE9PVM/LnN0YXR1cz9bMywxMV06KHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW4o'@;
put 'UyksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWU/WzQsZygpLmNhdGNoKGZ1bmN0aW9uKHcpe3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKSh3LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSldOlszLDEwXSk7'@;
put 'Y2FzZSA5OnJldHVyblsyLHAuc2VudCgpXTtjYXNlIDEwOnRocm93IE47Y2FzZSAxMTppZig0MDQ9PT1TPy5zdGF0dXMpdGhyb3cgbmV3IFkuTm90Rm91bmRFcnJvcihTLmNvbmZpZy51cmwpO2lmKDUwMj09PVM/LnN0YXR1cyl7aWYoQyl0aHJvdyBuZXcgWS5JbnRlcm5hbFNlcnZlckVycm9y'@;
put 'O3JldHVyblsyXX1wLmxhYmVsPTEyO2Nhc2UgMTI6dGhyb3cgTi5pc0F4aW9zRXJyb3ImJiJVTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFIj09PU4uY29kZT9uZXcgWS5DZXJ0aWZpY2F0ZUVycm9yKE4ubWVzc2FnZSk6Ti5tZXNzYWdlP046KDAsVS5wcmVmaXhNZXNzYWdlKShOLCJF'@;
put 'cnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9fSl9KX0sdGhpcy5jcmVhdGVIdHRwQ2xpZW50KGNlLEcpLGImJih0aGlzLnJlcXVlc3RzTGltaXQ9YiksRCYmKHRoaXMuc2V0VmVyYm9zZU1vZGUoRCksdGhpcy5lbmFibGVWZXJib3NlTW9kZSgpKX1yZXR1cm4gdWUucHJvdG90eXBlLnNl'@;
put 'dENvbmZpZz1mdW5jdGlvbihjZSxHKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoY2UsRyl9LHVlLnByb3RvdHlwZS5zYXZlTG9jYWxTdG9yYWdlVG9rZW49ZnVuY3Rpb24oY2UsRyl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixjZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJl'@;
put 'ZnJlc2hUb2tlbiIsRyl9LHVlLnByb3RvdHlwZS5nZXRDc3JmVG9rZW49ZnVuY3Rpb24oY2Upe3JldHVybiB2b2lkIDA9PT1jZSYmKGNlPSJnZW5lcmFsIiksImZpbGUiPT09Y2U/dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuOnRoaXMuY3NyZlRva2VufSx1ZS5wcm90b3R5cGUuY2xlYXJDc3Jm'@;
put 'VG9rZW5zPWZ1bmN0aW9uKCl7dGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn19LHVlLnByb3RvdHlwZS5jbGVhckxvY2FsU3RvcmFnZVRva2Vucz1mdW5jdGlvbigpe2xvY2FsU3Rv'@;
put 'cmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIiKX0sdWUucHJvdG90eXBlLmdldEJhc2VVcmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmJhc2VVUkx8fCIifSx1ZS5wcm90b3R5cGUu'@;
put 'YXBwZW5kUmVxdWVzdD1mdW5jdGlvbihjZSxHLGIpe3ZhciBEPSIiLEg9IiIsTj1udWxsO2ImJihjZT8ubG9nPyhEPSgwLGVlLnBhcnNlU291cmNlQ29kZSkoY2UubG9nKSxIPSgwLGVlLnBhcnNlR2VuZXJhdGVkQ29kZSkoY2UubG9nKSxOPWNlPy5yZXN1bHQ/Y2UucmVzdWx0LldPUks6Y2Uu'@;
put 'bG9nKTpjZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBjZS5yZXN1bHQmJihEPSgwLGVlLnBhcnNlU291cmNlQ29kZSkoY2UucmVzdWx0KSxIPSgwLGVlLnBhcnNlR2VuZXJhdGVkQ29kZSkoY2UucmVzdWx0KSksTj1jZS5yZXN1bHQuV09SSykpO3ZhciBnPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'Y2U/LnJlc3VsdD9jZT8ucmVzdWx0OkpTT04uc3RyaW5naWZ5KGNlPy5yZXN1bHQsbnVsbCwyKTt0aGlzLnJlcXVlc3RzLnB1c2goe2xvZ0ZpbGU6Y2U/LmxvZ3x8Z3x8Y2Usc2VydmljZUxpbms6Ryx0aW1lc3RhbXA6bmV3IERhdGUsc291cmNlQ29kZTpELGdlbmVyYXRlZENvZGU6SCxTQVNX'@;
put 'T1JLOk59KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRoaXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9LHVlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oY2UsRyxiLEQsSCl7cmV0dXJuIHZvaWQgMD09PWImJihiPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09'@;
put 'RCYmKEQ9e30pLHZvaWQgMD09PUgmJihIPSExKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOLGcsQz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7cmV0dXJuIE49SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhHLGIpKSxEKSxnPXtoZWFkZXJzOk4scmVzcG9uc2VU'@;
put 'eXBlOiJ0ZXh0L3BsYWluIj09PWI/InRleHQiOiJqc29uIix3aXRoQ3JlZGVudGlhbHM6ITB9LCJ0ZXh0L3BsYWluIj09PWImJihnLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksWzIsdGhpcy5odHRwQ2xpZW50LmdldChjZSxnKS50aGVuKGZ1bmN0aW9uKHYpe3JldHVybigwLE8udGhyb3dJ'@;
put 'ZkVycm9yKSh2KSxDLnBhcnNlUmVzcG9uc2Uodil9KS5jYXRjaChmdW5jdGlvbih2KXtyZXR1cm4gayhDLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odyl7c3dpdGNoKHcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRs'@;
put 'ZUVycm9yKHYsZnVuY3Rpb24oKXtyZXR1cm4gcC5nZXQoY2UsRyxiLEQpLmNhdGNoKGZ1bmN0aW9uKEope3Rocm93KDAsVS5wcmVmaXhNZXNzYWdlKShKLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pfSxIKV07Y2FzZSAxOnJldHVyblsyLHcuc2Vu'@;
put 'dCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24oY2UsRyxiLEQsSCxOKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9ImFwcGxpY2F0aW9uL2pzb24iKSx2b2lkIDA9PT1IJiYoSD17fSksdm9pZCAwPT09TiYmKE49e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKCl7dmFyIGcsQz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7cmV0dXJuIGc9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhiLEQpKSxIKSxbMix0aGlzLmh0dHBDbGllbnQucG9zdChjZSxHLEkoe2hlYWRlcnM6Zyx3aXRoQ3JlZGVudGlhbHM6ITB9LE4pKS50aGVuKGZ1bmN0aW9u'@;
put 'KHYpe3JldHVybigwLE8udGhyb3dJZkVycm9yKSh2KSxDLnBhcnNlUmVzcG9uc2Uodil9KS5jYXRjaChmdW5jdGlvbih2KXtyZXR1cm4gayhDLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odyl7c3dpdGNoKHcubGFiZWwpe2Nhc2Ug'@;
put 'MDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKHYsZnVuY3Rpb24oKXtyZXR1cm4gcC5wb3N0KGNlLEcsYixELEgpfSldO2Nhc2UgMTpyZXR1cm5bMix3LnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oY2UsRyxiLEQpe3JldHVybiB2b2lkIDA9PT1EJiYo'@;
put 'RD17fSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtyZXR1cm4gSD1JKEkoe30sdGhpcy5nZXRIZWFkZXJzKGIsImFwcGxpY2F0aW9uL2pzb24iKSksRCksWzIsdGhpcy5odHRwQ2xpZW50LnB1dChjZSxHLHto'@;
put 'ZWFkZXJzOkgsd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihDKXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikoQyksTi5wYXJzZVJlc3BvbnNlKEMpfSkuY2F0Y2goZnVuY3Rpb24oQyl7cmV0dXJuIGsoTix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFM9dGhpcztyZXR1'@;
put 'cm4gRSh0aGlzLGZ1bmN0aW9uKHYpe3N3aXRjaCh2LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihDLGZ1bmN0aW9uKCl7cmV0dXJuIFMucHV0KGNlLEcsYixEKX0pXTtjYXNlIDE6cmV0dXJuWzIsdi5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUuZGVs'@;
put 'ZXRlPWZ1bmN0aW9uKGNlLEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQ9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3JldHVybiBiPXRoaXMuZ2V0SGVhZGVycyhHLCJhcHBsaWNhdGlvbi9qc29uIiksWzIsdGhpcy5odHRwQ2xpZW50LmRl'@;
put 'bGV0ZShjZSx7aGVhZGVyczpiLHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKE4pLEQucGFyc2VSZXNwb25zZShOKX0pLmNhdGNoKGZ1bmN0aW9uKE4pe3JldHVybiBrKEQsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBn'@;
put 'PXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoTixmdW5jdGlvbigpe3JldHVybiBnLmRlbGV0ZShjZSxHKX0pXTtjYXNlIDE6cmV0dXJuWzIsQy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90'@;
put 'b3R5cGUucGF0Y2g9ZnVuY3Rpb24oY2UsRyxiKXtyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTil7cmV0dXJuIEQ9dGhpcy5nZXRIZWFkZXJzKGIsImFwcGxpY2F0aW9u'@;
put 'L2pzb24iKSxbMix0aGlzLmh0dHBDbGllbnQucGF0Y2goY2UsRyx7aGVhZGVyczpELHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oZyl7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKGcpLEgucGFyc2VSZXNwb25zZShnKX0pLmNhdGNoKGZ1bmN0aW9uKGcpe3JldHVybiBrKEgs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBDPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihTKXtzd2l0Y2goUy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoZyxmdW5jdGlvbigpe3JldHVybiBDLnBhdGNoKGNlLEcsYil9KV07Y2FzZSAxOnJldHVyblsy'@;
put 'LFMuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnVwbG9hZEZpbGU9ZnVuY3Rpb24oY2UsRyxiKXt2YXIgRDtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOLGc7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2Fz'@;
put 'ZSAwOkg9dGhpcy5nZXRIZWFkZXJzKGIsImFwcGxpY2F0aW9uL2pzb24iKSwhKG51bGw9PT0oRD10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pfHx2b2lkIDA9PT1EKSYmRC52YWx1ZSYmKEhbdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuZmlsZVVwbG9hZENzcmZU'@;
put 'b2tlbi52YWx1ZSksQy5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gQy50cnlzLnB1c2goWzEsMywsNF0pLFs0LHRoaXMuaHR0cENsaWVudC5wb3N0KGNlLEcse2hlYWRlcnM6SCx0cmFuc2Zvcm1SZXF1ZXN0OmZ1bmN0aW9uKFMpe3JldHVybiBTfX0pXTtjYXNlIDI6cmV0dXJuWzIse3Jlc3VsdDoo'@;
put 'Zz1DLnNlbnQoKSkuZGF0YSxldGFnOmcuaGVhZGVycy5ldGFnfV07Y2FzZSAzOmlmKE49Qy5zZW50KCksNDAzPT09KG51bGw9PShnPU4ucmVzcG9uc2UpP3ZvaWQgMDpnLnN0YXR1cyl8fDQ0OT09PWc/LnN0YXR1cyl7aWYodGhpcy5wYXJzZUFuZFNldEZpbGVVcGxvYWRDc3JmVG9rZW4oZyks'@;
put 'dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVyblsyLHRoaXMudXBsb2FkRmlsZShjZSxHLGIpXTt0aHJvdyBOfXRocm93IE47Y2FzZSA0OnJldHVyblsyXX19KX0pfSx1ZS5wcm90b3R5cGUucGFyc2VSZXNwb25zZT1mdW5jdGlvbihjZSl7dmFyIEcsYj1jZT8uaGVhZGVycz9jZS5oZWFk'@;
put 'ZXJzLmV0YWc6IiIsRD0hMTt0cnl7Rz0ic3RyaW5nIj09dHlwZW9mIGNlLmRhdGE/SlNPTi5wYXJzZShjZS5kYXRhKTpjZS5kYXRhfWNhdGNoe3RyeXtHPUpTT04ucGFyc2UoKDAsWC5wYXJzZVdlYm91dFJlc3BvbnNlKShjZS5kYXRhKSl9Y2F0Y2h7Rz1jZS5kYXRhfUQ9ITB9dmFyIEg9e3Jl'@;
put 'c3VsdDpHLGV0YWc6YixzdGF0dXM6Y2Uuc3RhdHVzfTtyZXR1cm4gRCYmKEgubG9nPWNlLmRhdGEpLEh9LHVlLnByb3RvdHlwZS5jcmVhdGVIdHRwQ2xpZW50PWZ1bmN0aW9uKGNlLEcpe3ZhciBiPUc/bmV3IFYuQWdlbnQoRyk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxlZS5jcmVhdGVB'@;
put 'eGlvc0luc3RhbmNlKShjZSxiKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9ZnVuY3Rpb24oRCl7cmV0dXJuIEQ+PTIwMCYmRDw9NDAxfX0sdWV9KCk7Ty5SZXF1ZXN0Q2xpZW50PXNlLE8udGhyb3dJZkVycm9yPWZ1bmN0aW9uKHVlKXt2YXIgY2UsRyxiLEQsSCxO'@;
put 'LGc7c3dpdGNoKHVlLnN0YXR1cyl7Y2FzZSA0MDA6aWYoIm9iamVjdCI9PXR5cGVvZiB1ZS5kYXRhJiYiaW52YWxpZF9ncmFudCI9PT11ZS5kYXRhLmVycm9yKXRocm93IG5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcih1ZS5kYXRhKTtpZigic3RyaW5nIj09dHlwZW9mIHVlLmRhdGEmJiJpbnZh'@;
put 'bGlkIGNzcmYgdG9rZW4hIj09PXVlLmRhdGEudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgdGUuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9iamVjdCI9PXR5cGVvZiB1ZS5kYXRhP25ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcih1ZS5kYXRhKTpuZXcgWS5Mb2dp'@;
put 'blJlcXVpcmVkRXJyb3J9aWYobnVsbCE9PShHPW51bGw9PT0oY2U9dWUuZGF0YSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5lbnRpdHlJRCkmJnZvaWQgMCE9PUcmJkcuaW5jbHVkZXMoImxvZ2luIikpdGhyb3cgbmV3IFkuTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'dWUuZGF0YSYmKDAsQi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkodWUuZGF0YSkpdGhyb3cgbmV3IFkuQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQiLHVlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgdWUuZGF0YSYmKDAsQi5pc0xvZ0lu'@;
put 'UmVxdWlyZWQpKHVlLmRhdGEpJiYobnVsbD09PShEPW51bGw9PT0oYj11ZS5jb25maWcpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLnVybCl8fHZvaWQgMD09PUR8fCFELmluY2x1ZGVzKCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IFkuTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwhPT0o'@;
put 'SD11ZS5kYXRhKSYmdm9pZCAwIT09SCYmSC5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IFkuQXV0aG9yaXplRXJyb3IodWUuZGF0YS5tZXNzYWdlLHVlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKG51bGwhPT0oZz1udWxsPT09KE49dWUuY29uZmlnKXx8dm9pZCAwPT09Tj92b2lkIDA6Ti51cmwp'@;
put 'JiZ2b2lkIDAhPT1nJiZnLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgcS5TQVM5QXV0aEVycm9yO3ZhciBTPWhlKHVlLmRhdGEpO2lmKFMpdGhyb3cgU307dmFyIGhlPWZ1bmN0aW9uKHVlKXtpZighdWUpcmV0dXJuIG51bGw7dHJ5e3ZhciBjZT1KU09OLnBhcnNlKHVlPy5y'@;
put 'ZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihjZS5lcnJvckNvZGUmJmNlLm1lc3NhZ2UpcmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlvbkVycm9yKGNlLmVycm9yQ29kZSxjZS5tZXNzYWdlLHVlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5e2lmKHVlPy5pbmNsdWRlcygneyJl'@;
put 'cnJvckNvZGUnKSYmKE49dWUuc3BsaXQoJ3siZXJyb3JDb2RlJykpLmxlbmd0aD4xKXt2YXIgRz0neyJlcnJvckNvZGUnK05bMV0uc3BsaXQoJyJ9JylbMF0rJyJ9JyxiPUpTT04ucGFyc2UoRy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtyZXR1cm4gbmV3IFkuSm9iRXhlY3V0aW9uRXJyb3Io'@;
put 'Yi5lcnJvckNvZGUsYi5tZXNzYWdlLHVlPy5yZXBsYWNlKC9bXG5ccl0vZywiXG4iKSl9fWNhdGNoe310cnl7aWYodWU/Lm1hdGNoKC9zdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6IC9pKSYmKE49dWUuc3BsaXQoL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKS5sZW5ndGg+MSl7dmFy'@;
put 'IEQ9TlsxXS5zcGxpdCgiPGk+IilbMV0uc3BsaXQoIjwvaT4iKVswXSxIPUQuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pzLmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZv'@;
put 'ciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjoiU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAiLmNvbmNhdChEKTtyZXR1cm4gbmV3IFkuSm9iRXhlY3V0aW9uRXJyb3IoNTAwLEgsIiIpfX1jYXRjaHt9dHJ5e3ZhciBOO2lmKCF1ZT8ubWF0Y2goLz4+d2Vib3V0QkVHSU48PC8pJiZ1'@;
put 'ZT8ubWF0Y2goL1N0b3JlZCBQcm9jZXNzIEVycm9yL2kpJiZ1ZT8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpJiYoTj11ZS5zcGxpdCgiPGgyPlNBUyBMb2c8L2gyPiIpKS5sZW5ndGg+MSl7dmFyIGc9TlsxXS5zcGxpdCgiPHByZT4iKVsxXS5zcGxpdCgi'@;
put 'PC9wcmU+IilbMF07cmV0dXJuIG5ldyBZLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxIPSJUaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLiIsZyl9fWNhdGNoe31yZXR1cm4gbnVsbH19LDc5NTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5f'@;
put 'X2V4dGVuZHN8fCh6PWZ1bmN0aW9uKHEsZWUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0ZSxvZSl7dGUuX19wcm90b19fPW9lfXx8ZnVuY3Rpb24odGUsb2Upe2Zvcih2YXIgc2UgaW4gb2UpT2JqZWN0'@;
put 'LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9lLHNlKSYmKHRlW3NlXT1vZVtzZV0pfSkocSxlZSl9LGZ1bmN0aW9uKHEsZWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlZSYmbnVsbCE9PWVlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmco'@;
put 'ZWUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIHRlKCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfXoocSxlZSkscS5wcm90b3R5cGU9bnVsbD09PWVlP09iamVjdC5jcmVhdGUoZWUpOih0ZS5wcm90b3R5cGU9ZWUucHJvdG90eXBlLG5ldyB0ZSl9KSxJPXRoaXMmJnRo'@;
put 'aXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZSx0ZT0xLG9lPWFyZ3VtZW50cy5sZW5ndGg7dGU8b2U7dGUrKylmb3IodmFyIHNlIGluIGVlPWFyZ3VtZW50c1t0ZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w'@;
put 'ZXJ0eS5jYWxsKGVlLHNlKSYmKHFbc2VdPWVlW3NlXSk7cmV0dXJuIHF9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihxLGVlLHRlLG9lKXtyZXR1cm4gbmV3KHRlfHwodGU9UHJvbWlzZSkpKGZ1bmN0aW9uKHNlLGhlKXtmdW5jdGlv'@;
put 'biB1ZShiKXt0cnl7RyhvZS5uZXh0KGIpKX1jYXRjaChEKXtoZShEKX19ZnVuY3Rpb24gY2UoYil7dHJ5e0cob2UudGhyb3coYikpfWNhdGNoKEQpe2hlKEQpfX1mdW5jdGlvbiBHKGIpe3ZhciBEO2IuZG9uZT9zZShiLnZhbHVlKTooRD1iLnZhbHVlLEQgaW5zdGFuY2VvZiB0ZT9EOm5ldyB0'@;
put 'ZShmdW5jdGlvbihIKXtIKEQpfSkpLnRoZW4odWUsY2UpfUcoKG9lPW9lLmFwcGx5KHEsZWV8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKHEsZWUpe3ZhciB0ZSxvZSxzZSxoZSx1ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZzZVsw'@;
put 'XSl0aHJvdyBzZVsxXTtyZXR1cm4gc2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gaGU9e25leHQ6Y2UoMCksdGhyb3c6Y2UoMSkscmV0dXJuOmNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoaGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSks'@;
put 'aGU7ZnVuY3Rpb24gY2UoRyl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBmdW5jdGlvbihEKXtpZih0ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt1ZTspdHJ5e2lmKHRlPTEsb2UmJihzZT0yJkRbMF0/b2UucmV0dXJuOkRb'@;
put 'MF0/b2UudGhyb3d8fCgoc2U9b2UucmV0dXJuKSYmc2UuY2FsbChvZSksMCk6b2UubmV4dCkmJiEoc2U9c2UuY2FsbChvZSxEWzFdKSkuZG9uZSlyZXR1cm4gc2U7c3dpdGNoKG9lPTAsc2UmJihEPVsyJkRbMF0sc2UudmFsdWVdKSxEWzBdKXtjYXNlIDA6Y2FzZSAxOnNlPUQ7YnJlYWs7Y2Fz'@;
put 'ZSA0OnJldHVybiB1ZS5sYWJlbCsrLHt2YWx1ZTpEWzFdLGRvbmU6ITF9O2Nhc2UgNTp1ZS5sYWJlbCsrLG9lPURbMV0sRD1bMF07Y29udGludWU7Y2FzZSA3OkQ9dWUub3BzLnBvcCgpLHVlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChzZT0oc2U9dWUudHJ5cykubGVuZ3Ro'@;
put 'PjAmJnNlW3NlLmxlbmd0aC0xXSl8fDYhPT1EWzBdJiYyIT09RFswXSkpe3VlPTA7Y29udGludWV9aWYoMz09PURbMF0mJighc2V8fERbMV0+c2VbMF0mJkRbMV08c2VbM10pKXt1ZS5sYWJlbD1EWzFdO2JyZWFrfWlmKDY9PT1EWzBdJiZ1ZS5sYWJlbDxzZVsxXSl7dWUubGFiZWw9c2VbMV0s'@;
put 'c2U9RDticmVha31pZihzZSYmdWUubGFiZWw8c2VbMl0pe3VlLmxhYmVsPXNlWzJdLHVlLm9wcy5wdXNoKEQpO2JyZWFrfXNlWzJdJiZ1ZS5vcHMucG9wKCksdWUudHJ5cy5wb3AoKTtjb250aW51ZX1EPWVlLmNhbGwocSx1ZSl9Y2F0Y2goSCl7RD1bNixIXSxvZT0wfWZpbmFsbHl7dGU9c2U9'@;
put 'MH1pZig1JkRbMF0pdGhyb3cgRFsxXTtyZXR1cm57dmFsdWU6RFswXT9EWzFdOnZvaWQgMCxkb25lOiEwfX0oW0csYl0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNhczlSZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgaj1SKDgyMjQpLFY9'@;
put 'Uig3ODU3KSxCPVIoOTc3OCksWT1SKDQ1ODgpLFg9UigxMzk1KSxVPWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIGVlKHRlLG9lKXt2YXIgc2U9cS5jYWxsKHRoaXMsdGUsb2UpfHx0aGlzO3JldHVybiBzZS5odHRwQ2xpZW50LmRlZmF1bHRzLm1heFJlZGlyZWN0cz0wLHNlLmh0dHBDbGllbnQuZGVm'@;
put 'YXVsdHMudmFsaWRhdGVTdGF0dXM9ZnVuY3Rpb24oaGUpe3JldHVybiBoZT49MjAwJiZoZTwzMDN9LGouZGVmYXVsdCYmKCgwLGouZGVmYXVsdCkoc2UuaHR0cENsaWVudCksc2UuaHR0cENsaWVudC5kZWZhdWx0cy5qYXI9bmV3IFYuQ29va2llSmFyKSxzZX1yZXR1cm4gSyhlZSxxKSxlZS5w'@;
put 'cm90b3R5cGUubG9naW49ZnVuY3Rpb24odGUsb2Usc2Upe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBoZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gaGU9Ii9Vc2VyIEZvbGRlcnMvIi5jb25jYXQo'@;
put 'dGUsIi9NeSBGb2xkZXIvc2FzanMvcnVubmVyIiksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj8odGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphci5yZW1vdmVBbGxDb29raWVzKCksWzQsdGhpcy5nZXQoIiIuY29uY2F0KHNlLCI/X3Byb2dyYW09IikuY29uY2F0KGhlLCImX3VzZXJu'@;
put 'YW1lPSIpLmNvbmNhdCh0ZSwiJl9wYXNzd29yZD0iKS5jb25jYXQob2UpLHZvaWQgMCwidGV4dC9wbGFpbiIpXSk6WzMsMl07Y2FzZSAxOnVlLnNlbnQoKSx1ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0sZWUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0ZSxvZSxzZSxoZSx1ZSl7'@;
put 'cmV0dXJuIHZvaWQgMD09PXNlJiYoc2U9ImFwcGxpY2F0aW9uL2pzb24iKSx2b2lkIDA9PT1oZSYmKGhlPXt9KSx2b2lkIDA9PT11ZSYmKHVlPSExKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBjZSxHLGI9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3JldHVy'@;
put 'biBjZT1JKEkoe30sdGhpcy5nZXRIZWFkZXJzKG9lLHNlKSksaGUpLEc9e2hlYWRlcnM6Y2UscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PXNlPyJ0ZXh0IjoianNvbiIsd2l0aENyZWRlbnRpYWxzOiEwfSwidGV4dC9wbGFpbiI9PT1zZSYmKEcudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAw'@;
put 'KSxbMix0aGlzLmh0dHBDbGllbnQuZ2V0KHRlLEcpLnRoZW4oZnVuY3Rpb24oSCl7cmV0dXJuIDMwMj09PUguc3RhdHVzP2IuZ2V0KEguaGVhZGVycy5sb2NhdGlvbixvZSxzZSk6KCgwLFkudGhyb3dJZkVycm9yKShIKSxiLnBhcnNlUmVzcG9uc2UoSCkpfSkuY2F0Y2goZnVuY3Rpb24oSCl7'@;
put 'cmV0dXJuIGsoYix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE49dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6aWYoSCBpbnN0YW5jZW9mIFguSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgSDtyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9y'@;
put 'KEgsZnVuY3Rpb24oKXtyZXR1cm4gTi5nZXQodGUsb2Usc2UsaGUpLmNhdGNoKGZ1bmN0aW9uKEMpe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pfSx1ZSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3co'@;
put 'MCxCLnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsZy5zZW50KCldfX0pfSl9KV19KX0pfSxlZS5wcm90b3R5cGUucG9zdD1mdW5jdGlvbih0ZSxvZSxzZSxoZSx1ZSl7cmV0dXJuIHZvaWQgMD09PWhlJiYoaGU9ImFw'@;
put 'cGxpY2F0aW9uL2pzb24iKSx2b2lkIDA9PT11ZSYmKHVlPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBjZSxHPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gY2U9SShJKHt9LHRoaXMuZ2V0SGVhZGVycyhzZSxoZSkpLHVlKSxbMix0aGlzLmh0'@;
put 'dHBDbGllbnQucG9zdCh0ZSxvZSx7aGVhZGVyczpjZSx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKEQpe3JldHVybiBrKEcsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oSCl7c3dpdGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gMzAy'@;
put 'IT09RC5zdGF0dXM/WzMsMl06WzQsdGhpcy5nZXQoRC5oZWFkZXJzLmxvY2F0aW9uLHZvaWQgMCxoZSx1ZSldO2Nhc2UgMTpyZXR1cm5bMixILnNlbnQoKV07Y2FzZSAyOnJldHVybigwLFkudGhyb3dJZkVycm9yKShEKSxbMix0aGlzLnBhcnNlUmVzcG9uc2UoRCldfX0pfSl9KS5jYXRjaChm'@;
put 'dW5jdGlvbihEKXtyZXR1cm4gayhHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSD10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKEQsZnVuY3Rpb24oKXtyZXR1cm4gSC5wb3N0KHRlLG9l'@;
put 'LHNlLGhlLHVlKX0pXTtjYXNlIDE6cmV0dXJuWzIsTi5zZW50KCldfX0pfSl9KV19KX0pfSxlZX0oWS5SZXF1ZXN0Q2xpZW50KTtPLlNhczlSZXF1ZXN0Q2xpZW50PVV9LDM2MDI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1m'@;
put 'dW5jdGlvbihrLEUpe3JldHVybih6PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihqLFYpe2ouX19wcm90b19fPVZ9fHxmdW5jdGlvbihqLFYpe2Zvcih2YXIgQiBpbiBWKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkuY2FsbChWLEIpJiYoaltCXT1WW0JdKX0pKGssRSl9LGZ1bmN0aW9uKGssRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUmJm51bGwhPT1FKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoRSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxs'@;
put 'Iik7ZnVuY3Rpb24gaigpe3RoaXMuY29uc3RydWN0b3I9a316KGssRSksay5wcm90b3R5cGU9bnVsbD09PUU/T2JqZWN0LmNyZWF0ZShFKTooai5wcm90b3R5cGU9RS5wcm90b3R5cGUsbmV3IGopfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8u'@;
put 'U0FTSlNfTE9HU19TRVBBUkFUT1I9Ty5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO3ZhciBJPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIEUoKXt2YXIgaj1udWxsIT09ayYmay5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGouZ2V0SGVhZGVycz1mdW5jdGlvbihWLEIpe3ZhciBZ'@;
put 'LFg9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT1CJiYoWFsiQ29udGVudC1UeXBlIl09QiksWC5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09Qj9COiIqLyoiLFZ8fHR5cGVvZiB3aW5kb3c+InUifHwoVj1udWxsIT09KFk9bG9jYWxTdG9yYWdlLmdl'@;
put 'dEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1ZP1k6dm9pZCAwKSxWJiYoWC5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoVikpLFh9LGp9cmV0dXJuIEsoRSxrKSxFLnByb3RvdHlwZS5wYXJzZVJlc3BvbnNlPWZ1bmN0aW9uKGope3ZhciBWLEIsWSxYPWo/LmhlYWRlcnM/'@;
put 'ai5oZWFkZXJzLmV0YWc6IiIsVT17fTt0cnl7VT0ic3RyaW5nIj09dHlwZW9mIGouZGF0YT9KU09OLnBhcnNlKGouZGF0YSk6ai5kYXRhfWNhdGNoe2lmKGouZGF0YS5pbmNsdWRlcyhPLlNBU0pTX0xPR1NfU0VQQVJBVE9SKSl7dmFyIHE9ai5kYXRhLGVlPXEuc3BsaXQoTy5TQVNKU19MT0dT'@;
put 'X1NFUEFSQVRPUik7dm9pZCAwIT09KFY9ZWUuc3BsaWNlKDAsMSlbMF0pJiYoVT1WKTt2YXIgdGU9ZWUuc3BsaWNlKDAsZWUubGVuZ3RoLTEpLG9lPW5ldyBSZWdFeHAoIiIuY29uY2F0KE8uU0FTSlNfTE9HU19TRVBBUkFUT1IsIiQiKSksc2U9ZWVbMF07c2UmJihvZS50ZXN0KHEpP3RlLmxl'@;
put 'bmd0aD4xJiZ0ZS5wdXNoKHNlKTpZPXNlKSxCPXRlLmpvaW4oTy5TQVNKU19MT0dTX1NFUEFSQVRPUil9ZWxzZSBVPWouZGF0YX12YXIgaGU9e3Jlc3VsdDpVLGxvZzpCfHwiIixldGFnOlgsc3RhdHVzOmouc3RhdHVzfTtyZXR1cm4gWSYmKGhlLnByaW50T3V0cHV0PVkpLGhlfSxFfShSKDQ1'@;
put 'ODgpLlJlcXVlc3RDbGllbnQpO08uU2FzanNSZXF1ZXN0Q2xpZW50PUksTy5TQVNKU19MT0dTX1NFUEFSQVRPUj0iU0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSw0NzA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NjY2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNjE3NzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01v'@;
put 'ZHVsZSIse3ZhbHVlOiEwfSl9LDU3NjY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OTc1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KX0sMjE1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDc4MjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQxNjg6KE0s'@;
put 'Tyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzg0MDooTSxPKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxNDI4OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTg0MTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUixLO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkxvZ2luTWVjaGFuaXNtPU8uU0FTanNDb25maWc9dm9pZCAwLE8u'@;
put 'U0FTanNDb25maWc9ZnVuY3Rpb24oKXt0aGlzLnNlcnZlclVybD0iIix0aGlzLnBhdGhTQVNKUz0iIix0aGlzLnBhdGhTQVM5PSIiLHRoaXMucGF0aFNBU1ZpeWE9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5zZXJ2ZXJUeXBlPW51bGwsdGhpcy5kZWJ1Zz0hMCx0aGlzLnZlcmJvc2U9ITAsdGhp'@;
put 'cy5jb250ZXh0TmFtZT0iIix0aGlzLnVzZUNvbXB1dGVBcGk9bnVsbCx0aGlzLmxvZ2luTWVjaGFuaXNtPVIuRGVmYXVsdCx0aGlzLnJlcXVlc3RIaXN0b3J5TGltaXQ9MTB9LChLPVI9Ty5Mb2dpbk1lY2hhbmlzbXx8KE8uTG9naW5NZWNoYW5pc209e30pKS5EZWZhdWx0PSJEZWZhdWx0IixL'@;
put 'LlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw2MDM4OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNlc3Npb25TdGF0ZT12b2lkIDAsKFI9Ty5TZXNzaW9uU3RhdGV8fChPLlNlc3Npb25TdGF0ZT17'@;
put 'fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixSLlJ1bm5pbmc9InJ1bm5pbmciLFIuUGVuZGluZz0icGVuZGluZyIsUi5JZGxlPSJpZGxlIixSLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsUi5Ob1N0YXRlPSIiLFIuRmFpbGVkPSJmYWlsZWQiLFIuRXJyb3I9ImVycm9yIn0sOTQ5MzooTSxP'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg2NTA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxMjQ6ZnVuY3Rpb24oTSxPKXsidXNl'@;
put 'IHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtm'@;
put 'b3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVl'@;
put 'ICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkF1dGhvcml6ZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUsail7dmFyIFY9SS5jYWxsKHRoaXMsRSl8fHRoaXM7cmV0dXJuIFYubWVzc2FnZT1FLFYuY29uZmlybVVybD1qLFYubmFt'@;
put 'ZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLGsucHJvdG90eXBlKSxWfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uQXV0aG9yaXplRXJyb3I9S30sOTQ2NTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwo'@;
put 'Uj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv'@;
put 'cGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBu'@;
put 'dWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LE8uQ2VydGlmaWNhdGVFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFKXt2YXIgaj1JLmNhbGwodGhpcywiIi5jb25jYXQoRSwiXG5QbGVhc2UgdmlzaXQgdGhlIGxpbmsgYmVsb3cgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBpc3N1ZTpcbi0gIiku'@;
put 'Y29uY2F0KCJodHRwczovL2dpdGh1Yi5jb20vc2FzanMvY2xpL2lzc3Vlcy8xMTgxI2lzc3VlY29tbWVudC0xMDkwNjM4NTg0IiwiXG4iKSl8fHRoaXM7cmV0dXJuIGoubmFtZT0iQ2VydGlmaWNhdGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosay5wcm90b3R5cGUpLGp9cmV0dXJu'@;
put 'IHooayxJKSxrfShFcnJvcik7Ty5DZXJ0aWZpY2F0ZUVycm9yPUt9LDUyNjc6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119'@;
put 'aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9'@;
put 'PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24g'@;
put 'ayhFLGope3ZhciBWPUkuY2FsbCh0aGlzLCJFcnJvcjogSm9iIGV4ZWN1dGlvbiBmYWlsZWQiKXx8dGhpcztyZXR1cm4gVi5qb2I9RSxWLmxvZz1qLFYubmFtZT0iQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixrLnByb3RvdHlwZSksVn1yZXR1cm4g'@;
put 'eihrLEkpLGt9KEVycm9yKTtPLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj1LfSw5MjMyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkVycm9yUmVzcG9uc2U9dm9pZCAwLE8uRXJyb3JSZXNwb25zZT1mdW5j'@;
put 'dGlvbih6LEssSSl7dmFyIGs9SztpZigib2JqZWN0IiE9dHlwZW9mIEspdHJ5e2s9SlNPTi5wYXJzZShLKX1jYXRjaHtJPUssaz0iIn10aGlzLmVycm9yPXttZXNzYWdlOnosZGV0YWlsczprLHJhdzpJfX19LDUxMDk6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0'@;
put 'aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEg'@;
put 'Y29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxPLkludGVybmFsU2VydmVyRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT1JLmNhbGwodGhpcywiRXJyb3I6IEludGVybmFsIHNlcnZlciBlcnJvci4iKXx8dGhpcztyZXR1cm4gRS5uYW1lPSJJbnRlcm5hbFNlcnZlckVy'@;
put 'cm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkludGVybmFsU2VydmVyRXJyb3I9S30sNTUxODpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlv'@;
put 'bihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs'@;
put 'bChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVu'@;
put 'Y3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSW52YWxp'@;
put 'ZEpzb25FcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gaygpe3ZhciBFPUkuY2FsbCh0aGlzLCJFcnJvcjogaW52YWxpZCBKc29uIHN0cmluZyIpfHx0aGlzO3JldHVybiBFLm5hbWU9IkludmFsaWRKc29uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJv'@;
put 'dG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uSW52YWxpZEpzb25FcnJvcj1LfSwxMDA1OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'fHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24o'@;
put 'SSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJ'@;
put 'LnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5JbnZhbGlkU0FTanNDc3JmRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9u'@;
put 'KEkpe2Z1bmN0aW9uIGsoKXt2YXIgRT10aGlzO3JldHVybihFPUkuY2FsbCh0aGlzLCJBdXRoIGVycm9yOiAiLmNvbmNhdCgiSW52YWxpZCBDU1JGIHRva2VuISIpKXx8dGhpcykubmFtZT0iSW52YWxpZFNBU2pzQ3NyZkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlw'@;
put 'ZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkludmFsaWRTQVNqc0NzcmZFcnJvcj1LfSw4NTMxOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'fHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24o'@;
put 'SSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJ'@;
put 'LnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Kb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7'@;
put 'ZnVuY3Rpb24gayhFLGosVil7dmFyIEI9SS5jYWxsKHRoaXMsIkVycm9yIENvZGUgIi5jb25jYXQoRSwiOiAiKS5jb25jYXQoaikpfHx0aGlzO3JldHVybiBCLmVycm9yQ29kZT1FLEIuZXJyb3JNZXNzYWdlPWosQi5yZXN1bHQ9VixCLm5hbWU9IkpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YoQixrLnByb3RvdHlwZSksQn1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkpvYkV4ZWN1dGlvbkVycm9yPUt9LDkwNzk6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4o'@;
put 'Uj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09'@;
put 'altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlz'@;
put 'LmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkpvYlN0YXRlUG9sbEVycm9yPXZv'@;
put 'aWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUsail7dmFyIFY9SS5jYWxsKHRoaXMsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXRlIGZvciBqb2IgIi5jb25jYXQoRSwiOiAiKS5jb25jYXQoai5tZXNzYWdlfHxqKSl8fHRoaXM7cmV0dXJuIFYub3JpZ2luYWxFcnJvcj1q'@;
put 'LFYubmFtZT0iSm9iU3RhdGVQb2xsRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLGsucHJvdG90eXBlKSxWfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uSm9iU3RhdGVQb2xsRXJyb3I9S30sMzA5NjpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMu'@;
put 'X19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5'@;
put 'cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25z'@;
put 'dHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLE8uSnNvblBhcnNlQXJyYXlFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gaygpe3ZhciBFPUkuY2FsbCh0aGlzLCJDYW4gbm90IHBhcnNlIGFycmF5IG9iamVjdCB0byBqc29uLiIpfHx0aGlzO3JldHVybiBFLm5hbWU9Ikpzb25QYXJzZUFycmF5'@;
put 'RXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uSnNvblBhcnNlQXJyYXlFcnJvcj1LfSw2NzQzOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0'@;
put 'aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtm'@;
put 'dW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Mb2dp'@;
put 'blJlcXVpcmVkRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSl7dmFyIGo9dGhpcyxWPUU/SlNPTi5zdHJpbmdpZnkoRSxudWxsLDIpOiJZb3UgbXVzdCBiZSBsb2dnZWQgaW4gdG8gYWNjZXNzIHRoaXMgcmVzb3VyY2UiO3JldHVybihqPUkuY2FsbCh0aGlzLCJB'@;
put 'dXRoIGVycm9yOiAiLmNvbmNhdChWKSl8fHRoaXMpLm5hbWU9IkxvZ2luUmVxdWlyZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosay5wcm90b3R5cGUpLGp9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Mb2dpblJlcXVpcmVkRXJyb3I9S30sNzg2NDpmdW5jdGlvbihNLE8peyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGop'@;
put 'e2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFs'@;
put 'dWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTm9TZXNzaW9uU3RhdGVFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFLGosVil7dmFyIEI9SS5jYWxsKHRoaXMsIkNvdWxkIG5vdCBnZXQgc2Vzc2lvbiBzdGF0ZS4gU2VydmVyIHJl'@;
put 'c3BvbmRlZCB3aXRoICIuY29uY2F0KEUsIiB3aGlsc3QgY2hlY2tpbmcgc3RhdGU6ICIpLmNvbmNhdChqKSl8fHRoaXM7cmV0dXJuIEIuc2VydmVyUmVzcG9uc2VTdGF0dXM9RSxCLnNlc3Npb25TdGF0ZVVybD1qLEIubG9nVXJsPVYsQi5uYW1lPSJOb1Nlc3Npb25TdGF0dXMiLE9iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZihCLGsucHJvdG90eXBlKSxCfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uTm9TZXNzaW9uU3RhdGVFcnJvcj1LfSw5NTc3OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJu'@;
put 'KFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1Zd'@;
put 'PWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhp'@;
put 'cy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Ob3RGb3VuZEVycm9yPXZvaWQg'@;
put 'MDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPUkuY2FsbCh0aGlzLCJFcnJvcjogUmVzb3VyY2UgYXQgIi5jb25jYXQoRSwiIHdhcyBub3QgZm91bmQiKSl8fHRoaXM7cmV0dXJuIGoudXJsPUUsai5uYW1lPSJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBl'@;
put 'T2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLk5vdEZvdW5kRXJyb3I9S30sOTI3OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKEUsail7cmV0dXJuKHo9T2JqZWN0LnNldFBy'@;
put 'b3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFYsQil7Vi5fX3Byb3RvX189Qn18fGZ1bmN0aW9uKFYsQil7Zm9yKHZhciBZIGluIEIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsWSkmJihWW1ldPUJbWV0pfSkoRSxqKX0s'@;
put 'ZnVuY3Rpb24oRSxqKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaiYmbnVsbCE9PWopdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhqKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBWKCl7dGhpcy5jb25zdHJ1Y3Rvcj1F'@;
put 'fXooRSxqKSxFLnByb3RvdHlwZT1udWxsPT09aj9PYmplY3QuY3JlYXRlKGopOihWLnByb3RvdHlwZT1qLnByb3RvdHlwZSxuZXcgVil9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj12b2lkIDA7dmFy'@;
put 'IEk9Uig2Nzk5KSxrPWZ1bmN0aW9uKEUpe2Z1bmN0aW9uIGooVixCLFkpe3ZhciBYPXRoaXMsVT0iUm9vdCBmb2xkZXIgIi5jb25jYXQoViwiIHdhcyBub3QgZm91bmQuIikrIlxuUGxlYXNlIGNoZWNrICIuY29uY2F0KEIsIi9TQVNEcml2ZS4iKSsiXG5JZiB0aGUgZm9sZGVyIERPRVMgZXhp'@;
put 'c3QgdGhlbiBpdCBpcyBsaWtlbHkgYSBwZXJtaXNzaW9uIHByb2JsZW0uXG4iO2lmKFkpe3ZhciBxPSgwLEkuZGVjb2RlVG9rZW4pKFkpLnNjb3BlO1UrPSJZb3VyIGFjY2VzcyB0b2tlbiBjb250YWlucyB0aGUgZm9sbG93aW5nIHNjb3BlczpcbiIrKHE9cS5tYXAoZnVuY3Rpb24oZWUpe3Jl'@;
put 'dHVybiIqICIrZWV9KSkuam9pbigiXG4iKX1yZXR1cm4oWD1FLmNhbGwodGhpcyxVKXx8dGhpcykubmFtZT0iUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihYLGoucHJvdG90eXBlKSxYfXJldHVybiBLKGosRSksan0oRXJyb3IpO08uUm9vdEZvbGRlck5v'@;
put 'dEZvdW5kRXJyb3I9a30sOTUyNjpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlv'@;
put 'bihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5w'@;
put 'cm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTOUF1dGhFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gaygpe3ZhciBFPUkuY2FsbCh0aGlzLCJUaGUgY3JlZGVudGlh'@;
put 'bHMgeW91IHByb3ZpZGVkIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNldCBvZiBjcmVkZW50aWFscy4iKXx8dGhpcztyZXR1cm4gRS5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0'@;
put 'dXJuIHooayxJKSxrfShFcnJvcik7Ty5TQVM5QXV0aEVycm9yPUt9LDg4NzU6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119'@;
put 'aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9'@;
put 'PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLldlYm91dFJlc3BvbnNlRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSl7'@;
put 'dmFyIGo9SS5jYWxsKHRoaXMsIkVycm9yOiBlcnJvciB3aGlsZSBwYXJzaW5nIHJlc3BvbnNlIGZyb20gIi5jb25jYXQoRSkpfHx0aGlzO3JldHVybiBqLnVybD1FLGoubmFtZT0iV2Vib3V0UmVzcG9uc2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGosay5wcm90b3R5cGUpLGp9cmV0'@;
put 'dXJuIHooayxJKSxrfShFcnJvcik7Ty5XZWJvdXRSZXNwb25zZUVycm9yPUt9LDEzOTU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSk7'@;
put 'dmFyIFY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEUpO1YmJiEoImdldCJpbiBWPyFrLl9fZXNNb2R1bGU6Vi53cml0YWJsZXx8Vi5jb25maWd1cmFibGUpfHwoVj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ga1tFXX19KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoSSxqLFYpfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigxMjQpLE8pLEsoUig5NDY1KSxPKSxLKFIoNTI2NyksTyksSyhSKDkyMzIpLE8pLEsoUig1MTA5KSxPKSxLKFIoNTUxOCksTyksSyhSKDg1MzEpLE8pLEsoUig5'@;
put 'MDc5KSxPKSxLKFIoMzA5NiksTyksSyhSKDY3NDMpLE8pLEsoUig3ODY0KSxPKSxLKFIoOTU3NyksTyksSyhSKDkyNzkpLE8pLEsoUig4ODc1KSxPKX0sMTIzMDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy'@;
put 'ZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01vZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChWPXtlbnVtZXJhYmxlOiEwLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiBrW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGosVil9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1'@;
put 'bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDQ3MCksTyksSyhSKDQ2NjYpLE8pLEsoUig0OTc1KSxPKSxLKFIoNTc2NiksTyksSyhS'@;
put 'KDIxNSksTyksSyhSKDQ3ODIpLE8pLEsoUig0MTY4KSxPKSxLKFIoODUxNiksTyksSyhSKDM4NDApLE8pLEsoUig1ODQxKSxPKSxLKFIoMTQyOCksTyksSyhSKDYwMzgpLE8pLEsoUig5NDkzKSxPKSxLKFIoMzE1MyksTyksSyhSKDg2NTApLE8pLEsoUig2MTc3KSxPKSxLKFIoMTM5NSksTyl9'@;
put 'LDMzMDI6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gUj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihJKXtmb3IodmFyIGssRT0xLGo9YXJndW1lbnRzLmxlbmd0aDtFPGo7RSsrKWZvcih2YXIgViBpbiBrPWFy'@;
put 'Z3VtZW50c1tFXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxWKSYmKElbVl09a1tWXSk7cmV0dXJuIEl9LFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihJLGssRSxqKXtyZXR1cm4gbmV3KEV8fChFPVByb21p'@;
put 'c2UpKShmdW5jdGlvbihWLEIpe2Z1bmN0aW9uIFkocSl7dHJ5e1Uoai5uZXh0KHEpKX1jYXRjaChlZSl7QihlZSl9fWZ1bmN0aW9uIFgocSl7dHJ5e1Uoai50aHJvdyhxKSl9Y2F0Y2goZWUpe0IoZWUpfX1mdW5jdGlvbiBVKHEpe3ZhciBlZTtxLmRvbmU/VihxLnZhbHVlKTooZWU9cS52YWx1'@;
put 'ZSxlZSBpbnN0YW5jZW9mIEU/ZWU6bmV3IEUoZnVuY3Rpb24odGUpe3RlKGVlKX0pKS50aGVuKFksWCl9VSgoaj1qLmFwcGx5KEksa3x8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oSSxrKXt2YXIgRSxqLFYsQixZPXtsYWJlbDowLHNlbnQ6ZnVu'@;
put 'Y3Rpb24oKXtpZigxJlZbMF0pdGhyb3cgVlsxXTtyZXR1cm4gVlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBCPXtuZXh0OlgoMCksdGhyb3c6WCgxKSxyZXR1cm46WCgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzfSksQjtmdW5jdGlvbiBYKFUpe3JldHVybiBmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe2lmKEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7WTspdHJ5e2lmKEU9MSxqJiYoVj0yJmVlWzBdP2oucmV0dXJu'@;
put 'OmVlWzBdP2oudGhyb3d8fCgoVj1qLnJldHVybikmJlYuY2FsbChqKSwwKTpqLm5leHQpJiYhKFY9Vi5jYWxsKGosZWVbMV0pKS5kb25lKXJldHVybiBWO3N3aXRjaChqPTAsViYmKGVlPVsyJmVlWzBdLFYudmFsdWVdKSxlZVswXSl7Y2FzZSAwOmNhc2UgMTpWPWVlO2JyZWFrO2Nhc2UgNDpy'@;
put 'ZXR1cm4gWS5sYWJlbCsrLHt2YWx1ZTplZVsxXSxkb25lOiExfTtjYXNlIDU6WS5sYWJlbCsrLGo9ZWVbMV0sZWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzplZT1ZLm9wcy5wb3AoKSxZLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChWPShWPVkudHJ5cykubGVuZ3RoPjAmJlZbVi5s'@;
put 'ZW5ndGgtMV0pfHw2IT09ZWVbMF0mJjIhPT1lZVswXSkpe1k9MDtjb250aW51ZX1pZigzPT09ZWVbMF0mJighVnx8ZWVbMV0+VlswXSYmZWVbMV08VlszXSkpe1kubGFiZWw9ZWVbMV07YnJlYWt9aWYoNj09PWVlWzBdJiZZLmxhYmVsPFZbMV0pe1kubGFiZWw9VlsxXSxWPWVlO2JyZWFrfWlm'@;
put 'KFYmJlkubGFiZWw8VlsyXSl7WS5sYWJlbD1WWzJdLFkub3BzLnB1c2goZWUpO2JyZWFrfVZbMl0mJlkub3BzLnBvcCgpLFkudHJ5cy5wb3AoKTtjb250aW51ZX1lZT1rLmNhbGwoSSxZKX1jYXRjaCh0ZSl7ZWU9WzYsdGVdLGo9MH1maW5hbGx5e0U9Vj0wfWlmKDUmZWVbMF0pdGhyb3cgZWVb'@;
put 'MV07cmV0dXJue3ZhbHVlOmVlWzBdP2VlWzFdOnZvaWQgMCxkb25lOiEwfX0oW1UscV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzPXZvaWQgMCxPLmFwcGVuZEV4dHJhUmVzcG9uc2VB'@;
put 'dHRyaWJ1dGVzPWZ1bmN0aW9uKEksayl7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEUsajtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFYpe3JldHVybiBFPXt9LGs/Lmxlbmd0aD8oaj1rLnJlZHVjZShmdW5jdGlvbihCLFkpe3JldHVybiBCW1ldPUlbWV0sQn0s'@;
put 'e30pLEU9Uih7cmVzdWx0OkkucmVzdWx0fSxqKSk6RT1JLnJlc3VsdCxbMixFXX0pfSl9fSw3OTIyOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihLLEksayxFKXtyZXR1cm4gbmV3KGt8fChrPVByb21pc2UpKShmdW5jdGlv'@;
put 'bihqLFYpe2Z1bmN0aW9uIEIoVSl7dHJ5e1goRS5uZXh0KFUpKX1jYXRjaChxKXtWKHEpfX1mdW5jdGlvbiBZKFUpe3RyeXtYKEUudGhyb3coVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFgoVSl7dmFyIHE7VS5kb25lP2ooVS52YWx1ZSk6KHE9VS52YWx1ZSxxIGluc3RhbmNlb2Ygaz9x'@;
put 'Om5ldyBrKGZ1bmN0aW9uKGVlKXtlZShxKX0pKS50aGVuKEIsWSl9WCgoRT1FLmFwcGx5KEssSXx8W10pKS5uZXh0KCkpfSl9LHo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oSyxJKXt2YXIgayxFLGosVixCPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmpbMF0pdGhy'@;
put 'b3cgalsxXTtyZXR1cm4galsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBWPXtuZXh0OlkoMCksdGhyb3c6WSgxKSxyZXR1cm46WSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVjtmdW5jdGlvbiBZ'@;
put 'KFgpe3JldHVybiBmdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24ocSl7aWYoayl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtCOyl0cnl7aWYoaz0xLEUmJihqPTImcVswXT9FLnJldHVybjpxWzBdP0UudGhyb3d8fCgoaj1FLnJl'@;
put 'dHVybikmJmouY2FsbChFKSwwKTpFLm5leHQpJiYhKGo9ai5jYWxsKEUscVsxXSkpLmRvbmUpcmV0dXJuIGo7c3dpdGNoKEU9MCxqJiYocT1bMiZxWzBdLGoudmFsdWVdKSxxWzBdKXtjYXNlIDA6Y2FzZSAxOmo9cTticmVhaztjYXNlIDQ6cmV0dXJuIEIubGFiZWwrKyx7dmFsdWU6cVsxXSxk'@;
put 'b25lOiExfTtjYXNlIDU6Qi5sYWJlbCsrLEU9cVsxXSxxPVswXTtjb250aW51ZTtjYXNlIDc6cT1CLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChqPShqPUIudHJ5cykubGVuZ3RoPjAmJmpbai5sZW5ndGgtMV0pfHw2IT09cVswXSYmMiE9PXFbMF0pKXtC'@;
put 'PTA7Y29udGludWV9aWYoMz09PXFbMF0mJighanx8cVsxXT5qWzBdJiZxWzFdPGpbM10pKXtCLmxhYmVsPXFbMV07YnJlYWt9aWYoNj09PXFbMF0mJkIubGFiZWw8alsxXSl7Qi5sYWJlbD1qWzFdLGo9cTticmVha31pZihqJiZCLmxhYmVsPGpbMl0pe0IubGFiZWw9alsyXSxCLm9wcy5wdXNo'@;
put 'KHEpO2JyZWFrfWpbMl0mJkIub3BzLnBvcCgpLEIudHJ5cy5wb3AoKTtjb250aW51ZX1xPUkuY2FsbChLLEIpfWNhdGNoKGVlKXtxPVs2LGVlXSxFPTB9ZmluYWxseXtrPWo9MH1pZig1JnFbMF0pdGhyb3cgcVsxXTtyZXR1cm57dmFsdWU6cVswXT9xWzFdOnZvaWQgMCxkb25lOiEwfX0oW1gs'@;
put 'VV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmFzeW5jRm9yRWFjaD12b2lkIDAsTy5hc3luY0ZvckVhY2g9ZnVuY3Rpb24oSyxJKXtyZXR1cm4gUih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaztyZXR1cm4geih0aGlz'@;
put 'LGZ1bmN0aW9uKEUpe3N3aXRjaChFLmxhYmVsKXtjYXNlIDA6az0wLEUubGFiZWw9MTtjYXNlIDE6cmV0dXJuIGs8Sy5sZW5ndGg/WzQsSShLW2tdLGssSyldOlszLDRdO2Nhc2UgMjpFLnNlbnQoKSxFLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBrKyssWzMsMV07Y2FzZSA0OnJldHVyblsyXX19'@;
put 'KX0pfX0sMzc5MzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jb21wYXJlVGltZXN0YW1wcz12b2lkIDAsTy5jb21wYXJlVGltZXN0YW1wcz1mdW5jdGlvbihSLHope3JldHVybiB6LnRpbWVzdGFtcC5nZXRU'@;
put 'aW1lKCktUi50aW1lc3RhbXAuZ2V0VGltZSgpfX0sMjQwMjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNGb3JtYXRzVGFibGU9Ty5jb252ZXJ0VG9DU1Y9dm9pZCAwO3ZhciBL'@;
put 'PVIoNjQ2NyksST1SKDk3NzgpO08uY29udmVydFRvQ1NWPWZ1bmN0aW9uKEUsail7dmFyIFY7aWYoIUVbal0pdGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKCJObyB0YWJsZSBwcm92aWRlZCB0byBiZSBjb252ZXJ0ZWQgdG8gQ1NWLiIsIkVycm9yIHdoaWxlIGNvbnZlcnRpbmcgdG8gQ1NWLiAi'@;
put 'KTt2YXIgQj1FW2pdO2lmKCFBcnJheS5pc0FycmF5KEIpKXJldHVybiIiO3ZhciBZLFg9bnVsbD09PShWPUVbIiQiLmNvbmNhdChqKV0pfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLmZvcm1hdHMsVT1bXSxxPSExO1gmJihVPU9iamVjdC5rZXlzKFgpLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIiIu'@;
put 'Y29uY2F0KHRlLCI6IikuY29uY2F0KFhbdGVdKX0pKTt2YXIgZWU9T2JqZWN0LmtleXMoQlswXSk7cmV0dXJuIGVlLmZvckVhY2goZnVuY3Rpb24odGUpe2lmKCFYfHwhT2JqZWN0LmtleXMoWCkuaW5jbHVkZXModGUpKXt2YXIgb2U9ITEsc2U9ITE7aWYoQi5mb3JFYWNoKGZ1bmN0aW9uKGIp'@;
put 'e251bGw9PT1iW3RlXXx8Im51bWJlciI9PXR5cGVvZiBiW3RlXT9vZT0hMDoic3RyaW5nIj09dHlwZW9mIGJbdGVdJiYoMCxLLmlzU3BlY2lhbE1pc3NpbmcpKGJbdGVdKSYmKHNlPSEwKX0pLG9lJiZzZSlVLnB1c2goIiIuY29uY2F0KHRlLCI6YmVzdC4iKSksWHx8KFg9e30pLFhbdGVdPSJi'@;
put 'ZXN0LiI7ZWxzZXt2YXIgaGU9bnVsbCx1ZT0hMSxjZT0tMSxHPUIubWFwKGZ1bmN0aW9uKGIsRCl7aWYoYlt0ZV18fCIiPT09Ylt0ZV0pe2hlP3VlfHwoY2U9KHVlPSgiIj09PWJbdGVdfHwic3RyaW5nIj09dHlwZW9mIGJbdGVdPyJjaGFycyI6Im51bWJlciIpIT09aGUpP0QrMTotMSk6aGU9'@;
put 'IiI9PT1iW3RlXXx8InN0cmluZyI9PXR5cGVvZiBiW3RlXT8iY2hhcnMiOiJudW1iZXIiO3ZhciBOPXZvaWQgMDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGJbdGVdJiYoTj1rKGJbdGVdKSksTn19KS5zb3J0KGZ1bmN0aW9uKGIsRCl7cmV0dXJuIEQtYn0pWzBdO0cmJkc+MzI3NjUmJihxPSEw'@;
put 'KSx1ZSYmei5lcnJvcigiUm93ICgiLmNvbmNhdChjZSwiKSwgQ29sdW1uICgiKS5jb25jYXQodGUsIikgaGFzIG1peGVkIHR5cGVzOiBFUlJPUiIpKSxVLnB1c2goIiIuY29uY2F0KHRlLCI6IikuY29uY2F0KCJjaGFycyI9PT1oZT8iJGNoYXIiOiIiKS5jb25jYXQoR3x8KCJjaGFycyI9PT1o'@;
put 'ZT8iMSI6ImJlc3QiKSwiLiIpKX19fSksWCYmKFU9VS5zb3J0KGZ1bmN0aW9uKHRlLG9lKXtyZXR1cm4gZWUuaW5kZXhPZih0ZS5yZXBsYWNlKC86LiovLCIiKSktZWUuaW5kZXhPZihvZS5yZXBsYWNlKC86LiovLCIiKSl9KSkscT8iRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiOihZPUIu'@;
put 'bWFwKGZ1bmN0aW9uKHRlKXtyZXR1cm4gT2JqZWN0LmtleXModGUpLm1hcChmdW5jdGlvbihvZSxzZSl7dmFyIGhlLHVlPXRlW29lXTtpZigibnVtYmVyIj09dHlwZW9mIHVlKXJldHVybiB1ZTtpZihoZT1udWxsPT09dWU/IiI6dWUsWCYmImJlc3QuIj09PVhbb2VdKXtpZihoZSYmISgwLEsu'@;
put 'aXNTcGVjaWFsTWlzc2luZykoaGUpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gJ0EnIHRvICdaJywgJ18nLCAnLlthLXpdJywgJy5fJyIpO3ZhciBjZT1oZS5pbmNsdWRlcygiLiIpPyIiOiIuIjty'@;
put 'ZXR1cm4iIi5jb25jYXQoY2UpLmNvbmNhdChoZS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gaGU9aGUucmVwbGFjZSgvIi9nLCciIicpLChoZT0nIicuY29uY2F0KGhlLCciJykpLnN1YnN0cmluZygxLGhlLmxlbmd0aC0xKS5zZWFyY2goLyhcdHxcbnxccnwsfFwnfFwiKS9nbSk8MCYmKGhlPWhl'@;
put 'LnN1YnN0cmluZygxLGhlLmxlbmd0aC0xKSksIiI9PT0oaGU9aGUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSkmJlVbc2VdLmluY2x1ZGVzKCJiZXN0IikmJihoZT0iLiIpLGhlfSkuam9pbigiLCIpfSksVS5qb2luKCIsIikucmVwbGFjZSgvLC9nLCIgIikrIlxyXG4iK1kuam9pbigiXHJcbiIp'@;
put 'KX0sTy5pc0Zvcm1hdHNUYWJsZT1mdW5jdGlvbihFKXtyZXR1cm4vXlwkLiovLnRlc3QoRSl9O3ZhciBrPWZ1bmN0aW9uKEUpe2Zvcih2YXIgaj1FLmxlbmd0aCxWPUUubGVuZ3RoLTE7Vj49MDtWLS0pe3ZhciBCPUUuY2hhckNvZGVBdChWKTtCPjEyNyYmQjw9MjA0Nz9qKys6Qj4yMDQ3JiZC'@;
put 'PD02NTUzNSYmKGorPTIpLEI+PTU2MzIwJiZCPD01NzM0MyYmVi0tfXJldHVybiBqfX0sNjExNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmNyZWF0ZUF4aW9zSW5zdGFuY2U9dm9pZCAwO3ZhciB6PVIo'@;
put 'OTY2OSk7Ty5jcmVhdGVBeGlvc0luc3RhbmNlPWZ1bmN0aW9uKEssSSl7cmV0dXJuIHouZGVmYXVsdC5jcmVhdGUoe2Jhc2VVUkw6SyxodHRwc0FnZW50Okl9KX19LDk4MjU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pLE8uZGVsYXk9dm9pZCAwLE8uZGVsYXk9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHope3JldHVybiBzZXRUaW1lb3V0KHosUil9KX19LDk5MDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhp'@;
put 'cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRocm93KG9lKSl9Y2F0Y2go'@;
put 'c2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSkubmV4dCgpKX0pfSxrPXRo'@;
put 'aXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJvdzplZSgxKSxyZXR1cm46'@;
put 'ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdl'@;
put 'bmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9uZSlyZXR1cm4gWDtzd2l0'@;
put 'Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5v'@;
put 'cHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0mJnNlWzFdPFhbM10pKXtx'@;
put 'LmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9'@;
put 'c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KSxPLmZldGNoTG9nPU8uZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7dmFyIEU9Uig5Nzc4KTtPLmZldGNoTG9nQnlDaHVua3M9ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIEkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9u'@;
put 'KFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsTy5mZXRjaExvZykoaixWLEIsMCxZKV07Y2FzZSAxOnJldHVyblsyLFguc2VudCgpXX19KX0pfSxPLmZldGNoTG9nPWZ1bmN0aW9uKGosVixCLFksWCl7cmV0dXJuIEkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXt2YXIgVSxxLGVlLHRlLG9lO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOlU9ei5sb2dnZXJ8fEsscT0iIixlZT1YPDFlND9YOjFlNCxzZS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gVS5pbmZvKCJGZXRjaGluZyBsb2dzIGZyb20gbGluZSBubzog'@;
put 'Ii5jb25jYXQoWSsxLCIgdG8gIikuY29uY2F0KFkrZWUsIiBvZiAiKS5jb25jYXQoWCwiLiIpKSxbNCxqLmdldCgiIi5jb25jYXQoQiwiP3N0YXJ0PSIpLmNvbmNhdChZLCImbGltaXQ9IikuY29uY2F0KGVlKSxWKS50aGVuKGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUucmVzdWx0fSkuY2F0Y2go'@;
put 'ZnVuY3Rpb24oaGUpe3Rocm93KDAsRS5wcmVmaXhNZXNzYWdlKShoZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsb2cuICIpfSldO2Nhc2UgMjppZigwPT09KHRlPXNlLnNlbnQoKSkuaXRlbXMubGVuZ3RoKXJldHVyblszLDRdO29lPXRlLml0ZW1zLm1hcChmdW5jdGlvbihoZSl7cmV0dXJuIGhl'@;
put 'LmxpbmV9KS5qb2luKCJcbiIpLHErPW9lLFkrPWVlLHNlLmxhYmVsPTM7Y2FzZSAzOmlmKFk8WClyZXR1cm5bMywxXTtzZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMixxXX19KX0pfX0sNzE0OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLE8uZm9ybWF0RGF0YUZvclJlcXVlc3Q9dm9pZCAwO3ZhciB6PVIoMjQwMiksSz1SKDQ3OTkpO08uZm9ybWF0RGF0YUZvclJlcXVlc3Q9ZnVuY3Rpb24oSSl7dmFyIGs9W10sRT0wLGo9e307Zm9yKHZhciBWIGluIEkpaWYoISgwLHouaXNGb3JtYXRzVGFibGUpKFYp'@;
put 'fHwhT2JqZWN0LmtleXMoSSkuaW5jbHVkZXMoVi5yZXBsYWNlKC9eXCQvLCIiKSkpe0UrKywoMCx6LmlzRm9ybWF0c1RhYmxlKShWKXx8ay5wdXNoKFYpO3ZhciBCPSgwLHouY29udmVydFRvQ1NWKShJLFYpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1CKXRocm93IG5ldyBF'@;
put 'cnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZihCLmxlbmd0aD4xNmUzKXt2YXIgWT0oMCxLLnNwbGl0Q2h1bmtzKShCKTtqWyJzYXNqcyIuY29uY2F0KEUsImRhdGEwIildPVkubGVuZ3RoLFkuZm9yRWFjaChm'@;
put 'dW5jdGlvbihYLFUpe2pbInNhc2pzIi5jb25jYXQoRSwiZGF0YSIpLmNvbmNhdChVKzEpXT1YfSl9ZWxzZSBqWyJzYXNqcyIuY29uY2F0KEUsImRhdGEiKV09Qn1yZXR1cm4gai5zYXNqc190YWJsZXM9ay5qb2luKCIgIiksan19LDg0NTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRGb3JtRGF0YT12b2lkIDA7dmFyIHo9Uig1OTI4KSxLPVIoNjIzMCk7Ty5nZXRGb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybigwLHouaXNOb2RlKSgpP25ldyBLOm5ldyBGb3JtRGF0YX19LDE4ODQ6KE0sTyxS'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRWYWxpZEpzb249dm9pZCAwO3ZhciB6PVIoMTM5NSk7Ty5nZXRWYWxpZEpzb249ZnVuY3Rpb24oSyl7dHJ5e2lmKG51bGw9PUspdGhyb3cgbmV3IHouSW52YWxpZEpz'@;
put 'b25FcnJvcjtpZihBcnJheS5pc0FycmF5KEspKXRocm93IG5ldyB6Lkpzb25QYXJzZUFycmF5RXJyb3I7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBLP0s6IiI9PT1LP3t9OkpTT04ucGFyc2UoSyl9Y2F0Y2goSSl7dGhyb3cgSSBpbnN0YW5jZW9mIHouSnNvblBhcnNlQXJyYXlFcnJvcj9JOm5l'@;
put 'dyB6LkludmFsaWRKc29uRXJyb3J9fX0sNTkyODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmplY3QuZ2V0T3duUHJv'@;
put 'cGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01vZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChWPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGosVil9OmZ1bmN0aW9u'@;
put 'KEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDMzMDIpLE8pLEsoUig3OTIyKSxPKSxLKFIoMzc5MyksTyksSyhSKDI0MDIpLE8pLEsoUig2MTE2KSxPKSxLKFIoOTgyNSksTyksSyhSKDk5MCksTyksSyhSKDE4ODQpLE8pLEsoUig0MjQzKSxPKSxL'@;
put 'KFIoMjU3KSxPKSxLKFIoMiksTyksSyhSKDI2MTUpLE8pLEsoUigyOTIwKSxPKSxLKFIoMjQyMiksTyksSyhSKDMxKSxPKSxLKFIoNjUxNSksTyksSyhSKDY0MTYpLE8pLEsoUigyODEzKSxPKSxLKFIoOTg5NiksTyksSyhSKDQ3OTkpLE8pLEsoUig0NTE2KSxPKSxLKFIoODQ1OCksTyl9LDQy'@;
put 'NDM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzTm9kZT12b2lkIDAsTy5pc05vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09eiYmbnVsbCE9ei52ZXJzaW9ucyYmbnVs'@;
put 'bCE9ei52ZXJzaW9ucy5ub2RlfX0sMjU3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxPLmlzUmVsYXRpdmVQYXRoPWZ1bmN0aW9uKFIpe3JldHVybiEhUiYmIVIuc3Rh'@;
put 'cnRzV2l0aCgiLyIpfX0sMjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc1VyaT12b2lkIDAsTy5pc1VyaT1mdW5jdGlvbihSKXtyZXR1cm4vXlwvZm9sZGVyc1wvZm9sZGVyc1wvLy50ZXN0KFIpfX0sMjYx'@;
put 'NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc1VybD12b2lkIDAsTy5pc1VybD1mdW5jdGlvbihSKXt0cnl7dmFyIHo9bmV3IFVSTChSKTtpZighWyJodHRwOiIsImh0dHBzOiJdLmluY2x1ZGVzKHoucHJv'@;
put 'dG9jb2wpKXJldHVybiExfWNhdGNoe3JldHVybiExfXJldHVybiEwfX0sMTIxMDpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUixWLHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKFUscSl7'@;
put 'ZnVuY3Rpb24gZWUoc2Upe3RyeXtvZShYLm5leHQoc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIHRlKHNlKXt0cnl7b2UoWC50aHJvdyhzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gb2Uoc2Upe3ZhciBoZTtzZS5kb25lP1Uoc2UudmFsdWUpOihoZT1zZS52YWx1ZSxoZSBp'@;
put 'bnN0YW5jZW9mIFk/aGU6bmV3IFkoZnVuY3Rpb24odWUpe3VlKGhlKX0pKS50aGVuKGVlLHRlKX1vZSgoWD1YLmFwcGx5KFYsQnx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVixCKXt2YXIgWSxYLFUscSxlZT17bGFiZWw6MCxzZW50OmZ1bmN0'@;
put 'aW9uKCl7aWYoMSZVWzBdKXRocm93IFVbMV07cmV0dXJuIFVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcT17bmV4dDp0ZSgwKSx0aHJvdzp0ZSgxKSxyZXR1cm46dGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihxW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpc30pLHE7ZnVuY3Rpb24gdGUob2Upe3JldHVybiBmdW5jdGlvbihzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtpZihZKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2VlOyl0cnl7aWYoWT0xLFgmJihVPTImaGVbMF0/WC5y'@;
put 'ZXR1cm46aGVbMF0/WC50aHJvd3x8KChVPVgucmV0dXJuKSYmVS5jYWxsKFgpLDApOlgubmV4dCkmJiEoVT1VLmNhbGwoWCxoZVsxXSkpLmRvbmUpcmV0dXJuIFU7c3dpdGNoKFg9MCxVJiYoaGU9WzImaGVbMF0sVS52YWx1ZV0pLGhlWzBdKXtjYXNlIDA6Y2FzZSAxOlU9aGU7YnJlYWs7Y2Fz'@;
put 'ZSA0OnJldHVybiBlZS5sYWJlbCsrLHt2YWx1ZTpoZVsxXSxkb25lOiExfTtjYXNlIDU6ZWUubGFiZWwrKyxYPWhlWzFdLGhlPVswXTtjb250aW51ZTtjYXNlIDc6aGU9ZWUub3BzLnBvcCgpLGVlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChVPShVPWVlLnRyeXMpLmxlbmd0'@;
put 'aD4wJiZVW1UubGVuZ3RoLTFdKXx8NiE9PWhlWzBdJiYyIT09aGVbMF0pKXtlZT0wO2NvbnRpbnVlfWlmKDM9PT1oZVswXSYmKCFVfHxoZVsxXT5VWzBdJiZoZVsxXTxVWzNdKSl7ZWUubGFiZWw9aGVbMV07YnJlYWt9aWYoNj09PWhlWzBdJiZlZS5sYWJlbDxVWzFdKXtlZS5sYWJlbD1VWzFd'@;
put 'LFU9aGU7YnJlYWt9aWYoVSYmZWUubGFiZWw8VVsyXSl7ZWUubGFiZWw9VVsyXSxlZS5vcHMucHVzaChoZSk7YnJlYWt9VVsyXSYmZWUub3BzLnBvcCgpLGVlLnRyeXMucG9wKCk7Y29udGludWV9aGU9Qi5jYWxsKFYsZWUpfWNhdGNoKHVlKXtoZT1bNix1ZV0sWD0wfWZpbmFsbHl7WT1VPTB9'@;
put 'aWYoNSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm57dmFsdWU6aGVbMF0/aGVbMV06dm9pZCAwLGRvbmU6ITB9fShbb2Usc2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5vcGVuTG9naW5Qcm9tcHQ9dm9pZCAwLChWPVJ8fChSPXt9KSku'@;
put 'c3R5bGVzPSJzYXNqc0FkYXB0ZXJTdHlsZXMiLFYub3ZlcmxheT0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHRCRyIsVi5kaWFsb2c9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0Ijt2YXIgST0ic2FzanMtYWRhcHRlciIsaz17cG9wVXA6IiIuY29uY2F0KEksInBvcFVwIikscG9wVXBCRzoiIi5j'@;
put 'b25jYXQoSSwicG9wVXBCRyIpfTtPLm9wZW5Mb2dpblByb21wdD1mdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihWKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLFksWCxVLHEsZWUsdGUsb2U7cmV0dXJuIEsodGhpcyxmdW5jdGlv'@;
put 'bihzZSl7cmV0dXJuKEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuaWQ9Ui5zdHlsZXMsQi5pbm5lclRleHQ9aiwoWT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaWQ9Ui5vdmVybGF5LFkuY2xhc3NMaXN0LmFkZChrLnBvcFVwQkcpLChYPWRvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImRpdiIpKS5pZD1SLmRpYWxvZyxYLmNsYXNzTGlzdC5hZGQoay5wb3BVcCksKFU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKSkuaW5uZXJUZXh0PSJTZXNzaW9uIEV4cGlyZWQhIixYLmFwcGVuZENoaWxkKFUpLHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiks'@;
put 'KGVlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSkuaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBPSyB0byBsb2dpbi4iLHEuYXBwZW5kQ2hpbGQoZWUpLFguYXBwZW5kQ2hpbGQocSksKHRlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpKS5jbGFz'@;
put 'c0xpc3QuYWRkKCJjYW5jZWwiKSx0ZS5pbm5lclRleHQ9IkNhbmNlbCIsdGUub25jbGljaz1mdW5jdGlvbigpe0UoKSxWKCExKX0sWC5hcHBlbmRDaGlsZCh0ZSksKG9lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpKS5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksb2UuaW5uZXJU'@;
put 'ZXh0PSJPayIsb2Uub25jbGljaz1mdW5jdGlvbigpe0UoKSxWKCEwKX0sWC5hcHBlbmRDaGlsZChvZSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWSksZG9jdW1lbnQu'@;
put 'Ym9keS5hcHBlbmRDaGlsZChYKSxbMl19KX0pfSl9O3ZhciBFPWZ1bmN0aW9uKCl7T2JqZWN0LnZhbHVlcyhSKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe3ZhciBCLFk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVik7bnVsbD09PShCPVk/LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1CfHxCLnJlbW92'@;
put 'ZUNoaWxkKFkpfSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iYXV0byJ9LGo9IlxuLiIuY29uY2F0KGsucG9wVXBCRywiICxcbi4iKS5jb25jYXQoay5wb3BVcCwiIHtcbiAgei1pbmRleDogMTAwMDA7XG59XG4uIikuY29uY2F0KGsucG9wVXAsIiB7XG4gIGJveC1zaXppbmc6IGJv'@;
put 'cmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDQwJTtcbiAgbGVmdDogNTAlO1xuICBwYWRkaW5nOiAwO1xuICBmb250'@;
put 'LXNpemU6IDE0cHg7XG4gIGZvbnQtZmFtaWx5OiAnUFQgU2FucycsIHNhbnMtc2VyaWY7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIHotaW5kZXg6IDk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xu'@;
put 'ICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC1oZWlnaHQ6IDMwMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gaDEge1xuICBib3gt'@;
put 'c2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNXB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBmb250LXNpemU6IDEuMmVtO1xuICBmb250LXdlaWdodDogYm9s'@;
put 'ZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgYm9yZGVyLXdpZHRoOiA1cHg7XG4gIGJvcmRlci1jb2xvcjogYmxhY2s7XG59XG4uIikuY29uY2F0KGsucG9w'@;
put 'VXAsIiA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtMTA4cHgpO1xuICBtYXJnaW46IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94'@;
put 'LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNSU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYm9yZGVyLXN0eWxlOiBub25lIG5vbmUgc29saWQgbm9uZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59'@;
put 'XG4uIikuY29uY2F0KGsucG9wVXAsIiA+IGRpdiA+IHNwYW4ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2lu'@;
put 'OiAwO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMzAwcHg7XG4gIGhlaWdodDogMTA4cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiIC5jYW5jZWwge1xuICBmbG9hdDogbGVmdDtcbn1cbi4iKS5j'@;
put 'b25jYXQoay5wb3BVcCwiIC5jb25maXJtIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBidXR0b24ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9y'@;
put 'ZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxMHB4O1xuICB3aWR0aDogNTAlO1xuICBib3JkZXI6IDFweCBub25lICNjY2M7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJh'@;
put 'Y2tncm91bmQ6IHJnYmEoMSwgMSwgMSwgMC4yKTtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwQkcsIiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlv'@;
put 'bjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvcGFjaXR5OiAwLjk1O1xuICB6LWluZGV4OiA1MDtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50'@;
put 'KCMwMzc4Y2QsICMwMTIwMzYpO1xufVxuIil9LDI5MjA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ubmVlZHNSZXRyeT12b2lkIDAsTy5uZWVkc1JldHJ5PWZ1bmN0aW9uKFIpe3JldHVybiEhUiYmKFIuaW5j'@;
put 'bHVkZXMoJyJlcnJvckNvZGUiOjQwMycpJiZSLmluY2x1ZGVzKCJfY3NyZiIpJiZSLmluY2x1ZGVzKCJYLUNTUkYtVE9LRU4iKXx8Ui5pbmNsdWRlcygnInN0YXR1cyI6NDAzJykmJlIuaW5jbHVkZXMoJyJlcnJvciI6IkZvcmJpZGRlbiInKXx8Ui5pbmNsdWRlcygnInN0YXR1cyI6NDQ5Jykm'@;
put 'JlIuaW5jbHVkZXMoIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MsIHJldHJ5IG9yaWdpbmFsIHJlcXVlc3QiKSl9fSwyNDIyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlR2VuZXJhdGVkQ29kZT12b2lk'@;
put 'IDAsTy5wYXJzZUdlbmVyYXRlZENvZGU9ZnVuY3Rpb24oUil7cmV0dXJuIFIuc3BsaXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKX0pLmpvaW4oIlxyXG4iKX19LDMxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1'@;
put 'MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZVNhc1ZpeWFMb2c9dm9pZCAwLE8ucGFyc2VTYXNWaXlhTG9nPWZ1bmN0aW9uKEspe3ZhciBJO3RyeXtJPUsuaXRlbXM/Sy5pdGVtcy5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIGsubGlu'@;
put 'ZX0pLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoSyl9Y2F0Y2goayl7ei5lcnJvcigiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIGxvZyByZXNwb25zZSIsayksST1LfXJldHVybiBJfX0sNjUxNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZVNvdXJjZUNvZGU9dm9pZCAwLE8ucGFyc2VTb3VyY2VDb2RlPWZ1bmN0aW9uKFIpe3JldHVybiBSLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gei50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1T'@;
put 'dGFydCgpLm1hdGNoKC9eXGQvKX0pLmpvaW4oIlxyXG4iKX19LDY0MTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oayxFLGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oQixZKXtmdW5jdGlv'@;
put 'biBYKGVlKXt0cnl7cShWLm5leHQoZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIFUoZWUpe3RyeXtxKFYudGhyb3coZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIHEoZWUpe3ZhciB0ZTtlZS5kb25lP0IoZWUudmFsdWUpOih0ZT1lZS52YWx1ZSx0ZSBpbnN0YW5jZW9mIGo/'@;
put 'dGU6bmV3IGooZnVuY3Rpb24ob2Upe29lKHRlKX0pKS50aGVuKFgsVSl9cSgoVj1WLmFwcGx5KGssRXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIsWSxYPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0p'@;
put 'dGhyb3cgQlsxXTtyZXR1cm4gQlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBZPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlv'@;
put 'biBVKHEpe3JldHVybiBmdW5jdGlvbihlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihqKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1g7KXRyeXtpZihqPTEsViYmKEI9MiZ0ZVswXT9WLnJldHVybjp0ZVswXT9WLnRocm93fHwo'@;
put 'KEI9Vi5yZXR1cm4pJiZCLmNhbGwoViksMCk6Vi5uZXh0KSYmIShCPUIuY2FsbChWLHRlWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goVj0wLEImJih0ZT1bMiZ0ZVswXSxCLnZhbHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Qj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFgubGFiZWwrKyx7'@;
put 'dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1OlgubGFiZWwrKyxWPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9WC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoQj0oQj1YLnRyeXMpLmxlbmd0aD4wJiZCW0IubGVuZ3RoLTFdKXx8NiE9PXRl'@;
put 'WzBdJiYyIT09dGVbMF0pKXtYPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIUJ8fHRlWzFdPkJbMF0mJnRlWzFdPEJbM10pKXtYLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVswXSYmWC5sYWJlbDxCWzFdKXtYLmxhYmVsPUJbMV0sQj10ZTticmVha31pZihCJiZYLmxhYmVsPEJbMl0p'@;
put 'e1gubGFiZWw9QlsyXSxYLm9wcy5wdXNoKHRlKTticmVha31CWzJdJiZYLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWV9dGU9RS5jYWxsKGssWCl9Y2F0Y2gob2Upe3RlPVs2LG9lXSxWPTB9ZmluYWxseXtqPUI9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0'@;
put 'ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLGVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT12b2lkIDA7dmFyIEk9Uig1OTI4KTtPLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2U9'@;
put 'ZnVuY3Rpb24oayxFLGope3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFYsQjtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFkpe2lmKFY9ay5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBzdHls'@;
put 'ZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sIShCPVY/Vi5zcGxpdCgvIj48XC9pZnJhbWU+fD48XC9pZnJhbWU+LylbMF06bnVsbCkpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmlsZSBVUkwu'@;
put 'Iik7cmV0dXJuWzIsRS5nZXQoaitCLHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oZnVuY3Rpb24oWCl7cmV0dXJuKDAsSS5nZXRWYWxpZEpzb24pKFgucmVzdWx0KX0pXX0pfSl9fSwyODEzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVy'@;
put 'dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDt2YXIgSz1SKDEzOTUpO08ucGFyc2VXZWJvdXRSZXNwb25zZT1mdW5jdGlvbihJLGspe3ZhciBFPSIiO2lmKEkuaW5jbHVkZXMoIj4+d2Vib3V0QkVHSU48PCIpKXRyeXtFPUkuc3BsaXQo'@;
put 'Ij4+d2Vib3V0QkVHSU48PCIpWzFdLnNwbGl0KCI+PndlYm91dEVORDw8IilbMF19Y2F0Y2goail7aWYoayl0aHJvdyBuZXcgSy5XZWJvdXRSZXNwb25zZUVycm9yKGspO0U9IiIsei5lcnJvcihqKX1yZXR1cm4gRX19LDExNzA6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO3ZhciBSPVsiTG9nIE9mZiJdO08uZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9ZnVuY3Rpb24oeil7dmFyIEs9ej8ubWF0Y2goLyJ0aXRsZSI6XHM/Ii4qPyIvKSxJPUs/Llsw'@;
put 'XS5zcGxpdCgiOiIpWzFdLnRyaW0oKSxrPUk/LmluZGV4T2YoIiAiKTtyZXR1cm4gST8oUi5tYXAoZnVuY3Rpb24oRSl7dmFyIGo9ST8uaW5kZXhPZihFKXx8LTE7aj4tMSYmKGs9aitFLmxlbmd0aCl9KSxJLnNsaWNlKGssLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjooTSxPKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5zZXJpYWxpemU9dm9pZCAwLE8uc2VyaWFsaXplPWZ1bmN0aW9uKFIpe3ZhciB6PVtdO2Zvcih2YXIgSyBpbiBSKWlmKFIuaGFzT3duUHJvcGVydHkoSykpaWYoUltLXWluc3RhbmNl'@;
put 'b2YgQXJyYXkpZm9yKHZhciBJPTAsaz1SW0tdLmxlbmd0aDtJPGs7SSsrKXoucHVzaChlbmNvZGVVUklDb21wb25lbnQoSykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChSW0tdW0ldKSk7ZWxzZSB6LnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KEspKyI9IitlbmNvZGVVUklDb21wb25lbnQoUltL'@;
put 'XSkpO3JldHVybiB6LmpvaW4oIiYiKX19LDQ3OTk6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uc3BsaXRDaHVua3M9dm9pZCAwLE8uc3BsaXRDaHVua3M9ZnVuY3Rpb24oUil7Zm9yKHZhciB6PTE2ZTMsSz1N'@;
put 'YXRoLmNlaWwoUi5sZW5ndGgveiksST1uZXcgQXJyYXkoSyksaz0wLEU9MDtrPEs7KytrLEUrPXopSVtrXT1SLnN1YnN0cihFLHopO3JldHVybiBJfX0sNDUxNjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy52'@;
put 'YWxpZGF0ZUlucHV0PU8uSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkU9Ty5NT1JFX0lORk89dm9pZCAwLE8uTU9SRV9JTkZPPSJGb3IgbW9yZSBpbmZvIHNlZSBodHRwczovL3Nhc2pzLmlvL3Nhc2pzLWFkYXB0ZXIvI3JlcXVlc3QtcmVzcG9uc2UiLE8uSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkU9'@;
put 'IlBhcmFtZXRlciBkYXRhIGNvbnRhaW5zIGludmFsaWQgdGFibGUgc3RydWN0dXJlLiAiLmNvbmNhdChPLk1PUkVfSU5GTyksTy52YWxpZGF0ZUlucHV0PWZ1bmN0aW9uKHope2lmKG51bGw9PT16KXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PVIoeikpcmV0dXJue3N0'@;
put 'YXR1czohMSxtc2c6Ty5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07dmFyIEs9ZnVuY3Rpb24oWCl7cmV0dXJuIFgubWF0Y2goL15cJC4qLykmJk9iamVjdC5rZXlzKHopLmluY2x1ZGVzKFgucmVwbGFjZSgvXlwkLywiIikpfTtmb3IodmFyIEkgaW4geil7aWYoIUkubWF0Y2goL15bYS16QS1a'@;
put 'X10vKSYmIUsoSSkpcmV0dXJue3N0YXR1czohMSxtc2c6IkZpcnN0IGxldHRlciBvZiB0YWJsZSBzaG91bGQgYmUgYWxwaGFiZXQgb3IgdW5kZXJzY29yZS4ifTtpZighSS5tYXRjaCgvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLykmJiFLKEkpKXJldHVybntzdGF0dXM6ITEsbXNnOiJUYWJs'@;
put 'ZSBuYW1lIHNob3VsZCBiZSBhbHBoYW51bWVyaWMuIn07aWYoSS5sZW5ndGg+MzIpcmV0dXJue3N0YXR1czohMSxtc2c6Ik1heGltdW0gbGVuZ3RoIGZvciB0YWJsZSBuYW1lIGNvdWxkIGJlIDMyIGNoYXJhY3RlcnMuIn07aWYoIkFycmF5IiE9PVIoeltJXSkmJiFLKEkpKXJldHVybntzdGF0'@;
put 'dXM6ITEsbXNnOk8uSU5WQUxJRF9UQUJMRV9TVFJVQ1RVUkV9O2Zvcih2YXIgaz0wLEU9eltJXTtrPEUubGVuZ3RoO2srKyl7dmFyIGo9RVtrXTtpZigib2JqZWN0IiE9PVIoaikpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlICIuY29uY2F0KEksIiBjb250YWlucyBpbnZhbGlkIHN0cnVj'@;
put 'dHVyZS4gIikuY29uY2F0KE8uTU9SRV9JTkZPKX07Zm9yKHZhciBWPTAsQj1PYmplY3Qua2V5cyhqKTtWPEIubGVuZ3RoO1YrKyl7dmFyIFk9QltWXTtpZih2b2lkIDA9PT1qW1ldKXJldHVybntzdGF0dXM6ITEsbXNnOiJBIHJvdyBpbiB0YWJsZSAiLmNvbmNhdChJLCIgY29udGFpbnMgaW52'@;
put 'YWxpZCB2YWx1ZS4gQ2FuJ3QgYXNzaWduIHVuZGVmaW5lZCB0byAiKS5jb25jYXQoWSwiLiIpfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07dmFyIFI9ZnVuY3Rpb24oeil7cmV0dXJuIEFycmF5LmlzQXJyYXkoeik/IkFycmF5Ijp0eXBlb2Ygen19LDg5ODE6KE0sTyk9PnsidXNlIHN0'@;
put 'cmljdCI7Ty5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24oUil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi56KXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygelt6Lmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKEssSSk9PntSLmNhbGwodGhpcywuLi56LChrLEUpPT5u'@;
put 'dWxsIT1rP0koayk6SyhFKSl9KTtSLmFwcGx5KHRoaXMseil9LCJuYW1lIix7dmFsdWU6Ui5uYW1lfSl9LE8uZnJvbVByb21pc2U9ZnVuY3Rpb24oUil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi56KXtjb25zdCBLPXpbei5sZW5ndGgtMV07aWYoImZ1bmN0aW9u'@;
put 'IiE9dHlwZW9mIEspcmV0dXJuIFIuYXBwbHkodGhpcyx6KTtSLmFwcGx5KHRoaXMsei5zbGljZSgwLC0xKSkudGhlbihJPT5LKG51bGwsSSksSyl9LCJuYW1lIix7dmFsdWU6Ui5uYW1lfSl9fSw0NTY0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig3NDE4KSxLPVIoNzEyOSksST0v'@;
put 'XltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLGs9L1tcblxyXHRdL2csRT0vXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlwvXC8vLGo9LzpcZCskLyxWPS9eKFthLXpdW2EtejAtOS4rLV0qOik/KFwvXC8p'@;
put 'PyhbXFwvXSspPyhbXFNcc10qKS9pLEI9L15bYS16QS1aXTovO2Z1bmN0aW9uIFkoc2Upe3JldHVybihzZXx8IiIpLnRvU3RyaW5nKCkucmVwbGFjZShJLCIiKX12YXIgWD1bWyIjIiwiaGFzaCJdLFsiPyIsInF1ZXJ5Il0sZnVuY3Rpb24oc2UsaGUpe3JldHVybiBlZShoZS5wcm90b2NvbCk/'@;
put 'c2UucmVwbGFjZSgvXFwvZywiLyIpOnNlfSxbIi8iLCJwYXRobmFtZSJdLFsiQCIsImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihcZCopJC8sInBvcnQiLHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLFU9e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlv'@;
put 'biBxKHNlKXt2YXIgaGUsdWU9KHR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT1SLmc/Ui5nOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5sb2NhdGlvbnx8e30sY2U9e30sRz10eXBlb2Yoc2U9c2V8fHVlKTtpZigiYmxvYjoiPT09c2UucHJvdG9jb2wpY2U9bmV3IG9lKHVuZXNj'@;
put 'YXBlKHNlLnBhdGhuYW1lKSx7fSk7ZWxzZSBpZigic3RyaW5nIj09PUcpZm9yKGhlIGluIGNlPW5ldyBvZShzZSx7fSksVSlkZWxldGUgY2VbaGVdO2Vsc2UgaWYoIm9iamVjdCI9PT1HKXtmb3IoaGUgaW4gc2UpaGUgaW4gVXx8KGNlW2hlXT1zZVtoZV0pO3ZvaWQgMD09PWNlLnNsYXNoZXMm'@;
put 'JihjZS5zbGFzaGVzPUUudGVzdChzZS5ocmVmKSl9cmV0dXJuIGNlfWZ1bmN0aW9uIGVlKHNlKXtyZXR1cm4iZmlsZToiPT09c2V8fCJmdHA6Ij09PXNlfHwiaHR0cDoiPT09c2V8fCJodHRwczoiPT09c2V8fCJ3czoiPT09c2V8fCJ3c3M6Ij09PXNlfWZ1bmN0aW9uIHRlKHNlLGhlKXtzZT0o'@;
put 'c2U9WShzZSkpLnJlcGxhY2UoaywiIiksaGU9aGV8fHt9O3ZhciB1ZSxjZT1WLmV4ZWMoc2UpLEc9Y2VbMV0/Y2VbMV0udG9Mb3dlckNhc2UoKToiIixiPSEhY2VbMl0sRD0hIWNlWzNdLEg9MDtyZXR1cm4gYj9EPyh1ZT1jZVsyXStjZVszXStjZVs0XSxIPWNlWzJdLmxlbmd0aCtjZVszXS5s'@;
put 'ZW5ndGgpOih1ZT1jZVsyXStjZVs0XSxIPWNlWzJdLmxlbmd0aCk6RD8odWU9Y2VbM10rY2VbNF0sSD1jZVszXS5sZW5ndGgpOnVlPWNlWzRdLCJmaWxlOiI9PT1HP0g+PTImJih1ZT11ZS5zbGljZSgyKSk6ZWUoRyk/dWU9Y2VbNF06Rz9iJiYodWU9dWUuc2xpY2UoMikpOkg+PTImJmVlKGhl'@;
put 'LnByb3RvY29sKSYmKHVlPWNlWzRdKSx7cHJvdG9jb2w6RyxzbGFzaGVzOmJ8fGVlKEcpLHNsYXNoZXNDb3VudDpILHJlc3Q6dWV9fWZ1bmN0aW9uIG9lKHNlLGhlLHVlKXtpZihzZT0oc2U9WShzZSkpLnJlcGxhY2UoaywiIiksISh0aGlzIGluc3RhbmNlb2Ygb2UpKXJldHVybiBuZXcgb2Uo'@;
put 'c2UsaGUsdWUpO3ZhciBjZSxHLGIsRCxILE4sZz1YLnNsaWNlKCksQz10eXBlb2YgaGUsUz10aGlzLHY9MDtmb3IoIm9iamVjdCIhPT1DJiYic3RyaW5nIiE9PUMmJih1ZT1oZSxoZT1udWxsKSx1ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIHVlJiYodWU9Sy5wYXJzZSksY2U9IShHPXRlKHNlfHwi'@;
put 'IixoZT1xKGhlKSkpLnByb3RvY29sJiYhRy5zbGFzaGVzLFMuc2xhc2hlcz1HLnNsYXNoZXN8fGNlJiZoZS5zbGFzaGVzLFMucHJvdG9jb2w9Ry5wcm90b2NvbHx8aGUucHJvdG9jb2x8fCIiLHNlPUcucmVzdCwoImZpbGU6Ij09PUcucHJvdG9jb2wmJigyIT09Ry5zbGFzaGVzQ291bnR8fEIu'@;
put 'dGVzdChzZSkpfHwhRy5zbGFzaGVzJiYoRy5wcm90b2NvbHx8Ry5zbGFzaGVzQ291bnQ8Mnx8IWVlKFMucHJvdG9jb2wpKSkmJihnWzNdPVsvKC4qKS8sInBhdGhuYW1lIl0pO3Y8Zy5sZW5ndGg7disrKSJmdW5jdGlvbiIhPXR5cGVvZihEPWdbdl0pPyhOPURbMV0sKGI9RFswXSkhPWI/U1tO'@;
put 'XT1zZToic3RyaW5nIj09dHlwZW9mIGI/fihIPSJAIj09PWI/c2UubGFzdEluZGV4T2YoYik6c2UuaW5kZXhPZihiKSkmJigibnVtYmVyIj09dHlwZW9mIERbMl0/KFNbTl09c2Uuc2xpY2UoMCxIKSxzZT1zZS5zbGljZShIK0RbMl0pKTooU1tOXT1zZS5zbGljZShIKSxzZT1zZS5zbGljZSgw'@;
put 'LEgpKSk6KEg9Yi5leGVjKHNlKSkmJihTW05dPUhbMV0sc2U9c2Uuc2xpY2UoMCxILmluZGV4KSksU1tOXT1TW05dfHxjZSYmRFszXSYmaGVbTl18fCIiLERbNF0mJihTW05dPVNbTl0udG9Mb3dlckNhc2UoKSkpOnNlPUQoc2UsUyk7dWUmJihTLnF1ZXJ5PXVlKFMucXVlcnkpKSxjZSYmaGUu'@;
put 'c2xhc2hlcyYmIi8iIT09Uy5wYXRobmFtZS5jaGFyQXQoMCkmJigiIiE9PVMucGF0aG5hbWV8fCIiIT09aGUucGF0aG5hbWUpJiYoUy5wYXRobmFtZT1mdW5jdGlvbihwLHcpe2lmKCIiPT09cClyZXR1cm4gdztmb3IodmFyIEo9KHd8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25j'@;
put 'YXQocC5zcGxpdCgiLyIpKSxuZT1KLmxlbmd0aCxkZT1KW25lLTFdLGZlPSExLHhlPTA7bmUtLTspIi4iPT09SltuZV0/Si5zcGxpY2UobmUsMSk6Ii4uIj09PUpbbmVdPyhKLnNwbGljZShuZSwxKSx4ZSsrKTp4ZSYmKDA9PT1uZSYmKGZlPSEwKSxKLnNwbGljZShuZSwxKSx4ZS0tKTtyZXR1'@;
put 'cm4gZmUmJkoudW5zaGlmdCgiIiksIi4iIT09ZGUmJiIuLiIhPT1kZXx8Si5wdXNoKCIiKSxKLmpvaW4oIi8iKX0oUy5wYXRobmFtZSxoZS5wYXRobmFtZSkpLCIvIiE9PVMucGF0aG5hbWUuY2hhckF0KDApJiZlZShTLnByb3RvY29sKSYmKFMucGF0aG5hbWU9Ii8iK1MucGF0aG5hbWUpLHoo'@;
put 'Uy5wb3J0LFMucHJvdG9jb2wpfHwoUy5ob3N0PVMuaG9zdG5hbWUsUy5wb3J0PSIiKSxTLnVzZXJuYW1lPVMucGFzc3dvcmQ9IiIsUy5hdXRoJiYofihIPVMuYXV0aC5pbmRleE9mKCI6IikpPyhTLnVzZXJuYW1lPVMuYXV0aC5zbGljZSgwLEgpLFMudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9u'@;
put 'ZW50KGRlY29kZVVSSUNvbXBvbmVudChTLnVzZXJuYW1lKSksUy5wYXNzd29yZD1TLmF1dGguc2xpY2UoSCsxKSxTLnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoUy5wYXNzd29yZCkpKTpTLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVV'@;
put 'UklDb21wb25lbnQoUy5hdXRoKSksUy5hdXRoPVMucGFzc3dvcmQ/Uy51c2VybmFtZSsiOiIrUy5wYXNzd29yZDpTLnVzZXJuYW1lKSxTLm9yaWdpbj0iZmlsZToiIT09Uy5wcm90b2NvbCYmZWUoUy5wcm90b2NvbCkmJlMuaG9zdD9TLnByb3RvY29sKyIvLyIrUy5ob3N0OiJudWxsIixTLmhy'@;
put 'ZWY9Uy50b1N0cmluZygpfW9lLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHNlLGhlLHVlKXt2YXIgY2U9dGhpcztzd2l0Y2goc2Upe2Nhc2UicXVlcnkiOiJzdHJpbmciPT10eXBlb2YgaGUmJmhlLmxlbmd0aCYmKGhlPSh1ZXx8Sy5wYXJzZSkoaGUpKSxjZVtzZV09aGU7YnJlYWs7Y2FzZSJw'@;
put 'b3J0IjpjZVtzZV09aGUseihoZSxjZS5wcm90b2NvbCk/aGUmJihjZS5ob3N0PWNlLmhvc3RuYW1lKyI6IitoZSk6KGNlLmhvc3Q9Y2UuaG9zdG5hbWUsY2Vbc2VdPSIiKTticmVhaztjYXNlImhvc3RuYW1lIjpjZVtzZV09aGUsY2UucG9ydCYmKGhlKz0iOiIrY2UucG9ydCksY2UuaG9zdD1o'@;
put 'ZTticmVhaztjYXNlImhvc3QiOmNlW3NlXT1oZSxqLnRlc3QoaGUpPyhoZT1oZS5zcGxpdCgiOiIpLGNlLnBvcnQ9aGUucG9wKCksY2UuaG9zdG5hbWU9aGUuam9pbigiOiIpKTooY2UuaG9zdG5hbWU9aGUsY2UucG9ydD0iIik7YnJlYWs7Y2FzZSJwcm90b2NvbCI6Y2UucHJvdG9jb2w9aGUu'@;
put 'dG9Mb3dlckNhc2UoKSxjZS5zbGFzaGVzPSF1ZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2giOmlmKGhlKXt2YXIgRz0icGF0aG5hbWUiPT09c2U/Ii8iOiIjIjtjZVtzZV09aGUuY2hhckF0KDApIT09Rz9HK2hlOmhlfWVsc2UgY2Vbc2VdPWhlO2JyZWFrO2Nhc2UidXNlcm5hbWUi'@;
put 'OmNhc2UicGFzc3dvcmQiOmNlW3NlXT1lbmNvZGVVUklDb21wb25lbnQoaGUpO2JyZWFrO2Nhc2UiYXV0aCI6dmFyIGI9aGUuaW5kZXhPZigiOiIpO35iPyhjZS51c2VybmFtZT1oZS5zbGljZSgwLGIpLGNlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQo'@;
put 'Y2UudXNlcm5hbWUpKSxjZS5wYXNzd29yZD1oZS5zbGljZShiKzEpLGNlLnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoY2UucGFzc3dvcmQpKSk6Y2UudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChoZSkpfWZvcih2'@;
put 'YXIgRD0wO0Q8WC5sZW5ndGg7RCsrKXt2YXIgSD1YW0RdO0hbNF0mJihjZVtIWzFdXT1jZVtIWzFdXS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gY2UuYXV0aD1jZS5wYXNzd29yZD9jZS51c2VybmFtZSsiOiIrY2UucGFzc3dvcmQ6Y2UudXNlcm5hbWUsY2Uub3JpZ2luPSJmaWxlOiIhPT1jZS5w'@;
put 'cm90b2NvbCYmZWUoY2UucHJvdG9jb2wpJiZjZS5ob3N0P2NlLnByb3RvY29sKyIvLyIrY2UuaG9zdDoibnVsbCIsY2UuaHJlZj1jZS50b1N0cmluZygpLGNlfSx0b1N0cmluZzpmdW5jdGlvbihzZSl7c2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZXx8KHNlPUsuc3RyaW5naWZ5KTt2YXIgaGUs'@;
put 'dWU9dGhpcyxjZT11ZS5ob3N0LEc9dWUucHJvdG9jb2w7RyYmIjoiIT09Ry5jaGFyQXQoRy5sZW5ndGgtMSkmJihHKz0iOiIpO3ZhciBiPUcrKHVlLnByb3RvY29sJiZ1ZS5zbGFzaGVzfHxlZSh1ZS5wcm90b2NvbCk/Ii8vIjoiIik7cmV0dXJuIHVlLnVzZXJuYW1lPyhiKz11ZS51c2VybmFt'@;
put 'ZSx1ZS5wYXNzd29yZCYmKGIrPSI6Iit1ZS5wYXNzd29yZCksYis9IkAiKTp1ZS5wYXNzd29yZD8oYis9IjoiK3VlLnBhc3N3b3JkLGIrPSJAIik6ImZpbGU6IiE9PXVlLnByb3RvY29sJiZlZSh1ZS5wcm90b2NvbCkmJiFjZSYmIi8iIT09dWUucGF0aG5hbWUmJihiKz0iQCIpLCgiOiI9PT1j'@;
put 'ZVtjZS5sZW5ndGgtMV18fGoudGVzdCh1ZS5ob3N0bmFtZSkmJiF1ZS5wb3J0KSYmKGNlKz0iOiIpLGIrPWNlK3VlLnBhdGhuYW1lLChoZT0ib2JqZWN0Ij09dHlwZW9mIHVlLnF1ZXJ5P3NlKHVlLnF1ZXJ5KTp1ZS5xdWVyeSkmJihiKz0iPyIhPT1oZS5jaGFyQXQoMCk/Ij8iK2hlOmhlKSx1'@;
put 'ZS5oYXNoJiYoYis9dWUuaGFzaCksYn19LG9lLmV4dHJhY3RQcm90b2NvbD10ZSxvZS5sb2NhdGlvbj1xLG9lLnRyaW1MZWZ0PVksb2UucXM9SyxNLmV4cG9ydHM9b2V9LDQ5Mjc6KE0sTyxSKT0+e3ZhciB6PVIoNTEwOCk7ZnVuY3Rpb24gSyhJKXt0cnl7aWYoIVIuZy5sb2NhbFN0b3JhZ2Up'@;
put 'cmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIGs9Ui5nLmxvY2FsU3RvcmFnZVtJXTtyZXR1cm4gbnVsbCE9ayYmInRydWUiPT09U3RyaW5nKGspLnRvTG93ZXJDYXNlKCl9TS5leHBvcnRzPWZ1bmN0aW9uKEksayl7aWYoSygibm9EZXByZWNhdGlvbiIpKXJldHVybiBJO3ZhciBFPSExO3Jl'@;
put 'dHVybiBmdW5jdGlvbigpe2lmKCFFKXtpZihLKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKGspO0soInRyYWNlRGVwcmVjYXRpb24iKT96LnRyYWNlKGspOnoud2FybihrKSxFPSEwfXJldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwzODQ6TT0+e00uZXhwb3J0'@;
put 'cz1mdW5jdGlvbihPKXtyZXR1cm4gTyYmIm9iamVjdCI9PXR5cGVvZiBPJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgTy5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5yZWFkVUludDh9fSw1OTU1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9'@;
put 'UigyNTg0KSxLPVIoODY2MiksST1SKDY0MzApLGs9Uig1NjkyKTtmdW5jdGlvbiBFKEope3JldHVybiBKLmNhbGwuYmluZChKKX12YXIgaj10eXBlb2YgQmlnSW50PCJ1IixWPXR5cGVvZiBTeW1ib2w8InUiLEI9RShPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxZPUUoTnVtYmVyLnByb3Rv'@;
put 'dHlwZS52YWx1ZU9mKSxYPUUoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxVPUUoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7aWYoail2YXIgcT1FKEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoVil2YXIgZWU9RShTeW1ib2wucHJvdG90eXBlLnZhbHVlT2YpO2Z1bmN0aW9uIHRl'@;
put 'KEosbmUpe2lmKCJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4hMTt0cnl7cmV0dXJuIG5lKEopLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBvZShKKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PUIoSil9ZnVuY3Rpb24gc2UoSil7cmV0dXJuIltvYmplY3QgU2V0XSI9PT1CKEopfWZ1bmN0'@;
put 'aW9uIGhlKEope3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PUIoSil9ZnVuY3Rpb24gdWUoSil7cmV0dXJuIltvYmplY3QgV2Vha1NldF0iPT09QihKKX1mdW5jdGlvbiBjZShKKXtyZXR1cm4iW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09QihKKX1mdW5jdGlvbiBHKEope3JldHVybiB0eXBl'@;
put 'b2YgQXJyYXlCdWZmZXI8InUiJiYoY2Uud29ya2luZz9jZShKKTpKIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1bmN0aW9uIGIoSil7cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIj09PUIoSil9ZnVuY3Rpb24gRChKKXtyZXR1cm4gdHlwZW9mIERhdGFWaWV3PCJ1IiYmKGIud29ya2luZz9i'@;
put 'KEopOkogaW5zdGFuY2VvZiBEYXRhVmlldyl9Ty5pc0FyZ3VtZW50c09iamVjdD16LE8uaXNHZW5lcmF0b3JGdW5jdGlvbj1LLE8uaXNUeXBlZEFycmF5PWssTy5pc1Byb21pc2U9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBQcm9taXNlPCJ1IiYmSiBpbnN0YW5jZW9mIFByb21pc2V8fG51'@;
put 'bGwhPT1KJiYib2JqZWN0Ij09dHlwZW9mIEomJiJmdW5jdGlvbiI9PXR5cGVvZiBKLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBKLmNhdGNofSxPLmlzQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/'@;
put 'QXJyYXlCdWZmZXIuaXNWaWV3KEopOmsoSil8fEQoSil9LE8uaXNVaW50OEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJVaW50OEFycmF5Ij09PUkoSil9LE8uaXNVaW50OENsYW1wZWRBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiPT09SShKKX0sTy5pc1VpbnQx'@;
put 'NkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJVaW50MTZBcnJheSI9PT1JKEopfSxPLmlzVWludDMyQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQzMkFycmF5Ij09PUkoSil9LE8uaXNJbnQ4QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkludDhBcnJheSI9PT1JKEopfSxPLmlzSW50MTZB'@;
put 'cnJheT1mdW5jdGlvbihKKXtyZXR1cm4iSW50MTZBcnJheSI9PT1JKEopfSxPLmlzSW50MzJBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iSW50MzJBcnJheSI9PT1JKEopfSxPLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJGbG9hdDMyQXJyYXkiPT09SShKKX0sTy5pc0Zsb2F0'@;
put 'NjRBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PUkoSil9LE8uaXNCaWdJbnQ2NEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJCaWdJbnQ2NEFycmF5Ij09PUkoSil9LE8uaXNCaWdVaW50NjRBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iQmlnVWludDY0QXJyYXkiPT09'@;
put 'SShKKX0sb2Uud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmb2UobmV3IE1hcCksTy5pc01hcD1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIE1hcDwidSImJihvZS53b3JraW5nP29lKEopOkogaW5zdGFuY2VvZiBNYXApfSxzZS53b3JraW5nPXR5cGVvZiBTZXQ8InUiJiZzZShuZXcgU2V0KSxP'@;
put 'LmlzU2V0PWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgU2V0PCJ1IiYmKHNlLndvcmtpbmc/c2UoSik6SiBpbnN0YW5jZW9mIFNldCl9LGhlLndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZoZShuZXcgV2Vha01hcCksTy5pc1dlYWtNYXA9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBX'@;
put 'ZWFrTWFwPCJ1IiYmKGhlLndvcmtpbmc/aGUoSik6SiBpbnN0YW5jZW9mIFdlYWtNYXApfSx1ZS53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmdWUobmV3IFdlYWtTZXQpLE8uaXNXZWFrU2V0PWZ1bmN0aW9uKEope3JldHVybiB1ZShKKX0sY2Uud29ya2luZz10eXBlb2YgQXJyYXlCdWZm'@;
put 'ZXI8InUiJiZjZShuZXcgQXJyYXlCdWZmZXIpLE8uaXNBcnJheUJ1ZmZlcj1HLGIud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgRGF0YVZpZXc8InUiJiZiKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSksMCwxKSksTy5pc0RhdGFWaWV3PUQ7dmFyIEg9dHlw'@;
put 'ZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJheUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gTihKKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09QihKKX1mdW5jdGlvbiBnKEope3JldHVybiB2b2lkIDAhPT1IJiYodm9pZCAwPT09Ti53b3JraW5nJiYoTi53'@;
put 'b3JraW5nPU4obmV3IEgpKSxOLndvcmtpbmc/TihKKTpKIGluc3RhbmNlb2YgSCl9ZnVuY3Rpb24gQyhKKXtyZXR1cm4gdGUoSixZKX1mdW5jdGlvbiBTKEope3JldHVybiB0ZShKLFgpfWZ1bmN0aW9uIHYoSil7cmV0dXJuIHRlKEosVSl9ZnVuY3Rpb24gcChKKXtyZXR1cm4gaiYmdGUoSixx'@;
put 'KX1mdW5jdGlvbiB3KEope3JldHVybiBWJiZ0ZShKLGVlKX1PLmlzU2hhcmVkQXJyYXlCdWZmZXI9ZyxPLmlzQXN5bmNGdW5jdGlvbj1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PT1CKEopfSxPLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24oSil7cmV0dXJuIltv'@;
put 'YmplY3QgTWFwIEl0ZXJhdG9yXSI9PT1CKEopfSxPLmlzU2V0SXRlcmF0b3I9ZnVuY3Rpb24oSil7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1CKEopfSxPLmlzR2VuZXJhdG9yT2JqZWN0PWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0iPT09QihKKX0sTy5p'@;
put 'c1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9ZnVuY3Rpb24oSil7cmV0dXJuIltvYmplY3QgV2ViQXNzZW1ibHkuTW9kdWxlXSI9PT1CKEopfSxPLmlzTnVtYmVyT2JqZWN0PUMsTy5pc1N0cmluZ09iamVjdD1TLE8uaXNCb29sZWFuT2JqZWN0PXYsTy5pc0JpZ0ludE9iamVjdD1wLE8uaXNT'@;
put 'eW1ib2xPYmplY3Q9dyxPLmlzQm94ZWRQcmltaXRpdmU9ZnVuY3Rpb24oSil7cmV0dXJuIEMoSil8fFMoSil8fHYoSil8fHAoSil8fHcoSil9LE8uaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiYoRyhKKXx8ZyhKKSl9LFsiaXNQcm94'@;
put 'eSIsImlzRXh0ZXJuYWwiLCJpc01vZHVsZU5hbWVzcGFjZU9iamVjdCJdLmZvckVhY2goZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sSix7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihKKyIgaXMgbm90IHN1cHBvcnRlZCBpbiB1c2Vy'@;
put 'bGFuZCIpfX0pfSl9LDk1Mzk6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKEope2Zvcih2YXIgbmU9T2JqZWN0LmtleXMoSiksZGU9e30sZmU9MDtmZTxuZS5sZW5ndGg7ZmUrKylkZVtuZVtmZV1d'@;
put 'PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSixuZVtmZV0pO3JldHVybiBkZX0saz0vJVtzZGolXS9nO08uZm9ybWF0PWZ1bmN0aW9uKEope2lmKCF1ZShKKSl7Zm9yKHZhciBuZT1bXSxkZT0wO2RlPGFyZ3VtZW50cy5sZW5ndGg7ZGUrKyluZS5wdXNoKEIoYXJndW1lbnRzW2Rl'@;
put 'XSkpO3JldHVybiBuZS5qb2luKCIgIil9ZGU9MTtmb3IodmFyIGZlPWFyZ3VtZW50cyx4ZT1mZS5sZW5ndGgsTGU9U3RyaW5nKEopLnJlcGxhY2UoayxmdW5jdGlvbihPZSl7aWYoIiUlIj09PU9lKXJldHVybiIlIjtpZihkZT49eGUpcmV0dXJuIE9lO3N3aXRjaChPZSl7Y2FzZSIlcyI6cmV0'@;
put 'dXJuIFN0cmluZyhmZVtkZSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihmZVtkZSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShmZVtkZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIE9lfX0pLEZlPWZlW2RlXTtkZTx4ZTtGZT1m'@;
put 'ZVsrK2RlXSlzZShGZSl8fCFiKEZlKT9MZSs9IiAiK0ZlOkxlKz0iICIrQihGZSk7cmV0dXJuIExlfSxPLmRlcHJlY2F0ZT1mdW5jdGlvbihKLG5lKXtpZih2b2lkIDAhPT16JiYhMD09PXoubm9EZXByZWNhdGlvbilyZXR1cm4gSjtpZih2b2lkIDA9PT16KXJldHVybiBmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBPLmRlcHJlY2F0ZShKLG5lKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBkZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighZGUpe2lmKHoudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IobmUpO3oudHJhY2VEZXByZWNhdGlvbj9LLnRyYWNlKG5lKTpLLmVycm9yKG5l'@;
put 'KSxkZT0hMH1yZXR1cm4gSi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgRT17fSxqPS9eJC87aWYoei5lbnYuTk9ERV9ERUJVRyl7dmFyIFY9ei5lbnYuTk9ERV9ERUJVRztWPVYucmVwbGFjZSgvW3xcXHt9KClbXF1eJCs/Ll0vZywiXFwkJiIpLnJlcGxhY2UoL1wqL2csIi4qIikucmVw'@;
put 'bGFjZSgvLC9nLCIkfF4iKS50b1VwcGVyQ2FzZSgpLGo9bmV3IFJlZ0V4cCgiXiIrVisiJCIsImkiKX1mdW5jdGlvbiBCKEosbmUpe3ZhciBkZT17c2VlbjpbXSxzdHlsaXplOlh9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoZGUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMu'@;
put 'bGVuZ3RoPj00JiYoZGUuY29sb3JzPWFyZ3VtZW50c1szXSksb2UobmUpP2RlLnNob3dIaWRkZW49bmU6bmUmJk8uX2V4dGVuZChkZSxuZSksY2UoZGUuc2hvd0hpZGRlbikmJihkZS5zaG93SGlkZGVuPSExKSxjZShkZS5kZXB0aCkmJihkZS5kZXB0aD0yKSxjZShkZS5jb2xvcnMpJiYoZGUu'@;
put 'Y29sb3JzPSExKSxjZShkZS5jdXN0b21JbnNwZWN0KSYmKGRlLmN1c3RvbUluc3BlY3Q9ITApLGRlLmNvbG9ycyYmKGRlLnN0eWxpemU9WSksVShkZSxKLGRlLmRlcHRoKX1mdW5jdGlvbiBZKEosbmUpe3ZhciBkZT1CLnN0eWxlc1tuZV07cmV0dXJuIGRlPyJceDFiWyIrQi5jb2xvcnNbZGVd'@;
put 'WzBdKyJtIitKKyJceDFiWyIrQi5jb2xvcnNbZGVdWzFdKyJtIjpKfWZ1bmN0aW9uIFgoSixuZSl7cmV0dXJuIEp9ZnVuY3Rpb24gVShKLG5lLGRlKXtpZihKLmN1c3RvbUluc3BlY3QmJm5lJiZOKG5lLmluc3BlY3QpJiZuZS5pbnNwZWN0IT09Ty5pbnNwZWN0JiYoIW5lLmNvbnN0cnVjdG9y'@;
put 'fHxuZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1uZSkpe3ZhciBmZT1uZS5pbnNwZWN0KGRlLEopO3JldHVybiB1ZShmZSl8fChmZT1VKEosZmUsZGUpKSxmZX12YXIgeGU9ZnVuY3Rpb24oUWUsbHQpe2lmKGNlKGx0KSlyZXR1cm4gUWUuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVk'@;
put 'Iik7aWYodWUobHQpKXt2YXIgUGU9IiciK0pTT04uc3RyaW5naWZ5KGx0KS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBRZS5zdHlsaXplKFBlLCJzdHJpbmciKX1yZXR1cm4gaGUobHQpP1FlLnN0eWxpemUo'@;
put 'IiIrbHQsIm51bWJlciIpOm9lKGx0KT9RZS5zdHlsaXplKCIiK2x0LCJib29sZWFuIik6c2UobHQpP1FlLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShKLG5lKTtpZih4ZSlyZXR1cm4geGU7dmFyIGx0LExlPU9iamVjdC5rZXlzKG5lKSxGZT0obHQ9e30sTGUuZm9yRWFjaChmdW5j'@;
put 'dGlvbihQZSxiZSl7bHRbUGVdPSEwfSksbHQpO2lmKEouc2hvd0hpZGRlbiYmKExlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG5lKSksSChuZSkmJihMZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fExlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBxKG5lKTtpZigwPT09'@;
put 'TGUubGVuZ3RoKXtpZihOKG5lKSlyZXR1cm4gSi5zdHlsaXplKCJbRnVuY3Rpb24iKyhuZS5uYW1lPyI6ICIrbmUubmFtZToiIikrIl0iLCJzcGVjaWFsIik7aWYoRyhuZSkpcmV0dXJuIEouc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpLCJyZWdleHAiKTtpZihE'@;
put 'KG5lKSlyZXR1cm4gSi5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpLCJkYXRlIik7aWYoSChuZSkpcmV0dXJuIHEobmUpfXZhciBqZSxXZT0iIixLZT0hMSxZZT1bInsiLCJ9Il07cmV0dXJuIHRlKG5lKSYmKEtlPSEwLFllPVsiWyIsIl0iXSksTihuZSkmJihXZT0i'@;
put 'IFtGdW5jdGlvbiIrKG5lLm5hbWU/IjogIituZS5uYW1lOiIiKSsiXSIpLEcobmUpJiYoV2U9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZSkpLEQobmUpJiYoV2U9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwobmUpKSxIKG5lKSYmKFdlPSIgIitxKG5l'@;
put 'KSksMCE9PUxlLmxlbmd0aHx8S2UmJjAhPW5lLmxlbmd0aD9kZTwwP0cobmUpP0ouc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpLCJyZWdleHAiKTpKLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihKLnNlZW4ucHVzaChuZSksamU9S2U/ZnVuY3Rpb24o'@;
put 'UWUsbHQsUGUsYmUsQWUpe2Zvcih2YXIgVGU9W10scWU9MCxYZT1sdC5sZW5ndGg7cWU8WGU7KytxZSl2KGx0LFN0cmluZyhxZSkpP1RlLnB1c2goZWUoUWUsbHQsUGUsYmUsU3RyaW5nKHFlKSwhMCkpOlRlLnB1c2goIiIpO3JldHVybiBBZS5mb3JFYWNoKGZ1bmN0aW9uKFVlKXtVZS5tYXRj'@;
put 'aCgvXlxkKyQvKXx8VGUucHVzaChlZShRZSxsdCxQZSxiZSxVZSwhMCkpfSksVGV9KEosbmUsZGUsRmUsTGUpOkxlLm1hcChmdW5jdGlvbihRZSl7cmV0dXJuIGVlKEosbmUsZGUsRmUsUWUsS2UpfSksSi5zZWVuLnBvcCgpLGZ1bmN0aW9uKFFlLGx0LFBlKXtyZXR1cm4gUWUucmVkdWNlKGZ1'@;
put 'bmN0aW9uKEFlLFRlKXtyZXR1cm4gVGUuaW5kZXhPZigiXG4iKSxBZStUZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk+NjA/UGVbMF0rKCIiPT09bHQ/IiI6bHQrIlxuICIpKyIgIitRZS5qb2luKCIsXG4gICIpKyIgIitQZVsxXTpQZVswXStsdCsiICIrUWUu'@;
put 'am9pbigiLCAiKSsiICIrUGVbMV19KGplLFdlLFllKSk6WWVbMF0rV2UrWWVbMV19ZnVuY3Rpb24gcShKKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSikrIl0ifWZ1bmN0aW9uIGVlKEosbmUsZGUsZmUseGUsTGUpe3ZhciBGZSxPZSxqZTtpZigoamU9T2JqZWN0'@;
put 'LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZSx4ZSl8fHt2YWx1ZTpuZVt4ZV19KS5nZXQ/T2U9Si5zdHlsaXplKGplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6amUuc2V0JiYoT2U9Si5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksdihmZSx4'@;
put 'ZSl8fChGZT0iWyIreGUrIl0iKSxPZXx8KEouc2Vlbi5pbmRleE9mKGplLnZhbHVlKTwwPyhPZT1zZShkZSk/VShKLGplLnZhbHVlLG51bGwpOlUoSixqZS52YWx1ZSxkZS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKE9lPUxlP09lLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihXZSl7cmV0dXJu'@;
put 'IiAgIitXZX0pLmpvaW4oIlxuIikuc2xpY2UoMik6IlxuIitPZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oV2Upe3JldHVybiIgICAiK1dlfSkuam9pbigiXG4iKSk6T2U9Si5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxjZShGZSkpe2lmKExlJiZ4ZS5tYXRjaCgvXlxkKyQv'@;
put 'KSlyZXR1cm4gT2U7KEZlPUpTT04uc3RyaW5naWZ5KCIiK3hlKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oRmU9RmUuc2xpY2UoMSwtMSksRmU9Si5zdHlsaXplKEZlLCJuYW1lIikpOihGZT1GZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCci'@;
put 'JykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksRmU9Si5zdHlsaXplKEZlLCJzdHJpbmciKSl9cmV0dXJuIEZlKyI6ICIrT2V9ZnVuY3Rpb24gdGUoSil7cmV0dXJuIEFycmF5LmlzQXJyYXkoSil9ZnVuY3Rpb24gb2UoSil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgSn1mdW5jdGlvbiBzZShK'@;
put 'KXtyZXR1cm4gbnVsbD09PUp9ZnVuY3Rpb24gaGUoSil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBKfWZ1bmN0aW9uIHVlKEope3JldHVybiJzdHJpbmciPT10eXBlb2YgSn1mdW5jdGlvbiBjZShKKXtyZXR1cm4gdm9pZCAwPT09Sn1mdW5jdGlvbiBHKEope3JldHVybiBiKEopJiYiW29iamVj'@;
put 'dCBSZWdFeHBdIj09PWcoSil9ZnVuY3Rpb24gYihKKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEomJm51bGwhPT1KfWZ1bmN0aW9uIEQoSil7cmV0dXJuIGIoSikmJiJbb2JqZWN0IERhdGVdIj09PWcoSil9ZnVuY3Rpb24gSChKKXtyZXR1cm4gYihKKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1n'@;
put 'KEopfHxKIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIE4oSil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEp9ZnVuY3Rpb24gZyhKKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEopfWZ1bmN0aW9uIEMoSil7cmV0dXJuIEo8MTA/IjAiK0oudG9TdHJpbmcoMTAp'@;
put 'OkoudG9TdHJpbmcoMTApfU8uZGVidWdsb2c9ZnVuY3Rpb24oSil7aWYoSj1KLnRvVXBwZXJDYXNlKCksIUVbSl0paWYoai50ZXN0KEopKXt2YXIgbmU9ei5waWQ7RVtKXT1mdW5jdGlvbigpe3ZhciBkZT1PLmZvcm1hdC5hcHBseShPLGFyZ3VtZW50cyk7Sy5lcnJvcigiJXMgJWQ6ICVzIixK'@;
put 'LG5lLGRlKX19ZWxzZSBFW0pdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gRVtKXX0sTy5pbnNwZWN0PUIsQi5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzld'@;
put 'LGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LEIuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6'@;
put 'ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sTy50eXBlcz1SKDU5NTUpLE8uaXNBcnJheT10ZSxPLmlzQm9vbGVhbj1vZSxPLmlzTnVsbD1zZSxPLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKEope3JldHVybiBudWxsPT1KfSxPLmlzTnVtYmVy'@;
put 'PWhlLE8uaXNTdHJpbmc9dWUsTy5pc1N5bWJvbD1mdW5jdGlvbihKKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEp9LE8uaXNVbmRlZmluZWQ9Y2UsTy5pc1JlZ0V4cD1HLE8udHlwZXMuaXNSZWdFeHA9RyxPLmlzT2JqZWN0PWIsTy5pc0RhdGU9RCxPLnR5cGVzLmlzRGF0ZT1ELE8uaXNFcnJv'@;
put 'cj1ILE8udHlwZXMuaXNOYXRpdmVFcnJvcj1ILE8uaXNGdW5jdGlvbj1OLE8uaXNQcmltaXRpdmU9ZnVuY3Rpb24oSil7cmV0dXJuIG51bGw9PT1KfHwiYm9vbGVhbiI9PXR5cGVvZiBKfHwibnVtYmVyIj09dHlwZW9mIEp8fCJzdHJpbmciPT10eXBlb2YgSnx8InN5bWJvbCI9PXR5cGVvZiBK'@;
put 'fHx2b2lkIDA9PT1KfSxPLmlzQnVmZmVyPVIoMzg0KTt2YXIgUz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIHYoSixuZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkuY2FsbChKLG5lKX1PLmxvZz1mdW5jdGlvbigpe3ZhciBKLG5lO0subG9nKCIlcyAtICVzIiwobmU9W0MoKEo9bmV3IERhdGUpLmdldEhvdXJzKCkpLEMoSi5nZXRNaW51dGVzKCkpLEMoSi5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW0ouZ2V0RGF0ZSgpLFNbSi5nZXRNb250aCgpXSxu'@;
put 'ZV0uam9pbigiICIpKSxPLmZvcm1hdC5hcHBseShPLGFyZ3VtZW50cykpfSxPLmluaGVyaXRzPVIoNTcxNyksTy5fZXh0ZW5kPWZ1bmN0aW9uKEosbmUpe2lmKCFuZXx8IWIobmUpKXJldHVybiBKO2Zvcih2YXIgZGU9T2JqZWN0LmtleXMobmUpLGZlPWRlLmxlbmd0aDtmZS0tOylKW2RlW2Zl'@;
put 'XV09bmVbZGVbZmVdXTtyZXR1cm4gSn07dmFyIHA9dHlwZW9mIFN5bWJvbDwidSI/U3ltYm9sKCJ1dGlsLnByb21pc2lmeS5jdXN0b20iKTp2b2lkIDA7ZnVuY3Rpb24gdyhKLG5lKXtpZighSil7dmFyIGRlPW5ldyBFcnJvcigiUHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZh'@;
put 'bHVlIik7ZGUucmVhc29uPUosSj1kZX1yZXR1cm4gbmUoSil9Ty5wcm9taXNpZnk9ZnVuY3Rpb24oSil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEopdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYocCYmSltw'@;
put 'XSl7dmFyIG5lO2lmKCJmdW5jdGlvbiIhPXR5cGVvZihuZT1KW3BdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxwLHt2YWx1'@;
put 'ZTpuZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG5lfWZ1bmN0aW9uIG5lKCl7Zm9yKHZhciBkZSxmZSx4ZT1uZXcgUHJvbWlzZShmdW5jdGlvbihPZSxqZSl7ZGU9T2UsZmU9amV9KSxMZT1bXSxGZT0wO0ZlPGFyZ3VtZW50cy5sZW5ndGg7RmUrKylMZS5w'@;
put 'dXNoKGFyZ3VtZW50c1tGZV0pO0xlLnB1c2goZnVuY3Rpb24oT2UsamUpe09lP2ZlKE9lKTpkZShqZSl9KTt0cnl7Si5hcHBseSh0aGlzLExlKX1jYXRjaChPZSl7ZmUoT2UpfXJldHVybiB4ZX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG5lLE9iamVjdC5nZXRQcm90b3R5cGVPZihK'@;
put 'KSkscCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLHAse3ZhbHVlOm5lLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmUsSShKKSl9LE8ucHJvbWlzaWZ5LmN1c3RvbT1wLE8uY2FsbGJhY2tpZnk9ZnVuY3Rpb24o'@;
put 'Sil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEopdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7ZnVuY3Rpb24gbmUoKXtmb3IodmFyIGRlPVtdLGZlPTA7ZmU8YXJndW1lbnRzLmxlbmd0aDtmZSsrKWRlLnB1c2go'@;
put 'YXJndW1lbnRzW2ZlXSk7dmFyIHhlPWRlLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24iKTt2YXIgTGU9dGhpcyxGZT1mdW5jdGlvbigpe3JldHVybiB4ZS5hcHBseShM'@;
put 'ZSxhcmd1bWVudHMpfTtKLmFwcGx5KHRoaXMsZGUpLnRoZW4oZnVuY3Rpb24oT2Upe3oubmV4dFRpY2soRmUuYmluZChudWxsLG51bGwsT2UpKX0sZnVuY3Rpb24oT2Upe3oubmV4dFRpY2sody5iaW5kKG51bGwsT2UsRmUpKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YobmUsT2Jq'@;
put 'ZWN0LmdldFByb3RvdHlwZU9mKEopKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZSxJKEopKSxuZX19LDQ4MTooTSxPLFIpPT57IWZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0Ijt6LmV4cG9ydHMuaXNfdXJpPUksei5leHBvcnRzLmlzX2h0dHBfdXJpPWssei5leHBvcnRzLmlzX2h0dHBzX3Vy'@;
put 'aT1FLHouZXhwb3J0cy5pc193ZWJfdXJpPWosei5leHBvcnRzLmlzVXJpPUksei5leHBvcnRzLmlzSHR0cFVyaT1rLHouZXhwb3J0cy5pc0h0dHBzVXJpPUUsei5leHBvcnRzLmlzV2ViVXJpPWo7dmFyIEs9ZnVuY3Rpb24oVil7cmV0dXJuIFYubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86'@;
put 'XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIEkoVil7aWYoViYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChWKSYmIS8lW14wLTlhLWZdL2kudGVzdChWKSYm'@;
put 'IS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KFYpKXt2YXIgQixZLFgsVSxxLGVlPSIiLHRlPSIiO2lmKGVlPShCPUsoVikpWzFdLFk9QlsyXSxYPUJbM10sVT1CWzRdLHE9Qls1XSxlZSYmZWUubGVuZ3RoJiZYLmxlbmd0aD49MCl7aWYoWSYmWS5sZW5ndGgpe2lmKDAhPT1YLmxl'@;
put 'bmd0aCYmIS9eXC8vLnRlc3QoWCkpcmV0dXJufWVsc2UgaWYoL15cL1wvLy50ZXN0KFgpKXJldHVybjtpZigvXlthLXpdW2EtejAtOVwrXC1cLl0qJC8udGVzdChlZS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gdGUrPWVlKyI6IixZJiZZLmxlbmd0aCYmKHRlKz0iLy8iK1kpLHRlKz1YLFUmJlUu'@;
put 'bGVuZ3RoJiYodGUrPSI/IitVKSxxJiZxLmxlbmd0aCYmKHRlKz0iIyIrcSksdGV9fX1mdW5jdGlvbiBrKFYsQil7aWYoSShWKSl7dmFyIFksWCxVLHEsZWU9IiIsdGU9IiIsb2U9IiIsc2U9IiI7aWYoZWU9KFk9SyhWKSlbMV0sdGU9WVsyXSxYPVlbM10sVT1ZWzRdLHE9WVs1XSxlZSl7aWYo'@;
put 'Qil7aWYoImh0dHBzIiE9ZWUudG9Mb3dlckNhc2UoKSlyZXR1cm59ZWxzZSBpZigiaHR0cCIhPWVlLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKHRlKXJldHVybi86KFxkKykkLy50ZXN0KHRlKSYmKG9lPXRlLm1hdGNoKC86KFxkKykkLylbMF0sdGU9dGUucmVwbGFjZSgvOlxkKyQvLCIiKSks'@;
put 'c2UrPWVlKyI6IixzZSs9Ii8vIit0ZSxvZSYmKHNlKz1vZSksc2UrPVgsVSYmVS5sZW5ndGgmJihzZSs9Ij8iK1UpLHEmJnEubGVuZ3RoJiYoc2UrPSIjIitxKSxzZX19fWZ1bmN0aW9uIEUoVil7cmV0dXJuIGsoViwhMCl9ZnVuY3Rpb24gaihWKXtyZXR1cm4gayhWKXx8RShWKX19KE09Ui5u'@;
put 'bWQoTSkpfSw2NDMwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MDI5KSxLPVIoMzA4MyksST1SKDE5MjQpLGs9Uig3Mjk2KSxFPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxqPVIoNjQxMCkoKSxWPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9SLmc6Z2xvYmFsVGhpcyxC'@;
put 'PUsoKSxZPUkoIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxYPXt9LFU9T2JqZWN0LmdldFByb3RvdHlwZU9mO2omJmsmJlUmJnooQixmdW5jdGlvbihlZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFZbZWVdKXt2YXIgdGU9bmV3IFZbZWVdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB0ZSl7'@;
put 'dmFyIG9lPVUodGUpLHNlPWsob2UsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighc2Upe3ZhciBoZT1VKG9lKTtzZT1rKGhlLFN5bWJvbC50b1N0cmluZ1RhZyl9WFtlZV09c2UuZ2V0fX19KTt2YXIgcT1SKDU2OTIpO00uZXhwb3J0cz1mdW5jdGlvbihlZSl7cmV0dXJuISFxKGVlKSYmKGomJlN5'@;
put 'bWJvbC50b1N0cmluZ1RhZyBpbiBlZT8odGU9ZWUsb2U9ITEseihYLGZ1bmN0aW9uKHNlLGhlKXtpZighb2UpdHJ5e3ZhciB1ZT1zZS5jYWxsKHRlKTt1ZT09PWhlJiYob2U9dWUpfWNhdGNoe319KSxvZSk6WShFKGVlKSw4LC0xKSk7dmFyIHRlLG9lfX0sMjQ3OTpNPT57TS5leHBvcnRzPWZ1'@;
put 'bmN0aW9uIE8oUix6KXtpZihSJiZ6KXJldHVybiBPKFIpKHopO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWQgd3JhcHBlciBmdW5jdGlvbiIpO3JldHVybiBPYmplY3Qua2V5cyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe0tbSV09UltJXX0pLEs7ZnVu'@;
put 'Y3Rpb24gSygpe2Zvcih2YXIgST1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksaz0wO2s8SS5sZW5ndGg7aysrKUlba109YXJndW1lbnRzW2tdO3ZhciBFPVIuYXBwbHkodGhpcyxJKSxqPUlbSS5sZW5ndGgtMV07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEUmJkUhPT1qJiZPYmplY3Qu'@;
put 'a2V5cyhqKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe0VbVl09altWXX0pLEV9fX0sOTUwOigpPT57fSw2NjAxOigpPT57fSw5MjE0OigpPT57fSw4NjIzOigpPT57fSw3NzQ4OigpPT57fSw1NTY4OigpPT57fSwyNTM1OigpPT57fSwzNzEwOigpPT57fSw1NDQzOigpPT57fSw0MTI5OigpPT57fSw2'@;
put 'NjE5OigpPT57fSw3MTA4OigpPT57fSwyMzYxOigpPT57fSw0NjE2OigpPT57fSw3MjE3OigpPT57fSw4MzczOigpPT57fSwzMDgzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9WyJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJy'@;
put 'YXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIkludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiXSxLPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9SLmc6Z2xvYmFsVGhpcztNLmV4cG9ydHM9ZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIEk9W10saz0wO2s8ei5sZW5ndGg7aysrKSJmdW5jdGlvbiI9PXR5cGVvZiBLW3pba11dJiYoSVtJLmxlbmd0aF09eltrXSk7cmV0dXJuIEl9fSw0OTQ2Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwi'@;
put 'a2V5IjoxMjgsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYi'@;
put 'OjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoi'@;
put 'Q0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxv'@;
put 'Y2sifSwiYWVzMTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsi'@;
put 'Y2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoi'@;
put 'QUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwi'@;
put 'a2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6'@;
put 'MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1Niwi'@;
put 'aXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwi'@;
put 'bW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNU'@;
put 'UiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUi'@;
put 'OiJzdHJlYW0ifSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJh'@;
put 'ZXMtMjU2LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNTIwNzpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJo'@;
put 'YXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZX'@;
put 'aXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4'@;
put 'NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhh'@;
put 'c2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJS'@;
put 'U0EtU0hBNTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAw'@;
put 'MDQxNCJ9LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwi'@;
put 'c2hhMzg0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6'@;
put 'ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJz'@;
put 'aGEyMjQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoi'@;
put 'c2hhMzg0IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1'@;
put 'MTIiLCJpZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBF'@;
put 'TUQxNjAiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAw'@;
put 'NDEwIn0sIlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSwxMzA4Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwi'@;
put 'MS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5w'@;
put 'YXJzZSgneyJPX1JET05MWSI6MCwiT19XUk9OTFkiOjEsIk9fUkRXUiI6MiwiU19JRk1UIjo2MTQ0MCwiU19JRlJFRyI6MzI3NjgsIlNfSUZESVIiOjE2Mzg0LCJTX0lGQ0hSIjo4MTkyLCJTX0lGQkxLIjoyNDU3NiwiU19JRklGTyI6NDA5NiwiU19JRkxOSyI6NDA5NjAsIlNfSUZTT0NLIjo0'@;
put 'OTE1MiwiT19DUkVBVCI6NTEyLCJPX0VYQ0wiOjIwNDgsIk9fTk9DVFRZIjoxMzEwNzIsIk9fVFJVTkMiOjEwMjQsIk9fQVBQRU5EIjo4LCJPX0RJUkVDVE9SWSI6MTA0ODU3NiwiT19OT0ZPTExPVyI6MjU2LCJPX1NZTkMiOjEyOCwiT19TWU1MSU5LIjoyMDk3MTUyLCJPX05PTkJMT0NLIjo0'@;
put 'LCJTX0lSV1hVIjo0NDgsIlNfSVJVU1IiOjI1NiwiU19JV1VTUiI6MTI4LCJTX0lYVVNSIjo2NCwiU19JUldYRyI6NTYsIlNfSVJHUlAiOjMyLCJTX0lXR1JQIjoxNiwiU19JWEdSUCI6OCwiU19JUldYTyI6NywiU19JUk9USCI6NCwiU19JV09USCI6MiwiU19JWE9USCI6MSwiRTJCSUciOjcs'@;
put 'IkVBQ0NFUyI6MTMsIkVBRERSSU5VU0UiOjQ4LCJFQUREUk5PVEFWQUlMIjo0OSwiRUFGTk9TVVBQT1JUIjo0NywiRUFHQUlOIjozNSwiRUFMUkVBRFkiOjM3LCJFQkFERiI6OSwiRUJBRE1TRyI6OTQsIkVCVVNZIjoxNiwiRUNBTkNFTEVEIjo4OSwiRUNISUxEIjoxMCwiRUNPTk5BQk9SVEVE'@;
put 'Ijo1MywiRUNPTk5SRUZVU0VEIjo2MSwiRUNPTk5SRVNFVCI6NTQsIkVERUFETEsiOjExLCJFREVTVEFERFJSRVEiOjM5LCJFRE9NIjozMywiRURRVU9UIjo2OSwiRUVYSVNUIjoxNywiRUZBVUxUIjoxNCwiRUZCSUciOjI3LCJFSE9TVFVOUkVBQ0giOjY1LCJFSURSTSI6OTAsIkVJTFNFUSI6'@;
put 'OTIsIkVJTlBST0dSRVNTIjozNiwiRUlOVFIiOjQsIkVJTlZBTCI6MjIsIkVJTyI6NSwiRUlTQ09OTiI6NTYsIkVJU0RJUiI6MjEsIkVMT09QIjo2MiwiRU1GSUxFIjoyNCwiRU1MSU5LIjozMSwiRU1TR1NJWkUiOjQwLCJFTVVMVElIT1AiOjk1LCJFTkFNRVRPT0xPTkciOjYzLCJFTkVURE9X'@;
put 'TiI6NTAsIkVORVRSRVNFVCI6NTIsIkVORVRVTlJFQUNIIjo1MSwiRU5GSUxFIjoyMywiRU5PQlVGUyI6NTUsIkVOT0RBVEEiOjk2LCJFTk9ERVYiOjE5LCJFTk9FTlQiOjIsIkVOT0VYRUMiOjgsIkVOT0xDSyI6NzcsIkVOT0xJTksiOjk3LCJFTk9NRU0iOjEyLCJFTk9NU0ciOjkxLCJFTk9Q'@;
put 'Uk9UT09QVCI6NDIsIkVOT1NQQyI6MjgsIkVOT1NSIjo5OCwiRU5PU1RSIjo5OSwiRU5PU1lTIjo3OCwiRU5PVENPTk4iOjU3LCJFTk9URElSIjoyMCwiRU5PVEVNUFRZIjo2NiwiRU5PVFNPQ0siOjM4LCJFTk9UU1VQIjo0NSwiRU5PVFRZIjoyNSwiRU5YSU8iOjYsIkVPUE5PVFNVUFAiOjEw'@;
put 'MiwiRU9WRVJGTE9XIjo4NCwiRVBFUk0iOjEsIkVQSVBFIjozMiwiRVBST1RPIjoxMDAsIkVQUk9UT05PU1VQUE9SVCI6NDMsIkVQUk9UT1RZUEUiOjQxLCJFUkFOR0UiOjM0LCJFUk9GUyI6MzAsIkVTUElQRSI6MjksIkVTUkNIIjozLCJFU1RBTEUiOjcwLCJFVElNRSI6MTAxLCJFVElNRURP'@;
put 'VVQiOjYwLCJFVFhUQlNZIjoyNiwiRVdPVUxEQkxPQ0siOjM1LCJFWERFViI6MTgsIlNJR0hVUCI6MSwiU0lHSU5UIjoyLCJTSUdRVUlUIjozLCJTSUdJTEwiOjQsIlNJR1RSQVAiOjUsIlNJR0FCUlQiOjYsIlNJR0lPVCI6NiwiU0lHQlVTIjoxMCwiU0lHRlBFIjo4LCJTSUdLSUxMIjo5LCJT'@;
put 'SUdVU1IxIjozMCwiU0lHU0VHViI6MTEsIlNJR1VTUjIiOjMxLCJTSUdQSVBFIjoxMywiU0lHQUxSTSI6MTQsIlNJR1RFUk0iOjE1LCJTSUdDSExEIjoyMCwiU0lHQ09OVCI6MTksIlNJR1NUT1AiOjE3LCJTSUdUU1RQIjoxOCwiU0lHVFRJTiI6MjEsIlNJR1RUT1UiOjIyLCJTSUdVUkciOjE2'@;
put 'LCJTSUdYQ1BVIjoyNCwiU0lHWEZTWiI6MjUsIlNJR1ZUQUxSTSI6MjYsIlNJR1BST0YiOjI3LCJTSUdXSU5DSCI6MjgsIlNJR0lPIjoyMywiU0lHU1lTIjoxMiwiU1NMX09QX0FMTCI6MjE0NzQ4NjcxOSwiU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTiI6MjYyMTQ0'@;
put 'LCJTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIjo0MTk0MzA0LCJTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVCI6MzI3NjgsIlNTTF9PUF9DT09LSUVfRVhDSEFOR0UiOjgxOTIsIlNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRyI6MjE0NzQ4MzY0OCwiU1NMX09QX0RPTlRfSU5TRVJU'@;
put 'X0VNUFRZX0ZSQUdNRU5UUyI6MjA0OCwiU1NMX09QX0VQSEVNRVJBTF9SU0EiOjAsIlNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QiOjQsIlNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUiI6MzIsIlNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUciOjEsIlNTTF9PUF9NU0lF'@;
put 'X1NTTFYyX1JTQV9QQURESU5HIjowLCJTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHIjo1MzY4NzA5MTIsIlNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHIjoyLCJTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRyI6MTA3Mzc0MTgyNCwiU1NMX09QX05FVFNDQVBFX1JF'@;
put 'VVNFX0NJUEhFUl9DSEFOR0VfQlVHIjo4LCJTU0xfT1BfTk9fQ09NUFJFU1NJT04iOjEzMTA3MiwiU1NMX09QX05PX1FVRVJZX01UVSI6NDA5NiwiU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OIjo2NTUzNiwiU1NMX09QX05PX1NTTHYyIjoxNjc3NzIxNiwi'@;
put 'U1NMX09QX05PX1NTTHYzIjozMzU1NDQzMiwiU1NMX09QX05PX1RJQ0tFVCI6MTYzODQsIlNTTF9PUF9OT19UTFN2MSI6NjcxMDg4NjQsIlNTTF9PUF9OT19UTFN2MV8xIjoyNjg0MzU0NTYsIlNTTF9PUF9OT19UTFN2MV8yIjoxMzQyMTc3MjgsIlNTTF9PUF9QS0NTMV9DSEVDS18xIjowLCJT'@;
put 'U0xfT1BfUEtDUzFfQ0hFQ0tfMiI6MCwiU1NMX09QX1NJTkdMRV9ESF9VU0UiOjEwNDg1NzYsIlNTTF9PUF9TSU5HTEVfRUNESF9VU0UiOjUyNDI4OCwiU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRyI6MTI4LCJTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHIjowLCJT'@;
put 'U0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHIjo1MTIsIlNTTF9PUF9UTFNfRDVfQlVHIjoyNTYsIlNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHIjo4Mzg4NjA4LCJFTkdJTkVfTUVUSE9EX0RTQSI6MiwiRU5HSU5FX01FVEhPRF9ESCI6NCwiRU5HSU5FX01FVEhPRF9SQU5EIjo4LCJFTkdJTkVf'@;
put 'TUVUSE9EX0VDREgiOjE2LCJFTkdJTkVfTUVUSE9EX0VDRFNBIjozMiwiRU5HSU5FX01FVEhPRF9DSVBIRVJTIjo2NCwiRU5HSU5FX01FVEhPRF9ESUdFU1RTIjoxMjgsIkVOR0lORV9NRVRIT0RfU1RPUkUiOjI1NiwiRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTIjo1MTIsIkVOR0lORV9NRVRI'@;
put 'T0RfUEtFWV9BU04xX01FVEhTIjoxMDI0LCJFTkdJTkVfTUVUSE9EX0FMTCI6NjU1MzUsIkVOR0lORV9NRVRIT0RfTk9ORSI6MCwiREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRSI6MiwiREhfQ0hFQ0tfUF9OT1RfUFJJTUUiOjEsIkRIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1IiOjQsIkRI'@;
put 'X05PVF9TVUlUQUJMRV9HRU5FUkFUT1IiOjgsIk5QTl9FTkFCTEVEIjoxLCJSU0FfUEtDUzFfUEFERElORyI6MSwiUlNBX1NTTFYyM19QQURESU5HIjoyLCJSU0FfTk9fUEFERElORyI6MywiUlNBX1BLQ1MxX09BRVBfUEFERElORyI6NCwiUlNBX1g5MzFfUEFERElORyI6NSwiUlNBX1BLQ1Mx'@;
put 'X1BTU19QQURESU5HIjo2LCJQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQiOjIsIlBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEIjo0LCJQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCI6NiwiRl9PSyI6MCwiUl9PSyI6NCwiV19PSyI6MiwiWF9PSyI6MSwiVVZfVURQX1JFVVNFQUREUiI6'@;
put 'NH0nKX0sOTc5OTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEw'@;
put 'ODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIx'@;
put 'NjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2Yjdl'@;
put 'ZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBi'@;
put 'YmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFl'@;
put 'Y2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsi'@;
put 'Z2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0'@;
put 'ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1'@;
put 'NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZh'@;
put 'MDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRk'@;
put 'ZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0'@;
put 'ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZm'@;
put 'NGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNk'@;
put 'NzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk'@;
put 'ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRj'@;
put 'ZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5'@;
put 'OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIy'@;
put 'NjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJh'@;
put 'NWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNk'@;
put 'MDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0'@;
put 'ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdj'@;
put 'NGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2Uz'@;
put 'YmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVh'@;
put 'NzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3'@;
put 'NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMw'@;
put 'NWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3'@;
put 'NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAx'@;
put 'YzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAz'@;
put 'N2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9'@;
put 'LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1'@;
put 'NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNh'@;
put 'M2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1'@;
put 'MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZm'@;
put 'YTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZh'@;
put 'ZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFh'@;
put 'OTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNl'@;
put 'ZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2Zi'@;
put 'ZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2'@;
put 'MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2Fh'@;
put 'YjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1'@;
put 'YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUz'@;
put 'ODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDg1OTc6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9e2k4OiI2LjUuNCJ9fSwyNTYyOk09PnsidXNl'@;
put 'IHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMi4xNi44NDAuMS4xMDEuMy40LjEuMSI6ImFlcy0xMjgtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMiI6ImFlcy0xMjgtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMyI6ImFlcy0xMjgtb2ZiIiwiMi4xNi44NDAuMS4xMDEu'@;
put 'My40LjEuNCI6ImFlcy0xMjgtY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiOiJhZXMtMTkyLWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyIjoiYWVzLTE5Mi1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMyI6ImFlcy0xOTItb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEu'@;
put 'MjQiOiJhZXMtMTkyLWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIjoiYWVzLTI1Ni1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MiI6ImFlcy0yNTYtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDMiOiJhZXMtMjU2LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0Ijoi'@;
put 'YWVzLTI1Ni1jZmIifScpfSwzNzA0Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ1siYWMiLCJjb20uYWMiLCJlZHUuYWMiLCJnb3YuYWMiLCJuZXQuYWMiLCJtaWwuYWMiLCJvcmcuYWMiLCJhZCIsIm5vbS5hZCIsImFlIiwiY28uYWUiLCJuZXQuYWUiLCJvcmcuYWUi'@;
put 'LCJzY2guYWUiLCJhYy5hZSIsImdvdi5hZSIsIm1pbC5hZSIsImFlcm8iLCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm8iLCJhY2NpZGVudC1wcmV2ZW50aW9uLmFlcm8iLCJhZXJvYmF0aWMuYWVybyIsImFlcm9jbHViLmFlcm8iLCJhZXJvZHJvbWUuYWVybyIsImFnZW50cy5hZXJvIiwi'@;
put 'YWlyY3JhZnQuYWVybyIsImFpcmxpbmUuYWVybyIsImFpcnBvcnQuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpcnRyYWZmaWMuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFtYnVsYW5jZS5hZXJvIiwiYW11c2VtZW50LmFlcm8iLCJhc3NvY2lhdGlvbi5hZXJv'@;
put 'IiwiYXV0aG9yLmFlcm8iLCJiYWxsb29uaW5nLmFlcm8iLCJicm9rZXIuYWVybyIsImNhYS5hZXJvIiwiY2FyZ28uYWVybyIsImNhdGVyaW5nLmFlcm8iLCJjZXJ0aWZpY2F0aW9uLmFlcm8iLCJjaGFtcGlvbnNoaXAuYWVybyIsImNoYXJ0ZXIuYWVybyIsImNpdmlsYXZpYXRpb24uYWVybyIs'@;
put 'ImNsdWIuYWVybyIsImNvbmZlcmVuY2UuYWVybyIsImNvbnN1bHRhbnQuYWVybyIsImNvbnN1bHRpbmcuYWVybyIsImNvbnRyb2wuYWVybyIsImNvdW5jaWwuYWVybyIsImNyZXcuYWVybyIsImRlc2lnbi5hZXJvIiwiZGdjYS5hZXJvIiwiZWR1Y2F0b3IuYWVybyIsImVtZXJnZW5jeS5hZXJv'@;
put 'IiwiZW5naW5lLmFlcm8iLCJlbmdpbmVlci5hZXJvIiwiZW50ZXJ0YWlubWVudC5hZXJvIiwiZXF1aXBtZW50LmFlcm8iLCJleGNoYW5nZS5hZXJvIiwiZXhwcmVzcy5hZXJvIiwiZmVkZXJhdGlvbi5hZXJvIiwiZmxpZ2h0LmFlcm8iLCJmdWVsLmFlcm8iLCJnbGlkaW5nLmFlcm8iLCJnb3Zl'@;
put 'cm5tZW50LmFlcm8iLCJncm91bmRoYW5kbGluZy5hZXJvIiwiZ3JvdXAuYWVybyIsImhhbmdnbGlkaW5nLmFlcm8iLCJob21lYnVpbHQuYWVybyIsImluc3VyYW5jZS5hZXJvIiwiam91cm5hbC5hZXJvIiwiam91cm5hbGlzdC5hZXJvIiwibGVhc2luZy5hZXJvIiwibG9naXN0aWNzLmFlcm8i'@;
put 'LCJtYWdhemluZS5hZXJvIiwibWFpbnRlbmFuY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFl'@;
put 'cm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNl'@;
put 'cy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJn'@;
put 'b3YuYWYiLCJjb20uYWYiLCJvcmcuYWYiLCJuZXQuYWYiLCJlZHUuYWYiLCJhZyIsImNvbS5hZyIsIm9yZy5hZyIsIm5ldC5hZyIsImNvLmFnIiwibm9tLmFnIiwiYWkiLCJvZmYuYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIs'@;
put 'Im1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJlZC5hbyIsImd2LmFvIiwib2cuYW8iLCJjby5hbyIsInBiLmFvIiwiaXQuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29v'@;
put 'cC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMu'@;
put 'YXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0Iiwic3RoLmFjLmF0IiwiYXUiLCJjb20uYXUiLCJuZXQuYXUiLCJvcmcuYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJhc24uYXUiLCJpZC5hdSIs'@;
put 'ImluZm8uYXUiLCJjb25mLmF1Iiwib3ouYXUiLCJhY3QuYXUiLCJuc3cuYXUiLCJudC5hdSIsInFsZC5hdSIsInNhLmF1IiwidGFzLmF1IiwidmljLmF1Iiwid2EuYXUiLCJhY3QuZWR1LmF1IiwiY2F0aG9saWMuZWR1LmF1IiwibnN3LmVkdS5hdSIsIm50LmVkdS5hdSIsInFsZC5lZHUuYXUi'@;
put 'LCJzYS5lZHUuYXUiLCJ0YXMuZWR1LmF1IiwidmljLmVkdS5hdSIsIndhLmVkdS5hdSIsInFsZC5nb3YuYXUiLCJzYS5nb3YuYXUiLCJ0YXMuZ292LmF1IiwidmljLmdvdi5hdSIsIndhLmdvdi5hdSIsInNjaG9vbHMubnN3LmVkdS5hdSIsImF3IiwiY29tLmF3IiwiYXgiLCJheiIsImNvbS5h'@;
put 'eiIsIm5ldC5heiIsImludC5heiIsImdvdi5heiIsIm9yZy5heiIsImVkdS5heiIsImluZm8uYXoiLCJwcC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJwcm8uYXoiLCJiaXouYXoiLCJiYSIsImNvbS5iYSIsImVkdS5iYSIsImdvdi5iYSIsIm1pbC5iYSIsIm5ldC5iYSIsIm9yZy5iYSIsImJi'@;
put 'IiwiYml6LmJiIiwiY28uYmIiLCJjb20uYmIiLCJlZHUuYmIiLCJnb3YuYmIiLCJpbmZvLmJiIiwibmV0LmJiIiwib3JnLmJiIiwic3RvcmUuYmIiLCJ0di5iYiIsIiouYmQiLCJiZSIsImFjLmJlIiwiYmYiLCJnb3YuYmYiLCJiZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJn'@;
put 'IiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiMC5iZyIsIjEuYmciLCIy'@;
put 'LmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImJoIiwiY29tLmJoIiwiZWR1LmJoIiwibmV0LmJoIiwib3JnLmJoIiwiZ292LmJoIiwiYmkiLCJjby5iaSIsImNvbS5iaSIsImVkdS5iaSIsIm9yLmJpIiwib3JnLmJpIiwiYml6IiwiYmoiLCJh'@;
put 'c3NvLmJqIiwiYmFycmVhdS5iaiIsImdvdXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJp'@;
put 'bnQuYm8iLCJvcmcuYm8iLCJuZXQuYm8iLCJtaWwuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJv'@;
put 'IiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJw'@;
put 'YXRyaWEuYm8iLCJwb2xpdGljYS5ibyIsInByb2Zlc2lvbmFsLmJvIiwicGx1cmluYWNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIi'@;
put 'LCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJoei5iciIsImJpYi5iciIs'@;
put 'ImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIs'@;
put 'ImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVp'@;
put 'cmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdv'@;
put 'di5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBp'@;
put 'Lmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIs'@;
put 'ImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVsLmJyIiwibG9nLmJyIiwibG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVk'@;
put 'LmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5vdC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIs'@;
put 'InBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVwLmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2Ft'@;
put 'cGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJzbGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIs'@;
put 'InRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIiLCJ6bGcuYnIiLCJicyIsImNvbS5icyIsIm5ldC5icyIsIm9yZy5icyIsImVkdS5icyIsImdvdi5icyIsImJ0IiwiY29tLmJ0Iiwi'@;
put 'ZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20uYnkiLCJvZi5ieSIsImJ6IiwiY29tLmJ6IiwibmV0LmJ6Iiwib3JnLmJ6IiwiZWR1LmJ6IiwiZ292LmJ6IiwiY2EiLCJhYi5jYSIs'@;
put 'ImJjLmNhIiwibWIuY2EiLCJuYi5jYSIsIm5mLmNhIiwibmwuY2EiLCJucy5jYSIsIm50LmNhIiwibnUuY2EiLCJvbi5jYSIsInBlLmNhIiwicWMuY2EiLCJzay5jYSIsInlrLmNhIiwiZ2MuY2EiLCJjYXQiLCJjYyIsImNkIiwiZ292LmNkIiwiY2YiLCJjZyIsImNoIiwiY2kiLCJvcmcuY2ki'@;
put 'LCJvci5jaSIsImNvbS5jaSIsImNvLmNpIiwiZWR1LmNpIiwiZWQuY2kiLCJhYy5jaSIsIm5ldC5jaSIsImdvLmNpIiwiYXNzby5jaSIsImFceGU5cm9wb3J0LmNpIiwiaW50LmNpIiwicHJlc3NlLmNpIiwibWQuY2kiLCJnb3V2LmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwi'@;
put 'Z29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3YuY24iLCJuZXQuY24iLCJvcmcuY24iLCJtaWwuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdmNTFcdTdlZGMu'@;
put 'Y24iLCJcdTdkYjJcdTdkNjEuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJnei5jbiIsImd4LmNuIiwiaGEuY24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJobC5jbiIsImhuLmNuIiwiamwuY24iLCJqcy5jbiIsImp4LmNuIiwibG4uY24i'@;
put 'LCJubS5jbiIsIm54LmNuIiwicWguY24iLCJzYy5jbiIsInNkLmNuIiwic2guY24iLCJzbi5jbiIsInN4LmNuIiwidGouY24iLCJ4ai5jbiIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImhrLmNuIiwibW8uY24iLCJ0dy5jbiIsImNvIiwiYXJ0cy5jbyIsImNvbS5jbyIsImVkdS5jbyIsImZp'@;
put 'cm0uY28iLCJnb3YuY28iLCJpbmZvLmNvIiwiaW50LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwicmVjLmNvIiwid2ViLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3IiLCJj'@;
put 'dSIsImNvbS5jdSIsImVkdS5jdSIsIm9yZy5jdSIsIm5ldC5jdSIsImdvdi5jdSIsImluZi5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaW50LmN2Iiwibm9tZS5jdiIsIm9yZy5jdiIsImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJj'@;
put 'eSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY29tLmRtIiwibmV0LmRtIiwib3JnLmRt'@;
put 'IiwiZWR1LmRtIiwiZ292LmRtIiwiZG8iLCJhcnQuZG8iLCJjb20uZG8iLCJlZHUuZG8iLCJnb2IuZG8iLCJnb3YuZG8iLCJtaWwuZG8iLCJuZXQuZG8iLCJvcmcuZG8iLCJzbGQuZG8iLCJ3ZWIuZG8iLCJkeiIsImFydC5keiIsImFzc28uZHoiLCJjb20uZHoiLCJlZHUuZHoiLCJnb3YuZHoi'@;
put 'LCJvcmcuZHoiLCJuZXQuZHoiLCJwb2wuZHoiLCJzb2MuZHoiLCJ0bS5keiIsImVjIiwiY29tLmVjIiwiaW5mby5lYyIsIm5ldC5lYyIsImZpbi5lYyIsImsxMi5lYyIsIm1lZC5lYyIsInByby5lYyIsIm9yZy5lYyIsImVkdS5lYyIsImdvdi5lYyIsImdvYi5lYyIsIm1pbC5lYyIsImVkdSIs'@;
put 'ImVlIiwiZWR1LmVlIiwiZ292LmVlIiwicmlpay5lZSIsImxpYi5lZSIsIm1lZC5lZSIsImNvbS5lZSIsInByaS5lZSIsImFpcC5lZSIsIm9yZy5lZSIsImZpZS5lZSIsImVnIiwiY29tLmVnIiwiZWR1LmVnIiwiZXVuLmVnIiwiZ292LmVnIiwibWlsLmVnIiwibmFtZS5lZyIsIm5ldC5lZyIs'@;
put 'Im9yZy5lZyIsInNjaS5lZyIsIiouZXIiLCJlcyIsImNvbS5lcyIsIm5vbS5lcyIsIm9yZy5lcyIsImdvYi5lcyIsImVkdS5lcyIsImV0IiwiY29tLmV0IiwiZ292LmV0Iiwib3JnLmV0IiwiZWR1LmV0IiwiYml6LmV0IiwibmFtZS5ldCIsImluZm8uZXQiLCJuZXQuZXQiLCJldSIsImZpIiwi'@;
put 'YWxhbmQuZmkiLCJmaiIsImFjLmZqIiwiYml6LmZqIiwiY29tLmZqIiwiZ292LmZqIiwiaW5mby5maiIsIm1pbC5maiIsIm5hbWUuZmoiLCJuZXQuZmoiLCJvcmcuZmoiLCJwcm8uZmoiLCIqLmZrIiwiY29tLmZtIiwiZWR1LmZtIiwibmV0LmZtIiwib3JnLmZtIiwiZm0iLCJmbyIsImZyIiwi'@;
put 'YXNzby5mciIsImNvbS5mciIsImdvdXYuZnIiLCJub20uZnIiLCJwcmQuZnIiLCJ0bS5mciIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiYXZvdWVzLmZyIiwiY2NpLmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZy'@;
put 'IiwiZ2VvbWV0cmUtZXhwZXJ0LmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsImdhIiwiZ2IiLCJlZHUuZ2QiLCJnb3YuZ2QiLCJnZCIsImdlIiwi'@;
put 'Y29tLmdlIiwiZWR1LmdlIiwiZ292LmdlIiwib3JnLmdlIiwibWlsLmdlIiwibmV0LmdlIiwicHZ0LmdlIiwiZ2YiLCJnZyIsImNvLmdnIiwibmV0LmdnIiwib3JnLmdnIiwiZ2giLCJjb20uZ2giLCJlZHUuZ2giLCJnb3YuZ2giLCJvcmcuZ2giLCJtaWwuZ2giLCJnaSIsImNvbS5naSIsImx0'@;
put 'ZC5naSIsImdvdi5naSIsIm1vZC5naSIsImVkdS5naSIsIm9yZy5naSIsImdsIiwiY28uZ2wiLCJjb20uZ2wiLCJlZHUuZ2wiLCJuZXQuZ2wiLCJvcmcuZ2wiLCJnbSIsImduIiwiYWMuZ24iLCJjb20uZ24iLCJlZHUuZ24iLCJnb3YuZ24iLCJvcmcuZ24iLCJuZXQuZ24iLCJnb3YiLCJncCIs'@;
put 'ImNvbS5ncCIsIm5ldC5ncCIsIm1vYmkuZ3AiLCJlZHUuZ3AiLCJvcmcuZ3AiLCJhc3NvLmdwIiwiZ3EiLCJnciIsImNvbS5nciIsImVkdS5nciIsIm5ldC5nciIsIm9yZy5nciIsImdvdi5nciIsImdzIiwiZ3QiLCJjb20uZ3QiLCJlZHUuZ3QiLCJnb2IuZ3QiLCJpbmQuZ3QiLCJtaWwuZ3Qi'@;
put 'LCJuZXQuZ3QiLCJvcmcuZ3QiLCJndSIsImNvbS5ndSIsImVkdS5ndSIsImdvdi5ndSIsImd1YW0uZ3UiLCJpbmZvLmd1IiwibmV0Lmd1Iiwib3JnLmd1Iiwid2ViLmd1IiwiZ3ciLCJneSIsImNvLmd5IiwiY29tLmd5IiwiZWR1Lmd5IiwiZ292Lmd5IiwibmV0Lmd5Iiwib3JnLmd5IiwiaGsi'@;
put 'LCJjb20uaGsiLCJlZHUuaGsiLCJnb3YuaGsiLCJpZHYuaGsiLCJuZXQuaGsiLCJvcmcuaGsiLCJcdTUxNmNcdTUzZjguaGsiLCJcdTY1NTlcdTgwYjIuaGsiLCJcdTY1NGVcdTgwYjIuaGsiLCJcdTY1M2ZcdTVlOWMuaGsiLCJcdTUwMGJcdTRlYmEuaGsiLCJcdTRlMmFcdWZmZmRcdWZmZmQu'@;
put 'aGsiLCJcdTdiODdcdTRlYmEuaGsiLCJcdTdkYjJcdTdlZGMuaGsiLCJcdTdmNTFcdTdlZGMuaGsiLCJcdTdlYzRcdTdlNTQuaGsiLCJcdTdkYjJcdTdkNjEuaGsiLCJcdTdmNTFcdTdkNjEuaGsiLCJcdTdlYzRcdTdlYzcuaGsiLCJcdTdkNDRcdTdlNTQuaGsiLCJcdTdkNDRcdTdlYzcuaGsi'@;
put 'LCJobSIsImhuIiwiY29tLmhuIiwiZWR1LmhuIiwib3JnLmhuIiwibmV0LmhuIiwibWlsLmhuIiwiZ29iLmhuIiwiaHIiLCJpei5ociIsImZyb20uaHIiLCJuYW1lLmhyIiwiY29tLmhyIiwiaHQiLCJjb20uaHQiLCJzaG9wLmh0IiwiZmlybS5odCIsImluZm8uaHQiLCJhZHVsdC5odCIsIm5l'@;
put 'dC5odCIsInByby5odCIsIm9yZy5odCIsIm1lZC5odCIsImFydC5odCIsImNvb3AuaHQiLCJwb2wuaHQiLCJhc3NvLmh0IiwiZWR1Lmh0IiwicmVsLmh0IiwiZ291di5odCIsInBlcnNvLmh0IiwiaHUiLCJjby5odSIsImluZm8uaHUiLCJvcmcuaHUiLCJwcml2Lmh1Iiwic3BvcnQuaHUiLCJ0'@;
put 'bS5odSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiZXJvdGljYS5odSIsImVyb3Rpa2EuaHUiLCJmaWxtLmh1IiwiZm9ydW0uaHUiLCJnYW1lcy5odSIsImhvdGVsLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5o'@;
put 'dSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1IiwicmVrbGFtLmh1Iiwic2V4Lmh1Iiwic2hvcC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG96c2RlLmh1IiwidXRhemFzLmh1IiwidmlkZW8uaHUiLCJpZCIsImFjLmlkIiwiYml6LmlkIiwiY28uaWQiLCJkZXNhLmlkIiwiZ28u'@;
put 'aWQiLCJtaWwuaWQiLCJteS5pZCIsIm5ldC5pZCIsIm9yLmlkIiwicG9ucGVzLmlkIiwic2NoLmlkIiwid2ViLmlkIiwiaWUiLCJnb3YuaWUiLCJpbCIsImFjLmlsIiwiY28uaWwiLCJnb3YuaWwiLCJpZGYuaWwiLCJrMTIuaWwiLCJtdW5pLmlsIiwibmV0LmlsIiwib3JnLmlsIiwiaW0iLCJh'@;
put 'Yy5pbSIsImNvLmltIiwiY29tLmltIiwibHRkLmNvLmltIiwibmV0LmltIiwib3JnLmltIiwicGxjLmNvLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiY28uaW4iLCJmaXJtLmluIiwibmV0LmluIiwib3JnLmluIiwiZ2VuLmluIiwiaW5kLmluIiwibmljLmluIiwiYWMuaW4iLCJlZHUuaW4i'@;
put 'LCJyZXMuaW4iLCJnb3YuaW4iLCJtaWwuaW4iLCJpbmZvIiwiaW50IiwiZXUuaW50IiwiaW8iLCJjb20uaW8iLCJpcSIsImdvdi5pcSIsImVkdS5pcSIsIm1pbC5pcSIsImNvbS5pcSIsIm9yZy5pcSIsIm5ldC5pcSIsImlyIiwiYWMuaXIiLCJjby5pciIsImdvdi5pciIsImlkLmlyIiwibmV0'@;
put 'LmlyIiwib3JnLmlyIiwic2NoLmlyIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiaXMiLCJuZXQuaXMiLCJjb20uaXMiLCJlZHUuaXMiLCJnb3YuaXMiLCJvcmcuaXMiLCJpbnQuaXMiLCJpdCIsImdvdi5p'@;
put 'dCIsImVkdS5pdCIsImFici5pdCIsImFicnV6em8uaXQiLCJhb3N0YS12YWxsZXkuaXQiLCJhb3N0YXZhbGxleS5pdCIsImJhcy5pdCIsImJhc2lsaWNhdGEuaXQiLCJjYWwuaXQiLCJjYWxhYnJpYS5pdCIsImNhbS5pdCIsImNhbXBhbmlhLml0IiwiZW1pbGlhLXJvbWFnbmEuaXQiLCJlbWls'@;
put 'aWFyb21hZ25hLml0IiwiZW1yLml0IiwiZnJpdWxpLXYtZ2l1bGlhLml0IiwiZnJpdWxpLXZlLWdpdWxpYS5pdCIsImZyaXVsaS12ZWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpLXZnaXVsaWEuaXQiLCJmcml1'@;
put 'bGl2LWdpdWxpYS5pdCIsImZyaXVsaXZlLWdpdWxpYS5pdCIsImZyaXVsaXZlZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpdmdpdWxpYS5pdCIsImZ2Zy5pdCIsImxhei5pdCIsImxhemlvLml0IiwibGlnLml0Iiwi'@;
put 'bGlndXJpYS5pdCIsImxvbS5pdCIsImxvbWJhcmRpYS5pdCIsImxvbWJhcmR5Lml0IiwibHVjYW5pYS5pdCIsIm1hci5pdCIsIm1hcmNoZS5pdCIsIm1vbC5pdCIsIm1vbGlzZS5pdCIsInBpZWRtb250Lml0IiwicGllbW9udGUuaXQiLCJwbW4uaXQiLCJwdWcuaXQiLCJwdWdsaWEuaXQiLCJz'@;
put 'YXIuaXQiLCJzYXJkZWduYS5pdCIsInNhcmRpbmlhLml0Iiwic2ljLml0Iiwic2ljaWxpYS5pdCIsInNpY2lseS5pdCIsInRhYS5pdCIsInRvcy5pdCIsInRvc2NhbmEuaXQiLCJ0cmVudGluLXN1ZC10aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbi1zdWR0aXJv'@;
put 'bC5pdCIsInRyZW50aW4tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdl'@;
put 'Lml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRp'@;
put 'cm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm8uaXQiLCJ0cmVudGlub2EtYWRpZ2UuaXQiLCJ0cmVudGlub2FhZGlnZS5pdCIsInRyZW50aW5vYWx0by1hZGlnZS5pdCIsInRyZW50aW5vYWx0b2FkaWdlLml0IiwidHJlbnRpbm9zLXRpcm9sLml0IiwidHJlbnRpbm9z'@;
put 'dGlyb2wuaXQiLCJ0cmVudGlub3N1ZC10aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm9zdWR0aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWQtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWR0aXJvbC5pdCIsInRyZW50aW5zdWQt'@;
put 'dGlyb2wuaXQiLCJ0cmVudGluc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbnN1ZHRpcm9sLml0IiwidHJlbnRpbnNceGZjZHRpcm9sLml0IiwidHJlbnRpbnN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluc3VlZHRpcm9sLml0IiwidHVzY2FueS5pdCIsInVtYi5pdCIsInVtYnJpYS5pdCIsInZhbC1k'@;
put 'LWFvc3RhLml0IiwidmFsLWRhb3N0YS5pdCIsInZhbGQtYW9zdGEuaXQiLCJ2YWxkYW9zdGEuaXQiLCJ2YWxsZS1hb3N0YS5pdCIsInZhbGxlLWQtYW9zdGEuaXQiLCJ2YWxsZS1kYW9zdGEuaXQiLCJ2YWxsZWFvc3RhLml0IiwidmFsbGVkLWFvc3RhLml0IiwidmFsbGVkYW9zdGEuaXQiLCJ2'@;
put 'YWxsZWUtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtYW9zdGUuaXQiLCJ2YWxsZWUtZC1hb3N0ZS5pdCIsInZhbGxceGU5ZS1kLWFvc3RlLml0IiwidmFsbGVlYW9zdGUuaXQiLCJ2YWxsXHhlOWVhb3N0ZS5pdCIsInZhbGxlZWRhb3N0ZS5pdCIsInZhbGxceGU5ZWRhb3N0ZS5pdCIsInZhby5pdCIs'@;
put 'InZkYS5pdCIsInZlbi5pdCIsInZlbmV0by5pdCIsImFnLml0IiwiYWdyaWdlbnRvLml0IiwiYWwuaXQiLCJhbGVzc2FuZHJpYS5pdCIsImFsdG8tYWRpZ2UuaXQiLCJhbHRvYWRpZ2UuaXQiLCJhbi5pdCIsImFuY29uYS5pdCIsImFuZHJpYS1iYXJsZXR0YS10cmFuaS5pdCIsImFuZHJpYS10'@;
put 'cmFuaS1iYXJsZXR0YS5pdCIsImFuZHJpYWJhcmxldHRhdHJhbmkuaXQiLCJhbmRyaWF0cmFuaWJhcmxldHRhLml0IiwiYW8uaXQiLCJhb3N0YS5pdCIsImFvc3RlLml0IiwiYXAuaXQiLCJhcS5pdCIsImFxdWlsYS5pdCIsImFyLml0IiwiYXJlenpvLml0IiwiYXNjb2xpLXBpY2Vuby5pdCIs'@;
put 'ImFzY29saXBpY2Vuby5pdCIsImFzdGkuaXQiLCJhdC5pdCIsImF2Lml0IiwiYXZlbGxpbm8uaXQiLCJiYS5pdCIsImJhbHNhbi1zdWR0aXJvbC5pdCIsImJhbHNhbi1zXHhmY2R0aXJvbC5pdCIsImJhbHNhbi1zdWVkdGlyb2wuaXQiLCJiYWxzYW4uaXQiLCJiYXJpLml0IiwiYmFybGV0dGEt'@;
put 'dHJhbmktYW5kcmlhLml0IiwiYmFybGV0dGF0cmFuaWFuZHJpYS5pdCIsImJlbGx1bm8uaXQiLCJiZW5ldmVudG8uaXQiLCJiZXJnYW1vLml0IiwiYmcuaXQiLCJiaS5pdCIsImJpZWxsYS5pdCIsImJsLml0IiwiYm4uaXQiLCJiby5pdCIsImJvbG9nbmEuaXQiLCJib2x6YW5vLWFsdG9hZGln'@;
put 'ZS5pdCIsImJvbHphbm8uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYm96ZW4uaXQiLCJici5pdCIsImJyZXNjaWEuaXQiLCJicmluZGlzaS5pdCIsImJzLml0IiwiYnQuaXQiLCJidWxzYW4tc3VkdGlyb2wuaXQi'@;
put 'LCJidWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJidWxzYW4tc3VlZHRpcm9sLml0IiwiYnVsc2FuLml0IiwiYnouaXQiLCJjYS5pdCIsImNhZ2xpYXJpLml0IiwiY2FsdGFuaXNzZXR0YS5pdCIsImNhbXBpZGFuby1tZWRpby5pdCIsImNhbXBpZGFub21lZGlvLml0IiwiY2FtcG9iYXNzby5pdCIs'@;
put 'ImNhcmJvbmlhLWlnbGVzaWFzLml0IiwiY2FyYm9uaWFpZ2xlc2lhcy5pdCIsImNhcnJhcmEtbWFzc2EuaXQiLCJjYXJyYXJhbWFzc2EuaXQiLCJjYXNlcnRhLml0IiwiY2F0YW5pYS5pdCIsImNhdGFuemFyby5pdCIsImNiLml0IiwiY2UuaXQiLCJjZXNlbmEtZm9ybGkuaXQiLCJjZXNlbmEt'@;
put 'Zm9ybFx4ZWMuaXQiLCJjZXNlbmFmb3JsaS5pdCIsImNlc2VuYWZvcmxceGVjLml0IiwiY2guaXQiLCJjaGlldGkuaXQiLCJjaS5pdCIsImNsLml0IiwiY24uaXQiLCJjby5pdCIsImNvbW8uaXQiLCJjb3NlbnphLml0IiwiY3IuaXQiLCJjcmVtb25hLml0IiwiY3JvdG9uZS5pdCIsImNzLml0'@;
put 'IiwiY3QuaXQiLCJjdW5lby5pdCIsImN6Lml0IiwiZGVsbC1vZ2xpYXN0cmEuaXQiLCJkZWxsb2dsaWFzdHJhLml0IiwiZW4uaXQiLCJlbm5hLml0IiwiZmMuaXQiLCJmZS5pdCIsImZlcm1vLml0IiwiZmVycmFyYS5pdCIsImZnLml0IiwiZmkuaXQiLCJmaXJlbnplLml0IiwiZmxvcmVuY2Uu'@;
put 'aXQiLCJmbS5pdCIsImZvZ2dpYS5pdCIsImZvcmxpLWNlc2VuYS5pdCIsImZvcmxceGVjLWNlc2VuYS5pdCIsImZvcmxpY2VzZW5hLml0IiwiZm9ybFx4ZWNjZXNlbmEuaXQiLCJmci5pdCIsImZyb3Npbm9uZS5pdCIsImdlLml0IiwiZ2Vub2EuaXQiLCJnZW5vdmEuaXQiLCJnby5pdCIsImdv'@;
put 'cml6aWEuaXQiLCJnci5pdCIsImdyb3NzZXRvLml0IiwiaWdsZXNpYXMtY2FyYm9uaWEuaXQiLCJpZ2xlc2lhc2NhcmJvbmlhLml0IiwiaW0uaXQiLCJpbXBlcmlhLml0IiwiaXMuaXQiLCJpc2VybmlhLml0Iiwia3IuaXQiLCJsYS1zcGV6aWEuaXQiLCJsYXF1aWxhLml0IiwibGFzcGV6aWEu'@;
put 'aXQiLCJsYXRpbmEuaXQiLCJsYy5pdCIsImxlLml0IiwibGVjY2UuaXQiLCJsZWNjby5pdCIsImxpLml0IiwibGl2b3Juby5pdCIsImxvLml0IiwibG9kaS5pdCIsImx0Lml0IiwibHUuaXQiLCJsdWNjYS5pdCIsIm1hY2VyYXRhLml0IiwibWFudG92YS5pdCIsIm1hc3NhLWNhcnJhcmEuaXQi'@;
put 'LCJtYXNzYWNhcnJhcmEuaXQiLCJtYXRlcmEuaXQiLCJtYi5pdCIsIm1jLml0IiwibWUuaXQiLCJtZWRpby1jYW1waWRhbm8uaXQiLCJtZWRpb2NhbXBpZGFuby5pdCIsIm1lc3NpbmEuaXQiLCJtaS5pdCIsIm1pbGFuLml0IiwibWlsYW5vLml0IiwibW4uaXQiLCJtby5pdCIsIm1vZGVuYS5p'@;
put 'dCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YS5pdCIsIm1vbnphYnJpYW56YS5pdCIsIm1vbnphZWJyaWFuemEuaXQiLCJtb256YWVkZWxsYWJyaWFuemEuaXQiLCJtcy5pdCIsIm10Lml0IiwibmEuaXQiLCJuYXBsZXMuaXQiLCJuYXBvbGku'@;
put 'aXQiLCJuby5pdCIsIm5vdmFyYS5pdCIsIm51Lml0IiwibnVvcm8uaXQiLCJvZy5pdCIsIm9nbGlhc3RyYS5pdCIsIm9sYmlhLXRlbXBpby5pdCIsIm9sYmlhdGVtcGlvLml0Iiwib3IuaXQiLCJvcmlzdGFuby5pdCIsIm90Lml0IiwicGEuaXQiLCJwYWRvdmEuaXQiLCJwYWR1YS5pdCIsInBh'@;
put 'bGVybW8uaXQiLCJwYXJtYS5pdCIsInBhdmlhLml0IiwicGMuaXQiLCJwZC5pdCIsInBlLml0IiwicGVydWdpYS5pdCIsInBlc2Fyby11cmJpbm8uaXQiLCJwZXNhcm91cmJpbm8uaXQiLCJwZXNjYXJhLml0IiwicGcuaXQiLCJwaS5pdCIsInBpYWNlbnphLml0IiwicGlzYS5pdCIsInBpc3Rv'@;
put 'aWEuaXQiLCJwbi5pdCIsInBvLml0IiwicG9yZGVub25lLml0IiwicG90ZW56YS5pdCIsInByLml0IiwicHJhdG8uaXQiLCJwdC5pdCIsInB1Lml0IiwicHYuaXQiLCJwei5pdCIsInJhLml0IiwicmFndXNhLml0IiwicmF2ZW5uYS5pdCIsInJjLml0IiwicmUuaXQiLCJyZWdnaW8tY2FsYWJy'@;
put 'aWEuaXQiLCJyZWdnaW8tZW1pbGlhLml0IiwicmVnZ2lvY2FsYWJyaWEuaXQiLCJyZWdnaW9lbWlsaWEuaXQiLCJyZy5pdCIsInJpLml0IiwicmlldGkuaXQiLCJyaW1pbmkuaXQiLCJybS5pdCIsInJuLml0Iiwicm8uaXQiLCJyb21hLml0Iiwicm9tZS5pdCIsInJvdmlnby5pdCIsInNhLml0'@;
put 'Iiwic2FsZXJuby5pdCIsInNhc3NhcmkuaXQiLCJzYXZvbmEuaXQiLCJzaS5pdCIsInNpZW5hLml0Iiwic2lyYWN1c2EuaXQiLCJzby5pdCIsInNvbmRyaW8uaXQiLCJzcC5pdCIsInNyLml0Iiwic3MuaXQiLCJzdWVkdGlyb2wuaXQiLCJzXHhmY2R0aXJvbC5pdCIsInN2Lml0IiwidGEuaXQi'@;
put 'LCJ0YXJhbnRvLml0IiwidGUuaXQiLCJ0ZW1waW8tb2xiaWEuaXQiLCJ0ZW1waW9vbGJpYS5pdCIsInRlcmFtby5pdCIsInRlcm5pLml0IiwidG4uaXQiLCJ0by5pdCIsInRvcmluby5pdCIsInRwLml0IiwidHIuaXQiLCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXQiLCJ0cmFuaS1iYXJsZXR0'@;
put 'YS1hbmRyaWEuaXQiLCJ0cmFuaWFuZHJpYWJhcmxldHRhLml0IiwidHJhbmliYXJsZXR0YWFuZHJpYS5pdCIsInRyYXBhbmkuaXQiLCJ0cmVudG8uaXQiLCJ0cmV2aXNvLml0IiwidHJpZXN0ZS5pdCIsInRzLml0IiwidHVyaW4uaXQiLCJ0di5pdCIsInVkLml0IiwidWRpbmUuaXQiLCJ1cmJp'@;
put 'bm8tcGVzYXJvLml0IiwidXJiaW5vcGVzYXJvLml0IiwidmEuaXQiLCJ2YXJlc2UuaXQiLCJ2Yi5pdCIsInZjLml0IiwidmUuaXQiLCJ2ZW5lemlhLml0IiwidmVuaWNlLml0IiwidmVyYmFuaWEuaXQiLCJ2ZXJjZWxsaS5pdCIsInZlcm9uYS5pdCIsInZpLml0Iiwidmliby12YWxlbnRpYS5p'@;
put 'dCIsInZpYm92YWxlbnRpYS5pdCIsInZpY2VuemEuaXQiLCJ2aXRlcmJvLml0IiwidnIuaXQiLCJ2cy5pdCIsInZ0Lml0IiwidnYuaXQiLCJqZSIsImNvLmplIiwibmV0LmplIiwib3JnLmplIiwiKi5qbSIsImpvIiwiY29tLmpvIiwib3JnLmpvIiwibmV0LmpvIiwiZWR1LmpvIiwic2NoLmpv'@;
put 'IiwiZ292LmpvIiwibWlsLmpvIiwibmFtZS5qbyIsImpvYnMiLCJqcCIsImFjLmpwIiwiYWQuanAiLCJjby5qcCIsImVkLmpwIiwiZ28uanAiLCJnci5qcCIsImxnLmpwIiwibmUuanAiLCJvci5qcCIsImFpY2hpLmpwIiwiYWtpdGEuanAiLCJhb21vcmkuanAiLCJjaGliYS5qcCIsImVoaW1l'@;
put 'LmpwIiwiZnVrdWkuanAiLCJmdWt1b2thLmpwIiwiZnVrdXNoaW1hLmpwIiwiZ2lmdS5qcCIsImd1bm1hLmpwIiwiaGlyb3NoaW1hLmpwIiwiaG9ra2FpZG8uanAiLCJoeW9nby5qcCIsImliYXJha2kuanAiLCJpc2hpa2F3YS5qcCIsIml3YXRlLmpwIiwia2FnYXdhLmpwIiwia2Fnb3NoaW1h'@;
put 'LmpwIiwia2FuYWdhd2EuanAiLCJrb2NoaS5qcCIsImt1bWFtb3RvLmpwIiwia3lvdG8uanAiLCJtaWUuanAiLCJtaXlhZ2kuanAiLCJtaXlhemFraS5qcCIsIm5hZ2Fuby5qcCIsIm5hZ2FzYWtpLmpwIiwibmFyYS5qcCIsIm5paWdhdGEuanAiLCJvaXRhLmpwIiwib2theWFtYS5qcCIsIm9r'@;
put 'aW5hd2EuanAiLCJvc2FrYS5qcCIsInNhZ2EuanAiLCJzYWl0YW1hLmpwIiwic2hpZ2EuanAiLCJzaGltYW5lLmpwIiwic2hpenVva2EuanAiLCJ0b2NoaWdpLmpwIiwidG9rdXNoaW1hLmpwIiwidG9reW8uanAiLCJ0b3R0b3JpLmpwIiwidG95YW1hLmpwIiwid2FrYXlhbWEuanAiLCJ5YW1h'@;
put 'Z2F0YS5qcCIsInlhbWFndWNoaS5qcCIsInlhbWFuYXNoaS5qcCIsIlx1NjgwM1x1NjcyOC5qcCIsIlx1NjExYlx1NzdlNS5qcCIsIlx1NjExYlx1NWE5Yi5qcCIsIlx1NTE3NVx1NWVhYi5qcCIsIlx1NzE4YVx1NjcyYy5qcCIsIlx1ODMyOFx1NTdjZS5qcCIsIlx1NTMxN1x1NmQ3N1x1OTA1'@;
put 'My5qcCIsIlx1NTM0M1x1ODQ0OS5qcCIsIlx1NTQ4Y1x1NmI0Y1x1NWM3MS5qcCIsIlx1OTU3N1x1NWQwZS5qcCIsIlx1OTU3N1x1OTFjZS5qcCIsIlx1NjViMFx1NmY1Zi5qcCIsIlx1OTc1Mlx1NjhlZS5qcCIsIlx1OTc1OVx1NWNhMS5qcCIsIlx1Njc3MVx1NGVhYy5qcCIsIlx1NzdmM1x1'@;
put 'NWRkZC5qcCIsIlx1NTdmY1x1NzM4OS5qcCIsIlx1NGUwOVx1OTFjZC5qcCIsIlx1NGVhY1x1OTBmZC5qcCIsIlx1NGY1MFx1OGNjMC5qcCIsIlx1NTkyN1x1NTIwNi5qcCIsIlx1NTkyN1x1OTYyYS5qcCIsIlx1NTk0OFx1ODI2Zi5qcCIsIlx1NWJhZVx1NTdjZS5qcCIsIlx1NWJhZVx1NWQw'@;
put 'ZS5qcCIsIlx1NWJjY1x1NWM3MS5qcCIsIlx1NWM3MVx1NTNlMy5qcCIsIlx1NWM3MVx1NWY2Mi5qcCIsIlx1NWM3MVx1NjhhOC5qcCIsIlx1NWNhOVx1NjI0Yi5qcCIsIlx1NWM5MFx1OTYxYy5qcCIsIlx1NWNhMVx1NWM3MS5qcCIsIlx1NWNmNlx1NjgzOS5qcCIsIlx1NWU4M1x1NWNmNi5q'@;
put 'cCIsIlx1NWZiM1x1NWNmNi5qcCIsIlx1NmM5Nlx1N2UwNC5qcCIsIlx1NmVjYlx1OGNjMC5qcCIsIlx1Nzk1ZVx1NTk0OFx1NWRkZC5qcCIsIlx1Nzk4Zlx1NGU5NS5qcCIsIlx1Nzk4Zlx1NWNhMS5qcCIsIlx1Nzk4Zlx1NWNmNi5qcCIsIlx1NzljYlx1NzUzMC5qcCIsIlx1N2ZhNFx1OTlh'@;
put 'Yy5qcCIsIlx1OTk5OVx1NWRkZC5qcCIsIlx1OWFkOFx1NzdlNS5qcCIsIlx1OWNlNVx1NTNkNi5qcCIsIlx1OWU3Zlx1NTE1MFx1NWNmNi5qcCIsIioua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIqLmtvYmUuanAiLCIqLm5hZ295YS5qcCIsIiouc2FwcG9yby5qcCIsIiouc2Vu'@;
put 'ZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lmthd2FzYWtpLmpwIiwiIWNpdHkua2l0YWt5dXNodS5qcCIsIiFjaXR5LmtvYmUuanAiLCIhY2l0eS5uYWdveWEuanAiLCIhY2l0eS5zYXBwb3JvLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiIWNpdHkueW9rb2hhbWEuanAiLCJhaXNhaS5h'@;
put 'aWNoaS5qcCIsImFtYS5haWNoaS5qcCIsImFuam8uYWljaGkuanAiLCJhc3VrZS5haWNoaS5qcCIsImNoaXJ5dS5haWNoaS5qcCIsImNoaXRhLmFpY2hpLmpwIiwiZnVzby5haWNoaS5qcCIsImdhbWFnb3JpLmFpY2hpLmpwIiwiaGFuZGEuYWljaGkuanAiLCJoYXp1LmFpY2hpLmpwIiwiaGVr'@;
put 'aW5hbi5haWNoaS5qcCIsImhpZ2FzaGl1cmEuYWljaGkuanAiLCJpY2hpbm9taXlhLmFpY2hpLmpwIiwiaW5hemF3YS5haWNoaS5qcCIsImludXlhbWEuYWljaGkuanAiLCJpc3NoaWtpLmFpY2hpLmpwIiwiaXdha3VyYS5haWNoaS5qcCIsImthbmllLmFpY2hpLmpwIiwia2FyaXlhLmFpY2hp'@;
put 'LmpwIiwia2FzdWdhaS5haWNoaS5qcCIsImtpcmEuYWljaGkuanAiLCJraXlvc3UuYWljaGkuanAiLCJrb21ha2kuYWljaGkuanAiLCJrb25hbi5haWNoaS5qcCIsImtvdGEuYWljaGkuanAiLCJtaWhhbWEuYWljaGkuanAiLCJtaXlvc2hpLmFpY2hpLmpwIiwibmlzaGlvLmFpY2hpLmpwIiwi'@;
put 'bmlzc2hpbi5haWNoaS5qcCIsIm9idS5haWNoaS5qcCIsIm9ndWNoaS5haWNoaS5qcCIsIm9oYXJ1LmFpY2hpLmpwIiwib2themFraS5haWNoaS5qcCIsIm93YXJpYXNhaGkuYWljaGkuanAiLCJzZXRvLmFpY2hpLmpwIiwic2hpa2F0c3UuYWljaGkuanAiLCJzaGluc2hpcm8uYWljaGkuanAi'@;
put 'LCJzaGl0YXJhLmFpY2hpLmpwIiwidGFoYXJhLmFpY2hpLmpwIiwidGFrYWhhbWEuYWljaGkuanAiLCJ0b2Jpc2hpbWEuYWljaGkuanAiLCJ0b2VpLmFpY2hpLmpwIiwidG9nby5haWNoaS5qcCIsInRva2FpLmFpY2hpLmpwIiwidG9rb25hbWUuYWljaGkuanAiLCJ0b3lvYWtlLmFpY2hpLmpw'@;
put 'IiwidG95b2hhc2hpLmFpY2hpLmpwIiwidG95b2thd2EuYWljaGkuanAiLCJ0b3lvbmUuYWljaGkuanAiLCJ0b3lvdGEuYWljaGkuanAiLCJ0c3VzaGltYS5haWNoaS5qcCIsInlhdG9taS5haWNoaS5qcCIsImFraXRhLmFraXRhLmpwIiwiZGFpc2VuLmFraXRhLmpwIiwiZnVqaXNhdG8uYWtp'@;
put 'dGEuanAiLCJnb2pvbWUuYWtpdGEuanAiLCJoYWNoaXJvZ2F0YS5ha2l0YS5qcCIsImhhcHBvdS5ha2l0YS5qcCIsImhpZ2FzaGluYXJ1c2UuYWtpdGEuanAiLCJob25qby5ha2l0YS5qcCIsImhvbmp5by5ha2l0YS5qcCIsImlrYXdhLmFraXRhLmpwIiwia2FtaWtvYW5pLmFraXRhLmpwIiwi'@;
put 'a2FtaW9rYS5ha2l0YS5qcCIsImthdGFnYW1pLmFraXRhLmpwIiwia2F6dW5vLmFraXRhLmpwIiwia2l0YWFraXRhLmFraXRhLmpwIiwia29zYWthLmFraXRhLmpwIiwia3lvd2EuYWtpdGEuanAiLCJtaXNhdG8uYWtpdGEuanAiLCJtaXRhbmUuYWtpdGEuanAiLCJtb3JpeW9zaGkuYWtpdGEu'@;
put 'anAiLCJuaWthaG8uYWtpdGEuanAiLCJub3NoaXJvLmFraXRhLmpwIiwib2RhdGUuYWtpdGEuanAiLCJvZ2EuYWtpdGEuanAiLCJvZ2F0YS5ha2l0YS5qcCIsInNlbWJva3UuYWtpdGEuanAiLCJ5b2tvdGUuYWtpdGEuanAiLCJ5dXJpaG9uam8uYWtpdGEuanAiLCJhb21vcmkuYW9tb3JpLmpw'@;
put 'IiwiZ29ub2hlLmFvbW9yaS5qcCIsImhhY2hpbm9oZS5hb21vcmkuanAiLCJoYXNoaWthbWkuYW9tb3JpLmpwIiwiaGlyYW5haS5hb21vcmkuanAiLCJoaXJvc2FraS5hb21vcmkuanAiLCJpdGF5YW5hZ2kuYW9tb3JpLmpwIiwia3Vyb2lzaGkuYW9tb3JpLmpwIiwibWlzYXdhLmFvbW9yaS5q'@;
put 'cCIsIm11dHN1LmFvbW9yaS5qcCIsIm5ha2Fkb21hcmkuYW9tb3JpLmpwIiwibm9oZWppLmFvbW9yaS5qcCIsIm9pcmFzZS5hb21vcmkuanAiLCJvd2FuaS5hb21vcmkuanAiLCJyb2t1bm9oZS5hb21vcmkuanAiLCJzYW5ub2hlLmFvbW9yaS5qcCIsInNoaWNoaW5vaGUuYW9tb3JpLmpwIiwi'@;
put 'c2hpbmdvLmFvbW9yaS5qcCIsInRha2tvLmFvbW9yaS5qcCIsInRvd2FkYS5hb21vcmkuanAiLCJ0c3VnYXJ1LmFvbW9yaS5qcCIsInRzdXJ1dGEuYW9tb3JpLmpwIiwiYWJpa28uY2hpYmEuanAiLCJhc2FoaS5jaGliYS5qcCIsImNob25hbi5jaGliYS5qcCIsImNob3NlaS5jaGliYS5qcCIs'@;
put 'ImNob3NoaS5jaGliYS5qcCIsImNodW8uY2hpYmEuanAiLCJmdW5hYmFzaGkuY2hpYmEuanAiLCJmdXR0c3UuY2hpYmEuanAiLCJoYW5hbWlnYXdhLmNoaWJhLmpwIiwiaWNoaWhhcmEuY2hpYmEuanAiLCJpY2hpa2F3YS5jaGliYS5qcCIsImljaGlub21peWEuY2hpYmEuanAiLCJpbnphaS5j'@;
put 'aGliYS5qcCIsImlzdW1pLmNoaWJhLmpwIiwia2FtYWdheWEuY2hpYmEuanAiLCJrYW1vZ2F3YS5jaGliYS5qcCIsImthc2hpd2EuY2hpYmEuanAiLCJrYXRvcmkuY2hpYmEuanAiLCJrYXRzdXVyYS5jaGliYS5qcCIsImtpbWl0c3UuY2hpYmEuanAiLCJraXNhcmF6dS5jaGliYS5qcCIsImtv'@;
put 'emFraS5jaGliYS5qcCIsImt1anVrdXJpLmNoaWJhLmpwIiwia3lvbmFuLmNoaWJhLmpwIiwibWF0c3Vkby5jaGliYS5qcCIsIm1pZG9yaS5jaGliYS5qcCIsIm1paGFtYS5jaGliYS5qcCIsIm1pbmFtaWJvc28uY2hpYmEuanAiLCJtb2JhcmEuY2hpYmEuanAiLCJtdXRzdXphd2EuY2hpYmEu'@;
put 'anAiLCJuYWdhcmEuY2hpYmEuanAiLCJuYWdhcmV5YW1hLmNoaWJhLmpwIiwibmFyYXNoaW5vLmNoaWJhLmpwIiwibmFyaXRhLmNoaWJhLmpwIiwibm9kYS5jaGliYS5qcCIsIm9hbWlzaGlyYXNhdG8uY2hpYmEuanAiLCJvbWlnYXdhLmNoaWJhLmpwIiwib25qdWt1LmNoaWJhLmpwIiwib3Rh'@;
put 'a2kuY2hpYmEuanAiLCJzYWthZS5jaGliYS5qcCIsInNha3VyYS5jaGliYS5qcCIsInNoaW1vZnVzYS5jaGliYS5qcCIsInNoaXJha28uY2hpYmEuanAiLCJzaGlyb2kuY2hpYmEuanAiLCJzaGlzdWkuY2hpYmEuanAiLCJzb2RlZ2F1cmEuY2hpYmEuanAiLCJzb3NhLmNoaWJhLmpwIiwidGFr'@;
put 'by5jaGliYS5qcCIsInRhdGV5YW1hLmNoaWJhLmpwIiwidG9nYW5lLmNoaWJhLmpwIiwidG9obm9zaG8uY2hpYmEuanAiLCJ0b21pc2F0by5jaGliYS5qcCIsInVyYXlhc3UuY2hpYmEuanAiLCJ5YWNoaW1hdGEuY2hpYmEuanAiLCJ5YWNoaXlvLmNoaWJhLmpwIiwieW9rYWljaGliYS5jaGli'@;
put 'YS5qcCIsInlva29zaGliYWhpa2FyaS5jaGliYS5qcCIsInlvdHN1a2FpZG8uY2hpYmEuanAiLCJhaW5hbi5laGltZS5qcCIsImhvbmFpLmVoaW1lLmpwIiwiaWthdGEuZWhpbWUuanAiLCJpbWFiYXJpLmVoaW1lLmpwIiwiaXlvLmVoaW1lLmpwIiwia2FtaWppbWEuZWhpbWUuanAiLCJraWhv'@;
put 'a3UuZWhpbWUuanAiLCJrdW1ha29nZW4uZWhpbWUuanAiLCJtYXNha2kuZWhpbWUuanAiLCJtYXRzdW5vLmVoaW1lLmpwIiwibWF0c3V5YW1hLmVoaW1lLmpwIiwibmFtaWthdGEuZWhpbWUuanAiLCJuaWloYW1hLmVoaW1lLmpwIiwib3p1LmVoaW1lLmpwIiwic2Fpam8uZWhpbWUuanAiLCJz'@;
put 'ZWl5by5laGltZS5qcCIsInNoaWtva3VjaHVvLmVoaW1lLmpwIiwidG9iZS5laGltZS5qcCIsInRvb24uZWhpbWUuanAiLCJ1Y2hpa28uZWhpbWUuanAiLCJ1d2FqaW1hLmVoaW1lLmpwIiwieWF3YXRhaGFtYS5laGltZS5qcCIsImVjaGl6ZW4uZnVrdWkuanAiLCJlaWhlaWppLmZ1a3VpLmpw'@;
put 'IiwiZnVrdWkuZnVrdWkuanAiLCJpa2VkYS5mdWt1aS5qcCIsImthdHN1eWFtYS5mdWt1aS5qcCIsIm1paGFtYS5mdWt1aS5qcCIsIm1pbmFtaWVjaGl6ZW4uZnVrdWkuanAiLCJvYmFtYS5mdWt1aS5qcCIsIm9oaS5mdWt1aS5qcCIsIm9uby5mdWt1aS5qcCIsInNhYmFlLmZ1a3VpLmpwIiwi'@;
put 'c2FrYWkuZnVrdWkuanAiLCJ0YWthaGFtYS5mdWt1aS5qcCIsInRzdXJ1Z2EuZnVrdWkuanAiLCJ3YWthc2EuZnVrdWkuanAiLCJhc2hpeWEuZnVrdW9rYS5qcCIsImJ1emVuLmZ1a3Vva2EuanAiLCJjaGlrdWdvLmZ1a3Vva2EuanAiLCJjaGlrdWhvLmZ1a3Vva2EuanAiLCJjaGlrdWpvLmZ1'@;
put 'a3Vva2EuanAiLCJjaGlrdXNoaW5vLmZ1a3Vva2EuanAiLCJjaGlrdXplbi5mdWt1b2thLmpwIiwiY2h1by5mdWt1b2thLmpwIiwiZGF6YWlmdS5mdWt1b2thLmpwIiwiZnVrdWNoaS5mdWt1b2thLmpwIiwiaGFrYXRhLmZ1a3Vva2EuanAiLCJoaWdhc2hpLmZ1a3Vva2EuanAiLCJoaXJva2F3'@;
put 'YS5mdWt1b2thLmpwIiwiaGlzYXlhbWEuZnVrdW9rYS5qcCIsImlpenVrYS5mdWt1b2thLmpwIiwiaW5hdHN1a2kuZnVrdW9rYS5qcCIsImthaG8uZnVrdW9rYS5qcCIsImthc3VnYS5mdWt1b2thLmpwIiwia2FzdXlhLmZ1a3Vva2EuanAiLCJrYXdhcmEuZnVrdW9rYS5qcCIsImtlaXNlbi5m'@;
put 'dWt1b2thLmpwIiwia29nYS5mdWt1b2thLmpwIiwia3VyYXRlLmZ1a3Vva2EuanAiLCJrdXJvZ2kuZnVrdW9rYS5qcCIsImt1cnVtZS5mdWt1b2thLmpwIiwibWluYW1pLmZ1a3Vva2EuanAiLCJtaXlha28uZnVrdW9rYS5qcCIsIm1peWFtYS5mdWt1b2thLmpwIiwibWl5YXdha2EuZnVrdW9r'@;
put 'YS5qcCIsIm1penVtYWtpLmZ1a3Vva2EuanAiLCJtdW5ha2F0YS5mdWt1b2thLmpwIiwibmFrYWdhd2EuZnVrdW9rYS5qcCIsIm5ha2FtYS5mdWt1b2thLmpwIiwibmlzaGkuZnVrdW9rYS5qcCIsIm5vZ2F0YS5mdWt1b2thLmpwIiwib2dvcmkuZnVrdW9rYS5qcCIsIm9rYWdha2kuZnVrdW9r'@;
put 'YS5qcCIsIm9rYXdhLmZ1a3Vva2EuanAiLCJva2kuZnVrdW9rYS5qcCIsIm9tdXRhLmZ1a3Vva2EuanAiLCJvbmdhLmZ1a3Vva2EuanAiLCJvbm9qby5mdWt1b2thLmpwIiwib3RvLmZ1a3Vva2EuanAiLCJzYWlnYXdhLmZ1a3Vva2EuanAiLCJzYXNhZ3VyaS5mdWt1b2thLmpwIiwic2hpbmd1'@;
put 'LmZ1a3Vva2EuanAiLCJzaGlueW9zaGl0b21pLmZ1a3Vva2EuanAiLCJzaG9uYWkuZnVrdW9rYS5qcCIsInNvZWRhLmZ1a3Vva2EuanAiLCJzdWUuZnVrdW9rYS5qcCIsInRhY2hpYXJhaS5mdWt1b2thLmpwIiwidGFnYXdhLmZ1a3Vva2EuanAiLCJ0YWthdGEuZnVrdW9rYS5qcCIsInRvaG8u'@;
put 'ZnVrdW9rYS5qcCIsInRveW90c3UuZnVrdW9rYS5qcCIsInRzdWlraS5mdWt1b2thLmpwIiwidWtpaGEuZnVrdW9rYS5qcCIsInVtaS5mdWt1b2thLmpwIiwidXN1aS5mdWt1b2thLmpwIiwieWFtYWRhLmZ1a3Vva2EuanAiLCJ5YW1lLmZ1a3Vva2EuanAiLCJ5YW5hZ2F3YS5mdWt1b2thLmpw'@;
put 'IiwieXVrdWhhc2hpLmZ1a3Vva2EuanAiLCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwIiwiYWl6dW1pc2F0by5mdWt1c2hpbWEuanAiLCJhaXp1d2FrYW1hdHN1LmZ1a3VzaGltYS5qcCIsImFzYWthd2EuZnVrdXNoaW1hLmpwIiwiYmFuZGFpLmZ1a3VzaGltYS5qcCIsImRhdGUuZnVrdXNoaW1h'@;
put 'LmpwIiwiZnVrdXNoaW1hLmZ1a3VzaGltYS5qcCIsImZ1cnVkb25vLmZ1a3VzaGltYS5qcCIsImZ1dGFiYS5mdWt1c2hpbWEuanAiLCJoYW5hd2EuZnVrdXNoaW1hLmpwIiwiaGlnYXNoaS5mdWt1c2hpbWEuanAiLCJoaXJhdGEuZnVrdXNoaW1hLmpwIiwiaGlyb25vLmZ1a3VzaGltYS5qcCIs'@;
put 'ImlpdGF0ZS5mdWt1c2hpbWEuanAiLCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcCIsImlzaGlrYXdhLmZ1a3VzaGltYS5qcCIsIml3YWtpLmZ1a3VzaGltYS5qcCIsIml6dW1pemFraS5mdWt1c2hpbWEuanAiLCJrYWdhbWlpc2hpLmZ1a3VzaGltYS5qcCIsImthbmV5YW1hLmZ1a3VzaGltYS5q'@;
put 'cCIsImthd2FtYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFrYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFzaGlvYmFyYS5mdWt1c2hpbWEuanAiLCJrb29yaS5mdWt1c2hpbWEuanAiLCJrb3JpeWFtYS5mdWt1c2hpbWEuanAiLCJrdW5pbWkuZnVrdXNoaW1hLmpwIiwibWloYXJ1LmZ1a3VzaGltYS5q'@;
put 'cCIsIm1pc2hpbWEuZnVrdXNoaW1hLmpwIiwibmFtaWUuZnVrdXNoaW1hLmpwIiwibmFuZ28uZnVrdXNoaW1hLmpwIiwibmlzaGlhaXp1LmZ1a3VzaGltYS5qcCIsIm5pc2hpZ28uZnVrdXNoaW1hLmpwIiwib2t1bWEuZnVrdXNoaW1hLmpwIiwib21vdGVnby5mdWt1c2hpbWEuanAiLCJvbm8u'@;
put 'ZnVrdXNoaW1hLmpwIiwib3RhbWEuZnVrdXNoaW1hLmpwIiwic2FtZWdhd2EuZnVrdXNoaW1hLmpwIiwic2hpbW9nby5mdWt1c2hpbWEuanAiLCJzaGlyYWthd2EuZnVrdXNoaW1hLmpwIiwic2hvd2EuZnVrdXNoaW1hLmpwIiwic29tYS5mdWt1c2hpbWEuanAiLCJzdWthZ2F3YS5mdWt1c2hp'@;
put 'bWEuanAiLCJ0YWlzaGluLmZ1a3VzaGltYS5qcCIsInRhbWFrYXdhLmZ1a3VzaGltYS5qcCIsInRhbmFndXJhLmZ1a3VzaGltYS5qcCIsInRlbmVpLmZ1a3VzaGltYS5qcCIsInlhYnVraS5mdWt1c2hpbWEuanAiLCJ5YW1hdG8uZnVrdXNoaW1hLmpwIiwieWFtYXRzdXJpLmZ1a3VzaGltYS5q'@;
put 'cCIsInlhbmFpenUuZnVrdXNoaW1hLmpwIiwieXVnYXdhLmZ1a3VzaGltYS5qcCIsImFucGFjaGkuZ2lmdS5qcCIsImVuYS5naWZ1LmpwIiwiZ2lmdS5naWZ1LmpwIiwiZ2luYW4uZ2lmdS5qcCIsImdvZG8uZ2lmdS5qcCIsImd1am8uZ2lmdS5qcCIsImhhc2hpbWEuZ2lmdS5qcCIsImhpY2hp'@;
put 'c28uZ2lmdS5qcCIsImhpZGEuZ2lmdS5qcCIsImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcCIsImliaWdhd2EuZ2lmdS5qcCIsImlrZWRhLmdpZnUuanAiLCJrYWthbWlnYWhhcmEuZ2lmdS5qcCIsImthbmkuZ2lmdS5qcCIsImthc2FoYXJhLmdpZnUuanAiLCJrYXNhbWF0c3UuZ2lmdS5qcCIs'@;
put 'Imthd2F1ZS5naWZ1LmpwIiwia2l0YWdhdGEuZ2lmdS5qcCIsIm1pbm8uZ2lmdS5qcCIsIm1pbm9rYW1vLmdpZnUuanAiLCJtaXRha2UuZ2lmdS5qcCIsIm1penVuYW1pLmdpZnUuanAiLCJtb3Rvc3UuZ2lmdS5qcCIsIm5ha2F0c3VnYXdhLmdpZnUuanAiLCJvZ2FraS5naWZ1LmpwIiwic2Fr'@;
put 'YWhvZ2kuZ2lmdS5qcCIsInNla2kuZ2lmdS5qcCIsInNla2lnYWhhcmEuZ2lmdS5qcCIsInNoaXJha2F3YS5naWZ1LmpwIiwidGFqaW1pLmdpZnUuanAiLCJ0YWtheWFtYS5naWZ1LmpwIiwidGFydWkuZ2lmdS5qcCIsInRva2kuZ2lmdS5qcCIsInRvbWlrYS5naWZ1LmpwIiwid2Fub3VjaGku'@;
put 'Z2lmdS5qcCIsInlhbWFnYXRhLmdpZnUuanAiLCJ5YW90c3UuZ2lmdS5qcCIsInlvcm8uZ2lmdS5qcCIsImFubmFrYS5ndW5tYS5qcCIsImNoaXlvZGEuZ3VubWEuanAiLCJmdWppb2thLmd1bm1hLmpwIiwiaGlnYXNoaWFnYXRzdW1hLmd1bm1hLmpwIiwiaXNlc2FraS5ndW5tYS5qcCIsIml0'@;
put 'YWt1cmEuZ3VubWEuanAiLCJrYW5uYS5ndW5tYS5qcCIsImthbnJhLmd1bm1hLmpwIiwia2F0YXNoaW5hLmd1bm1hLmpwIiwia2F3YWJhLmd1bm1hLmpwIiwia2lyeXUuZ3VubWEuanAiLCJrdXNhdHN1Lmd1bm1hLmpwIiwibWFlYmFzaGkuZ3VubWEuanAiLCJtZWl3YS5ndW5tYS5qcCIsIm1p'@;
put 'ZG9yaS5ndW5tYS5qcCIsIm1pbmFrYW1pLmd1bm1hLmpwIiwibmFnYW5vaGFyYS5ndW5tYS5qcCIsIm5ha2Fub2pvLmd1bm1hLmpwIiwibmFubW9rdS5ndW5tYS5qcCIsIm51bWF0YS5ndW5tYS5qcCIsIm9penVtaS5ndW5tYS5qcCIsIm9yYS5ndW5tYS5qcCIsIm90YS5ndW5tYS5qcCIsInNo'@;
put 'aWJ1a2F3YS5ndW5tYS5qcCIsInNoaW1vbml0YS5ndW5tYS5qcCIsInNoaW50by5ndW5tYS5qcCIsInNob3dhLmd1bm1hLmpwIiwidGFrYXNha2kuZ3VubWEuanAiLCJ0YWtheWFtYS5ndW5tYS5qcCIsInRhbWFtdXJhLmd1bm1hLmpwIiwidGF0ZWJheWFzaGkuZ3VubWEuanAiLCJ0b21pb2th'@;
put 'Lmd1bm1hLmpwIiwidHN1a2l5b25vLmd1bm1hLmpwIiwidHN1bWFnb2kuZ3VubWEuanAiLCJ1ZW5vLmd1bm1hLmpwIiwieW9zaGlva2EuZ3VubWEuanAiLCJhc2FtaW5hbWkuaGlyb3NoaW1hLmpwIiwiZGFpd2EuaGlyb3NoaW1hLmpwIiwiZXRhamltYS5oaXJvc2hpbWEuanAiLCJmdWNodS5o'@;
put 'aXJvc2hpbWEuanAiLCJmdWt1eWFtYS5oaXJvc2hpbWEuanAiLCJoYXRzdWthaWNoaS5oaXJvc2hpbWEuanAiLCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGltYS5qcCIsImhvbmdvLmhpcm9zaGltYS5qcCIsImppbnNla2lrb2dlbi5oaXJvc2hpbWEuanAiLCJrYWl0YS5oaXJvc2hpbWEuanAi'@;
put 'LCJrdWkuaGlyb3NoaW1hLmpwIiwia3VtYW5vLmhpcm9zaGltYS5qcCIsImt1cmUuaGlyb3NoaW1hLmpwIiwibWloYXJhLmhpcm9zaGltYS5qcCIsIm1peW9zaGkuaGlyb3NoaW1hLmpwIiwibmFrYS5oaXJvc2hpbWEuanAiLCJvbm9taWNoaS5oaXJvc2hpbWEuanAiLCJvc2FraWthbWlqaW1h'@;
put 'Lmhpcm9zaGltYS5qcCIsIm90YWtlLmhpcm9zaGltYS5qcCIsInNha2EuaGlyb3NoaW1hLmpwIiwic2VyYS5oaXJvc2hpbWEuanAiLCJzZXJhbmlzaGkuaGlyb3NoaW1hLmpwIiwic2hpbmljaGkuaGlyb3NoaW1hLmpwIiwic2hvYmFyYS5oaXJvc2hpbWEuanAiLCJ0YWtlaGFyYS5oaXJvc2hp'@;
put 'bWEuanAiLCJhYmFzaGlyaS5ob2trYWlkby5qcCIsImFiaXJhLmhva2thaWRvLmpwIiwiYWliZXRzdS5ob2trYWlkby5qcCIsImFrYWJpcmEuaG9ra2FpZG8uanAiLCJha2tlc2hpLmhva2thaWRvLmpwIiwiYXNhaGlrYXdhLmhva2thaWRvLmpwIiwiYXNoaWJldHN1Lmhva2thaWRvLmpwIiwi'@;
put 'YXNob3JvLmhva2thaWRvLmpwIiwiYXNzYWJ1Lmhva2thaWRvLmpwIiwiYXRzdW1hLmhva2thaWRvLmpwIiwiYmliYWkuaG9ra2FpZG8uanAiLCJiaWVpLmhva2thaWRvLmpwIiwiYmlmdWthLmhva2thaWRvLmpwIiwiYmlob3JvLmhva2thaWRvLmpwIiwiYmlyYXRvcmkuaG9ra2FpZG8uanAi'@;
put 'LCJjaGlwcHViZXRzdS5ob2trYWlkby5qcCIsImNoaXRvc2UuaG9ra2FpZG8uanAiLCJkYXRlLmhva2thaWRvLmpwIiwiZWJldHN1Lmhva2thaWRvLmpwIiwiZW1iZXRzdS5ob2trYWlkby5qcCIsImVuaXdhLmhva2thaWRvLmpwIiwiZXJpbW8uaG9ra2FpZG8uanAiLCJlc2FuLmhva2thaWRv'@;
put 'LmpwIiwiZXNhc2hpLmhva2thaWRvLmpwIiwiZnVrYWdhd2EuaG9ra2FpZG8uanAiLCJmdWt1c2hpbWEuaG9ra2FpZG8uanAiLCJmdXJhbm8uaG9ra2FpZG8uanAiLCJmdXJ1YmlyYS5ob2trYWlkby5qcCIsImhhYm9yby5ob2trYWlkby5qcCIsImhha29kYXRlLmhva2thaWRvLmpwIiwiaGFt'@;
put 'YXRvbmJldHN1Lmhva2thaWRvLmpwIiwiaGlkYWthLmhva2thaWRvLmpwIiwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYXdhLmhva2thaWRvLmpwIiwiaGlyb28uaG9ra2FpZG8uanAiLCJob2t1cnl1Lmhva2thaWRvLmpwIiwiaG9rdXRvLmhva2thaWRvLmpwIiwiaG9u'@;
put 'YmV0c3UuaG9ra2FpZG8uanAiLCJob3Jva2FuYWkuaG9ra2FpZG8uanAiLCJob3Jvbm9iZS5ob2trYWlkby5qcCIsImlrZWRhLmhva2thaWRvLmpwIiwiaW1ha2FuZS5ob2trYWlkby5qcCIsImlzaGlrYXJpLmhva2thaWRvLmpwIiwiaXdhbWl6YXdhLmhva2thaWRvLmpwIiwiaXdhbmFpLmhv'@;
put 'a2thaWRvLmpwIiwia2FtaWZ1cmFuby5ob2trYWlkby5qcCIsImthbWlrYXdhLmhva2thaWRvLmpwIiwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanAiLCJrYW1pc3VuYWdhd2EuaG9ra2FpZG8uanAiLCJrYW1vZW5haS5ob2trYWlkby5qcCIsImtheWFiZS5ob2trYWlkby5qcCIsImtlbWJ1Y2hp'@;
put 'Lmhva2thaWRvLmpwIiwia2lrb25haS5ob2trYWlkby5qcCIsImtpbW9iZXRzdS5ob2trYWlkby5qcCIsImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanAiLCJraXRhbWkuaG9ra2FpZG8uanAiLCJraXlvc2F0by5ob2trYWlkby5qcCIsImtvc2hpbWl6dS5ob2trYWlkby5qcCIsImt1bm5lcHB1'@;
put 'Lmhva2thaWRvLmpwIiwia3VyaXlhbWEuaG9ra2FpZG8uanAiLCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanAiLCJrdXNoaXJvLmhva2thaWRvLmpwIiwia3V0Y2hhbi5ob2trYWlkby5qcCIsImt5b3dhLmhva2thaWRvLmpwIiwibWFzaGlrZS5ob2trYWlkby5qcCIsIm1hdHN1bWFlLmhva2th'@;
put 'aWRvLmpwIiwibWlrYXNhLmhva2thaWRvLmpwIiwibWluYW1pZnVyYW5vLmhva2thaWRvLmpwIiwibW9tYmV0c3UuaG9ra2FpZG8uanAiLCJtb3NldXNoaS5ob2trYWlkby5qcCIsIm11a2F3YS5ob2trYWlkby5qcCIsIm11cm9yYW4uaG9ra2FpZG8uanAiLCJuYWllLmhva2thaWRvLmpwIiwi'@;
put 'bmFrYWdhd2EuaG9ra2FpZG8uanAiLCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanAiLCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanAiLCJuYW5hZS5ob2trYWlkby5qcCIsIm5hbnBvcm8uaG9ra2FpZG8uanAiLCJuYXlvcm8uaG9ra2FpZG8uanAiLCJuZW11cm8uaG9ra2FpZG8uanAiLCJuaWlr'@;
put 'YXBwdS5ob2trYWlkby5qcCIsIm5pa2kuaG9ra2FpZG8uanAiLCJuaXNoaW9rb3BwZS5ob2trYWlkby5qcCIsIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwIiwibnVtYXRhLmhva2thaWRvLmpwIiwib2JpaGlyby5ob2trYWlkby5qcCIsIm9iaXJhLmhva2thaWRvLmpwIiwib2tldG8uaG9ra2Fp'@;
put 'ZG8uanAiLCJva29wcGUuaG9ra2FpZG8uanAiLCJvdGFydS5ob2trYWlkby5qcCIsIm90b2JlLmhva2thaWRvLmpwIiwib3RvZnVrZS5ob2trYWlkby5qcCIsIm90b2luZXBwdS5ob2trYWlkby5qcCIsIm91bXUuaG9ra2FpZG8uanAiLCJvem9yYS5ob2trYWlkby5qcCIsInBpcHB1Lmhva2th'@;
put 'aWRvLmpwIiwicmFua29zaGkuaG9ra2FpZG8uanAiLCJyZWJ1bi5ob2trYWlkby5qcCIsInJpa3ViZXRzdS5ob2trYWlkby5qcCIsInJpc2hpcmkuaG9ra2FpZG8uanAiLCJyaXNoaXJpZnVqaS5ob2trYWlkby5qcCIsInNhcm9tYS5ob2trYWlkby5qcCIsInNhcnVmdXRzdS5ob2trYWlkby5q'@;
put 'cCIsInNoYWtvdGFuLmhva2thaWRvLmpwIiwic2hhcmkuaG9ra2FpZG8uanAiLCJzaGliZWNoYS5ob2trYWlkby5qcCIsInNoaWJldHN1Lmhva2thaWRvLmpwIiwic2hpa2FiZS5ob2trYWlkby5qcCIsInNoaWthb2kuaG9ra2FpZG8uanAiLCJzaGltYW1ha2kuaG9ra2FpZG8uanAiLCJzaGlt'@;
put 'aXp1Lmhva2thaWRvLmpwIiwic2hpbW9rYXdhLmhva2thaWRvLmpwIiwic2hpbnNoaW5vdHN1Lmhva2thaWRvLmpwIiwic2hpbnRva3UuaG9ra2FpZG8uanAiLCJzaGlyYW51a2EuaG9ra2FpZG8uanAiLCJzaGlyYW9pLmhva2thaWRvLmpwIiwic2hpcml1Y2hpLmhva2thaWRvLmpwIiwic29i'@;
put 'ZXRzdS5ob2trYWlkby5qcCIsInN1bmFnYXdhLmhva2thaWRvLmpwIiwidGFpa2kuaG9ra2FpZG8uanAiLCJ0YWthc3UuaG9ra2FpZG8uanAiLCJ0YWtpa2F3YS5ob2trYWlkby5qcCIsInRha2lub3VlLmhva2thaWRvLmpwIiwidGVzaGlrYWdhLmhva2thaWRvLmpwIiwidG9iZXRzdS5ob2tr'@;
put 'YWlkby5qcCIsInRvaG1hLmhva2thaWRvLmpwIiwidG9tYWtvbWFpLmhva2thaWRvLmpwIiwidG9tYXJpLmhva2thaWRvLmpwIiwidG95YS5ob2trYWlkby5qcCIsInRveWFrby5ob2trYWlkby5qcCIsInRveW90b21pLmhva2thaWRvLmpwIiwidG95b3VyYS5ob2trYWlkby5qcCIsInRzdWJl'@;
put 'dHN1Lmhva2thaWRvLmpwIiwidHN1a2lnYXRhLmhva2thaWRvLmpwIiwidXJha2F3YS5ob2trYWlkby5qcCIsInVyYXVzdS5ob2trYWlkby5qcCIsInVyeXUuaG9ra2FpZG8uanAiLCJ1dGFzaGluYWkuaG9ra2FpZG8uanAiLCJ3YWtrYW5haS5ob2trYWlkby5qcCIsIndhc3NhbXUuaG9ra2Fp'@;
put 'ZG8uanAiLCJ5YWt1bW8uaG9ra2FpZG8uanAiLCJ5b2ljaGkuaG9ra2FpZG8uanAiLCJhaW9pLmh5b2dvLmpwIiwiYWthc2hpLmh5b2dvLmpwIiwiYWtvLmh5b2dvLmpwIiwiYW1hZ2FzYWtpLmh5b2dvLmpwIiwiYW9nYWtpLmh5b2dvLmpwIiwiYXNhZ28uaHlvZ28uanAiLCJhc2hpeWEuaHlv'@;
put 'Z28uanAiLCJhd2FqaS5oeW9nby5qcCIsImZ1a3VzYWtpLmh5b2dvLmpwIiwiZ29zaGlraS5oeW9nby5qcCIsImhhcmltYS5oeW9nby5qcCIsImhpbWVqaS5oeW9nby5qcCIsImljaGlrYXdhLmh5b2dvLmpwIiwiaW5hZ2F3YS5oeW9nby5qcCIsIml0YW1pLmh5b2dvLmpwIiwia2Frb2dhd2Eu'@;
put 'aHlvZ28uanAiLCJrYW1pZ29yaS5oeW9nby5qcCIsImthbWlrYXdhLmh5b2dvLmpwIiwia2FzYWkuaHlvZ28uanAiLCJrYXN1Z2EuaHlvZ28uanAiLCJrYXdhbmlzaGkuaHlvZ28uanAiLCJtaWtpLmh5b2dvLmpwIiwibWluYW1pYXdhamkuaHlvZ28uanAiLCJuaXNoaW5vbWl5YS5oeW9nby5q'@;
put 'cCIsIm5pc2hpd2FraS5oeW9nby5qcCIsIm9uby5oeW9nby5qcCIsInNhbmRhLmh5b2dvLmpwIiwic2FubmFuLmh5b2dvLmpwIiwic2FzYXlhbWEuaHlvZ28uanAiLCJzYXlvLmh5b2dvLmpwIiwic2hpbmd1Lmh5b2dvLmpwIiwic2hpbm9uc2VuLmh5b2dvLmpwIiwic2hpc28uaHlvZ28uanAi'@;
put 'LCJzdW1vdG8uaHlvZ28uanAiLCJ0YWlzaGkuaHlvZ28uanAiLCJ0YWthLmh5b2dvLmpwIiwidGFrYXJhenVrYS5oeW9nby5qcCIsInRha2FzYWdvLmh5b2dvLmpwIiwidGFraW5vLmh5b2dvLmpwIiwidGFtYmEuaHlvZ28uanAiLCJ0YXRzdW5vLmh5b2dvLmpwIiwidG95b29rYS5oeW9nby5q'@;
put 'cCIsInlhYnUuaHlvZ28uanAiLCJ5YXNoaXJvLmh5b2dvLmpwIiwieW9rYS5oeW9nby5qcCIsInlva2F3YS5oeW9nby5qcCIsImFtaS5pYmFyYWtpLmpwIiwiYXNhaGkuaWJhcmFraS5qcCIsImJhbmRvLmliYXJha2kuanAiLCJjaGlrdXNlaS5pYmFyYWtpLmpwIiwiZGFpZ28uaWJhcmFraS5q'@;
put 'cCIsImZ1amlzaGlyby5pYmFyYWtpLmpwIiwiaGl0YWNoaS5pYmFyYWtpLmpwIiwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcCIsImhpdGFjaGlvbWl5YS5pYmFyYWtpLmpwIiwiaGl0YWNoaW90YS5pYmFyYWtpLmpwIiwiaWJhcmFraS5pYmFyYWtpLmpwIiwiaW5hLmliYXJha2kuanAiLCJpbmFz'@;
put 'aGlraS5pYmFyYWtpLmpwIiwiaXRha28uaWJhcmFraS5qcCIsIml3YW1hLmliYXJha2kuanAiLCJqb3NvLmliYXJha2kuanAiLCJrYW1pc3UuaWJhcmFraS5qcCIsImthc2FtYS5pYmFyYWtpLmpwIiwia2FzaGltYS5pYmFyYWtpLmpwIiwia2FzdW1pZ2F1cmEuaWJhcmFraS5qcCIsImtvZ2Eu'@;
put 'aWJhcmFraS5qcCIsIm1paG8uaWJhcmFraS5qcCIsIm1pdG8uaWJhcmFraS5qcCIsIm1vcml5YS5pYmFyYWtpLmpwIiwibmFrYS5pYmFyYWtpLmpwIiwibmFtZWdhdGEuaWJhcmFraS5qcCIsIm9hcmFpLmliYXJha2kuanAiLCJvZ2F3YS5pYmFyYWtpLmpwIiwib21pdGFtYS5pYmFyYWtpLmpw'@;
put 'Iiwicnl1Z2FzYWtpLmliYXJha2kuanAiLCJzYWthaS5pYmFyYWtpLmpwIiwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwIiwic2hpbW9kYXRlLmliYXJha2kuanAiLCJzaGltb3RzdW1hLmliYXJha2kuanAiLCJzaGlyb3NhdG8uaWJhcmFraS5qcCIsInNvd2EuaWJhcmFraS5qcCIsInN1aWZ1Lmli'@;
put 'YXJha2kuanAiLCJ0YWthaGFnaS5pYmFyYWtpLmpwIiwidGFtYXRzdWt1cmkuaWJhcmFraS5qcCIsInRva2FpLmliYXJha2kuanAiLCJ0b21vYmUuaWJhcmFraS5qcCIsInRvbmUuaWJhcmFraS5qcCIsInRvcmlkZS5pYmFyYWtpLmpwIiwidHN1Y2hpdXJhLmliYXJha2kuanAiLCJ0c3VrdWJh'@;
put 'LmliYXJha2kuanAiLCJ1Y2hpaGFyYS5pYmFyYWtpLmpwIiwidXNoaWt1LmliYXJha2kuanAiLCJ5YWNoaXlvLmliYXJha2kuanAiLCJ5YW1hZ2F0YS5pYmFyYWtpLmpwIiwieWF3YXJhLmliYXJha2kuanAiLCJ5dWtpLmliYXJha2kuanAiLCJhbmFtaXp1LmlzaGlrYXdhLmpwIiwiaGFrdWku'@;
put 'aXNoaWthd2EuanAiLCJoYWt1c2FuLmlzaGlrYXdhLmpwIiwia2FnYS5pc2hpa2F3YS5qcCIsImthaG9rdS5pc2hpa2F3YS5qcCIsImthbmF6YXdhLmlzaGlrYXdhLmpwIiwia2F3YWtpdGEuaXNoaWthd2EuanAiLCJrb21hdHN1LmlzaGlrYXdhLmpwIiwibmFrYW5vdG8uaXNoaWthd2EuanAi'@;
put 'LCJuYW5hby5pc2hpa2F3YS5qcCIsIm5vbWkuaXNoaWthd2EuanAiLCJub25vaWNoaS5pc2hpa2F3YS5qcCIsIm5vdG8uaXNoaWthd2EuanAiLCJzaGlrYS5pc2hpa2F3YS5qcCIsInN1enUuaXNoaWthd2EuanAiLCJ0c3ViYXRhLmlzaGlrYXdhLmpwIiwidHN1cnVnaS5pc2hpa2F3YS5qcCIs'@;
put 'InVjaGluYWRhLmlzaGlrYXdhLmpwIiwid2FqaW1hLmlzaGlrYXdhLmpwIiwiZnVkYWkuaXdhdGUuanAiLCJmdWppc2F3YS5pd2F0ZS5qcCIsImhhbmFtYWtpLml3YXRlLmpwIiwiaGlyYWl6dW1pLml3YXRlLmpwIiwiaGlyb25vLml3YXRlLmpwIiwiaWNoaW5vaGUuaXdhdGUuanAiLCJpY2hp'@;
put 'bm9zZWtpLml3YXRlLmpwIiwiaXdhaXp1bWkuaXdhdGUuanAiLCJpd2F0ZS5pd2F0ZS5qcCIsImpvYm9qaS5pd2F0ZS5qcCIsImthbWFpc2hpLml3YXRlLmpwIiwia2FuZWdhc2FraS5pd2F0ZS5qcCIsImthcnVtYWkuaXdhdGUuanAiLCJrYXdhaS5pd2F0ZS5qcCIsImtpdGFrYW1pLml3YXRl'@;
put 'LmpwIiwia3VqaS5pd2F0ZS5qcCIsImt1bm9oZS5pd2F0ZS5qcCIsImt1enVtYWtpLml3YXRlLmpwIiwibWl5YWtvLml3YXRlLmpwIiwibWl6dXNhd2EuaXdhdGUuanAiLCJtb3Jpb2thLml3YXRlLmpwIiwibmlub2hlLml3YXRlLmpwIiwibm9kYS5pd2F0ZS5qcCIsIm9mdW5hdG8uaXdhdGUu'@;
put 'anAiLCJvc2h1Lml3YXRlLmpwIiwib3RzdWNoaS5pd2F0ZS5qcCIsInJpa3V6ZW50YWthdGEuaXdhdGUuanAiLCJzaGl3YS5pd2F0ZS5qcCIsInNoaXp1a3Vpc2hpLml3YXRlLmpwIiwic3VtaXRhLml3YXRlLmpwIiwidGFub2hhdGEuaXdhdGUuanAiLCJ0b25vLml3YXRlLmpwIiwieWFoYWJh'@;
put 'Lml3YXRlLmpwIiwieWFtYWRhLml3YXRlLmpwIiwiYXlhZ2F3YS5rYWdhd2EuanAiLCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcCIsImthbm9uamkua2FnYXdhLmpwIiwia290b2hpcmEua2FnYXdhLmpwIiwibWFubm8ua2FnYXdhLmpwIiwibWFydWdhbWUua2FnYXdhLmpwIiwibWl0b3lvLmth'@;
put 'Z2F3YS5qcCIsIm5hb3NoaW1hLmthZ2F3YS5qcCIsInNhbnVraS5rYWdhd2EuanAiLCJ0YWRvdHN1LmthZ2F3YS5qcCIsInRha2FtYXRzdS5rYWdhd2EuanAiLCJ0b25vc2hvLmthZ2F3YS5qcCIsInVjaGlub21pLmthZ2F3YS5qcCIsInV0YXp1LmthZ2F3YS5qcCIsInplbnRzdWppLmthZ2F3'@;
put 'YS5qcCIsImFrdW5lLmthZ29zaGltYS5qcCIsImFtYW1pLmthZ29zaGltYS5qcCIsImhpb2tpLmthZ29zaGltYS5qcCIsImlzYS5rYWdvc2hpbWEuanAiLCJpc2VuLmthZ29zaGltYS5qcCIsIml6dW1pLmthZ29zaGltYS5qcCIsImthZ29zaGltYS5rYWdvc2hpbWEuanAiLCJrYW5veWEua2Fn'@;
put 'b3NoaW1hLmpwIiwia2F3YW5hYmUua2Fnb3NoaW1hLmpwIiwia2lua28ua2Fnb3NoaW1hLmpwIiwia291eWFtYS5rYWdvc2hpbWEuanAiLCJtYWt1cmF6YWtpLmthZ29zaGltYS5qcCIsIm1hdHN1bW90by5rYWdvc2hpbWEuanAiLCJtaW5hbWl0YW5lLmthZ29zaGltYS5qcCIsIm5ha2F0YW5l'@;
put 'LmthZ29zaGltYS5qcCIsIm5pc2hpbm9vbW90ZS5rYWdvc2hpbWEuanAiLCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcCIsInNvby5rYWdvc2hpbWEuanAiLCJ0YXJ1bWl6dS5rYWdvc2hpbWEuanAiLCJ5dXN1aS5rYWdvc2hpbWEuanAiLCJhaWthd2Eua2FuYWdhd2EuanAiLCJhdHN1Z2ku'@;
put 'a2FuYWdhd2EuanAiLCJheWFzZS5rYW5hZ2F3YS5qcCIsImNoaWdhc2FraS5rYW5hZ2F3YS5qcCIsImViaW5hLmthbmFnYXdhLmpwIiwiZnVqaXNhd2Eua2FuYWdhd2EuanAiLCJoYWRhbm8ua2FuYWdhd2EuanAiLCJoYWtvbmUua2FuYWdhd2EuanAiLCJoaXJhdHN1a2Eua2FuYWdhd2EuanAi'@;
put 'LCJpc2VoYXJhLmthbmFnYXdhLmpwIiwia2Fpc2VpLmthbmFnYXdhLmpwIiwia2FtYWt1cmEua2FuYWdhd2EuanAiLCJraXlva2F3YS5rYW5hZ2F3YS5qcCIsIm1hdHN1ZGEua2FuYWdhd2EuanAiLCJtaW5hbWlhc2hpZ2FyYS5rYW5hZ2F3YS5qcCIsIm1pdXJhLmthbmFnYXdhLmpwIiwibmFr'@;
put 'YWkua2FuYWdhd2EuanAiLCJuaW5vbWl5YS5rYW5hZ2F3YS5qcCIsIm9kYXdhcmEua2FuYWdhd2EuanAiLCJvaS5rYW5hZ2F3YS5qcCIsIm9pc28ua2FuYWdhd2EuanAiLCJzYWdhbWloYXJhLmthbmFnYXdhLmpwIiwic2FtdWthd2Eua2FuYWdhd2EuanAiLCJ0c3VrdWkua2FuYWdhd2EuanAi'@;
put 'LCJ5YW1ha2l0YS5rYW5hZ2F3YS5qcCIsInlhbWF0by5rYW5hZ2F3YS5qcCIsInlva29zdWthLmthbmFnYXdhLmpwIiwieXVnYXdhcmEua2FuYWdhd2EuanAiLCJ6YW1hLmthbmFnYXdhLmpwIiwienVzaGkua2FuYWdhd2EuanAiLCJha2kua29jaGkuanAiLCJnZWlzZWkua29jaGkuanAiLCJo'@;
put 'aWRha2Eua29jaGkuanAiLCJoaWdhc2hpdHN1bm8ua29jaGkuanAiLCJpbm8ua29jaGkuanAiLCJrYWdhbWkua29jaGkuanAiLCJrYW1pLmtvY2hpLmpwIiwia2l0YWdhd2Eua29jaGkuanAiLCJrb2NoaS5rb2NoaS5qcCIsIm1paGFyYS5rb2NoaS5qcCIsIm1vdG95YW1hLmtvY2hpLmpwIiwi'@;
put 'bXVyb3RvLmtvY2hpLmpwIiwibmFoYXJpLmtvY2hpLmpwIiwibmFrYW11cmEua29jaGkuanAiLCJuYW5rb2t1LmtvY2hpLmpwIiwibmlzaGl0b3NhLmtvY2hpLmpwIiwibml5b2RvZ2F3YS5rb2NoaS5qcCIsIm9jaGkua29jaGkuanAiLCJva2F3YS5rb2NoaS5qcCIsIm90b3lvLmtvY2hpLmpw'@;
put 'Iiwib3RzdWtpLmtvY2hpLmpwIiwic2FrYXdhLmtvY2hpLmpwIiwic3VrdW1vLmtvY2hpLmpwIiwic3VzYWtpLmtvY2hpLmpwIiwidG9zYS5rb2NoaS5qcCIsInRvc2FzaGltaXp1LmtvY2hpLmpwIiwidG95by5rb2NoaS5qcCIsInRzdW5vLmtvY2hpLmpwIiwidW1hamkua29jaGkuanAiLCJ5'@;
put 'YXN1ZGEua29jaGkuanAiLCJ5dXN1aGFyYS5rb2NoaS5qcCIsImFtYWt1c2Eua3VtYW1vdG8uanAiLCJhcmFvLmt1bWFtb3RvLmpwIiwiYXNvLmt1bWFtb3RvLmpwIiwiY2hveW8ua3VtYW1vdG8uanAiLCJneW9rdXRvLmt1bWFtb3RvLmpwIiwia2FtaWFtYWt1c2Eua3VtYW1vdG8uanAiLCJr'@;
put 'aWt1Y2hpLmt1bWFtb3RvLmpwIiwia3VtYW1vdG8ua3VtYW1vdG8uanAiLCJtYXNoaWtpLmt1bWFtb3RvLmpwIiwibWlmdW5lLmt1bWFtb3RvLmpwIiwibWluYW1hdGEua3VtYW1vdG8uanAiLCJtaW5hbWlvZ3VuaS5rdW1hbW90by5qcCIsIm5hZ2FzdS5rdW1hbW90by5qcCIsIm5pc2hpaGFy'@;
put 'YS5rdW1hbW90by5qcCIsIm9ndW5pLmt1bWFtb3RvLmpwIiwib3p1Lmt1bWFtb3RvLmpwIiwic3Vtb3RvLmt1bWFtb3RvLmpwIiwidGFrYW1vcmkua3VtYW1vdG8uanAiLCJ1a2kua3VtYW1vdG8uanAiLCJ1dG8ua3VtYW1vdG8uanAiLCJ5YW1hZ2Eua3VtYW1vdG8uanAiLCJ5YW1hdG8ua3Vt'@;
put 'YW1vdG8uanAiLCJ5YXRzdXNoaXJvLmt1bWFtb3RvLmpwIiwiYXlhYmUua3lvdG8uanAiLCJmdWt1Y2hpeWFtYS5reW90by5qcCIsImhpZ2FzaGl5YW1hLmt5b3RvLmpwIiwiaWRlLmt5b3RvLmpwIiwiaW5lLmt5b3RvLmpwIiwiam95by5reW90by5qcCIsImthbWVva2Eua3lvdG8uanAiLCJr'@;
put 'YW1vLmt5b3RvLmpwIiwia2l0YS5reW90by5qcCIsImtpenUua3lvdG8uanAiLCJrdW1peWFtYS5reW90by5qcCIsImt5b3RhbWJhLmt5b3RvLmpwIiwia3lvdGFuYWJlLmt5b3RvLmpwIiwia3lvdGFuZ28ua3lvdG8uanAiLCJtYWl6dXJ1Lmt5b3RvLmpwIiwibWluYW1pLmt5b3RvLmpwIiwi'@;
put 'bWluYW1peWFtYXNoaXJvLmt5b3RvLmpwIiwibWl5YXp1Lmt5b3RvLmpwIiwibXVrby5reW90by5qcCIsIm5hZ2Fva2FreW8ua3lvdG8uanAiLCJuYWthZ3lvLmt5b3RvLmpwIiwibmFudGFuLmt5b3RvLmpwIiwib3lhbWF6YWtpLmt5b3RvLmpwIiwic2FreW8ua3lvdG8uanAiLCJzZWlrYS5r'@;
put 'eW90by5qcCIsInRhbmFiZS5reW90by5qcCIsInVqaS5reW90by5qcCIsInVqaXRhd2FyYS5reW90by5qcCIsIndhenVrYS5reW90by5qcCIsInlhbWFzaGluYS5reW90by5qcCIsInlhd2F0YS5reW90by5qcCIsImFzYWhpLm1pZS5qcCIsImluYWJlLm1pZS5qcCIsImlzZS5taWUuanAiLCJr'@;
put 'YW1leWFtYS5taWUuanAiLCJrYXdhZ29lLm1pZS5qcCIsImtpaG8ubWllLmpwIiwia2lzb3Nha2kubWllLmpwIiwia2l3YS5taWUuanAiLCJrb21vbm8ubWllLmpwIiwia3VtYW5vLm1pZS5qcCIsImt1d2FuYS5taWUuanAiLCJtYXRzdXNha2EubWllLmpwIiwibWVpd2EubWllLmpwIiwibWlo'@;
put 'YW1hLm1pZS5qcCIsIm1pbmFtaWlzZS5taWUuanAiLCJtaXN1Z2kubWllLmpwIiwibWl5YW1hLm1pZS5qcCIsIm5hYmFyaS5taWUuanAiLCJzaGltYS5taWUuanAiLCJzdXp1a2EubWllLmpwIiwidGFkby5taWUuanAiLCJ0YWlraS5taWUuanAiLCJ0YWtpLm1pZS5qcCIsInRhbWFraS5taWUu'@;
put 'anAiLCJ0b2JhLm1pZS5qcCIsInRzdS5taWUuanAiLCJ1ZG9uby5taWUuanAiLCJ1cmVzaGluby5taWUuanAiLCJ3YXRhcmFpLm1pZS5qcCIsInlva2thaWNoaS5taWUuanAiLCJmdXJ1a2F3YS5taXlhZ2kuanAiLCJoaWdhc2hpbWF0c3VzaGltYS5taXlhZ2kuanAiLCJpc2hpbm9tYWtpLm1p'@;
put 'eWFnaS5qcCIsIml3YW51bWEubWl5YWdpLmpwIiwia2FrdWRhLm1peWFnaS5qcCIsImthbWkubWl5YWdpLmpwIiwia2F3YXNha2kubWl5YWdpLmpwIiwibWFydW1vcmkubWl5YWdpLmpwIiwibWF0c3VzaGltYS5taXlhZ2kuanAiLCJtaW5hbWlzYW5yaWt1Lm1peWFnaS5qcCIsIm1pc2F0by5t'@;
put 'aXlhZ2kuanAiLCJtdXJhdGEubWl5YWdpLmpwIiwibmF0b3JpLm1peWFnaS5qcCIsIm9nYXdhcmEubWl5YWdpLmpwIiwib2hpcmEubWl5YWdpLmpwIiwib25hZ2F3YS5taXlhZ2kuanAiLCJvc2FraS5taXlhZ2kuanAiLCJyaWZ1Lm1peWFnaS5qcCIsInNlbWluZS5taXlhZ2kuanAiLCJzaGli'@;
put 'YXRhLm1peWFnaS5qcCIsInNoaWNoaWthc2h1a3UubWl5YWdpLmpwIiwic2hpa2FtYS5taXlhZ2kuanAiLCJzaGlvZ2FtYS5taXlhZ2kuanAiLCJzaGlyb2lzaGkubWl5YWdpLmpwIiwidGFnYWpvLm1peWFnaS5qcCIsInRhaXdhLm1peWFnaS5qcCIsInRvbWUubWl5YWdpLmpwIiwidG9taXlh'@;
put 'Lm1peWFnaS5qcCIsIndha3V5YS5taXlhZ2kuanAiLCJ3YXRhcmkubWl5YWdpLmpwIiwieWFtYW1vdG8ubWl5YWdpLmpwIiwiemFvLm1peWFnaS5qcCIsImF5YS5taXlhemFraS5qcCIsImViaW5vLm1peWF6YWtpLmpwIiwiZ29rYXNlLm1peWF6YWtpLmpwIiwiaHl1Z2EubWl5YXpha2kuanAi'@;
put 'LCJrYWRvZ2F3YS5taXlhemFraS5qcCIsImthd2FtaW5hbWkubWl5YXpha2kuanAiLCJraWpvLm1peWF6YWtpLmpwIiwia2l0YWdhd2EubWl5YXpha2kuanAiLCJraXRha2F0YS5taXlhemFraS5qcCIsImtpdGF1cmEubWl5YXpha2kuanAiLCJrb2JheWFzaGkubWl5YXpha2kuanAiLCJrdW5p'@;
put 'dG9taS5taXlhemFraS5qcCIsImt1c2hpbWEubWl5YXpha2kuanAiLCJtaW1hdGEubWl5YXpha2kuanAiLCJtaXlha29ub2pvLm1peWF6YWtpLmpwIiwibWl5YXpha2kubWl5YXpha2kuanAiLCJtb3JvdHN1a2EubWl5YXpha2kuanAiLCJuaWNoaW5hbi5taXlhemFraS5qcCIsIm5pc2hpbWVy'@;
put 'YS5taXlhemFraS5qcCIsIm5vYmVva2EubWl5YXpha2kuanAiLCJzYWl0by5taXlhemFraS5qcCIsInNoaWliYS5taXlhemFraS5qcCIsInNoaW50b21pLm1peWF6YWtpLmpwIiwidGFrYWhhcnUubWl5YXpha2kuanAiLCJ0YWthbmFiZS5taXlhemFraS5qcCIsInRha2F6YWtpLm1peWF6YWtp'@;
put 'LmpwIiwidHN1bm8ubWl5YXpha2kuanAiLCJhY2hpLm5hZ2Fuby5qcCIsImFnZW1hdHN1Lm5hZ2Fuby5qcCIsImFuYW4ubmFnYW5vLmpwIiwiYW9raS5uYWdhbm8uanAiLCJhc2FoaS5uYWdhbm8uanAiLCJhenVtaW5vLm5hZ2Fuby5qcCIsImNoaWt1aG9rdS5uYWdhbm8uanAiLCJjaGlrdW1h'@;
put 'Lm5hZ2Fuby5qcCIsImNoaW5vLm5hZ2Fuby5qcCIsImZ1amltaS5uYWdhbm8uanAiLCJoYWt1YmEubmFnYW5vLmpwIiwiaGFyYS5uYWdhbm8uanAiLCJoaXJheWEubmFnYW5vLmpwIiwiaWlkYS5uYWdhbm8uanAiLCJpaWppbWEubmFnYW5vLmpwIiwiaWl5YW1hLm5hZ2Fuby5qcCIsImlpenVu'@;
put 'YS5uYWdhbm8uanAiLCJpa2VkYS5uYWdhbm8uanAiLCJpa3VzYWthLm5hZ2Fuby5qcCIsImluYS5uYWdhbm8uanAiLCJrYXJ1aXphd2EubmFnYW5vLmpwIiwia2F3YWthbWkubmFnYW5vLmpwIiwia2lzby5uYWdhbm8uanAiLCJraXNvZnVrdXNoaW1hLm5hZ2Fuby5qcCIsImtpdGFhaWtpLm5h'@;
put 'Z2Fuby5qcCIsImtvbWFnYW5lLm5hZ2Fuby5qcCIsImtvbW9yby5uYWdhbm8uanAiLCJtYXRzdWthd2EubmFnYW5vLmpwIiwibWF0c3Vtb3RvLm5hZ2Fuby5qcCIsIm1pYXNhLm5hZ2Fuby5qcCIsIm1pbmFtaWFpa2kubmFnYW5vLmpwIiwibWluYW1pbWFraS5uYWdhbm8uanAiLCJtaW5hbWlt'@;
put 'aW5vd2EubmFnYW5vLmpwIiwibWlub3dhLm5hZ2Fuby5qcCIsIm1peWFkYS5uYWdhbm8uanAiLCJtaXlvdGEubmFnYW5vLmpwIiwibW9jaGl6dWtpLm5hZ2Fuby5qcCIsIm5hZ2Fuby5uYWdhbm8uanAiLCJuYWdhd2EubmFnYW5vLmpwIiwibmFnaXNvLm5hZ2Fuby5qcCIsIm5ha2FnYXdhLm5h'@;
put 'Z2Fuby5qcCIsIm5ha2Fuby5uYWdhbm8uanAiLCJub3phd2FvbnNlbi5uYWdhbm8uanAiLCJvYnVzZS5uYWdhbm8uanAiLCJvZ2F3YS5uYWdhbm8uanAiLCJva2F5YS5uYWdhbm8uanAiLCJvbWFjaGkubmFnYW5vLmpwIiwib21pLm5hZ2Fuby5qcCIsIm9va3V3YS5uYWdhbm8uanAiLCJvb3No'@;
put 'aWthLm5hZ2Fuby5qcCIsIm90YWtpLm5hZ2Fuby5qcCIsIm90YXJpLm5hZ2Fuby5qcCIsInNha2FlLm5hZ2Fuby5qcCIsInNha2FraS5uYWdhbm8uanAiLCJzYWt1Lm5hZ2Fuby5qcCIsInNha3Voby5uYWdhbm8uanAiLCJzaGltb3N1d2EubmFnYW5vLmpwIiwic2hpbmFub21hY2hpLm5hZ2Fu'@;
put 'by5qcCIsInNoaW9qaXJpLm5hZ2Fuby5qcCIsInN1d2EubmFnYW5vLmpwIiwic3V6YWthLm5hZ2Fuby5qcCIsInRha2FnaS5uYWdhbm8uanAiLCJ0YWthbW9yaS5uYWdhbm8uanAiLCJ0YWtheWFtYS5uYWdhbm8uanAiLCJ0YXRlc2hpbmEubmFnYW5vLmpwIiwidGF0c3Vuby5uYWdhbm8uanAi'@;
put 'LCJ0b2dha3VzaGkubmFnYW5vLmpwIiwidG9ndXJhLm5hZ2Fuby5qcCIsInRvbWkubmFnYW5vLmpwIiwidWVkYS5uYWdhbm8uanAiLCJ3YWRhLm5hZ2Fuby5qcCIsInlhbWFnYXRhLm5hZ2Fuby5qcCIsInlhbWFub3VjaGkubmFnYW5vLmpwIiwieWFzYWthLm5hZ2Fuby5qcCIsInlhc3Vva2Eu'@;
put 'bmFnYW5vLmpwIiwiY2hpaml3YS5uYWdhc2FraS5qcCIsImZ1dHN1Lm5hZ2FzYWtpLmpwIiwiZ290by5uYWdhc2FraS5qcCIsImhhc2FtaS5uYWdhc2FraS5qcCIsImhpcmFkby5uYWdhc2FraS5qcCIsImlraS5uYWdhc2FraS5qcCIsImlzYWhheWEubmFnYXNha2kuanAiLCJrYXdhdGFuYS5u'@;
put 'YWdhc2FraS5qcCIsImt1Y2hpbm90c3UubmFnYXNha2kuanAiLCJtYXRzdXVyYS5uYWdhc2FraS5qcCIsIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwIiwib2JhbWEubmFnYXNha2kuanAiLCJvbXVyYS5uYWdhc2FraS5qcCIsIm9zZXRvLm5hZ2FzYWtpLmpwIiwic2Fpa2FpLm5hZ2FzYWtpLmpwIiwi'@;
put 'c2FzZWJvLm5hZ2FzYWtpLmpwIiwic2VpaGkubmFnYXNha2kuanAiLCJzaGltYWJhcmEubmFnYXNha2kuanAiLCJzaGlua2FtaWdvdG8ubmFnYXNha2kuanAiLCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwIiwidHN1c2hpbWEubmFnYXNha2kuanAiLCJ1bnplbi5uYWdhc2FraS5qcCIsImFuZG8ubmFy'@;
put 'YS5qcCIsImdvc2UubmFyYS5qcCIsImhlZ3VyaS5uYXJhLmpwIiwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcCIsImlrYXJ1Z2EubmFyYS5qcCIsImlrb21hLm5hcmEuanAiLCJrYW1pa2l0YXlhbWEubmFyYS5qcCIsImthbm1ha2kubmFyYS5qcCIsImthc2hpYmEubmFyYS5qcCIsImthc2hpaGFy'@;
put 'YS5uYXJhLmpwIiwia2F0c3VyYWdpLm5hcmEuanAiLCJrYXdhaS5uYXJhLmpwIiwia2F3YWthbWkubmFyYS5qcCIsImthd2FuaXNoaS5uYXJhLmpwIiwia29yeW8ubmFyYS5qcCIsImt1cm90YWtpLm5hcmEuanAiLCJtaXRzdWUubmFyYS5qcCIsIm1peWFrZS5uYXJhLmpwIiwibmFyYS5uYXJh'@;
put 'LmpwIiwibm9zZWdhd2EubmFyYS5qcCIsIm9qaS5uYXJhLmpwIiwib3VkYS5uYXJhLmpwIiwib3lvZG8ubmFyYS5qcCIsInNha3VyYWkubmFyYS5qcCIsInNhbmdvLm5hcmEuanAiLCJzaGltb2ljaGkubmFyYS5qcCIsInNoaW1va2l0YXlhbWEubmFyYS5qcCIsInNoaW5qby5uYXJhLmpwIiwi'@;
put 'c29uaS5uYXJhLmpwIiwidGFrYXRvcmkubmFyYS5qcCIsInRhd2FyYW1vdG8ubmFyYS5qcCIsInRlbmthd2EubmFyYS5qcCIsInRlbnJpLm5hcmEuanAiLCJ1ZGEubmFyYS5qcCIsInlhbWF0b2tvcml5YW1hLm5hcmEuanAiLCJ5YW1hdG90YWthZGEubmFyYS5qcCIsInlhbWF6b2UubmFyYS5q'@;
put 'cCIsInlvc2hpbm8ubmFyYS5qcCIsImFnYS5uaWlnYXRhLmpwIiwiYWdhbm8ubmlpZ2F0YS5qcCIsImdvc2VuLm5paWdhdGEuanAiLCJpdG9pZ2F3YS5uaWlnYXRhLmpwIiwiaXp1bW96YWtpLm5paWdhdGEuanAiLCJqb2V0c3UubmlpZ2F0YS5qcCIsImthbW8ubmlpZ2F0YS5qcCIsImthcml3'@;
put 'YS5uaWlnYXRhLmpwIiwia2FzaGl3YXpha2kubmlpZ2F0YS5qcCIsIm1pbmFtaXVvbnVtYS5uaWlnYXRhLmpwIiwibWl0c3VrZS5uaWlnYXRhLmpwIiwibXVpa2EubmlpZ2F0YS5qcCIsIm11cmFrYW1pLm5paWdhdGEuanAiLCJteW9rby5uaWlnYXRhLmpwIiwibmFnYW9rYS5uaWlnYXRhLmpw'@;
put 'IiwibmlpZ2F0YS5uaWlnYXRhLmpwIiwib2ppeWEubmlpZ2F0YS5qcCIsIm9taS5uaWlnYXRhLmpwIiwic2Fkby5uaWlnYXRhLmpwIiwic2Fuam8ubmlpZ2F0YS5qcCIsInNlaXJvLm5paWdhdGEuanAiLCJzZWlyb3UubmlpZ2F0YS5qcCIsInNla2lrYXdhLm5paWdhdGEuanAiLCJzaGliYXRh'@;
put 'Lm5paWdhdGEuanAiLCJ0YWdhbWkubmlpZ2F0YS5qcCIsInRhaW5haS5uaWlnYXRhLmpwIiwidG9jaGlvLm5paWdhdGEuanAiLCJ0b2thbWFjaGkubmlpZ2F0YS5qcCIsInRzdWJhbWUubmlpZ2F0YS5qcCIsInRzdW5hbi5uaWlnYXRhLmpwIiwidW9udW1hLm5paWdhdGEuanAiLCJ5YWhpa28u'@;
put 'bmlpZ2F0YS5qcCIsInlvaXRhLm5paWdhdGEuanAiLCJ5dXphd2EubmlpZ2F0YS5qcCIsImJlcHB1Lm9pdGEuanAiLCJidW5nb29uby5vaXRhLmpwIiwiYnVuZ290YWthZGEub2l0YS5qcCIsImhhc2FtYS5vaXRhLmpwIiwiaGlqaS5vaXRhLmpwIiwiaGltZXNoaW1hLm9pdGEuanAiLCJoaXRh'@;
put 'Lm9pdGEuanAiLCJrYW1pdHN1ZS5vaXRhLmpwIiwia29rb25vZS5vaXRhLmpwIiwia3VqdS5vaXRhLmpwIiwia3VuaXNha2kub2l0YS5qcCIsImt1c3Uub2l0YS5qcCIsIm9pdGEub2l0YS5qcCIsInNhaWtpLm9pdGEuanAiLCJ0YWtldGEub2l0YS5qcCIsInRzdWt1bWkub2l0YS5qcCIsInVz'@;
put 'YS5vaXRhLmpwIiwidXN1a2kub2l0YS5qcCIsInl1ZnUub2l0YS5qcCIsImFrYWl3YS5va2F5YW1hLmpwIiwiYXNha3VjaGkub2theWFtYS5qcCIsImJpemVuLm9rYXlhbWEuanAiLCJoYXlhc2hpbWEub2theWFtYS5qcCIsImliYXJhLm9rYXlhbWEuanAiLCJrYWdhbWluby5va2F5YW1hLmpw'@;
put 'Iiwia2FzYW9rYS5va2F5YW1hLmpwIiwia2liaWNodW8ub2theWFtYS5qcCIsImt1bWVuYW4ub2theWFtYS5qcCIsImt1cmFzaGlraS5va2F5YW1hLmpwIiwibWFuaXdhLm9rYXlhbWEuanAiLCJtaXNha2kub2theWFtYS5qcCIsIm5hZ2kub2theWFtYS5qcCIsIm5paW1pLm9rYXlhbWEuanAi'@;
put 'LCJuaXNoaWF3YWt1cmEub2theWFtYS5qcCIsIm9rYXlhbWEub2theWFtYS5qcCIsInNhdG9zaG8ub2theWFtYS5qcCIsInNldG91Y2hpLm9rYXlhbWEuanAiLCJzaGluam8ub2theWFtYS5qcCIsInNob28ub2theWFtYS5qcCIsInNvamEub2theWFtYS5qcCIsInRha2FoYXNoaS5va2F5YW1h'@;
put 'LmpwIiwidGFtYW5vLm9rYXlhbWEuanAiLCJ0c3V5YW1hLm9rYXlhbWEuanAiLCJ3YWtlLm9rYXlhbWEuanAiLCJ5YWthZ2Uub2theWFtYS5qcCIsImFndW5pLm9raW5hd2EuanAiLCJnaW5vd2FuLm9raW5hd2EuanAiLCJnaW5vemEub2tpbmF3YS5qcCIsImd1c2hpa2FtaS5va2luYXdhLmpw'@;
put 'IiwiaGFlYmFydS5va2luYXdhLmpwIiwiaGlnYXNoaS5va2luYXdhLmpwIiwiaGlyYXJhLm9raW5hd2EuanAiLCJpaGV5YS5va2luYXdhLmpwIiwiaXNoaWdha2kub2tpbmF3YS5qcCIsImlzaGlrYXdhLm9raW5hd2EuanAiLCJpdG9tYW4ub2tpbmF3YS5qcCIsIml6ZW5hLm9raW5hd2EuanAi'@;
put 'LCJrYWRlbmEub2tpbmF3YS5qcCIsImtpbi5va2luYXdhLmpwIiwia2l0YWRhaXRvLm9raW5hd2EuanAiLCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwIiwia3VtZWppbWEub2tpbmF3YS5qcCIsImt1bmlnYW1pLm9raW5hd2EuanAiLCJtaW5hbWlkYWl0by5va2luYXdhLmpwIiwibW90b2J1'@;
put 'Lm9raW5hd2EuanAiLCJuYWdvLm9raW5hd2EuanAiLCJuYWhhLm9raW5hd2EuanAiLCJuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJuYWtpamluLm9raW5hd2EuanAiLCJuYW5qby5va2luYXdhLmpwIiwibmlzaGloYXJhLm9raW5hd2EuanAiLCJvZ2ltaS5va2luYXdhLmpwIiwib2tpbmF3YS5v'@;
put 'a2luYXdhLmpwIiwib25uYS5va2luYXdhLmpwIiwic2hpbW9qaS5va2luYXdhLmpwIiwidGFrZXRvbWkub2tpbmF3YS5qcCIsInRhcmFtYS5va2luYXdhLmpwIiwidG9rYXNoaWtpLm9raW5hd2EuanAiLCJ0b21pZ3VzdWt1Lm9raW5hd2EuanAiLCJ0b25ha2kub2tpbmF3YS5qcCIsInVyYXNv'@;
put 'ZS5va2luYXdhLmpwIiwidXJ1bWEub2tpbmF3YS5qcCIsInlhZXNlLm9raW5hd2EuanAiLCJ5b21pdGFuLm9raW5hd2EuanAiLCJ5b25hYmFydS5va2luYXdhLmpwIiwieW9uYWd1bmkub2tpbmF3YS5qcCIsInphbWFtaS5va2luYXdhLmpwIiwiYWJlbm8ub3Nha2EuanAiLCJjaGloYXlhYWth'@;
put 'c2FrYS5vc2FrYS5qcCIsImNodW8ub3Nha2EuanAiLCJkYWl0by5vc2FrYS5qcCIsImZ1amlpZGVyYS5vc2FrYS5qcCIsImhhYmlraW5vLm9zYWthLmpwIiwiaGFubmFuLm9zYWthLmpwIiwiaGlnYXNoaW9zYWthLm9zYWthLmpwIiwiaGlnYXNoaXN1bWl5b3NoaS5vc2FrYS5qcCIsImhpZ2Fz'@;
put 'aGl5b2RvZ2F3YS5vc2FrYS5qcCIsImhpcmFrYXRhLm9zYWthLmpwIiwiaWJhcmFraS5vc2FrYS5qcCIsImlrZWRhLm9zYWthLmpwIiwiaXp1bWkub3Nha2EuanAiLCJpenVtaW90c3Uub3Nha2EuanAiLCJpenVtaXNhbm8ub3Nha2EuanAiLCJrYWRvbWEub3Nha2EuanAiLCJrYWl6dWthLm9z'@;
put 'YWthLmpwIiwia2FuYW4ub3Nha2EuanAiLCJrYXNoaXdhcmEub3Nha2EuanAiLCJrYXRhbm8ub3Nha2EuanAiLCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwIiwia2lzaGl3YWRhLm9zYWthLmpwIiwia2l0YS5vc2FrYS5qcCIsImt1bWF0b3JpLm9zYWthLmpwIiwibWF0c3ViYXJhLm9zYWthLmpw'@;
put 'IiwibWluYXRvLm9zYWthLmpwIiwibWlub2gub3Nha2EuanAiLCJtaXNha2kub3Nha2EuanAiLCJtb3JpZ3VjaGkub3Nha2EuanAiLCJuZXlhZ2F3YS5vc2FrYS5qcCIsIm5pc2hpLm9zYWthLmpwIiwibm9zZS5vc2FrYS5qcCIsIm9zYWthc2F5YW1hLm9zYWthLmpwIiwic2FrYWkub3Nha2Eu'@;
put 'anAiLCJzYXlhbWEub3Nha2EuanAiLCJzZW5uYW4ub3Nha2EuanAiLCJzZXR0c3Uub3Nha2EuanAiLCJzaGlqb25hd2F0ZS5vc2FrYS5qcCIsInNoaW1hbW90by5vc2FrYS5qcCIsInN1aXRhLm9zYWthLmpwIiwidGFkYW9rYS5vc2FrYS5qcCIsInRhaXNoaS5vc2FrYS5qcCIsInRhamlyaS5v'@;
put 'c2FrYS5qcCIsInRha2Fpc2hpLm9zYWthLmpwIiwidGFrYXRzdWtpLm9zYWthLmpwIiwidG9uZGFiYXlhc2hpLm9zYWthLmpwIiwidG95b25ha2Eub3Nha2EuanAiLCJ0b3lvbm8ub3Nha2EuanAiLCJ5YW8ub3Nha2EuanAiLCJhcmlha2Uuc2FnYS5qcCIsImFyaXRhLnNhZ2EuanAiLCJmdWt1'@;
put 'ZG9taS5zYWdhLmpwIiwiZ2Vua2FpLnNhZ2EuanAiLCJoYW1hdGFtYS5zYWdhLmpwIiwiaGl6ZW4uc2FnYS5qcCIsImltYXJpLnNhZ2EuanAiLCJrYW1pbWluZS5zYWdhLmpwIiwia2FuemFraS5zYWdhLmpwIiwia2FyYXRzdS5zYWdhLmpwIiwia2FzaGltYS5zYWdhLmpwIiwia2l0YWdhdGEu'@;
put 'c2FnYS5qcCIsImtpdGFoYXRhLnNhZ2EuanAiLCJraXlhbWEuc2FnYS5qcCIsImtvdWhva3Uuc2FnYS5qcCIsImt5dXJhZ2kuc2FnYS5qcCIsIm5pc2hpYXJpdGEuc2FnYS5qcCIsIm9naS5zYWdhLmpwIiwib21hY2hpLnNhZ2EuanAiLCJvdWNoaS5zYWdhLmpwIiwic2FnYS5zYWdhLmpwIiwi'@;
put 'c2hpcm9pc2hpLnNhZ2EuanAiLCJ0YWt1LnNhZ2EuanAiLCJ0YXJhLnNhZ2EuanAiLCJ0b3N1LnNhZ2EuanAiLCJ5b3NoaW5vZ2FyaS5zYWdhLmpwIiwiYXJha2F3YS5zYWl0YW1hLmpwIiwiYXNha2Euc2FpdGFtYS5qcCIsImNoaWNoaWJ1LnNhaXRhbWEuanAiLCJmdWppbWkuc2FpdGFtYS5q'@;
put 'cCIsImZ1amltaW5vLnNhaXRhbWEuanAiLCJmdWtheWEuc2FpdGFtYS5qcCIsImhhbm5vLnNhaXRhbWEuanAiLCJoYW55dS5zYWl0YW1hLmpwIiwiaGFzdWRhLnNhaXRhbWEuanAiLCJoYXRvZ2F5YS5zYWl0YW1hLmpwIiwiaGF0b3lhbWEuc2FpdGFtYS5qcCIsImhpZGFrYS5zYWl0YW1hLmpw'@;
put 'IiwiaGlnYXNoaWNoaWNoaWJ1LnNhaXRhbWEuanAiLCJoaWdhc2hpbWF0c3V5YW1hLnNhaXRhbWEuanAiLCJob25qby5zYWl0YW1hLmpwIiwiaW5hLnNhaXRhbWEuanAiLCJpcnVtYS5zYWl0YW1hLmpwIiwiaXdhdHN1a2kuc2FpdGFtYS5qcCIsImthbWlpenVtaS5zYWl0YW1hLmpwIiwia2Ft'@;
put 'aWthd2Euc2FpdGFtYS5qcCIsImthbWlzYXRvLnNhaXRhbWEuanAiLCJrYXN1a2FiZS5zYWl0YW1hLmpwIiwia2F3YWdvZS5zYWl0YW1hLmpwIiwia2F3YWd1Y2hpLnNhaXRhbWEuanAiLCJrYXdhamltYS5zYWl0YW1hLmpwIiwia2F6by5zYWl0YW1hLmpwIiwia2l0YW1vdG8uc2FpdGFtYS5q'@;
put 'cCIsImtvc2hpZ2F5YS5zYWl0YW1hLmpwIiwia291bm9zdS5zYWl0YW1hLmpwIiwia3VraS5zYWl0YW1hLmpwIiwia3VtYWdheWEuc2FpdGFtYS5qcCIsIm1hdHN1YnVzaGkuc2FpdGFtYS5qcCIsIm1pbmFuby5zYWl0YW1hLmpwIiwibWlzYXRvLnNhaXRhbWEuanAiLCJtaXlhc2hpcm8uc2Fp'@;
put 'dGFtYS5qcCIsIm1peW9zaGkuc2FpdGFtYS5qcCIsIm1vcm95YW1hLnNhaXRhbWEuanAiLCJuYWdhdG9yby5zYWl0YW1hLmpwIiwibmFtZWdhd2Euc2FpdGFtYS5qcCIsIm5paXphLnNhaXRhbWEuanAiLCJvZ2Fuby5zYWl0YW1hLmpwIiwib2dhd2Euc2FpdGFtYS5qcCIsIm9nb3NlLnNhaXRh'@;
put 'bWEuanAiLCJva2VnYXdhLnNhaXRhbWEuanAiLCJvbWl5YS5zYWl0YW1hLmpwIiwib3Rha2kuc2FpdGFtYS5qcCIsInJhbnphbi5zYWl0YW1hLmpwIiwicnlva2FtaS5zYWl0YW1hLmpwIiwic2FpdGFtYS5zYWl0YW1hLmpwIiwic2FrYWRvLnNhaXRhbWEuanAiLCJzYXR0ZS5zYWl0YW1hLmpw'@;
put 'Iiwic2F5YW1hLnNhaXRhbWEuanAiLCJzaGlraS5zYWl0YW1hLmpwIiwic2hpcmFva2Euc2FpdGFtYS5qcCIsInNva2Euc2FpdGFtYS5qcCIsInN1Z2l0by5zYWl0YW1hLmpwIiwidG9kYS5zYWl0YW1hLmpwIiwidG9raWdhd2Euc2FpdGFtYS5qcCIsInRva29yb3phd2Euc2FpdGFtYS5qcCIs'@;
put 'InRzdXJ1Z2FzaGltYS5zYWl0YW1hLmpwIiwidXJhd2Euc2FpdGFtYS5qcCIsIndhcmFiaS5zYWl0YW1hLmpwIiwieWFzaGlvLnNhaXRhbWEuanAiLCJ5b2tvemUuc2FpdGFtYS5qcCIsInlvbm8uc2FpdGFtYS5qcCIsInlvcmlpLnNhaXRhbWEuanAiLCJ5b3NoaWRhLnNhaXRhbWEuanAiLCJ5'@;
put 'b3NoaWthd2Euc2FpdGFtYS5qcCIsInlvc2hpbWkuc2FpdGFtYS5qcCIsImFpc2hvLnNoaWdhLmpwIiwiZ2Ftby5zaGlnYS5qcCIsImhpZ2FzaGlvbWkuc2hpZ2EuanAiLCJoaWtvbmUuc2hpZ2EuanAiLCJrb2thLnNoaWdhLmpwIiwia29uYW4uc2hpZ2EuanAiLCJrb3NlaS5zaGlnYS5qcCIs'@;
put 'ImtvdG8uc2hpZ2EuanAiLCJrdXNhdHN1LnNoaWdhLmpwIiwibWFpYmFyYS5zaGlnYS5qcCIsIm1vcml5YW1hLnNoaWdhLmpwIiwibmFnYWhhbWEuc2hpZ2EuanAiLCJuaXNoaWF6YWkuc2hpZ2EuanAiLCJub3RvZ2F3YS5zaGlnYS5qcCIsIm9taWhhY2hpbWFuLnNoaWdhLmpwIiwib3RzdS5z'@;
put 'aGlnYS5qcCIsInJpdHRvLnNoaWdhLmpwIiwicnl1b2guc2hpZ2EuanAiLCJ0YWthc2hpbWEuc2hpZ2EuanAiLCJ0YWthdHN1a2kuc2hpZ2EuanAiLCJ0b3JhaGltZS5zaGlnYS5qcCIsInRveW9zYXRvLnNoaWdhLmpwIiwieWFzdS5zaGlnYS5qcCIsImFrYWdpLnNoaW1hbmUuanAiLCJhbWEu'@;
put 'c2hpbWFuZS5qcCIsImdvdHN1LnNoaW1hbmUuanAiLCJoYW1hZGEuc2hpbWFuZS5qcCIsImhpZ2FzaGlpenVtby5zaGltYW5lLmpwIiwiaGlrYXdhLnNoaW1hbmUuanAiLCJoaWtpbWkuc2hpbWFuZS5qcCIsIml6dW1vLnNoaW1hbmUuanAiLCJrYWtpbm9raS5zaGltYW5lLmpwIiwibWFzdWRh'@;
put 'LnNoaW1hbmUuanAiLCJtYXRzdWUuc2hpbWFuZS5qcCIsIm1pc2F0by5zaGltYW5lLmpwIiwibmlzaGlub3NoaW1hLnNoaW1hbmUuanAiLCJvaGRhLnNoaW1hbmUuanAiLCJva2lub3NoaW1hLnNoaW1hbmUuanAiLCJva3VpenVtby5zaGltYW5lLmpwIiwic2hpbWFuZS5zaGltYW5lLmpwIiwi'@;
put 'dGFtYXl1LnNoaW1hbmUuanAiLCJ0c3V3YW5vLnNoaW1hbmUuanAiLCJ1bm5hbi5zaGltYW5lLmpwIiwieWFrdW1vLnNoaW1hbmUuanAiLCJ5YXN1Z2kuc2hpbWFuZS5qcCIsInlhdHN1a2Euc2hpbWFuZS5qcCIsImFyYWkuc2hpenVva2EuanAiLCJhdGFtaS5zaGl6dW9rYS5qcCIsImZ1amku'@;
put 'c2hpenVva2EuanAiLCJmdWppZWRhLnNoaXp1b2thLmpwIiwiZnVqaWthd2Euc2hpenVva2EuanAiLCJmdWppbm9taXlhLnNoaXp1b2thLmpwIiwiZnVrdXJvaS5zaGl6dW9rYS5qcCIsImdvdGVtYmEuc2hpenVva2EuanAiLCJoYWliYXJhLnNoaXp1b2thLmpwIiwiaGFtYW1hdHN1LnNoaXp1'@;
put 'b2thLmpwIiwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcCIsIml0by5zaGl6dW9rYS5qcCIsIml3YXRhLnNoaXp1b2thLmpwIiwiaXp1LnNoaXp1b2thLmpwIiwiaXp1bm9rdW5pLnNoaXp1b2thLmpwIiwia2FrZWdhd2Euc2hpenVva2EuanAiLCJrYW5uYW1pLnNoaXp1b2thLmpwIiwia2F3YW5l'@;
put 'aG9uLnNoaXp1b2thLmpwIiwia2F3YXp1LnNoaXp1b2thLmpwIiwia2lrdWdhd2Euc2hpenVva2EuanAiLCJrb3NhaS5zaGl6dW9rYS5qcCIsIm1ha2lub2hhcmEuc2hpenVva2EuanAiLCJtYXRzdXpha2kuc2hpenVva2EuanAiLCJtaW5hbWlpenUuc2hpenVva2EuanAiLCJtaXNoaW1hLnNo'@;
put 'aXp1b2thLmpwIiwibW9yaW1hY2hpLnNoaXp1b2thLmpwIiwibmlzaGlpenUuc2hpenVva2EuanAiLCJudW1henUuc2hpenVva2EuanAiLCJvbWFlemFraS5zaGl6dW9rYS5qcCIsInNoaW1hZGEuc2hpenVva2EuanAiLCJzaGltaXp1LnNoaXp1b2thLmpwIiwic2hpbW9kYS5zaGl6dW9rYS5q'@;
put 'cCIsInNoaXp1b2thLnNoaXp1b2thLmpwIiwic3Vzb25vLnNoaXp1b2thLmpwIiwieWFpenUuc2hpenVva2EuanAiLCJ5b3NoaWRhLnNoaXp1b2thLmpwIiwiYXNoaWthZ2EudG9jaGlnaS5qcCIsImJhdG8udG9jaGlnaS5qcCIsImhhZ2EudG9jaGlnaS5qcCIsImljaGlrYWkudG9jaGlnaS5q'@;
put 'cCIsIml3YWZ1bmUudG9jaGlnaS5qcCIsImthbWlub2thd2EudG9jaGlnaS5qcCIsImthbnVtYS50b2NoaWdpLmpwIiwia2FyYXN1eWFtYS50b2NoaWdpLmpwIiwia3Vyb2lzby50b2NoaWdpLmpwIiwibWFzaGlrby50b2NoaWdpLmpwIiwibWlidS50b2NoaWdpLmpwIiwibW9rYS50b2NoaWdp'@;
put 'LmpwIiwibW90ZWdpLnRvY2hpZ2kuanAiLCJuYXN1LnRvY2hpZ2kuanAiLCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcCIsIm5pa2tvLnRvY2hpZ2kuanAiLCJuaXNoaWthdGEudG9jaGlnaS5qcCIsIm5vZ2kudG9jaGlnaS5qcCIsIm9oaXJhLnRvY2hpZ2kuanAiLCJvaHRhd2FyYS50b2NoaWdp'@;
put 'LmpwIiwib3lhbWEudG9jaGlnaS5qcCIsInNha3VyYS50b2NoaWdpLmpwIiwic2Fuby50b2NoaWdpLmpwIiwic2hpbW90c3VrZS50b2NoaWdpLmpwIiwic2hpb3lhLnRvY2hpZ2kuanAiLCJ0YWthbmV6YXdhLnRvY2hpZ2kuanAiLCJ0b2NoaWdpLnRvY2hpZ2kuanAiLCJ0c3VnYS50b2NoaWdp'@;
put 'LmpwIiwidWppaWUudG9jaGlnaS5qcCIsInV0c3Vub21peWEudG9jaGlnaS5qcCIsInlhaXRhLnRvY2hpZ2kuanAiLCJhaXp1bWkudG9rdXNoaW1hLmpwIiwiYW5hbi50b2t1c2hpbWEuanAiLCJpY2hpYmEudG9rdXNoaW1hLmpwIiwiaXRhbm8udG9rdXNoaW1hLmpwIiwia2FpbmFuLnRva3Vz'@;
put 'aGltYS5qcCIsImtvbWF0c3VzaGltYS50b2t1c2hpbWEuanAiLCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcCIsIm1pbWEudG9rdXNoaW1hLmpwIiwibWluYW1pLnRva3VzaGltYS5qcCIsIm1peW9zaGkudG9rdXNoaW1hLmpwIiwibXVnaS50b2t1c2hpbWEuanAiLCJuYWthZ2F3YS50b2t1c2hp'@;
put 'bWEuanAiLCJuYXJ1dG8udG9rdXNoaW1hLmpwIiwic2FuYWdvY2hpLnRva3VzaGltYS5qcCIsInNoaXNoaWt1aS50b2t1c2hpbWEuanAiLCJ0b2t1c2hpbWEudG9rdXNoaW1hLmpwIiwid2FqaWtpLnRva3VzaGltYS5qcCIsImFkYWNoaS50b2t5by5qcCIsImFraXJ1bm8udG9reW8uanAiLCJh'@;
put 'a2lzaGltYS50b2t5by5qcCIsImFvZ2FzaGltYS50b2t5by5qcCIsImFyYWthd2EudG9reW8uanAiLCJidW5reW8udG9reW8uanAiLCJjaGl5b2RhLnRva3lvLmpwIiwiY2hvZnUudG9reW8uanAiLCJjaHVvLnRva3lvLmpwIiwiZWRvZ2F3YS50b2t5by5qcCIsImZ1Y2h1LnRva3lvLmpwIiwi'@;
put 'ZnVzc2EudG9reW8uanAiLCJoYWNoaWpvLnRva3lvLmpwIiwiaGFjaGlvamkudG9reW8uanAiLCJoYW11cmEudG9reW8uanAiLCJoaWdhc2hpa3VydW1lLnRva3lvLmpwIiwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwIiwiaGlnYXNoaXlhbWF0by50b2t5by5qcCIsImhpbm8udG9reW8uanAi'@;
put 'LCJoaW5vZGUudG9reW8uanAiLCJoaW5vaGFyYS50b2t5by5qcCIsImluYWdpLnRva3lvLmpwIiwiaXRhYmFzaGkudG9reW8uanAiLCJrYXRzdXNoaWthLnRva3lvLmpwIiwia2l0YS50b2t5by5qcCIsImtpeW9zZS50b2t5by5qcCIsImtvZGFpcmEudG9reW8uanAiLCJrb2dhbmVpLnRva3lv'@;
put 'LmpwIiwia29rdWJ1bmppLnRva3lvLmpwIiwia29tYWUudG9reW8uanAiLCJrb3RvLnRva3lvLmpwIiwia291enVzaGltYS50b2t5by5qcCIsImt1bml0YWNoaS50b2t5by5qcCIsIm1hY2hpZGEudG9reW8uanAiLCJtZWd1cm8udG9reW8uanAiLCJtaW5hdG8udG9reW8uanAiLCJtaXRha2Eu'@;
put 'dG9reW8uanAiLCJtaXp1aG8udG9reW8uanAiLCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanAiLCJtdXNhc2hpbm8udG9reW8uanAiLCJuYWthbm8udG9reW8uanAiLCJuZXJpbWEudG9reW8uanAiLCJvZ2FzYXdhcmEudG9reW8uanAiLCJva3V0YW1hLnRva3lvLmpwIiwib21lLnRva3lvLmpw'@;
put 'Iiwib3NoaW1hLnRva3lvLmpwIiwib3RhLnRva3lvLmpwIiwic2V0YWdheWEudG9reW8uanAiLCJzaGlidXlhLnRva3lvLmpwIiwic2hpbmFnYXdhLnRva3lvLmpwIiwic2hpbmp1a3UudG9reW8uanAiLCJzdWdpbmFtaS50b2t5by5qcCIsInN1bWlkYS50b2t5by5qcCIsInRhY2hpa2F3YS50'@;
put 'b2t5by5qcCIsInRhaXRvLnRva3lvLmpwIiwidGFtYS50b2t5by5qcCIsInRvc2hpbWEudG9reW8uanAiLCJjaGl6dS50b3R0b3JpLmpwIiwiaGluby50b3R0b3JpLmpwIiwia2F3YWhhcmEudG90dG9yaS5qcCIsImtvZ2UudG90dG9yaS5qcCIsImtvdG91cmEudG90dG9yaS5qcCIsIm1pc2Fz'@;
put 'YS50b3R0b3JpLmpwIiwibmFuYnUudG90dG9yaS5qcCIsIm5pY2hpbmFuLnRvdHRvcmkuanAiLCJzYWthaW1pbmF0by50b3R0b3JpLmpwIiwidG90dG9yaS50b3R0b3JpLmpwIiwid2FrYXNhLnRvdHRvcmkuanAiLCJ5YXp1LnRvdHRvcmkuanAiLCJ5b25hZ28udG90dG9yaS5qcCIsImFzYWhp'@;
put 'LnRveWFtYS5qcCIsImZ1Y2h1LnRveWFtYS5qcCIsImZ1a3VtaXRzdS50b3lhbWEuanAiLCJmdW5haGFzaGkudG95YW1hLmpwIiwiaGltaS50b3lhbWEuanAiLCJpbWl6dS50b3lhbWEuanAiLCJpbmFtaS50b3lhbWEuanAiLCJqb2hhbmEudG95YW1hLmpwIiwia2FtaWljaGkudG95YW1hLmpw'@;
put 'Iiwia3Vyb2JlLnRveWFtYS5qcCIsIm5ha2FuaWlrYXdhLnRveWFtYS5qcCIsIm5hbWVyaWthd2EudG95YW1hLmpwIiwibmFudG8udG95YW1hLmpwIiwibnl1emVuLnRveWFtYS5qcCIsIm95YWJlLnRveWFtYS5qcCIsInRhaXJhLnRveWFtYS5qcCIsInRha2Fva2EudG95YW1hLmpwIiwidGF0'@;
put 'ZXlhbWEudG95YW1hLmpwIiwidG9nYS50b3lhbWEuanAiLCJ0b25hbWkudG95YW1hLmpwIiwidG95YW1hLnRveWFtYS5qcCIsInVuYXp1a2kudG95YW1hLmpwIiwidW96dS50b3lhbWEuanAiLCJ5YW1hZGEudG95YW1hLmpwIiwiYXJpZGEud2FrYXlhbWEuanAiLCJhcmlkYWdhd2Eud2FrYXlh'@;
put 'bWEuanAiLCJnb2JvLndha2F5YW1hLmpwIiwiaGFzaGltb3RvLndha2F5YW1hLmpwIiwiaGlkYWthLndha2F5YW1hLmpwIiwiaGlyb2dhd2Eud2FrYXlhbWEuanAiLCJpbmFtaS53YWtheWFtYS5qcCIsIml3YWRlLndha2F5YW1hLmpwIiwia2FpbmFuLndha2F5YW1hLmpwIiwia2FtaXRvbmRh'@;
put 'Lndha2F5YW1hLmpwIiwia2F0c3VyYWdpLndha2F5YW1hLmpwIiwia2ltaW5vLndha2F5YW1hLmpwIiwia2lub2thd2Eud2FrYXlhbWEuanAiLCJraXRheWFtYS53YWtheWFtYS5qcCIsImtveWEud2FrYXlhbWEuanAiLCJrb3phLndha2F5YW1hLmpwIiwia296YWdhd2Eud2FrYXlhbWEuanAi'@;
put 'LCJrdWRveWFtYS53YWtheWFtYS5qcCIsImt1c2hpbW90by53YWtheWFtYS5qcCIsIm1paGFtYS53YWtheWFtYS5qcCIsIm1pc2F0by53YWtheWFtYS5qcCIsIm5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanAiLCJzaGluZ3Uud2FrYXlhbWEuanAiLCJzaGlyYWhhbWEud2FrYXlhbWEuanAiLCJ0'@;
put 'YWlqaS53YWtheWFtYS5qcCIsInRhbmFiZS53YWtheWFtYS5qcCIsIndha2F5YW1hLndha2F5YW1hLmpwIiwieXVhc2Eud2FrYXlhbWEuanAiLCJ5dXJhLndha2F5YW1hLmpwIiwiYXNhaGkueWFtYWdhdGEuanAiLCJmdW5hZ2F0YS55YW1hZ2F0YS5qcCIsImhpZ2FzaGluZS55YW1hZ2F0YS5q'@;
put 'cCIsImlpZGUueWFtYWdhdGEuanAiLCJrYWhva3UueWFtYWdhdGEuanAiLCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwIiwia2FuZXlhbWEueWFtYWdhdGEuanAiLCJrYXdhbmlzaGkueWFtYWdhdGEuanAiLCJtYW11cm9nYXdhLnlhbWFnYXRhLmpwIiwibWlrYXdhLnlhbWFnYXRhLmpwIiwibXVy'@;
put 'YXlhbWEueWFtYWdhdGEuanAiLCJuYWdhaS55YW1hZ2F0YS5qcCIsIm5ha2F5YW1hLnlhbWFnYXRhLmpwIiwibmFueW8ueWFtYWdhdGEuanAiLCJuaXNoaWthd2EueWFtYWdhdGEuanAiLCJvYmFuYXphd2EueWFtYWdhdGEuanAiLCJvZS55YW1hZ2F0YS5qcCIsIm9ndW5pLnlhbWFnYXRhLmpw'@;
put 'Iiwib2hrdXJhLnlhbWFnYXRhLmpwIiwib2lzaGlkYS55YW1hZ2F0YS5qcCIsInNhZ2FlLnlhbWFnYXRhLmpwIiwic2FrYXRhLnlhbWFnYXRhLmpwIiwic2FrZWdhd2EueWFtYWdhdGEuanAiLCJzaGluam8ueWFtYWdhdGEuanAiLCJzaGlyYXRha2EueWFtYWdhdGEuanAiLCJzaG9uYWkueWFt'@;
put 'YWdhdGEuanAiLCJ0YWthaGF0YS55YW1hZ2F0YS5qcCIsInRlbmRvLnlhbWFnYXRhLmpwIiwidG96YXdhLnlhbWFnYXRhLmpwIiwidHN1cnVva2EueWFtYWdhdGEuanAiLCJ5YW1hZ2F0YS55YW1hZ2F0YS5qcCIsInlhbWFub2JlLnlhbWFnYXRhLmpwIiwieW9uZXphd2EueWFtYWdhdGEuanAi'@;
put 'LCJ5dXphLnlhbWFnYXRhLmpwIiwiYWJ1LnlhbWFndWNoaS5qcCIsImhhZ2kueWFtYWd1Y2hpLmpwIiwiaGlrYXJpLnlhbWFndWNoaS5qcCIsImhvZnUueWFtYWd1Y2hpLmpwIiwiaXdha3VuaS55YW1hZ3VjaGkuanAiLCJrdWRhbWF0c3UueWFtYWd1Y2hpLmpwIiwibWl0b3UueWFtYWd1Y2hp'@;
put 'LmpwIiwibmFnYXRvLnlhbWFndWNoaS5qcCIsIm9zaGltYS55YW1hZ3VjaGkuanAiLCJzaGltb25vc2VraS55YW1hZ3VjaGkuanAiLCJzaHVuYW4ueWFtYWd1Y2hpLmpwIiwidGFidXNlLnlhbWFndWNoaS5qcCIsInRva3V5YW1hLnlhbWFndWNoaS5qcCIsInRveW90YS55YW1hZ3VjaGkuanAi'@;
put 'LCJ1YmUueWFtYWd1Y2hpLmpwIiwieXV1LnlhbWFndWNoaS5qcCIsImNodW8ueWFtYW5hc2hpLmpwIiwiZG9zaGkueWFtYW5hc2hpLmpwIiwiZnVlZnVraS55YW1hbmFzaGkuanAiLCJmdWppa2F3YS55YW1hbmFzaGkuanAiLCJmdWppa2F3YWd1Y2hpa28ueWFtYW5hc2hpLmpwIiwiZnVqaXlv'@;
put 'c2hpZGEueWFtYW5hc2hpLmpwIiwiaGF5YWthd2EueWFtYW5hc2hpLmpwIiwiaG9rdXRvLnlhbWFuYXNoaS5qcCIsImljaGlrYXdhbWlzYXRvLnlhbWFuYXNoaS5qcCIsImthaS55YW1hbmFzaGkuanAiLCJrb2Z1LnlhbWFuYXNoaS5qcCIsImtvc2h1LnlhbWFuYXNoaS5qcCIsImtvc3VnZS55'@;
put 'YW1hbmFzaGkuanAiLCJtaW5hbWktYWxwcy55YW1hbmFzaGkuanAiLCJtaW5vYnUueWFtYW5hc2hpLmpwIiwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcCIsIm5hbmJ1LnlhbWFuYXNoaS5qcCIsIm5hcnVzYXdhLnlhbWFuYXNoaS5qcCIsIm5pcmFzYWtpLnlhbWFuYXNoaS5qcCIsIm5pc2hpa2F0'@;
put 'c3VyYS55YW1hbmFzaGkuanAiLCJvc2hpbm8ueWFtYW5hc2hpLmpwIiwib3RzdWtpLnlhbWFuYXNoaS5qcCIsInNob3dhLnlhbWFuYXNoaS5qcCIsInRhYmF5YW1hLnlhbWFuYXNoaS5qcCIsInRzdXJ1LnlhbWFuYXNoaS5qcCIsInVlbm9oYXJhLnlhbWFuYXNoaS5qcCIsInlhbWFuYWtha28u'@;
put 'eWFtYW5hc2hpLmpwIiwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcCIsImtlIiwiYWMua2UiLCJjby5rZSIsImdvLmtlIiwiaW5mby5rZSIsIm1lLmtlIiwibW9iaS5rZSIsIm5lLmtlIiwib3Iua2UiLCJzYy5rZSIsImtnIiwib3JnLmtnIiwibmV0LmtnIiwiY29tLmtnIiwiZWR1LmtnIiwiZ292'@;
put 'LmtnIiwibWlsLmtnIiwiKi5raCIsImtpIiwiZWR1LmtpIiwiYml6LmtpIiwibmV0LmtpIiwib3JnLmtpIiwiZ292LmtpIiwiaW5mby5raSIsImNvbS5raSIsImttIiwib3JnLmttIiwibm9tLmttIiwiZ292LmttIiwicHJkLmttIiwidG0ua20iLCJlZHUua20iLCJtaWwua20iLCJhc3Mua20i'@;
put 'LCJjb20ua20iLCJjb29wLmttIiwiYXNzby5rbSIsInByZXNzZS5rbSIsIm1lZGVjaW4ua20iLCJub3RhaXJlcy5rbSIsInBoYXJtYWNpZW5zLmttIiwidmV0ZXJpbmFpcmUua20iLCJnb3V2LmttIiwia24iLCJuZXQua24iLCJvcmcua24iLCJlZHUua24iLCJnb3Yua24iLCJrcCIsImNvbS5r'@;
put 'cCIsImVkdS5rcCIsImdvdi5rcCIsIm9yZy5rcCIsInJlcC5rcCIsInRyYS5rcCIsImtyIiwiYWMua3IiLCJjby5rciIsImVzLmtyIiwiZ28ua3IiLCJocy5rciIsImtnLmtyIiwibWlsLmtyIiwibXMua3IiLCJuZS5rciIsIm9yLmtyIiwicGUua3IiLCJyZS5rciIsInNjLmtyIiwiYnVzYW4u'@;
put 'a3IiLCJjaHVuZ2J1ay5rciIsImNodW5nbmFtLmtyIiwiZGFlZ3Uua3IiLCJkYWVqZW9uLmtyIiwiZ2FuZ3dvbi5rciIsImd3YW5nanUua3IiLCJneWVvbmdidWsua3IiLCJneWVvbmdnaS5rciIsImd5ZW9uZ25hbS5rciIsImluY2hlb24ua3IiLCJqZWp1LmtyIiwiamVvbmJ1ay5rciIsImpl'@;
put 'b25uYW0ua3IiLCJzZW91bC5rciIsInVsc2FuLmtyIiwia3ciLCJjb20ua3ciLCJlZHUua3ciLCJlbWIua3ciLCJnb3Yua3ciLCJpbmQua3ciLCJuZXQua3ciLCJvcmcua3ciLCJreSIsImNvbS5reSIsImVkdS5reSIsIm5ldC5reSIsIm9yZy5reSIsImt6Iiwib3JnLmt6IiwiZWR1Lmt6Iiwi'@;
put 'bmV0Lmt6IiwiZ292Lmt6IiwibWlsLmt6IiwiY29tLmt6IiwibGEiLCJpbnQubGEiLCJuZXQubGEiLCJpbmZvLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwicGVyLmxhIiwiY29tLmxhIiwib3JnLmxhIiwibGIiLCJjb20ubGIiLCJlZHUubGIiLCJnb3YubGIiLCJuZXQubGIiLCJvcmcubGIiLCJs'@;
put 'YyIsImNvbS5sYyIsIm5ldC5sYyIsImNvLmxjIiwib3JnLmxjIiwiZWR1LmxjIiwiZ292LmxjIiwibGkiLCJsayIsImdvdi5sayIsInNjaC5sayIsIm5ldC5sayIsImludC5sayIsImNvbS5sayIsIm9yZy5sayIsImVkdS5sayIsIm5nby5sayIsInNvYy5sayIsIndlYi5sayIsImx0ZC5sayIs'@;
put 'ImFzc24ubGsiLCJncnAubGsiLCJob3RlbC5sayIsImFjLmxrIiwibHIiLCJjb20ubHIiLCJlZHUubHIiLCJnb3YubHIiLCJvcmcubHIiLCJuZXQubHIiLCJscyIsImFjLmxzIiwiYml6LmxzIiwiY28ubHMiLCJlZHUubHMiLCJnb3YubHMiLCJpbmZvLmxzIiwibmV0LmxzIiwib3JnLmxzIiwi'@;
put 'c2MubHMiLCJsdCIsImdvdi5sdCIsImx1IiwibHYiLCJjb20ubHYiLCJlZHUubHYiLCJnb3YubHYiLCJvcmcubHYiLCJtaWwubHYiLCJpZC5sdiIsIm5ldC5sdiIsImFzbi5sdiIsImNvbmYubHYiLCJseSIsImNvbS5seSIsIm5ldC5seSIsImdvdi5seSIsInBsYy5seSIsImVkdS5seSIsInNj'@;
put 'aC5seSIsIm1lZC5seSIsIm9yZy5seSIsImlkLmx5IiwibWEiLCJjby5tYSIsIm5ldC5tYSIsImdvdi5tYSIsIm9yZy5tYSIsImFjLm1hIiwicHJlc3MubWEiLCJtYyIsInRtLm1jIiwiYXNzby5tYyIsIm1kIiwibWUiLCJjby5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsImVkdS5tZSIsImFjLm1l'@;
put 'IiwiZ292Lm1lIiwiaXRzLm1lIiwicHJpdi5tZSIsIm1nIiwib3JnLm1nIiwibm9tLm1nIiwiZ292Lm1nIiwicHJkLm1nIiwidG0ubWciLCJlZHUubWciLCJtaWwubWciLCJjb20ubWciLCJjby5tZyIsIm1oIiwibWlsIiwibWsiLCJjb20ubWsiLCJvcmcubWsiLCJuZXQubWsiLCJlZHUubWsi'@;
put 'LCJnb3YubWsiLCJpbmYubWsiLCJuYW1lLm1rIiwibWwiLCJjb20ubWwiLCJlZHUubWwiLCJnb3V2Lm1sIiwiZ292Lm1sIiwibmV0Lm1sIiwib3JnLm1sIiwicHJlc3NlLm1sIiwiKi5tbSIsIm1uIiwiZ292Lm1uIiwiZWR1Lm1uIiwib3JnLm1uIiwibW8iLCJjb20ubW8iLCJuZXQubW8iLCJv'@;
put 'cmcubW8iLCJlZHUubW8iLCJnb3YubW8iLCJtb2JpIiwibXAiLCJtcSIsIm1yIiwiZ292Lm1yIiwibXMiLCJjb20ubXMiLCJlZHUubXMiLCJnb3YubXMiLCJuZXQubXMiLCJvcmcubXMiLCJtdCIsImNvbS5tdCIsImVkdS5tdCIsIm5ldC5tdCIsIm9yZy5tdCIsIm11IiwiY29tLm11IiwibmV0'@;
put 'Lm11Iiwib3JnLm11IiwiZ292Lm11IiwiYWMubXUiLCJjby5tdSIsIm9yLm11IiwibXVzZXVtIiwiYWNhZGVteS5tdXNldW0iLCJhZ3JpY3VsdHVyZS5tdXNldW0iLCJhaXIubXVzZXVtIiwiYWlyZ3VhcmQubXVzZXVtIiwiYWxhYmFtYS5tdXNldW0iLCJhbGFza2EubXVzZXVtIiwiYW1iZXIu'@;
put 'bXVzZXVtIiwiYW1idWxhbmNlLm11c2V1bSIsImFtZXJpY2FuLm11c2V1bSIsImFtZXJpY2FuYS5tdXNldW0iLCJhbWVyaWNhbmFudGlxdWVzLm11c2V1bSIsImFtZXJpY2FuYXJ0Lm11c2V1bSIsImFtc3RlcmRhbS5tdXNldW0iLCJhbmQubXVzZXVtIiwiYW5uZWZyYW5rLm11c2V1bSIsImFu'@;
put 'dGhyby5tdXNldW0iLCJhbnRocm9wb2xvZ3kubXVzZXVtIiwiYW50aXF1ZXMubXVzZXVtIiwiYXF1YXJpdW0ubXVzZXVtIiwiYXJib3JldHVtLm11c2V1bSIsImFyY2hhZW9sb2dpY2FsLm11c2V1bSIsImFyY2hhZW9sb2d5Lm11c2V1bSIsImFyY2hpdGVjdHVyZS5tdXNldW0iLCJhcnQubXVz'@;
put 'ZXVtIiwiYXJ0YW5kZGVzaWduLm11c2V1bSIsImFydGNlbnRlci5tdXNldW0iLCJhcnRkZWNvLm11c2V1bSIsImFydGVkdWNhdGlvbi5tdXNldW0iLCJhcnRnYWxsZXJ5Lm11c2V1bSIsImFydHMubXVzZXVtIiwiYXJ0c2FuZGNyYWZ0cy5tdXNldW0iLCJhc21hdGFydC5tdXNldW0iLCJhc3Nh'@;
put 'c3NpbmF0aW9uLm11c2V1bSIsImFzc2lzaS5tdXNldW0iLCJhc3NvY2lhdGlvbi5tdXNldW0iLCJhc3Ryb25vbXkubXVzZXVtIiwiYXRsYW50YS5tdXNldW0iLCJhdXN0aW4ubXVzZXVtIiwiYXVzdHJhbGlhLm11c2V1bSIsImF1dG9tb3RpdmUubXVzZXVtIiwiYXZpYXRpb24ubXVzZXVtIiwi'@;
put 'YXhpcy5tdXNldW0iLCJiYWRham96Lm11c2V1bSIsImJhZ2hkYWQubXVzZXVtIiwiYmFobi5tdXNldW0iLCJiYWxlLm11c2V1bSIsImJhbHRpbW9yZS5tdXNldW0iLCJiYXJjZWxvbmEubXVzZXVtIiwiYmFzZWJhbGwubXVzZXVtIiwiYmFzZWwubXVzZXVtIiwiYmF0aHMubXVzZXVtIiwiYmF1'@;
put 'ZXJuLm11c2V1bSIsImJlYXV4YXJ0cy5tdXNldW0iLCJiZWVsZGVuZ2VsdWlkLm11c2V1bSIsImJlbGxldnVlLm11c2V1bSIsImJlcmdiYXUubXVzZXVtIiwiYmVya2VsZXkubXVzZXVtIiwiYmVybGluLm11c2V1bSIsImJlcm4ubXVzZXVtIiwiYmlibGUubXVzZXVtIiwiYmlsYmFvLm11c2V1'@;
put 'bSIsImJpbGwubXVzZXVtIiwiYmlyZGFydC5tdXNldW0iLCJiaXJ0aHBsYWNlLm11c2V1bSIsImJvbm4ubXVzZXVtIiwiYm9zdG9uLm11c2V1bSIsImJvdGFuaWNhbC5tdXNldW0iLCJib3RhbmljYWxnYXJkZW4ubXVzZXVtIiwiYm90YW5pY2dhcmRlbi5tdXNldW0iLCJib3RhbnkubXVzZXVt'@;
put 'IiwiYnJhbmR5d2luZXZhbGxleS5tdXNldW0iLCJicmFzaWwubXVzZXVtIiwiYnJpc3RvbC5tdXNldW0iLCJicml0aXNoLm11c2V1bSIsImJyaXRpc2hjb2x1bWJpYS5tdXNldW0iLCJicm9hZGNhc3QubXVzZXVtIiwiYnJ1bmVsLm11c2V1bSIsImJydXNzZWwubXVzZXVtIiwiYnJ1c3NlbHMu'@;
put 'bXVzZXVtIiwiYnJ1eGVsbGVzLm11c2V1bSIsImJ1aWxkaW5nLm11c2V1bSIsImJ1cmdob2YubXVzZXVtIiwiYnVzLm11c2V1bSIsImJ1c2hleS5tdXNldW0iLCJjYWRhcXVlcy5tdXNldW0iLCJjYWxpZm9ybmlhLm11c2V1bSIsImNhbWJyaWRnZS5tdXNldW0iLCJjYW4ubXVzZXVtIiwiY2Fu'@;
put 'YWRhLm11c2V1bSIsImNhcGVicmV0b24ubXVzZXVtIiwiY2Fycmllci5tdXNldW0iLCJjYXJ0b29uYXJ0Lm11c2V1bSIsImNhc2FkZWxhbW9uZWRhLm11c2V1bSIsImNhc3RsZS5tdXNldW0iLCJjYXN0cmVzLm11c2V1bSIsImNlbHRpYy5tdXNldW0iLCJjZW50ZXIubXVzZXVtIiwiY2hhdHRh'@;
put 'bm9vZ2EubXVzZXVtIiwiY2hlbHRlbmhhbS5tdXNldW0iLCJjaGVzYXBlYWtlYmF5Lm11c2V1bSIsImNoaWNhZ28ubXVzZXVtIiwiY2hpbGRyZW4ubXVzZXVtIiwiY2hpbGRyZW5zLm11c2V1bSIsImNoaWxkcmVuc2dhcmRlbi5tdXNldW0iLCJjaGlyb3ByYWN0aWMubXVzZXVtIiwiY2hvY29s'@;
put 'YXRlLm11c2V1bSIsImNocmlzdGlhbnNidXJnLm11c2V1bSIsImNpbmNpbm5hdGkubXVzZXVtIiwiY2luZW1hLm11c2V1bSIsImNpcmN1cy5tdXNldW0iLCJjaXZpbGlzYXRpb24ubXVzZXVtIiwiY2l2aWxpemF0aW9uLm11c2V1bSIsImNpdmlsd2FyLm11c2V1bSIsImNsaW50b24ubXVzZXVt'@;
put 'IiwiY2xvY2subXVzZXVtIiwiY29hbC5tdXNldW0iLCJjb2FzdGFsZGVmZW5jZS5tdXNldW0iLCJjb2R5Lm11c2V1bSIsImNvbGR3YXIubXVzZXVtIiwiY29sbGVjdGlvbi5tdXNldW0iLCJjb2xvbmlhbHdpbGxpYW1zYnVyZy5tdXNldW0iLCJjb2xvcmFkb3BsYXRlYXUubXVzZXVtIiwiY29s'@;
put 'dW1iaWEubXVzZXVtIiwiY29sdW1idXMubXVzZXVtIiwiY29tbXVuaWNhdGlvbi5tdXNldW0iLCJjb21tdW5pY2F0aW9ucy5tdXNldW0iLCJjb21tdW5pdHkubXVzZXVtIiwiY29tcHV0ZXIubXVzZXVtIiwiY29tcHV0ZXJoaXN0b3J5Lm11c2V1bSIsImNvbXVuaWNhXHhlN1x4ZjVlcy5tdXNl'@;
put 'dW0iLCJjb250ZW1wb3JhcnkubXVzZXVtIiwiY29udGVtcG9yYXJ5YXJ0Lm11c2V1bSIsImNvbnZlbnQubXVzZXVtIiwiY29wZW5oYWdlbi5tdXNldW0iLCJjb3Jwb3JhdGlvbi5tdXNldW0iLCJjb3JyZWlvcy1lLXRlbGVjb211bmljYVx4ZTdceGY1ZXMubXVzZXVtIiwiY29ydmV0dGUubXVz'@;
put 'ZXVtIiwiY29zdHVtZS5tdXNldW0iLCJjb3VudHJ5ZXN0YXRlLm11c2V1bSIsImNvdW50eS5tdXNldW0iLCJjcmFmdHMubXVzZXVtIiwiY3JhbmJyb29rLm11c2V1bSIsImNyZWF0aW9uLm11c2V1bSIsImN1bHR1cmFsLm11c2V1bSIsImN1bHR1cmFsY2VudGVyLm11c2V1bSIsImN1bHR1cmUu'@;
put 'bXVzZXVtIiwiY3liZXIubXVzZXVtIiwiY3ltcnUubXVzZXVtIiwiZGFsaS5tdXNldW0iLCJkYWxsYXMubXVzZXVtIiwiZGF0YWJhc2UubXVzZXVtIiwiZGRyLm11c2V1bSIsImRlY29yYXRpdmVhcnRzLm11c2V1bSIsImRlbGF3YXJlLm11c2V1bSIsImRlbG1lbmhvcnN0Lm11c2V1bSIsImRl'@;
put 'bm1hcmsubXVzZXVtIiwiZGVwb3QubXVzZXVtIiwiZGVzaWduLm11c2V1bSIsImRldHJvaXQubXVzZXVtIiwiZGlub3NhdXIubXVzZXVtIiwiZGlzY292ZXJ5Lm11c2V1bSIsImRvbGxzLm11c2V1bSIsImRvbm9zdGlhLm11c2V1bSIsImR1cmhhbS5tdXNldW0iLCJlYXN0YWZyaWNhLm11c2V1'@;
put 'bSIsImVhc3Rjb2FzdC5tdXNldW0iLCJlZHVjYXRpb24ubXVzZXVtIiwiZWR1Y2F0aW9uYWwubXVzZXVtIiwiZWd5cHRpYW4ubXVzZXVtIiwiZWlzZW5iYWhuLm11c2V1bSIsImVsYnVyZy5tdXNldW0iLCJlbHZlbmRyZWxsLm11c2V1bSIsImVtYnJvaWRlcnkubXVzZXVtIiwiZW5jeWNsb3Bl'@;
put 'ZGljLm11c2V1bSIsImVuZ2xhbmQubXVzZXVtIiwiZW50b21vbG9neS5tdXNldW0iLCJlbnZpcm9ubWVudC5tdXNldW0iLCJlbnZpcm9ubWVudGFsY29uc2VydmF0aW9uLm11c2V1bSIsImVwaWxlcHN5Lm11c2V1bSIsImVzc2V4Lm11c2V1bSIsImVzdGF0ZS5tdXNldW0iLCJldGhub2xvZ3ku'@;
put 'bXVzZXVtIiwiZXhldGVyLm11c2V1bSIsImV4aGliaXRpb24ubXVzZXVtIiwiZmFtaWx5Lm11c2V1bSIsImZhcm0ubXVzZXVtIiwiZmFybWVxdWlwbWVudC5tdXNldW0iLCJmYXJtZXJzLm11c2V1bSIsImZhcm1zdGVhZC5tdXNldW0iLCJmaWVsZC5tdXNldW0iLCJmaWd1ZXJlcy5tdXNldW0i'@;
put 'LCJmaWxhdGVsaWEubXVzZXVtIiwiZmlsbS5tdXNldW0iLCJmaW5lYXJ0Lm11c2V1bSIsImZpbmVhcnRzLm11c2V1bSIsImZpbmxhbmQubXVzZXVtIiwiZmxhbmRlcnMubXVzZXVtIiwiZmxvcmlkYS5tdXNldW0iLCJmb3JjZS5tdXNldW0iLCJmb3J0bWlzc291bGEubXVzZXVtIiwiZm9ydHdv'@;
put 'cnRoLm11c2V1bSIsImZvdW5kYXRpb24ubXVzZXVtIiwiZnJhbmNhaXNlLm11c2V1bSIsImZyYW5rZnVydC5tdXNldW0iLCJmcmFuemlza2FuZXIubXVzZXVtIiwiZnJlZW1hc29ucnkubXVzZXVtIiwiZnJlaWJ1cmcubXVzZXVtIiwiZnJpYm91cmcubXVzZXVtIiwiZnJvZy5tdXNldW0iLCJm'@;
put 'dW5kYWNpby5tdXNldW0iLCJmdXJuaXR1cmUubXVzZXVtIiwiZ2FsbGVyeS5tdXNldW0iLCJnYXJkZW4ubXVzZXVtIiwiZ2F0ZXdheS5tdXNldW0iLCJnZWVsdmluY2subXVzZXVtIiwiZ2Vtb2xvZ2ljYWwubXVzZXVtIiwiZ2VvbG9neS5tdXNldW0iLCJnZW9yZ2lhLm11c2V1bSIsImdpZXNz'@;
put 'ZW4ubXVzZXVtIiwiZ2xhcy5tdXNldW0iLCJnbGFzcy5tdXNldW0iLCJnb3JnZS5tdXNldW0iLCJncmFuZHJhcGlkcy5tdXNldW0iLCJncmF6Lm11c2V1bSIsImd1ZXJuc2V5Lm11c2V1bSIsImhhbGxvZmZhbWUubXVzZXVtIiwiaGFtYnVyZy5tdXNldW0iLCJoYW5kc29uLm11c2V1bSIsImhh'@;
put 'cnZlc3RjZWxlYnJhdGlvbi5tdXNldW0iLCJoYXdhaWkubXVzZXVtIiwiaGVhbHRoLm11c2V1bSIsImhlaW1hdHVuZHVocmVuLm11c2V1bSIsImhlbGxhcy5tdXNldW0iLCJoZWxzaW5raS5tdXNldW0iLCJoZW1ieWdkc2ZvcmJ1bmQubXVzZXVtIiwiaGVyaXRhZ2UubXVzZXVtIiwiaGlzdG9p'@;
put 'cmUubXVzZXVtIiwiaGlzdG9yaWNhbC5tdXNldW0iLCJoaXN0b3JpY2Fsc29jaWV0eS5tdXNldW0iLCJoaXN0b3JpY2hvdXNlcy5tdXNldW0iLCJoaXN0b3Jpc2NoLm11c2V1bSIsImhpc3RvcmlzY2hlcy5tdXNldW0iLCJoaXN0b3J5Lm11c2V1bSIsImhpc3RvcnlvZnNjaWVuY2UubXVzZXVt'@;
put 'IiwiaG9yb2xvZ3kubXVzZXVtIiwiaG91c2UubXVzZXVtIiwiaHVtYW5pdGllcy5tdXNldW0iLCJpbGx1c3RyYXRpb24ubXVzZXVtIiwiaW1hZ2VhbmRzb3VuZC5tdXNldW0iLCJpbmRpYW4ubXVzZXVtIiwiaW5kaWFuYS5tdXNldW0iLCJpbmRpYW5hcG9saXMubXVzZXVtIiwiaW5kaWFubWFy'@;
put 'a2V0Lm11c2V1bSIsImludGVsbGlnZW5jZS5tdXNldW0iLCJpbnRlcmFjdGl2ZS5tdXNldW0iLCJpcmFxLm11c2V1bSIsImlyb24ubXVzZXVtIiwiaXNsZW9mbWFuLm11c2V1bSIsImphbWlzb24ubXVzZXVtIiwiamVmZmVyc29uLm11c2V1bSIsImplcnVzYWxlbS5tdXNldW0iLCJqZXdlbHJ5'@;
put 'Lm11c2V1bSIsImpld2lzaC5tdXNldW0iLCJqZXdpc2hhcnQubXVzZXVtIiwiamZrLm11c2V1bSIsImpvdXJuYWxpc20ubXVzZXVtIiwianVkYWljYS5tdXNldW0iLCJqdWR5Z2FybGFuZC5tdXNldW0iLCJqdWVkaXNjaGVzLm11c2V1bSIsImp1aWYubXVzZXVtIiwia2FyYXRlLm11c2V1bSIs'@;
put 'ImthcmlrYXR1ci5tdXNldW0iLCJraWRzLm11c2V1bSIsImtvZWJlbmhhdm4ubXVzZXVtIiwia29lbG4ubXVzZXVtIiwia3Vuc3QubXVzZXVtIiwia3Vuc3RzYW1tbHVuZy5tdXNldW0iLCJrdW5zdHVuZGRlc2lnbi5tdXNldW0iLCJsYWJvci5tdXNldW0iLCJsYWJvdXIubXVzZXVtIiwibGFq'@;
put 'b2xsYS5tdXNldW0iLCJsYW5jYXNoaXJlLm11c2V1bSIsImxhbmRlcy5tdXNldW0iLCJsYW5zLm11c2V1bSIsImxceGU0bnMubXVzZXVtIiwibGFyc3Nvbi5tdXNldW0iLCJsZXdpc21pbGxlci5tdXNldW0iLCJsaW5jb2xuLm11c2V1bSIsImxpbnoubXVzZXVtIiwibGl2aW5nLm11c2V1bSIs'@;
put 'ImxpdmluZ2hpc3RvcnkubXVzZXVtIiwibG9jYWxoaXN0b3J5Lm11c2V1bSIsImxvbmRvbi5tdXNldW0iLCJsb3NhbmdlbGVzLm11c2V1bSIsImxvdXZyZS5tdXNldW0iLCJsb3lhbGlzdC5tdXNldW0iLCJsdWNlcm5lLm11c2V1bSIsImx1eGVtYm91cmcubXVzZXVtIiwibHV6ZXJuLm11c2V1'@;
put 'bSIsIm1hZC5tdXNldW0iLCJtYWRyaWQubXVzZXVtIiwibWFsbG9yY2EubXVzZXVtIiwibWFuY2hlc3Rlci5tdXNldW0iLCJtYW5zaW9uLm11c2V1bSIsIm1hbnNpb25zLm11c2V1bSIsIm1hbngubXVzZXVtIiwibWFyYnVyZy5tdXNldW0iLCJtYXJpdGltZS5tdXNldW0iLCJtYXJpdGltby5t'@;
put 'dXNldW0iLCJtYXJ5bGFuZC5tdXNldW0iLCJtYXJ5bGh1cnN0Lm11c2V1bSIsIm1lZGlhLm11c2V1bSIsIm1lZGljYWwubXVzZXVtIiwibWVkaXppbmhpc3RvcmlzY2hlcy5tdXNldW0iLCJtZWVyZXMubXVzZXVtIiwibWVtb3JpYWwubXVzZXVtIiwibWVzYXZlcmRlLm11c2V1bSIsIm1pY2hp'@;
put 'Z2FuLm11c2V1bSIsIm1pZGF0bGFudGljLm11c2V1bSIsIm1pbGl0YXJ5Lm11c2V1bSIsIm1pbGwubXVzZXVtIiwibWluZXJzLm11c2V1bSIsIm1pbmluZy5tdXNldW0iLCJtaW5uZXNvdGEubXVzZXVtIiwibWlzc2lsZS5tdXNldW0iLCJtaXNzb3VsYS5tdXNldW0iLCJtb2Rlcm4ubXVzZXVt'@;
put 'IiwibW9tYS5tdXNldW0iLCJtb25leS5tdXNldW0iLCJtb25tb3V0aC5tdXNldW0iLCJtb250aWNlbGxvLm11c2V1bSIsIm1vbnRyZWFsLm11c2V1bSIsIm1vc2Nvdy5tdXNldW0iLCJtb3RvcmN5Y2xlLm11c2V1bSIsIm11ZW5jaGVuLm11c2V1bSIsIm11ZW5zdGVyLm11c2V1bSIsIm11bGhv'@;
put 'dXNlLm11c2V1bSIsIm11bmNpZS5tdXNldW0iLCJtdXNlZXQubXVzZXVtIiwibXVzZXVtY2VudGVyLm11c2V1bSIsIm11c2V1bXZlcmVuaWdpbmcubXVzZXVtIiwibXVzaWMubXVzZXVtIiwibmF0aW9uYWwubXVzZXVtIiwibmF0aW9uYWxmaXJlYXJtcy5tdXNldW0iLCJuYXRpb25hbGhlcml0'@;
put 'YWdlLm11c2V1bSIsIm5hdGl2ZWFtZXJpY2FuLm11c2V1bSIsIm5hdHVyYWxoaXN0b3J5Lm11c2V1bSIsIm5hdHVyYWxoaXN0b3J5bXVzZXVtLm11c2V1bSIsIm5hdHVyYWxzY2llbmNlcy5tdXNldW0iLCJuYXR1cmUubXVzZXVtIiwibmF0dXJoaXN0b3Jpc2NoZXMubXVzZXVtIiwibmF0dXVy'@;
put 'd2V0ZW5zY2hhcHBlbi5tdXNldW0iLCJuYXVtYnVyZy5tdXNldW0iLCJuYXZhbC5tdXNldW0iLCJuZWJyYXNrYS5tdXNldW0iLCJuZXVlcy5tdXNldW0iLCJuZXdoYW1wc2hpcmUubXVzZXVtIiwibmV3amVyc2V5Lm11c2V1bSIsIm5ld21leGljby5tdXNldW0iLCJuZXdwb3J0Lm11c2V1bSIs'@;
put 'Im5ld3NwYXBlci5tdXNldW0iLCJuZXd5b3JrLm11c2V1bSIsIm5pZXBjZS5tdXNldW0iLCJub3Jmb2xrLm11c2V1bSIsIm5vcnRoLm11c2V1bSIsIm5ydy5tdXNldW0iLCJueWMubXVzZXVtIiwibnlueS5tdXNldW0iLCJvY2Vhbm9ncmFwaGljLm11c2V1bSIsIm9jZWFub2dyYXBoaXF1ZS5t'@;
put 'dXNldW0iLCJvbWFoYS5tdXNldW0iLCJvbmxpbmUubXVzZXVtIiwib250YXJpby5tdXNldW0iLCJvcGVuYWlyLm11c2V1bSIsIm9yZWdvbi5tdXNldW0iLCJvcmVnb250cmFpbC5tdXNldW0iLCJvdGFnby5tdXNldW0iLCJveGZvcmQubXVzZXVtIiwicGFjaWZpYy5tdXNldW0iLCJwYWRlcmJv'@;
put 'cm4ubXVzZXVtIiwicGFsYWNlLm11c2V1bSIsInBhbGVvLm11c2V1bSIsInBhbG1zcHJpbmdzLm11c2V1bSIsInBhbmFtYS5tdXNldW0iLCJwYXJpcy5tdXNldW0iLCJwYXNhZGVuYS5tdXNldW0iLCJwaGFybWFjeS5tdXNldW0iLCJwaGlsYWRlbHBoaWEubXVzZXVtIiwicGhpbGFkZWxwaGlh'@;
put 'YXJlYS5tdXNldW0iLCJwaGlsYXRlbHkubXVzZXVtIiwicGhvZW5peC5tdXNldW0iLCJwaG90b2dyYXBoeS5tdXNldW0iLCJwaWxvdHMubXVzZXVtIiwicGl0dHNidXJnaC5tdXNldW0iLCJwbGFuZXRhcml1bS5tdXNldW0iLCJwbGFudGF0aW9uLm11c2V1bSIsInBsYW50cy5tdXNldW0iLCJw'@;
put 'bGF6YS5tdXNldW0iLCJwb3J0YWwubXVzZXVtIiwicG9ydGxhbmQubXVzZXVtIiwicG9ydGxsaWdhdC5tdXNldW0iLCJwb3N0cy1hbmQtdGVsZWNvbW11bmljYXRpb25zLm11c2V1bSIsInByZXNlcnZhdGlvbi5tdXNldW0iLCJwcmVzaWRpby5tdXNldW0iLCJwcmVzcy5tdXNldW0iLCJwcm9q'@;
put 'ZWN0Lm11c2V1bSIsInB1YmxpYy5tdXNldW0iLCJwdWJvbC5tdXNldW0iLCJxdWViZWMubXVzZXVtIiwicmFpbHJvYWQubXVzZXVtIiwicmFpbHdheS5tdXNldW0iLCJyZXNlYXJjaC5tdXNldW0iLCJyZXNpc3RhbmNlLm11c2V1bSIsInJpb2RlamFuZWlyby5tdXNldW0iLCJyb2NoZXN0ZXIu'@;
put 'bXVzZXVtIiwicm9ja2FydC5tdXNldW0iLCJyb21hLm11c2V1bSIsInJ1c3NpYS5tdXNldW0iLCJzYWludGxvdWlzLm11c2V1bSIsInNhbGVtLm11c2V1bSIsInNhbHZhZG9yZGFsaS5tdXNldW0iLCJzYWx6YnVyZy5tdXNldW0iLCJzYW5kaWVnby5tdXNldW0iLCJzYW5mcmFuY2lzY28ubXVz'@;
put 'ZXVtIiwic2FudGFiYXJiYXJhLm11c2V1bSIsInNhbnRhY3J1ei5tdXNldW0iLCJzYW50YWZlLm11c2V1bSIsInNhc2thdGNoZXdhbi5tdXNldW0iLCJzYXR4Lm11c2V1bSIsInNhdmFubmFoZ2EubXVzZXVtIiwic2NobGVzaXNjaGVzLm11c2V1bSIsInNjaG9lbmJydW5uLm11c2V1bSIsInNj'@;
put 'aG9rb2xhZGVuLm11c2V1bSIsInNjaG9vbC5tdXNldW0iLCJzY2h3ZWl6Lm11c2V1bSIsInNjaWVuY2UubXVzZXVtIiwic2NpZW5jZWFuZGhpc3RvcnkubXVzZXVtIiwic2NpZW5jZWFuZGluZHVzdHJ5Lm11c2V1bSIsInNjaWVuY2VjZW50ZXIubXVzZXVtIiwic2NpZW5jZWNlbnRlcnMubXVz'@;
put 'ZXVtIiwic2NpZW5jZS1maWN0aW9uLm11c2V1bSIsInNjaWVuY2VoaXN0b3J5Lm11c2V1bSIsInNjaWVuY2VzLm11c2V1bSIsInNjaWVuY2VzbmF0dXJlbGxlcy5tdXNldW0iLCJzY290bGFuZC5tdXNldW0iLCJzZWFwb3J0Lm11c2V1bSIsInNldHRsZW1lbnQubXVzZXVtIiwic2V0dGxlcnMu'@;
put 'bXVzZXVtIiwic2hlbGwubXVzZXVtIiwic2hlcmJyb29rZS5tdXNldW0iLCJzaWJlbmlrLm11c2V1bSIsInNpbGsubXVzZXVtIiwic2tpLm11c2V1bSIsInNrb2xlLm11c2V1bSIsInNvY2lldHkubXVzZXVtIiwic29sb2duZS5tdXNldW0iLCJzb3VuZGFuZHZpc2lvbi5tdXNldW0iLCJzb3V0'@;
put 'aGNhcm9saW5hLm11c2V1bSIsInNvdXRod2VzdC5tdXNldW0iLCJzcGFjZS5tdXNldW0iLCJzcHkubXVzZXVtIiwic3F1YXJlLm11c2V1bSIsInN0YWR0Lm11c2V1bSIsInN0YWxiYW5zLm11c2V1bSIsInN0YXJuYmVyZy5tdXNldW0iLCJzdGF0ZS5tdXNldW0iLCJzdGF0ZW9mZGVsYXdhcmUu'@;
put 'bXVzZXVtIiwic3RhdGlvbi5tdXNldW0iLCJzdGVhbS5tdXNldW0iLCJzdGVpZXJtYXJrLm11c2V1bSIsInN0am9obi5tdXNldW0iLCJzdG9ja2hvbG0ubXVzZXVtIiwic3RwZXRlcnNidXJnLm11c2V1bSIsInN0dXR0Z2FydC5tdXNldW0iLCJzdWlzc2UubXVzZXVtIiwic3VyZ2VvbnNoYWxs'@;
put 'Lm11c2V1bSIsInN1cnJleS5tdXNldW0iLCJzdml6emVyYS5tdXNldW0iLCJzd2VkZW4ubXVzZXVtIiwic3lkbmV5Lm11c2V1bSIsInRhbmsubXVzZXVtIiwidGNtLm11c2V1bSIsInRlY2hub2xvZ3kubXVzZXVtIiwidGVsZWtvbW11bmlrYXRpb24ubXVzZXVtIiwidGVsZXZpc2lvbi5tdXNl'@;
put 'dW0iLCJ0ZXhhcy5tdXNldW0iLCJ0ZXh0aWxlLm11c2V1bSIsInRoZWF0ZXIubXVzZXVtIiwidGltZS5tdXNldW0iLCJ0aW1la2VlcGluZy5tdXNldW0iLCJ0b3BvbG9neS5tdXNldW0iLCJ0b3Jpbm8ubXVzZXVtIiwidG91Y2gubXVzZXVtIiwidG93bi5tdXNldW0iLCJ0cmFuc3BvcnQubXVz'@;
put 'ZXVtIiwidHJlZS5tdXNldW0iLCJ0cm9sbGV5Lm11c2V1bSIsInRydXN0Lm11c2V1bSIsInRydXN0ZWUubXVzZXVtIiwidWhyZW4ubXVzZXVtIiwidWxtLm11c2V1bSIsInVuZGVyc2VhLm11c2V1bSIsInVuaXZlcnNpdHkubXVzZXVtIiwidXNhLm11c2V1bSIsInVzYW50aXF1ZXMubXVzZXVt'@;
put 'IiwidXNhcnRzLm11c2V1bSIsInVzY291bnRyeWVzdGF0ZS5tdXNldW0iLCJ1c2N1bHR1cmUubXVzZXVtIiwidXNkZWNvcmF0aXZlYXJ0cy5tdXNldW0iLCJ1c2dhcmRlbi5tdXNldW0iLCJ1c2hpc3RvcnkubXVzZXVtIiwidXNodWFpYS5tdXNldW0iLCJ1c2xpdmluZ2hpc3RvcnkubXVzZXVt'@;
put 'IiwidXRhaC5tdXNldW0iLCJ1dmljLm11c2V1bSIsInZhbGxleS5tdXNldW0iLCJ2YW50YWEubXVzZXVtIiwidmVyc2FpbGxlcy5tdXNldW0iLCJ2aWtpbmcubXVzZXVtIiwidmlsbGFnZS5tdXNldW0iLCJ2aXJnaW5pYS5tdXNldW0iLCJ2aXJ0dWFsLm11c2V1bSIsInZpcnR1ZWwubXVzZXVt'@;
put 'IiwidmxhYW5kZXJlbi5tdXNldW0iLCJ2b2xrZW5rdW5kZS5tdXNldW0iLCJ3YWxlcy5tdXNldW0iLCJ3YWxsb25pZS5tdXNldW0iLCJ3YXIubXVzZXVtIiwid2FzaGluZ3RvbmRjLm11c2V1bSIsIndhdGNoYW5kY2xvY2subXVzZXVtIiwid2F0Y2gtYW5kLWNsb2NrLm11c2V1bSIsIndlc3Rl'@;
put 'cm4ubXVzZXVtIiwid2VzdGZhbGVuLm11c2V1bSIsIndoYWxpbmcubXVzZXVtIiwid2lsZGxpZmUubXVzZXVtIiwid2lsbGlhbXNidXJnLm11c2V1bSIsIndpbmRtaWxsLm11c2V1bSIsIndvcmtzaG9wLm11c2V1bSIsInlvcmsubXVzZXVtIiwieW9ya3NoaXJlLm11c2V1bSIsInlvc2VtaXRl'@;
put 'Lm11c2V1bSIsInlvdXRoLm11c2V1bSIsInpvb2xvZ2ljYWwubXVzZXVtIiwiem9vbG9neS5tdXNldW0iLCJcdTA1ZDlcdTA1ZThcdTA1ZDVcdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZGQubXVzZXVtIiwiXHUwNDM4XHUwNDNhXHUwNDNlXHUwNDNjLm11c2V1bSIsIm12IiwiYWVyby5tdiIsImJp'@;
put 'ei5tdiIsImNvbS5tdiIsImNvb3AubXYiLCJlZHUubXYiLCJnb3YubXYiLCJpbmZvLm12IiwiaW50Lm12IiwibWlsLm12IiwibXVzZXVtLm12IiwibmFtZS5tdiIsIm5ldC5tdiIsIm9yZy5tdiIsInByby5tdiIsIm13IiwiYWMubXciLCJiaXoubXciLCJjby5tdyIsImNvbS5tdyIsImNvb3Au'@;
put 'bXciLCJlZHUubXciLCJnb3YubXciLCJpbnQubXciLCJtdXNldW0ubXciLCJuZXQubXciLCJvcmcubXciLCJteCIsImNvbS5teCIsIm9yZy5teCIsImdvYi5teCIsImVkdS5teCIsIm5ldC5teCIsIm15IiwiYml6Lm15IiwiY29tLm15IiwiZWR1Lm15IiwiZ292Lm15IiwibWlsLm15IiwibmFt'@;
put 'ZS5teSIsIm5ldC5teSIsIm9yZy5teSIsIm16IiwiYWMubXoiLCJhZHYubXoiLCJjby5teiIsImVkdS5teiIsImdvdi5teiIsIm1pbC5teiIsIm5ldC5teiIsIm9yZy5teiIsIm5hIiwiaW5mby5uYSIsInByby5uYSIsIm5hbWUubmEiLCJzY2hvb2wubmEiLCJvci5uYSIsImRyLm5hIiwidXMu'@;
put 'bmEiLCJteC5uYSIsImNhLm5hIiwiaW4ubmEiLCJjYy5uYSIsInR2Lm5hIiwid3MubmEiLCJtb2JpLm5hIiwiY28ubmEiLCJjb20ubmEiLCJvcmcubmEiLCJuYW1lIiwibmMiLCJhc3NvLm5jIiwibm9tLm5jIiwibmUiLCJuZXQiLCJuZiIsImNvbS5uZiIsIm5ldC5uZiIsInBlci5uZiIsInJl'@;
put 'Yy5uZiIsIndlYi5uZiIsImFydHMubmYiLCJmaXJtLm5mIiwiaW5mby5uZiIsIm90aGVyLm5mIiwic3RvcmUubmYiLCJuZyIsImNvbS5uZyIsImVkdS5uZyIsImdvdi5uZyIsImkubmciLCJtaWwubmciLCJtb2JpLm5nIiwibmFtZS5uZyIsIm5ldC5uZyIsIm9yZy5uZyIsInNjaC5uZyIsIm5p'@;
put 'IiwiYWMubmkiLCJiaXoubmkiLCJjby5uaSIsImNvbS5uaSIsImVkdS5uaSIsImdvYi5uaSIsImluLm5pIiwiaW5mby5uaSIsImludC5uaSIsIm1pbC5uaSIsIm5ldC5uaSIsIm5vbS5uaSIsIm9yZy5uaSIsIndlYi5uaSIsIm5sIiwibm8iLCJmaHMubm8iLCJ2Z3Mubm8iLCJmeWxrZXNiaWJs'@;
put 'Lm5vIiwiZm9sa2ViaWJsLm5vIiwibXVzZXVtLm5vIiwiaWRyZXR0Lm5vIiwicHJpdi5ubyIsIm1pbC5ubyIsInN0YXQubm8iLCJkZXAubm8iLCJrb21tdW5lLm5vIiwiaGVyYWQubm8iLCJhYS5ubyIsImFoLm5vIiwiYnUubm8iLCJmbS5ubyIsImhsLm5vIiwiaG0ubm8iLCJqYW4tbWF5ZW4u'@;
put 'bm8iLCJtci5ubyIsIm5sLm5vIiwibnQubm8iLCJvZi5ubyIsIm9sLm5vIiwib3Nsby5ubyIsInJsLm5vIiwic2Yubm8iLCJzdC5ubyIsInN2YWxiYXJkLm5vIiwidG0ubm8iLCJ0ci5ubyIsInZhLm5vIiwidmYubm8iLCJncy5hYS5ubyIsImdzLmFoLm5vIiwiZ3MuYnUubm8iLCJncy5mbS5u'@;
put 'byIsImdzLmhsLm5vIiwiZ3MuaG0ubm8iLCJncy5qYW4tbWF5ZW4ubm8iLCJncy5tci5ubyIsImdzLm5sLm5vIiwiZ3MubnQubm8iLCJncy5vZi5ubyIsImdzLm9sLm5vIiwiZ3Mub3Nsby5ubyIsImdzLnJsLm5vIiwiZ3Muc2Yubm8iLCJncy5zdC5ubyIsImdzLnN2YWxiYXJkLm5vIiwiZ3Mu'@;
put 'dG0ubm8iLCJncy50ci5ubyIsImdzLnZhLm5vIiwiZ3MudmYubm8iLCJha3JlaGFtbi5ubyIsIlx4ZTVrcmVoYW1uLm5vIiwiYWxnYXJkLm5vIiwiXHhlNWxnXHhlNXJkLm5vIiwiYXJuYS5ubyIsImJydW11bmRkYWwubm8iLCJicnluZS5ubyIsImJyb25ub3lzdW5kLm5vIiwiYnJceGY4bm5c'@;
put 'eGY4eXN1bmQubm8iLCJkcm9iYWsubm8iLCJkclx4ZjhiYWsubm8iLCJlZ2Vyc3VuZC5ubyIsImZldHN1bmQubm8iLCJmbG9yby5ubyIsImZsb3JceGY4Lm5vIiwiZnJlZHJpa3N0YWQubm8iLCJob2trc3VuZC5ubyIsImhvbmVmb3NzLm5vIiwiaFx4ZjhuZWZvc3Mubm8iLCJqZXNzaGVpbS5u'@;
put 'byIsImpvcnBlbGFuZC5ubyIsImpceGY4cnBlbGFuZC5ubyIsImtpcmtlbmVzLm5vIiwia29wZXJ2aWsubm8iLCJrcm9rc3RhZGVsdmEubm8iLCJsYW5nZXZhZy5ubyIsImxhbmdldlx4ZTVnLm5vIiwibGVpcnZpay5ubyIsIm1qb25kYWxlbi5ubyIsIm1qXHhmOG5kYWxlbi5ubyIsIm1vLWkt'@;
put 'cmFuYS5ubyIsIm1vc2pvZW4ubm8iLCJtb3NqXHhmOGVuLm5vIiwibmVzb2RkdGFuZ2VuLm5vIiwib3JrYW5nZXIubm8iLCJvc295cm8ubm8iLCJvc1x4Zjh5cm8ubm8iLCJyYWhvbHQubm8iLCJyXHhlNWhvbHQubm8iLCJzYW5kbmVzc2pvZW4ubm8iLCJzYW5kbmVzc2pceGY4ZW4ubm8iLCJz'@;
put 'a2Vkc21va29yc2V0Lm5vIiwic2xhdHR1bS5ubyIsInNwamVsa2F2aWsubm8iLCJzdGF0aGVsbGUubm8iLCJzdGF2ZXJuLm5vIiwic3Rqb3JkYWxzaGFsc2VuLm5vIiwic3RqXHhmOHJkYWxzaGFsc2VuLm5vIiwidGFuYW5nZXIubm8iLCJ0cmFuYnkubm8iLCJ2b3NzZXZhbmdlbi5ubyIsImFm'@;
put 'am9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJhbC5ubyIsIlx4ZTVsLm5vIiwiYWxlc3VuZC5ubyIsIlx4ZTVsZXN1bmQubm8iLCJhbHN0YWhhdWcubm8iLCJhbHRhLm5vIiwiXHhlMWx0XHhlMS5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsdmRh'@;
put 'bC5ubyIsImFtbGkubm8iLCJceGU1bWxpLm5vIiwiYW1vdC5ubyIsIlx4ZTVtb3Qubm8iLCJhbmRlYnUubm8iLCJhbmRveS5ubyIsImFuZFx4Zjh5Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYXJkYWwubm8iLCJceGU1cmRhbC5ubyIsImFyZW1hcmsubm8iLCJhcmVuZGFsLm5vIiwiXHhlNXMubm8i'@;
put 'LCJhc2VyYWwubm8iLCJceGU1c2VyYWwubm8iLCJhc2tlci5ubyIsImFza2ltLm5vIiwiYXNrdm9sbC5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc25lcy5ubyIsIlx4ZTVzbmVzLm5vIiwiYXVkbmVkYWxuLm5vIiwiYXVrcmEubm8iLCJhdXJlLm5vIiwiYXVybGFuZC5ubyIsImF1'@;
put 'cnNrb2ctaG9sYW5kLm5vIiwiYXVyc2tvZy1oXHhmOGxhbmQubm8iLCJhdXN0ZXZvbGwubm8iLCJhdXN0cmhlaW0ubm8iLCJhdmVyb3kubm8iLCJhdmVyXHhmOHkubm8iLCJiYWxlc3RyYW5kLm5vIiwiYmFsbGFuZ2VuLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbHNmam9y'@;
put 'ZC5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhbWJsZS5ubyIsImJhcmR1Lm5vIiwiYmVhcmR1Lm5vIiwiYmVpYXJuLm5vIiwiYmFqZGRhci5ubyIsImJceGUxamRkYXIubm8iLCJiYWlkYXIubm8iLCJiXHhlMWlkXHhlMXIubm8iLCJiZXJnLm5vIiwiYmVy'@;
put 'Z2VuLm5vIiwiYmVybGV2YWcubm8iLCJiZXJsZXZceGU1Zy5ubyIsImJlYXJhbHZhaGtpLm5vIiwiYmVhcmFsdlx4ZTFoa2kubm8iLCJiaW5kYWwubm8iLCJiaXJrZW5lcy5ubyIsImJqYXJrb3kubm8iLCJiamFya1x4Zjh5Lm5vIiwiYmplcmtyZWltLm5vIiwiYmp1Z24ubm8iLCJib2RvLm5v'@;
put 'IiwiYm9kXHhmOC5ubyIsImJhZGFkZGphLm5vIiwiYlx4ZTVkXHhlNWRkalx4ZTUubm8iLCJidWRlamp1Lm5vIiwiYm9rbi5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnlnbGFuZC5ubyIsImJ5a2xlLm5vIiwiYmFydW0ubm8iLCJiXHhlNnJ1'@;
put 'bS5ubyIsImJvLnRlbGVtYXJrLm5vIiwiYlx4ZjgudGVsZW1hcmsubm8iLCJiby5ub3JkbGFuZC5ubyIsImJceGY4Lm5vcmRsYW5kLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJhdHNmam9yZC5ubyIsImJceGU1dHNmam9yZC5ubyIs'@;
put 'ImJhaGNhdnVvdG5hLm5vIiwiYlx4ZTFoY2F2dW90bmEubm8iLCJkb3ZyZS5ubyIsImRyYW1tZW4ubm8iLCJkcmFuZ2VkYWwubm8iLCJkeXJveS5ubyIsImR5clx4Zjh5Lm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImVpZC5ubyIsImVpZGZqb3JkLm5vIiwiZWlkc2Jlcmcubm8iLCJl'@;
put 'aWRza29nLm5vIiwiZWlkc3ZvbGwubm8iLCJlaWdlcnN1bmQubm8iLCJlbHZlcnVtLm5vIiwiZW5lYmFray5ubyIsImVuZ2VyZGFsLm5vIiwiZXRuZS5ubyIsImV0bmVkYWwubm8iLCJldmVuZXMubm8iLCJldmVuYXNzaS5ubyIsImV2ZW5ceGUxXHUwMTYxXHUwMTYxaS5ubyIsImV2amUtb2ct'@;
put 'aG9ybm5lcy5ubyIsImZhcnN1bmQubm8iLCJmYXVza2Uubm8iLCJmdW9zc2tvLm5vIiwiZnVvaXNrdS5ubyIsImZlZGplLm5vIiwiZmV0Lm5vIiwiZmlubm95Lm5vIiwiZmlublx4Zjh5Lm5vIiwiZml0amFyLm5vIiwiZmphbGVyLm5vIiwiZmplbGwubm8iLCJmbGFrc3RhZC5ubyIsImZsYXRh'@;
put 'bmdlci5ubyIsImZsZWtrZWZqb3JkLm5vIiwiZmxlc2Jlcmcubm8iLCJmbG9yYS5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZvbGxkYWwubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJlaS5ubyIsImZyb2duLm5vIiwiZnJvbGFuZC5ubyIsImZyb3N0YS5ubyIsImZyYW5hLm5v'@;
put 'IiwiZnJceGU2bmEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVzYS5ubyIsImZ5cmVzZGFsLm5vIiwiZm9yZGUubm8iLCJmXHhmOHJkZS5ubyIsImdhbXZpay5ubyIsImdhbmdhdmlpa2Eubm8iLCJnXHhlMVx1MDE0Ymdhdmlpa2Eubm8iLCJnYXVsYXIubm8iLCJnYXVzZGFsLm5v'@;
put 'IiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdqZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5l'@;
put 'Lm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJoYWRzZWwubm8iLCJoYWxkZW4ubm8iLCJoYWxzYS5ubyIsImhhbWFyLm5vIiwiaGFtYXJv'@;
put 'eS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhcG1pci5ubyIsImhceGUxcG1pci5ubyIsImhhbW1lcmZlc3Qubm8iLCJoYW1tYXJmZWFzdGEubm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYXJhbS5ubyIsImhhcmVpZC5ubyIsImhhcnN0YWQubm8iLCJoYXN2aWsubm8i'@;
put 'LCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiYWFyYm9ydGUubm8iLCJoYXVnZXN1bmQubm8iLCJoZW1uZS5ubyIsImhlbW5lcy5ubyIsImhlbXNlZGFsLm5vIiwiaGVyb3kubW9yZS1vZy1yb21zZGFsLm5vIiwiaGVyXHhmOHkubVx4'@;
put 'ZjhyZS1vZy1yb21zZGFsLm5vIiwiaGVyb3kubm9yZGxhbmQubm8iLCJoZXJceGY4eS5ub3JkbGFuZC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0'@;
put 'cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJodXJkYWwubm8iLCJodXJ1bS5ubyIsImh2YWxlci5ubyIsImh5bGxlc3RhZC5ubyIsImhhZ2Vib3N0YWQubm8iLCJoXHhlNmdlYm9zdGFkLm5vIiwiaG95YW5nZXIubm8i'@;
put 'LCJoXHhmOHlhbmdlci5ubyIsImhveWxhbmRldC5ubyIsImhceGY4eWxhbmRldC5ubyIsImhhLm5vIiwiaFx4ZTUubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiamV2bmFrZXIubm8iLCJqb25kYWwubm8iLCJqb2xzdGVyLm5vIiwi'@;
put 'alx4Zjhsc3Rlci5ubyIsImthcmFzam9rLm5vIiwia2FyYXNqb2hrYS5ubyIsImtceGUxclx4ZTFcdTAxNjFqb2hrYS5ubyIsImthcmxzb3kubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwia2FybW95Lm5vIiwia2FybVx4Zjh5Lm5vIiwia2F1dG9rZWluby5ubyIsImd1b3ZkYWdl'@;
put 'YWlkbnUubm8iLCJrbGVwcC5ubyIsImtsYWJ1Lm5vIiwia2xceGU2YnUubm8iLCJrb25nc2Jlcmcubm8iLCJrb25nc3Zpbmdlci5ubyIsImtyYWdlcm8ubm8iLCJrcmFnZXJceGY4Lm5vIiwia3Jpc3RpYW5zYW5kLm5vIiwia3Jpc3RpYW5zdW5kLm5vIiwia3JvZHNoZXJhZC5ubyIsImtyXHhm'@;
put 'OGRzaGVyYWQubm8iLCJrdmFsc3VuZC5ubyIsInJhaGtrZXJhdmp1Lm5vIiwiclx4ZTFoa2tlclx4ZTF2anUubm8iLCJrdmFtLm5vIiwia3ZpbmVzZGFsLm5vIiwia3Zpbm5oZXJhZC5ubyIsImt2aXRlc2VpZC5ubyIsImt2aXRzb3kubm8iLCJrdml0c1x4Zjh5Lm5vIiwia3ZhZmpvcmQubm8i'@;
put 'LCJrdlx4ZTZmam9yZC5ubyIsImdpZWh0YXZ1b2F0bmEubm8iLCJrdmFuYW5nZW4ubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJuYXZ1b3RuYS5ubyIsIm5ceGUxdnVvdG5hLm5vIiwia2Fmam9yZC5ubyIsImtceGU1ZmpvcmQubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJs'@;
put 'YXJ2aWsubm8iLCJsYXZhbmdlbi5ubyIsImxhdmFnaXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsZWJlc2J5Lm5vIiwiZGF2dmVzaWlkYS5ubyIsImxlaWthbmdlci5ubyIsImxlaXJmam9yZC5ubyIsImxla2Eubm8iLCJsZWtzdmlrLm5vIiwibGVudmlrLm5vIiwibGVhbmdh'@;
put 'dmlpa2Eubm8iLCJsZWFcdTAxNGJnYXZpaWthLm5vIiwibGVzamEubm8iLCJsZXZhbmdlci5ubyIsImxpZXIubm8iLCJsaWVybmUubm8iLCJsaWxsZWhhbW1lci5ubyIsImxpbGxlc2FuZC5ubyIsImxpbmRlc25lcy5ubyIsImxpbmRhcy5ubyIsImxpbmRceGU1cy5ubyIsImxvbS5ubyIsImxv'@;
put 'cHBhLm5vIiwibGFocHBpLm5vIiwibFx4ZTFocHBpLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwiaXZndS5ubyIsImxhcmRhbC5ubyIsImxlcmRhbC5ubyIsImxceGU2cmRhbC5u'@;
put 'byIsImxvZGluZ2VuLm5vIiwibFx4ZjhkaW5nZW4ubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5vIiwibWFsdmlrLm5vIiwibWFzb3kubm8iLCJtXHhlNXNceGY4eS5ubyIsIm11b3NhdC5ubyIsIm11b3NceGUxdC5ubyIsIm1hbmRh'@;
put 'bC5ubyIsIm1hcmtlci5ubyIsIm1hcm5hcmRhbC5ubyIsIm1hc2Zqb3JkZW4ubm8iLCJtZWxhbmQubm8iLCJtZWxkYWwubm8iLCJtZWxodXMubm8iLCJtZWxveS5ubyIsIm1lbFx4Zjh5Lm5vIiwibWVyYWtlci5ubyIsIm1lclx4ZTVrZXIubm8iLCJtb2FyZWtlLm5vIiwibW9ceGU1cmVrZS5u'@;
put 'byIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vZGFsZW4ubm8iLCJtb2R1bS5ubyIsIm1vbGRlLm5vIiwibW9za2VuZXMubm8iLCJtb3NzLm5vIiwibW9zdmlrLm5vIiwibWFsc2Vsdi5ubyIsIm1ceGU1bHNlbHYubm8iLCJtYWxhdHZ1b3BtaS5ubyIsIm1ceGUxbGF0dnVv'@;
put 'cG1pLm5vIiwibmFtZGFsc2VpZC5ubyIsImFlanJpZS5ubyIsIm5hbXNvcy5ubyIsIm5hbXNza29nYW4ubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVlbWllLm5vIiwibGFha2VzdnVlbWllLm5vIiwibmFubmVzdGFkLm5vIiwibmFydmlrLm5vIiwibmFydmlpa2Eu'@;
put 'bm8iLCJuYXVzdGRhbC5ubyIsIm5lZHJlLWVpa2VyLm5vIiwibmVzLmFrZXJzaHVzLm5vIiwibmVzLmJ1c2tlcnVkLm5vIiwibmVzbmEubm8iLCJuZXNvZGRlbi5ubyIsIm5lc3NlYnkubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsIm5lc3NldC5ubyIsIm5pc3NlZGFsLm5vIiwi'@;
put 'bml0dGVkYWwubm8iLCJub3JkLWF1cmRhbC5ubyIsIm5vcmQtZnJvbi5ubyIsIm5vcmQtb2RhbC5ubyIsIm5vcmRkYWwubm8iLCJub3Jka2FwcC5ubyIsImRhdnZlbmphcmdhLm5vIiwiZGF2dmVualx4ZTFyZ2Eubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIsInJhaXNhLm5v'@;
put 'Iiwiclx4ZTFpc2Eubm8iLCJub3JlLW9nLXV2ZGFsLm5vIiwibm90b2RkZW4ubm8iLCJuYXJveS5ubyIsIm5ceGU2clx4Zjh5Lm5vIiwibm90dGVyb3kubm8iLCJuXHhmOHR0ZXJceGY4eS5ubyIsIm9kZGEubm8iLCJva3NuZXMubm8iLCJceGY4a3NuZXMubm8iLCJvcHBkYWwubm8iLCJvcHBl'@;
put 'Z2FyZC5ubyIsIm9wcGVnXHhlNXJkLm5vIiwib3JrZGFsLm5vIiwib3JsYW5kLm5vIiwiXHhmOHJsYW5kLm5vIiwib3Jza29nLm5vIiwiXHhmOHJza29nLm5vIiwib3JzdGEubm8iLCJceGY4cnN0YS5ubyIsIm9zLmhlZG1hcmsubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJvc2VuLm5vIiwib3N0'@;
put 'ZXJveS5ubyIsIm9zdGVyXHhmOHkubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8i'@;
put 'LCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZG95Lm5vIiwicmFkXHhmOHkubm8iLCJyYWtrZXN0YWQubm8iLCJyYW5hLm5vIiwicnVvdmF0'@;
put 'Lm5vIiwicmFuZGFiZXJnLm5vIiwicmF1bWEubm8iLCJyZW5kYWxlbi5ubyIsInJlbm5lYnUubm8iLCJyZW5uZXNveS5ubyIsInJlbm5lc1x4Zjh5Lm5vIiwicmluZGFsLm5vIiwicmluZ2VidS5ubyIsInJpbmdlcmlrZS5ubyIsInJpbmdzYWtlci5ubyIsInJpc3NhLm5vIiwicmlzb3Iubm8i'@;
put 'LCJyaXNceGY4ci5ubyIsInJvYW4ubm8iLCJyb2xsYWcubm8iLCJyeWdnZS5ubyIsInJhbGluZ2VuLm5vIiwiclx4ZTZsaW5nZW4ubm8iLCJyb2RveS5ubyIsInJceGY4ZFx4Zjh5Lm5vIiwicm9tc2tvZy5ubyIsInJceGY4bXNrb2cubm8iLCJyb3Jvcy5ubyIsInJceGY4cm9zLm5vIiwicm9z'@;
put 'dC5ubyIsInJceGY4c3Qubm8iLCJyb3lrZW4ubm8iLCJyXHhmOHlrZW4ubm8iLCJyb3lydmlrLm5vIiwiclx4Zjh5cnZpay5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwic2FsYW5nZW4ubm8iLCJzaWVsbGFrLm5vIiwic2FsdGRhbC5ubyIsInNhbGF0Lm5vIiwic1x4ZTFsXHhlMXQubm8i'@;
put 'LCJzXHhlMWxhdC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLnZlc3Rmb2xkLm5vIiwic2FuZGVmam9yZC5ubyIsInNhbmRuZXMubm8iLCJzYW5kb3kubm8iLCJzYW5kXHhmOHkubm8iLCJz'@;
put 'YXJwc2Jvcmcubm8iLCJzYXVkYS5ubyIsInNhdWhlcmFkLm5vIiwic2VsLm5vIiwic2VsYnUubm8iLCJzZWxqZS5ubyIsInNlbGpvcmQubm8iLCJzaWdkYWwubm8iLCJzaWxqYW4ubm8iLCJzaXJkYWwubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNr'@;
put 'aXB0dmV0Lm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tqYWsubm8iLCJza2pceGU1ay5ubyIsInNrb2RqZS5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2FuaXQubm8iLCJza1x4ZTFuaXQubm8i'@;
put 'LCJzbW9sYS5ubyIsInNtXHhmOGxhLm5vIiwic25pbGxmam9yZC5ubyIsInNuYXNhLm5vIiwic25ceGU1c2Eubm8iLCJzbm9hc2Eubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzb2duZGFsLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb25nZGFsZW4u'@;
put 'bm8iLCJzb3J0bGFuZC5ubyIsInNweWRlYmVyZy5ubyIsInN0YW5nZS5ubyIsInN0YXZhbmdlci5ubyIsInN0ZWlnZW4ubm8iLCJzdGVpbmtqZXIubm8iLCJzdGpvcmRhbC5ubyIsInN0alx4ZjhyZGFsLm5vIiwic3Rva2tlLm5vIiwic3Rvci1lbHZkYWwubm8iLCJzdG9yZC5ubyIsInN0b3Jk'@;
put 'YWwubm8iLCJzdG9yZmpvcmQubm8iLCJvbWFzdnVvdG5hLm5vIiwic3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2'@;
put 'ZW4ubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29tbmEubm8iLCJzXHhmOG1uYS5ubyIsInNvbmRyZS1sYW5kLm5vIiwic1x4ZjhuZHJlLWxhbmQubm8iLCJzb3ItYXVyZGFsLm5vIiwic1x4ZjhyLWF1cmRhbC5ubyIsInNvci1mcm9uLm5vIiwic1x4ZjhyLWZyb24ubm8iLCJzb3It'@;
put 'b2RhbC5ubyIsInNceGY4ci1vZGFsLm5vIiwic29yLXZhcmFuZ2VyLm5vIiwic1x4ZjhyLXZhcmFuZ2VyLm5vIiwibWF0dGEtdmFyamphdC5ubyIsIm1ceGUxdHRhLXZceGUxcmpqYXQubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eu'@;
put 'bm8iLCJzb3J1bS5ubyIsInNceGY4cnVtLm5vIiwidGFuYS5ubyIsImRlYXRudS5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJkaWVsZGRhbnVvcnJpLm5vIiwidGpvbWUubm8iLCJ0alx4ZjhtZS5ubyIsInRva2tlLm5vIiwidG9sZ2Eubm8i'@;
put 'LCJ0b3Jza2VuLm5vIiwidHJhbm95Lm5vIiwidHJhblx4Zjh5Lm5vIiwidHJvbXNvLm5vIiwidHJvbXNceGY4Lm5vIiwidHJvbXNhLm5vIiwicm9tc2Eubm8iLCJ0cm9uZGhlaW0ubm8iLCJ0cm9hbmRpbi5ubyIsInRyeXNpbC5ubyIsInRyYW5hLm5vIiwidHJceGU2bmEubm8iLCJ0cm9nc3Rh'@;
put 'ZC5ubyIsInRyXHhmOGdzdGFkLm5vIiwidHZlZGVzdHJhbmQubm8iLCJ0eWRhbC5ubyIsInR5bnNldC5ubyIsInR5c2Zqb3JkLm5vIiwiZGl2dGFzdnVvZG5hLm5vIiwiZGl2dHRhc3Z1b3RuYS5ubyIsInR5c25lcy5ubyIsInR5c3Zhci5ubyIsInR5c3ZceGU2ci5ubyIsInRvbnNiZXJnLm5v'@;
put 'IiwidFx4Zjhuc2Jlcmcubm8iLCJ1bGxlbnNha2VyLm5vIiwidWxsZW5zdmFuZy5ubyIsInVsdmlrLm5vIiwidXRzaXJhLm5vIiwidmFkc28ubm8iLCJ2YWRzXHhmOC5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2'@;
put 'YW5nLm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2ZWZzbi5ubyIsInZhYXBzdGUubm8iLCJ2ZWdhLm5vIiwidmVnYXJzaGVpLm5vIiwidmVnXHhlNXJzaGVpLm5vIiwidmVubmVzbGEubm8iLCJ2ZXJk'@;
put 'YWwubm8iLCJ2ZXJyYW4ubm8iLCJ2ZXN0Ynkubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5u'@;
put 'byIsInZvbGRhLm5vIiwidm9zcy5ubyIsInZhcm95Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhbi5ubyIsInZceGU1Z2FuLm5vIiwidm9hZ2F0Lm5vIiwidmFnc295Lm5vIiwidlx4ZTVnc1x4Zjh5Lm5vIiwidmFnYS5ubyIsInZceGU1Z1x4ZTUubm8iLCJ2YWxlci5vc3Rmb2xkLm5vIiwi'@;
put 'dlx4ZTVsZXIuXHhmOHN0Zm9sZC5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiKi5ucCIsIm5yIiwiYml6Lm5yIiwiaW5mby5uciIsImdvdi5uciIsImVkdS5uciIsIm9yZy5uciIsIm5ldC5uciIsImNvbS5uciIsIm51IiwibnoiLCJhYy5ueiIsImNvLm56'@;
put 'IiwiY3JpLm56IiwiZ2Vlay5ueiIsImdlbi5ueiIsImdvdnQubnoiLCJoZWFsdGgubnoiLCJpd2kubnoiLCJraXdpLm56IiwibWFvcmkubnoiLCJtaWwubnoiLCJtXHUwMTAxb3JpLm56IiwibmV0Lm56Iiwib3JnLm56IiwicGFybGlhbWVudC5ueiIsInNjaG9vbC5ueiIsIm9tIiwiY28ub20i'@;
put 'LCJjb20ub20iLCJlZHUub20iLCJnb3Yub20iLCJtZWQub20iLCJtdXNldW0ub20iLCJuZXQub20iLCJvcmcub20iLCJwcm8ub20iLCJvbmlvbiIsIm9yZyIsInBhIiwiYWMucGEiLCJnb2IucGEiLCJjb20ucGEiLCJvcmcucGEiLCJzbGQucGEiLCJlZHUucGEiLCJuZXQucGEiLCJpbmcucGEi'@;
put 'LCJhYm8ucGEiLCJtZWQucGEiLCJub20ucGEiLCJwZSIsImVkdS5wZSIsImdvYi5wZSIsIm5vbS5wZSIsIm1pbC5wZSIsIm9yZy5wZSIsImNvbS5wZSIsIm5ldC5wZSIsInBmIiwiY29tLnBmIiwib3JnLnBmIiwiZWR1LnBmIiwiKi5wZyIsInBoIiwiY29tLnBoIiwibmV0LnBoIiwib3JnLnBo'@;
put 'IiwiZ292LnBoIiwiZWR1LnBoIiwibmdvLnBoIiwibWlsLnBoIiwiaS5waCIsInBrIiwiY29tLnBrIiwibmV0LnBrIiwiZWR1LnBrIiwib3JnLnBrIiwiZmFtLnBrIiwiYml6LnBrIiwid2ViLnBrIiwiZ292LnBrIiwiZ29iLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBr'@;
put 'IiwiaW5mby5wayIsInBsIiwiY29tLnBsIiwibmV0LnBsIiwib3JnLnBsIiwiYWlkLnBsIiwiYWdyby5wbCIsImF0bS5wbCIsImF1dG8ucGwiLCJiaXoucGwiLCJlZHUucGwiLCJnbWluYS5wbCIsImdzbS5wbCIsImluZm8ucGwiLCJtYWlsLnBsIiwibWlhc3RhLnBsIiwibWVkaWEucGwiLCJt'@;
put 'aWwucGwiLCJuaWVydWNob21vc2NpLnBsIiwibm9tLnBsIiwicGMucGwiLCJwb3dpYXQucGwiLCJwcml2LnBsIiwicmVhbGVzdGF0ZS5wbCIsInJlbC5wbCIsInNleC5wbCIsInNob3AucGwiLCJza2xlcC5wbCIsInNvcy5wbCIsInN6a29sYS5wbCIsInRhcmdpLnBsIiwidG0ucGwiLCJ0b3Vy'@;
put 'aXNtLnBsIiwidHJhdmVsLnBsIiwidHVyeXN0eWthLnBsIiwiZ292LnBsIiwiYXAuZ292LnBsIiwiaWMuZ292LnBsIiwiaXMuZ292LnBsIiwidXMuZ292LnBsIiwia21wc3AuZ292LnBsIiwia3Bwc3AuZ292LnBsIiwia3dwc3AuZ292LnBsIiwicHNwLmdvdi5wbCIsIndza3IuZ292LnBsIiwi'@;
put 'a3dwLmdvdi5wbCIsIm13Lmdvdi5wbCIsInVnLmdvdi5wbCIsInVtLmdvdi5wbCIsInVtaWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1cG93Lmdvdi5wbCIsInV3Lmdvdi5wbCIsInN0YXJvc3R3by5nb3YucGwiLCJwYS5nb3YucGwiLCJwby5nb3YucGwiLCJwc3NlLmdvdi5wbCIsInB1cC5n'@;
put 'b3YucGwiLCJyemd3Lmdvdi5wbCIsInNhLmdvdi5wbCIsInNvLmdvdi5wbCIsInNyLmdvdi5wbCIsIndzYS5nb3YucGwiLCJza28uZ292LnBsIiwidXpzLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJwaW5iLmdvdi5wbCIsIndpb3MuZ292LnBsIiwid2l0ZC5nb3YucGwi'@;
put 'LCJ3em1pdXcuZ292LnBsIiwicGl3Lmdvdi5wbCIsIndpdy5nb3YucGwiLCJncml3Lmdvdi5wbCIsIndpZi5nb3YucGwiLCJvdW0uZ292LnBsIiwic2RuLmdvdi5wbCIsInpwLmdvdi5wbCIsInVwcG8uZ292LnBsIiwibXVwLmdvdi5wbCIsInd1b3ouZ292LnBsIiwia29uc3VsYXQuZ292LnBs'@;
put 'Iiwib2lybS5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJi'@;
put 'eXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5p'@;
put 'YS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXppbWllcnotZG9sbnkucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1YnkucGwiLCJrYXRvd2ljZS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29s'@;
put 'b2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsu'@;
put 'cGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwi'@;
put 'LCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3J6ZS5wbCIsInBvbW9y'@;
put 'c2tpZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNsYXNrLnBsIiwic2x1cHNrLnBsIiwic29z'@;
put 'bm93aWVjLnBsIiwic3RhbG93YS13b2xhLnBsIiwic2tvY3pvdy5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRh'@;
put 'cm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNs'@;
put 'YXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJnb3YucG4iLCJjby5wbiIsIm9yZy5wbiIsImVkdS5wbiIsIm5ldC5wbiIsInBvc3QiLCJwciIsImNv'@;
put 'bS5wciIsIm5ldC5wciIsIm9yZy5wciIsImdvdi5wciIsImVkdS5wciIsImlzbGEucHIiLCJwcm8ucHIiLCJiaXoucHIiLCJpbmZvLnByIiwibmFtZS5wciIsImVzdC5wciIsInByb2YucHIiLCJhYy5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJv'@;
put 'IiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJlZHUucHMiLCJnb3YucHMiLCJzZWMucHMiLCJwbG8ucHMiLCJjb20ucHMiLCJvcmcucHMiLCJuZXQucHMiLCJwdCIsIm5ldC5wdCIsImdvdi5wdCIs'@;
put 'Im9yZy5wdCIsImVkdS5wdCIsImludC5wdCIsInB1YmwucHQiLCJjb20ucHQiLCJub21lLnB0IiwicHciLCJjby5wdyIsIm5lLnB3Iiwib3IucHciLCJlZC5wdyIsImdvLnB3IiwiYmVsYXUucHciLCJweSIsImNvbS5weSIsImNvb3AucHkiLCJlZHUucHkiLCJnb3YucHkiLCJtaWwucHkiLCJu'@;
put 'ZXQucHkiLCJvcmcucHkiLCJxYSIsImNvbS5xYSIsImVkdS5xYSIsImdvdi5xYSIsIm1pbC5xYSIsIm5hbWUucWEiLCJuZXQucWEiLCJvcmcucWEiLCJzY2gucWEiLCJyZSIsImFzc28ucmUiLCJjb20ucmUiLCJub20ucmUiLCJybyIsImFydHMucm8iLCJjb20ucm8iLCJmaXJtLnJvIiwiaW5m'@;
put 'by5ybyIsIm5vbS5ybyIsIm50LnJvIiwib3JnLnJvIiwicmVjLnJvIiwic3RvcmUucm8iLCJ0bS5ybyIsInd3dy5ybyIsInJzIiwiYWMucnMiLCJjby5ycyIsImVkdS5ycyIsImdvdi5ycyIsImluLnJzIiwib3JnLnJzIiwicnUiLCJydyIsImFjLnJ3IiwiY28ucnciLCJjb29wLnJ3IiwiZ292'@;
put 'LnJ3IiwibWlsLnJ3IiwibmV0LnJ3Iiwib3JnLnJ3Iiwic2EiLCJjb20uc2EiLCJuZXQuc2EiLCJvcmcuc2EiLCJnb3Yuc2EiLCJtZWQuc2EiLCJwdWIuc2EiLCJlZHUuc2EiLCJzY2guc2EiLCJzYiIsImNvbS5zYiIsImVkdS5zYiIsImdvdi5zYiIsIm5ldC5zYiIsIm9yZy5zYiIsInNjIiwi'@;
put 'Y29tLnNjIiwiZ292LnNjIiwibmV0LnNjIiwib3JnLnNjIiwiZWR1LnNjIiwic2QiLCJjb20uc2QiLCJuZXQuc2QiLCJvcmcuc2QiLCJlZHUuc2QiLCJtZWQuc2QiLCJ0di5zZCIsImdvdi5zZCIsImluZm8uc2QiLCJzZSIsImEuc2UiLCJhYy5zZSIsImIuc2UiLCJiZC5zZSIsImJyYW5kLnNl'@;
put 'IiwiYy5zZSIsImQuc2UiLCJlLnNlIiwiZi5zZSIsImZoLnNlIiwiZmhzay5zZSIsImZodi5zZSIsImcuc2UiLCJoLnNlIiwiaS5zZSIsImsuc2UiLCJrb21mb3JiLnNlIiwia29tbXVuYWxmb3JidW5kLnNlIiwia29tdnV4LnNlIiwibC5zZSIsImxhbmJpYi5zZSIsIm0uc2UiLCJuLnNlIiwi'@;
put 'bmF0dXJicnVrc2d5bW4uc2UiLCJvLnNlIiwib3JnLnNlIiwicC5zZSIsInBhcnRpLnNlIiwicHAuc2UiLCJwcmVzcy5zZSIsInIuc2UiLCJzLnNlIiwidC5zZSIsInRtLnNlIiwidS5zZSIsIncuc2UiLCJ4LnNlIiwieS5zZSIsInouc2UiLCJzZyIsImNvbS5zZyIsIm5ldC5zZyIsIm9yZy5z'@;
put 'ZyIsImdvdi5zZyIsImVkdS5zZyIsInBlci5zZyIsInNoIiwiY29tLnNoIiwibmV0LnNoIiwiZ292LnNoIiwib3JnLnNoIiwibWlsLnNoIiwic2kiLCJzaiIsInNrIiwic2wiLCJjb20uc2wiLCJuZXQuc2wiLCJlZHUuc2wiLCJnb3Yuc2wiLCJvcmcuc2wiLCJzbSIsInNuIiwiYXJ0LnNuIiwi'@;
put 'Y29tLnNuIiwiZWR1LnNuIiwiZ291di5zbiIsIm9yZy5zbiIsInBlcnNvLnNuIiwidW5pdi5zbiIsInNvIiwiY29tLnNvIiwiZWR1LnNvIiwiZ292LnNvIiwibWUuc28iLCJuZXQuc28iLCJvcmcuc28iLCJzciIsInNzIiwiYml6LnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUu'@;
put 'c3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2'@;
put 'IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImVkdS5zeSIsImdvdi5zeSIsIm5ldC5zeSIsIm1pbC5zeSIsImNvbS5zeSIsIm9yZy5zeSIsInN6IiwiY28uc3oiLCJhYy5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwi'@;
put 'LCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoi'@;
put 'LCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY29tLnRtIiwiY28udG0iLCJvcmcudG0iLCJuZXQudG0iLCJub20udG0iLCJnb3YudG0iLCJtaWwudG0iLCJlZHUudG0iLCJ0biIsImNvbS50biIsImVucy50biIs'@;
put 'ImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJnb3YudG8iLCJuZXQudG8iLCJvcmcudG8iLCJlZHUudG8iLCJtaWwu'@;
put 'dG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJpbmZvLnRyIiwibWlsLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRl'@;
put 'bC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImNvLnR0IiwiY29tLnR0Iiwib3JnLnR0IiwibmV0LnR0IiwiYml6LnR0IiwiaW5mby50dCIsInByby50dCIsImludC50dCIsImNvb3AudHQiLCJqb2JzLnR0IiwibW9iaS50dCIsInRyYXZl'@;
put 'bC50dCIsIm11c2V1bS50dCIsImFlcm8udHQiLCJuYW1lLnR0IiwiZ292LnR0IiwiZWR1LnR0IiwidHYiLCJ0dyIsImVkdS50dyIsImdvdi50dyIsIm1pbC50dyIsImNvbS50dyIsIm5ldC50dyIsIm9yZy50dyIsImlkdi50dyIsImdhbWUudHciLCJlYml6LnR3IiwiY2x1Yi50dyIsIlx1N2Ri'@;
put 'Mlx1OGRlZi50dyIsIlx1N2Q0NFx1N2U1NC50dyIsIlx1NTU0Nlx1Njk2ZC50dyIsInR6IiwiYWMudHoiLCJjby50eiIsImdvLnR6IiwiaG90ZWwudHoiLCJpbmZvLnR6IiwibWUudHoiLCJtaWwudHoiLCJtb2JpLnR6IiwibmUudHoiLCJvci50eiIsInNjLnR6IiwidHYudHoiLCJ1YSIsImNv'@;
put 'bS51YSIsImVkdS51YSIsImdvdi51YSIsImluLnVhIiwibmV0LnVhIiwib3JnLnVhIiwiY2hlcmthc3N5LnVhIiwiY2hlcmthc3kudWEiLCJjaGVybmlnb3YudWEiLCJjaGVybmloaXYudWEiLCJjaGVybml2dHNpLnVhIiwiY2hlcm5vdnRzeS51YSIsImNrLnVhIiwiY24udWEiLCJjci51YSIs'@;
put 'ImNyaW1lYS51YSIsImN2LnVhIiwiZG4udWEiLCJkbmVwcm9wZXRyb3Zzay51YSIsImRuaXByb3BldHJvdnNrLnVhIiwiZG9uZXRzay51YSIsImRwLnVhIiwiaWYudWEiLCJpdmFuby1mcmFua2l2c2sudWEiLCJraC51YSIsImtoYXJraXYudWEiLCJraGFya292LnVhIiwia2hlcnNvbi51YSIs'@;
put 'ImtobWVsbml0c2tpeS51YSIsImtobWVsbnl0c2t5aS51YSIsImtpZXYudWEiLCJraXJvdm9ncmFkLnVhIiwia20udWEiLCJrci51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHV0c2sudWEiLCJsdi51YSIsImx2'@;
put 'aXYudWEiLCJtay51YSIsIm15a29sYWl2LnVhIiwibmlrb2xhZXYudWEiLCJvZC51YSIsIm9kZXNhLnVhIiwib2Rlc3NhLnVhIiwicGwudWEiLCJwb2x0YXZhLnVhIiwicml2bmUudWEiLCJyb3Zuby51YSIsInJ2LnVhIiwic2IudWEiLCJzZWJhc3RvcG9sLnVhIiwic2V2YXN0b3BvbC51YSIs'@;
put 'InNtLnVhIiwic3VteS51YSIsInRlLnVhIiwidGVybm9waWwudWEiLCJ1ei51YSIsInV6aGdvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInphcG9yaXpoemhlLnVhIiwiemFwb3Jpemh6aGlhLnVhIiwiemhpdG9taXIu'@;
put 'dWEiLCJ6aHl0b215ci51YSIsInpwLnVhIiwienQudWEiLCJ1ZyIsImNvLnVnIiwib3IudWciLCJhYy51ZyIsInNjLnVnIiwiZ28udWciLCJuZS51ZyIsImNvbS51ZyIsIm9yZy51ZyIsInVrIiwiYWMudWsiLCJjby51ayIsImdvdi51ayIsImx0ZC51ayIsIm1lLnVrIiwibmV0LnVrIiwibmhz'@;
put 'LnVrIiwib3JnLnVrIiwicGxjLnVrIiwicG9saWNlLnVrIiwiKi5zY2gudWsiLCJ1cyIsImRuaS51cyIsImZlZC51cyIsImlzYS51cyIsImtpZHMudXMiLCJuc24udXMiLCJhay51cyIsImFsLnVzIiwiYXIudXMiLCJhcy51cyIsImF6LnVzIiwiY2EudXMiLCJjby51cyIsImN0LnVzIiwiZGMu'@;
put 'dXMiLCJkZS51cyIsImZsLnVzIiwiZ2EudXMiLCJndS51cyIsImhpLnVzIiwiaWEudXMiLCJpZC51cyIsImlsLnVzIiwiaW4udXMiLCJrcy51cyIsImt5LnVzIiwibGEudXMiLCJtYS51cyIsIm1kLnVzIiwibWUudXMiLCJtaS51cyIsIm1uLnVzIiwibW8udXMiLCJtcy51cyIsIm10LnVzIiwi'@;
put 'bmMudXMiLCJuZC51cyIsIm5lLnVzIiwibmgudXMiLCJuai51cyIsIm5tLnVzIiwibnYudXMiLCJueS51cyIsIm9oLnVzIiwib2sudXMiLCJvci51cyIsInBhLnVzIiwicHIudXMiLCJyaS51cyIsInNjLnVzIiwic2QudXMiLCJ0bi51cyIsInR4LnVzIiwidXQudXMiLCJ2aS51cyIsInZ0LnVz'@;
put 'IiwidmEudXMiLCJ3YS51cyIsIndpLnVzIiwid3YudXMiLCJ3eS51cyIsImsxMi5hay51cyIsImsxMi5hbC51cyIsImsxMi5hci51cyIsImsxMi5hcy51cyIsImsxMi5hei51cyIsImsxMi5jYS51cyIsImsxMi5jby51cyIsImsxMi5jdC51cyIsImsxMi5kYy51cyIsImsxMi5kZS51cyIsImsx'@;
put 'Mi5mbC51cyIsImsxMi5nYS51cyIsImsxMi5ndS51cyIsImsxMi5pYS51cyIsImsxMi5pZC51cyIsImsxMi5pbC51cyIsImsxMi5pbi51cyIsImsxMi5rcy51cyIsImsxMi5reS51cyIsImsxMi5sYS51cyIsImsxMi5tYS51cyIsImsxMi5tZC51cyIsImsxMi5tZS51cyIsImsxMi5taS51cyIs'@;
put 'ImsxMi5tbi51cyIsImsxMi5tby51cyIsImsxMi5tcy51cyIsImsxMi5tdC51cyIsImsxMi5uYy51cyIsImsxMi5uZS51cyIsImsxMi5uaC51cyIsImsxMi5uai51cyIsImsxMi5ubS51cyIsImsxMi5udi51cyIsImsxMi5ueS51cyIsImsxMi5vaC51cyIsImsxMi5vay51cyIsImsxMi5vci51'@;
put 'cyIsImsxMi5wYS51cyIsImsxMi5wci51cyIsImsxMi5zYy51cyIsImsxMi50bi51cyIsImsxMi50eC51cyIsImsxMi51dC51cyIsImsxMi52aS51cyIsImsxMi52dC51cyIsImsxMi52YS51cyIsImsxMi53YS51cyIsImsxMi53aS51cyIsImsxMi53eS51cyIsImNjLmFrLnVzIiwiY2MuYWwu'@;
put 'dXMiLCJjYy5hci51cyIsImNjLmFzLnVzIiwiY2MuYXoudXMiLCJjYy5jYS51cyIsImNjLmNvLnVzIiwiY2MuY3QudXMiLCJjYy5kYy51cyIsImNjLmRlLnVzIiwiY2MuZmwudXMiLCJjYy5nYS51cyIsImNjLmd1LnVzIiwiY2MuaGkudXMiLCJjYy5pYS51cyIsImNjLmlkLnVzIiwiY2MuaWwu'@;
put 'dXMiLCJjYy5pbi51cyIsImNjLmtzLnVzIiwiY2Mua3kudXMiLCJjYy5sYS51cyIsImNjLm1hLnVzIiwiY2MubWQudXMiLCJjYy5tZS51cyIsImNjLm1pLnVzIiwiY2MubW4udXMiLCJjYy5tby51cyIsImNjLm1zLnVzIiwiY2MubXQudXMiLCJjYy5uYy51cyIsImNjLm5kLnVzIiwiY2MubmUu'@;
put 'dXMiLCJjYy5uaC51cyIsImNjLm5qLnVzIiwiY2Mubm0udXMiLCJjYy5udi51cyIsImNjLm55LnVzIiwiY2Mub2gudXMiLCJjYy5vay51cyIsImNjLm9yLnVzIiwiY2MucGEudXMiLCJjYy5wci51cyIsImNjLnJpLnVzIiwiY2Muc2MudXMiLCJjYy5zZC51cyIsImNjLnRuLnVzIiwiY2MudHgu'@;
put 'dXMiLCJjYy51dC51cyIsImNjLnZpLnVzIiwiY2MudnQudXMiLCJjYy52YS51cyIsImNjLndhLnVzIiwiY2Mud2kudXMiLCJjYy53di51cyIsImNjLnd5LnVzIiwibGliLmFrLnVzIiwibGliLmFsLnVzIiwibGliLmFyLnVzIiwibGliLmFzLnVzIiwibGliLmF6LnVzIiwibGliLmNhLnVzIiwi'@;
put 'bGliLmNvLnVzIiwibGliLmN0LnVzIiwibGliLmRjLnVzIiwibGliLmZsLnVzIiwibGliLmdhLnVzIiwibGliLmd1LnVzIiwibGliLmhpLnVzIiwibGliLmlhLnVzIiwibGliLmlkLnVzIiwibGliLmlsLnVzIiwibGliLmluLnVzIiwibGliLmtzLnVzIiwibGliLmt5LnVzIiwibGliLmxhLnVz'@;
put 'IiwibGliLm1hLnVzIiwibGliLm1kLnVzIiwibGliLm1lLnVzIiwibGliLm1pLnVzIiwibGliLm1uLnVzIiwibGliLm1vLnVzIiwibGliLm1zLnVzIiwibGliLm10LnVzIiwibGliLm5jLnVzIiwibGliLm5kLnVzIiwibGliLm5lLnVzIiwibGliLm5oLnVzIiwibGliLm5qLnVzIiwibGliLm5t'@;
put 'LnVzIiwibGliLm52LnVzIiwibGliLm55LnVzIiwibGliLm9oLnVzIiwibGliLm9rLnVzIiwibGliLm9yLnVzIiwibGliLnBhLnVzIiwibGliLnByLnVzIiwibGliLnJpLnVzIiwibGliLnNjLnVzIiwibGliLnNkLnVzIiwibGliLnRuLnVzIiwibGliLnR4LnVzIiwibGliLnV0LnVzIiwibGli'@;
put 'LnZpLnVzIiwibGliLnZ0LnVzIiwibGliLnZhLnVzIiwibGliLndhLnVzIiwibGliLndpLnVzIiwibGliLnd5LnVzIiwicHZ0LmsxMi5tYS51cyIsImNodHIuazEyLm1hLnVzIiwicGFyb2NoLmsxMi5tYS51cyIsImFubi1hcmJvci5taS51cyIsImNvZy5taS51cyIsImRzdC5taS51cyIsImVh'@;
put 'dG9uLm1pLnVzIiwiZ2VuLm1pLnVzIiwibXVzLm1pLnVzIiwidGVjLm1pLnVzIiwid2FzaHRlbmF3Lm1pLnVzIiwidXkiLCJjb20udXkiLCJlZHUudXkiLCJndWIudXkiLCJtaWwudXkiLCJuZXQudXkiLCJvcmcudXkiLCJ1eiIsImNvLnV6IiwiY29tLnV6IiwibmV0LnV6Iiwib3JnLnV6Iiwi'@;
put 'dmEiLCJ2YyIsImNvbS52YyIsIm5ldC52YyIsIm9yZy52YyIsImdvdi52YyIsIm1pbC52YyIsImVkdS52YyIsInZlIiwiYXJ0cy52ZSIsImJpYi52ZSIsImNvLnZlIiwiY29tLnZlIiwiZTEyLnZlIiwiZWR1LnZlIiwiZmlybS52ZSIsImdvYi52ZSIsImdvdi52ZSIsImluZm8udmUiLCJpbnQu'@;
put 'dmUiLCJtaWwudmUiLCJuZXQudmUiLCJub20udmUiLCJvcmcudmUiLCJyYXIudmUiLCJyZWMudmUiLCJzdG9yZS52ZSIsInRlYy52ZSIsIndlYi52ZSIsInZnIiwidmkiLCJjby52aSIsImNvbS52aSIsImsxMi52aSIsIm5ldC52aSIsIm9yZy52aSIsInZuIiwiY29tLnZuIiwibmV0LnZuIiwi'@;
put 'b3JnLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaW50LnZuIiwiYWMudm4iLCJiaXoudm4iLCJpbmZvLnZuIiwibmFtZS52biIsInByby52biIsImhlYWx0aC52biIsInZ1IiwiY29tLnZ1IiwiZWR1LnZ1IiwibmV0LnZ1Iiwib3JnLnZ1Iiwid2YiLCJ3cyIsImNvbS53cyIsIm5ldC53cyIsIm9y'@;
put 'Zy53cyIsImdvdi53cyIsImVkdS53cyIsInl0IiwiXHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjI3XHUwNjJhIiwiXHUwNTcwXHUwNTYxXHUwNTc1IiwiXHUwOWFjXHUwOWJlXHUwOTgyXHUwOWIyXHUwOWJlIiwiXHUwNDMxXHUwNDMzIiwiXHUwNjI3XHUwNjQ0XHUwNjI4XHUwNjJkXHUw'@;
put 'NjMxXHUwNjRhXHUwNjQ2IiwiXHUwNDMxXHUwNDM1XHUwNDNiIiwiXHU0ZTJkXHU1NmZkIiwiXHU0ZTJkXHU1NzBiIiwiXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjMyXHUwNjI3XHUwNjI2XHUwNjMxIiwiXHUwNjQ1XHUwNjM1XHUwNjMxIiwiXHUwNDM1XHUwNDRlIiwiXHUwM2I1XHUwM2M1Iiwi'@;
put 'XHUwNjQ1XHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI3IiwiXHUxMGQyXHUxMGQ0IiwiXHUwM2I1XHUwM2JiIiwiXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjU1OVx1ODBiMi5cdTk5OTlcdTZlMmYiLCJcdTY1M2Zc'@;
put 'dTVlOWMuXHU5OTk5XHU2ZTJmIiwiXHU1MDBiXHU0ZWJhLlx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTdkNDRcdTdlNTQuXHU5OTk5XHU2ZTJmIiwiXHUwY2FkXHUwY2JlXHUwY2IwXHUwY2E0IiwiXHUwYjJkXHUwYjNlXHUwYjMwXHUwYjI0IiwiXHUwOWFk'@;
put 'XHUwOWJlXHUwOWYwXHUwOWE0IiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0XHUwOTJlXHUwOTRkIiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTRiXHUwOTI0IiwiXHUwNjgwXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwZDJkXHUwZDNlXHUwZDMwXHUwZDI0XHUwZDAyIiwiXHUwOTJkXHUwOTNl'@;
put 'XHUwOTMwXHUwOTI0IiwiXHUwNjI4XHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwNjI4XHUwNmJlXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwYzJkXHUwYzNlXHUwYzMwXHUwYzI0XHUwYzRkIiwiXHUwYWFkXHUwYWJlXHUwYWIwXHUwYWE0IiwiXHUwYTJkXHUwYTNlXHUwYTMwXHUwYTI0IiwiXHUw'@;
put 'OWFkXHUwOWJlXHUwOWIwXHUwOWE0IiwiXHUwYjg3XHUwYmE4XHUwYmNkXHUwYmE0XHUwYmJmXHUwYmFmXHUwYmJlIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjMxXHUwNjI3XHUwNjQyIiwiXHUw'@;
put 'NjI3XHUwNjQ0XHUwNjI3XHUwNjMxXHUwNjJmXHUwNjQ2IiwiXHVkNTVjXHVhZDZkIiwiXHUwNDliXHUwNDMwXHUwNDM3IiwiXHUwZWE1XHUwZWIyXHUwZWE3IiwiXHUwZGJkXHUwZDgyXHUwZDlhXHUwZGNmIiwiXHUwYjg3XHUwYmIyXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmM4IiwiXHUwNjI3'@;
put 'XHUwNjQ0XHUwNjQ1XHUwNjNhXHUwNjMxXHUwNjI4IiwiXHUwNDNjXHUwNDNhXHUwNDM0IiwiXHUwNDNjXHUwNDNlXHUwNDNkIiwiXHU2ZmIzXHU5NTgwIiwiXHU2ZmIzXHU5NWU4IiwiXHUwNjQ1XHUwNjQ0XHUwNjRhXHUwNjMzXHUwNjRhXHUwNjI3IiwiXHUwNjM5XHUwNjQ1XHUwNjI3XHUw'@;
put 'NjQ2IiwiXHUwNjdlXHUwNjI3XHUwNmE5XHUwNjMzXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNjQzXHUwNjMzXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjQxXHUwNjQ0XHUwNjMzXHUwNjM3XHUwNjRhXHUwNjQ2IiwiXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUw'@;
put 'NDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzFcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDM0Llx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFc'@;
put 'dTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQwXHUwNDQ0IiwiXHUwNjQyXHUwNjM3XHUwNjMxIiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4'@;
put 'XHUwNjJmXHUwNmNjXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNmMzIiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjQ3IiwiXHUwNjMzXHUwNjQ4XHUwNjJmXHUwNjI3XHUwNjQ2IiwiXHU2NWIwXHU1'@;
put 'MmEwXHU1NzYxIiwiXHUwYjlhXHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmFhXHUwYmNkXHUwYmFhXHUwYmMyXHUwYmIwXHUwYmNkIiwiXHUwNjMzXHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjI5IiwiXHUwNjMzXHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjI3IiwiXHUwZTQ0XHUwZTE3XHUwZTIy'@;
put 'IiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxOFx1MGUzOFx1MGUyM1x1MGUwMVx1MGUzNFx1MGUwOC5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUw'@;
put 'ZTIyIiwiXHUwZTE3XHUwZTJiXHUwZTMyXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMmRcdTBlMDdcdTBlMDRcdTBlNGNcdTBlMDFcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwNjJhXHUw'@;
put 'NjQ4XHUwNjQ2XHUwNjMzIiwiXHU1M2YwXHU3MDYzIiwiXHU1M2YwXHU2ZTdlIiwiXHU4MWZhXHU3MDYzIiwiXHUwNDQzXHUwNDNhXHUwNDQwIiwiXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ1XHUwNjQ2IiwieHh4IiwieWUiLCJjb20ueWUiLCJlZHUueWUiLCJnb3YueWUiLCJuZXQueWUiLCJt'@;
put 'aWwueWUiLCJvcmcueWUiLCJhYy56YSIsImFncmljLnphIiwiYWx0LnphIiwiY28uemEiLCJlZHUuemEiLCJnb3YuemEiLCJncm9uZGFyLnphIiwibGF3LnphIiwibWlsLnphIiwibmV0LnphIiwibmdvLnphIiwibmljLnphIiwibmlzLnphIiwibm9tLnphIiwib3JnLnphIiwic2Nob29sLnph'@;
put 'IiwidG0uemEiLCJ3ZWIuemEiLCJ6bSIsImFjLnptIiwiYml6LnptIiwiY28uem0iLCJjb20uem0iLCJlZHUuem0iLCJnb3Yuem0iLCJpbmZvLnptIiwibWlsLnptIiwibmV0LnptIiwib3JnLnptIiwic2NoLnptIiwienciLCJhYy56dyIsImNvLnp3IiwiZ292Lnp3IiwibWlsLnp3Iiwib3Jn'@;
put 'Lnp3IiwiYWFhIiwiYWFycCIsImFiYXJ0aCIsImFiYiIsImFiYm90dCIsImFiYnZpZSIsImFiYyIsImFibGUiLCJhYm9nYWRvIiwiYWJ1ZGhhYmkiLCJhY2FkZW15IiwiYWNjZW50dXJlIiwiYWNjb3VudGFudCIsImFjY291bnRhbnRzIiwiYWNvIiwiYWN0b3IiLCJhZGFjIiwiYWRzIiwiYWR1'@;
put 'bHQiLCJhZWciLCJhZXRuYSIsImFmbCIsImFmcmljYSIsImFnYWtoYW4iLCJhZ2VuY3kiLCJhaWciLCJhaXJidXMiLCJhaXJmb3JjZSIsImFpcnRlbCIsImFrZG4iLCJhbGZhcm9tZW8iLCJhbGliYWJhIiwiYWxpcGF5IiwiYWxsZmluYW56IiwiYWxsc3RhdGUiLCJhbGx5IiwiYWxzYWNlIiwi'@;
put 'YWxzdG9tIiwiYW1hem9uIiwiYW1lcmljYW5leHByZXNzIiwiYW1lcmljYW5mYW1pbHkiLCJhbWV4IiwiYW1mYW0iLCJhbWljYSIsImFtc3RlcmRhbSIsImFuYWx5dGljcyIsImFuZHJvaWQiLCJhbnF1YW4iLCJhbnoiLCJhb2wiLCJhcGFydG1lbnRzIiwiYXBwIiwiYXBwbGUiLCJhcXVhcmVs'@;
put 'bGUiLCJhcmFiIiwiYXJhbWNvIiwiYXJjaGkiLCJhcm15IiwiYXJ0IiwiYXJ0ZSIsImFzZGEiLCJhc3NvY2lhdGVzIiwiYXRobGV0YSIsImF0dG9ybmV5IiwiYXVjdGlvbiIsImF1ZGkiLCJhdWRpYmxlIiwiYXVkaW8iLCJhdXNwb3N0IiwiYXV0aG9yIiwiYXV0byIsImF1dG9zIiwiYXZpYW5j'@;
put 'YSIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmFuYXJlcHVibGljIiwiYmFuZCIsImJhbmsiLCJiYXIiLCJiYXJjZWxvbmEiLCJiYXJjbGF5Y2FyZCIsImJhcmNsYXlzIiwiYmFyZWZvb3QiLCJiYXJnYWlucyIsImJhc2ViYWxsIiwiYmFza2V0YmFs'@;
put 'bCIsImJhdWhhdXMiLCJiYXllcm4iLCJiYmMiLCJiYnQiLCJiYnZhIiwiYmNnIiwiYmNuIiwiYmVhdHMiLCJiZWF1dHkiLCJiZWVyIiwiYmVudGxleSIsImJlcmxpbiIsImJlc3QiLCJiZXN0YnV5IiwiYmV0IiwiYmhhcnRpIiwiYmlibGUiLCJiaWQiLCJiaWtlIiwiYmluZyIsImJpbmdvIiwi'@;
put 'YmlvIiwiYmxhY2siLCJibGFja2ZyaWRheSIsImJsb2NrYnVzdGVyIiwiYmxvZyIsImJsb29tYmVyZyIsImJsdWUiLCJibXMiLCJibXciLCJibnBwYXJpYmFzIiwiYm9hdHMiLCJib2VocmluZ2VyIiwiYm9mYSIsImJvbSIsImJvbmQiLCJib28iLCJib29rIiwiYm9va2luZyIsImJvc2NoIiwi'@;
put 'Ym9zdGlrIiwiYm9zdG9uIiwiYm90IiwiYm91dGlxdWUiLCJib3giLCJicmFkZXNjbyIsImJyaWRnZXN0b25lIiwiYnJvYWR3YXkiLCJicm9rZXIiLCJicm90aGVyIiwiYnJ1c3NlbHMiLCJidWdhdHRpIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIs'@;
put 'ImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2FuY2VycmVzZWFyY2giLCJjYW5vbiIsImNhcGV0b3duIiwiY2FwaXRhbCIsImNhcGl0YWxvbmUiLCJjYXIiLCJjYXJhdmFuIiwiY2FyZHMiLCJjYXJlIiwiY2FyZWVyIiwiY2Fy'@;
put 'ZWVycyIsImNhcnMiLCJjYXNhIiwiY2FzZSIsImNhc2giLCJjYXNpbm8iLCJjYXRlcmluZyIsImNhdGhvbGljIiwiY2JhIiwiY2JuIiwiY2JyZSIsImNicyIsImNlbnRlciIsImNlbyIsImNlcm4iLCJjZmEiLCJjZmQiLCJjaGFuZWwiLCJjaGFubmVsIiwiY2hhcml0eSIsImNoYXNlIiwiY2hh'@;
put 'dCIsImNoZWFwIiwiY2hpbnRhaSIsImNocmlzdG1hcyIsImNocm9tZSIsImNodXJjaCIsImNpcHJpYW5pIiwiY2lyY2xlIiwiY2lzY28iLCJjaXRhZGVsIiwiY2l0aSIsImNpdGljIiwiY2l0eSIsImNpdHllYXRzIiwiY2xhaW1zIiwiY2xlYW5pbmciLCJjbGljayIsImNsaW5pYyIsImNsaW5p'@;
put 'cXVlIiwiY2xvdGhpbmciLCJjbG91ZCIsImNsdWIiLCJjbHVibWVkIiwiY29hY2giLCJjb2RlcyIsImNvZmZlZSIsImNvbGxlZ2UiLCJjb2xvZ25lIiwiY29tY2FzdCIsImNvbW1iYW5rIiwiY29tbXVuaXR5IiwiY29tcGFueSIsImNvbXBhcmUiLCJjb21wdXRlciIsImNvbXNlYyIsImNvbmRv'@;
put 'cyIsImNvbnN0cnVjdGlvbiIsImNvbnN1bHRpbmciLCJjb250YWN0IiwiY29udHJhY3RvcnMiLCJjb29raW5nIiwiY29va2luZ2NoYW5uZWwiLCJjb29sIiwiY29yc2ljYSIsImNvdW50cnkiLCJjb3Vwb24iLCJjb3Vwb25zIiwiY291cnNlcyIsImNwYSIsImNyZWRpdCIsImNyZWRpdGNhcmQi'@;
put 'LCJjcmVkaXR1bmlvbiIsImNyaWNrZXQiLCJjcm93biIsImNycyIsImNydWlzZSIsImNydWlzZXMiLCJjdWlzaW5lbGxhIiwiY3ltcnUiLCJjeW91IiwiZGFidXIiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwi'@;
put 'LCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVj'@;
put 'dG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgi'@;
put 'LCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldGlzYWxhdCIsImV1'@;
put 'cm92aXNpb24iLCJldXMiLCJldmVudHMiLCJleGNoYW5nZSIsImV4cGVydCIsImV4cG9zZWQiLCJleHByZXNzIiwiZXh0cmFzcGFjZSIsImZhZ2UiLCJmYWlsIiwiZmFpcndpbmRzIiwiZmFpdGgiLCJmYW1pbHkiLCJmYW4iLCJmYW5zIiwiZmFybSIsImZhcm1lcnMiLCJmYXNoaW9uIiwiZmFz'@;
put 'dCIsImZlZGV4IiwiZmVlZGJhY2siLCJmZXJyYXJpIiwiZmVycmVybyIsImZpYXQiLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNz'@;
put 'IiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb29kbmV0d29yayIsImZvb3RiYWxsIiwiZm9yZCIsImZvcmV4IiwiZm9yc2FsZSIsImZvcnVtIiwiZm91bmRhdGlvbiIsImZveCIsImZyZWUiLCJmcmVzZW5pdXMiLCJm'@;
put 'cmwiLCJmcm9nYW5zIiwiZnJvbnRkb29yIiwiZnJvbnRpZXIiLCJmdHIiLCJmdWppdHN1IiwiZnVuIiwiZnVuZCIsImZ1cm5pdHVyZSIsImZ1dGJvbCIsImZ5aSIsImdhbCIsImdhbGxlcnkiLCJnYWxsbyIsImdhbGx1cCIsImdhbWUiLCJnYW1lcyIsImdhcCIsImdhcmRlbiIsImdheSIsImdi'@;
put 'aXoiLCJnZG4iLCJnZWEiLCJnZW50IiwiZ2VudGluZyIsImdlb3JnZSIsImdnZWUiLCJnaWZ0IiwiZ2lmdHMiLCJnaXZlcyIsImdpdmluZyIsImdsYXNzIiwiZ2xlIiwiZ2xvYmFsIiwiZ2xvYm8iLCJnbWFpbCIsImdtYmgiLCJnbW8iLCJnbXgiLCJnb2RhZGR5IiwiZ29sZCIsImdvbGRwb2lu'@;
put 'dCIsImdvbGYiLCJnb28iLCJnb29keWVhciIsImdvb2ciLCJnb29nbGUiLCJnb3AiLCJnb3QiLCJncmFpbmdlciIsImdyYXBoaWNzIiwiZ3JhdGlzIiwiZ3JlZW4iLCJncmlwZSIsImdyb2NlcnkiLCJncm91cCIsImd1YXJkaWFuIiwiZ3VjY2kiLCJndWdlIiwiZ3VpZGUiLCJndWl0YXJzIiwi'@;
put 'Z3VydSIsImhhaXIiLCJoYW1idXJnIiwiaGFuZ291dCIsImhhdXMiLCJoYm8iLCJoZGZjIiwiaGRmY2JhbmsiLCJoZWFsdGgiLCJoZWFsdGhjYXJlIiwiaGVscCIsImhlbHNpbmtpIiwiaGVyZSIsImhlcm1lcyIsImhndHYiLCJoaXBob3AiLCJoaXNhbWl0c3UiLCJoaXRhY2hpIiwiaGl2Iiwi'@;
put 'aGt0IiwiaG9ja2V5IiwiaG9sZGluZ3MiLCJob2xpZGF5IiwiaG9tZWRlcG90IiwiaG9tZWdvb2RzIiwiaG9tZXMiLCJob21lc2Vuc2UiLCJob25kYSIsImhvcnNlIiwiaG9zcGl0YWwiLCJob3N0IiwiaG9zdGluZyIsImhvdCIsImhvdGVsZXMiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2Ui'@;
put 'LCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIs'@;
put 'Imluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6'@;
put 'dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgi'@;
put 'LCJraWEiLCJraWRzIiwia2ltIiwia2luZGVyIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5j'@;
put 'YXN0ZXIiLCJsYW5jaWEiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0IiwibGlkbCIs'@;
put 'ImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJsaW5kZSIsImxpbmsiLCJsaXBzeSIsImxpdmUiLCJsaXZpbmciLCJsbGMiLCJsbHAiLCJsb2FuIiwibG9hbnMiLCJsb2NrZXIiLCJs'@;
put 'b2N1cyIsImxvZnQiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWN5cyIsIm1hZHJpZCIsIm1haWYiLCJtYWlzb24iLCJtYWtldXAiLCJtYW4iLCJtYW5h'@;
put 'Z2VtZW50IiwibWFuZ28iLCJtYXAiLCJtYXJrZXQiLCJtYXJrZXRpbmciLCJtYXJrZXRzIiwibWFycmlvdHQiLCJtYXJzaGFsbHMiLCJtYXNlcmF0aSIsIm1hdHRlbCIsIm1iYSIsIm1ja2luc2V5IiwibWVkIiwibWVkaWEiLCJtZWV0IiwibWVsYm91cm5lIiwibWVtZSIsIm1lbW9yaWFsIiwi'@;
put 'bWVuIiwibWVudSIsIm1lcmNrbXNkIiwibWlhbWkiLCJtaWNyb3NvZnQiLCJtaW5pIiwibWludCIsIm1pdCIsIm1pdHN1YmlzaGkiLCJtbGIiLCJtbHMiLCJtbWEiLCJtb2JpbGUiLCJtb2RhIiwibW9lIiwibW9pIiwibW9tIiwibW9uYXNoIiwibW9uZXkiLCJtb25zdGVyIiwibW9ybW9uIiwi'@;
put 'bW9ydGdhZ2UiLCJtb3Njb3ciLCJtb3RvIiwibW90b3JjeWNsZXMiLCJtb3YiLCJtb3ZpZSIsIm1zZCIsIm10biIsIm10ciIsIm11c2ljIiwibXV0dWFsIiwibmFiIiwibmFnb3lhIiwibmF0dXJhIiwibmF2eSIsIm5iYSIsIm5lYyIsIm5ldGJhbmsiLCJuZXRmbGl4IiwibmV0d29yayIsIm5l'@;
put 'dXN0YXIiLCJuZXciLCJuZXdzIiwibmV4dCIsIm5leHRkaXJlY3QiLCJuZXh1cyIsIm5mbCIsIm5nbyIsIm5oayIsIm5pY28iLCJuaWtlIiwibmlrb24iLCJuaW5qYSIsIm5pc3NhbiIsIm5pc3NheSIsIm5va2lhIiwibm9ydGh3ZXN0ZXJubXV0dWFsIiwibm9ydG9uIiwibm93Iiwibm93cnV6'@;
put 'Iiwibm93dHYiLCJucmEiLCJucnciLCJudHQiLCJueWMiLCJvYmkiLCJvYnNlcnZlciIsIm9mZmljZSIsIm9raW5hd2EiLCJvbGF5YW4iLCJvbGF5YW5ncm91cCIsIm9sZG5hdnkiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xl'@;
put 'Iiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXNzYWdlbnMiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhh'@;
put 'cm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3Rh'@;
put 'dGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJv'@;
put 'cGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1i'@;
put 'cmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNo'@;
put 'YXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2hlciIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxv'@;
put 'biIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNheG8iLCJzYmkiLCJzYnMiLCJzY2EiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIs'@;
put 'InNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5lciIsInNlcnZpY2VzIiwic2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAi'@;
put 'LCJzaGF3Iiwic2hlbGwiLCJzaGlhIiwic2hpa3NoYSIsInNob2VzIiwic2hvcCIsInNob3BwaW5nIiwic2hvdWppIiwic2hvdyIsInNob3d0aW1lIiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWls'@;
put 'ZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJh'@;
put 'bmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dh'@;
put 'dGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwi'@;
put 'dGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aWZmYW55IiwidGlwcyIsInRpcmVzIiwidGlyb2wiLCJ0am1heHgiLCJ0angiLCJ0a21heHgiLCJ0bWFsbCIsInRvZGF5IiwidG9reW8iLCJ0b29scyIsInRvcCIsInRv'@;
put 'cmF5IiwidG9zaGliYSIsInRvdGFsIiwidG91cnMiLCJ0b3duIiwidG95b3RhIiwidG95cyIsInRyYWRlIiwidHJhZGluZyIsInRyYWluaW5nIiwidHJhdmVsIiwidHJhdmVsY2hhbm5lbCIsInRyYXZlbGVycyIsInRyYXZlbGVyc2luc3VyYW5jZSIsInRydXN0IiwidHJ2IiwidHViZSIsInR1'@;
put 'aSIsInR1bmVzIiwidHVzaHUiLCJ0dnMiLCJ1YmFuayIsInVicyIsInVuaWNvbSIsInVuaXZlcnNpdHkiLCJ1bm8iLCJ1b2wiLCJ1cHMiLCJ2YWNhdGlvbnMiLCJ2YW5hIiwidmFuZ3VhcmQiLCJ2ZWdhcyIsInZlbnR1cmVzIiwidmVyaXNpZ24iLCJ2ZXJzaWNoZXJ1bmciLCJ2ZXQiLCJ2aWFq'@;
put 'ZXMiLCJ2aWRlbyIsInZpZyIsInZpa2luZyIsInZpbGxhcyIsInZpbiIsInZpcCIsInZpcmdpbiIsInZpc2EiLCJ2aXNpb24iLCJ2aXZhIiwidml2byIsInZsYWFuZGVyZW4iLCJ2b2RrYSIsInZvbGtzd2FnZW4iLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdlIiwidnVl'@;
put 'bG9zIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4iLCJ3'@;
put 'aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhmaW5pdHkiLCJ4aWh1YW4iLCJ4aW4i'@;
put 'LCJcdTA5MTVcdTA5NDlcdTA5MmUiLCJcdTMwYmJcdTMwZmNcdTMwZWIiLCJcdTRmNWJcdTVjNzEiLCJcdTYxNDhcdTU1ODQiLCJcdTk2YzZcdTU2ZTIiLCJcdTU3MjhcdTdlYmYiLCJcdTcwYjlcdTc3MGIiLCJcdTBlMDRcdTBlMmRcdTBlMjEiLCJcdTUxNmJcdTUzNjYiLCJcdTA2NDVcdTA2'@;
put 'NDhcdTA2NDJcdTA2MzkiLCJcdTUxNmNcdTc2Y2EiLCJcdTUxNmNcdTUzZjgiLCJcdTk5OTlcdTY4M2NcdTkxY2NcdTYyYzkiLCJcdTdmNTFcdTdhZDkiLCJcdTc5ZmJcdTUyYTgiLCJcdTYyMTFcdTcyMzFcdTRmNjAiLCJcdTA0M2NcdTA0M2VcdTA0NDFcdTA0M2FcdTA0MzJcdTA0MzAiLCJc'@;
put 'dTA0M2FcdTA0MzBcdTA0NDJcdTA0M2VcdTA0M2JcdTA0MzhcdTA0M2EiLCJcdTA0M2VcdTA0M2RcdTA0M2JcdTA0MzBcdTA0MzlcdTA0M2QiLCJcdTA0NDFcdTA0MzBcdTA0MzlcdTA0NDIiLCJcdTgwNTRcdTkwMWEiLCJcdTA1ZTdcdTA1ZDVcdTA1ZGQiLCJcdTY1ZjZcdTVjMWEiLCJcdTVm'@;
put 'YWVcdTUzNWEiLCJcdTZkZTFcdTlhNmNcdTk1MjEiLCJcdTMwZDVcdTMwYTFcdTMwYzNcdTMwYjdcdTMwZTdcdTMwZjMiLCJcdTA0M2VcdTA0NDBcdTA0MzMiLCJcdTA5MjhcdTA5NDdcdTA5MWYiLCJcdTMwYjlcdTMwYzhcdTMwYTIiLCJcdTMwYTJcdTMwZGVcdTMwYmVcdTMwZjMiLCJcdWMw'@;
put 'YmNcdWMxMzEiLCJcdTU1NDZcdTY4MDciLCJcdTU1NDZcdTVlOTciLCJcdTU1NDZcdTU3Y2UiLCJcdTA0MzRcdTA0MzVcdTA0NDJcdTA0MzgiLCJcdTMwZGRcdTMwYTRcdTMwZjNcdTMwYzgiLCJcdTY1YjBcdTk1ZmIiLCJcdTViYjZcdTk2ZmIiLCJcdTA2NDNcdTA2NDhcdTA2NDUiLCJcdTRl'@;
put 'MmRcdTY1ODdcdTdmNTEiLCJcdTRlMmRcdTRmZTEiLCJcdTVhMzFcdTRlNTAiLCJcdThjMzdcdTZiNGMiLCJcdTk2ZmJcdThhMGFcdTc2YzhcdTc5ZDEiLCJcdThkMmRcdTcyNjkiLCJcdTMwYWZcdTMwZTlcdTMwYTZcdTMwYzkiLCJcdTkwMWFcdThjYTkiLCJcdTdmNTFcdTVlOTciLCJcdTA5'@;
put 'MzhcdTA5MDJcdTA5MTdcdTA5MjBcdTA5MjgiLCJcdTk5MTBcdTUzODUiLCJcdTdmNTFcdTdlZGMiLCJcdTA0M2FcdTA0M2VcdTA0M2MiLCJcdTRlOWFcdTlhNmNcdTkwMGEiLCJcdThiZmFcdTU3ZmFcdTRlOWEiLCJcdTk4ZGZcdTU0YzEiLCJcdTk4ZGVcdTUyMjlcdTZkNjYiLCJcdTYyNGJc'@;
put 'dTY3M2EiLCJcdTA2MjdcdTA2MzFcdTA2MjdcdTA2NDVcdTA2NDNcdTA2NDgiLCJcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDRcdTA2NGFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2MmFcdTA2MzVcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MmEiLCJcdTA2MjhcdTA2MjdcdTA2MzJcdTA2MjdcdTA2'@;
put 'MzEiLCJcdTA2MjdcdTA2MjhcdTA2NDhcdTA2MzhcdTA2MjhcdTA2NGEiLCJcdTA2NDNcdTA2MjdcdTA2MmJcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDMiLCJcdTA2NDdcdTA2NDVcdTA2MzFcdTA2MjdcdTA2NDciLCJcdWIyZjdcdWNlZjQiLCJcdTY1M2ZcdTVlOWMiLCJcdTA2MzRcdTA2Mjhc'@;
put 'dTA2NDNcdTA2MjkiLCJcdTA2MjhcdTA2NGFcdTA2MmFcdTA2NDMiLCJcdTA2MzlcdTA2MzFcdTA2MjgiLCJcdTY3M2FcdTY3ODQiLCJcdTdlYzRcdTdlYzdcdTY3M2FcdTY3ODQiLCJcdTUwNjVcdTVlYjciLCJcdTYyZGJcdTgwNTgiLCJcdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTU5MjdcdTYy'@;
put 'ZmYiLCJcdTMwN2ZcdTMwOTNcdTMwNmEiLCJcdTMwYjBcdTMwZmNcdTMwYjBcdTMwZWIiLCJcdTRlMTZcdTc1NGMiLCJcdTY2ZjhcdTdjNGQiLCJcdTdmNTFcdTU3NDAiLCJcdWIyZjdcdWIxMzciLCJcdTMwYjNcdTMwZTAiLCJcdTU5MjlcdTRlM2JcdTY1NTkiLCJcdTZlMzhcdTYyMGYiLCJ2'@;
put 'ZXJtXHhmNmdlbnNiZXJhdGVyIiwidmVybVx4ZjZnZW5zYmVyYXR1bmciLCJcdTRmMDFcdTRlMWEiLCJcdTRmZTFcdTYwNmYiLCJcdTU2MDlcdTkxY2NcdTU5MjdcdTkxNTJcdTVlOTciLCJcdTU2MDlcdTkxY2MiLCJcdTVlN2ZcdTRlMWMiLCJcdTY1M2ZcdTUyYTEiLCJ4eXoiLCJ5YWNodHMi'@;
put 'LCJ5YWhvbyIsInlhbWF4dW4iLCJ5YW5kZXgiLCJ5b2RvYmFzaGkiLCJ5b2dhIiwieW9rb2hhbWEiLCJ5b3UiLCJ5b3V0dWJlIiwieXVuIiwiemFwcG9zIiwiemFyYSIsInplcm8iLCJ6aXAiLCJ6b25lIiwienVlcmljaCIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiZ3Jh'@;
put 'cGhveC51cyIsIiouZGV2Y2RuYWNjZXNzby5jb20iLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiaGx4LmxpdmUiLCJhZG9iZWFlbWNsb3VkLm5ldCIsImhseC5wYWdlIiwiaGx4My5wYWdlIiwiYmVlcC5wbCIsImFpcmtpdGFwcHMuY29tIiwiYWlya2l0'@;
put 'YXBwcy1hdS5jb20iLCJhaXJraXRhcHBzLmV1IiwiYWl2ZW5jbG91ZC5jb20iLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsImNsb3VkZnJvbnQubmV0IiwiKi5j'@;
put 'b21wdXRlLmFtYXpvbmF3cy5jb20iLCIqLmNvbXB1dGUtMS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3'@;
put 'cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoLTEuZWxhc3Rp'@;
put 'Y2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwi'@;
put 'ZXUtd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwi'@;
put 'dXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20iLCIqLmVsYi5h'@;
put 'bWF6b25hd3MuY29tLmNuIiwiYXdzZ2xvYmFsYWNjZWxlcmF0b3IuY29tIiwiczMuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMt'@;
put 'YXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13'@;
put 'ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtZXh0ZXJuYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLXVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVh'@;
put 'c3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAt'@;
put 'c291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0'@;
put 'YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWVh'@;
put 'c3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25hd3Mu'@;
put 'Y29tIiwiczMtd2Vic2l0ZS1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1ldS13ZXN0LTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLXdlYnNpdGUtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13'@;
put 'ZWJzaXRlLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwidDNsM3AwcnQubmV0IiwidGVs'@;
put 'ZS5hbXVuZS5vcmciLCJhcGlnZWUuaW8iLCJzaWlpdGVzLmNvbSIsImFwcHNwYWNlaG9zdGVkLmNvbSIsImFwcHNwYWNldXNlcmNvbnRlbnQuY29tIiwiYXBwdWRvLm5ldCIsIm9uLWFwdGlibGUuY29tIiwidXNlci5hc2VpbmV0Lm5lLmpwIiwiZ3YudmMiLCJkLmd2LnZjIiwidXNlci5wYXJ0'@;
put 'eS5ldXMiLCJwaW1pZW50YS5vcmciLCJwb2l2cm9uLm9yZyIsInBvdGFnZXIub3JnIiwic3dlZXRwZXBwZXIub3JnIiwibXlhc3VzdG9yLmNvbSIsImNkbi5wcm9kLmF0bGFzc2lhbi1kZXYubmV0IiwidHJhbnNsYXRlZC5wYWdlIiwibXlmcml0ei5uZXQiLCJvbmF2c3RhY2submV0IiwiKi5h'@;
put 'd2Rldi5jYSIsIiouYWR2aXNvci53cyIsImVjb21tZXJjZS1zaG9wLnBsIiwiYi1kYXRhLmlvIiwiYmFja3BsYW5lYXBwLmlvIiwiYmFsZW5hLWRldmljZXMuY29tIiwicnMuYmEiLCIqLmJhbnphaS5jbG91ZCIsImFwcC5iYW56YWljbG91ZC5pbyIsIiouYmFja3lhcmRzLmJhbnphaWNsb3Vk'@;
put 'LmlvIiwiYmFzZS5lYyIsIm9mZmljaWFsLmVjIiwiYnV5c2hvcC5qcCIsImZhc2hpb25zdG9yZS5qcCIsImhhbmRjcmFmdGVkLmpwIiwia2F3YWlpc2hvcC5qcCIsInN1cGVyc2FsZS5qcCIsInRoZXNob3AuanAiLCJzaG9wc2VsZWN0Lm5ldCIsImJhc2Uuc2hvcCIsIiouYmVnZXQuYXBwIiwi'@;
put 'YmV0YWluYWJveC5jb20iLCJibnIubGEiLCJiaXRidWNrZXQuaW8iLCJibGFja2JhdWRjZG4ubmV0Iiwib2YuamUiLCJibHVlYml0ZS5pbyIsImJvb21sYS5uZXQiLCJib3V0aXIuY29tIiwiYm94ZnVzZS5pbyIsInNxdWFyZTcuY2giLCJicGxhY2VkLmNvbSIsImJwbGFjZWQuZGUiLCJzcXVh'@;
put 'cmU3LmRlIiwiYnBsYWNlZC5uZXQiLCJzcXVhcmU3Lm5ldCIsInNob3AuYnJlbmRseS5ycyIsImJyb3dzZXJzYWZldHltYXJrLmlvIiwidWswLmJpZ3YuaW8iLCJkaC5ieXRlbWFyay5jby51ayIsInZtLmJ5dGVtYXJrLmNvLnVrIiwiY2FmanMuY29tIiwibXljZC5ldSIsImRyci5hYyIsInV3'@;
put 'dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhZS5vcmciLCJici5jb20iLCJjbi5jb20iLCJjb20uZGUiLCJjb20uc2UiLCJkZS5jb20iLCJldS5jb20iLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJqcG4uY29tIiwibWV4LmNvbSIsInJ1LmNvbSIsInNhLmNvbSIsInNl'@;
put 'Lm5ldCIsInVrLmNvbSIsInVrLm5ldCIsInVzLmNvbSIsInphLmJ6IiwiemEuY29tIiwiYXIuY29tIiwiaHUuY29tIiwia3IuY29tIiwibm8uY29tIiwicWMuY29tIiwidXkuY29tIiwiYWZyaWNhLmNvbSIsImdyLmNvbSIsImluLm5ldCIsIndlYi5pbiIsInVzLm9yZyIsImNvLmNvbSIsImF1'@;
put 'cy5iYXNrZXRiYWxsIiwibnouYmFza2V0YmFsbCIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJjLmxhIiwiY2VydG1nci5vcmciLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xldmVyYXBwcy5pbyIsImNsZXJrLmFwcCIsImNsZXJrc3RhZ2UuYXBwIiwiKi5s'@;
put 'Y2wuZGV2IiwiKi5sY2xzdGFnZS5kZXYiLCIqLnN0Zy5kZXYiLCIqLnN0Z3N0YWdlLmRldiIsImNsaWNrcmlzaW5nLm5ldCIsImM2Ni5tZSIsImNsb3VkNjYud3MiLCJjbG91ZDY2LnpvbmUiLCJqZGV2Y2xvdWQuY29tIiwid3BkZXZjbG91ZC5jb20iLCJjbG91ZGFjY2Vzcy5ob3N0IiwiZnJl'@;
put 'ZXNpdGUuaG9zdCIsImNsb3VkYWNjZXNzLm5ldCIsImNsb3VkY29udHJvbGxlZC5jb20iLCJjbG91ZGNvbnRyb2xhcHAuY29tIiwiKi5jbG91ZGVyYS5zaXRlIiwicGFnZXMuZGV2IiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJ3b3JrZXJzLmRldiIsInduZXh0LmFwcCIsImNvLmNhIiwiKi5vdGFw'@;
put 'LmNvIiwiY28uY3oiLCJjLmNkbjc3Lm9yZyIsImNkbjc3LXNzbC5uZXQiLCJyLmNkbjc3Lm5ldCIsInJzYy5jZG43Ny5vcmciLCJzc2wub3JpZ2luLmNkbjc3LXNlY3VyZS5vcmciLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJpeiIsImNsb3VkbnMuY2x1YiIsImNsb3VkbnMuY2MiLCJjbG91'@;
put 'ZG5zLmV1IiwiY2xvdWRucy5pbiIsImNsb3VkbnMuaW5mbyIsImNsb3VkbnMub3JnIiwiY2xvdWRucy5wcm8iLCJjbG91ZG5zLnB3IiwiY2xvdWRucy51cyIsImNucHkuZ2RuIiwiY29kZWJlcmcucGFnZSIsImNvLm5sIiwiY28ubm8iLCJ3ZWJob3N0aW5nLmJlIiwiaG9zdGluZy1jbHVzdGVy'@;
put 'Lm5sIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkeW5hbWlzY2hlcy1kbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIs'@;
put 'ImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJyZWFsbS5jeiIsIiouY3J5cHRvbm9taWMubmV0IiwiY3VwY2FrZS5pcyIsImN1cnYuZGV2IiwiKi5jdXN0b21lci1vY2kuY29tIiwiKi5vY2kuY3VzdG9tZXItb2NpLmNvbSIsIioub2NwLmN1c3Rv'@;
put 'bWVyLW9jaS5jb20iLCIqLm9jcy5jdXN0b21lci1vY2kuY29tIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwiZm53ay5zaXRlIiwiZm9saW9uZXR3b3JrLnNpdGUiLCJwbGF0Zm9ybTAuYXBwIiwiZGFwbGllLm1lIiwibG9jYWxob3N0LmRhcGxpZS5tZSIsImRhdHRvbG9jYWwuY29tIiwiZGF0'@;
put 'dG9yZWxheS5jb20iLCJkYXR0b3dlYi5jb20iLCJteWRhdHRvLmNvbSIsImRhdHRvbG9jYWwubmV0IiwibXlkYXR0by5uZXQiLCJiaXouZGsiLCJjby5kayIsImZpcm0uZGsiLCJyZWcuZGsiLCJzdG9yZS5kayIsImR5bmRucy5kYXBwbm9kZS5pbyIsIiouZGFwcHMuZWFydGgiLCIqLmJ6ei5k'@;
put 'YXBwcy5lYXJ0aCIsImJ1aWx0d2l0aGRhcmsuY29tIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGRuczUuY29tIiwiZGViaWFuLm5ldCIsImRlbm8uZGV2IiwiZGVuby1zdGFnaW5nLmRldiIsImRlZHluLmlvIiwiZGV0'@;
put 'YS5hcHAiLCJkZXRhLmRldiIsIioucnNzLm15LmlkIiwiKi5kaWhlci5zb2x1dGlvbnMiLCJkaXNjb3Jkc2F5cy5jb20iLCJkaXNjb3Jkc2V6LmNvbSIsImpvemkuYml6IiwiZG5zaG9tZS5kZSIsIm9ubGluZS50aCIsInNob3AudGgiLCJkcmF5ZGRucy5jb20iLCJzaG9wYXJlbmEucGwiLCJk'@;
put 'cmVhbWhvc3RlcnMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiYmlwLnNoIiwiYml0YnJpZGdlLm5ldCIsImR5LmZpIiwidHVuay5vcmciLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5j'@;
put 'b20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5j'@;
put 'b20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJkeW5kbnMuYml6IiwiZHluZG5zLmluZm8iLCJkeW5kbnMub3JnIiwiZHluZG5zLnR2IiwiYXQtYmFuZC1jYW1wLm5ldCIsImF0aC5jeCIsImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJhcnJlbGwtb2Yta25vd2xl'@;
put 'ZGdlLmluZm8iLCJiZXR0ZXItdGhhbi50diIsImJsb2dkbnMuY29tIiwiYmxvZ2Rucy5uZXQiLCJibG9nZG5zLm9yZyIsImJsb2dzaXRlLm9yZyIsImJvbGRseWdvaW5nbm93aGVyZS5vcmciLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImNlY2hpcmUuY29tIiwiZG5zYWxpYXMu'@;
put 'Y29tIiwiZG5zYWxpYXMubmV0IiwiZG5zYWxpYXMub3JnIiwiZG5zZG9qby5jb20iLCJkbnNkb2pvLm5ldCIsImRuc2Rvam8ub3JnIiwiZG9lcy1pdC5uZXQiLCJkb2VzbnRleGlzdC5jb20iLCJkb2VzbnRleGlzdC5vcmciLCJkb250ZXhpc3QuY29tIiwiZG9udGV4aXN0Lm5ldCIsImRvbnRl'@;
put 'eGlzdC5vcmciLCJkb29tZG5zLmNvbSIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bi1vLXNhdXIuY29tIiwiZHluYWxpYXMuY29tIiwiZHluYWxpYXMubmV0IiwiZHluYWxpYXMub3JnIiwiZHluYXRob21lLm5ldCIsImR5bmRucy53cyIsImVuZG9maW50ZXJuZXQubmV0IiwiZW5k'@;
put 'b2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImVzdC1hLWxhLW1haXNvbi5jb20iLCJlc3QtYS1sYS1tYXNpb24uY29tIiwiZXN0LWxlLXBhdHJvbi5jb20iLCJlc3QtbW9uLWJsb2d1ZXVyLmNvbSIsImZvci1iZXR0ZXIuYml6IiwiZm9yLW1vcmUuYml6IiwiZm9yLW91'@;
put 'ci5pbmZvIiwiZm9yLXNvbWUuYml6IiwiZm9yLXRoZS5iaXoiLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJmcm9tLWFrLmNvbSIsImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWF6Lm5ldCIsImZyb20tY2EuY29tIiwiZnJvbS1jby5uZXQiLCJmcm9tLWN0'@;
put 'LmNvbSIsImZyb20tZGMuY29tIiwiZnJvbS1kZS5jb20iLCJmcm9tLWZsLmNvbSIsImZyb20tZ2EuY29tIiwiZnJvbS1oaS5jb20iLCJmcm9tLWlhLmNvbSIsImZyb20taWQuY29tIiwiZnJvbS1pbC5jb20iLCJmcm9tLWluLmNvbSIsImZyb20ta3MuY29tIiwiZnJvbS1reS5jb20iLCJmcm9t'@;
put 'LWxhLm5ldCIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1lLm9yZyIsImZyb20tbWkuY29tIiwiZnJvbS1tbi5jb20iLCJmcm9tLW1vLmNvbSIsImZyb20tbXMuY29tIiwiZnJvbS1tdC5jb20iLCJmcm9tLW5jLmNvbSIsImZyb20tbmQuY29tIiwiZnJvbS1uZS5jb20iLCJm'@;
put 'cm9tLW5oLmNvbSIsImZyb20tbmouY29tIiwiZnJvbS1ubS5jb20iLCJmcm9tLW52LmNvbSIsImZyb20tbnkubmV0IiwiZnJvbS1vaC5jb20iLCJmcm9tLW9rLmNvbSIsImZyb20tb3IuY29tIiwiZnJvbS1wYS5jb20iLCJmcm9tLXByLmNvbSIsImZyb20tcmkuY29tIiwiZnJvbS1zYy5jb20i'@;
put 'LCJmcm9tLXNkLmNvbSIsImZyb20tdG4uY29tIiwiZnJvbS10eC5jb20iLCJmcm9tLXV0LmNvbSIsImZyb20tdmEuY29tIiwiZnJvbS12dC5jb20iLCJmcm9tLXdhLmNvbSIsImZyb20td2kuY29tIiwiZnJvbS13di5jb20iLCJmcm9tLXd5LmNvbSIsImZ0cGFjY2Vzcy5jYyIsImZ1ZXR0ZXJ0'@;
put 'ZGFzbmV0ei5kZSIsImdhbWUtaG9zdC5vcmciLCJnYW1lLXNlcnZlci5jYyIsImdldG15aXAuY29tIiwiZ2V0cy1pdC5uZXQiLCJnby5keW5kbnMub3JnIiwiZ290ZG5zLmNvbSIsImdvdGRucy5vcmciLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhhbS1yYWRpby1vcC5u'@;
put 'ZXQiLCJoZXJlLWZvci1tb3JlLmluZm8iLCJob2JieS1zaXRlLmNvbSIsImhvYmJ5LXNpdGUub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiaG9tZWRucy5vcmciLCJob21lZnRwLm5ldCIsImhvbWVmdHAub3JnIiwiaG9tZWlwLm5ldCIsImhvbWVsaW51eC5jb20iLCJob21lbGludXgubmV0Iiwi'@;
put 'aG9tZWxpbnV4Lm9yZyIsImhvbWV1bml4LmNvbSIsImhvbWV1bml4Lm5ldCIsImhvbWV1bml4Lm9yZyIsImlhbWFsbGFtYS5jb20iLCJpbi10aGUtYmFuZC5uZXQiLCJpcy1hLWFuYXJjaGlzdC5jb20iLCJpcy1hLWJsb2dnZXIuY29tIiwiaXMtYS1ib29ra2VlcGVyLmNvbSIsImlzLWEtYnJ1'@;
put 'aW5zZmFuLm9yZyIsImlzLWEtYnVsbHMtZmFuLmNvbSIsImlzLWEtY2FuZGlkYXRlLm9yZyIsImlzLWEtY2F0ZXJlci5jb20iLCJpcy1hLWNlbHRpY3NmYW4ub3JnIiwiaXMtYS1jaGVmLmNvbSIsImlzLWEtY2hlZi5uZXQiLCJpcy1hLWNoZWYub3JnIiwiaXMtYS1jb25zZXJ2YXRpdmUuY29t'@;
put 'IiwiaXMtYS1jcGEuY29tIiwiaXMtYS1jdWJpY2xlLXNsYXZlLmNvbSIsImlzLWEtZGVtb2NyYXQuY29tIiwiaXMtYS1kZXNpZ25lci5jb20iLCJpcy1hLWRvY3Rvci5jb20iLCJpcy1hLWZpbmFuY2lhbGFkdmlzb3IuY29tIiwiaXMtYS1nZWVrLmNvbSIsImlzLWEtZ2Vlay5uZXQiLCJpcy1h'@;
put 'LWdlZWsub3JnIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWtuaWdodC5vcmciLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlz'@;
put 'LWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtbGxhbWEuY29tIiwiaXMtYS1tdXNpY2lhbi5jb20iLCJpcy1hLW5hc2NhcmZhbi5jb20iLCJpcy1hLW51cnNlLmNvbSIsImlzLWEtcGFpbnRlci5jb20iLCJpcy1hLXBhdHNmYW4ub3JnIiwiaXMtYS1wZXJz'@;
put 'b25hbHRyYWluZXIuY29tIiwiaXMtYS1waG90b2dyYXBoZXIuY29tIiwiaXMtYS1wbGF5ZXIuY29tIiwiaXMtYS1yZXB1YmxpY2FuLmNvbSIsImlzLWEtcm9ja3N0YXIuY29tIiwiaXMtYS1zb2NpYWxpc3QuY29tIiwiaXMtYS1zb3hmYW4ub3JnIiwiaXMtYS1zdHVkZW50LmNvbSIsImlzLWEt'@;
put 'dGVhY2hlci5jb20iLCJpcy1hLXRlY2hpZS5jb20iLCJpcy1hLXRoZXJhcGlzdC5jb20iLCJpcy1hbi1hY2NvdW50YW50LmNvbSIsImlzLWFuLWFjdG9yLmNvbSIsImlzLWFuLWFjdHJlc3MuY29tIiwiaXMtYW4tYW5hcmNoaXN0LmNvbSIsImlzLWFuLWFydGlzdC5jb20iLCJpcy1hbi1lbmdp'@;
put 'bmVlci5jb20iLCJpcy1hbi1lbnRlcnRhaW5lci5jb20iLCJpcy1ieS51cyIsImlzLWNlcnRpZmllZC5jb20iLCJpcy1mb3VuZC5vcmciLCJpcy1nb25lLmNvbSIsImlzLWludG8tYW5pbWUuY29tIiwiaXMtaW50by1jYXJzLmNvbSIsImlzLWludG8tY2FydG9vbnMuY29tIiwiaXMtaW50by1n'@;
put 'YW1lcy5jb20iLCJpcy1sZWV0LmNvbSIsImlzLWxvc3Qub3JnIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zYXZlZC5vcmciLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy12ZXJ5LWJhZC5vcmciLCJpcy12ZXJ5LWV2aWwub3JnIiwiaXMtdmVyeS1nb29kLm9yZyIs'@;
put 'ImlzLXZlcnktbmljZS5vcmciLCJpcy12ZXJ5LXN3ZWV0Lm9yZyIsImlzLXdpdGgtdGhlYmFuZC5jb20iLCJpc2EtZ2Vlay5jb20iLCJpc2EtZ2Vlay5uZXQiLCJpc2EtZ2Vlay5vcmciLCJpc2EtaG9ja2V5bnV0LmNvbSIsImlzc21hcnRlcnRoYW55b3UuY29tIiwiaXN0ZWluZ2Vlay5kZSIs'@;
put 'ImlzdG1laW4uZGUiLCJraWNrcy1hc3MubmV0Iiwia2lja3MtYXNzLm9yZyIsImtub3dzaXRhbGwuaW5mbyIsImxhbmQtNC1zYWxlLnVzIiwibGVidGltbmV0ei5kZSIsImxlaXR1bmdzZW4uZGUiLCJsaWtlcy1waWUuY29tIiwibGlrZXNjYW5keS5jb20iLCJtZXJzZWluZS5udSIsIm1pbmUu'@;
put 'bnUiLCJtaXNjb25mdXNlZC5vcmciLCJteXBldHMud3MiLCJteXBob3Rvcy5jYyIsIm5lYXQtdXJsLmNvbSIsIm9mZmljZS1vbi10aGUubmV0Iiwib24tdGhlLXdlYi50diIsInBvZHpvbmUubmV0IiwicG9kem9uZS5vcmciLCJyZWFkbXlibG9nLm9yZyIsInNhdmVzLXRoZS13aGFsZXMuY29t'@;
put 'Iiwic2NyYXBwZXItc2l0ZS5uZXQiLCJzY3JhcHBpbmcuY2MiLCJzZWxmaXAuYml6Iiwic2VsZmlwLmNvbSIsInNlbGZpcC5pbmZvIiwic2VsZmlwLm5ldCIsInNlbGZpcC5vcmciLCJzZWxscy1mb3ItbGVzcy5jb20iLCJzZWxscy1mb3ItdS5jb20iLCJzZWxscy1pdC5uZXQiLCJzZWxsc3lv'@;
put 'dXJob21lLm9yZyIsInNlcnZlYmJzLmNvbSIsInNlcnZlYmJzLm5ldCIsInNlcnZlYmJzLm9yZyIsInNlcnZlZnRwLm5ldCIsInNlcnZlZnRwLm9yZyIsInNlcnZlZ2FtZS5vcmciLCJzaGFja25ldC5udSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJzdHVmZi00LXNh'@;
put 'bGUub3JnIiwic3R1ZmYtNC1zYWxlLnVzIiwidGVhY2hlcy15b2dhLmNvbSIsInRocnVoZXJlLm5ldCIsInRyYWV1bXRnZXJhZGUuZGUiLCJ3ZWJob3AuYml6Iiwid2ViaG9wLmluZm8iLCJ3ZWJob3AubmV0Iiwid2ViaG9wLm9yZyIsIndvcnNlLXRoYW4udHYiLCJ3cml0ZXN0aGlzYmxvZy5j'@;
put 'b20iLCJkZG5zcy5kZSIsImR5bi5kZG5zcy5kZSIsImR5bmRucy5kZG5zcy5kZSIsImR5bmRuczEuZGUiLCJkeW4taXAyNC5kZSIsImhvbWUtd2Vic2VydmVyLmRlIiwiZHluLmhvbWUtd2Vic2VydmVyLmRlIiwibXlob21lLXNlcnZlci5kZSIsImRkbnNzLm9yZyIsImRlZmluaW1hLm5ldCIs'@;
put 'ImRlZmluaW1hLmlvIiwib25kaWdpdGFsb2NlYW4uYXBwIiwiKi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tIiwiYmNpLmRuc3RyYWNlLnBybyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIs'@;
put 'Im9vZ3V5LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiYmxvZ3NpdGUueHl6IiwiZHludjYu'@;
put 'bmV0IiwiZTQuY3oiLCJlZXJvLm9ubGluZSIsImVlcm8tc3RhZ2Uub25saW5lIiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsIm9ucmVk'@;
put 'Lm9uZSIsInN0YWdpbmcub25yZWQub25lIiwiZXUuZW5jb3dheS5jbG91ZCIsImV1Lm9yZyIsImFsLmV1Lm9yZyIsImFzc28uZXUub3JnIiwiYXQuZXUub3JnIiwiYXUuZXUub3JnIiwiYmUuZXUub3JnIiwiYmcuZXUub3JnIiwiY2EuZXUub3JnIiwiY2QuZXUub3JnIiwiY2guZXUub3JnIiwi'@;
put 'Y24uZXUub3JnIiwiY3kuZXUub3JnIiwiY3ouZXUub3JnIiwiZGUuZXUub3JnIiwiZGsuZXUub3JnIiwiZWR1LmV1Lm9yZyIsImVlLmV1Lm9yZyIsImVzLmV1Lm9yZyIsImZpLmV1Lm9yZyIsImZyLmV1Lm9yZyIsImdyLmV1Lm9yZyIsImhyLmV1Lm9yZyIsImh1LmV1Lm9yZyIsImllLmV1Lm9y'@;
put 'ZyIsImlsLmV1Lm9yZyIsImluLmV1Lm9yZyIsImludC5ldS5vcmciLCJpcy5ldS5vcmciLCJpdC5ldS5vcmciLCJqcC5ldS5vcmciLCJrci5ldS5vcmciLCJsdC5ldS5vcmciLCJsdS5ldS5vcmciLCJsdi5ldS5vcmciLCJtYy5ldS5vcmciLCJtZS5ldS5vcmciLCJtay5ldS5vcmciLCJtdC5l'@;
put 'dS5vcmciLCJteS5ldS5vcmciLCJuZXQuZXUub3JnIiwibmcuZXUub3JnIiwibmwuZXUub3JnIiwibm8uZXUub3JnIiwibnouZXUub3JnIiwicGFyaXMuZXUub3JnIiwicGwuZXUub3JnIiwicHQuZXUub3JnIiwicS1hLmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9y'@;
put 'ZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZl'@;
put 'bm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJvbmZhYnJpY2EuY29tIiwiYXBwcy5mYnNieC5j'@;
put 'b20iLCJydS5uZXQiLCJhZHlnZXlhLnJ1IiwiYmFzaGtpcmlhLnJ1IiwiYmlyLnJ1IiwiY2JnLnJ1IiwiY29tLnJ1IiwiZGFnZXN0YW4ucnUiLCJncm96bnkucnUiLCJrYWxteWtpYS5ydSIsImt1c3RhbmFpLnJ1IiwibWFyaW5lLnJ1IiwibW9yZG92aWEucnUiLCJtc2sucnUiLCJteXRpcy5y'@;
put 'dSIsIm5hbGNoaWsucnUiLCJub3YucnUiLCJweWF0aWdvcnNrLnJ1Iiwic3BiLnJ1IiwidmxhZGlrYXZrYXoucnUiLCJ2bGFkaW1pci5ydSIsImFia2hhemlhLnN1IiwiYWR5Z2V5YS5zdSIsImFrdHl1Ymluc2suc3UiLCJhcmtoYW5nZWxzay5zdSIsImFybWVuaWEuc3UiLCJhc2hnYWJhZC5z'@;
put 'dSIsImF6ZXJiYWlqYW4uc3UiLCJiYWxhc2hvdi5zdSIsImJhc2hraXJpYS5zdSIsImJyeWFuc2suc3UiLCJidWtoYXJhLnN1IiwiY2hpbWtlbnQuc3UiLCJkYWdlc3Rhbi5zdSIsImVhc3Qta2F6YWtoc3Rhbi5zdSIsImV4bmV0LnN1IiwiZ2VvcmdpYS5zdSIsImdyb3pueS5zdSIsIml2YW5v'@;
put 'dm8uc3UiLCJqYW1ieWwuc3UiLCJrYWxteWtpYS5zdSIsImthbHVnYS5zdSIsImthcmFjb2wuc3UiLCJrYXJhZ2FuZGEuc3UiLCJrYXJlbGlhLnN1Iiwia2hha2Fzc2lhLnN1Iiwia3Jhc25vZGFyLnN1Iiwia3VyZ2FuLnN1Iiwia3VzdGFuYWkuc3UiLCJsZW51Zy5zdSIsIm1hbmd5c2hsYWsu'@;
put 'c3UiLCJtb3Jkb3ZpYS5zdSIsIm1zay5zdSIsIm11cm1hbnNrLnN1IiwibmFsY2hpay5zdSIsIm5hdm9pLnN1Iiwibm9ydGgta2F6YWtoc3Rhbi5zdSIsIm5vdi5zdSIsIm9ibmluc2suc3UiLCJwZW56YS5zdSIsInBva3JvdnNrLnN1Iiwic29jaGkuc3UiLCJzcGIuc3UiLCJ0YXNoa2VudC5z'@;
put 'dSIsInRlcm1lei5zdSIsInRvZ2xpYXR0aS5zdSIsInRyb2l0c2suc3UiLCJ0c2VsaW5vZ3JhZC5zdSIsInR1bGEuc3UiLCJ0dXZhLnN1IiwidmxhZGlrYXZrYXouc3UiLCJ2bGFkaW1pci5zdSIsInZvbG9nZGEuc3UiLCJjaGFubmVsc2R2ci5uZXQiLCJ1LmNoYW5uZWxzZHZyLm5ldCIsImVk'@;
put 'Z2Vjb21wdXRlLmFwcCIsImZhc3RseS10ZXJyYXJpdW0uY29tIiwiZmFzdGx5bGIubmV0IiwibWFwLmZhc3RseWxiLm5ldCIsImZyZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFz'@;
put 'dGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0dnBzLXNlcnZlci5jb20iLCJmYXN0dnBzLmhvc3QiLCJteWZhc3QuaG9zdCIsImZhc3R2cHMuc2l0ZSIsIm15ZmFzdC5zcGFjZSIsImZlZG9yYWluZnJhY2xvdWQub3JnIiwiZmVkb3JhcGVv'@;
put 'cGxlLm9yZyIsImNsb3VkLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLnN0Zy5mZWRvcmFwcm9qZWN0Lm9yZyIsImNvbm4udWsiLCJjb3Byby51ayIsImhvc3AudWsiLCJteWRvYmlzcy5jb20iLCJmaC1tdWVuc3Rlci5pbyIsImZpbGVnZWFy'@;
put 'Lm1lIiwiZmlsZWdlYXItYXUubWUiLCJmaWxlZ2Vhci1kZS5tZSIsImZpbGVnZWFyLWdiLm1lIiwiZmlsZWdlYXItaWUubWUiLCJmaWxlZ2Vhci1qcC5tZSIsImZpbGVnZWFyLXNnLm1lIiwiZmlyZWJhc2VhcHAuY29tIiwiZmlyZXdlYi5hcHAiLCJmbGFwLmlkIiwib25mbGFzaGRyaXZlLmFw'@;
put 'cCIsImZsZHJ2LmNvbSIsImZseS5kZXYiLCJlZGdlYXBwLm5ldCIsInNody5pbyIsImZseW5uaG9zdGluZy5uZXQiLCJmb3JnZWJsb2Nrcy5jb20iLCJpZC5mb3JnZXJvY2suaW8iLCJmcmFtZXIuYXBwIiwiZnJhbWVyY2FudmFzLmNvbSIsIiouZnJ1c2t5LmRlIiwicmF2cGFnZS5jby5pbCIs'@;
put 'IjBlLnZjIiwiZnJlZWJveC1vcy5jb20iLCJmcmVlYm94b3MuY29tIiwiZmJ4LW9zLmZyIiwiZmJ4b3MuZnIiLCJmcmVlYm94LW9zLmZyIiwiZnJlZWJveG9zLmZyIiwiZnJlZWRlc2t0b3Aub3JnIiwiZnJlZW15aXAuY29tIiwid2llbi5mdW5rZmV1ZXIuYXQiLCIqLmZ1dHVyZWNtcy5hdCIs'@;
put 'IiouZXguZnV0dXJlY21zLmF0IiwiKi5pbi5mdXR1cmVjbXMuYXQiLCJmdXR1cmVob3N0aW5nLmF0IiwiZnV0dXJlbWFpbGluZy5hdCIsIiouZXgub3J0c2luZm8uYXQiLCIqLmt1bmRlbi5vcnRzaW5mby5hdCIsIiouc3RhdGljcy5jbG91ZCIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsi'@;
put 'LCJpbmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiY2FtcGFpZ24uZ292LnVrIiwic2Vydmlj'@;
put 'ZS5nb3YudWsiLCJhcGkuZ292LnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImdob3N0LmlvIiwiZ3NqLmJ6IiwiZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwiZ2l0aHVi'@;
put 'cHJldmlldy5kZXYiLCJnaXRodWIuaW8iLCJnaXRsYWIuaW8iLCJnaXRhcHAuc2kiLCJnaXRwYWdlLnNpIiwiZ2xpdGNoLm1lIiwibm9nLmNvbW11bml0eSIsImNvLnJvIiwic2hvcC5ybyIsImxvbGlwb3AuaW8iLCJhbmdyeS5qcCIsImJhYnlibHVlLmpwIiwiYmFieW1pbGsuanAiLCJiYWNr'@;
put 'ZHJvcC5qcCIsImJhbWJpbmEuanAiLCJiaXR0ZXIuanAiLCJibHVzaC5qcCIsImJvby5qcCIsImJveS5qcCIsImJveWZyaWVuZC5qcCIsImJ1dC5qcCIsImNhbmR5cG9wLmpwIiwiY2Fwb28uanAiLCJjYXRmb29kLmpwIiwiY2hlYXAuanAiLCJjaGljYXBwYS5qcCIsImNoaWxsb3V0LmpwIiwi'@;
put 'Y2hpcHMuanAiLCJjaG93ZGVyLmpwIiwiY2h1LmpwIiwiY2lhby5qcCIsImNvY290dGUuanAiLCJjb29sYmxvZy5qcCIsImNyYW5reS5qcCIsImN1dGVnaXJsLmpwIiwiZGFhLmpwIiwiZGVjYS5qcCIsImRlY2kuanAiLCJkaWdpY2suanAiLCJlZ29pc20uanAiLCJmYWtlZnVyLmpwIiwiZmVt'@;
put 'LmpwIiwiZmxpZXIuanAiLCJmbG9wcHkuanAiLCJmb29sLmpwIiwiZnJlbmNoa2lzcy5qcCIsImdpcmxmcmllbmQuanAiLCJnaXJseS5qcCIsImdsb29teS5qcCIsImdvbm5hLmpwIiwiZ3JlYXRlci5qcCIsImhhY2NhLmpwIiwiaGVhdnkuanAiLCJoZXIuanAiLCJoaWhvLmpwIiwiaGlwcHku'@;
put 'anAiLCJob2x5LmpwIiwiaHVuZ3J5LmpwIiwiaWN1cnVzLmpwIiwiaXRpZ28uanAiLCJqZWxseWJlYW4uanAiLCJraWtpcmFyYS5qcCIsImtpbGwuanAiLCJraWxvLmpwIiwia3Vyb24uanAiLCJsaXR0bGVzdGFyLmpwIiwibG9saXBvcG1jLmpwIiwibG9saXRhcHVuay5qcCIsImxvbW8uanAi'@;
put 'LCJsb3ZlcG9wLmpwIiwibG92ZXNpY2suanAiLCJtYWluLmpwIiwibW9kcy5qcCIsIm1vbmQuanAiLCJtb25nb2xpYW4uanAiLCJtb28uanAiLCJuYW1hc3RlLmpwIiwibmlraXRhLmpwIiwibm9idXNoaS5qcCIsIm5vb3IuanAiLCJvb3BzLmpwIiwicGFyYWxsZWwuanAiLCJwYXJhc2l0ZS5q'@;
put 'cCIsInBlY29yaS5qcCIsInBlZXdlZS5qcCIsInBlbm5lLmpwIiwicGVwcGVyLmpwIiwicGVybWEuanAiLCJwaWdib2F0LmpwIiwicGlub2tvLmpwIiwicHVueXUuanAiLCJwdXB1LmpwIiwicHVzc3ljYXQuanAiLCJweWEuanAiLCJyYWluZHJvcC5qcCIsInJlYWR5bWFkZS5qcCIsInNhZGlz'@;
put 'dC5qcCIsInNjaG9vbGJ1cy5qcCIsInNlY3JldC5qcCIsInN0YWJhLmpwIiwic3RyaXBwZXIuanAiLCJzdWIuanAiLCJzdW5ueWRheS5qcCIsInRoaWNrLmpwIiwidG9ua290c3UuanAiLCJ1bmRlci5qcCIsInVwcGVyLmpwIiwidmVsdmV0LmpwIiwidmVyc2UuanAiLCJ2ZXJzdXMuanAiLCJ2'@;
put 'aXZpYW4uanAiLCJ3YXRzb24uanAiLCJ3ZWJsaWtlLmpwIiwid2hpdGVzbm93LmpwIiwiem9tYmllLmpwIiwiaGV0ZW1sLm5ldCIsImNsb3VkYXBwcy5kaWdpdGFsIiwibG9uZG9uLmNsb3VkYXBwcy5kaWdpdGFsIiwicHltbnQudWsiLCJob21lb2ZmaWNlLmdvdi51ayIsInJvLmltIiwiZ29p'@;
put 'cC5kZSIsInJ1bi5hcHAiLCJhLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJwdWJsaXNo'@;
put 'cHJveHkuY29tIiwid2l0aGdvb2dsZS5jb20iLCJ3aXRoeW91dHViZS5jb20iLCIqLmdhdGV3YXkuZGV2IiwiY2xvdWQuZ29vZyIsInRyYW5zbGF0ZS5nb29nIiwiKi51c2VyY29udGVudC5nb29nIiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuYWUiLCJibG9nc3BvdC5hbCIsImJs'@;
put 'b2dzcG90LmFtIiwiYmxvZ3Nwb3QuYmEiLCJibG9nc3BvdC5iZSIsImJsb2dzcG90LmJnIiwiYmxvZ3Nwb3QuYmoiLCJibG9nc3BvdC5jYSIsImJsb2dzcG90LmNmIiwiYmxvZ3Nwb3QuY2giLCJibG9nc3BvdC5jbCIsImJsb2dzcG90LmNvLmF0IiwiYmxvZ3Nwb3QuY28uaWQiLCJibG9nc3Bv'@;
put 'dC5jby5pbCIsImJsb2dzcG90LmNvLmtlIiwiYmxvZ3Nwb3QuY28ubnoiLCJibG9nc3BvdC5jby51ayIsImJsb2dzcG90LmNvLnphIiwiYmxvZ3Nwb3QuY29tIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3QuY29tLmF1IiwiYmxvZ3Nwb3QuY29tLmJyIiwiYmxvZ3Nwb3QuY29tLmJ5Iiwi'@;
put 'YmxvZ3Nwb3QuY29tLmNvIiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY29tLmVlIiwiYmxvZ3Nwb3QuY29tLmVnIiwiYmxvZ3Nwb3QuY29tLmVzIiwiYmxvZ3Nwb3QuY29tLm10IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QuY29tLnRyIiwiYmxvZ3Nwb3QuY29tLnV5IiwiYmxv'@;
put 'Z3Nwb3QuY3YiLCJibG9nc3BvdC5jeiIsImJsb2dzcG90LmRlIiwiYmxvZ3Nwb3QuZGsiLCJibG9nc3BvdC5maSIsImJsb2dzcG90LmZyIiwiYmxvZ3Nwb3QuZ3IiLCJibG9nc3BvdC5oayIsImJsb2dzcG90LmhyIiwiYmxvZ3Nwb3QuaHUiLCJibG9nc3BvdC5pZSIsImJsb2dzcG90LmluIiwi'@;
put 'YmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3Qua3IiLCJibG9nc3BvdC5saSIsImJsb2dzcG90Lmx0IiwiYmxvZ3Nwb3QubHUiLCJibG9nc3BvdC5tZCIsImJsb2dzcG90Lm1rIiwiYmxvZ3Nwb3QubXIiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15'@;
put 'IiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LnBlIiwiYmxvZ3Nwb3QucHQiLCJibG9nc3BvdC5xYSIsImJsb2dzcG90LnJlIiwiYmxvZ3Nwb3Qucm8iLCJibG9nc3BvdC5ycyIsImJsb2dzcG90LnJ1IiwiYmxvZ3Nwb3Quc2UiLCJibG9nc3BvdC5zZyIsImJsb2dzcG90'@;
put 'LnNpIiwiYmxvZ3Nwb3Quc2siLCJibG9nc3BvdC5zbiIsImJsb2dzcG90LnRkIiwiYmxvZ3Nwb3QudHciLCJibG9nc3BvdC51ZyIsImJsb2dzcG90LnZuIiwiZ291cGlsZS5mciIsImdvdi5ubCIsImF3c21wcGwuY29tIiwiZ1x4ZmNuc3RpZ2Jlc3RlbGxlbi5kZSIsImdceGZjbnN0aWdsaWVm'@;
put 'ZXJuLmRlIiwiZmluLmNpIiwiZnJlZS5ociIsImNhYS5saSIsInVhLnJzIiwiY29uZi5zZSIsImhzLnpvbmUiLCJocy5ydW4iLCJoYXNoYmFuZy5zaCIsImhhc3VyYS5hcHAiLCJoYXN1cmEtYXBwLmlvIiwicGFnZXMuaXQuaHMtaGVpbGJyb25uLmRlIiwiaGVwZm9yZ2Uub3JnIiwiaGVyb2t1'@;
put 'YXBwLmNvbSIsImhlcm9rdXNzbC5jb20iLCJyYXZlbmRiLmNsb3VkIiwibXlyYXZlbmRiLmNvbSIsInJhdmVuZGIuY29tbXVuaXR5IiwicmF2ZW5kYi5tZSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwic2VjYWFzLmhrIiwiaG9wbGl4LnNob3AiLCJv'@;
put 'cnguYml6IiwiYml6LmdsIiwiY29sLm5nIiwiZmlybS5uZyIsImdlbi5uZyIsImx0ZC5uZyIsIm5nby5uZyIsImVkdS5zY290Iiwic2NoLnNvIiwiaG9zdHlob3N0aW5nLmlvIiwiaFx4ZTRra2luZW4uZmkiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJpa2kuZmkiLCJpYnhv'@;
put 'cy5pdCIsImlsaWFkYm94b3MuaXQiLCJpbXBlcnRyaXhjZG4uY29tIiwiaW1wZXJ0cml4LmNvbSIsInNtdXNoY2RuLmNvbSIsIndwaG9zdGVkbWFpbC5jb20iLCJ3cG11Y2RuLmNvbSIsInRlbXB1cmwuaG9zdCIsIndwbXVkZXYuaG9zdCIsImR5bi1iZXJsaW4uZGUiLCJpbi1iZXJsaW4uZGUi'@;
put 'LCJpbi1icmIuZGUiLCJpbi1idXR0ZXIuZGUiLCJpbi1kc2wuZGUiLCJpbi1kc2wubmV0IiwiaW4tZHNsLm9yZyIsImluLXZwbi5kZSIsImluLXZwbi5uZXQiLCJpbi12cG4ub3JnIiwiYml6LmF0IiwiaW5mby5hdCIsImluZm8uY3giLCJhYy5sZWcuYnIiLCJhbC5sZWcuYnIiLCJhbS5sZWcu'@;
put 'YnIiLCJhcC5sZWcuYnIiLCJiYS5sZWcuYnIiLCJjZS5sZWcuYnIiLCJkZi5sZWcuYnIiLCJlcy5sZWcuYnIiLCJnby5sZWcuYnIiLCJtYS5sZWcuYnIiLCJtZy5sZWcuYnIiLCJtcy5sZWcuYnIiLCJtdC5sZWcuYnIiLCJwYS5sZWcuYnIiLCJwYi5sZWcuYnIiLCJwZS5sZWcuYnIiLCJwaS5s'@;
put 'ZWcuYnIiLCJwci5sZWcuYnIiLCJyai5sZWcuYnIiLCJybi5sZWcuYnIiLCJyby5sZWcuYnIiLCJyci5sZWcuYnIiLCJycy5sZWcuYnIiLCJzYy5sZWcuYnIiLCJzZS5sZWcuYnIiLCJzcC5sZWcuYnIiLCJ0by5sZWcuYnIiLCJwaXhvbGluby5jb20iLCJuYTR1LnJ1IiwiaW9wc3lzLnNlIiwi'@;
put 'aXBpZm9ueS5uZXQiLCJpc2VydnNjaHVsZS5kZSIsIm1laW4taXNlcnYuZGUiLCJzY2h1bHBsYXR0Zm9ybS5kZSIsInNjaHVsc2VydmVyLmRlIiwidGVzdC1pc2Vydi5kZSIsImlzZXJ2LmRldiIsImlvYmIubmV0IiwibWVsLmNsb3VkbGV0cy5jb20uYXUiLCJjbG91ZC5pbnRlcmhvc3Rzb2x1'@;
put 'dGlvbnMuYmUiLCJ1c2Vycy5zY2FsZS52aXJ0dWFsY2xvdWQuY29tLmJyIiwibXljbG91ZC5ieSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5jbG91ZCIs'@;
put 'Iml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1ldGVsLmNs'@;
put 'b3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiYW1zY29tcHV0ZS5jb20iLCJjbGlja2V0Y2xvdWQuY29tIiwiZG9wYWFz'@;
put 'LmNvbSIsImhpZG9yYS5jb20iLCJwYWFzLmhvc3RlZC1ieS1wcmV2aWRlci5jb20iLCJyYWctY2xvdWQuaG9zdGV1ci5jb20iLCJyYWctY2xvdWQtY2guaG9zdGV1ci5jb20iLCJqY2xvdWQuaWstc2VydmVyLmNvbSIsImpjbG91ZC12ZXItanBjLmlrLXNlcnZlci5jb20iLCJkZW1vLmplbGFz'@;
put 'dGljLmNvbSIsImtpbGF0aXJvbi5jb20iLCJwYWFzLm1hc3NpdmVncmlkLmNvbSIsImplZC53YWZhaWNsb3VkLmNvbSIsImxvbi53YWZhaWNsb3VkLmNvbSIsInJ5ZC53YWZhaWNsb3VkLmNvbSIsImouc2NhbGVmb3JjZS5jb20uY3kiLCJqZWxhc3RpYy5kb2dhZG8uZXUiLCJmaS5jbG91ZHBs'@;
put 'YXRmb3JtLmZpIiwiZGVtby5kYXRhY2VudGVyLmZpIiwicGFhcy5kYXRhY2VudGVyLmZpIiwiamVsZS5ob3N0IiwibWlyY2xvdWQuaG9zdCIsInBhYXMuYmVlYnl0ZS5pbyIsInNla2QxLmJlZWJ5dGVhcHAuaW8iLCJqZWxlLmlvIiwiY2xvdWQtZnIxLnVuaXNwYWNlLmlvIiwiamMubmVlbi5p'@;
put 'dCIsImNsb3VkLmplbGFzdGljLm9wZW4udGltLml0IiwiamNsb3VkLmt6IiwidXBhYXMua2F6dGVsZXBvcnQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3Rv'@;
put 'Mi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZhc3RzdGFja3MubmV0IiwiZnItMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0xLnBhYXMubWFzc2l2ZWdyaWQubmV0'@;
put 'IiwibnktMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsInNnLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJqZWxhc3RpYy5zYXZlaW5jbG91ZC5uZXQiLCJub3JkZXN0ZS1pZGMuc2F2ZWluY2xvdWQubmV0Iiwiai5zY2FsZWZvcmNlLm5ldCIsImplbGFzdGljLnRzdWthZXJ1Lm5ldCIsInNkc2Ns'@;
put 'b3VkLnBsIiwidW5pY2xvdWQucGwiLCJtaXJjbG91ZC5ydSIsImplbGFzdGljLnJlZ3J1aG9zdGluZy5ydSIsImVuc2NhbGVkLnNnIiwiamVsZS5zaXRlIiwiamVsYXN0aWMudGVhbSIsIm9yYW5nZWNsb3VkLnRuIiwiai5sYXllcnNoaWZ0LmNvLnVrIiwicGh4LmVuc2NhbGVkLnVzIiwibWly'@;
put 'Y2xvdWQudXMiLCJteWppbm8ucnUiLCIqLmhvc3RpbmcubXlqaW5vLnJ1IiwiKi5sYW5kaW5nLm15amluby5ydSIsIiouc3BlY3RydW0ubXlqaW5vLnJ1IiwiKi52cHMubXlqaW5vLnJ1Iiwiam90ZWx1bHUuY2xvdWQiLCIqLnRyaXRvbi56b25lIiwiKi5jbnMuam95ZW50LmNvbSIsImpzLm9y'@;
put 'ZyIsImthYXMuZ2ciLCJraHBsYXkubmwiLCJrdGlzdG9yeS5jb20iLCJrYXBzaS5maSIsImtleW1hY2hpbmUuZGUiLCJraW5naG9zdC5uZXQiLCJ1bmk1Lm5ldCIsImtuaWdodHBvaW50LnN5c3RlbXMiLCJrb29iaW4uZXZlbnRzIiwib3lhLnRvIiwia3VsZXV2ZW4uY2xvdWQiLCJlenByb3h5'@;
put 'Lmt1bGV1dmVuLmJlIiwiY28ua3JkIiwiZWR1LmtyZCIsImtyZWxsaWFuLm5ldCIsIndlYnRoaW5ncy5pbyIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXgu'@;
put 'c2l0ZSIsImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImFwcC5sbXBtLmNvbSIsImxpbmt5YXJkLmNsb3VkIiwibGlua3lhcmQtY2xvdWQuY2giLCJtZW1iZXJzLmxp'@;
put 'bm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndlLmJzIiwiKi51c2VyLmxvY2FsY2VydC5kZXYiLCJsb2NhbHpvbmUueHl6IiwibG9naW5saW5lLmFwcCIsImxvZ2lubGluZS5kZXYi'@;
put 'LCJsb2dpbmxpbmUuaW8iLCJsb2dpbmxpbmUuc2VydmljZXMiLCJsb2dpbmxpbmUuc2l0ZSIsInNlcnZlcnMucnVuIiwibG9obXVzLm1lIiwia3Jhc25pay5wbCIsImxlY3puYS5wbCIsImx1YmFydG93LnBsIiwibHVibGluLnBsIiwicG9uaWF0b3dhLnBsIiwic3dpZG5pay5wbCIsImdsdWcu'@;
put 'b3JnLnVrIiwibHVnLm9yZy51ayIsImx1Z3Mub3JnLnVrIiwiYmFyc3kuYmciLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiYmFyc3ljZW50ZXIuY29tIiwiYmFyc3lvbmxpbmUuY29tIiwiYmFyc3kuY2x1YiIsImJhcnN5LmRlIiwiYmFyc3kuZXUiLCJiYXJzeS5pbiIsImJh'@;
put 'cnN5LmluZm8iLCJiYXJzeS5pbyIsImJhcnN5Lm1lIiwiYmFyc3kubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3ku'@;
put 'c3VwcG9ydCIsImJhcnN5LnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsIm1heWZpcnN0LmluZm8iLCJtYXlmaXJzdC5vcmciLCJoYi5jbGRtYWlsLnJ1IiwiY24udnUiLCJtYXplcGxheS5jb20iLCJtY3BlLm1lIiwibWNkaXIubWUiLCJtY2Rpci5ydSIsIm1jcHJlLnJ1IiwidnBzLm1jZGly'@;
put 'LnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1'@;
put 'c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJhenVyZS1tb2JpbGUubmV0IiwiY2xvdWRhcHAubmV0IiwiYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjEuYXp1'@;
put 'cmVzdGF0aWNhcHBzLm5ldCIsImNlbnRyYWx1cy5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdGFzaWEuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3R1czIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3RldXJvcGUuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3R1czIuYXp1cmVzdGF0aWNh'@;
put 'cHBzLm5ldCIsImNzeC5jYyIsIm1pbnRlcmUuc2l0ZSIsImZvcnRlLmlkIiwibW96aWxsYS1pb3Qub3JnIiwiYm1vYXR0YWNobWVudHMub3JnIiwibmV0LnJ1Iiwib3JnLnJ1IiwicHAucnUiLCJob3N0ZWRwaS5jb20iLCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImNhcmFjYWwubXl0'@;
put 'aGljLWJlYXN0cy5jb20iLCJmZW50aWdlci5teXRoaWMtYmVhc3RzLmNvbSIsImx5bngubXl0aGljLWJlYXN0cy5jb20iLCJvY2Vsb3QubXl0aGljLWJlYXN0cy5jb20iLCJvbmNpbGxhLm15dGhpYy1iZWFzdHMuY29tIiwib256YS5teXRoaWMtYmVhc3RzLmNvbSIsInNwaGlueC5teXRoaWMt'@;
put 'YmVhc3RzLmNvbSIsInZzLm15dGhpYy1iZWFzdHMuY29tIiwieC5teXRoaWMtYmVhc3RzLmNvbSIsInlhbGkubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0LnJldHJvc251Yi5jby51ayIsInVpLm5hYnUuY2FzYSIsInBvbnkuY2x1YiIsIm9mLmZhc2hpb24iLCJpbi5sb25kb24iLCJvZi5sb25k'@;
put 'b24iLCJmcm9tLm1hcmtldGluZyIsIndpdGgubWFya2V0aW5nIiwiZm9yLm1lbiIsInJlcGFpci5tZW4iLCJhbmQubW9tIiwiZm9yLm1vbSIsImZvci5vbmUiLCJ1bmRlci5vbmUiLCJmb3Iuc2FsZSIsInRoYXQud2luIiwiZnJvbS53b3JrIiwidG8ud29yayIsImNsb3VkLm5vc3BhbXByb3h5'@;
put 'LmNvbSIsIm5ldGxpZnkuYXBwIiwiNHUuY29tIiwibmdyb2suaW8iLCJuaC1zZXJ2LmNvLnVrIiwibmZzaG9zdC5jb20iLCIqLmRldmVsb3Blci5hcHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIiou'@;
put 'bWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsImRuc2tpbmcuY2giLCJteXBpLmNvIiwibjR0LmNvIiwiMDAxd3d3LmNvbSIsImRkbnNsaXZlLmNvbSIsIm15aXBob3N0LmNvbSIsImZvcnVtei5pbmZvIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwic291bmRjYXN0Lm1l'@;
put 'IiwidGNwNC5tZSIsImRuc3VwLm5ldCIsImhpY2FtLm5ldCIsIm5vdy1kbnMubmV0Iiwib3duaXAubmV0IiwidnBuZG5zLm5ldCIsImR5bnNlcnYub3JnIiwibm93LWRucy5vcmciLCJ4NDQzLnB3Iiwibm93LWRucy50b3AiLCJudGRsbC50b3AiLCJmcmVlZGRucy51cyIsImNyYWZ0aW5nLnh5'@;
put 'eiIsInphcHRvLnh5eiIsIm5zdXBkYXRlLmluZm8iLCJuZXJkcG9sLm92aCIsImJsb2dzeXRlLmNvbSIsImJyYXNpbGlhLm1lIiwiY2FibGUtbW9kZW0ub3JnIiwiY2lzY29mcmVhay5jb20iLCJjb2xsZWdlZmFuLm9yZyIsImNvdWNocG90YXRvZnJpZXMub3JnIiwiZGFtbnNlcnZlci5jb20i'@;
put 'LCJkZG5zLm1lIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zZm9yLm1lIiwiZG5zaXNraW5reS5jb20iLCJkdnJjYW0uaW5mbyIsImR5bm5zLmNvbSIsImVhdGluZy1vcmdhbmljLm5ldCIsImZhbnRhc3lsZWFndWUuY2MiLCJnZWVrZ2FsYXh5LmNvbSIsImdvbGZmYW4udXMiLCJoZWFsdGgtY2Fy'@;
put 'ZXJlZm9ybS5jb20iLCJob21lc2VjdXJpdHltYWMuY29tIiwiaG9tZXNlY3VyaXR5cGMuY29tIiwiaG9wdG8ubWUiLCJpbG92ZWNvbGxlZ2UuaW5mbyIsImxvZ2ludG8ubWUiLCJtbGJmYW4ub3JnIiwibW1hZmFuLmJpeiIsIm15YWN0aXZlZGlyZWN0b3J5LmNvbSIsIm15ZGlzc2VudC5uZXQi'@;
put 'LCJteWVmZmVjdC5uZXQiLCJteW1lZGlhcGMubmV0IiwibXlwc3gubmV0IiwibXlzZWN1cml0eWNhbWVyYS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLm5ldCIsIm15c2VjdXJpdHljYW1lcmEub3JnIiwibmV0LWZyZWFrcy5jb20iLCJuZmxmYW4ub3JnIiwibmhsZmFuLm5ldCIsIm5vLWlwLmNh'@;
put 'Iiwibm8taXAuY28udWsiLCJuby1pcC5uZXQiLCJub2lwLnVzIiwib250aGV3aWZpLmNvbSIsInBnYWZhbi5uZXQiLCJwb2ludDJ0aGlzLmNvbSIsInBvaW50dG8udXMiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicXVpY2tzeXRlcy5jb20iLCJyZWFkLWJvb2tzLm9yZyIsInNl'@;
put 'Y3VyaXR5dGFjdGljcy5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlaHVtb3VyLmNvbSIsInNlcnZlcDJwLmNvbSIsInNlcnZlc2FyY2FzbS5jb20iLCJzdHVmZnRvcmVhZC5jb20iLCJ1ZmNmYW4ub3JnIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiM3V0'@;
put 'aWxpdGllcy5jb20iLCJib3VuY2VtZS5uZXQiLCJkZG5zLm5ldCIsImRkbnNraW5nLmNvbSIsImdvdGRucy5jaCIsImhvcHRvLm9yZyIsIm15ZnRwLmJpeiIsIm15ZnRwLm9yZyIsIm15dm5jLmNvbSIsIm5vLWlwLmJpeiIsIm5vLWlwLmluZm8iLCJuby1pcC5vcmciLCJub2lwLm1lIiwicmVk'@;
put 'aXJlY3RtZS5uZXQiLCJzZXJ2ZWJlZXIuY29tIiwic2VydmVibG9nLm5ldCIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWZ0cC5jb20iLCJzZXJ2ZWdhbWUuY29tIiwic2VydmVoYWxmbGlmZS5jb20iLCJzZXJ2ZWh0dHAuY29tIiwic2VydmVpcmMuY29tIiwic2VydmVtaW5lY3Jh'@;
put 'ZnQubmV0Iiwic2VydmVtcDMuY29tIiwic2VydmVwaWNzLmNvbSIsInNlcnZlcXVha2UuY29tIiwic3l0ZXMubmV0Iiwid2ViaG9wLm1lIiwiemFwdG8ub3JnIiwic3RhZ2Uubm9kZWFydC5pbyIsInBjbG91ZC5ob3N0IiwibnljLm1uIiwic3RhdGljLm9ic2VydmFibGV1c2VyY29udGVudC5j'@;
put 'b20iLCJjeWEuZ2ciLCJvbWcubG9sIiwiY2xvdWR5Y2x1c3Rlci5uZXQiLCJvbW5pd2Uuc2l0ZSIsInNlcnZpY2Uub25lIiwibmlkLmlvIiwib3BlbnNvY2lhbC5zaXRlIiwib3BlbmNyYWZ0Lmhvc3RpbmciLCJvcnNpdGVzLmNvbSIsIm9wZXJhdW5pdGUuY29tIiwidGVjaC5vcmFuZ2UiLCJh'@;
put 'dXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLndlYnBhYXMub3ZoLm5ldCIsIiouaG9zdGluZy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5y'@;
put 'cyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZWZyb250YXBwLmNvbSIsInBhZ2V4bC5jb20iLCIqLnBheXdoaXJsLmNvbSIsImJhcjAubmV0IiwiYmFyMS5uZXQiLCJiYXIyLm5ldCIsInJkdi50byIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9j'@;
put 'LnBsIiwiemFrb3BhbmUucGwiLCJwYW50aGVvbnNpdGUuaW8iLCJnb3RwYW50aGVvbi5jb20iLCJteXBlcC5saW5rIiwicGVyc3BlY3RhLmNsb3VkIiwibGszLnJ1Iiwib24td2ViLmZyIiwiYmMucGxhdGZvcm0uc2giLCJlbnQucGxhdGZvcm0uc2giLCJldS5wbGF0Zm9ybS5zaCIsInVzLnBs'@;
put 'YXRmb3JtLnNoIiwiKi5wbGF0Zm9ybXNoLnNpdGUiLCIqLnRzdC5zaXRlIiwicGxhdHRlci1hcHAuY29tIiwicGxhdHRlci1hcHAuZGV2IiwicGxhdHRlcnAudXMiLCJwZG5zLnBhZ2UiLCJwbGVzay5wYWdlIiwicGxlc2tucy5jb20iLCJkeW41My5pbyIsIm9ucG9ydGVyLnJ1biIsImNvLmJu'@;
put 'IiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcnZjeS5wYWdlIiwiKi5kd2ViLmxpbmsiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRl'@;
put 'bnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicW90by5pbyIsInF1YWxpZmlvYXBwLmNvbSIsInFidXNlci5jb20iLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJpbnN0YW5jZXMu'@;
put 'c3Bhd24uY2MiLCJpbnN0YW50Y2xvdWQuY24iLCJyYXMucnUiLCJxYTIuY29tIiwicWN4LmlvIiwiKi5zeXMucWN4LmlvIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsImFscGhhLW15cW5hcGNsb3VkLmNvbSIsIm15cW5hcGNsb3VkLmNvbSIsIioucXVpcGVsZW1lbnRzLmNvbSIsInZhcG9yLmNs'@;
put 'b3VkIiwidmFwb3JjbG91ZC5pbyIsInJhY2ttYXplLmNvbSIsInJhY2ttYXplLm5ldCIsImcudmJycGxzYnguaW8iLCIqLm9uLWszcy5pbyIsIioub24tcmFuY2hlci5jbG91ZCIsIioub24tcmlvLmlvIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImFwcC5yZW5kZXIuY29tIiwi'@;
put 'b25yZW5kZXIuY29tIiwicmVwbC5jbyIsImlkLnJlcGwuY28iLCJyZXBsLnJ1biIsInJlc2luZGV2aWNlLmlvIiwiZGV2aWNlcy5yZXNpbnN0YWdpbmcuaW8iLCJoemMuaW8iLCJ3ZWxsYmVpbmd6b25lLmV1Iiwid2VsbGJlaW5nem9uZS5jby51ayIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJl'@;
put 'd29yLnNlIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwiXHUwNDMxXHUwNDM4XHUwNDM3Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQzZVx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQx'@;
put 'IiwiXHUwNDNjXHUwNDM4XHUwNDQwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQ0MVx1MDQzYS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDMwXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDMwLlx1MDQ0'@;
put 'MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzZVx1MDQ0N1x1MDQzOC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2ZcdTA0MzEuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDRmLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIiouYnVpbGRlci5jb2RlLmNvbSIsIiouZGV2LWJ1aWxkZXIu'@;
put 'Y29kZS5jb20iLCIqLnN0Zy1idWlsZGVyLmNvZGUuY29tIiwic2FuZGNhdHMuaW8iLCJsb2dvaXAuZGUiLCJsb2dvaXAuY29tIiwiZnItcGFyLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImZyLXBhci0yLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJubC1hbXMtMS5iYXJlbWV0YWwuc2N3LmNsb3Vk'@;
put 'IiwiZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJmdW5jdGlvbnMuZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJrOHMuZnItcGFyLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5mci1wYXIuc2N3LmNsb3VkIiwiczMuZnItcGFyLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUuZnItcGFyLnNjdy5jbG91ZCIsIndo'@;
put 'bS5mci1wYXIuc2N3LmNsb3VkIiwicHJpdi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwicHViLmluc3RhbmNlcy5zY3cuY2xvdWQiLCJrOHMuc2N3LmNsb3VkIiwiazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMubmwtYW1zLnNjdy5jbG91ZCIsInMzLm5sLWFtcy5zY3cuY2xvdWQiLCJz'@;
put 'My13ZWJzaXRlLm5sLWFtcy5zY3cuY2xvdWQiLCJ3aG0ubmwtYW1zLnNjdy5jbG91ZCIsIms4cy5wbC13YXcuc2N3LmNsb3VkIiwibm9kZXMuazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy5wbC13YXcuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5wbC13YXcuc2N3LmNsb3VkIiwic2NhbGVib29r'@;
put 'LnNjdy5jbG91ZCIsInNtYXJ0bGFiZWxpbmcuc2N3LmNsb3VkIiwiZGVkaWJveC5mciIsInNjaG9rb2tla3MubmV0IiwiZ292LnNjb3QiLCJzZXJ2aWNlLmdvdi5zY290Iiwic2NyeXNlYy5jb20iLCJmaXJld2FsbC1nYXRld2F5LmNvbSIsImZpcmV3YWxsLWdhdGV3YXkuZGUiLCJteS1nYXRl'@;
put 'd2F5LmRlIiwibXktcm91dGVyLmRlIiwic3BkbnMuZGUiLCJzcGRucy5ldSIsImZpcmV3YWxsLWdhdGV3YXkubmV0IiwibXktZmlyZXdhbGwub3JnIiwibXlmaXJld2FsbC5vcmciLCJzcGRucy5vcmciLCJzZWlkYXQubmV0Iiwic2VsbGZ5LnN0b3JlIiwic2Vuc2VlcmluZy5uZXQiLCJtaW5p'@;
put 'c2l0ZS5tcyIsIm1hZ25ldC5wYWdlIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsInNoaWZ0Y3J5cHRvLmRldiIsInNoaWZ0Y3J5cHRvLmlvIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnN0b3Jl'@;
put 'IiwibW8tc2llbWVucy5pbyIsIjFrYXBwLmNvbSIsImFwcGNoaXppLmNvbSIsImFwcGxpbnppLmNvbSIsInNpbmFhcHAuY29tIiwidmlwc2luYWFwcC5jb20iLCJzaXRlbGVhZi5uZXQiLCJib3VudHktZnVsbC5jb20iLCJhbHBoYS5ib3VudHktZnVsbC5jb20iLCJiZXRhLmJvdW50eS1mdWxs'@;
put 'LmNvbSIsInNtYWxsLXdlYi5vcmciLCJ2cDQubWUiLCJ0cnktc25vd3Bsb3cuY29tIiwic3JodC5zaXRlIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwic3RhdGljLmxhbmQiLCJkZXYuc3RhdGljLmxhbmQiLCJzaXRlcy5zdGF0aWMubGFu'@;
put 'ZCIsInN0b3JlYmFzZS5zdG9yZSIsInZwcy1ob3N0Lm5ldCIsImF0bC5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJuanMuamVsYXN0aWMudnBzLWhvc3QubmV0IiwicmljLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInBsYXlzdGF0aW9uLWNsb3VkLmNvbSIsImFwcHMubGFpci5pbyIsIiouc3Rv'@;
put 'bG9zLmlvIiwic3BhY2VraXQuaW8iLCJjdXN0b21lci5zcGVlZHBhcnRuZXIuZGUiLCJteXNwcmVhZHNob3AuYXQiLCJteXNwcmVhZHNob3AuY29tLmF1IiwibXlzcHJlYWRzaG9wLmJlIiwibXlzcHJlYWRzaG9wLmNhIiwibXlzcHJlYWRzaG9wLmNoIiwibXlzcHJlYWRzaG9wLmNvbSIsIm15'@;
put 'c3ByZWFkc2hvcC5kZSIsIm15c3ByZWFkc2hvcC5kayIsIm15c3ByZWFkc2hvcC5lcyIsIm15c3ByZWFkc2hvcC5maSIsIm15c3ByZWFkc2hvcC5mciIsIm15c3ByZWFkc2hvcC5pZSIsIm15c3ByZWFkc2hvcC5pdCIsIm15c3ByZWFkc2hvcC5uZXQiLCJteXNwcmVhZHNob3AubmwiLCJteXNw'@;
put 'cmVhZHNob3Aubm8iLCJteXNwcmVhZHNob3AucGwiLCJteXNwcmVhZHNob3Auc2UiLCJteXNwcmVhZHNob3AuY28udWsiLCJhcGkuc3RkbGliLmNvbSIsInN0b3JqLmZhcm0iLCJ1dHdlbnRlLmlvIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInRlbXAtZG5zLmNvbSIsInN1cGFi'@;
put 'YXNlLmNvIiwic3VwYWJhc2UuaW4iLCJzdXBhYmFzZS5uZXQiLCJzdS5wYWJhLnNlIiwiKi5zNXkuaW8iLCIqLnNlbnNpb3NpdGUuY2xvdWQiLCJzeW5jbG91ZC5pdCIsImRzY2xvdWQuYml6IiwiZGlyZWN0LnF1aWNrY29ubmVjdC5jbiIsImRzbXluYXMuY29tIiwiZmFtaWx5ZHMuY29tIiwi'@;
put 'ZGlza3N0YXRpb24ubWUiLCJkc2Nsb3VkLm1lIiwiaTIzNC5tZSIsIm15ZHMubWUiLCJzeW5vbG9neS5tZSIsImRzY2xvdWQubW9iaSIsImRzbXluYXMubmV0IiwiZmFtaWx5ZHMubmV0IiwiZHNteW5hcy5vcmciLCJmYW1pbHlkcy5vcmciLCJ2cG5wbHVzLnRvIiwiZGlyZWN0LnF1aWNrY29u'@;
put 'bmVjdC50byIsInRhYml0b3JkZXIuY28uaWwiLCJ0YWlmdW4tZG5zLmRlIiwiYmV0YS50YWlsc2NhbGUubmV0IiwidHMubmV0IiwiZ2RhLnBsIiwiZ2RhbnNrLnBsIiwiZ2R5bmlhLnBsIiwibWVkLnBsIiwic29wb3QucGwiLCJzaXRlLnRiLWhvc3RpbmcuY29tIiwiZWR1Z2l0LmlvIiwiczMu'@;
put 'dGVja2lkcy5vcmciLCJ0ZWxlYml0LmFwcCIsInRlbGViaXQuaW8iLCIqLnRlbGViaXQueHl6IiwiZ3dpZGRsZS5jby51ayIsIiouZmlyZW5ldC5jaCIsIiouc3ZjLmZpcmVuZXQuY2giLCJyZXNlcnZkLmNvbSIsInRoaW5nZHVzdGRhdGEuY29tIiwiY3VzdC5kZXYudGhpbmdkdXN0LmlvIiwi'@;
put 'Y3VzdC5kaXNyZWMudGhpbmdkdXN0LmlvIiwiY3VzdC5wcm9kLnRoaW5nZHVzdC5pbyIsImN1c3QudGVzdGluZy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRldi50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRpc3JlYy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLnRlc3RpbmcudGhpbmdkdXN0Lmlv'@;
put 'IiwidGlja2V0cy5pbyIsImFydm8ubmV0d29yayIsImF6aW11dGgubmV0d29yayIsInRsb24ubmV0d29yayIsInRvcnByb2plY3QubmV0IiwicGFnZXMudG9ycHJvamVjdC5uZXQiLCJibG94Y21zLmNvbSIsInRvd25uZXdzLXN0YWdpbmcuY29tIiwidGJpdHMubWUiLCIxMmhwLmF0IiwiMml4'@;
put 'LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVz'@;
put 'IiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1IiwiKi50cmFuc3VybC5ubCIsInNpdGUudHJhbnNpcC5tZSIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkaXNrc3RhdGlv'@;
put 'bi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsImRyYXktZG5zLmRlIiwiZHJheWRucy5kZSIsImR5bi12cG4uZGUiLCJkeW52cG4uZGUiLCJtZWluLXZpZ29yLmRlIiwibXktdmlnb3IuZGUiLCJteS13YW4uZGUiLCJzeW5vLWRzLmRlIiwic3lub2xvZ3ktZGlza3N0YXRpb24uZGUiLCJzeW5vbG9n'@;
put 'eS1kcy5kZSIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwidWJlci5zcGFjZSIsIioudWJlcnNwYWNlLmRlIiwiaGsuY29tIiwiaGsub3JnIiwibHRkLmhrIiwiaW5jLmhrIiwibmFtZS5wbSIsInNjaC50ZiIsImJpei53ZiIsInNjaC53ZiIsIm9yZy55dCIsInZpcnR1YWx1'@;
put 'c2VyLmRlIiwidmlydHVhbC11c2VyLmRlIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJsaWIuZGUudXMiLCIyMDM4LmlvIiwidmVyY2VsLmFwcCIsInZlcmNlbC5kZXYiLCJub3cuc2giLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxv'@;
put 'cGVyLmNsb3VkIiwibmVrby5hbSIsIm55YWEuYW0iLCJiZS5heCIsImNhdC5heCIsImVzLmF4IiwiZXUuYXgiLCJnZy5heCIsIm1jLmF4IiwidXMuYXgiLCJ4eS5heCIsIm5sLmNpIiwieHguZ2wiLCJhcHAuZ3AiLCJibG9nLmd0IiwiZGUuZ3QiLCJ0by5ndCIsImJlLmd5IiwiY2MuaG4iLCJi'@;
put 'bG9nLmtnIiwiaW8ua2ciLCJqcC5rZyIsInR2LmtnIiwidWsua2ciLCJ1cy5rZyIsImRlLmxzIiwiYXQubWQiLCJkZS5tZCIsImpwLm1kIiwidG8ubWQiLCJpbmRpZS5wb3JuIiwidnhsLnNoIiwiY2gudGMiLCJtZS50YyIsIndlLnRjIiwibnlhbi50byIsImF0LnZnIiwiYmxvZy52dSIsImRl'@;
put 'di52dSIsIm1lLnZ1Iiwidi51YSIsIioudnVsdHJvYmplY3RzLmNvbSIsIndhZmZsZWNlbGwuY29tIiwiKi53ZWJoYXJlLmRldiIsInJlc2VydmUtb25saW5lLm5ldCIsInJlc2VydmUtb25saW5lLmNvbSIsImJvb2tvbmxpbmUuYXBwIiwiaG90ZWx3aXRoZmxpZ2h0LmNvbSIsIndlZGVwbG95'@;
put 'LmlvIiwid2VkZXBsb3kubWUiLCJ3ZWRlcGxveS5zaCIsInJlbW90ZXdkLmNvbSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsIndtZmxhYnMub3JnIiwidG9vbGZvcmdlLm9yZyIsIndtY2xvdWQub3JnIiwicGFuZWwuZ2ciLCJkYWVtb24ucGFuZWwuZ2ciLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0'@;
put 'bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWts'@;
put 'eWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJ3aXhzaXRlLmNvbSIsImVkaXRvcnguaW8iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwi'@;
put 'ZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInliby5mYWl0aCIsInlvbWJvLm1lIiwiaG9tZWxpbmsub25l'@;
put 'IiwieWJvLnBhcnR5IiwieWJvLnJldmlldyIsInliby5zY2llbmNlIiwieWJvLnRyYWRlIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsImJzcy5kZXNpZ24iLCJiYXNpY3NlcnZlci5pbyIsInZpcnR1YWxzZXJ2ZXIuaW8iLCJlbnRlcnByaXNlY2xv'@;
put 'dWQubnUiXScpfX0sbT17fTtmdW5jdGlvbiBsZShNKXt2YXIgTz1tW01dO2lmKHZvaWQgMCE9PU8pcmV0dXJuIE8uZXhwb3J0czt2YXIgUj1tW01dPXtpZDpNLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4geFtNXS5jYWxsKFIuZXhwb3J0cyxSLFIuZXhwb3J0cyxsZSksUi5sb2FkZWQ9'@;
put 'ITAsUi5leHBvcnRzfXJldHVybiBsZS5kPShNLE8pPT57Zm9yKHZhciBSIGluIE8pbGUubyhPLFIpJiYhbGUubyhNLFIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTSxSLHtlbnVtZXJhYmxlOiEwLGdldDpPW1JdfSl9LGxlLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2Jh'@;
put 'bFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxsZS5vPShNLE8pPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5'@;
put 'LmNhbGwoTSxPKSxsZS5yPU09Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE0sIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pfSxsZS5ubWQ9TT0+KE0ucGF0aHM9W10sTS5jaGlsZHJlbnx8KE0uY2hpbGRyZW49W10pLE0pLGxlKDM2MDcpfSkoKX0sMTIwNzA6ZnVuY3Rpb24oYXQsSWUsRil7InVzZSBzdHJpY3QiO3ZhciBhZT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oUil7cmV0dXJuIFIm'@;
put 'JlIuX19lc01vZHVsZT9SOntkZWZhdWx0OlJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSWUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEllLmlzU3BlY2lhbE1pc3Npbmc9SWUuY2hvaWNlVmFsaWRhdG9yPUllLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1JZS51cmxWYWxpZGF0b3I9dm9pZCAw'@;
put 'O3ZhciB4PWFlKEYoNzg1MzIpKTtJZS51cmxWYWxpZGF0b3I9ZnVuY3Rpb24oUix6KXtyZXR1cm4hIXguZGVmYXVsdC5pc0h0dHBVcmkoUil8fCEheC5kZWZhdWx0LmlzSHR0cHNVcmkoUil8fCIiPT09Unx8en0sSWUuY29uZmlybWF0aW9uVmFsaWRhdG9yPWZ1bmN0aW9uKFIpe3JldHVybiEw'@;
put 'PT09Unx8ITE9PT1SfSxJZS5jaG9pY2VWYWxpZGF0b3I9ZnVuY3Rpb24oUix6LEspe3JldHVybiBSPjAmJlI8PXp8fEt9LEllLmlzU3BlY2lhbE1pc3Npbmc9ZnVuY3Rpb24oUil7cmV0dXJuKCJzdHJpbmciIT10eXBlb2YgUnx8IVIuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxc'@;
put 'Lik/W2Etel8uXXsxfSQiLCJpIikudGVzdChSKX19LDc2NzcxOihhdCxJZSk9PnsidXNlIHN0cmljdCI7dmFyIHg7SWUuRD12b2lkIDAsKHg9SWUuRHx8KEllLkQ9e30pKS5TYXNWaXlhPSJTQVNWSVlBIix4LlNhczk9IlNBUzkiLHguU2FzanM9IlNBU0pTIn0sNTE3MTQ6KGF0LEllKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtJZS5SPXZvaWQgMCxJZS5SPWZ1bmN0aW9uKHgsbSxsZSl7aWYodm9pZCAwPT09bSYmKG09MSksdm9pZCAwPT09bGUmJihsZT0xMDk5NTExNjI3Nzc2KSwwPT09eClyZXR1cm4iMCBCIjt4PXg+bGU/bGU6eDt2YXIgUj1tPDA/MDptLHo9TWF0aC5mbG9vcihNYXRoLmxvZyh4'@;
put 'KS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKHgvTWF0aC5wb3coMTAyNCx6KSkudG9GaXhlZChSKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVt6XX19LDgwNzg4OmZ1bmN0aW9uKGF0KXt2YXIgSWU9e3ZlcnNpb246IjEuMTUuMCJ9O0llWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIEY9'@;
put 'IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q'@;
put 'UVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4'@;
put 'YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUy'@;
put 'NTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZh'@;
put 'XHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUy'@;
put 'MzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0o'@;
put 'KSxJZVs2MjBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAx'@;
put 'MjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx1MDEwNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEwN1x4YzRcdTAxMDRcdTAxMThcdTAxMTlc'@;
put 'dTAxNDJceGY0XHhmNlx1MDEwNlx4ZmJceGY5XHUwMTVhXHhkNlx4ZGNceGEyXHUwMTQxXHhhNVx1MDE1Ylx1MDE5Mlx1MDE3OVx1MDE3Ylx4ZjNceGQzXHUwMTQ0XHUwMTQzXHUwMTdhXHUwMTdjXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1'@;
put 'MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2'@;
put 'Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5'@;
put 'XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0p'@;
put 'JiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbNzM3XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4'@;
put 'MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAzOTFcdTAzOTJcdTAzOTNcdTAz'@;
put 'OTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdc'@;
put 'dTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1'@;
put 'NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJc'@;
put 'dTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIx'@;
put 'XHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTty'@;
put 'ZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4'@;
put 'MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4'@;
put 'YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhj'@;
put 'MVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAx'@;
put 'MzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhi'@;
put 'OVx4YjNceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIEY9Ilww'@;
put 'XHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT'@;
put 'VFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAxMDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUw'@;
put 'MTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMy'@;
put 'XHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEw'@;
put 'ZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNceGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRk'@;
put 'XHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0'@;
put 'dXJue2VuYzp4LGRlYzphZX19KCksSWVbODU3XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFm'@;
put 'ICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4'@;
put 'YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1MDEzMFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJc'@;
put 'dTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNi'@;
put 'XHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0XHhhZFx4YjFcdWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBc'@;
put 'eGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NjFdPWZ1bmN0aW9uKCl7Zm9y'@;
put 'KHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJ'@;
put 'SktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhk'@;
put 'Y1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1'@;
put 'MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2'@;
put 'Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1'@;
put 'MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRl'@;
put 'YzphZX19KCksSWVbODY1XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkq'@;
put 'KywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2'@;
put 'XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJc'@;
put 'dTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1'@;
put 'NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNi'@;
put 'NVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFl'@;
put 'W21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg2Nl09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFc'@;
put 'eDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUw'@;
put 'NDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMy'@;
put 'XHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUy'@;
put 'NTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4'@;
put 'XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUw'@;
put 'NDU3XHUwNDBlXHUwNDVlXHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIxMTZceGE0XHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9'@;
put 'fSgpLEllWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4v'@;
put 'MDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1'@;
put 'MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUy'@;
put 'NFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1'@;
put 'MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1'@;
put 'Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg5NV09ZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN'@;
put 'Tk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMTBjXHhmY1x4ZTlcdTAxMGZceGU0XHUwMTBlXHUwMTY0XHUwMTBkXHUwMTFiXHUwMTFhXHUwMTM5XHhjZFx1MDEzZVx1MDFlYVx4YzRceGMxXHhjOVx1MDE3ZVx1MDE3ZFx4ZjRceGY2XHhk'@;
put 'M1x1MDE2Zlx4ZGFceGZkXHhkNlx4ZGNcdTAxNjBcdTAxM2RceGRkXHUwMTU4XHUwMTY1XHhlMVx4ZWRceGYzXHhmYVx1MDE0OFx1MDE0N1x1MDE2ZVx4ZDRcdTAxNjFcdTAxNTlcdTAxNTVcdTAxNTRceGJjXHhhN1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYx'@;
put 'XHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUy'@;
put 'NTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAz'@;
put 'YzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0p'@;
put 'XT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs5MzJdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc'@;
put 'eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1ZmY3N1x1ZmY3OFx1ZmY3'@;
put 'OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5Mlx1ZmY5M1x1ZmY5NFx1'@;
put 'ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBd'@;
put 'W21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4'@;
put 'YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUy'@;
put 'MDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHVmZjBiXHVmZjBkXHhiMVx4ZDdcdWZmZmRceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFl'@;
put 'XHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFc'@;
put 'dTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIy'@;
put 'ODJcdTIyODNcdTIyMmFcdTIyMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxMmJcdTIwMzBcdTI2NmZcdTI2'@;
put 'NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNWVmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEyOV1bbV1dPTMzMDI0K20s'@;
put 'RlszMzAyNCttXT14WzEyOV1bbV0pO2Zvcih4WzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1'@;
put 'ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY0MVx1ZmY0Mlx1ZmY0'@;
put 'M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1'@;
put 'Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1'@;
put 'MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5'@;
put 'M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzBd'@;
put 'W21dXT0zMzI4MCttLEZbMzMyODArbV09eFsxMzBdW21dKTtmb3IoeFsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMw'@;
put 'YWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZc'@;
put 'dTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZmZmRcdTMwZTBcdTMw'@;
put 'ZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZc'@;
put 'dTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMV1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTMxXVttXV09MzM1MzYrbSxGWzMzNTM2K21dPXhbMTMxXVttXSk7Zm9yKHhbMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUw'@;
put 'NDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHVm'@;
put 'ZmZkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUy'@;
put 'NTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzJdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMl1bbV1dPTMzNzkyK20sRlszMzc5MittXT14WzEzMl1bbV0pO2Zvcih4WzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1'@;
put 'MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx1MjQ2Zlx1MjQ3MFx1MjQ3MVx1MjQ3Mlx1MjQ3M1x1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1MzM0OVx1MzMxNFx1MzMy'@;
put 'Mlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MzM3Ylx1ZmZmZFx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNFx1MzJhNVx1MzJhNlx1MzJhN1x1MzJhOFx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIx'@;
put 'Zlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzVdW21dXT0zNDU2MCttLEZbMzQ1NjArbV09eFsxMzVdW21dKTtmb3IoeFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVc'@;
put 'dTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2'@;
put 'ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFc'@;
put 'dTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzZdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzEzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM2XVttXV09MzQ4MTYrbSxGWzM0ODE2K21dPXhbMTM2XVttXSk7Zm9yKHhbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjYyXHU5Njcw'@;
put 'XHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0'@;
put 'ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2'@;
put 'XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2XHVmZmZkXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5'@;
put 'MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2'@;
put 'XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2'@;
put 'N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNi'@;
put 'XHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzN11bbV1dPTM1MDcyK20sRlszNTA3MittXT14WzEzN11bbV0pO2Zvcih4WzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1'@;
put 'OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlkMlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2'@;
put 'OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYlx1ZmZmZFx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1'@;
put 'NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMVx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJkMlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTll'@;
put 'Nlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1'@;
put 'N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNiOFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQw'@;
put 'Ylx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1NjVlMlx1NjcxZlx1NjhjYlx1NjhjNFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzEzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzhdW21dXT0zNTMyOCttLEZbMzUzMjgrbV09eFsxMzhdW21dKTtmb3IoeFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNc'@;
put 'dTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkw'@;
put 'MDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVc'@;
put 'dTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4'@;
put 'ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRc'@;
put 'dTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTky'@;
put 'ODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM5XVttXV09MzU1ODQrbSxGWzM1NTg0K21dPXhbMTM5XVttXSk7Zm9yKHhbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQx'@;
put 'XHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3'@;
put 'ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHVmZmZkXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIz'@;
put 'XHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4'@;
put 'OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdj'@;
put 'XHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1'@;
put 'NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2Uz'@;
put 'XHU1NDExXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MF1bbV1dPTM1ODQwK20sRlszNTg0MCttXT14WzE0MF1bbV0pO2Zvcih4WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNh'@;
put 'N1x1NjUzYlx1NjYwMlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1'@;
put 'ODE4Zlx1ODIyYVx1ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1ZmZmZFx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2'@;
put 'YVx1OGY1Zlx1OWViOVx1NTE0Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiY1x1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1'@;
put 'NjFjN1x1NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBi'@;
put 'NVx1NTBhY1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1'@;
put 'Njc1MFx1N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2Iz'@;
put 'OVx1NTMxOVx1NTE4YVx1NTIzN1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDFdW21dXT0zNjA5NittLEZbMzYwOTYrbV09eFsxNDFdW21dKTtmb3IoeFsxNDJdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVj'@;
put 'NzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJc'@;
put 'dTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgx'@;
put 'MDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRc'@;
put 'dTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTVi'@;
put 'OWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNc'@;
put 'dTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZh'@;
put 'MzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQyXVttXV09MzYzNTIrbSxGWzM2MzUyK21dPXhbMTQyXVttXSk7'@;
put 'Zm9yKHhbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4'@;
put 'OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJl'@;
put 'XHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHVmZmZkXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5'@;
put 'ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2Vj'@;
put 'XHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2'@;
put 'YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0'@;
put 'XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3'@;
put 'YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0M11bbV1dPTM2NjA4K20sRlszNjYwOCtt'@;
put 'XT14WzE0M11bbV0pO2Zvcih4WzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1'@;
put 'NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAz'@;
put 'Mlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMzZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1ZmZmZFx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1'@;
put 'NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZVx1NmY4NFx1NjQ3'@;
put 'YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlkM1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1'@;
put 'ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1Nzhh'@;
put 'OVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFhY1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1'@;
put 'NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1N2RkYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDRdW21dXT0zNjg2'@;
put 'NCttLEZbMzY4NjQrbV09eFsxNDRdW21dKTtmb3IoeFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRc'@;
put 'dTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdk'@;
put 'NDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2Zjlc'@;
put 'dTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYx'@;
put 'OGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRc'@;
put 'dTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYy'@;
put 'MzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVc'@;
put 'dTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTQ1XVttXV09MzcxMjArbSxGWzM3MTIwK21dPXhbMTQ1XVttXSk7Zm9yKHhbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRh'@;
put 'XHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1'@;
put 'ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHVmZmZkXHU5MDEw'@;
put 'XHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1'@;
put 'MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3'@;
put 'XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4'@;
put 'NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhj'@;
put 'XHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDZdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE0Nl1bbV1dPTM3Mzc2K20sRlszNzM3NittXT14WzE0Nl1bbV0pO2Zvcih4WzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3'@;
put 'NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRmYlx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1'@;
put 'NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFh'@;
put 'Y1x1ZmZmZFx1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRkOFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1'@;
put 'N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMFx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1Nzdi'@;
put 'M1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJlY1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1'@;
put 'OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1'@;
put 'N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ3'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDddW21dXT0zNzYzMittLEZbMzc2MzIrbV09eFsxNDddW21dKTtmb3IoeFsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVm'@;
put 'Y2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdc'@;
put 'dTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3'@;
put 'ZjlcdTVhOTJcdTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJc'@;
put 'dTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdi'@;
put 'NGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZc'@;
put 'dTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdk'@;
put 'Y2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDhdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ4XVttXV09Mzc4ODgrbSxGWzM3ODg4K21dPXhbMTQ4XVttXSk7Zm9yKHhbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjNiXHU2N2NhXHU3YTE3XHU1'@;
put 'MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5'@;
put 'XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1'@;
put 'ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHVmZmZkXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAx'@;
put 'XHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1'@;
put 'OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTEx'@;
put 'XHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2'@;
put 'MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ5'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OV1bbV1dPTM4MTQ0K20sRlszODE0NCttXT14WzE0OV1bbV0pO2Zvcih4WzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkNVx1'@;
put 'NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1NjIzZlx1NjZi'@;
put 'NFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNhMVx1NmI4Nlx1'@;
put 'NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1ZmZmZFx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1NGZl'@;
put 'M1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MFx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEwOFx1NTk5OVx1N2M4ZFx1'@;
put 'NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1N2RiZlx1N2RlY1x1OTc2'@;
put 'Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBiNlx1N2QwYlx1OTU4MFx1'@;
put 'NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTBdW21dXT0zODQwMCttLEZbMzg0MDArbV09eFsxNTBdW21dKTtmb3IoeFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3'@;
put 'OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0Yzlc'@;
put 'dTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUz'@;
put 'NzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFc'@;
put 'dTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThh'@;
put 'ZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFc'@;
put 'dTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUxXVttXV09Mzg2NTYrbSxGWzM4NjU2K21dPXhbMTUxXVttXSk7Zm9yKHhbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4'@;
put 'NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgy'@;
put 'XHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0'@;
put 'ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0'@;
put 'XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Ml1bbV1dPTM4OTEyK20sRlszODkxMittXT14WzE1Ml1bbV0pO2Zvcih4WzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1'@;
put 'NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFh'@;
put 'Ylx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1ZmZmZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIyYVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1'@;
put 'NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOFx1OGZhN1x1NTJhY1x1NTJhZFx1NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJl'@;
put 'M1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1'@;
put 'NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQy'@;
put 'Y1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1'@;
put 'NTRjOFx1NTRhOFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTNdW21dXT0zOTE2OCttLEZbMzkxNjgrbV09eFsxNTNdW21dKTtmb3IoeFsxNTRdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVc'@;
put 'dTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1'@;
put 'ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZc'@;
put 'dTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3'@;
put 'MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNc'@;
put 'dTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4'@;
put 'ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJc'@;
put 'dTU5NjBcdTU5NjdcdTU5NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU0XVttXV09Mzk0MjQrbSxGWzM5NDI0K21dPXhbMTU0XVttXSk7Zm9yKHhbMTU1'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5'@;
put 'XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1'@;
put 'YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHVmZmZkXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0'@;
put 'XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0'@;
put 'ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFi'@;
put 'XHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1'@;
put 'ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdm'@;
put 'XHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NV1bbV1dPTM5NjgwK20sRlszOTY4MCttXT14WzE1NV1b'@;
put 'bV0pO2Zvcih4WzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVm'@;
put 'ZVx1NWYwM1x1NWYwOVx1NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1'@;
put 'NWY4OFx1NWY5MVx1NWY4N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MFx1ZmZmZFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAx'@;
put 'NVx1NjAyYlx1NjAyNlx1NjAwZlx1NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YVx1NjA4NFx1NjA5Ylx1NjA5Nlx1'@;
put 'NjA5N1x1NjA5Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEw'@;
put 'ZVx1NjE0N1x1NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1'@;
put 'NjE5Nlx1NjE4N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFm'@;
put 'Y1x1NjFmZVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTZdW21dXT0zOTkzNittLEZbMzk5'@;
put 'MzYrbV09eFsxNTZdW21dKTtmb3IoeFsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYy'@;
put 'NjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVc'@;
put 'dTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYz'@;
put 'YzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFc'@;
put 'dTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1'@;
put 'MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJc'@;
put 'dTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2'@;
put 'ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU3XVttXV09'@;
put 'NDAxOTIrbSxGWzQwMTkyK21dPXhbMTU3XVttXSk7Zm9yKHhbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2'@;
put 'NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1'@;
put 'XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlXHVmZmZkXHU2OGIzXHU2ODJiXHU2'@;
put 'ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBj'@;
put 'XHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2'@;
put 'OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTlj'@;
put 'XHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2'@;
put 'YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNThdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE1OF1bbV1dPTQwNDQ4K20sRls0MDQ0OCttXT14WzE1OF1bbV0pO2Zvcih4WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1'@;
put 'NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIxNlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3'@;
put 'OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZlx1ZmZmZFx1'@;
put 'OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNk'@;
put 'ZFx1NmNhZVx1NmNiMVx1NmNiZVx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1'@;
put 'NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRjNlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1'@;
put 'Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1'@;
put 'NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYzZlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU5XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxNTldW21dXT00MDcwNCttLEZbNDA3MDQrbV09eFsxNTldW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFc'@;
put 'dTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcw'@;
put 'MDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2Jc'@;
put 'dTcwZGRcdWZmZmRcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcx'@;
put 'Y2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdc'@;
put 'dTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTcz'@;
put 'NGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2Zc'@;
put 'dTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVl'@;
put 'XHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3'@;
put 'NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUz'@;
put 'XHU3NWRlXHU3NWZlXHU3NWZmXHVmZmZkXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3'@;
put 'NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNk'@;
put 'XHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3'@;
put 'NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1'@;
put 'XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhlN1x1NzhkYVx1Nzhm'@;
put 'ZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1'@;
put 'NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5'@;
put 'NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMFx1ZmZmZFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1'@;
put 'N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MFx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4'@;
put 'ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1'@;
put 'N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2Nh'@;
put 'MVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1N2NmNFx1N2NmNlx1N2NmYVx1N2QwNlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdk'@;
put 'MDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNc'@;
put 'dTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdl'@;
put 'MjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhc'@;
put 'dTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdm'@;
put 'ODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlc'@;
put 'dTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgw'@;
put 'ODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJl'@;
put 'XHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4'@;
put 'MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHVmZmZkXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUz'@;
put 'XHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4'@;
put 'Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3'@;
put 'XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4'@;
put 'NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4XHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODViOVx1ODVk'@;
put 'MFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1ODY4Y1x1'@;
put 'ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ZmZmZFx1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODcz'@;
put 'NFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OVx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1ODdiZFx1ODdjMFx1'@;
put 'ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgz'@;
put 'Ylx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1ODhjM1x1ODhjNFx1'@;
put 'ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkxZFx1ODk2MFx1ODk1'@;
put 'ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5'@;
put 'YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRc'@;
put 'dThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThi'@;
put 'MTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJc'@;
put 'dThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThj'@;
put 'YWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRc'@;
put 'dThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThl'@;
put 'MzBcdThlMzRcdThlNGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4'@;
put 'ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFj'@;
put 'XHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHVmZmZkXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4'@;
put 'ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNl'@;
put 'XHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5'@;
put 'MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRi'@;
put 'XHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5'@;
put 'MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4'@;
put 'WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1'@;
put 'OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1'@;
put 'ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVx1ZmZmZFx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1'@;
put 'OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZVx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2'@;
put 'Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZhN1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1'@;
put 'OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3'@;
put 'YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdhOFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1'@;
put 'OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1OTg3MFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsy'@;
put 'MzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJc'@;
put 'dTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5'@;
put 'ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZc'@;
put 'dTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTli'@;
put 'MThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBc'@;
put 'dTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTlj'@;
put 'MDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNc'@;
put 'dTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxG'@;
put 'WzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlh'@;
put 'XHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5'@;
put 'ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHVmZmZkXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5'@;
put 'XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1'@;
put 'ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1b'@;
put 'bV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZm'@;
put 'Ylx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1'@;
put 'NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmZmZFx1ZmExMFx1NTg5'@;
put 'ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1'@;
put 'NWY2N1x1NWZiN1x1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRjZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYy'@;
put 'NFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1'@;
put 'NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAw'@;
put 'NVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTcz'@;
put 'ZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFc'@;
put 'dTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZm'@;
put 'ZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVc'@;
put 'dWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTky'@;
put 'ZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNc'@;
put 'dTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZm'@;
put 'ZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUy'@;
put 'MTc2XHUyMTc3XHUyMTc4XHUyMTc5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5'@;
put 'XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1'@;
put 'MGQ4XHU1MTRhXHVmZmZkXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2Fj'@;
put 'XHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1'@;
put 'ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1'@;
put 'XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2'@;
put 'OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUwXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MF1bbV1dPTY0ZTMrbSxGWzY0ZTMrbV09eFsyNTBdW21dKTtmb3IoeFsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZk'@;
put 'ZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdc'@;
put 'dTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4'@;
put 'N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZmZmRcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdc'@;
put 'dTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThl'@;
put 'Y2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdc'@;
put 'dTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5'@;
put 'ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTFdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT14WzI1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUxXVttXV09NjQyNTYrbSxGWzY0MjU2K21dPXhbMjUxXVttXSk7Zm9yKHhbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5'@;
put 'YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PXhbMjUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1Ml1bbV1dPTY0NTEyK20sRls2NDUxMittXT14WzI1Ml1bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEllWzkzNl09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9y'@;
put 'KHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElK'@;
put 'S0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTA2XHU0ZTBmXHU0ZTEyXHU0ZTE3XHU0ZTFmXHU0ZTIwXHU0ZTIxXHU0ZTIzXHU0ZTI2XHU0ZTI5XHU0ZTJlXHU0ZTJmXHU0ZTMxXHU0ZTMzXHU0ZTM1XHU0ZTM3XHU0ZTNjXHU0ZTQwXHU0ZTQxXHU0ZTQyXHU0ZTQ0XHU0ZTQ2XHU0ZTRhXHU0ZTUxXHU0'@;
put 'ZTU1XHU0ZTU3XHU0ZTVhXHU0ZTViXHU0ZTYyXHU0ZTYzXHU0ZTY0XHU0ZTY1XHU0ZTY3XHU0ZTY4XHU0ZTZhXHU0ZTZiXHU0ZTZjXHU0ZTZkXHU0ZTZlXHU0ZTZmXHU0ZTcyXHU0ZTc0XHU0ZTc1XHU0ZTc2XHU0ZTc3XHU0ZTc4XHU0ZTc5XHU0ZTdhXHU0ZTdiXHU0ZTdjXHU0ZTdkXHU0ZTdm'@;
put 'XHU0ZTgwXHU0ZTgxXHU0ZTgyXHU0ZTgzXHU0ZTg0XHU0ZTg1XHU0ZTg3XHU0ZThhXHVmZmZkXHU0ZTkwXHU0ZTk2XHU0ZTk3XHU0ZTk5XHU0ZTljXHU0ZTlkXHU0ZTllXHU0ZWEzXHU0ZWFhXHU0ZWFmXHU0ZWIwXHU0ZWIxXHU0ZWI0XHU0ZWI2XHU0ZWI3XHU0ZWI4XHU0ZWI5XHU0ZWJjXHU0'@;
put 'ZWJkXHU0ZWJlXHU0ZWM4XHU0ZWNjXHU0ZWNmXHU0ZWQwXHU0ZWQyXHU0ZWRhXHU0ZWRiXHU0ZWRjXHU0ZWUwXHU0ZWUyXHU0ZWU2XHU0ZWU3XHU0ZWU5XHU0ZWVkXHU0ZWVlXHU0ZWVmXHU0ZWYxXHU0ZWY0XHU0ZWY4XHU0ZWY5XHU0ZWZhXHU0ZWZjXHU0ZWZlXHU0ZjAwXHU0ZjAyXHU0ZjAz'@;
put 'XHU0ZjA0XHU0ZjA1XHU0ZjA2XHU0ZjA3XHU0ZjA4XHU0ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjEzXHU0ZjE0XHU0ZjE1XHU0ZjE2XHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0ZjI5XHU0ZjJjXHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0'@;
put 'ZjNlXHU0ZjNmXHU0ZjQwXHU0ZjQxXHU0ZjQyXHU0ZjQ0XHU0ZjQ1XHU0ZjQ3XHU0ZjQ4XHU0ZjQ5XHU0ZjRhXHU0ZjRiXHU0ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0ZjY4XHU0ZjZhXHU0ZjZiXHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0ZjcyXHU0Zjc1XHU0Zjc3'@;
put 'XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0ZjgxXHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4XHU0Zjk5XHU0ZjlhXHU0ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0ZmEyXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEyOV1bbV1dPTMzMDI0K20sRlszMzAyNCttXT14WzEyOV1bbV0pO2Zvcih4WzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMFx1NGZiMVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1'@;
put 'NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1NGZkNlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAw'@;
put 'MFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAwNlx1NTAwN1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1'@;
put 'NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1NTAzNFx1NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1'@;
put 'Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1'@;
put 'NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5'@;
put 'N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5ZFx1NTA5ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1'@;
put 'NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzBdW21dXT0zMzI4MCttLEZbMzMyODArbV09eFsxMzBdW21dKTtmb3IoeFsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYmRcdTUwYmVcdTUwYmZcdTUwYzBcdTUwYzFcdTUwYzJcdTUwYzNcdTUwYzRcdTUwYzVcdTUwYzZcdTUwYzdcdTUwYzhcdTUwYzlcdTUwY2FcdTUwY2JcdTUwY2NcdTUwY2RcdTUwY2VcdTUwZDBcdTUwZDFcdTUwZDJcdTUwZDNcdTUwZDRc'@;
put 'dTUwZDVcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGJcdTUwZGNcdTUwZGRcdTUwZGVcdTUwZGZcdTUwZTBcdTUwZTFcdTUwZTJcdTUwZTNcdTUwZTRcdTUwZTVcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjZcdTUwZjdcdTUwZjhcdTUw'@;
put 'ZjlcdTUwZmFcdTUwZmNcdTUwZmRcdTUwZmVcdTUwZmZcdTUxMDBcdTUxMDFcdTUxMDJcdTUxMDNcdTUxMDRcdTUxMDVcdTUxMDhcdWZmZmRcdTUxMDlcdTUxMGFcdTUxMGNcdTUxMGRcdTUxMGVcdTUxMGZcdTUxMTBcdTUxMTFcdTUxMTNcdTUxMTRcdTUxMTVcdTUxMTZcdTUxMTdcdTUxMThc'@;
put 'dTUxMTlcdTUxMWFcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMWZcdTUxMjBcdTUxMjJcdTUxMjNcdTUxMjRcdTUxMjVcdTUxMjZcdTUxMjdcdTUxMjhcdTUxMjlcdTUxMmFcdTUxMmJcdTUxMmNcdTUxMmRcdTUxMmVcdTUxMmZcdTUxMzBcdTUxMzFcdTUxMzJcdTUxMzNcdTUxMzRcdTUx'@;
put 'MzVcdTUxMzZcdTUxMzdcdTUxMzhcdTUxMzlcdTUxM2FcdTUxM2JcdTUxM2NcdTUxM2RcdTUxM2VcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWRcdTUxNWVcdTUxNWZcdTUxNjBcdTUxNjFc'@;
put 'dTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUx'@;
put 'OWZcdTUxYTFcdTUxYTNcdTUxYTZcdTUxYTdcdTUxYThcdTUxYTlcdTUxYWFcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDJcdTUxZDNcdTUxZDRc'@;
put 'dTUxZDVcdTUxZDZcdTUxZDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMxXVttXV09MzM1MzYrbSxGWzMzNTM2K21dPXhbMTMxXVttXSk7Zm9yKHhbMTMyXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1XHU1MWU2XHU1MWU3XHU1MWU4XHU1MWU5XHU1MWVhXHU1MWVjXHU1MWVlXHU1MWYxXHU1MWYyXHU1MWY0XHU1MWY3XHU1MWZl'@;
put 'XHU1MjA0XHU1MjA1XHU1MjA5XHU1MjBiXHU1MjBjXHU1MjBmXHU1MjEwXHU1MjEzXHU1MjE0XHU1MjE1XHU1MjFjXHU1MjFlXHU1MjFmXHU1MjIxXHU1MjIyXHU1MjIzXHU1MjI1XHU1MjI2XHU1MjI3XHU1MjJhXHU1MjJjXHU1MjJmXHU1MjMxXHU1MjMyXHU1MjM0XHU1MjM1XHU1MjNjXHU1'@;
put 'MjNlXHU1MjQ0XHU1MjQ1XHU1MjQ2XHU1MjQ3XHU1MjQ4XHU1MjQ5XHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4XHVmZmZkXHU1MjU5XHU1MjVhXHU1MjViXHU1MjVkXHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1MjZi'@;
put 'XHU1MjZjXHU1MjZkXHU1MjZlXHU1MjcwXHU1MjcxXHU1MjczXHU1Mjc0XHU1Mjc1XHU1Mjc2XHU1Mjc3XHU1Mjc4XHU1Mjc5XHU1MjdhXHU1MjdiXHU1MjdjXHU1MjdlXHU1MjgwXHU1MjgzXHU1Mjg0XHU1Mjg1XHU1Mjg2XHU1Mjg3XHU1Mjg5XHU1MjhhXHU1MjhiXHU1MjhjXHU1MjhkXHU1'@;
put 'MjhlXHU1MjhmXHU1MjkxXHU1MjkyXHU1Mjk0XHU1Mjk1XHU1Mjk2XHU1Mjk3XHU1Mjk4XHU1Mjk5XHU1MjlhXHU1MjljXHU1MmE0XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0XHU1MmI1XHU1MmI2XHU1MmI3XHU1MmI4XHU1MmI5XHU1MmJhXHU1MmJiXHU1MmJj'@;
put 'XHU1MmJkXHU1MmMwXHU1MmMxXHU1MmMyXHU1MmM0XHU1MmM1XHU1MmM2XHU1MmM4XHU1MmNhXHU1MmNjXHU1MmNkXHU1MmNlXHU1MmNmXHU1MmQxXHU1MmQzXHU1MmQ0XHU1MmQ1XHU1MmQ3XHU1MmQ5XHU1MmRhXHU1MmRiXHU1MmRjXHU1MmRkXHU1MmRlXHU1MmUwXHU1MmUxXHU1MmUyXHU1'@;
put 'MmUzXHU1MmU1XHU1MmU2XHU1MmU3XHU1MmU4XHU1MmU5XHU1MmVhXHU1MmViXHU1MmVjXHU1MmVkXHU1MmVlXHU1MmVmXHU1MmYxXHU1MmYyXHU1MmYzXHU1MmY0XHU1MmY1XHU1MmY2XHU1MmY3XHU1MmY4XHU1MmZiXHU1MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0XHU1MzA3'@;
put 'XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMl1bbV1dPTMzNzkyK20sRlszMzc5MittXT14WzEzMl1bbV0pO2Zvcih4WzEzM109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMy'@;
put 'Zlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1NTMzNlx1NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1'@;
put 'NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5'@;
put 'Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1'@;
put 'NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQx'@;
put 'YVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1'@;
put 'NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2YVx1NTQ2Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5'@;
put 'M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzNdW21dXT0zNDA0OCttLEZbMzQwNDgrbV09eFsxMzNdW21dKTtm'@;
put 'b3IoeFsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2JcdTU0'@;
put 'ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTBcdTU0ZTFcdTU0ZTJcdTU0ZTNcdTU0ZTRcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjRcdTU0ZjVcdTU0ZjZcdTU0ZjdcdTU0ZjhcdTU0ZjlcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1MGFc'@;
put 'dTU1MGJcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTJcdTU1MTNcdTU1MTVcdTU1MTZcdTU1MTdcdTU1MThcdTU1MTlcdTU1MWFcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjZcdWZmZmRcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1'@;
put 'MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGJcdTU1NGNcdTU1NGRcdTU1NGVcdTU1NGZcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTdcdTU1NThcdTU1NTlcdTU1NWFcdTU1NWJcdTU1NWRcdTU1NWVcdTU1NWZc'@;
put 'dTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmZcdTU1NzBcdTU1NzFcdTU1NzJcdTU1NzNcdTU1NzRcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdcdTU1'@;
put 'OWFcdTU1OWJcdTU1OWVcdTU1YTBcdTU1YTFcdTU1YTJcdTU1YTNcdTU1YTRcdTU1YTVcdTU1YTZcdTU1YThcdTU1YTlcdTU1YWFcdTU1YWJcdTU1YWNcdTU1YWRcdTU1YWVcdTU1YWZcdTU1YjBcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmZcdTU1YzBcdTU1YzFc'@;
put 'dTU1YzJcdTU1YzNcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDdcdTU1ZDhcdTU1ZDlcdTU1ZGFcdTU1ZGJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZcdTU1'@;
put 'ZjhcdTU1ZjlcdTU1ZmFcdTU1ZmJcdTU1ZmNcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM0XVttXV09MzQzMDQrbSxGWzM0MzA0K21d'@;
put 'PXhbMTM0XVttXSk7Zm9yKHhbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjA2XHU1NjA3XHU1NjBhXHU1NjBiXHU1NjBkXHU1NjEwXHU1NjExXHU1NjEyXHU1NjEzXHU1NjE0XHU1NjE1XHU1NjE2XHU1NjE3XHU1NjE5XHU1'@;
put 'NjFhXHU1NjFjXHU1NjFkXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4XHU1NjI5XHU1NjJhXHU1NjJiXHU1NjJlXHU1NjJmXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNhXHU1NjNjXHU1NjNkXHU1NjNlXHU1NjQwXHU1NjQxXHU1NjQyXHU1NjQzXHU1NjQ0'@;
put 'XHU1NjQ1XHU1NjQ2XHU1NjQ3XHU1NjQ4XHU1NjQ5XHU1NjRhXHU1NjRiXHU1NjRmXHU1NjUwXHU1NjUxXHU1NjUyXHU1NjUzXHU1NjU1XHU1NjU2XHU1NjVhXHU1NjViXHU1NjVkXHU1NjVlXHU1NjVmXHU1NjYwXHU1NjYxXHVmZmZkXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1'@;
put 'NjZlXHU1NjZmXHU1NjcwXHU1NjcyXHU1NjczXHU1Njc0XHU1Njc1XHU1Njc3XHU1Njc4XHU1Njc5XHU1NjdhXHU1NjdkXHU1NjdlXHU1NjdmXHU1NjgwXHU1NjgxXHU1NjgyXHU1NjgzXHU1Njg0XHU1Njg3XHU1Njg4XHU1Njg5XHU1NjhhXHU1NjhiXHU1NjhjXHU1NjhkXHU1NjkwXHU1Njkx'@;
put 'XHU1NjkyXHU1Njk0XHU1Njk1XHU1Njk2XHU1Njk3XHU1Njk4XHU1Njk5XHU1NjlhXHU1NjliXHU1NjljXHU1NjlkXHU1NjllXHU1NjlmXHU1NmEwXHU1NmExXHU1NmEyXHU1NmE0XHU1NmE1XHU1NmE2XHU1NmE3XHU1NmE4XHU1NmE5XHU1NmFhXHU1NmFiXHU1NmFjXHU1NmFkXHU1NmFlXHU1'@;
put 'NmIwXHU1NmIxXHU1NmIyXHU1NmIzXHU1NmI0XHU1NmI1XHU1NmI2XHU1NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkXHU1NmJlXHU1NmJmXHU1NmMwXHU1NmMxXHU1NmMyXHU1NmMzXHU1NmM0XHU1NmM1XHU1NmM2XHU1NmM3XHU1NmM4XHU1NmM5XHU1NmNiXHU1NmNjXHU1NmNkXHU1NmNl'@;
put 'XHU1NmNmXHU1NmQwXHU1NmQxXHU1NmQyXHU1NmQzXHU1NmQ1XHU1NmQ2XHU1NmQ4XHU1NmQ5XHU1NmRjXHU1NmUzXHU1NmU1XHU1NmU2XHU1NmU3XHU1NmU4XHU1NmU5XHU1NmVhXHU1NmVjXHU1NmVlXHU1NmVmXHU1NmYyXHU1NmYzXHU1NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1'@;
put 'NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiXHU1NzBjXHU1NzBkXHU1NzBlXHU1NzBmXHU1NzEwXHU1NzExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNV1bbV1dPTM0NTYw'@;
put 'K20sRlszNDU2MCttXT14WzEzNV1bbV0pO2Zvcih4WzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1'@;
put 'NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1'@;
put 'M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1'@;
put 'NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1NTc5NFx1NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdi'@;
put 'Nlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdiZVx1NTdiZlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1'@;
put 'NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1NTdlOVx1NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgw'@;
put 'OFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1'@;
put 'NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1NTgzN1x1NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'MzZdW21dXT0zNDgxNittLEZbMzQ4MTYrbV09eFsxMzZdW21dKTtmb3IoeFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4M2VcdTU4M2ZcdTU4NDBcdTU4NDFcdTU4NDJcdTU4NDNcdTU4NDVcdTU4NDZcdTU4NDdcdTU4NDhc'@;
put 'dTU4NDlcdTU4NGFcdTU4NGJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTlcdTU4NWFcdTU4NWJcdTU4NWNcdTU4NWRcdTU4NWZcdTU4NjBcdTU4NjFcdTU4NjJcdTU4NjNcdTU4NjRcdTU4NjZcdTU4NjdcdTU4NjhcdTU4NjlcdTU4NmFcdTU4'@;
put 'NmRcdTU4NmVcdTU4NmZcdTU4NzBcdTU4NzFcdTU4NzJcdTU4NzNcdTU4NzRcdTU4NzVcdTU4NzZcdTU4NzdcdTU4NzhcdTU4NzlcdTU4N2FcdTU4N2JcdTU4N2NcdTU4N2RcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGNcdWZmZmRcdTU4OGRc'@;
put 'dTU4OGVcdTU4OGZcdTU4OTBcdTU4OTFcdTU4OTRcdTU4OTVcdTU4OTZcdTU4OTdcdTU4OThcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTNcdTU4YTRcdTU4YTVcdTU4YTZcdTU4YTdcdTU4YWFcdTU4YWJcdTU4YWNcdTU4YWRcdTU4YWVcdTU4YWZcdTU4YjBcdTU4'@;
put 'YjFcdTU4YjJcdTU4YjNcdTU4YjRcdTU4YjVcdTU4YjZcdTU4YjdcdTU4YjhcdTU4YjlcdTU4YmFcdTU4YmJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzZcdTU4YzdcdTU4YzhcdTU4YzlcdTU4Y2FcdTU4Y2JcdTU4Y2NcdTU4Y2RcdTU4Y2VcdTU4Y2Zc'@;
put 'dTU4ZDBcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDZcdTU4ZDdcdTU4ZDhcdTU4ZDlcdTU4ZGFcdTU4ZGJcdTU4ZGNcdTU4ZGRcdTU4ZGVcdTU4ZGZcdTU4ZTBcdTU4ZTFcdTU4ZTJcdTU4ZTNcdTU4ZTVcdTU4ZTZcdTU4ZTdcdTU4ZThcdTU4ZTlcdTU4ZWFcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4'@;
put 'ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmFcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU4ZmVcdTU4ZmZcdTU5MDBcdTU5MDFcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDhcdTU5MDlcdTU5MGFcdTU5MGJcdTU5MGNcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThc'@;
put 'dTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzN11bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTM3XVttXV09MzUwNzIrbSxGWzM1MDcyK21dPXhbMTM3XVttXSk7Zm9yKHhbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTNkXHU1OTNlXHU1OTNmXHU1OTQwXHU1OTQzXHU1OTQ1XHU1OTQ2XHU1OTRh'@;
put 'XHU1OTRjXHU1OTRkXHU1OTUwXHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1OTVjXHU1OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2XHU1OTY3XHU1OTY4XHU1OTY5XHU1OTZhXHU1OTZiXHU1OTZjXHU1OTZkXHU1OTZlXHU1OTZmXHU1OTcwXHU1OTcxXHU1OTcyXHU1'@;
put 'OTc1XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1OTdlXHU1OTdmXHU1OTgwXHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1OTliXHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2'@;
put 'XHVmZmZkXHU1OWE3XHU1OWFjXHU1OWFkXHU1OWIwXHU1OWIxXHU1OWIzXHU1OWI0XHU1OWI1XHU1OWI2XHU1OWI3XHU1OWI4XHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmXHU1OWMwXHU1OWMxXHU1OWMyXHU1OWMzXHU1OWM0XHU1OWM1XHU1OWM3XHU1OWM4XHU1OWM5XHU1OWNjXHU1OWNkXHU1'@;
put 'OWNlXHU1OWNmXHU1OWQ1XHU1OWQ2XHU1OWQ5XHU1OWRiXHU1OWRlXHU1OWRmXHU1OWUwXHU1OWUxXHU1OWUyXHU1OWU0XHU1OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWViXHU1OWVkXHU1OWVlXHU1OWVmXHU1OWYwXHU1OWYxXHU1OWYyXHU1OWYzXHU1OWY0XHU1OWY1XHU1OWY2XHU1OWY3'@;
put 'XHU1OWY4XHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1YTBhXHU1YTBiXHU1YTBkXHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEyXHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1YTFiXHU1YTFkXHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1YTI2XHU1'@;
put 'YTI3XHU1YTI4XHU1YTJhXHU1YTJiXHU1YTJjXHU1YTJkXHU1YTJlXHU1YTJmXHU1YTMwXHU1YTMzXHU1YTM1XHU1YTM3XHU1YTM4XHU1YTM5XHU1YTNhXHU1YTNiXHU1YTNkXHU1YTNlXHU1YTNmXHU1YTQxXHU1YTQyXHU1YTQzXHU1YTQ0XHU1YTQ1XHU1YTQ3XHU1YTQ4XHU1YTRiXHU1YTRj'@;
put 'XHU1YTRkXHU1YTRlXHU1YTRmXHU1YTUwXHU1YTUxXHU1YTUyXHU1YTUzXHU1YTU0XHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1YTViXHU1YTVjXHU1YTVkXHU1YTVlXHU1YTVmXHU1YTYwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzhd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOF1bbV1dPTM1MzI4K20sRlszNTMyOCttXT14WzEzOF1bbV0pO2Zvcih4WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2'@;
put 'OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1NWE3MVx1NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1'@;
put 'NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5M1x1NWE5NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFh'@;
put 'OVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1NWFiMVx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1'@;
put 'NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFm'@;
put 'NVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1NWFmZFx1NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1'@;
put 'NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIxYlx1NWIxY1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIy'@;
put 'Zlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1NWIzYVx1NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzldW21dXT0zNTU4NCttLEZbMzU1ODQrbV09eFsxMzldW21dKTtmb3IoeFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNDhcdTViNDlcdTViNGFcdTVi'@;
put 'NGJcdTViNGNcdTViNGRcdTViNGVcdTViNGZcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZc'@;
put 'dTViOGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTVi'@;
put 'Y2FcdTViY2JcdTViY2RcdTViY2VcdTViY2ZcdWZmZmRcdTViZDFcdTViZDRcdTViZDVcdTViZDZcdTViZDdcdTViZDhcdTViZDlcdTViZGFcdTViZGJcdTViZGNcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTlcdTViZWFcdTViZWJcdTViZWNcdTViZWRcdTViZWZcdTViZjFc'@;
put 'dTViZjJcdTViZjNcdTViZjRcdTViZjVcdTViZjZcdTViZjdcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVj'@;
put 'MjFcdTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThc'@;
put 'dTVjNWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjdcdTVjNjhcdTVjNjlcdTVjNmFcdTVjNmJcdTVjNmNcdTVjNmRcdTVjNzBcdTVjNzJcdTVjNzNcdTVjNzRcdTVjNzVcdTVjNzZcdTVjNzdcdTVjNzhcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVj'@;
put 'ODNcdTVjODRcdTVjODVcdTVjODZcdTVjODdcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWRcdTVjOWVcdTVjOWZcdTVjYTBcdTVjYTFcdTVjYTRcdTVjYTVcdTVjYTZcdTVjYTdcdTVjYThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDBd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQwXVttXV09MzU4NDArbSxGWzM1ODQwK21dPXhbMTQwXVttXSk7Zm9yKHhbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2FhXHU1'@;
put 'Y2FlXHU1Y2FmXHU1Y2IwXHU1Y2IyXHU1Y2I0XHU1Y2I2XHU1Y2I5XHU1Y2JhXHU1Y2JiXHU1Y2JjXHU1Y2JlXHU1Y2MwXHU1Y2MyXHU1Y2MzXHU1Y2M1XHU1Y2M2XHU1Y2M3XHU1Y2M4XHU1Y2M5XHU1Y2NhXHU1Y2NjXHU1Y2NkXHU1Y2NlXHU1Y2NmXHU1Y2QwXHU1Y2QxXHU1Y2QzXHU1Y2Q0'@;
put 'XHU1Y2Q1XHU1Y2Q2XHU1Y2Q3XHU1Y2Q4XHU1Y2RhXHU1Y2RiXHU1Y2RjXHU1Y2RkXHU1Y2RlXHU1Y2RmXHU1Y2UwXHU1Y2UyXHU1Y2UzXHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1Y2VlXHU1Y2VmXHU1Y2YxXHU1Y2YyXHU1Y2YzXHU1Y2Y0XHU1Y2Y1XHU1Y2Y2XHU1Y2Y3XHU1Y2Y4XHU1'@;
put 'Y2Y5XHU1Y2ZhXHU1Y2ZjXHU1Y2ZkXHU1Y2ZlXHU1Y2ZmXHU1ZDAwXHVmZmZkXHU1ZDAxXHU1ZDA0XHU1ZDA1XHU1ZDA4XHU1ZDA5XHU1ZDBhXHU1ZDBiXHU1ZDBjXHU1ZDBkXHU1ZDBmXHU1ZDEwXHU1ZDExXHU1ZDEyXHU1ZDEzXHU1ZDE1XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFj'@;
put 'XHU1ZDFkXHU1ZDFmXHU1ZDIwXHU1ZDIxXHU1ZDIyXHU1ZDIzXHU1ZDI1XHU1ZDI4XHU1ZDJhXHU1ZDJiXHU1ZDJjXHU1ZDJmXHU1ZDMwXHU1ZDMxXHU1ZDMyXHU1ZDMzXHU1ZDM1XHU1ZDM2XHU1ZDM3XHU1ZDM4XHU1ZDM5XHU1ZDNhXHU1ZDNiXHU1ZDNjXHU1ZDNmXHU1ZDQwXHU1ZDQxXHU1'@;
put 'ZDQyXHU1ZDQzXHU1ZDQ0XHU1ZDQ1XHU1ZDQ2XHU1ZDQ4XHU1ZDQ5XHU1ZDRkXHU1ZDRlXHU1ZDRmXHU1ZDUwXHU1ZDUxXHU1ZDUyXHU1ZDUzXHU1ZDU0XHU1ZDU1XHU1ZDU2XHU1ZDU3XHU1ZDU5XHU1ZDVhXHU1ZDVjXHU1ZDVlXHU1ZDVmXHU1ZDYwXHU1ZDYxXHU1ZDYyXHU1ZDYzXHU1ZDY0'@;
put 'XHU1ZDY1XHU1ZDY2XHU1ZDY3XHU1ZDY4XHU1ZDZhXHU1ZDZkXHU1ZDZlXHU1ZDcwXHU1ZDcxXHU1ZDcyXHU1ZDczXHU1ZDc1XHU1ZDc2XHU1ZDc3XHU1ZDc4XHU1ZDc5XHU1ZDdhXHU1ZDdiXHU1ZDdjXHU1ZDdkXHU1ZDdlXHU1ZDdmXHU1ZDgwXHU1ZDgxXHU1ZDgzXHU1ZDg0XHU1ZDg1XHU1'@;
put 'ZDg2XHU1ZDg3XHU1ZDg4XHU1ZDg5XHU1ZDhhXHU1ZDhiXHU1ZDhjXHU1ZDhkXHU1ZDhlXHU1ZDhmXHU1ZDkwXHU1ZDkxXHU1ZDkyXHU1ZDkzXHU1ZDk0XHU1ZDk1XHU1ZDk2XHU1ZDk3XHU1ZDk4XHU1ZDlhXHU1ZDliXHU1ZDljXHU1ZDllXHU1ZDlmXHU1ZGEwXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MV1bbV1dPTM2MDk2K20sRlszNjA5NittXT14WzE0MV1bbV0pO2Zvcih4WzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1NWRhOFx1NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRi'@;
put 'Y1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRjNFx1NWRjNlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1'@;
put 'NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZFx1ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUx'@;
put 'Mlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyNFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1'@;
put 'NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1NWU0ZFx1NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2'@;
put 'Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2ZVx1NWU2Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1'@;
put 'NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1NWVhYlx1NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDJdW21dXT0zNjM1MittLEZbMzYzNTIrbV09eFsxNDJdW21dKTtmb3IoeFsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2JcdTVlY2NcdTVlY2RcdTVlY2VcdTVlY2ZcdTVlZDBcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGNcdTVlZGRcdTVlZGVcdTVlZGZcdTVlZTBcdTVlZTFcdTVlZTJcdTVlZTNcdTVlZTRcdTVl'@;
put 'ZTVcdTVlZTZcdTVlZTdcdTVlZTlcdTVlZWJcdTVlZWNcdTVlZWRcdTVlZWVcdTVlZWZcdTVlZjBcdTVlZjFcdTVlZjJcdTVlZjNcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJc'@;
put 'dTVmMTRcdTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdWZmZmRcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzJcdTVmMzNcdTVmMzRcdTVmMzVcdTVmMzZcdTVmMzdcdTVmMzhcdTVmM2JcdTVmM2RcdTVmM2VcdTVm'@;
put 'M2ZcdTVmNDFcdTVmNDJcdTVmNDNcdTVmNDRcdTVmNDVcdTVmNDZcdTVmNDdcdTVmNDhcdTVmNDlcdTVmNGFcdTVmNGJcdTVmNGNcdTVmNGRcdTVmNGVcdTVmNGZcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdc'@;
put 'dTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVm'@;
put 'YTBcdTVmYTJcdTVmYTNcdTVmYTRcdTVmYTVcdTVmYTZcdTVmYTdcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjJcdTVmYjNcdTVmYjRcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJcdTVmYmVcdTVmYmZcdTVmYzBcdTVmYzFcdTVmYzJcdTVmYzdcdTVmYzhc'@;
put 'dTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVm'@;
put 'ZmNcdTYwMDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQzXVttXV09MzY2MDgrbSxGWzM2NjA4K21dPXhbMTQzXVttXSk7Zm9yKHhbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDA4XHU2MDA5XHU2MDBiXHU2MDBjXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2MDJkXHU2MDJlXHU2MDMwXHU2MDMxXHU2MDMyXHU2MDMzXHU2'@;
put 'MDM0XHU2MDM2XHU2MDM3XHU2MDM4XHU2MDM5XHU2MDNhXHU2MDNkXHU2MDNlXHU2MDQwXHU2MDQ0XHU2MDQ1XHU2MDQ2XHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRhXHU2MDRjXHU2MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVl'@;
put 'XHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwXHVmZmZkXHU2MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2'@;
put 'MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEyXHU2MGE0XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIwXHU2MGIzXHU2MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJkXHU2MGJlXHU2MGJmXHU2MGMwXHU2MGMxXHU2MGMyXHU2MGMz'@;
put 'XHU2MGM0XHU2MGM3XHU2MGM4XHU2MGM5XHU2MGNjXHU2MGNkXHU2MGNlXHU2MGNmXHU2MGQwXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2MGUxXHU2MGUyXHU2MGUzXHU2MGU0XHU2MGU1XHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3XHU2'@;
put 'MGY4XHU2MGZiXHU2MGZjXHU2MGZkXHU2MGZlXHU2MGZmXHU2MTAyXHU2MTAzXHU2MTA0XHU2MTA1XHU2MTA3XHU2MTBhXHU2MTBiXHU2MTBjXHU2MTEwXHU2MTExXHU2MTEyXHU2MTEzXHU2MTE0XHU2MTE2XHU2MTE3XHU2MTE4XHU2MTE5XHU2MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2MTIx'@;
put 'XHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjXHU2MTJkXHU2MTJlXHU2MTJmXHU2MTMwXHU2MTMxXHU2MTMyXHU2MTMzXHU2MTM0XHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM4XHU2MTM5XHU2MTNhXHU2MTNiXHU2MTNjXHU2MTNkXHU2MTNlXHU2MTQwXHU2MTQxXHU2MTQyXHU2'@;
put 'MTQzXHU2MTQ0XHU2MTQ1XHU2MTQ2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NF1bbV1dPTM2ODY0K20sRlszNjg2NCttXT14WzE0NF1bbV0pO2Zvcih4WzE0NV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1'@;
put 'NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2ZFx1NjE2ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4'@;
put 'M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1NjE4ZFx1NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1'@;
put 'NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFhZVx1NjFhZlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFj'@;
put 'NFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1NjFkMFx1NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1'@;
put 'NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFlZlx1NjFmMFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIw'@;
put 'NFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1'@;
put 'NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDVdW21dXT0zNzEyMCttLEZbMzcxMjArbV09eFsxNDVdW21dKTtmb3IoeFsxNDZd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWNcdTYyNWRcdTYyNWVcdTYyNWZcdTYyNjBcdTYyNjFcdTYyNjJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFc'@;
put 'dTYyNzJcdTYyNzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGJcdTYyOGNcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVcdTYyYTNcdTYy'@;
put 'YTZcdTYyYTdcdTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzFcdWZmZmRcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFc'@;
put 'dTYyZTRcdTYyZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYz'@;
put 'MTlcdTYzMWNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzNcdTYzMzRcdTYzMzVcdTYzMzZcdTYzMzdcdTYzMzhcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJc'@;
put 'dTYzNTNcdTYzNTRcdTYzNTZcdTYzNTdcdTYzNThcdTYzNTlcdTYzNWFcdTYzNWJcdTYzNWNcdTYzNWRcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYz'@;
put 'N2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTlcdTYzOWFcdTYzOWJcdTYzOWNcdTYzOWRcdTYzOWVcdTYzOWZcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFc'@;
put 'dTYzYjJcdTYzYjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ2XVttXV09MzczNzYrbSxGWzM3Mzc2K21dPXhbMTQ2XVtt'@;
put 'XSk7Zm9yKHhbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2Q3XHU2M2Q4XHU2M2Q5'@;
put 'XHU2M2RhXHU2M2RiXHU2M2RjXHU2M2RkXHU2M2RmXHU2M2UyXHU2M2U0XHU2M2U1XHU2M2U2XHU2M2U3XHU2M2U4XHU2M2ViXHU2M2VjXHU2M2VlXHU2M2VmXHU2M2YwXHU2M2YxXHU2M2YzXHU2M2Y1XHU2M2Y3XHU2M2Y5XHU2M2ZhXHU2M2ZiXHU2M2ZjXHU2M2ZlXHU2NDAzXHU2NDA0XHU2'@;
put 'NDA2XHU2NDA3XHU2NDA4XHU2NDA5XHU2NDBhXHU2NDBkXHU2NDBlXHU2NDExXHU2NDEyXHU2NDE1XHU2NDE2XHU2NDE3XHU2NDE4XHU2NDE5XHU2NDFhXHU2NDFkXHU2NDFmXHU2NDIyXHU2NDIzXHU2NDI0XHVmZmZkXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlXHU2NDJm'@;
put 'XHU2NDMwXHU2NDMxXHU2NDMyXHU2NDMzXHU2NDM1XHU2NDM2XHU2NDM3XHU2NDM4XHU2NDM5XHU2NDNiXHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiXHU2NDRjXHU2NDRkXHU2NDRlXHU2NDRmXHU2NDUwXHU2NDUxXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2'@;
put 'NDU5XHU2NDVhXHU2NDViXHU2NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYyXHU2NDYzXHU2NDY0XHU2NDY1XHU2NDY2XHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlXHU2NDZmXHU2NDcwXHU2NDcxXHU2NDcyXHU2NDczXHU2NDc0XHU2NDc1XHU2NDc2XHU2NDc3XHU2NDdi'@;
put 'XHU2NDdjXHU2NDdkXHU2NDdlXHU2NDdmXHU2NDgwXHU2NDgxXHU2NDgzXHU2NDg2XHU2NDg4XHU2NDg5XHU2NDhhXHU2NDhiXHU2NDhjXHU2NDhkXHU2NDhlXHU2NDhmXHU2NDkwXHU2NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlhXHU2NDliXHU2NDljXHU2NDlkXHU2NDlmXHU2NGEwXHU2'@;
put 'NGExXHU2NGEyXHU2NGEzXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4XHU2NGFhXHU2NGFiXHU2NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2NGMxXHU2NGMzXHU2NGM0XHU2NGM2XHU2NGM3XHU2NGM4XHU2NGM5XHU2NGNh'@;
put 'XHU2NGNiXHU2NGNjXHU2NGNmXHU2NGQxXHU2NGQzXHU2NGQ0XHU2NGQ1XHU2NGQ2XHU2NGQ5XHU2NGRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0N11bbV1dPTM3NjMyK20sRlszNzYz'@;
put 'MittXT14WzE0N11bbV0pO2Zvcih4WzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRl'@;
put 'Y1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRmNVx1NjRmNlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1'@;
put 'NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1NjUxNFx1NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUy'@;
put 'N1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1'@;
put 'NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3'@;
put 'ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1'@;
put 'NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1NjViN1x1NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVk'@;
put 'OFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVlM1x1NjVlNFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDhdW21dXT0z'@;
put 'Nzg4OCttLEZbMzc4ODgrbV09eFsxNDhdW21dKTtmb3IoeFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmJcdTY1ZmNcdTY1ZmRcdTY1ZmVcdTY1ZmZcdTY2'@;
put 'MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVc'@;
put 'dTY2MzBcdTY2MzJcdTY2MzNcdTY2MzdcdTY2MzhcdTY2MzlcdTY2M2FcdTY2M2JcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDRcdTY2NDVcdTY2NDZcdTY2NDdcdTY2NDhcdTY2NDlcdTY2NGFcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NThcdWZmZmRcdTY2NTlcdTY2NWJcdTY2'@;
put 'NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjlcdTY2NmFcdTY2NmJcdTY2NmNcdTY2NmRcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZc'@;
put 'dTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OThcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWVcdTY2OWZcdTY2YTBcdTY2YTFcdTY2YTJcdTY2YTNcdTY2YTRcdTY2YTVcdTY2YTZcdTY2YTlcdTY2'@;
put 'YWFcdTY2YWJcdTY2YWNcdTY2YWRcdTY2YWZcdTY2YjBcdTY2YjFcdTY2YjJcdTY2YjNcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmZcdTY2YzBcdTY2YzFcdTY2YzJcdTY2YzNcdTY2YzRcdTY2YzVcdTY2YzZcdTY2YzdcdTY2YzhcdTY2Yzlc'@;
put 'dTY2Y2FcdTY2Y2JcdTY2Y2NcdTY2Y2RcdTY2Y2VcdTY2Y2ZcdTY2ZDBcdTY2ZDFcdTY2ZDJcdTY2ZDNcdTY2ZDRcdTY2ZDVcdTY2ZDZcdTY2ZDdcdTY2ZDhcdTY2ZGFcdTY2ZGVcdTY2ZGZcdTY2ZTBcdTY2ZTFcdTY2ZTJcdTY2ZTNcdTY2ZTRcdTY2ZTVcdTY2ZTdcdTY2ZThcdTY2ZWFcdTY2'@;
put 'ZWJcdTY2ZWNcdTY2ZWRcdTY2ZWVcdTY2ZWZcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTQ5XVttXV09MzgxNDQrbSxGWzM4MTQ0K21dPXhbMTQ5XVttXSk7Zm9yKHhbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzA0XHU2NzA1XHU2NzA2XHU2NzA3XHU2NzBjXHU2NzBlXHU2NzBmXHU2NzExXHU2NzEyXHU2'@;
put 'NzEzXHU2NzE2XHU2NzE4XHU2NzE5XHU2NzFhXHU2NzFjXHU2NzFlXHU2NzIwXHU2NzIxXHU2NzIyXHU2NzIzXHU2NzI0XHU2NzI1XHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNiXHU2NzNjXHU2NzNlXHU2NzNmXHU2NzQx'@;
put 'XHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2NzU0XHU2NzU1XHU2NzU3XHU2NzU4XHU2NzU5XHU2NzVhXHU2NzViXHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZiXHU2NzZjXHU2NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2XHVmZmZkXHU2'@;
put 'Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2XHU2Nzg4XHU2NzhhXHU2NzhjXHU2NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2Nzk2XHU2Nzk5XHU2NzliXHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2N2E2'@;
put 'XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5XHU2N2JhXHU2N2JiXHU2N2JjXHU2N2JkXHU2N2JlXHU2N2JmXHU2N2MwXHU2N2MyXHU2N2M1XHU2N2M2XHU2N2M3XHU2N2M4XHU2N2M5XHU2N2NhXHU2N2NiXHU2N2NjXHU2N2NkXHU2N2NlXHU2N2Q1XHU2N2Q2XHU2'@;
put 'N2Q3XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4XHU2N2VhXHU2N2ViXHU2N2VkXHU2N2VlXHU2N2YyXHU2N2Y1XHU2N2Y2XHU2N2Y3XHU2N2Y4XHU2N2Y5XHU2N2ZhXHU2N2ZiXHU2N2ZjXHU2N2ZlXHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2'@;
put 'XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4XHU2ODE5XHU2ODFhXHU2ODFiXHU2ODFjXHU2ODFlXHU2ODFmXHU2ODIwXHU2ODIyXHU2ODIzXHU2ODI0XHU2ODI1XHU2ODI2XHU2ODI3XHU2ODI4XHU2ODJiXHU2ODJjXHU2ODJkXHU2ODJlXHU2ODJmXHU2ODMwXHU2ODMxXHU2'@;
put 'ODM0XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2ODQ3XHU2ODRiXHU2ODRkXHU2ODRmXHU2ODUyXHU2ODU2XHU2ODU3XHU2ODU4XHU2ODU5XHU2ODVhXHU2ODViXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTBdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE1MF1bbV1dPTM4NDAwK20sRlszODQwMCttXT14WzE1MF1bbV0pO2Zvcih4WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1'@;
put 'Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5'@;
put 'MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1Njg5ZFx1Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1'@;
put 'NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1NjhjMVx1NjhjM1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1Njhk'@;
put 'Ylx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1NjhlN1x1NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1'@;
put 'NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1Njky'@;
put 'NVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1'@;
put 'Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1MVx1Njk1Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MTUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTFdW21dXT0zODY1NittLEZbMzg2NTYrbV09eFsxNTFdW21dKTtmb3IoeFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5Njdc'@;
put 'dTY5NjhcdTY5NjlcdTY5NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzJcdTY5NzNcdTY5NzRcdTY5NzVcdTY5NzZcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGVcdTY5OGZcdTY5OTBcdTY5OTFcdTY5'@;
put 'OTJcdTY5OTNcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWRcdTY5OWVcdTY5OWZcdTY5YTBcdTY5YTFcdTY5YTJcdTY5YTNcdTY5YTRcdTY5YTVcdTY5YTZcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5Yjlc'@;
put 'dTY5YmFcdTY5YmNcdTY5YmRcdWZmZmRcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzJcdTY5YzNcdTY5YzRcdTY5YzVcdTY5YzZcdTY5YzdcdTY5YzhcdTY5YzlcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDVcdTY5ZDZcdTY5ZDdcdTY5ZDhcdTY5ZDlcdTY5ZGFcdTY5'@;
put 'ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTFcdTY5ZTJcdTY5ZTNcdTY5ZTRcdTY5ZTVcdTY5ZTZcdTY5ZTdcdTY5ZThcdTY5ZTlcdTY5ZWFcdTY5ZWJcdTY5ZWNcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjNcdTY5ZjRcdTY5ZjVcdTY5ZjZcdTY5ZjdcdTY5ZjhcdTY5ZjlcdTY5ZmFcdTY5ZmJc'@;
put 'dTY5ZmNcdTY5ZmVcdTZhMDBcdTZhMDFcdTZhMDJcdTZhMDNcdTZhMDRcdTZhMDVcdTZhMDZcdTZhMDdcdTZhMDhcdTZhMDlcdTZhMGJcdTZhMGNcdTZhMGRcdTZhMGVcdTZhMGZcdTZhMTBcdTZhMTFcdTZhMTJcdTZhMTNcdTZhMTRcdTZhMTVcdTZhMTZcdTZhMTlcdTZhMWFcdTZhMWJcdTZh'@;
put 'MWNcdTZhMWRcdTZhMWVcdTZhMjBcdTZhMjJcdTZhMjNcdTZhMjRcdTZhMjVcdTZhMjZcdTZhMjdcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzZcdTZhMzdcdTZhMzhcdTZhMzlcdTZhM2FcdTZhM2JcdTZhM2NcdTZhM2ZcdTZhNDBc'@;
put 'dTZhNDFcdTZhNDJcdTZhNDNcdTZhNDVcdTZhNDZcdTZhNDhcdTZhNDlcdTZhNGFcdTZhNGJcdTZhNGNcdTZhNGRcdTZhNGVcdTZhNGZcdTZhNTFcdTZhNTJcdTZhNTNcdTZhNTRcdTZhNTVcdTZhNTZcdTZhNTdcdTZhNWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTJdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzE1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUyXVttXV09Mzg5MTIrbSxGWzM4OTEyK21dPXhbMTUyXVttXSk7Zm9yKHhbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVjXHU2YTVkXHU2YTVl'@;
put 'XHU2YTVmXHU2YTYwXHU2YTYyXHU2YTYzXHU2YTY0XHU2YTY2XHU2YTY3XHU2YTY4XHU2YTY5XHU2YTZhXHU2YTZiXHU2YTZjXHU2YTZkXHU2YTZlXHU2YTZmXHU2YTcwXHU2YTcyXHU2YTczXHU2YTc0XHU2YTc1XHU2YTc2XHU2YTc3XHU2YTc4XHU2YTdhXHU2YTdiXHU2YTdkXHU2YTdlXHU2'@;
put 'YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1XHU2YTg2XHU2YTg3XHU2YTg4XHU2YTg5XHU2YThhXHU2YThiXHU2YThjXHU2YThkXHU2YThmXHU2YTkyXHU2YTkzXHU2YTk0XHU2YTk1XHU2YTk2XHU2YTk4XHU2YTk5XHU2YTlhXHU2YTliXHU2YTljXHU2YTlkXHU2YTllXHU2YTlmXHU2YWEx'@;
put 'XHU2YWEyXHU2YWEzXHU2YWE0XHU2YWE1XHU2YWE2XHVmZmZkXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFkXHU2YWFlXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWIyXHU2YWIzXHU2YWI0XHU2YWI1XHU2YWI2XHU2YWI3XHU2YWI4XHU2YWI5XHU2YWJhXHU2YWJiXHU2YWJjXHU2YWJkXHU2YWJlXHU2'@;
put 'YWJmXHU2YWMwXHU2YWMxXHU2YWMyXHU2YWMzXHU2YWM0XHU2YWM1XHU2YWM2XHU2YWM3XHU2YWM4XHU2YWM5XHU2YWNhXHU2YWNiXHU2YWNjXHU2YWNkXHU2YWNlXHU2YWNmXHU2YWQwXHU2YWQxXHU2YWQyXHU2YWQzXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWQ3XHU2YWQ4XHU2YWQ5XHU2YWRh'@;
put 'XHU2YWRiXHU2YWRjXHU2YWRkXHU2YWRlXHU2YWRmXHU2YWUwXHU2YWUxXHU2YWUyXHU2YWUzXHU2YWU0XHU2YWU1XHU2YWU2XHU2YWU3XHU2YWU4XHU2YWU5XHU2YWVhXHU2YWViXHU2YWVjXHU2YWVkXHU2YWVlXHU2YWVmXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWYzXHU2YWY0XHU2YWY1XHU2'@;
put 'YWY2XHU2YWY3XHU2YWY4XHU2YWY5XHU2YWZhXHU2YWZiXHU2YWZjXHU2YWZkXHU2YWZlXHU2YWZmXHU2YjAwXHU2YjAxXHU2YjAyXHU2YjAzXHU2YjA0XHU2YjA1XHU2YjA2XHU2YjA3XHU2YjA4XHU2YjA5XHU2YjBhXHU2YjBiXHU2YjBjXHU2YjBkXHU2YjBlXHU2YjBmXHU2YjEwXHU2YjEx'@;
put 'XHU2YjEyXHU2YjEzXHU2YjE0XHU2YjE1XHU2YjE2XHU2YjE3XHU2YjE4XHU2YjE5XHU2YjFhXHU2YjFiXHU2YjFjXHU2YjFkXHU2YjFlXHU2YjFmXHU2YjI1XHU2YjI2XHU2YjI4XHU2YjI5XHU2YjJhXHU2YjJiXHU2YjJjXHU2YjJkXHU2YjJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MTUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1M11bbV1dPTM5MTY4K20sRlszOTE2OCttXT14WzE1M11bbV0pO2Zvcih4WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIy'@;
put 'Zlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1'@;
put 'NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1NmI2MFx1NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3'@;
put 'OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1'@;
put 'NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1NmJiMVx1NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJj'@;
put 'YVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJkZlx1NmJlMFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1'@;
put 'NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1NmMwM1x1NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMy'@;
put 'Y1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzE1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTRdW21dXT0zOTQyNCttLEZbMzk0MjQrbV09eFsxNTRdW21dKTtmb3IoeFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTZjNTlcdTZjNWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmJcdTZjNmNcdTZjNmRcdTZjNmVcdTZjNmZcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJc'@;
put 'dTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZj'@;
put 'YzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDhcdWZmZmRcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJc'@;
put 'dTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWZcdTZkMjBcdTZkMjFcdTZkMjJcdTZkMjNcdTZkMjRcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZk'@;
put 'MmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhc'@;
put 'dTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2RcdTZkN2VcdTZkN2ZcdTZkODBcdTZkODFcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZk'@;
put 'OTZcdTZkOTdcdTZkOThcdTZkOTlcdTZkOWFcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjlcdTZkYmFcdTZkYmJcdTZkYmNcdTZkYmRcdTZkYmVcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2Fc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU1XVttXV09Mzk2ODArbSxGWzM5NjgwK21dPXhbMTU1XVttXSk7Zm9yKHhbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZGNkXHU2ZGNlXHU2ZGNmXHU2ZGQwXHU2ZGQyXHU2ZGQzXHU2ZGQ0XHU2ZGQ1XHU2ZGQ3XHU2ZGRhXHU2ZGRiXHU2ZGRjXHU2ZGRmXHU2ZGUyXHU2ZGUzXHU2ZGU1XHU2ZGU3XHU2ZGU4XHU2ZGU5XHU2ZGVhXHU2ZGVkXHU2ZGVmXHU2ZGYwXHU2ZGYy'@;
put 'XHU2ZGY0XHU2ZGY1XHU2ZGY2XHU2ZGY4XHU2ZGZhXHU2ZGZkXHU2ZGZlXHU2ZGZmXHU2ZTAwXHU2ZTAxXHU2ZTAyXHU2ZTAzXHU2ZTA0XHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2ZTE5XHU2ZTFiXHU2ZTFjXHU2ZTFlXHU2'@;
put 'ZTFmXHU2ZTIyXHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMzXHU2ZTM1XHVmZmZkXHU2ZTM2XHU2ZTM3XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTNkXHU2ZTNlXHU2ZTNmXHU2ZTQwXHU2ZTQxXHU2ZTQyXHU2ZTQ1XHU2ZTQ2XHU2ZTQ3XHU2ZTQ4'@;
put 'XHU2ZTQ5XHU2ZTRhXHU2ZTRiXHU2ZTRjXHU2ZTRmXHU2ZTUwXHU2ZTUxXHU2ZTUyXHU2ZTU1XHU2ZTU3XHU2ZTU5XHU2ZTVhXHU2ZTVjXHU2ZTVkXHU2ZTVlXHU2ZTYwXHU2ZTYxXHU2ZTYyXHU2ZTYzXHU2ZTY0XHU2ZTY1XHU2ZTY2XHU2ZTY3XHU2ZTY4XHU2ZTY5XHU2ZTZhXHU2ZTZjXHU2'@;
put 'ZTZkXHU2ZTZmXHU2ZTcwXHU2ZTcxXHU2ZTcyXHU2ZTczXHU2ZTc0XHU2ZTc1XHU2ZTc2XHU2ZTc3XHU2ZTc4XHU2ZTc5XHU2ZTdhXHU2ZTdiXHU2ZTdjXHU2ZTdkXHU2ZTgwXHU2ZTgxXHU2ZTgyXHU2ZTg0XHU2ZTg3XHU2ZTg4XHU2ZThhXHU2ZThiXHU2ZThjXHU2ZThkXHU2ZThlXHU2ZTkx'@;
put 'XHU2ZTkyXHU2ZTkzXHU2ZTk0XHU2ZTk1XHU2ZTk2XHU2ZTk3XHU2ZTk5XHU2ZTlhXHU2ZTliXHU2ZTlkXHU2ZTllXHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2'@;
put 'ZWJjXHU2ZWJlXHU2ZWJmXHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5XHU2ZWNhXHU2ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3XHU2ZWVhXHU2ZWViXHU2ZWVjXHU2ZWVk'@;
put 'XHU2ZWVlXHU2ZWVmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Nl1bbV1dPTM5OTM2K20sRlszOTkzNittXT14WzE1Nl1bbV0pO2Zvcih4WzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYw'@;
put 'YVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1NmYxOVx1NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1'@;
put 'NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYzZlx1NmY0MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1'@;
put 'M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1'@;
put 'NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5'@;
put 'ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1NmZhYVx1NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1'@;
put 'NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZjYlx1NmZjY1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZk'@;
put 'Zlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTddW21dXT00MDE5MittLEZbNDAxOTIrbV09eFsxNTddW21dKTtmb3IoeFsxNThdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTZcdTZmZTdcdTZmZThcdTZmZTlcdTZmZWFcdTZmZWJcdTZmZWNcdTZmZWRcdTZmZjBcdTZmZjFcdTZmZjJcdTZmZjNcdTZmZjRcdTZmZjVcdTZmZjZcdTZmZjdcdTZmZjhcdTZmZjlcdTZmZmFcdTZm'@;
put 'ZmJcdTZmZmNcdTZmZmRcdTZmZmVcdTZmZmZcdTcwMDBcdTcwMDFcdTcwMDJcdTcwMDNcdTcwMDRcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMDhcdTcwMDlcdTcwMGFcdTcwMGJcdTcwMGNcdTcwMGRcdTcwMGVcdTcwMGZcdTcwMTBcdTcwMTJcdTcwMTNcdTcwMTRcdTcwMTVcdTcwMTZcdTcwMTdc'@;
put 'dTcwMThcdTcwMTlcdTcwMWNcdTcwMWRcdTcwMWVcdTcwMWZcdTcwMjBcdTcwMjFcdTcwMjJcdTcwMjRcdTcwMjVcdTcwMjZcdTcwMjdcdTcwMjhcdTcwMjlcdTcwMmFcdWZmZmRcdTcwMmJcdTcwMmNcdTcwMmRcdTcwMmVcdTcwMmZcdTcwMzBcdTcwMzFcdTcwMzJcdTcwMzNcdTcwMzRcdTcw'@;
put 'MzZcdTcwMzdcdTcwMzhcdTcwM2FcdTcwM2JcdTcwM2NcdTcwM2RcdTcwM2VcdTcwM2ZcdTcwNDBcdTcwNDFcdTcwNDJcdTcwNDNcdTcwNDRcdTcwNDVcdTcwNDZcdTcwNDdcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNGRcdTcwNGVcdTcwNTBcdTcwNTFcdTcwNTJcdTcwNTNcdTcwNTRc'@;
put 'dTcwNTVcdTcwNTZcdTcwNTdcdTcwNThcdTcwNTlcdTcwNWFcdTcwNWJcdTcwNWNcdTcwNWRcdTcwNWZcdTcwNjBcdTcwNjFcdTcwNjJcdTcwNjNcdTcwNjRcdTcwNjVcdTcwNjZcdTcwNjdcdTcwNjhcdTcwNjlcdTcwNmFcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcw'@;
put 'NzlcdTcwN2FcdTcwN2JcdTcwN2RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWVcdTcwOWZcdTcwYTBcdTcwYTFcdTcwYTJcdTcwYTNc'@;
put 'dTcwYTRcdTcwYTVcdTcwYTZcdTcwYTdcdTcwYThcdTcwYTlcdTcwYWFcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2JcdTcwY2NcdTcwY2RcdTcwY2VcdTcwY2ZcdTcwZDBcdTcwZDFcdTcw'@;
put 'ZDJcdTcwZDNcdTcwZDRcdTcwZDVcdTcwZDZcdTcwZDdcdTcwZGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU4XVttXV09NDA0NDgrbSxGWzQwNDQ4K21dPXhbMTU4XVttXSk7Zm9yKHhb'@;
put 'MTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGRjXHU3MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwXHU3MGYxXHU3MGYyXHU3MGYzXHU3MGY0XHU3MGY1XHU3MGY2XHU3'@;
put 'MGY4XHU3MGZhXHU3MGZiXHU3MGZjXHU3MGZlXHU3MGZmXHU3MTAwXHU3MTAxXHU3MTAyXHU3MTAzXHU3MTA0XHU3MTA1XHU3MTA2XHU3MTA3XHU3MTA4XHU3MTBiXHU3MTBjXHU3MTBkXHU3MTBlXHU3MTBmXHU3MTExXHU3MTEyXHU3MTE0XHU3MTE3XHU3MTFiXHU3MTFjXHU3MTFkXHU3MTFl'@;
put 'XHU3MTFmXHU3MTIwXHU3MTIxXHU3MTIyXHU3MTIzXHU3MTI0XHU3MTI1XHU3MTI3XHU3MTI4XHU3MTI5XHU3MTJhXHU3MTJiXHU3MTJjXHU3MTJkXHU3MTJlXHU3MTMyXHU3MTMzXHU3MTM0XHVmZmZkXHU3MTM1XHU3MTM3XHU3MTM4XHU3MTM5XHU3MTNhXHU3MTNiXHU3MTNjXHU3MTNkXHU3'@;
put 'MTNlXHU3MTNmXHU3MTQwXHU3MTQxXHU3MTQyXHU3MTQzXHU3MTQ0XHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3MTRiXHU3MTRkXHU3MTRmXHU3MTUwXHU3MTUxXHU3MTUyXHU3MTUzXHU3MTU0XHU3MTU1XHU3MTU2XHU3MTU3XHU3MTU4XHU3MTU5XHU3MTVhXHU3MTViXHU3MTVkXHU3MTVm'@;
put 'XHU3MTYwXHU3MTYxXHU3MTYyXHU3MTYzXHU3MTY1XHU3MTY5XHU3MTZhXHU3MTZiXHU3MTZjXHU3MTZkXHU3MTZmXHU3MTcwXHU3MTcxXHU3MTc0XHU3MTc1XHU3MTc2XHU3MTc3XHU3MTc5XHU3MTdiXHU3MTdjXHU3MTdlXHU3MTdmXHU3MTgwXHU3MTgxXHU3MTgyXHU3MTgzXHU3MTg1XHU3'@;
put 'MTg2XHU3MTg3XHU3MTg4XHU3MTg5XHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhXHU3MTliXHU3MTljXHU3MTlkXHU3MTllXHU3MWExXHU3MWEyXHU3MWEzXHU3MWE0XHU3MWE1XHU3MWE2XHU3MWE3XHU3MWE5'@;
put 'XHU3MWFhXHU3MWFiXHU3MWFkXHU3MWFlXHU3MWFmXHU3MWIwXHU3MWIxXHU3MWIyXHU3MWI0XHU3MWI2XHU3MWI3XHU3MWI4XHU3MWJhXHU3MWJiXHU3MWJjXHU3MWJkXHU3MWJlXHU3MWJmXHU3MWMwXHU3MWMxXHU3MWMyXHU3MWM0XHU3MWM1XHU3MWM2XHU3MWM3XHU3MWM4XHU3MWM5XHU3'@;
put 'MWNhXHU3MWNiXHU3MWNjXHU3MWNkXHU3MWNmXHU3MWQwXHU3MWQxXHU3MWQyXHU3MWQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OV1bbV1dPTQwNzA0K20sRls0MDcwNCttXT14WzE1'@;
put 'OV1bbV0pO2Zvcih4WzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1'@;
put 'NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1NzFmNFx1NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIw'@;
put 'NVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIxMVx1NzIxMlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1'@;
put 'NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0'@;
put 'ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1'@;
put 'NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1NzI4ZVx1NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJh'@;
put 'MVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJhZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1'@;
put 'NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjBdW21dXT00MDk2MCttLEZb'@;
put 'NDA5NjArbV09eFsxNjBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAw'@;
put 'Zlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1'@;
put 'MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVj'@;
put 'Nlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjFdW21dXT00MTIxNittLEZbNDEy'@;
put 'MTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0'@;
put 'OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVc'@;
put 'dTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIx'@;
put 'NjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYyXVttXV09'@;
put 'NDE0NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVm'@;
put 'ZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0'@;
put 'XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVm'@;
put 'ZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjNdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1'@;
put 'MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3'@;
put 'Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1'@;
put 'MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY0XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRdW21dKTtmb3IoeFsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRc'@;
put 'dTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMw'@;
put 'ZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJc'@;
put 'dTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjVdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQyMjQwK21dPXhbMTY1XVttXSk7Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2Ez'@;
put 'XHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUw'@;
put 'M2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQy'@;
put 'XHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY2XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1dPTQyNDk2K20sRls0MjQ5NittXT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQx'@;
put 'ZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0'@;
put 'NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjddW21dXT00Mjc1MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAy'@;
put 'Y2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIxMDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlcdTIyMTVcdTIyMWZcdTIyMjNcdTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTBcdTI1NTFcdTI1NTJcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdc'@;
put 'dTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTI1NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTI1NmJcdTI1NmNcdTI1NmRcdTI1NmVcdTI1NmZcdTI1NzBcdTI1NzFcdTI1NzJcdTI1'@;
put 'NzNcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdWZmZmRcdTI1ODhcdTI1ODlcdTI1OGFcdTI1OGJcdTI1OGNcdTI1OGRcdTI1OGVcdTI1OGZcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1ZTVcdTI2MDlcdTIyOTVc'@;
put 'dTMwMTJcdTMwMWRcdTMwMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1'@;
put 'MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdTAyNTFcdWZmZmRcdTAxNDRcdTAxNDhcdWZmZmRcdTAyNjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRc'@;
put 'dTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMx'@;
put 'MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjhdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgrbSxGWzQzMDA4K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUz'@;
put 'MDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVmZTRiXHVmZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVm'@;
put 'ZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4XHVmZTY5XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUy'@;
put 'NTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3'@;
put 'XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUy'@;
put 'NTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQzMjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NzJkY1x1NzJkZFx1NzJkZlx1NzJlMlx1NzJlM1x1NzJlNFx1NzJlNVx1NzJlNlx1NzJlN1x1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwNlx1NzMwN1x1NzMwOFx1NzMwOVx1NzMwYlx1NzMwY1x1NzMw'@;
put 'ZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MFx1'@;
put 'NzM0MVx1NzM0Mlx1NzM0M1x1NzM0NFx1NzM0NVx1NzM0Nlx1NzM0N1x1NzM0OFx1ZmZmZFx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OFx1NzM1OVx1NzM1YVx1NzM1Ylx1NzM1Y1x1NzM1ZFx1NzM1ZVx1NzM1'@;
put 'Zlx1NzM2MVx1NzM2Mlx1NzM2M1x1NzM2NFx1NzM2NVx1NzM2Nlx1NzM2N1x1NzM2OFx1NzM2OVx1NzM2YVx1NzM2Ylx1NzM2ZVx1NzM3MFx1NzM3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT14WzE3MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzBdW21dXT00MzUyMCttLEZbNDM1MjArbV09eFsxNzBdW21dKTtmb3IoeFsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTczNzJcdTczNzNcdTczNzRcdTczNzVcdTczNzZcdTczNzdcdTczNzhcdTczNzlcdTczN2FcdTczN2JcdTczN2NcdTczN2RcdTczN2ZcdTczODBcdTczODFcdTczODJcdTczODNcdTczODVcdTczODZcdTczODhcdTczOGFcdTczOGNcdTczOGRcdTczOGZcdTczOTBcdTcz'@;
put 'OTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTczOWFcdTczOWNcdTczOWRcdTczOWVcdTczYTBcdTczYTFcdTczYTNcdTczYTRcdTczYTVcdTczYTZcdTczYTdcdTczYThcdTczYWFcdTczYWNcdTczYWRcdTczYjFcdTczYjRcdTczYjVcdTczYjZcdTczYjhcdTczYjlc'@;
put 'dTczYmNcdTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzNcdTczYzRcdTczYzVcdTczYzZcdTczYzdcdWZmZmRcdTczY2JcdTczY2NcdTczY2VcdTczZDJcdTczZDNcdTczZDRcdTczZDVcdTczZDZcdTczZDdcdTczZDhcdTczZGFcdTczZGJcdTczZGNcdTczZGRcdTczZGZcdTczZTFcdTcz'@;
put 'ZTJcdTczZTNcdTczZTRcdTczZTZcdTczZThcdTczZWFcdTczZWJcdTczZWNcdTczZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjNcdTczZjRcdTczZjVcdTczZjZcdTczZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcxXVttXV09NDM3NzYrbSxGWzQzNzc2K21dPXhbMTcxXVttXSk7Zm9yKHhbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3'@;
put 'NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQw'@;
put 'XHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZkXHU3NDRlXHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3'@;
put 'NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3NDczXHU3NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Ml1bbV1dPTQ0MDMyK20sRls0NDAzMittXT14WzE3Ml1bbV0pO2Zvcih4WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1NzQ5MVx1NzQ5Mlx1NzQ5M1x1NzQ5NFx1NzQ5NVx1NzQ5Nlx1NzQ5N1x1'@;
put 'NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Ylx1NzQ5ZFx1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhMlx1NzRhM1x1NzRhNFx1NzRhNVx1NzRhNlx1NzRhYVx1NzRhYlx1NzRhY1x1NzRhZFx1NzRhZVx1NzRhZlx1NzRiMFx1NzRiMVx1NzRiMlx1NzRiM1x1NzRiNFx1NzRiNVx1NzRiNlx1NzRiN1x1NzRi'@;
put 'OFx1NzRiOVx1NzRiYlx1NzRiY1x1NzRiZFx1NzRiZVx1NzRiZlx1NzRjMFx1NzRjMVx1NzRjMlx1NzRjM1x1NzRjNFx1NzRjNVx1NzRjNlx1NzRjN1x1ZmZmZFx1NzRjOFx1NzRjOVx1NzRjYVx1NzRjYlx1NzRjY1x1NzRjZFx1NzRjZVx1NzRjZlx1NzRkMFx1NzRkMVx1NzRkM1x1NzRkNFx1'@;
put 'NzRkNVx1NzRkNlx1NzRkN1x1NzRkOFx1NzRkOVx1NzRkYVx1NzRkYlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlN1x1NzRlOFx1NzRlOVx1NzRlYVx1NzRlYlx1NzRlY1x1NzRlZFx1NzRmMFx1NzRmMVx1NzRmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTczXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzNdW21dXT00NDI4OCttLEZbNDQyODgrbV09eFsxNzNdW21dKTtmb3IoeFsxNzRdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjNcdTc0ZjVcdTc0ZjhcdTc0ZjlcdTc0ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmRcdTc0ZmVcdTc1MDBcdTc1MDFcdTc1MDJcdTc1MDNcdTc1MDVcdTc1MDZcdTc1MDdcdTc1MDhcdTc1MDlcdTc1MGFc'@;
put 'dTc1MGJcdTc1MGNcdTc1MGVcdTc1MTBcdTc1MTJcdTc1MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJcdTc1MWRcdTc1MWVcdTc1MjBcdTc1MjFcdTc1MjJcdTc1MjNcdTc1MjRcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1M2ZcdTc1'@;
put 'NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NGFcdTc1NGRcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1NTZcdTc1NTdcdTc1NThcdWZmZmRcdTc1NWRcdTc1NWVcdTc1NWZcdTc1NjBcdTc1NjFcdTc1NjJcdTc1NjNcdTc1NjRcdTc1NjdcdTc1Njhc'@;
put 'dTc1NjlcdTc1NmJcdTc1NmNcdTc1NmRcdTc1NmVcdTc1NmZcdTc1NzBcdTc1NzFcdTc1NzNcdTc1NzVcdTc1NzZcdTc1NzdcdTc1N2FcdTc1N2JcdTc1N2NcdTc1N2RcdTc1N2VcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVcdTc1ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc0XVttXV09NDQ1NDQrbSxGWzQ0NTQ0K21dPXhbMTc0XVttXSk7Zm9y'@;
put 'KHhbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThhXHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4'@;
put 'XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3'@;
put 'NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEy'@;
put 'XHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NV1bbV1dPTQ0ODAwK20sRls0NDgwMCttXT14'@;
put 'WzE3NV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY0NVx1NzY0Nlx1NzY0N1x1NzY0OFx1NzY0OVx1NzY0YVx1NzY0Ylx1NzY0ZVx1NzY0Zlx1NzY1MFx1NzY1MVx1NzY1Mlx1NzY1M1x1NzY1NVx1NzY1'@;
put 'N1x1NzY1OFx1NzY1OVx1NzY1YVx1NzY1Ylx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NFx1NzY2NVx1NzY2Nlx1NzY2N1x1NzY2OFx1NzY2OVx1NzY2YVx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MFx1NzY3MVx1NzY3Mlx1NzY3M1x1NzY3NFx1NzY3NVx1NzY3Nlx1NzY3N1x1'@;
put 'NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5Ylx1ZmZmZFx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Zlx1NzZhMFx1NzZh'@;
put 'MVx1NzZhMlx1NzZhM1x1NzZhNVx1NzZhNlx1NzZhN1x1NzZhOFx1NzZhOVx1NzZhYVx1NzZhYlx1NzZhY1x1NzZhZFx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNVx1NzZiNlx1NzZiN1x1NzZiOFx1NzZiOVx1NzZiYVx1NzZiYlx1NzZiY1x1NzZiZFx1NzZiZVx1NzZjMFx1NzZjMVx1NzZjM1x1'@;
put 'NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFm'@;
put 'OVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1'@;
put 'NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2Vk'@;
put 'MVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzZdW21dXT00NTA1Nitt'@;
put 'LEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVcdTc2'@;
put 'ZTBcdTc2ZTFcdTc2ZTJcdTc2ZTNcdTc2ZTRcdTc2ZTZcdTc2ZTdcdTc2ZThcdTc2ZTlcdTc2ZWFcdTc2ZWJcdTc2ZWNcdTc2ZWRcdTc2ZjBcdTc2ZjNcdTc2ZjVcdTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJcdTc3MDNcdTc3MDVcdTc3MDZcdTc3MGFc'@;
put 'dTc3MGNcdTc3MGVcdTc3MGZcdTc3MTBcdTc3MTFcdTc3MTJcdTc3MTNcdTc3MTRcdTc3MTVcdTc3MTZcdTc3MTdcdTc3MThcdTc3MWJcdTc3MWNcdTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3MjdcdTc3MmFcdTc3MmJcdWZmZmRcdTc3MmNcdTc3MmVcdTc3MzBcdTc3'@;
put 'MzFcdTc3MzJcdTc3MzNcdTc3MzRcdTc3MzlcdTc3M2JcdTc3M2RcdTc3M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZcdTc3NDhcdTc3NDlcdTc3NGFcdTc3NGJcdTc3NGNcdTc3NGRcdTc3NGVcdTc3NGZcdTc3NTJcdTc3NTNcdTc3NTRcdTc3NTVcdTc3NTZcdTc3NTdcdTc3NThc'@;
put 'dTc3NTlcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcx'@;
put 'MTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRc'@;
put 'dTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2'@;
put 'MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc3'@;
put 'XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3'@;
put 'NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2'@;
put 'XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3'@;
put 'N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2Rl'@;
put 'XHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1'@;
put 'NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdm'@;
put 'XHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4'@;
put 'YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzhdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1'@;
put 'NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwM1x1NzgwNFx1NzgwNVx1NzgwNlx1NzgwN1x1NzgwOFx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1Nzgy'@;
put 'YVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YVx1'@;
put 'ZmZmZFx1Nzg1Ylx1Nzg1Y1x1Nzg1ZVx1Nzg1Zlx1Nzg2MFx1Nzg2MVx1Nzg2Mlx1Nzg2M1x1Nzg2NFx1Nzg2NVx1Nzg2Nlx1Nzg2N1x1Nzg2OFx1Nzg2OVx1Nzg2Zlx1Nzg3MFx1Nzg3MVx1Nzg3Mlx1Nzg3M1x1Nzg3NFx1Nzg3NVx1Nzg3Nlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3Ylx1Nzg3'@;
put 'ZFx1Nzg3ZVx1Nzg3Zlx1Nzg4MFx1Nzg4MVx1Nzg4Mlx1Nzg4M1x1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1'@;
put 'NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAx'@;
put 'ZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1'@;
put 'N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc5XVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJc'@;
put 'dTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZcdTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZcdTc4YThcdTc4YTlcdTc4YWFcdTc4YWJcdTc4YWNcdTc4YWRcdTc4YWVcdTc4YWZcdTc4YjVcdTc4YjZcdTc4YjdcdTc4YjhcdTc4YmFcdTc4YmJcdTc4'@;
put 'YmNcdTc4YmRcdTc4YmZcdTc4YzBcdTc4YzJcdTc4YzNcdTc4YzRcdTc4YzZcdTc4YzdcdTc4YzhcdTc4Y2NcdTc4Y2RcdTc4Y2VcdTc4Y2ZcdTc4ZDFcdTc4ZDJcdTc4ZDNcdTc4ZDZcdTc4ZDdcdTc4ZDhcdTc4ZGFcdTc4ZGJcdTc4ZGNcdTc4ZGRcdTc4ZGVcdTc4ZGZcdTc4ZTBcdTc4ZTFc'@;
put 'dTc4ZTJcdTc4ZTNcdWZmZmRcdTc4ZTRcdTc4ZTVcdTc4ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWRcdTc4ZWVcdTc4ZWZcdTc4ZjBcdTc4ZjFcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmJcdTc4ZmNcdTc4ZmRcdTc4ZmVcdTc4ZmZcdTc5MDBcdTc5MDJcdTc5'@;
put 'MDNcdTc5MDRcdTc5MDZcdTc5MDdcdTc5MDhcdTc5MDlcdTc5MGFcdTc5MGJcdTc5MGNcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZc'@;
put 'dTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgw'@;
put 'NmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNc'@;
put 'dTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODBdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEw'@;
put 'XHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3OTIxXHU3OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3'@;
put 'OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1'@;
put 'XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3OTcyXHU3OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3'@;
put 'OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUz'@;
put 'XHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0'@;
put 'ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQz'@;
put 'XHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgxXS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5M1x1Nzk5'@;
put 'NFx1Nzk5NVx1Nzk5Nlx1Nzk5N1x1Nzk5OFx1Nzk5OVx1Nzk5Ylx1Nzk5Y1x1Nzk5ZFx1Nzk5ZVx1Nzk5Zlx1NzlhMFx1NzlhMVx1NzlhMlx1NzlhM1x1NzlhNFx1NzlhNVx1NzlhNlx1NzlhOFx1NzlhOVx1NzlhYVx1NzlhYlx1NzlhY1x1NzlhZFx1NzlhZVx1NzlhZlx1NzliMFx1NzliMVx1'@;
put 'NzliMlx1NzliNFx1NzliNVx1NzliNlx1NzliN1x1NzliOFx1NzliY1x1NzliZlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOVx1NzlkYVx1NzlkYlx1NzlkY1x1NzlkZFx1Nzlk'@;
put 'ZVx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYVx1ZmZmZFx1NzllY1x1NzllZVx1NzlmMVx1NzlmMlx1NzlmM1x1NzlmNFx1NzlmNVx1NzlmNlx1NzlmN1x1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1'@;
put 'N2EwYVx1N2EwY1x1N2EwZlx1N2ExMFx1N2ExMVx1N2ExMlx1N2ExM1x1N2ExNVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJh'@;
put 'OFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1'@;
put 'N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIz'@;
put 'NVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjRcdTdhMjVcdTdhMjZcdTdhMjdcdTdhMjhcdTdhMjlcdTdhMmFcdTdhMmJcdTdhMmNcdTdhMmRcdTdhMmVcdTdhMmZcdTdhMzBcdTdhMzFcdTdhMzJcdTdhMzRcdTdhMzVcdTdhMzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdhNDBcdTdhNDFc'@;
put 'dTdhNDJcdTdhNDNcdTdhNDRcdTdhNDVcdTdhNDdcdTdhNDhcdTdhNDlcdTdhNGFcdTdhNGJcdTdhNGNcdTdhNGRcdTdhNGVcdTdhNGZcdTdhNTBcdTdhNTJcdTdhNTNcdTdhNTRcdTdhNTVcdTdhNTZcdTdhNThcdTdhNTlcdTdhNWFcdTdhNWJcdTdhNWNcdTdhNWRcdTdhNWVcdTdhNWZcdTdh'@;
put 'NjBcdTdhNjFcdTdhNjJcdTdhNjNcdTdhNjRcdTdhNjVcdTdhNjZcdTdhNjdcdTdhNjhcdWZmZmRcdTdhNjlcdTdhNmFcdTdhNmJcdTdhNmNcdTdhNmRcdTdhNmVcdTdhNmZcdTdhNzFcdTdhNzJcdTdhNzNcdTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdc'@;
put 'dTdhODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdhOGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdhOWVcdTdhYTFcdTdhYTJcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdm'@;
put 'ZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFc'@;
put 'dTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3'@;
put 'MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3YWI1XHU3YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMy'@;
put 'XHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQyXHU3YWQzXHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3'@;
put 'YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3YWY3XHU3YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBk'@;
put 'XHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2'@;
put 'NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5'@;
put 'XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3'@;
put 'Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlh'@;
put 'XHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0Mlx1N2I0M1x1N2I0NFx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1'@;
put 'NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2M1x1N2I2NFx1N2I2NVx1N2I2Nlx1N2I2N1x1N2I2OFx1N2I2OVx1N2I2YVx1N2I2Ylx1N2I2Y1x1N2I2ZFx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1'@;
put 'N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4Nlx1N2I4N1x1N2I4OFx1N2I4OVx1N2I4YVx1N2I4Ylx1N2I4Y1x1N2I4ZVx1N2I4Zlx1ZmZmZFx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2Jh'@;
put 'NVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOVx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JiZVx1N2JiZlx1N2JjMFx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1'@;
put 'NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYx'@;
put 'M1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1'@;
put 'NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5'@;
put 'Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsxODZdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiYzVcdTdiYzhcdTdiYzlcdTdiY2FcdTdiY2JcdTdiY2RcdTdiY2VcdTdiY2ZcdTdiZDBcdTdiZDJcdTdiZDRcdTdiZDVcdTdiZDZcdTdiZDdcdTdiZDhcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdiZTBcdTdi'@;
put 'ZTJcdTdiZTNcdTdiZTRcdTdiZTdcdTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjJcdTdiZjNcdTdiZjRcdTdiZjVcdTdiZjZcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdiZmZcdTdjMDBcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRcdTdjMDVc'@;
put 'dTdjMDZcdTdjMDhcdTdjMDlcdTdjMGFcdTdjMGRcdTdjMGVcdTdjMTBcdTdjMTFcdTdjMTJcdTdjMTNcdTdjMTRcdTdjMTVcdTdjMTdcdTdjMThcdTdjMTlcdWZmZmRcdTdjMWFcdTdjMWJcdTdjMWNcdTdjMWRcdTdjMWVcdTdjMjBcdTdjMjFcdTdjMjJcdTdjMjNcdTdjMjRcdTdjMjVcdTdj'@;
put 'MjhcdTdjMjlcdTdjMmJcdTdjMmNcdTdjMmRcdTdjMmVcdTdjMmZcdTdjMzBcdTdjMzFcdTdjMzJcdTdjMzNcdTdjMzRcdTdjMzVcdTdjMzZcdTdjMzdcdTdjMzlcdTdjM2FcdTdjM2JcdTdjM2NcdTdjM2RcdTdjM2VcdTdjNDJcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNc'@;
put 'dTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkw'@;
put 'ZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBc'@;
put 'dTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0'@;
put 'NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2XVttXSk7Zm9yKHhbMTg3XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3YzQ5XHU3YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3'@;
put 'YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1XHU3YzY2XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3Yzcx'@;
put 'XHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3Yzg2XHU3Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3'@;
put 'Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2IwXHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0'@;
put 'XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3'@;
put 'MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3'@;
put 'XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1'@;
put 'MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0Nzg3MittXT14WzE4N11bbV0p'@;
put 'O2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZVx1N2NjZlx1N2NkMFx1N2NkMVx1N2NkMlx1N2NkM1x1N2NkNFx1N2NkOFx1'@;
put 'N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMVx1N2NlMlx1N2NlM1x1N2NlNFx1N2NlNVx1N2NlNlx1N2NlN1x1N2NlOVx1N2NlYVx1N2NlYlx1N2NlY1x1N2NlZFx1N2NlZVx1N2NmMFx1N2NmMVx1N2NmMlx1N2NmM1x1N2NmNFx1N2NmNVx1N2NmNlx1N2NmN1x1N2NmOVx1N2NmYVx1N2Nm'@;
put 'Y1x1N2NmZFx1N2NmZVx1N2NmZlx1N2QwMFx1N2QwMVx1N2QwMlx1N2QwM1x1N2QwNFx1N2QwNVx1N2QwNlx1N2QwN1x1N2QwOFx1N2QwOVx1N2QwYlx1N2QwY1x1N2QwZFx1N2QwZVx1N2QwZlx1N2QxMFx1ZmZmZFx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNFx1N2QxNVx1N2QxNlx1N2QxN1x1'@;
put 'N2QxOFx1N2QxOVx1N2QxYVx1N2QxYlx1N2QxY1x1N2QxZFx1N2QxZVx1N2QxZlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMFx1N2QzMVx1N2QzMlx1N2QzM1x1N2QzNFx1N2QzNVx1N2QzNlx1ODA4Y1x1OTk2'@;
put 'NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1'@;
put 'NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0'@;
put 'N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1'@;
put 'NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21dXT00ODEyOCttLEZbNDgxMjgr'@;
put 'bV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMzdcdTdkMzhcdTdkMzlcdTdkM2FcdTdkM2JcdTdkM2NcdTdkM2RcdTdkM2VcdTdkM2ZcdTdkNDBcdTdkNDFcdTdkNDJcdTdkNDNcdTdkNDRc'@;
put 'dTdkNDVcdTdkNDZcdTdkNDdcdTdkNDhcdTdkNDlcdTdkNGFcdTdkNGJcdTdkNGNcdTdkNGRcdTdkNGVcdTdkNGZcdTdkNTBcdTdkNTFcdTdkNTJcdTdkNTNcdTdkNTRcdTdkNTVcdTdkNTZcdTdkNTdcdTdkNThcdTdkNTlcdTdkNWFcdTdkNWJcdTdkNWNcdTdkNWRcdTdkNWVcdTdkNWZcdTdk'@;
put 'NjBcdTdkNjFcdTdkNjJcdTdkNjNcdTdkNjRcdTdkNjVcdTdkNjZcdTdkNjdcdTdkNjhcdTdkNjlcdTdkNmFcdTdkNmJcdTdkNmNcdTdkNmRcdTdkNmZcdTdkNzBcdTdkNzFcdTdkNzJcdTdkNzNcdTdkNzRcdTdkNzVcdTdkNzZcdWZmZmRcdTdkNzhcdTdkNzlcdTdkN2FcdTdkN2JcdTdkN2Nc'@;
put 'dTdkN2RcdTdkN2VcdTdkN2ZcdTdkODBcdTdkODFcdTdkODJcdTdkODNcdTdkODRcdTdkODVcdTdkODZcdTdkODdcdTdkODhcdTdkODlcdTdkOGFcdTdkOGJcdTdkOGNcdTdkOGRcdTdkOGVcdTdkOGZcdTdkOTBcdTdkOTFcdTdkOTJcdTdkOTNcdTdkOTRcdTdkOTVcdTdkOTZcdTdkOTdcdTdk'@;
put 'OThcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRc'@;
put 'dTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2'@;
put 'MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVc'@;
put 'dTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg5XVttXV09NDgz'@;
put 'ODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDk5XHU3ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0'@;
put 'XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2XHU3ZGI3XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3'@;
put 'ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3ZGQyXHU3ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRj'@;
put 'XHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVjXHU3ZGVkXHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3'@;
put 'ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRm'@;
put 'XHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4'@;
put 'M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJi'@;
put 'XHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4'@;
put 'WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2RmYlx1N2RmY1x1N2RmZFx1N2RmZVx1N2RmZlx1N2UwMFx1N2UwMVx1N2UwMlx1N2UwM1x1N2Uw'@;
put 'NFx1N2UwNVx1N2UwNlx1N2UwN1x1N2UwOFx1N2UwOVx1N2UwYVx1N2UwYlx1N2UwY1x1N2UwZFx1N2UwZVx1N2UwZlx1N2UxMFx1N2UxMVx1N2UxMlx1N2UxM1x1N2UxNFx1N2UxNVx1N2UxNlx1N2UxN1x1N2UxOFx1N2UxOVx1N2UxYVx1N2UxYlx1N2UxY1x1N2UxZFx1N2UxZVx1N2UxZlx1'@;
put 'N2UyMFx1N2UyMVx1N2UyMlx1N2UyM1x1N2UyNFx1N2UyNVx1N2UyNlx1N2UyN1x1N2UyOFx1N2UyOVx1N2UyYVx1N2UyYlx1N2UyY1x1N2UyZFx1N2UyZVx1N2UyZlx1N2UzMFx1N2UzMVx1N2UzMlx1N2UzM1x1N2UzNFx1N2UzNVx1N2UzNlx1N2UzN1x1N2UzOFx1N2UzOVx1ZmZmZFx1N2Uz'@;
put 'YVx1N2UzY1x1N2UzZFx1N2UzZVx1N2UzZlx1N2U0MFx1N2U0Mlx1N2U0M1x1N2U0NFx1N2U0NVx1N2U0Nlx1N2U0OFx1N2U0OVx1N2U0YVx1N2U0Ylx1N2U0Y1x1N2U0ZFx1N2U0ZVx1N2U0Zlx1N2U1MFx1N2U1MVx1N2U1Mlx1N2U1M1x1N2U1NFx1N2U1NVx1N2U1Nlx1N2U1N1x1N2U1OFx1'@;
put 'N2U1OVx1N2U1YVx1N2U1Ylx1N2U1Y1x1N2U1ZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2Nl'@;
put 'MFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1'@;
put 'NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIz'@;
put 'ZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkxXVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNWVcdTdlNWZcdTdlNjBcdTdlNjFcdTdlNjJcdTdlNjNcdTdlNjRcdTdl'@;
put 'NjVcdTdlNjZcdTdlNjdcdTdlNjhcdTdlNjlcdTdlNmFcdTdlNmJcdTdlNmNcdTdlNmRcdTdlNmVcdTdlNmZcdTdlNzBcdTdlNzFcdTdlNzJcdTdlNzNcdTdlNzRcdTdlNzVcdTdlNzZcdTdlNzdcdTdlNzhcdTdlNzlcdTdlN2FcdTdlN2JcdTdlN2NcdTdlN2RcdTdlN2VcdTdlN2ZcdTdlODBc'@;
put 'dTdlODFcdTdlODNcdTdlODRcdTdlODVcdTdlODZcdTdlODdcdTdlODhcdTdlODlcdTdlOGFcdTdlOGJcdTdlOGNcdTdlOGRcdTdlOGVcdTdlOGZcdTdlOTBcdTdlOTFcdTdlOTJcdTdlOTNcdTdlOTRcdTdlOTVcdTdlOTZcdTdlOTdcdTdlOThcdTdlOTlcdTdlOWFcdTdlOWNcdTdlOWRcdTdl'@;
put 'OWVcdWZmZmRcdTdlYWVcdTdlYjRcdTdlYmJcdTdlYmNcdTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdcdTdmMzlcdTdmM2JcdTdmM2NcdTdmM2RcdTdmM2VcdTdmM2ZcdTdmNDBcdTdmNDFcdTdmNDNcdTdmNDZcdTdmNDdcdTdmNDhcdTdmNDlcdTdmNGFc'@;
put 'dTdmNGJcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNGZcdTdmNTJcdTdmNTNcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThk'@;
put 'NTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNc'@;
put 'dTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZm'@;
put 'MTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5'@;
put 'Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3'@;
put 'ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2'@;
put 'XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3'@;
put 'ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2'@;
put 'XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4'@;
put 'MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2'@;
put 'XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5'@;
put 'Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkzXS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlNFx1N2ZlN1x1N2ZlOFx1'@;
put 'N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNFx1N2ZmNVx1N2ZmNlx1N2ZmN1x1N2ZmOFx1N2ZmOVx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAx'@;
put 'ZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYlx1ODAyY1x1ODAyZFx1ODAyZVx1ODAyZlx1ODAzMFx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1'@;
put 'ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1N1x1ZmZmZFx1ODA1OVx1ODA1Ylx1ODA1Y1x1ODA1ZFx1ODA1ZVx1ODA1Zlx1ODA2MFx1ODA2MVx1ODA2Mlx1ODA2M1x1ODA2NFx1ODA2NVx1ODA2Nlx1ODA2N1x1ODA2OFx1ODA2Ylx1ODA2Y1x1ODA2ZFx1ODA2ZVx1ODA2Zlx1ODA3MFx1ODA3'@;
put 'Mlx1ODA3M1x1ODA3NFx1ODA3NVx1ODA3Nlx1ODA3N1x1ODA3OFx1ODA3OVx1ODA3YVx1ODA3Ylx1ODA3Y1x1ODA3ZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1'@;
put 'NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2Vm'@;
put 'Zlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1'@;
put 'NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5'@;
put 'NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwN2Vc'@;
put 'dTgwODFcdTgwODJcdTgwODVcdTgwODhcdTgwOGFcdTgwOGRcdTgwOGVcdTgwOGZcdTgwOTBcdTgwOTFcdTgwOTJcdTgwOTRcdTgwOTVcdTgwOTdcdTgwOTlcdTgwOWVcdTgwYTNcdTgwYTZcdTgwYTdcdTgwYThcdTgwYWNcdTgwYjBcdTgwYjNcdTgwYjVcdTgwYjZcdTgwYjhcdTgwYjlcdTgw'@;
put 'YmJcdTgwYzVcdTgwYzdcdTgwYzhcdTgwYzlcdTgwY2FcdTgwY2JcdTgwY2ZcdTgwZDBcdTgwZDFcdTgwZDJcdTgwZDNcdTgwZDRcdTgwZDVcdTgwZDhcdTgwZGZcdTgwZTBcdTgwZTJcdTgwZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgwZmVcdTgwZmZcdTgxMDBc'@;
put 'dTgxMDFcdTgxMDNcdTgxMDRcdTgxMDVcdTgxMDdcdTgxMDhcdTgxMGJcdWZmZmRcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWZcdTgxMjBcdTgxMjFcdTgxMjJcdTgxMjNcdTgxMjRcdTgxMjVcdTgxMjZcdTgxMjdcdTgxMjhcdTgxMjlcdTgxMmFcdTgx'@;
put 'MmJcdTgxMmRcdTgxMmVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzlcdTgxM2FcdTgxM2JcdTgxM2NcdTgxM2RcdTgxM2ZcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZc'@;
put 'dTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZh'@;
put 'YWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVc'@;
put 'dTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViXHU4MTVjXHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4'@;
put 'MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3'@;
put 'XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFmXHU4MWIwXHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4'@;
put 'MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4'@;
put 'XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1'@;
put 'YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYw'@;
put 'XHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkNFx1ODFkNVx1ODFkNlx1ODFkN1x1ODFkOFx1ODFkOVx1ODFkYVx1ODFkYlx1ODFkY1x1ODFkZFx1ODFkZVx1ODFkZlx1ODFlMFx1ODFlMVx1ODFlMlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZVx1ODFlZlx1ODFmMFx1'@;
put 'ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmN1x1ODFmOFx1ODFmOVx1ODFmYVx1ODFmZFx1ODFmZlx1ODIwM1x1ODIwN1x1ODIwOFx1ODIwOVx1ODIwYVx1ODIwYlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNVx1ODIxNlx1ODIxN1x1ODIxOFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIy'@;
put 'MFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZlx1ZmZmZFx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MFx1ODI1MVx1ODI1Mlx1ODI1M1x1'@;
put 'ODI1NFx1ODI1NVx1ODI1Nlx1ODI1N1x1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MFx1ODI2MVx1ODI2Mlx1ODI2M1x1ODI2NFx1ODI2NVx1ODI2Nlx1ODI2N1x1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYw'@;
put 'NFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1'@;
put 'NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhm'@;
put 'NFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1'@;
put 'NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyNmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVcdTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBcdTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgyOTBcdTgyOTNcdTgyOTRc'@;
put 'dTgyOTVcdTgyOTZcdTgyOWFcdTgyOWJcdTgyOWVcdTgyYTBcdTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgyYjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgyYzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlcdTgyZGFcdTgyZGRcdTgy'@;
put 'ZTJcdTgyZTdcdTgyZThcdTgyZTlcdTgyZWFcdTgyZWNcdTgyZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVcdTgyZjZcdTgyZjhcdWZmZmRcdTgyZmFcdTgyZmNcdTgyZmRcdTgyZmVcdTgyZmZcdTgzMDBcdTgzMGFcdTgzMGJcdTgzMGRcdTgzMTBcdTgzMTJcdTgzMTNcdTgzMTZc'@;
put 'dTgzMThcdTgzMTlcdTgzMWRcdTgzMWVcdTgzMWZcdTgzMjBcdTgzMjFcdTgzMjJcdTgzMjNcdTgzMjRcdTgzMjVcdTgzMjZcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgzMzJcdTgzMzdcdTgzM2JcdTgzM2RcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVj'@;
put 'NDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNc'@;
put 'dTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRl'@;
put 'MDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNc'@;
put 'dTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9yKHhbMTk5XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRjXHU4MzRkXHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYy'@;
put 'XHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4'@;
put 'Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5'@;
put 'XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5'@;
put 'NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3'@;
put 'XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3'@;
put 'OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNh'@;
put 'XHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OV1bbV1dPTUwOTQ0K20sRls1MDk0NCttXT14WzE5OV1bbV0pO2Zvcih4WzIw'@;
put 'MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNlZVx1ODNlZlx1ODNmM1x1ODNmNFx1ODNmNVx1ODNmNlx1ODNmN1x1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQw'@;
put 'OVx1ODQwYVx1ODQxMFx1ODQxMlx1ODQxM1x1ODQxNFx1ODQxNVx1ODQxNlx1ODQxN1x1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZVx1ODQxZlx1ODQyMFx1ODQyMVx1ODQyMlx1ODQyM1x1ODQyOVx1ODQyYVx1ODQyYlx1ODQyY1x1ODQyZFx1ODQyZVx1ODQyZlx1ODQzMFx1ODQzMlx1ODQzM1x1'@;
put 'ODQzNFx1ODQzNVx1ODQzNlx1ODQzN1x1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZVx1ODQzZlx1ODQ0MFx1ODQ0MVx1ODQ0Mlx1ODQ0M1x1ODQ0NFx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0OVx1ZmZmZFx1ODQ0YVx1ODQ0Ylx1ODQ0Y1x1ODQ0ZFx1ODQ0ZVx1ODQ0Zlx1ODQ1MFx1ODQ1Mlx1ODQ1'@;
put 'M1x1ODQ1NFx1ODQ1NVx1ODQ1Nlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NFx1ODQ2NVx1ODQ2Nlx1ODQ2N1x1ODQ2OFx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1'@;
put 'OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRl'@;
put 'NFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1'@;
put 'NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5'@;
put 'Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDBdW21dXT01MTIwMCttLEZbNTEyMDArbV09eFsyMDBd'@;
put 'W21dKTtmb3IoeFsyMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0N2RcdTg0N2VcdTg0N2ZcdTg0ODBcdTg0ODFcdTg0ODNcdTg0ODRcdTg0ODVcdTg0ODZcdTg0OGFcdTg0OGRcdTg0OGZcdTg0OTBcdTg0OTFcdTg0OTJcdTg0'@;
put 'OTNcdTg0OTRcdTg0OTVcdTg0OTZcdTg0OThcdTg0OWFcdTg0OWJcdTg0OWRcdTg0OWVcdTg0OWZcdTg0YTBcdTg0YTJcdTg0YTNcdTg0YTRcdTg0YTVcdTg0YTZcdTg0YTdcdTg0YThcdTg0YTlcdTg0YWFcdTg0YWJcdTg0YWNcdTg0YWRcdTg0YWVcdTg0YjBcdTg0YjFcdTg0YjNcdTg0YjVc'@;
put 'dTg0YjZcdTg0YjdcdTg0YmJcdTg0YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZcdTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJcdTg0ZDRcdTg0ZDVcdTg0ZDdcdWZmZmRcdTg0ZDhcdTg0ZDlcdTg0ZGFcdTg0ZGJcdTg0ZGNcdTg0ZGVcdTg0'@;
put 'ZTFcdTg0ZTJcdTg0ZTRcdTg0ZTdcdTg0ZThcdTg0ZTlcdTg0ZWFcdTg0ZWJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjFcdTg0ZjJcdTg0ZjNcdTg0ZjRcdTg0ZjVcdTg0ZjZcdTg0ZjdcdTg0ZjhcdTg0ZjlcdTg0ZmFcdTg0ZmJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1MDFcdTg1MDJcdTRmMWVc'@;
put 'dTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVj'@;
put 'NzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZc'@;
put 'dTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVh'@;
put 'NzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAxXVttXV09NTE0NTYrbSxGWzUx'@;
put 'NDU2K21dPXhbMjAxXVttXSk7Zm9yKHhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2XHU4NTA3XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4'@;
put 'NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4NTI5XHU4NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0'@;
put 'XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUxXHU4NTUyXHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4'@;
put 'NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4NTcxXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgw'@;
put 'XHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5'@;
put 'YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRi'@;
put 'XHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5'@;
put 'ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMl1bbV1d'@;
put 'PTUxNzEyK20sRls1MTcxMittXT14WzIwMl1bbV0pO2Zvcih4WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OFx1ODU4OVx1ODU4YVx1ODU4Ylx1ODU4Y1x1ODU4ZFx1ODU4ZVx1ODU5MFx1'@;
put 'ODU5MVx1ODU5Mlx1ODU5M1x1ODU5NFx1ODU5NVx1ODU5Nlx1ODU5N1x1ODU5OFx1ODU5OVx1ODU5YVx1ODU5ZFx1ODU5ZVx1ODU5Zlx1ODVhMFx1ODVhMVx1ODVhMlx1ODVhM1x1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMVx1ODViMlx1ODViM1x1ODVi'@;
put 'NFx1ODViNVx1ODViNlx1ODViOFx1ODViYVx1ODViYlx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMFx1ODVjMlx1ODVjM1x1ODVjNFx1ODVjNVx1ODVjNlx1ODVjN1x1ODVjOFx1ODVjYVx1ODVjYlx1ODVjY1x1ODVjZFx1ODVjZVx1ODVkMVx1ODVkMlx1ZmZmZFx1ODVkNFx1ODVkNlx1'@;
put 'ODVkN1x1ODVkOFx1ODVkOVx1ODVkYVx1ODVkYlx1ODVkZFx1ODVkZVx1ODVkZlx1ODVlMFx1ODVlMVx1ODVlMlx1ODVlM1x1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYVx1ODVlYlx1ODVlY1x1ODVlZFx1ODVlZVx1ODVlZlx1ODVmMFx1ODVmMVx1ODVmMlx1ODVmM1x1ODVmNFx1ODVm'@;
put 'NVx1ODVmNlx1ODVmN1x1ODVmOFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1'@;
put 'NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVm'@;
put 'ZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1'@;
put 'NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAzXVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'YWVbeFsyMDNdW21dXT01MTk2OCttLEZbNTE5NjgrbV09eFsyMDNdW21dKTtmb3IoeFsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ZjlcdTg1ZmFcdTg1ZmNcdTg1ZmRcdTg1ZmVcdTg2MDBcdTg2MDFcdTg2MDJcdTg2MDNc'@;
put 'dTg2MDRcdTg2MDZcdTg2MDdcdTg2MDhcdTg2MDlcdTg2MGFcdTg2MGJcdTg2MGNcdTg2MGRcdTg2MGVcdTg2MGZcdTg2MTBcdTg2MTJcdTg2MTNcdTg2MTRcdTg2MTVcdTg2MTdcdTg2MThcdTg2MTlcdTg2MWFcdTg2MWJcdTg2MWNcdTg2MWRcdTg2MWVcdTg2MWZcdTg2MjBcdTg2MjFcdTg2'@;
put 'MjJcdTg2MjNcdTg2MjRcdTg2MjVcdTg2MjZcdTg2MjhcdTg2MmFcdTg2MmJcdTg2MmNcdTg2MmRcdTg2MmVcdTg2MmZcdTg2MzBcdTg2MzFcdTg2MzJcdTg2MzNcdTg2MzRcdTg2MzVcdTg2MzZcdTg2MzdcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDBcdWZmZmRc'@;
put 'dTg2NDFcdTg2NDJcdTg2NDNcdTg2NDRcdTg2NDVcdTg2NDZcdTg2NDdcdTg2NDhcdTg2NDlcdTg2NGFcdTg2NGJcdTg2NGNcdTg2NTJcdTg2NTNcdTg2NTVcdTg2NTZcdTg2NTdcdTg2NThcdTg2NTlcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2NjFcdTg2NjNcdTg2NjRcdTg2'@;
put 'NjVcdTg2NjZcdTg2NjdcdTg2NjhcdTg2NjlcdTg2NmFcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRc'@;
put 'dThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4'@;
put 'NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJc'@;
put 'dTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNF1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGFlW3hbMjA0XVttXV09NTIyMjQrbSxGWzUyMjI0K21dPXhbMjA0XVttXSk7Zm9yKHhbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1'@;
put 'XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4Njk4XHU4Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4'@;
put 'NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRh'@;
put 'XHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4'@;
put 'NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRi'@;
put 'XHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2'@;
put 'MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3'@;
put 'XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA1XS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'eFsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNV1bbV1dPTUyNDgwK20sRls1MjQ4MCttXT14WzIwNV1bbV0pO2Zvcih4WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcy'@;
put 'MFx1ODcyNFx1ODcyNlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MFx1ODc0MVx1ODc0Mlx1ODc0M1x1ODc0NFx1ODc0NVx1ODc0Nlx1ODc0YVx1'@;
put 'ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YVx1ODc1Ylx1ODc1Y1x1ODc1ZFx1ODc1ZVx1ODc1Zlx1ODc2MVx1ODc2Mlx1ODc2Nlx1ODc2N1x1ODc2OFx1ODc2OVx1ODc2YVx1ODc2Ylx1ODc2Y1x1ODc2ZFx1ODc2Zlx1ODc3'@;
put 'MVx1ODc3Mlx1ODc3M1x1ODc3NVx1ZmZmZFx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZVx1ODc4Zlx1ODc5MFx1ODc5MVx1ODc5Mlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OFx1ODc5OVx1'@;
put 'ODc5YVx1ODc5Ylx1ODc5Y1x1ODc5ZFx1ODc5ZVx1ODdhMFx1ODdhMVx1ODdhMlx1ODdhM1x1ODdhNFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMz'@;
put 'ZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1'@;
put 'NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYw'@;
put 'ZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNl0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PXhbMjA2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDZdW21dXT01MjczNittLEZbNTI3MzYrbV09eFsyMDZdW21dKTtmb3IoeFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YTVcdTg3YTZcdTg3'@;
put 'YTdcdTg3YTlcdTg3YWFcdTg3YWVcdTg3YjBcdTg3YjFcdTg3YjJcdTg3YjRcdTg3YjZcdTg3YjdcdTg3YjhcdTg3YjlcdTg3YmJcdTg3YmNcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzJcdTg3YzNcdTg3YzRcdTg3YzVcdTg3YzdcdTg3YzhcdTg3YzlcdTg3Y2NcdTg3Y2RcdTg3Y2VcdTg3Y2Zc'@;
put 'dTg3ZDBcdTg3ZDRcdTg3ZDVcdTg3ZDZcdTg3ZDdcdTg3ZDhcdTg3ZDlcdTg3ZGFcdTg3ZGNcdTg3ZGRcdTg3ZGVcdTg3ZGZcdTg3ZTFcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZTZcdTg3ZTdcdTg3ZThcdTg3ZTlcdTg3ZWJcdTg3ZWNcdTg3ZWRcdTg3ZWZcdTg3ZjBcdTg3ZjFcdTg3ZjJcdTg3'@;
put 'ZjNcdTg3ZjRcdTg3ZjVcdTg3ZjZcdTg3ZjdcdTg3ZjhcdWZmZmRcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDRcdTg4MDVcdTg4MDZcdTg4MDdcdTg4MDhcdTg4MDlcdTg4MGJcdTg4MGNcdTg4MGRcdTg4MGVcdTg4MGZcdTg4MTBcdTg4MTFc'@;
put 'dTg4MTJcdTg4MTRcdTg4MTdcdTg4MThcdTg4MTlcdTg4MWFcdTg4MWNcdTg4MWRcdTg4MWVcdTg4MWZcdTg4MjBcdTg4MjNcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRl'@;
put 'NjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRc'@;
put 'dTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRl'@;
put 'NjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'eFsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA3XVttXV09NTI5OTIrbSxGWzUyOTkyK21dPXhbMjA3XVttXSk7Zm9yKHhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4'@;
put 'ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4ODM4XHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQz'@;
put 'XHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVkXHU4ODVlXHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4'@;
put 'ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5'@;
put 'XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2'@;
put 'MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5'@;
put 'XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3'@;
put 'ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPXhbMjA4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOF1bbV1dPTUzMjQ4K20sRls1MzI0OCttXT14WzIwOF1bbV0pO2Zvcih4WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMlx1ODhiM1x1ODhiNFx1ODhiNVx1ODhiNlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1ODhj'@;
put 'Zlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYVx1ODhkYlx1ODhkY1x1ODhkZFx1ODhkZVx1ODhlMFx1ODhlMVx1ODhlNlx1ODhlN1x1ODhlOVx1ODhlYVx1ODhlYlx1ODhlY1x1ODhlZFx1ODhlZVx1ODhlZlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1'@;
put 'ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwM1x1ODkwNFx1ODkwNVx1ODkwNlx1ODkwN1x1ODkwOFx1ZmZmZFx1ODkwOVx1ODkwYlx1ODkwY1x1ODkwZFx1ODkwZVx1ODkwZlx1ODkxMVx1ODkxNFx1ODkxNVx1ODkxNlx1ODkxN1x1ODkxOFx1ODkxY1x1ODkxZFx1ODkxZVx1ODkxZlx1ODky'@;
put 'MFx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1'@;
put 'NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5'@;
put 'YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1'@;
put 'OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3'@;
put 'Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDldW21dXT01MzUwNCttLEZbNTM1MDQrbV09eFsyMDldW21dKTtmb3IoeFsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5MzhcdTg5MzlcdTg5M2FcdTg5M2JcdTg5M2NcdTg5M2RcdTg5M2VcdTg5M2ZcdTg5NDBcdTg5NDJcdTg5NDNcdTg5NDVcdTg5NDZcdTg5NDdcdTg5NDhcdTg5NDlcdTg5NGFcdTg5NGJcdTg5NGNcdTg5NGRcdTg5NGVcdTg5NGZcdTg5NTBcdTg5'@;
put 'NTFcdTg5NTJcdTg5NTNcdTg5NTRcdTg5NTVcdTg5NTZcdTg5NTdcdTg5NThcdTg5NTlcdTg5NWFcdTg5NWJcdTg5NWNcdTg5NWRcdTg5NjBcdTg5NjFcdTg5NjJcdTg5NjNcdTg5NjRcdTg5NjVcdTg5NjdcdTg5NjhcdTg5NjlcdTg5NmFcdTg5NmJcdTg5NmNcdTg5NmRcdTg5NmVcdTg5NmZc'@;
put 'dTg5NzBcdTg5NzFcdTg5NzJcdTg5NzNcdTg5NzRcdTg5NzVcdTg5NzZcdTg5NzdcdTg5NzhcdTg5NzlcdTg5N2FcdTg5N2NcdWZmZmRcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5ODRcdTg5ODVcdTg5ODdcdTg5ODhcdTg5ODlcdTg5OGFcdTg5OGJcdTg5OGNcdTg5OGRcdTg5OGVcdTg5'@;
put 'OGZcdTg5OTBcdTg5OTFcdTg5OTJcdTg5OTNcdTg5OTRcdTg5OTVcdTg5OTZcdTg5OTdcdTg5OThcdTg5OTlcdTg5OWFcdTg5OWJcdTg5OWNcdTg5OWRcdTg5OWVcdTg5OWZcdTg5YTBcdTg5YTFcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZc'@;
put 'dTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkw'@;
put 'NTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZc'@;
put 'dTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVj'@;
put 'MzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEwXVttXV09NTM3NjArbSxGWzUzNzYwK21dPXhbMjEwXVttXSk7Zm9yKHhbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4OWFmXHU4OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4'@;
put 'OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5'@;
put 'XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4OWZmXHU4YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4'@;
put 'YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFjXHU4YTFkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4'@;
put 'XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3'@;
put 'NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFh'@;
put 'XHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2'@;
put 'MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjExXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMV1bbV1dPTU0MDE2K20sRls1NDAxNittXT14WzIxMV1bbV0pO2Zvcih4WzIxMl09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGExZVx1OGExZlx1OGEyMFx1OGEyMVx1OGEyMlx1OGEyM1x1OGEyNFx1OGEyNVx1OGEyNlx1OGEyN1x1OGEyOFx1OGEyOVx1OGEyYVx1OGEyYlx1OGEyY1x1OGEyZFx1OGEyZVx1OGEyZlx1OGEzMFx1'@;
put 'OGEzMVx1OGEzMlx1OGEzM1x1OGEzNFx1OGEzNVx1OGEzNlx1OGEzN1x1OGEzOFx1OGEzOVx1OGEzYVx1OGEzYlx1OGEzY1x1OGEzZFx1OGEzZlx1OGE0MFx1OGE0MVx1OGE0Mlx1OGE0M1x1OGE0NFx1OGE0NVx1OGE0Nlx1OGE0N1x1OGE0OVx1OGE0YVx1OGE0Ylx1OGE0Y1x1OGE0ZFx1OGE0'@;
put 'ZVx1OGE0Zlx1OGE1MFx1OGE1MVx1OGE1Mlx1OGE1M1x1OGE1NFx1OGE1NVx1OGE1Nlx1OGE1N1x1OGE1OFx1OGE1OVx1OGE1YVx1OGE1Ylx1OGE1Y1x1OGE1ZFx1OGE1ZVx1ZmZmZFx1OGE1Zlx1OGE2MFx1OGE2MVx1OGE2Mlx1OGE2M1x1OGE2NFx1OGE2NVx1OGE2Nlx1OGE2N1x1OGE2OFx1'@;
put 'OGE2OVx1OGE2YVx1OGE2Ylx1OGE2Y1x1OGE2ZFx1OGE2ZVx1OGE2Zlx1OGE3MFx1OGE3MVx1OGE3Mlx1OGE3M1x1OGE3NFx1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OFx1OGE3YVx1OGE3Ylx1OGE3Y1x1OGE3ZFx1OGE3ZVx1OGE3Zlx1OGE4MFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2'@;
put 'Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1'@;
put 'N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUx'@;
put 'Mlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1'@;
put 'NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTJdW21dXT01NDI3MittLEZbNTQyNzIrbV09eFsyMTJdW21dKTtmb3Io'@;
put 'eFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhODFcdThhODJcdThhODNcdThhODRcdThhODVcdThhODZcdThhODdcdThhODhcdThhOGJcdThhOGNcdThhOGRcdThhOGVcdThhOGZcdThhOTBcdThhOTFcdThhOTJcdThhOTRc'@;
put 'dThhOTVcdThhOTZcdThhOTdcdThhOThcdThhOTlcdThhOWFcdThhOWJcdThhOWNcdThhOWRcdThhOWVcdThhOWZcdThhYTBcdThhYTFcdThhYTJcdThhYTNcdThhYTRcdThhYTVcdThhYTZcdThhYTdcdThhYThcdThhYTlcdThhYWFcdThhYWJcdThhYWNcdThhYWRcdThhYWVcdThhYWZcdThh'@;
put 'YjBcdThhYjFcdThhYjJcdThhYjNcdThhYjRcdThhYjVcdThhYjZcdThhYjdcdThhYjhcdThhYjlcdThhYmFcdThhYmJcdThhYmNcdThhYmRcdThhYmVcdThhYmZcdThhYzBcdThhYzFcdThhYzJcdWZmZmRcdThhYzNcdThhYzRcdThhYzVcdThhYzZcdThhYzdcdThhYzhcdThhYzlcdThhY2Fc'@;
put 'dThhY2JcdThhY2NcdThhY2RcdThhY2VcdThhY2ZcdThhZDBcdThhZDFcdThhZDJcdThhZDNcdThhZDRcdThhZDVcdThhZDZcdThhZDdcdThhZDhcdThhZDlcdThhZGFcdThhZGJcdThhZGNcdThhZGRcdThhZGVcdThhZGZcdThhZTBcdThhZTFcdThhZTJcdThhZTNcdTk0ZTFcdTk1ZjhcdTc3'@;
put 'MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlc'@;
put 'dTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkw'@;
put 'NmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNc'@;
put 'dTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEzXVttXV09NTQ1MjgrbSxGWzU0NTI4K21dPXhb'@;
put 'MjEzXVttXSk7Zm9yKHhbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4YWViXHU4YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYy'@;
put 'XHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2XHU4YjA4XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4'@;
put 'YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4YjIzXHVmZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJh'@;
put 'XHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNlXHU4YjNmXHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1'@;
put 'ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4'@;
put 'XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5'@;
put 'MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZl'@;
put 'XHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNF1bbV1dPTU0Nzg0K20s'@;
put 'Rls1NDc4NCttXT14WzIxNF1bbV0pO2Zvcih4WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI0Nlx1OGI0N1x1OGI0OFx1OGI0OVx1OGI0YVx1OGI0Ylx1OGI0Y1x1OGI0ZFx1OGI0ZVx1OGI0Zlx1OGI1MFx1OGI1MVx1OGI1'@;
put 'Mlx1OGI1M1x1OGI1NFx1OGI1NVx1OGI1Nlx1OGI1N1x1OGI1OFx1OGI1OVx1OGI1YVx1OGI1Ylx1OGI1Y1x1OGI1ZFx1OGI1ZVx1OGI1Zlx1OGI2MFx1OGI2MVx1OGI2Mlx1OGI2M1x1OGI2NFx1OGI2NVx1OGI2N1x1OGI2OFx1OGI2OVx1OGI2YVx1OGI2Ylx1OGI2ZFx1OGI2ZVx1OGI2Zlx1'@;
put 'OGI3MFx1OGI3MVx1OGI3Mlx1OGI3M1x1OGI3NFx1OGI3NVx1OGI3Nlx1OGI3N1x1OGI3OFx1OGI3OVx1OGI3YVx1OGI3Ylx1OGI3Y1x1OGI3ZFx1OGI3ZVx1OGI3Zlx1OGI4MFx1OGI4MVx1OGI4Mlx1OGI4M1x1OGI4NFx1OGI4NVx1OGI4Nlx1ZmZmZFx1OGI4N1x1OGI4OFx1OGI4OVx1OGI4'@;
put 'YVx1OGI4Ylx1OGI4Y1x1OGI4ZFx1OGI4ZVx1OGI4Zlx1OGI5MFx1OGI5MVx1OGI5Mlx1OGI5M1x1OGI5NFx1OGI5NVx1OGI5Nlx1OGI5N1x1OGI5OFx1OGI5OVx1OGI5YVx1OGI5Ylx1OGI5Y1x1OGI5ZFx1OGI5ZVx1OGI5Zlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1'@;
put 'OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2Yw'@;
put 'MFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1'@;
put 'NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3'@;
put 'NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTVd'@;
put 'W21dXT01NTA0MCttLEZbNTUwNDArbV09eFsyMTVdW21dKTtmb3IoeFsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMzhcdThjMzlcdThjM2FcdThjM2JcdThjM2NcdThjM2RcdThjM2VcdThjM2ZcdThjNDBcdThjNDJcdThj'@;
put 'NDNcdThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThjNGRcdThjNGVcdThjNGZcdThjNTBcdThjNTFcdThjNTJcdThjNTNcdThjNTRcdThjNTZcdThjNTdcdThjNThcdThjNTlcdThjNWJcdThjNWNcdThjNWRcdThjNWVcdThjNWZcdThjNjBcdThjNjNcdThjNjRcdThjNjVcdThjNjZc'@;
put 'dThjNjdcdThjNjhcdThjNjlcdThjNmNcdThjNmRcdThjNmVcdThjNmZcdThjNzBcdThjNzFcdThjNzJcdThjNzRcdThjNzVcdThjNzZcdThjNzdcdThjN2JcdThjN2NcdThjN2RcdThjN2VcdThjN2ZcdThjODBcdThjODFcdThjODNcdThjODRcdThjODZcdThjODdcdWZmZmRcdThjODhcdThj'@;
put 'OGJcdThjOGRcdThjOGVcdThjOGZcdThjOTBcdThjOTFcdThjOTJcdThjOTNcdThjOTVcdThjOTZcdThjOTdcdThjOTlcdThjOWFcdThjOWJcdThjOWNcdThjOWRcdThjOWVcdThjOWZcdThjYTBcdThjYTFcdThjYTJcdThjYTNcdThjYTRcdThjYTVcdThjYTZcdThjYTdcdThjYThcdThjYTlc'@;
put 'dThjYWFcdThjYWJcdThjYWNcdThjYWRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5'@;
put 'OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNc'@;
put 'dTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRl'@;
put 'ZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNl1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMjE2XVttXV09NTUyOTYrbSxGWzU1Mjk2K21dPXhbMjE2XVttXSk7Zm9yKHhbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4Y2FmXHU4Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4'@;
put 'Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2NhXHU4Y2NiXHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2Qx'@;
put 'XHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4Y2U2XHU4Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVm'@;
put 'ZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAwXHU4ZDAxXHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3'@;
put 'XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0'@;
put 'ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJh'@;
put 'XHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1'@;
put 'OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTddW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxN11bbV1dPTU1NTUyK20sRls1NTU1MittXT14WzIxN11bbV0pO2Zvcih4WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwZVx1OGQwZlx1OGQxMFx1OGQxMVx1OGQxMlx1OGQxM1x1'@;
put 'OGQxNFx1OGQxNVx1OGQxNlx1OGQxN1x1OGQxOFx1OGQxOVx1OGQxYVx1OGQxYlx1OGQxY1x1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OFx1OGQ3OVx1OGQ3YVx1OGQ3Ylx1OGQ3'@;
put 'Y1x1OGQ3ZFx1OGQ3ZVx1OGQ3Zlx1OGQ4MFx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4Y1x1OGQ4ZFx1OGQ4ZVx1OGQ4Zlx1OGQ5MFx1OGQ5Mlx1OGQ5M1x1OGQ5NVx1OGQ5Nlx1OGQ5N1x1OGQ5OFx1OGQ5OVx1OGQ5YVx1OGQ5Ylx1OGQ5Y1x1OGQ5ZFx1OGQ5ZVx1'@;
put 'OGRhMFx1OGRhMVx1ZmZmZFx1OGRhMlx1OGRhNFx1OGRhNVx1OGRhNlx1OGRhN1x1OGRhOFx1OGRhOVx1OGRhYVx1OGRhYlx1OGRhY1x1OGRhZFx1OGRhZVx1OGRhZlx1OGRiMFx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRj'@;
put 'N1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1'@;
put 'OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMx'@;
put 'OVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1'@;
put 'OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOF0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMThdW21dXT01NTgwOCttLEZbNTU4MDgrbV09eFsyMThdW21dKTtmb3IoeFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkZDVcdThkZDhcdThkZDlcdThkZGNc'@;
put 'dThkZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThkZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZcdThkZmNcdThkZmVcdThkZmZcdThlMDBcdThlMDFcdThlMDJcdThlMDNcdThlMDRcdThlMDZcdThlMDdcdThlMDhcdThlMGJcdThlMGRcdThl'@;
put 'MGVcdThlMTBcdThlMTFcdThlMTJcdThlMTNcdThlMTVcdThlMTZcdThlMTdcdThlMThcdThlMTlcdThlMWFcdThlMWJcdThlMWNcdThlMjBcdThlMjFcdThlMjRcdThlMjVcdThlMjZcdThlMjdcdThlMjhcdThlMmJcdThlMmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdc'@;
put 'dThlMzhcdThlM2JcdThlM2NcdThlM2VcdWZmZmRcdThlM2ZcdThlNDNcdThlNDVcdThlNDZcdThlNGNcdThlNGRcdThlNGVcdThlNGZcdThlNTBcdThlNTNcdThlNTRcdThlNTVcdThlNTZcdThlNTdcdThlNThcdThlNWFcdThlNWJcdThlNWNcdThlNWRcdThlNWVcdThlNWZcdThlNjBcdThl'@;
put 'NjFcdThlNjJcdThlNjNcdThlNjRcdThlNjVcdThlNjdcdThlNjhcdThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVc'@;
put 'dTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVm'@;
put 'MDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRc'@;
put 'dTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTldLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzIxOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE5XVttXV09NTYwNjQrbSxGWzU2MDY0K21dPXhbMjE5XVttXSk7Zm9yKHhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1'@;
put 'XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4'@;
put 'ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4ZWI1XHU4ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJj'@;
put 'XHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQxXHU4ZWQyXHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4'@;
put 'ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgw'@;
put 'XHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4'@;
put 'MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1'@;
put 'XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMF1bbV1dPTU2MzIwK20sRls1NjMyMCttXT14WzIyMF1bbV0pO2Zvcih4WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OGVlNVx1OGVlNlx1OGVlN1x1OGVlOFx1OGVlOVx1OGVlYVx1OGVlYlx1OGVlY1x1OGVlZFx1OGVlZVx1OGVlZlx1OGVmMFx1OGVmMVx1OGVmMlx1OGVmM1x1OGVmNFx1OGVmNVx1OGVmNlx1OGVmN1x1OGVmOFx1OGVmOVx1OGVmYVx1OGVmYlx1OGVmY1x1OGVmZFx1OGVmZVx1OGVmZlx1'@;
put 'OGYwMFx1OGYwMVx1OGYwMlx1OGYwM1x1OGYwNFx1OGYwNVx1OGYwNlx1OGYwN1x1OGYwOFx1OGYwOVx1OGYwYVx1OGYwYlx1OGYwY1x1OGYwZFx1OGYwZVx1OGYwZlx1OGYxMFx1OGYxMVx1OGYxMlx1OGYxM1x1OGYxNFx1OGYxNVx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxOVx1OGYxYVx1OGYx'@;
put 'Ylx1OGYxY1x1OGYxZFx1OGYxZVx1OGYxZlx1OGYyMFx1OGYyMVx1OGYyMlx1OGYyM1x1ZmZmZFx1OGYyNFx1OGYyNVx1OGYyNlx1OGYyN1x1OGYyOFx1OGYyOVx1OGYyYVx1OGYyYlx1OGYyY1x1OGYyZFx1OGYyZVx1OGYyZlx1OGYzMFx1OGYzMVx1OGYzMlx1OGYzM1x1OGYzNFx1OGYzNVx1'@;
put 'OGYzNlx1OGYzN1x1OGYzOFx1OGYzOVx1OGYzYVx1OGYzYlx1OGYzY1x1OGYzZFx1OGYzZVx1OGYzZlx1OGY0MFx1OGY0MVx1OGY0Mlx1OGY0M1x1OGY0NFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNh'@;
put 'YVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1'@;
put 'ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4'@;
put 'Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzIyMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjFdW21dXT01NjU3NittLEZbNTY1NzYrbV09eFsyMjFdW21dKTtmb3IoeFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdThmNDVcdThmNDZcdThmNDdcdThmNDhcdThmNDlcdThmNGFcdThmNGJcdThmNGNcdThmNGRcdThmNGVcdThmNGZcdThmNTBcdThmNTFcdThmNTJcdThmNTNcdThmNTRcdThmNTVcdThmNTZcdThmNTdcdThmNThcdThmNTlcdThmNWFcdThmNWJcdThmNWNcdThmNWRc'@;
put 'dThmNWVcdThmNWZcdThmNjBcdThmNjFcdThmNjJcdThmNjNcdThmNjRcdThmNjVcdThmNmFcdThmODBcdThmOGNcdThmOTJcdThmOWRcdThmYTBcdThmYTFcdThmYTJcdThmYTRcdThmYTVcdThmYTZcdThmYTdcdThmYWFcdThmYWNcdThmYWRcdThmYWVcdThmYWZcdThmYjJcdThmYjNcdThm'@;
put 'YjRcdThmYjVcdThmYjdcdThmYjhcdThmYmFcdThmYmJcdThmYmNcdThmYmZcdThmYzBcdThmYzNcdThmYzZcdWZmZmRcdThmYzlcdThmY2FcdThmY2JcdThmY2NcdThmY2RcdThmY2ZcdThmZDJcdThmZDZcdThmZDdcdThmZGFcdThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNcdThmZWZc'@;
put 'dThmZjFcdThmZjJcdThmZjRcdThmZjVcdThmZjZcdThmZmFcdThmZmJcdThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkwMTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3'@;
put 'YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFc'@;
put 'dTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYz'@;
put 'YjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRc'@;
put 'dTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIyXVttXV09NTY4MzIrbSxGWzU2ODMyK21dPXhbMjIyXVttXSk7Zm9yKHhbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQz'@;
put 'XHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5'@;
put 'MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhkXHU5MDhlXHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2'@;
put 'XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2'@;
put 'NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIz'@;
put 'XHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1'@;
put 'NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1'@;
put 'XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyM11bbV1dPTU3MDg4K20sRls1NzA4OCttXT14WzIyM11bbV0pO2Zvcih4WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBl'@;
put 'NVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNVx1OTEwNlx1OTEwN1x1OTEwOFx1OTEwOVx1OTEwYVx1OTEwYlx1OTEwY1x1'@;
put 'OTEwZFx1OTEwZVx1OTEwZlx1OTExMFx1OTExMVx1OTExMlx1OTExM1x1OTExNFx1OTExNVx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExYlx1OTExY1x1ZmZmZFx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNFx1OTEyNVx1OTEyNlx1OTEyN1x1OTEyOFx1OTEyOVx1OTEyYVx1OTEy'@;
put 'Ylx1OTEyY1x1OTEyZFx1OTEyZVx1OTEzMFx1OTEzMlx1OTEzM1x1OTEzNFx1OTEzNVx1OTEzNlx1OTEzN1x1OTEzOFx1OTEzYVx1OTEzYlx1OTEzY1x1OTEzZFx1OTEzZVx1OTEzZlx1OTE0MFx1OTE0MVx1OTE0Mlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1'@;
put 'NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVl'@;
put 'Nlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1'@;
put 'NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUx'@;
put 'OVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21dKTtmb3IoeFsyMjVdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNDVcdTkxNDdcdTkxNDhcdTkxNTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZcdTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZcdTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkx'@;
put 'NmRcdTkxNzNcdTkxN2FcdTkxN2JcdTkxN2NcdTkxODBcdTkxODFcdTkxODJcdTkxODNcdTkxODRcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkxOGZcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOTZcdTkxOTdcdTkxOThcdTkxOTlcdTkxOWNcdTkxOWRcdTkxOWVcdTkxOWZcdTkxYTBcdTkxYTFc'@;
put 'dTkxYTRcdTkxYTVcdTkxYTZcdTkxYTdcdTkxYThcdTkxYTlcdTkxYWJcdTkxYWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmJcdWZmZmRcdTkxYmNcdTkxYmRcdTkxYmVcdTkxYmZcdTkxYzBcdTkxYzFcdTkxYzJcdTkxYzNcdTkxYzRcdTkx'@;
put 'YzVcdTkxYzZcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDJcdTkxZDNcdTkxZDRcdTkxZDVcdTkxZDZcdTkxZDdcdTkxZDhcdTkxZDlcdTkxZGFcdTkxZGJcdTkxZGRcdTkxZGVcdTkxZGZcdTkxZTBcdTkxZTFcdTkxZTJcdTkxZTNcdTkxZTRcdTkxZTVcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJc'@;
put 'dTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVk'@;
put 'MDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVc'@;
put 'dTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcy'@;
put 'ZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAwK21dPXhbMjI1XVttXSk7'@;
put 'Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYwXHU5MWYxXHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5'@;
put 'MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5MjBjXHU5MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjEx'@;
put 'XHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2XHU5MjI3XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5'@;
put 'MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5MjQyXHU5MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3'@;
put 'XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5'@;
put 'OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUz'@;
put 'XHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2'@;
put 'MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3ODU2K20sRls1Nzg1Nitt'@;
put 'XT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTI0Nlx1OTI0N1x1OTI0OFx1OTI0OVx1OTI0YVx1OTI0Ylx1OTI0Y1x1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MFx1OTI1MVx1OTI1Mlx1OTI1M1x1'@;
put 'OTI1NFx1OTI1NVx1OTI1Nlx1OTI1N1x1OTI1OFx1OTI1OVx1OTI1YVx1OTI1Ylx1OTI1Y1x1OTI1ZFx1OTI1ZVx1OTI1Zlx1OTI2MFx1OTI2MVx1OTI2Mlx1OTI2M1x1OTI2NFx1OTI2NVx1OTI2Nlx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2YVx1OTI2Ylx1OTI2Y1x1OTI2ZFx1OTI2ZVx1OTI2'@;
put 'Zlx1OTI3MFx1OTI3MVx1OTI3Mlx1OTI3M1x1OTI3NVx1OTI3Nlx1OTI3N1x1OTI3OFx1OTI3OVx1OTI3YVx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3ZVx1OTI3Zlx1OTI4MFx1OTI4MVx1OTI4Mlx1OTI4M1x1OTI4NFx1OTI4NVx1ZmZmZFx1OTI4Nlx1OTI4N1x1OTI4OFx1OTI4OVx1OTI4YVx1'@;
put 'OTI4Ylx1OTI4Y1x1OTI4ZFx1OTI4Zlx1OTI5MFx1OTI5MVx1OTI5Mlx1OTI5M1x1OTI5NFx1OTI5NVx1OTI5Nlx1OTI5N1x1OTI5OFx1OTI5OVx1OTI5YVx1OTI5Ylx1OTI5Y1x1OTI5ZFx1OTI5ZVx1OTI5Zlx1OTJhMFx1OTJhMVx1OTJhMlx1OTJhM1x1OTJhNFx1OTJhNVx1OTJhNlx1OTJh'@;
put 'N1x1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1'@;
put 'NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYx'@;
put 'NVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1'@;
put 'NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjddW21dXT01ODEx'@;
put 'MittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYThcdTkyYTlcdTkyYWFcdTkyYWJcdTkyYWNcdTkyYWRcdTkyYWZcdTkyYjBcdTkyYjFcdTkyYjJcdTkyYjNcdTkyYjRc'@;
put 'dTkyYjVcdTkyYjZcdTkyYjdcdTkyYjhcdTkyYjlcdTkyYmFcdTkyYmJcdTkyYmNcdTkyYmRcdTkyYmVcdTkyYmZcdTkyYzBcdTkyYzFcdTkyYzJcdTkyYzNcdTkyYzRcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzlcdTkyY2FcdTkyY2JcdTkyY2NcdTkyY2RcdTkyY2VcdTkyY2ZcdTkyZDBcdTky'@;
put 'ZDFcdTkyZDJcdTkyZDNcdTkyZDRcdTkyZDVcdTkyZDZcdTkyZDdcdTkyZDhcdTkyZDlcdTkyZGFcdTkyZGJcdTkyZGNcdTkyZGRcdTkyZGVcdTkyZGZcdTkyZTBcdTkyZTFcdTkyZTJcdTkyZTNcdTkyZTRcdTkyZTVcdTkyZTZcdTkyZTdcdTkyZThcdWZmZmRcdTkyZTlcdTkyZWFcdTkyZWJc'@;
put 'dTkyZWNcdTkyZWRcdTkyZWVcdTkyZWZcdTkyZjBcdTkyZjFcdTkyZjJcdTkyZjNcdTkyZjRcdTkyZjVcdTkyZjZcdTkyZjdcdTkyZjhcdTkyZjlcdTkyZmFcdTkyZmJcdTkyZmNcdTkyZmRcdTkyZmVcdTkyZmZcdTkzMDBcdTkzMDFcdTkzMDJcdTkzMDNcdTkzMDRcdTkzMDVcdTkzMDZcdTkz'@;
put 'MDdcdTkzMDhcdTkzMDlcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRc'@;
put 'dTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZl'@;
put 'NTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZc'@;
put 'dTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBlXHU5MzBmXHU5MzEwXHU5MzExXHU5MzEyXHU5MzEz'@;
put 'XHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5MzJhXHU5MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5'@;
put 'MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2XHU5MzQ3XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRh'@;
put 'XHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5MzYxXHU5MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5'@;
put 'MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4'@;
put 'XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5'@;
put 'MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1Yjcx'@;
put 'XHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjldW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTM2Y1x1OTM2ZFx1OTM2ZVx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3Mlx1OTM3'@;
put 'M1x1OTM3NFx1OTM3NVx1OTM3Nlx1OTM3N1x1OTM3OFx1OTM3OVx1OTM3YVx1OTM3Ylx1OTM3Y1x1OTM3ZFx1OTM3ZVx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4M1x1OTM4NFx1OTM4NVx1OTM4Nlx1OTM4N1x1OTM4OFx1OTM4OVx1OTM4YVx1OTM4Ylx1OTM4Y1x1OTM4ZFx1OTM4ZVx1'@;
put 'OTM5MFx1OTM5MVx1OTM5Mlx1OTM5M1x1OTM5NFx1OTM5NVx1OTM5Nlx1OTM5N1x1OTM5OFx1OTM5OVx1OTM5YVx1OTM5Ylx1OTM5Y1x1OTM5ZFx1OTM5ZVx1OTM5Zlx1OTNhMFx1OTNhMVx1OTNhMlx1OTNhM1x1OTNhNFx1OTNhNVx1OTNhNlx1OTNhN1x1OTNhOFx1OTNhOVx1OTNhYVx1OTNh'@;
put 'Ylx1ZmZmZFx1OTNhY1x1OTNhZFx1OTNhZVx1OTNhZlx1OTNiMFx1OTNiMVx1OTNiMlx1OTNiM1x1OTNiNFx1OTNiNVx1OTNiNlx1OTNiN1x1OTNiOFx1OTNiOVx1OTNiYVx1OTNiYlx1OTNiY1x1OTNiZFx1OTNiZVx1OTNiZlx1OTNjMFx1OTNjMVx1OTNjMlx1OTNjM1x1OTNjNFx1OTNjNVx1'@;
put 'OTNjNlx1OTNjN1x1OTNjOFx1OTNjOVx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEz'@;
put 'NFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1'@;
put 'NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5'@;
put 'Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMw'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsyMzBdW21dKTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzY2VcdTkzY2ZcdTkzZDBcdTkzZDFcdTkzZDJcdTkz'@;
put 'ZDNcdTkzZDRcdTkzZDVcdTkzZDdcdTkzZDhcdTkzZDlcdTkzZGFcdTkzZGJcdTkzZGNcdTkzZGRcdTkzZGVcdTkzZGZcdTkzZTBcdTkzZTFcdTkzZTJcdTkzZTNcdTkzZTRcdTkzZTVcdTkzZTZcdTkzZTdcdTkzZThcdTkzZTlcdTkzZWFcdTkzZWJcdTkzZWNcdTkzZWRcdTkzZWVcdTkzZWZc'@;
put 'dTkzZjBcdTkzZjFcdTkzZjJcdTkzZjNcdTkzZjRcdTkzZjVcdTkzZjZcdTkzZjdcdTkzZjhcdTkzZjlcdTkzZmFcdTkzZmJcdTkzZmNcdTkzZmRcdTkzZmVcdTkzZmZcdTk0MDBcdTk0MDFcdTk0MDJcdTk0MDNcdTk0MDRcdTk0MDVcdTk0MDZcdTk0MDdcdTk0MDhcdTk0MDlcdTk0MGFcdTk0'@;
put 'MGJcdTk0MGNcdTk0MGRcdWZmZmRcdTk0MGVcdTk0MGZcdTk0MTBcdTk0MTFcdTk0MTJcdTk0MTNcdTk0MTRcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MThcdTk0MTlcdTk0MWFcdTk0MWJcdTk0MWNcdTk0MWRcdTk0MWVcdTk0MWZcdTk0MjBcdTk0MjFcdTk0MjJcdTk0MjNcdTk0MjRcdTk0MjVc'@;
put 'dTk0MjZcdTk0MjdcdTk0MjhcdTk0MjlcdTk0MmFcdTk0MmJcdTk0MmNcdTk0MmRcdTk0MmVcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdl'@;
put 'ZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVc'@;
put 'dTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTcz'@;
put 'YzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzFdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxGWzU5MTM2K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDJmXHU5NDMwXHU5NDMxXHU5'@;
put 'NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5NDRhXHU5NDRiXHU5NDRjXHU5NDRkXHU5NDRl'@;
put 'XHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1XHU5NDY2XHU5NDY3XHU5NDY4XHU5NDY5XHU5'@;
put 'NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5NDgxXHU5NDgyXHU5NDgzXHU5NDg0XHU5NDkx'@;
put 'XHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3'@;
put 'NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2Nzdj'@;
put 'XHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2'@;
put 'ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMy'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1bbV1dPTU5MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTUyN1x1'@;
put 'OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3N1x1OTU3OFx1OTU3OVx1OTU3YVx1OTU3Ylx1OTU3Y1x1OTU3ZFx1OTU3ZVx1OTU4MFx1OTU4MVx1OTU4Mlx1OTU4M1x1OTU4NFx1OTU4NVx1OTU4Nlx1OTU4N1x1OTU4'@;
put 'OFx1OTU4OVx1OTU4YVx1OTU4Ylx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU4Zlx1OTU5MFx1OTU5MVx1OTU5Mlx1OTU5M1x1OTU5NFx1OTU5NVx1OTU5Nlx1OTU5N1x1OTU5OFx1OTU5OVx1OTU5YVx1OTU5Ylx1OTU5Y1x1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMFx1OTVhMVx1OTVhMlx1OTVhM1x1'@;
put 'OTVhNFx1OTVhNVx1OTVhNlx1OTVhN1x1OTVhOFx1OTVhOVx1OTVhYVx1ZmZmZFx1OTVhYlx1OTVhY1x1OTVhZFx1OTVhZVx1OTVhZlx1OTViMFx1OTViMVx1OTViMlx1OTViM1x1OTViNFx1OTViNVx1OTViNlx1OTViN1x1OTViOFx1OTViOVx1OTViYVx1OTViYlx1OTViY1x1OTViZFx1OTVi'@;
put 'ZVx1OTViZlx1OTVjMFx1OTVjMVx1OTVjMlx1OTVjM1x1OTVjNFx1OTVjNVx1OTVjNlx1OTVjN1x1OTVjOFx1OTVjOVx1OTVjYVx1OTVjYlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1'@;
put 'Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1Njll'@;
put 'ZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1'@;
put 'NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTk1Y2NcdTk1Y2RcdTk1Y2VcdTk1Y2ZcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDRcdTk1ZDVcdTk1ZDZcdTk1ZDdcdTk1ZDhcdTk1ZDlcdTk1ZGFcdTk1ZGJcdTk1ZGNcdTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTFcdTk1ZTJcdTk1ZTNcdTk1ZTRcdTk1ZTVcdTk1'@;
put 'ZTZcdTk1ZTdcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2MjBcdTk2MjNcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MjdcdTk2MjhcdTk2MjlcdTk2MmJcdTk2MmNcdTk2MmRcdTk2MmZcdTk2MzBcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2VcdTk2NDFc'@;
put 'dTk2NDNcdTk2NGFcdTk2NGVcdTk2NGZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTdcdWZmZmRcdTk2NThcdTk2NTlcdTk2NWFcdTk2NWNcdTk2NWRcdTk2NWVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NmJcdTk2NmRcdTk2NmVcdTk2NmZcdTk2NzBcdTk2NzFcdTk2NzNcdTk2'@;
put 'NzhcdTk2NzlcdTk2N2FcdTk2N2JcdTk2N2NcdTk2N2RcdTk2N2VcdTk2N2ZcdTk2ODBcdTk2ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODdcdTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFc'@;
put 'dTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgw'@;
put 'MDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlc'@;
put 'dThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5NmE5XHU5NmFhXHU5NmFiXHU5NmFjXHU5'@;
put 'NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4XHU5NmQ5XHU5NmRhXHU5NmRiXHU5NmRj'@;
put 'XHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5'@;
put 'NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3'@;
put 'XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4'@;
put 'MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2'@;
put 'XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4'@;
put 'MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNV1bbV1dPTYwMTYwK20sRls2MDE2MCttXT14WzIzNV1bbV0pO2Zvcih4WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyNFx1OTcyNVx1OTcyNlx1OTcyN1x1OTcyOFx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyZVx1OTcyZlx1OTczMVx1OTczM1x1OTczNFx1OTczNVx1OTczNlx1OTczN1x1OTczYVx1OTczYlx1OTczY1x1'@;
put 'OTczZFx1OTczZlx1OTc0MFx1OTc0MVx1OTc0Mlx1OTc0M1x1OTc0NFx1OTc0NVx1OTc0Nlx1OTc0N1x1OTc0OFx1OTc0OVx1OTc0YVx1OTc0Ylx1OTc0Y1x1OTc0ZFx1OTc0ZVx1OTc0Zlx1OTc1MFx1OTc1MVx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1'@;
put 'Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YVx1OTc2Ylx1OTc2Y1x1OTc2ZFx1OTc2ZVx1OTc2Zlx1OTc3MFx1OTc3MVx1ZmZmZFx1OTc3Mlx1OTc3NVx1OTc3N1x1OTc3OFx1OTc3OVx1OTc3YVx1OTc3Ylx1OTc3ZFx1OTc3ZVx1OTc3Zlx1OTc4MFx1OTc4MVx1OTc4Mlx1'@;
put 'OTc4M1x1OTc4NFx1OTc4Nlx1OTc4N1x1OTc4OFx1OTc4OVx1OTc4YVx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5Ylx1OTc5Y1x1OTc5ZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1'@;
put 'OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1'@;
put 'NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIx'@;
put 'ZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1'@;
put 'NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzZdW21dXT02MDQxNittLEZbNjA0MTYrbV09eFsyMzZdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3OWVcdTk3OWZcdTk3YTFcdTk3YTJcdTk3YTRcdTk3YTVcdTk3YTZcdTk3YTdcdTk3YThcdTk3YTlcdTk3YWFcdTk3YWNcdTk3YWVcdTk3YjBcdTk3YjFcdTk3YjNcdTk3YjVcdTk3YjZcdTk3YjdcdTk3Yjhc'@;
put 'dTk3YjlcdTk3YmFcdTk3YmJcdTk3YmNcdTk3YmRcdTk3YmVcdTk3YmZcdTk3YzBcdTk3YzFcdTk3YzJcdTk3YzNcdTk3YzRcdTk3YzVcdTk3YzZcdTk3YzdcdTk3YzhcdTk3YzlcdTk3Y2FcdTk3Y2JcdTk3Y2NcdTk3Y2RcdTk3Y2VcdTk3Y2ZcdTk3ZDBcdTk3ZDFcdTk3ZDJcdTk3ZDNcdTk3'@;
put 'ZDRcdTk3ZDVcdTk3ZDZcdTk3ZDdcdTk3ZDhcdTk3ZDlcdTk3ZGFcdTk3ZGJcdTk3ZGNcdTk3ZGRcdTk3ZGVcdTk3ZGZcdTk3ZTBcdTk3ZTFcdTk3ZTJcdTk3ZTNcdWZmZmRcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWVcdTk3ZWZcdTk3ZjBcdTk3ZjFcdTk3ZjJcdTk3ZjRcdTk3ZjdcdTk3Zjhc'@;
put 'dTk3ZjlcdTk3ZmFcdTk3ZmJcdTk3ZmNcdTk3ZmRcdTk3ZmVcdTk3ZmZcdTk4MDBcdTk4MDFcdTk4MDJcdTk4MDNcdTk4MDRcdTk4MDVcdTk4MDZcdTk4MDdcdTk4MDhcdTk4MDlcdTk4MGFcdTk4MGJcdTk4MGNcdTk4MGRcdTk4MGVcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYw'@;
put 'NTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4Mzlc'@;
put 'dTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4'@;
put 'ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3Mzhc'@;
put 'dTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5ODFkXHU5ODFlXHU5ODFmXHU5ODIw'@;
put 'XHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4XHU5ODM5XHU5ODNhXHU5ODNiXHU5'@;
put 'ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU0XHU5ODU1XHU5ODU2'@;
put 'XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZlXHU3NzYyXHU3NzY1XHU3NzdmXHU3'@;
put 'NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3Zjgx'@;
put 'XHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5'@;
put 'NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRl'@;
put 'XHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1b'@;
put 'bV0pO2Zvcih4WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg2Zlx1OTg3MFx1OTg3MVx1OTg3Mlx1OTg3M1x1OTg3NFx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOFx1OThhOVx1OThhYVx1OThh'@;
put 'Ylx1OThhY1x1OThhZFx1OThhZVx1OThhZlx1OThiMFx1OThiMVx1OThiMlx1OThiM1x1OThiNFx1OThiNVx1OThiNlx1OThiN1x1OThiOFx1OThiOVx1OThiYVx1OThiYlx1OThiY1x1OThiZFx1OThiZVx1OThiZlx1OThjMFx1OThjMVx1OThjMlx1OThjM1x1OThjNFx1OThjNVx1OThjNlx1'@;
put 'OThjN1x1OThjOFx1OThjOVx1OThjYVx1OThjYlx1OThjY1x1OThjZFx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMFx1OThlMVx1OThlMlx1OThlM1x1OThlNFx1ZmZmZFx1OThlNVx1OThlNlx1OThlOVx1OThlYVx1OThlYlx1OThlY1x1OThl'@;
put 'ZFx1OThlZVx1OThlZlx1OThmMFx1OThmMVx1OThmMlx1OThmM1x1OThmNFx1OThmNVx1OThmNlx1OThmN1x1OThmOFx1OThmOVx1OThmYVx1OThmYlx1OThmY1x1OThmZFx1OThmZVx1OThmZlx1OTkwMFx1OTkwMVx1OTkwMlx1OTkwM1x1OTkwNFx1OTkwNVx1OTkwNlx1OTkwN1x1OTRlOVx1'@;
put 'OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUx'@;
put 'ZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1'@;
put 'OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZj'@;
put 'OVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzldW21dXT02MTE4NCttLEZbNjEx'@;
put 'ODQrbV09eFsyMzldW21dKTtmb3IoeFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5MDhcdTk5MDlcdTk5MGFcdTk5MGJcdTk5MGNcdTk5MGVcdTk5MGZcdTk5MTFcdTk5MTJcdTk5MTNcdTk5MTRcdTk5MTVcdTk5MTZcdTk5'@;
put 'MTdcdTk5MThcdTk5MTlcdTk5MWFcdTk5MWJcdTk5MWNcdTk5MWRcdTk5MWVcdTk5MWZcdTk5MjBcdTk5MjFcdTk5MjJcdTk5MjNcdTk5MjRcdTk5MjVcdTk5MjZcdTk5MjdcdTk5MjhcdTk5MjlcdTk5MmFcdTk5MmJcdTk5MmNcdTk5MmRcdTk5MmZcdTk5MzBcdTk5MzFcdTk5MzJcdTk5MzNc'@;
put 'dTk5MzRcdTk5MzVcdTk5MzZcdTk5MzdcdTk5MzhcdTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5M2RcdTk5M2VcdTk5M2ZcdTk5NDBcdTk5NDFcdTk5NDJcdTk5NDNcdTk5NDRcdTk5NDVcdTk5NDZcdTk5NDdcdTk5NDhcdTk5NDlcdWZmZmRcdTk5NGFcdTk5NGJcdTk5NGNcdTk5NGRcdTk5'@;
put 'NGVcdTk5NGZcdTk5NTBcdTk5NTFcdTk5NTJcdTk5NTNcdTk5NTZcdTk5NTdcdTk5NThcdTk5NTlcdTk5NWFcdTk5NWJcdTk5NWNcdTk5NWRcdTk5NWVcdTk5NWZcdTk5NjBcdTk5NjFcdTk5NjJcdTk5NjRcdTk5NjZcdTk5NzNcdTk5NzhcdTk5NzlcdTk5N2JcdTk5N2VcdTk5ODJcdTk5ODNc'@;
put 'dTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTll'@;
put 'MzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNc'@;
put 'dTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1'@;
put 'ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQwXVttXV09'@;
put 'NjE0NDArbSxGWzYxNDQwK21dPXhbMjQwXVttXSk7Zm9yKHhbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5OWEwXHU5OWExXHU5OWEyXHU5'@;
put 'OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJkXHU5OWJlXHU5OWJmXHU5OWMw'@;
put 'XHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVmZmZkXHU5OWQ5XHU5OWRhXHU5'@;
put 'OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYzXHU5OWY0XHU5OWY1XHU5OWY2'@;
put 'XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3'@;
put 'YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4'@;
put 'XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4'@;
put 'MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDFdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzI0MV1bbV1dPTYxNjk2K20sRls2MTY5NittXT14WzI0MV1bbV0pO2Zvcih4WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmYVx1OTlmYlx1OTlmY1x1OTlmZFx1OTlmZVx1OTlmZlx1OWEwMFx1OWEwMVx1OWEwMlx1'@;
put 'OWEwM1x1OWEwNFx1OWEwNVx1OWEwNlx1OWEwN1x1OWEwOFx1OWEwOVx1OWEwYVx1OWEwYlx1OWEwY1x1OWEwZFx1OWEwZVx1OWEwZlx1OWExMFx1OWExMVx1OWExMlx1OWExM1x1OWExNFx1OWExNVx1OWExNlx1OWExN1x1OWExOFx1OWExOVx1OWExYVx1OWExYlx1OWExY1x1OWExZFx1OWEx'@;
put 'ZVx1OWExZlx1OWEyMFx1OWEyMVx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyNVx1OWEyNlx1OWEyN1x1OWEyOFx1OWEyOVx1OWEyYVx1OWEyYlx1OWEyY1x1OWEyZFx1OWEyZVx1OWEyZlx1OWEzMFx1OWEzMVx1OWEzMlx1OWEzM1x1OWEzNFx1OWEzNVx1OWEzNlx1OWEzN1x1OWEzOFx1ZmZmZFx1'@;
put 'OWEzOVx1OWEzYVx1OWEzYlx1OWEzY1x1OWEzZFx1OWEzZVx1OWEzZlx1OWE0MFx1OWE0MVx1OWE0Mlx1OWE0M1x1OWE0NFx1OWE0NVx1OWE0Nlx1OWE0N1x1OWE0OFx1OWE0OVx1OWE0YVx1OWE0Ylx1OWE0Y1x1OWE0ZFx1OWE0ZVx1OWE0Zlx1OWE1MFx1OWE1MVx1OWE1Mlx1OWE1M1x1OWE1'@;
put 'NFx1OWE1NVx1OWE1Nlx1OWE1N1x1OWE1OFx1OWE1OVx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1'@;
put 'ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZk'@;
put 'ZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1'@;
put 'ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQyXVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsyNDJdW21dXT02MTk1MittLEZbNjE5NTIrbV09eFsyNDJdW21dKTtmb3IoeFsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNWFcdTlhNWJcdTlhNWNcdTlhNWRcdTlhNWVcdTlhNWZcdTlhNjBc'@;
put 'dTlhNjFcdTlhNjJcdTlhNjNcdTlhNjRcdTlhNjVcdTlhNjZcdTlhNjdcdTlhNjhcdTlhNjlcdTlhNmFcdTlhNmJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlhOTVcdTlhOTlcdTlhYTZcdTlhYTlcdTlhYWFcdTlhYWJcdTlhYWNcdTlhYWRcdTlhYWVcdTlhYWZcdTlh'@;
put 'YjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJcdTlhYmRcdTlhYmVcdTlhYmZcdTlhYzNcdTlhYzRcdTlhYzZcdTlhYzdcdTlhYzhcdTlhYzlcdTlhY2FcdTlhY2RcdTlhY2VcdTlhY2ZcdTlhZDBcdTlhZDJcdTlhZDRcdTlhZDVcdTlhZDZcdTlhZDdcdTlhZDlcdTlhZGFcdTlhZGJc'@;
put 'dTlhZGNcdWZmZmRcdTlhZGRcdTlhZGVcdTlhZTBcdTlhZTJcdTlhZTNcdTlhZTRcdTlhZTVcdTlhZTdcdTlhZThcdTlhZTlcdTlhZWFcdTlhZWNcdTlhZWVcdTlhZjBcdTlhZjFcdTlhZjJcdTlhZjNcdTlhZjRcdTlhZjVcdTlhZjZcdTlhZjdcdTlhZjhcdTlhZmFcdTlhZmNcdTlhZmRcdTlh'@;
put 'ZmVcdTlhZmZcdTliMDBcdTliMDFcdTliMDJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBc'@;
put 'dTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdi'@;
put 'MmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVc'@;
put 'dTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQzXVttXV09NjIyMDgrbSxGWzYyMjA4K21dPXhbMjQzXVttXSk7Zm9yKHhbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5YjBhXHU5YjBiXHU5YjBj'@;
put 'XHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJiXHU5'@;
put 'YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1XHU5YjU2XHU5YjU3'@;
put 'XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZmXHU5YjcwXHU5YjcxXHU5'@;
put 'YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4'@;
put 'XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3'@;
put 'YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4'@;
put 'XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ0XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NF1bbV1dPTYyNDY0K20sRls2MjQ2NCttXT14WzI0NF1bbV0pO2Zvcih4WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3Y1x1OWI3ZFx1OWI3'@;
put 'ZVx1OWI3Zlx1OWI4MFx1OWI4MVx1OWI4Mlx1OWI4M1x1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OFx1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4Y1x1OWI4ZFx1OWI4ZVx1OWI4Zlx1OWI5MFx1OWI5MVx1OWI5Mlx1OWI5M1x1OWI5NFx1OWI5NVx1OWI5Nlx1OWI5N1x1OWI5OFx1OWI5OVx1'@;
put 'OWI5YVx1OWI5Ylx1OWI5Y1x1OWI5ZFx1OWI5ZVx1OWI5Zlx1OWJhMFx1OWJhMVx1OWJhMlx1OWJhM1x1OWJhNFx1OWJhNVx1OWJhNlx1OWJhN1x1OWJhOFx1OWJhOVx1OWJhYVx1OWJhYlx1OWJhY1x1OWJhZFx1OWJhZVx1OWJhZlx1OWJiMFx1OWJiMVx1OWJiMlx1OWJiM1x1OWJiNFx1OWJi'@;
put 'NVx1OWJiNlx1OWJiN1x1OWJiOFx1OWJiOVx1OWJiYVx1ZmZmZFx1OWJiYlx1OWJiY1x1OWJiZFx1OWJiZVx1OWJiZlx1OWJjMFx1OWJjMVx1OWJjMlx1OWJjM1x1OWJjNFx1OWJjNVx1OWJjNlx1OWJjN1x1OWJjOFx1OWJjOVx1OWJjYVx1OWJjYlx1OWJjY1x1OWJjZFx1OWJjZVx1OWJjZlx1'@;
put 'OWJkMFx1OWJkMVx1OWJkMlx1OWJkM1x1OWJkNFx1OWJkNVx1OWJkNlx1OWJkN1x1OWJkOFx1OWJkOVx1OWJkYVx1OWJkYlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFh'@;
put 'Mlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1'@;
put 'OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1'@;
put 'Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDVdW21dXT02MjcyMCttLEZbNjI3MjArbV09eFsyNDVdW21dKTtmb3IoeFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTli'@;
put 'ZGNcdTliZGRcdTliZGVcdTliZGZcdTliZTBcdTliZTFcdTliZTJcdTliZTNcdTliZTRcdTliZTVcdTliZTZcdTliZTdcdTliZThcdTliZTlcdTliZWFcdTliZWJcdTliZWNcdTliZWRcdTliZWVcdTliZWZcdTliZjBcdTliZjFcdTliZjJcdTliZjNcdTliZjRcdTliZjVcdTliZjZcdTliZjdc'@;
put 'dTliZjhcdTliZjlcdTliZmFcdTliZmJcdTliZmNcdTliZmRcdTliZmVcdTliZmZcdTljMDBcdTljMDFcdTljMDJcdTljMDNcdTljMDRcdTljMDVcdTljMDZcdTljMDdcdTljMDhcdTljMDlcdTljMGFcdTljMGJcdTljMGNcdTljMGRcdTljMGVcdTljMGZcdTljMTBcdTljMTFcdTljMTJcdTlj'@;
put 'MTNcdTljMTRcdTljMTVcdTljMTZcdTljMTdcdTljMThcdTljMTlcdTljMWFcdWZmZmRcdTljMWJcdTljMWNcdTljMWRcdTljMWVcdTljMWZcdTljMjBcdTljMjFcdTljMjJcdTljMjNcdTljMjRcdTljMjVcdTljMjZcdTljMjdcdTljMjhcdTljMjlcdTljMmFcdTljMmJcdTljMmNcdTljMmRc'@;
put 'dTljMmVcdTljMmZcdTljMzBcdTljMzFcdTljMzJcdTljMzNcdTljMzRcdTljMzVcdTljMzZcdTljMzdcdTljMzhcdTljMzlcdTljM2FcdTljM2JcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3'@;
put 'MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2Vc'@;
put 'dTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTlj'@;
put 'YTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ2XVttXV09NjI5NzYrbSxGWzYyOTc2K21dPXhbMjQ2XVttXSk7Zm9yKHhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUzXHU5YzU0XHU5YzU1'@;
put 'XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5YzZmXHU5YzcwXHU5'@;
put 'YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2Fh'@;
put 'XHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5'@;
put 'Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQx'@;
put 'XHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3'@;
put 'ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0N11bbV1dPTYzMjMyK20sRls2MzIzMittXT14WzI0N11bbV0pO2Zvcih4WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWNlM1x1OWNlNFx1OWNlNVx1OWNlNlx1OWNlN1x1OWNlOFx1OWNlOVx1OWNlYVx1OWNlYlx1OWNlY1x1OWNlZFx1OWNlZVx1OWNlZlx1OWNmMFx1OWNmMVx1OWNmMlx1OWNmM1x1OWNmNFx1OWNmNVx1OWNmNlx1OWNmN1x1OWNmOFx1OWNmOVx1OWNm'@;
put 'YVx1OWNmYlx1OWNmY1x1OWNmZFx1OWNmZVx1OWNmZlx1OWQwMFx1OWQwMVx1OWQwMlx1OWQwM1x1OWQwNFx1OWQwNVx1OWQwNlx1OWQwN1x1OWQwOFx1OWQwOVx1OWQwYVx1OWQwYlx1OWQwY1x1OWQwZFx1OWQwZVx1OWQwZlx1OWQxMFx1OWQxMVx1OWQxMlx1OWQxM1x1OWQxNFx1OWQxNVx1'@;
put 'OWQxNlx1OWQxN1x1OWQxOFx1OWQxOVx1OWQxYVx1OWQxYlx1OWQxY1x1OWQxZFx1OWQxZVx1OWQxZlx1OWQyMFx1OWQyMVx1ZmZmZFx1OWQyMlx1OWQyM1x1OWQyNFx1OWQyNVx1OWQyNlx1OWQyN1x1OWQyOFx1OWQyOVx1OWQyYVx1OWQyYlx1OWQyY1x1OWQyZFx1OWQyZVx1OWQyZlx1OWQz'@;
put 'MFx1OWQzMVx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzNVx1OWQzNlx1OWQzN1x1OWQzOFx1OWQzOVx1OWQzYVx1OWQzYlx1OWQzY1x1OWQzZFx1OWQzZVx1OWQzZlx1OWQ0MFx1OWQ0MVx1OWQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDhdW21dXT02MzQ4OCttLEZbNjM0ODgrbV09eFsyNDhdW21dKTtmb3IoeFsyNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDNcdTlkNDRcdTlkNDVcdTlkNDZcdTlkNDdcdTlkNDhcdTlkNDlcdTlkNGFcdTlkNGJcdTlkNGNcdTlkNGRcdTlkNGVcdTlkNGZcdTlkNTBcdTlkNTFcdTlkNTJcdTlkNTNcdTlkNTRcdTlkNTVcdTlkNTZcdTlkNTdcdTlk'@;
put 'NThcdTlkNTlcdTlkNWFcdTlkNWJcdTlkNWNcdTlkNWRcdTlkNWVcdTlkNWZcdTlkNjBcdTlkNjFcdTlkNjJcdTlkNjNcdTlkNjRcdTlkNjVcdTlkNjZcdTlkNjdcdTlkNjhcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNmNcdTlkNmRcdTlkNmVcdTlkNmZcdTlkNzBcdTlkNzFcdTlkNzJcdTlkNzNc'@;
put 'dTlkNzRcdTlkNzVcdTlkNzZcdTlkNzdcdTlkNzhcdTlkNzlcdTlkN2FcdTlkN2JcdTlkN2NcdTlkN2RcdTlkN2VcdTlkN2ZcdTlkODBcdTlkODFcdWZmZmRcdTlkODJcdTlkODNcdTlkODRcdTlkODVcdTlkODZcdTlkODdcdTlkODhcdTlkODlcdTlkOGFcdTlkOGJcdTlkOGNcdTlkOGRcdTlk'@;
put 'OGVcdTlkOGZcdTlkOTBcdTlkOTFcdTlkOTJcdTlkOTNcdTlkOTRcdTlkOTVcdTlkOTZcdTlkOTdcdTlkOThcdTlkOTlcdTlkOWFcdTlkOWJcdTlkOWNcdTlkOWRcdTlkOWVcdTlkOWZcdTlkYTBcdTlkYTFcdTlkYTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ5XVttXV09NjM3NDQrbSxGWzYzNzQ0K21dPXhbMjQ5XVttXSk7Zm9yKHhbMjUwXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0XHU5ZGI1XHU5'@;
put 'ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5ZGQwXHU5ZGQx'@;
put 'XHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVhXHU5ZGViXHU5'@;
put 'ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MF1bbV1dPTY0ZTMrbSxGWzY0ZTMrbV09eFsyNTBdW21dKTtmb3IoeFsy'@;
put 'NTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllMDNcdTllMDRcdTllMDVcdTllMDZcdTllMDdcdTllMDhcdTllMDlcdTllMGFcdTllMGJcdTllMGNcdTllMGRcdTllMGVcdTllMGZcdTllMTBcdTllMTFcdTllMTJcdTllMTNcdTll'@;
put 'MTRcdTllMTVcdTllMTZcdTllMTdcdTllMThcdTllMTlcdTllMWFcdTllMWJcdTllMWNcdTllMWRcdTllMWVcdTllMjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZc'@;
put 'dTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzRcdTllNzVcdTllNzZcdTllNzdcdTllNzhcdTllNzlcdTllN2FcdTllN2JcdTllN2NcdTllN2RcdTllODBcdWZmZmRcdTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGNcdTll'@;
put 'OGRcdTllOGVcdTllOGZcdTllOTBcdTllOTFcdTllOTRcdTllOTVcdTllOTZcdTllOTdcdTllOThcdTllOTlcdTllOWFcdTllOWJcdTllOWNcdTllOWVcdTllYTBcdTllYTFcdTllYTJcdTllYTNcdTllYTRcdTllYTVcdTllYTdcdTllYThcdTllYTlcdTllYWFcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUxXVttXV09NjQyNTYrbSxGWzY0MjU2K21dPXhbMjUx'@;
put 'XVttXSk7Zm9yKHhbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZWFiXHU5ZWFjXHU5ZWFkXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIxXHU5ZWIyXHU5ZWIzXHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5ZWJjXHU5'@;
put 'ZWJmXHU5ZWMwXHU5ZWMxXHU5ZWMyXHU5ZWMzXHU5ZWM1XHU5ZWM2XHU5ZWM3XHU5ZWM4XHU5ZWNhXHU5ZWNiXHU5ZWNjXHU5ZWQwXHU5ZWQyXHU5ZWQzXHU5ZWQ1XHU5ZWQ2XHU5ZWQ3XHU5ZWQ5XHU5ZWRhXHU5ZWRlXHU5ZWUxXHU5ZWUzXHU5ZWU0XHU5ZWU2XHU5ZWU4XHU5ZWViXHU5ZWVj'@;
put 'XHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWYzXHU5ZWY0XHU5ZWY1XHU5ZWY2XHU5ZWY3XHU5ZWY4XHU5ZWZhXHU5ZWZkXHU5ZWZmXHU5ZjAwXHU5ZjAxXHU5ZjAyXHU5ZjAzXHU5ZjA0XHU5ZjA1XHVmZmZkXHU5ZjA2XHU5ZjA3XHU5ZjA4XHU5ZjA5XHU5ZjBhXHU5ZjBjXHU5'@;
put 'ZjBmXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE1XHU5ZjE2XHU5ZjE4XHU5ZjFhXHU5ZjFiXHU5ZjFjXHU5ZjFkXHU5ZjFlXHU5ZjFmXHU5ZjIxXHU5ZjIzXHU5ZjI0XHU5ZjI1XHU5ZjI2XHU5ZjI3XHU5ZjI4XHU5ZjI5XHU5ZjJhXHU5ZjJiXHU5ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMxXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1Ml1bbV1dPTY0NTEyK20sRls2'@;
put 'NDUxMittXT14WzI1Ml1bbV0pO2Zvcih4WzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1OWY0M1x1'@;
put 'OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2'@;
put 'Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1OWY3Y1x1'@;
put 'OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5NVx1Zjll'@;
put 'N1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTNdW21d'@;
put 'XT02NDc2OCttLEZbNjQ3NjgrbV09eFsyNTNdW21dKTtmb3IoeFsyNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFc'@;
put 'dWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1NF1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGFlW3hbMjU0XVttXV09NjUwMjQrbSxGWzY1MDI0K21dPXhbMjU0XVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbOTQ5XT1mdW5jdGlvbigpe3ZhciBtLEY9W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgw'@;
put 'ZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9'@;
put 'flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFj'@;
put 'MGVcdWFjMGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdc'@;
put 'dWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNc'@;
put 'dWFjNzVcdWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFj'@;
put 'YTRcdWFjYTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2Vc'@;
put 'dWFjY2ZcdWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFj'@;
put 'ZjlcdWFjZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEyOV1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTI5XVttXV09MzMwMjQrbSxGWzMzMDI0K21dPXhbMTI5XVttXSk7Zm9yKHhbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVh'@;
put 'ZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxXHVhZDIyXHVhZDIzXHVhZDI0XHVhZDI1XHVhZDI2XHVhZDI3XHVhZDI4XHVhZDJhXHVhZDJiXHVhZDJlXHVhZDJmXHVhZDMwXHVhZDMxXHVhZDMyXHVhZDMzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDM2'@;
put 'XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkXHVhZDNlXHVhZDNmXHVhZDQwXHVhZDQxXHVhZDQyXHVhZDQzXHVhZDQ2XHVhZDQ4XHVhZDRhXHVhZDRiXHVhZDRjXHVhZDRkXHVhZDRlXHVhZDRmXHVhZDUxXHVhZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDU5XHVhZDVhXHVhZDViXHVhZDVjXHVhZDVkXHVhZDVlXHVhZDVmXHVhZDYwXHVhZDYyXHVhZDY0XHVhZDY1XHVhZDY2XHVhZDY3XHVhZDY4XHVhZDY5XHVhZDZhXHVhZDZiXHVhZDZlXHVhZDZmXHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5'@;
put 'XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzXHVhZDg0XHVhZDg1XHVhZDg2XHVhZDg3XHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxXHVhZDkyXHVhZDkzXHVhZDk0XHVhZDk1XHVhZDk2XHVhZDk3XHVhZDk4XHVhZDk5XHVhZDlhXHVhZDliXHVhZDllXHVhZDlmXHVhZGEwXHVh'@;
put 'ZGExXHVhZGEyXHVhZGEzXHVhZGE1XHVhZGE2XHVhZGE3XHVhZGE4XHVhZGE5XHVhZGFhXHVhZGFiXHVhZGFjXHVhZGFkXHVhZGFlXHVhZGFmXHVhZGIwXHVhZGIxXHVhZGIyXHVhZGIzXHVhZGI0XHVhZGI1XHVhZGI2XHVhZGI4XHVhZGI5XHVhZGJhXHVhZGJiXHVhZGJjXHVhZGJkXHVhZGJl'@;
put 'XHVhZGJmXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVhZGM5XHVhZGNhXHVhZGNiXHVhZGNjXHVhZGNkXHVhZGNlXHVhZGNmXHVhZGQyXHVhZGQ0XHVhZGQ1XHVhZGQ2XHVhZGQ3XHVhZGQ4XHVhZGQ5XHVhZGRhXHVhZGRiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVh'@;
put 'ZGUzXHVhZGU1XHVhZGU2XHVhZGU3XHVhZGU4XHVhZGU5XHVhZGVhXHVhZGViXHVhZGVjXHVhZGVkXHVhZGVlXHVhZGVmXHVhZGYwXHVhZGYxXHVhZGYyXHVhZGYzXHVhZGY0XHVhZGY1XHVhZGY2XHVhZGY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMwXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMF1bbV1dPTMzMjgwK20sRlszMzI4MCttXT14WzEzMF1bbV0pO2Zvcih4WzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWRmYVx1YWRmYlx1YWRmZFx1'@;
put 'YWRmZVx1YWUwMlx1YWUwM1x1YWUwNFx1YWUwNVx1YWUwNlx1YWUwN1x1YWUwYVx1YWUwY1x1YWUwZVx1YWUwZlx1YWUxMFx1YWUxMVx1YWUxMlx1YWUxM1x1YWUxNVx1YWUxNlx1YWUxN1x1YWUxOFx1YWUxOVx1YWUxYVx1YWUxYlx1YWUxY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1YWUxZFx1YWUxZVx1YWUxZlx1YWUyMFx1YWUyMVx1YWUyMlx1YWUyM1x1YWUyNFx1YWUyNVx1YWUyNlx1YWUyN1x1YWUyOFx1YWUyOVx1YWUyYVx1YWUyYlx1YWUyY1x1YWUyZFx1YWUyZVx1YWUyZlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzY1x1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1YWU1M1x1YWU1NVx1YWU1N1x1YWU1OFx1YWU1OVx1YWU1YVx1YWU1Ylx1YWU1ZVx1YWU2Mlx1YWU2'@;
put 'M1x1YWU2NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1YWU2Zlx1YWU3MVx1YWU3Mlx1YWU3M1x1YWU3NFx1YWU3NVx1YWU3Nlx1YWU3N1x1YWU3YVx1YWU3ZVx1YWU3Zlx1YWU4MFx1YWU4MVx1YWU4Mlx1YWU4M1x1YWU4Nlx1YWU4N1x1YWU4OFx1YWU4OVx1YWU4YVx1'@;
put 'YWU4Ylx1YWU4ZFx1YWU4ZVx1YWU4Zlx1YWU5MFx1YWU5MVx1YWU5Mlx1YWU5M1x1YWU5NFx1YWU5NVx1YWU5Nlx1YWU5N1x1YWU5OFx1YWU5OVx1YWU5YVx1YWU5Ylx1YWU5Y1x1YWU5ZFx1YWU5ZVx1YWU5Zlx1YWVhMFx1YWVhMVx1YWVhMlx1YWVhM1x1YWVhNFx1YWVhNVx1YWVhNlx1YWVh'@;
put 'N1x1YWVhOFx1YWVhOVx1YWVhYVx1YWVhYlx1YWVhY1x1YWVhZFx1YWVhZVx1YWVhZlx1YWViMFx1YWViMVx1YWViMlx1YWViM1x1YWViNFx1YWViNVx1YWViNlx1YWViN1x1YWViOFx1YWViOVx1YWViYVx1YWViYlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNVx1YWVjNlx1YWVjN1x1'@;
put 'YWVjOFx1YWVjOVx1YWVjYVx1YWVjYlx1YWVjZVx1YWVkMlx1YWVkM1x1YWVkNFx1YWVkNVx1YWVkNlx1YWVkN1x1YWVkYVx1YWVkYlx1YWVkZFx1YWVkZVx1YWVkZlx1YWVlMFx1YWVlMVx1YWVlMlx1YWVlM1x1YWVlNFx1YWVlNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMV0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzFdW21dXT0zMzUzNittLEZbMzM1MzYrbV09eFsxMzFdW21dKTtmb3IoeFsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZc'@;
put 'dWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFc'@;
put 'dWFmMjJcdWFmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFm'@;
put 'M2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJc'@;
put 'dWFmNjNcdWFmNjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFm'@;
put 'ODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNc'@;
put 'dWFmYTRcdWFmYTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMyXVttXV09MzM3OTIrbSxGWzMzNzkyK21dPXhbMTMyXVttXSk7Zm9yKHhbMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVhZmJmXHVhZmMxXHVhZmMyXHVhZmMzXHVhZmM0XHVhZmM1XHVhZmM2XHVhZmNhXHVhZmNjXHVhZmNmXHVhZmQwXHVhZmQxXHVhZmQyXHVhZmQzXHVhZmQ1XHVhZmQ2XHVhZmQ3XHVhZmQ4XHVhZmQ5XHVhZmRhXHVhZmRiXHVhZmRkXHVhZmRlXHVhZmRmXHVhZmUwXHVhZmUxXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmUyXHVhZmUzXHVhZmU0XHVhZmU1XHVhZmU2XHVhZmU3XHVhZmVhXHVhZmViXHVhZmVjXHVhZmVkXHVhZmVlXHVhZmVmXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5XHVhZmZhXHVhZmZiXHVhZmZjXHVhZmZk'@;
put 'XHVhZmZlXHVhZmZmXHViMDAyXHViMDAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMDA1XHViMDA2XHViMDA3XHViMDA4XHViMDA5XHViMDBhXHViMDBiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1XHViMDE2XHViMDE3XHViMDE4XHVi'@;
put 'MDE5XHViMDFhXHViMDFiXHViMDFlXHViMDFmXHViMDIwXHViMDIxXHViMDIyXHViMDIzXHViMDI0XHViMDI1XHViMDI2XHViMDI3XHViMDI5XHViMDJhXHViMDJiXHViMDJjXHViMDJkXHViMDJlXHViMDJmXHViMDMwXHViMDMxXHViMDMyXHViMDMzXHViMDM0XHViMDM1XHViMDM2XHViMDM3'@;
put 'XHViMDM4XHViMDM5XHViMDNhXHViMDNiXHViMDNjXHViMDNkXHViMDNlXHViMDNmXHViMDQwXHViMDQxXHViMDQyXHViMDQzXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlXHVi'@;
put 'MDVmXHViMDYwXHViMDYxXHViMDYyXHViMDYzXHViMDY0XHViMDY1XHViMDY2XHViMDY3XHViMDY4XHViMDY5XHViMDZhXHViMDZiXHViMDZjXHViMDZkXHViMDZlXHViMDZmXHViMDcwXHViMDcxXHViMDcyXHViMDczXHViMDc0XHViMDc1XHViMDc2XHViMDc3XHViMDc4XHViMDc5XHViMDdh'@;
put 'XHViMDdiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1XHViMDg2XHViMDg3XHViMDg4XHViMDg5XHViMDhhXHViMDhiXHViMDhlXHViMDkwXHViMDkyXHViMDkzXHViMDk0XHViMDk1XHViMDk2XHViMDk3XHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzM11bbV1dPTM0MDQ4K20sRlszNDA0OCttXT14WzEzM11bbV0pO2Zvcih4WzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBhNVx1YjBhNlx1YjBhN1x1YjBhYVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBiYlx1YjBiZFx1YjBiZVx1YjBiZlx1YjBjMFx1YjBjMVx1YjBjMlx1YjBjM1x1YjBjNlx1YjBjYVx1YjBjYlx1YjBjY1x1YjBjZFx1YjBjZVx1'@;
put 'YjBjZlx1YjBkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOVx1YjBkYVx1YjBkYlx1YjBkY1x1YjBkZFx1YjBkZVx1YjBkZlx1YjBlMVx1YjBlMlx1YjBlM1x1YjBlNFx1YjBlNlx1YjBlN1x1YjBlOFx1YjBlOVx1YjBl'@;
put 'YVx1YjBlYlx1YjBlY1x1YjBlZFx1YjBlZVx1YjBlZlx1YjBmMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjBmMVx1YjBmMlx1YjBmM1x1YjBmNFx1YjBmNVx1YjBmNlx1YjBmN1x1YjBmOFx1YjBmOVx1YjBmYVx1YjBmYlx1YjBmY1x1YjBmZFx1YjBmZVx1YjBmZlx1'@;
put 'YjEwMFx1YjEwMVx1YjEwMlx1YjEwM1x1YjEwNFx1YjEwNVx1YjEwNlx1YjEwN1x1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZVx1YjExZlx1YjEyMFx1YjEyMVx1YjEyMlx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEy'@;
put 'Ylx1YjEyZFx1YjEyZVx1YjEyZlx1YjEzMFx1YjEzMVx1YjEzMlx1YjEzM1x1YjEzNlx1YjEzYVx1YjEzYlx1YjEzY1x1YjEzZFx1YjEzZVx1YjEzZlx1YjE0Mlx1YjE0M1x1YjE0NVx1YjE0Nlx1YjE0N1x1YjE0OVx1YjE0YVx1YjE0Ylx1YjE0Y1x1YjE0ZFx1YjE0ZVx1YjE0Zlx1YjE1Mlx1'@;
put 'YjE1M1x1YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2MVx1YjE2Mlx1YjE2M1x1YjE2NFx1YjE2NVx1YjE2Nlx1YjE2N1x1YjE2OFx1YjE2OVx1YjE2YVx1YjE2Ylx1YjE2Y1x1YjE2ZFx1YjE2ZVx1YjE2Zlx1YjE3MFx1YjE3MVx1YjE3Mlx1YjE3'@;
put 'M1x1YjE3NFx1YjE3NVx1YjE3Nlx1YjE3N1x1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4M1x1YjE4NFx1YjE4NVx1YjE4Nlx1YjE4N1x1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5Ylx1'@;
put 'YjE5ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzRdW21dXT0zNDMwNCttLEZbMzQzMDQrbV09eFsxMzRdW21dKTtmb3IoeFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRc'@;
put 'dWIxYjVcdWIxYjZcdWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIx'@;
put 'Y2FcdWIxY2JcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVc'@;
put 'dWIxZTZcdWIxZTdcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIy'@;
put 'MGRcdWIyMGVcdWIyMGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRc'@;
put 'dWIyMmVcdWIyMmZcdWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIy'@;
put 'NGJcdWIyNGNcdWIyNGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJc'@;
put 'dWIyNmNcdWIyNmRcdWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM1XVttXV09MzQ1NjArbSxGWzM0NTYwK21dPXhbMTM1XVttXSk7Zm9yKHhbMTM2XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjZmXHViMjcwXHViMjcxXHViMjcyXHViMjczXHViMjc2XHViMjc3XHViMjc4XHViMjc5XHViMjdhXHViMjdiXHViMjdkXHViMjdlXHViMjdmXHViMjgwXHViMjgxXHViMjgyXHViMjgzXHViMjg2XHViMjg3'@;
put 'XHViMjg4XHViMjhhXHViMjhiXHViMjhjXHViMjhkXHViMjhlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliXHViMjljXHViMjlkXHViMjllXHViMjlmXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHVi'@;
put 'MmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMmI4XHViMmI5XHViMmJhXHViMmJiXHViMmJjXHViMmJkXHViMmJlXHViMmJmXHViMmMwXHViMmMxXHViMmMy'@;
put 'XHViMmMzXHViMmM0XHViMmM1XHViMmM2XHViMmM3XHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzXHViMmQ0XHViMmQ1XHViMmQ2XHViMmQ3XHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHVi'@;
put 'MmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5XHViMzBhXHViMzBiXHViMzBjXHViMzBkXHViMzBlXHViMzBmXHViMzEyXHViMzE2XHViMzE3XHViMzE4XHViMzE5XHViMzFhXHViMzFiXHViMzFkXHViMzFlXHViMzFm'@;
put 'XHViMzIwXHViMzIxXHViMzIyXHViMzIzXHViMzI0XHViMzI1XHViMzI2XHViMzI3XHViMzI4XHViMzI5XHViMzJhXHViMzJiXHViMzJjXHViMzJkXHViMzJlXHViMzJmXHViMzMwXHViMzMxXHViMzMyXHViMzMzXHViMzM0XHViMzM1XHViMzM2XHViMzM3XHViMzM4XHViMzM5XHViMzNhXHVi'@;
put 'MzNiXHViMzNjXHViMzNkXHViMzNlXHViMzNmXHViMzQwXHViMzQxXHViMzQyXHViMzQzXHViMzQ0XHViMzQ1XHViMzQ2XHViMzQ3XHViMzQ4XHViMzQ5XHViMzRhXHViMzRiXHViMzRjXHViMzRkXHViMzRlXHViMzRmXHViMzUwXHViMzUxXHViMzUyXHViMzUzXHViMzU3XHViMzU5XHViMzVh'@;
put 'XHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNl1bbV1dPTM0ODE2K20sRlszNDgxNittXT14WzEzNl1bbV0pO2Zvcih4WzEzN109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OVx1YjM3YVx1YjM3Ylx1YjM3Y1x1YjM3ZFx1YjM3ZVx1YjM3'@;
put 'Zlx1YjM4Mlx1YjM4Nlx1YjM4N1x1YjM4OFx1YjM4OVx1YjM4YVx1YjM4Ylx1YjM4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NVx1YjM5Nlx1YjM5N1x1YjM5OFx1YjM5OVx1YjM5YVx1YjM5Ylx1YjM5Y1x1'@;
put 'YjM5ZFx1YjM5ZVx1YjM5Zlx1YjNhMlx1YjNhM1x1YjNhNFx1YjNhNVx1YjNhNlx1YjNhN1x1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjNhZVx1YjNhZlx1YjNiMFx1YjNiMVx1YjNiMlx1YjNiM1x1YjNiNFx1YjNiNVx1YjNi'@;
put 'Nlx1YjNiN1x1YjNiOFx1YjNiOVx1YjNiYVx1YjNiYlx1YjNiY1x1YjNiZFx1YjNiZVx1YjNiZlx1YjNjMFx1YjNjMVx1YjNjMlx1YjNjM1x1YjNjNlx1YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1'@;
put 'YjNkZlx1YjNlMVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOVx1YjNlYVx1YjNlYlx1YjNlY1x1YjNlZFx1YjNlZVx1YjNlZlx1YjNmMFx1YjNmMVx1YjNmMlx1YjNmM1x1YjNmNFx1YjNmNVx1YjNmNlx1YjNmN1x1YjNmOFx1YjNmOVx1YjNmYVx1YjNmYlx1YjNmZFx1YjNm'@;
put 'ZVx1YjNmZlx1YjQwMFx1YjQwMVx1YjQwMlx1YjQwM1x1YjQwNFx1YjQwNVx1YjQwNlx1YjQwN1x1YjQwOFx1YjQwOVx1YjQwYVx1YjQwYlx1YjQwY1x1YjQwZFx1YjQwZVx1YjQwZlx1YjQxMVx1YjQxMlx1YjQxM1x1YjQxNFx1YjQxNVx1YjQxNlx1YjQxN1x1YjQxOVx1YjQxYVx1YjQxYlx1'@;
put 'YjQxZFx1YjQxZVx1YjQxZlx1YjQyMVx1YjQyMlx1YjQyM1x1YjQyNFx1YjQyNVx1YjQyNlx1YjQyN1x1YjQyYVx1YjQyY1x1YjQyZFx1YjQyZVx1YjQyZlx1YjQzMFx1YjQzMVx1YjQzMlx1YjQzM1x1YjQzNVx1YjQzNlx1YjQzN1x1YjQzOFx1YjQzOVx1YjQzYVx1YjQzYlx1YjQzY1x1YjQz'@;
put 'ZFx1YjQzZVx1YjQzZlx1YjQ0MFx1YjQ0MVx1YjQ0Mlx1YjQ0M1x1YjQ0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzddW21dXT0zNTA3MittLEZbMzUwNzIrbV09eFsxMzddW21dKTtm'@;
put 'b3IoeFsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0'@;
put 'NTdcdWI0NTlcdWI0NWFcdWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJc'@;
put 'dWI0NzNcdWI0NzRcdWI0NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0'@;
put 'OGFcdWI0OGJcdWI0OGNcdWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdc'@;
put 'dWI0YTlcdWI0YWFcdWI0YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0'@;
put 'Y2JcdWI0Y2NcdWI0Y2RcdWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJc'@;
put 'dWI0ZjNcdWI0ZjRcdWI0ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1'@;
put 'MGZcdWI1MTBcdWI1MTFcdWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM4XVttXV09MzUzMjgrbSxGWzM1MzI4K21d'@;
put 'PXhbMTM4XVttXSk7Zm9yKHhbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTFlXHViNTFmXHViNTIwXHViNTIxXHViNTIyXHViNTIzXHViNTI2XHViNTJiXHViNTJjXHViNTJkXHViNTJlXHViNTJmXHViNTMyXHVi'@;
put 'NTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5XHViNTNhXHViNTNiXHViNTNjXHViNTNkXHViNTNlXHViNTNmXHViNTQyXHViNTQ2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUz'@;
put 'XHViNTU1XHViNTU2XHViNTU3XHViNTU4XHViNTU5XHViNTVhXHViNTViXHViNTVlXHViNTYyXHViNTYzXHViNTY0XHViNTY1XHViNTY2XHViNTY3XHViNTY4XHViNTY5XHViNTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTZiXHViNTZjXHViNTZkXHViNTZlXHVi'@;
put 'NTZmXHViNTcwXHViNTcxXHViNTcyXHViNTczXHViNTc0XHViNTc1XHViNTc2XHViNTc3XHViNTc4XHViNTc5XHViNTdhXHViNTdiXHViNTdjXHViNTdkXHViNTdlXHViNTdmXHViNTgwXHViNTgxXHViNTgyXHViNTgzXHViNTg0XHViNTg1XHViNTg2XHViNTg3XHViNTg4XHViNTg5XHViNThh'@;
put 'XHViNThiXHViNThjXHViNThkXHViNThlXHViNThmXHViNTkwXHViNTkxXHViNTkyXHViNTkzXHViNTk0XHViNTk1XHViNTk2XHViNTk3XHViNTk4XHViNTk5XHViNTlhXHViNTliXHViNTljXHViNTlkXHViNTllXHViNTlmXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHVi'@;
put 'NWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2XHViNWI3XHViNWI4XHViNWI5XHViNWJhXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1XHViNWM2XHViNWM3XHViNWM4XHViNWM5XHViNWNhXHViNWNiXHViNWNlXHViNWQyXHViNWQzXHViNWQ0XHViNWQ1XHViNWQ2'@;
put 'XHViNWQ3XHViNWQ5XHViNWRhXHViNWRiXHViNWRjXHViNWRkXHViNWRlXHViNWRmXHViNWUwXHViNWUxXHViNWUyXHViNWUzXHViNWU0XHViNWU1XHViNWU2XHViNWU3XHViNWU4XHViNWU5XHViNWVhXHViNWViXHViNWVkXHViNWVlXHViNWVmXHViNWYwXHViNWYxXHViNWYyXHViNWYzXHVi'@;
put 'NWY0XHViNWY1XHViNWY2XHViNWY3XHViNWY4XHViNWY5XHViNWZhXHViNWZiXHViNWZjXHViNWZkXHViNWZlXHViNWZmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOV1bbV1dPTM1NTg0'@;
put 'K20sRlszNTU4NCttXT14WzEzOV1bbV0pO2Zvcih4WzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYwMFx1YjYwMVx1YjYwMlx1YjYwM1x1YjYwNFx1YjYwNVx1YjYwNlx1YjYwN1x1YjYwOFx1YjYwOVx1YjYwYVx1'@;
put 'YjYwYlx1YjYwY1x1YjYwZFx1YjYwZVx1YjYwZlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYxNlx1YjYxN1x1YjYxOVx1YjYxYVx1YjYxYlx1YjYxY1x1YjYxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYxZVx1YjYxZlx1YjYyMFx1YjYyMVx1YjYyMlx1YjYyM1x1YjYy'@;
put 'NFx1YjYyNlx1YjYyN1x1YjYyOFx1YjYyOVx1YjYyYVx1YjYyYlx1YjYyZFx1YjYyZVx1YjYyZlx1YjYzMFx1YjYzMVx1YjYzMlx1YjYzM1x1YjYzNVx1YjYzNlx1YjYzN1x1YjYzOFx1YjYzOVx1YjYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjYzYlx1YjYzY1x1'@;
put 'YjYzZFx1YjYzZVx1YjYzZlx1YjY0MFx1YjY0MVx1YjY0Mlx1YjY0M1x1YjY0NFx1YjY0NVx1YjY0Nlx1YjY0N1x1YjY0OVx1YjY0YVx1YjY0Ylx1YjY0Y1x1YjY0ZFx1YjY0ZVx1YjY0Zlx1YjY1MFx1YjY1MVx1YjY1Mlx1YjY1M1x1YjY1NFx1YjY1NVx1YjY1Nlx1YjY1N1x1YjY1OFx1YjY1'@;
put 'OVx1YjY1YVx1YjY1Ylx1YjY1Y1x1YjY1ZFx1YjY1ZVx1YjY1Zlx1YjY2MFx1YjY2MVx1YjY2Mlx1YjY2M1x1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OVx1YjY2YVx1YjY2Ylx1YjY2Y1x1YjY2ZFx1YjY2ZVx1YjY2Zlx1YjY3MFx1YjY3MVx1YjY3Mlx1YjY3M1x1YjY3NFx1YjY3NVx1YjY3Nlx1'@;
put 'YjY3N1x1YjY3OFx1YjY3OVx1YjY3YVx1YjY3Ylx1YjY3Y1x1YjY3ZFx1YjY3ZVx1YjY3Zlx1YjY4MFx1YjY4MVx1YjY4Mlx1YjY4M1x1YjY4NFx1YjY4NVx1YjY4Nlx1YjY4N1x1YjY4OFx1YjY4OVx1YjY4YVx1YjY4Ylx1YjY4Y1x1YjY4ZFx1YjY4ZVx1YjY4Zlx1YjY5MFx1YjY5MVx1YjY5'@;
put 'Mlx1YjY5M1x1YjY5NFx1YjY5NVx1YjY5Nlx1YjY5N1x1YjY5OFx1YjY5OVx1YjY5YVx1YjY5Ylx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZhNVx1YjZhNlx1YjZhN1x1YjZhOFx1YjZhOVx1YjZhYVx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMlx1YjZiM1x1YjZiNFx1'@;
put 'YjZiNVx1YjZiNlx1YjZiN1x1YjZiOFx1YjZiOVx1YjZiYVx1YjZiYlx1YjZiY1x1YjZiZFx1YjZiZVx1YjZiZlx1YjZjMFx1YjZjMVx1YjZjMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'NDBdW21dXT0zNTg0MCttLEZbMzU4NDArbV09eFsxNDBdW21dKTtmb3IoeFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2Jc'@;
put 'dWI2Y2NcdWI2Y2RcdWI2Y2VcdWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2'@;
put 'ZTJcdWI2ZTNcdWI2ZTRcdWI2ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWI2ZmJcdWI2ZmNcdWI2ZmRcdWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3'@;
put 'MTlcdWI3MWFcdWI3MWJcdWI3MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2Nc'@;
put 'dWI3M2RcdWI3M2VcdWI3M2ZcdWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3'@;
put 'NWRcdWI3NWVcdWI3NWZcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJc'@;
put 'dWI3ODNcdWI3ODVcdWI3ODZcdWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTQxXVttXV09MzYwOTYrbSxGWzM2MDk2K21dPXhbMTQxXVttXSk7Zm9yKHhbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNzlmXHViN2ExXHViN2EyXHViN2EzXHViN2E0XHViN2E1XHViN2E2'@;
put 'XHViN2E3XHViN2FhXHViN2FlXHViN2FmXHViN2IwXHViN2IxXHViN2IyXHViN2IzXHViN2I2XHViN2I3XHViN2I5XHViN2JhXHViN2JiXHViN2JjXHViN2JkXHViN2JlXHViN2JmXHViN2MwXHViN2MxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2MyXHViN2MzXHVi'@;
put 'N2M0XHViN2M1XHViN2M2XHViN2M4XHViN2NhXHViN2NiXHViN2NjXHViN2NkXHViN2NlXHViN2NmXHViN2QwXHViN2QxXHViN2QyXHViN2QzXHViN2Q0XHViN2Q1XHViN2Q2XHViN2Q3XHViN2Q4XHViN2Q5XHViN2RhXHViN2RiXHViN2RjXHViN2RkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHViN2RlXHViN2RmXHViN2UwXHViN2UxXHViN2UyXHViN2UzXHViN2U0XHViN2U1XHViN2U2XHViN2U3XHViN2U4XHViN2U5XHViN2VhXHViN2ViXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1XHViN2Y2XHViN2Y3XHViN2Y4XHViN2Y5XHViN2ZhXHVi'@;
put 'N2ZiXHViN2ZlXHViODAyXHViODAzXHViODA0XHViODA1XHViODA2XHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExXHViODEyXHViODEzXHViODE0XHViODE1XHViODE2XHViODE3XHViODFhXHViODFjXHViODFlXHViODFmXHViODIwXHViODIxXHViODIyXHViODIzXHViODI2'@;
put 'XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkXHViODJlXHViODJmXHViODMwXHViODMxXHViODMyXHViODMzXHViODM2XHViODNhXHViODNiXHViODNjXHViODNkXHViODNlXHViODNmXHViODQxXHViODQyXHViODQzXHViODQ1XHViODQ2XHViODQ3XHViODQ4XHViODQ5XHViODRhXHVi'@;
put 'ODRiXHViODRjXHViODRkXHViODRlXHViODRmXHViODUwXHViODUyXHViODU0XHViODU1XHViODU2XHViODU3XHViODU4XHViODU5XHViODVhXHViODViXHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1XHViODY2XHViODY3XHViODY4XHViODY5XHViODZhXHViODZiXHViODZl'@;
put 'XHViODcwXHViODcyXHViODczXHViODc0XHViODc1XHViODc2XHViODc3XHViODc5XHViODdhXHViODdiXHViODdkXHViODdlXHViODdmXHViODgwXHViODgxXHViODgyXHViODgzXHViODg0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDJd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0Ml1bbV1dPTM2MzUyK20sRlszNjM1MittXT14WzE0Ml1bbV0pO2Zvcih4WzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjg4NVx1Yjg4Nlx1Yjg4N1x1Yjg4OFx1Yjg4'@;
put 'OVx1Yjg4YVx1Yjg4Ylx1Yjg4Y1x1Yjg4ZVx1Yjg4Zlx1Yjg5MFx1Yjg5MVx1Yjg5Mlx1Yjg5M1x1Yjg5NFx1Yjg5NVx1Yjg5Nlx1Yjg5N1x1Yjg5OFx1Yjg5OVx1Yjg5YVx1Yjg5Ylx1Yjg5Y1x1Yjg5ZFx1Yjg5ZVx1Yjg5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'YjhhMFx1YjhhMVx1YjhhMlx1YjhhM1x1YjhhNFx1YjhhNVx1YjhhNlx1YjhhN1x1YjhhOVx1YjhhYVx1YjhhYlx1YjhhY1x1YjhhZFx1YjhhZVx1YjhhZlx1YjhiMVx1YjhiMlx1YjhiM1x1YjhiNVx1YjhiNlx1YjhiN1x1YjhiOVx1YjhiYVx1YjhiYlx1YjhiY1x1YjhiZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNlx1YjhjN1x1YjhjOFx1YjhjOVx1YjhjYVx1YjhjYlx1YjhjZFx1YjhjZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNVx1YjhkNlx1YjhkN1x1YjhkOFx1YjhkOVx1YjhkYVx1YjhkYlx1'@;
put 'YjhkY1x1YjhkZVx1YjhlMFx1YjhlMlx1YjhlM1x1YjhlNFx1YjhlNVx1YjhlNlx1YjhlN1x1YjhlYVx1YjhlYlx1YjhlZFx1YjhlZVx1YjhlZlx1YjhmMVx1YjhmMlx1YjhmM1x1YjhmNFx1YjhmNVx1YjhmNlx1YjhmN1x1YjhmYVx1YjhmY1x1YjhmZVx1YjhmZlx1YjkwMFx1YjkwMVx1Yjkw'@;
put 'Mlx1YjkwM1x1YjkwNVx1YjkwNlx1YjkwN1x1YjkwOFx1YjkwOVx1YjkwYVx1YjkwYlx1YjkwY1x1YjkwZFx1YjkwZVx1YjkwZlx1YjkxMFx1YjkxMVx1YjkxMlx1YjkxM1x1YjkxNFx1YjkxNVx1YjkxNlx1YjkxN1x1YjkxOVx1YjkxYVx1YjkxYlx1YjkxY1x1YjkxZFx1YjkxZVx1YjkxZlx1'@;
put 'YjkyMVx1YjkyMlx1YjkyM1x1YjkyNFx1YjkyNVx1YjkyNlx1YjkyN1x1YjkyOFx1YjkyOVx1YjkyYVx1YjkyYlx1YjkyY1x1YjkyZFx1YjkyZVx1YjkyZlx1YjkzMFx1YjkzMVx1YjkzMlx1YjkzM1x1YjkzNFx1YjkzNVx1YjkzNlx1YjkzN1x1YjkzOFx1YjkzOVx1YjkzYVx1YjkzYlx1Yjkz'@;
put 'ZVx1YjkzZlx1Yjk0MVx1Yjk0Mlx1Yjk0M1x1Yjk0NVx1Yjk0Nlx1Yjk0N1x1Yjk0OFx1Yjk0OVx1Yjk0YVx1Yjk0Ylx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1Mlx1Yjk1M1x1Yjk1NFx1Yjk1NVx1Yjk1Nlx1Yjk1N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0M10ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDNdW21dXT0zNjYwOCttLEZbMzY2MDgrbV09eFsxNDNdW21dKTtmb3IoeFsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5'@;
put 'NWRcdWI5NWVcdWI5NWZcdWI5NjFcdWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWI5N2VcdWI5N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5'@;
put 'OWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5Yjdc'@;
put 'dWI5YjhcdWI5YjlcdWI5YmFcdWI5YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5'@;
put 'ZTlcdWI5ZWFcdWI5ZWJcdWI5ZWRcdWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVc'@;
put 'dWJhMGZcdWJhMTBcdWJhMTFcdWJhMTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJh'@;
put 'MmJcdWJhMmNcdWJhMmRcdWJhMmVcdWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDRd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ0XVttXV09MzY4NjQrbSxGWzM2ODY0K21dPXhbMTQ0XVttXSk7Zm9yKHhbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi'@;
put 'YTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkXHViYTVlXHViYTVmXHViYTYwXHViYTYxXHViYTYyXHViYTYzXHViYTY2XHViYTZhXHViYTZiXHViYTZjXHViYTZkXHViYTZlXHViYTZmXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5XHViYTdhXHViYTdiXHViYTdjXHViYTdkXHViYTdlXHViYTdmXHViYTgwXHViYTgxXHViYTgyXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkXHViYThlXHViYThmXHVi'@;
put 'YTkwXHViYTkxXHViYTkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTkzXHViYTk0XHViYTk1XHViYTk2XHViYTk3XHViYTk4XHViYTk5XHViYTlhXHViYTliXHViYTljXHViYTlkXHViYTllXHViYTlmXHViYWEwXHViYWExXHViYWEyXHViYWEzXHViYWE0XHViYWE1'@;
put 'XHViYWE2XHViYWE3XHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzXHViYWI0XHViYWI1XHViYWI2XHViYWI3XHViYWJhXHViYWJjXHViYWJlXHViYWJmXHViYWMwXHViYWMxXHViYWMyXHViYWMzXHViYWM1XHViYWM2XHViYWM3XHViYWM5XHViYWNhXHViYWNiXHViYWNjXHVi'@;
put 'YWNkXHViYWNlXHViYWNmXHViYWQwXHViYWQxXHViYWQyXHViYWQzXHViYWQ0XHViYWQ1XHViYWQ2XHViYWQ3XHViYWRhXHViYWRiXHViYWRjXHViYWRkXHViYWRlXHViYWRmXHViYWUwXHViYWUxXHViYWUyXHViYWUzXHViYWU0XHViYWU1XHViYWU2XHViYWU3XHViYWU4XHViYWU5XHViYWVh'@;
put 'XHViYWViXHViYWVjXHViYWVkXHViYWVlXHViYWVmXHViYWYwXHViYWYxXHViYWYyXHViYWYzXHViYWY0XHViYWY1XHViYWY2XHViYWY3XHViYWY4XHViYWY5XHViYWZhXHViYWZiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1XHViYjA2XHViYjA3XHViYjA4XHVi'@;
put 'YjA5XHViYjBhXHViYjBiXHViYjBjXHViYjBlXHViYjEwXHViYjEyXHViYjEzXHViYjE0XHViYjE1XHViYjE2XHViYjE3XHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxXHViYjIyXHViYjIzXHViYjI0XHViYjI1XHViYjI2XHViYjI3XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NV1bbV1dPTM3MTIwK20sRlszNzEyMCttXT14WzE0NV1bbV0pO2Zvcih4WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1YmIyOFx1YmIyYVx1YmIyY1x1YmIyZFx1YmIyZVx1YmIyZlx1YmIzMFx1YmIzMVx1YmIzMlx1YmIzM1x1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZlx1YmI0MFx1YmI0MVx1YmI0Mlx1YmI0M1x1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1YmI1'@;
put 'Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1N1x1YmI1OVx1YmI1YVx1YmI1Ylx1YmI1Y1x1YmI1ZFx1YmI1ZVx1YmI1Zlx1YmI2MFx1YmI2Mlx1YmI2NFx1YmI2NVx1YmI2Nlx1YmI2N1x1YmI2OFx1YmI2OVx1YmI2YVx1YmI2Ylx1'@;
put 'YmI2ZFx1YmI2ZVx1YmI2Zlx1YmI3MFx1YmI3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmI3Mlx1YmI3M1x1YmI3NFx1YmI3NVx1YmI3Nlx1YmI3N1x1YmI3OFx1YmI3OVx1YmI3YVx1YmI3Ylx1YmI3Y1x1YmI3ZFx1YmI3ZVx1YmI3Zlx1YmI4MFx1YmI4MVx1YmI4'@;
put 'Mlx1YmI4M1x1YmI4NFx1YmI4NVx1YmI4Nlx1YmI4N1x1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MVx1YmI5Mlx1YmI5M1x1YmI5NFx1YmI5NVx1YmI5Nlx1YmI5N1x1YmI5OFx1YmI5OVx1YmI5YVx1YmI5Ylx1YmI5Y1x1YmI5ZFx1YmI5ZVx1YmI5Zlx1YmJhMFx1'@;
put 'YmJhMVx1YmJhMlx1YmJhM1x1YmJhNVx1YmJhNlx1YmJhN1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZFx1YmJhZVx1YmJhZlx1YmJiMFx1YmJiMVx1YmJiMlx1YmJiM1x1YmJiNVx1YmJiNlx1YmJiOFx1YmJiOVx1YmJiYVx1YmJiYlx1YmJiY1x1YmJiZFx1YmJiZVx1YmJiZlx1YmJjMVx1YmJj'@;
put 'Mlx1YmJjM1x1YmJjNVx1YmJjNlx1YmJjN1x1YmJjOVx1YmJjYVx1YmJjYlx1YmJjY1x1YmJjZFx1YmJjZVx1YmJjZlx1YmJkMVx1YmJkMlx1YmJkNFx1YmJkNVx1YmJkNlx1YmJkN1x1YmJkOFx1YmJkOVx1YmJkYVx1YmJkYlx1YmJkY1x1YmJkZFx1YmJkZVx1YmJkZlx1YmJlMFx1YmJlMVx1'@;
put 'YmJlMlx1YmJlM1x1YmJlNFx1YmJlNVx1YmJlNlx1YmJlN1x1YmJlOFx1YmJlOVx1YmJlYVx1YmJlYlx1YmJlY1x1YmJlZFx1YmJlZVx1YmJlZlx1YmJmMFx1YmJmMVx1YmJmMlx1YmJmM1x1YmJmNFx1YmJmNVx1YmJmNlx1YmJmN1x1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDZdW21dXT0zNzM3NittLEZbMzczNzYrbV09eFsxNDZdW21dKTtmb3IoeFsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJj'@;
put 'MzJcdWJjMzNcdWJjMzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJc'@;
put 'dWJjNTNcdWJjNTRcdWJjNTVcdWJjNTZcdWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJj'@;
put 'NjlcdWJjNmFcdWJjNmJcdWJjNmNcdWJjNmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZc'@;
put 'dWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJj'@;
put 'YjJcdWJjYjZcdWJjYjdcdWJjYjhcdWJjYjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFc'@;
put 'dWJjZGJcdWJjZGRcdWJjZGVcdWJjZGZcdWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJj'@;
put 'ZmJcdWJjZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ3XVttXV09Mzc2MzIrbSxGWzM3NjMyK21dPXhbMTQ3XVttXSk7Zm9yKHhbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViY2ZlXHViY2ZmXHViZDAwXHViZDAxXHViZDAyXHViZDAzXHViZDA2XHViZDA4XHViZDBhXHViZDBiXHViZDBjXHViZDBkXHViZDBlXHViZDBmXHViZDExXHViZDEyXHViZDEzXHViZDE1XHViZDE2XHViZDE3XHViZDE4XHVi'@;
put 'ZDE5XHViZDFhXHViZDFiXHViZDFjXHViZDFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDFlXHViZDFmXHViZDIwXHViZDIxXHViZDIyXHViZDIzXHViZDI1XHViZDI2XHViZDI3XHViZDI4XHViZDI5XHViZDJhXHViZDJiXHViZDJkXHViZDJlXHViZDJmXHViZDMw'@;
put 'XHViZDMxXHViZDMyXHViZDMzXHViZDM0XHViZDM1XHViZDM2XHViZDM3XHViZDM4XHViZDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDNhXHViZDNiXHViZDNjXHViZDNkXHViZDNlXHViZDNmXHViZDQxXHViZDQyXHViZDQzXHViZDQ0XHViZDQ1XHViZDQ2XHVi'@;
put 'ZDQ3XHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxXHViZDUyXHViZDUzXHViZDU0XHViZDU1XHViZDU2XHViZDU3XHViZDVhXHViZDViXHViZDVjXHViZDVkXHViZDVlXHViZDVmXHViZDYwXHViZDYxXHViZDYyXHViZDYzXHViZDY1XHViZDY2XHViZDY3XHViZDY5XHViZDZh'@;
put 'XHViZDZiXHViZDZjXHViZDZkXHViZDZlXHViZDZmXHViZDcwXHViZDcxXHViZDcyXHViZDczXHViZDc0XHViZDc1XHViZDc2XHViZDc3XHViZDc4XHViZDc5XHViZDdhXHViZDdiXHViZDdjXHViZDdkXHViZDdlXHViZDdmXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiXHViZDhjXHVi'@;
put 'ZDhkXHViZDhlXHViZDhmXHViZDkyXHViZDk0XHViZDk2XHViZDk3XHViZDk4XHViZDliXHViZDlkXHViZDllXHViZDlmXHViZGEwXHViZGExXHViZGEyXHViZGEzXHViZGE1XHViZGE2XHViZGE3XHViZGE4XHViZGE5XHViZGFhXHViZGFiXHViZGFjXHViZGFkXHViZGFlXHViZGFmXHViZGIx'@;
put 'XHViZGIyXHViZGIzXHViZGI0XHViZGI1XHViZGI2XHViZGI3XHViZGI5XHViZGJhXHViZGJiXHViZGJjXHViZGJkXHViZGJlXHViZGJmXHViZGMwXHViZGMxXHViZGMyXHViZGMzXHViZGM0XHViZGM1XHViZGM2XHViZGM3XHViZGM4XHViZGM5XHViZGNhXHViZGNiXHViZGNjXHViZGNkXHVi'@;
put 'ZGNlXHViZGNmXHViZGQwXHViZGQxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OF1bbV1dPTM3ODg4K20sRlszNzg4OCttXT14WzE0OF1bbV0pO2Zvcih4WzE0OV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZFx1YmRkZVx1YmRkZlx1YmRlMFx1YmRlMVx1YmRlMlx1YmRlM1x1YmRlNFx1YmRlNVx1YmRlNlx1YmRlN1x1YmRlOFx1'@;
put 'YmRlYVx1YmRlYlx1YmRlY1x1YmRlZFx1YmRlZVx1YmRlZlx1YmRmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmRmMlx1YmRmM1x1YmRmNVx1YmRmNlx1YmRmN1x1YmRmOVx1YmRmYVx1YmRmYlx1YmRmY1x1YmRmZFx1YmRmZVx1YmRmZlx1YmUwMVx1YmUwMlx1YmUw'@;
put 'NFx1YmUwNlx1YmUwN1x1YmUwOFx1YmUwOVx1YmUwYVx1YmUwYlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmUxNVx1YmUxNlx1YmUxN1x1YmUxOFx1YmUxOVx1YmUxYVx1YmUxYlx1YmUxZVx1YmUyMFx1YmUyMVx1'@;
put 'YmUyMlx1YmUyM1x1YmUyNFx1YmUyNVx1YmUyNlx1YmUyN1x1YmUyOFx1YmUyOVx1YmUyYVx1YmUyYlx1YmUyY1x1YmUyZFx1YmUyZVx1YmUyZlx1YmUzMFx1YmUzMVx1YmUzMlx1YmUzM1x1YmUzNFx1YmUzNVx1YmUzNlx1YmUzN1x1YmUzOFx1YmUzOVx1YmUzYVx1YmUzYlx1YmUzY1x1YmUz'@;
put 'ZFx1YmUzZVx1YmUzZlx1YmU0MFx1YmU0MVx1YmU0Mlx1YmU0M1x1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0Zlx1YmU1MFx1YmU1MVx1YmU1Mlx1YmU1M1x1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1YmU2NVx1YmU2Nlx1'@;
put 'YmU2N1x1YmU2OVx1YmU2Ylx1YmU2Y1x1YmU2ZFx1YmU2ZVx1YmU2Zlx1YmU3Mlx1YmU3Nlx1YmU3N1x1YmU3OFx1YmU3OVx1YmU3YVx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4Mlx1YmU4M1x1YmU4NVx1YmU4Nlx1YmU4N1x1YmU4OFx1YmU4OVx1YmU4YVx1YmU4Ylx1YmU4ZVx1YmU5Mlx1YmU5'@;
put 'M1x1YmU5NFx1YmU5NVx1YmU5Nlx1YmU5N1x1YmU5YVx1YmU5Ylx1YmU5Y1x1YmU5ZFx1YmU5ZVx1YmU5Zlx1YmVhMFx1YmVhMVx1YmVhMlx1YmVhM1x1YmVhNFx1YmVhNVx1YmVhNlx1YmVhN1x1YmVhOVx1YmVhYVx1YmVhYlx1YmVhY1x1YmVhZFx1YmVhZVx1YmVhZlx1YmViMFx1YmViMVx1'@;
put 'YmViMlx1YmViM1x1YmViNFx1YmViNVx1YmViNlx1YmViN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDldW21dXT0zODE0NCttLEZbMzgxNDQrbV09eFsxNDldW21dKTtmb3IoeFsxNTBd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhc'@;
put 'dWJlYzlcdWJlY2FcdWJlY2JcdWJlY2NcdWJlY2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJl'@;
put 'ZTdcdWJlZThcdWJlZTlcdWJlZWFcdWJlZWJcdWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRc'@;
put 'dWJlZmVcdWJlZmZcdWJmMDBcdWJmMDJcdWJmMDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJm'@;
put 'MjFcdWJmMjJcdWJmMjNcdWJmMjRcdWJmMjVcdWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2Nc'@;
put 'dWJmM2RcdWJmM2VcdWJmM2ZcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJm'@;
put 'NWZcdWJmNjBcdWJmNjFcdWJmNjJcdWJmNjNcdWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2Fc'@;
put 'dWJmN2JcdWJmN2NcdWJmN2RcdWJmN2VcdWJmN2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUwXVttXV09Mzg0MDArbSxGWzM4NDAwK21dPXhbMTUwXVtt'@;
put 'XSk7Zm9yKHhbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjgzXHViZjg0XHViZjg1XHViZjg2XHViZjg3XHViZjg4XHViZjg5XHViZjhhXHViZjhiXHViZjhjXHViZjhkXHViZjhlXHViZjhmXHViZjkwXHViZjkx'@;
put 'XHViZjkyXHViZjkzXHViZjk1XHViZjk2XHViZjk3XHViZjk4XHViZjk5XHViZjlhXHViZjliXHViZjljXHViZjlkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjllXHViZjlmXHViZmEwXHViZmExXHViZmEyXHViZmEzXHViZmE0XHViZmE1XHViZmE2XHViZmE3XHVi'@;
put 'ZmE4XHViZmE5XHViZmFhXHViZmFiXHViZmFjXHViZmFkXHViZmFlXHViZmFmXHViZmIxXHViZmIyXHViZmIzXHViZmI0XHViZmI1XHViZmI2XHViZmI3XHViZmI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZmI5XHViZmJhXHViZmJiXHViZmJjXHViZmJkXHViZmJl'@;
put 'XHViZmJmXHViZmMwXHViZmMxXHViZmMyXHViZmMzXHViZmM0XHViZmM2XHViZmM3XHViZmM4XHViZmM5XHViZmNhXHViZmNiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHViZmQ1XHViZmQ2XHViZmQ3XHViZmQ4XHViZmQ5XHViZmRhXHViZmRiXHViZmRkXHViZmRlXHViZmUwXHVi'@;
put 'ZmUyXHViZmUzXHViZmU0XHViZmU1XHViZmU2XHViZmU3XHViZmU4XHViZmU5XHViZmVhXHViZmViXHViZmVjXHViZmVkXHViZmVlXHViZmVmXHViZmYwXHViZmYxXHViZmYyXHViZmYzXHViZmY0XHViZmY1XHViZmY2XHViZmY3XHViZmY4XHViZmY5XHViZmZhXHViZmZiXHViZmZjXHViZmZk'@;
put 'XHViZmZlXHViZmZmXHVjMDAwXHVjMDAxXHVjMDAyXHVjMDAzXHVjMDA0XHVjMDA1XHVjMDA2XHVjMDA3XHVjMDA4XHVjMDA5XHVjMDBhXHVjMDBiXHVjMDBjXHVjMDBkXHVjMDBlXHVjMDBmXHVjMDEwXHVjMDExXHVjMDEyXHVjMDEzXHVjMDE0XHVjMDE1XHVjMDE2XHVjMDE3XHVjMDE4XHVj'@;
put 'MDE5XHVjMDFhXHVjMDFiXHVjMDFjXHVjMDFkXHVjMDFlXHVjMDFmXHVjMDIwXHVjMDIxXHVjMDIyXHVjMDIzXHVjMDI0XHVjMDI1XHVjMDI2XHVjMDI3XHVjMDI4XHVjMDI5XHVjMDJhXHVjMDJiXHVjMDJjXHVjMDJkXHVjMDJlXHVjMDJmXHVjMDMwXHVjMDMxXHVjMDMyXHVjMDMzXHVjMDM0'@;
put 'XHVjMDM1XHVjMDM2XHVjMDM3XHVjMDM4XHVjMDM5XHVjMDNhXHVjMDNiXHVjMDNkXHVjMDNlXHVjMDNmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MV1bbV1dPTM4NjU2K20sRlszODY1'@;
put 'NittXT14WzE1MV1bbV0pO2Zvcih4WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA0MFx1YzA0MVx1YzA0Mlx1YzA0M1x1YzA0NFx1YzA0NVx1YzA0Nlx1YzA0N1x1YzA0OFx1YzA0OVx1YzA0YVx1YzA0Ylx1YzA0'@;
put 'Y1x1YzA0ZFx1YzA0ZVx1YzA0Zlx1YzA1MFx1YzA1Mlx1YzA1M1x1YzA1NFx1YzA1NVx1YzA1Nlx1YzA1N1x1YzA1OVx1YzA1YVx1YzA1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MVx1YzA2Mlx1YzA2M1x1YzA2NFx1YzA2NVx1'@;
put 'YzA2Nlx1YzA2N1x1YzA2YVx1YzA2Ylx1YzA2Y1x1YzA2ZFx1YzA2ZVx1YzA2Zlx1YzA3MFx1YzA3MVx1YzA3Mlx1YzA3M1x1YzA3NFx1YzA3NVx1YzA3Nlx1YzA3N1x1YzA3OFx1YzA3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzA3YVx1YzA3Ylx1YzA3Y1x1YzA3'@;
put 'ZFx1YzA3ZVx1YzA3Zlx1YzA4MFx1YzA4MVx1YzA4Mlx1YzA4M1x1YzA4NFx1YzA4NVx1YzA4Nlx1YzA4N1x1YzA4OFx1YzA4OVx1YzA4YVx1YzA4Ylx1YzA4Y1x1YzA4ZFx1YzA4ZVx1YzA4Zlx1YzA5Mlx1YzA5M1x1YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OVx1YzA5YVx1YzA5Ylx1YzA5Y1x1'@;
put 'YzA5ZFx1YzA5ZVx1YzA5Zlx1YzBhMlx1YzBhNFx1YzBhNlx1YzBhN1x1YzBhOFx1YzBhOVx1YzBhYVx1YzBhYlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiN1x1YzBiOFx1YzBiOVx1YzBiYVx1YzBiYlx1YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBj'@;
put 'ZFx1YzBjZVx1YzBjZlx1YzBkMVx1YzBkMlx1YzBkM1x1YzBkNFx1YzBkNVx1YzBkNlx1YzBkN1x1YzBkYVx1YzBkZVx1YzBkZlx1YzBlMFx1YzBlMVx1YzBlMlx1YzBlM1x1YzBlNlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZFx1YzBlZVx1YzBlZlx1YzBmMFx1YzBmMVx1YzBmMlx1'@;
put 'YzBmM1x1YzBmNlx1YzBmOFx1YzBmYVx1YzBmYlx1YzBmY1x1YzBmZFx1YzBmZVx1YzBmZlx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOVx1YzEwYVx1YzEwYlx1YzEwY1x1YzEwZFx1YzEwZVx1YzEwZlx1YzExMVx1YzExMlx1YzExM1x1YzExNFx1YzExNlx1YzEx'@;
put 'N1x1YzExOFx1YzExOVx1YzExYVx1YzExYlx1YzEyMVx1YzEyMlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTJdW21dXT0z'@;
put 'ODkxMittLEZbMzg5MTIrbV09eFsxNTJdW21dKTtmb3IoeFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMx'@;
put 'NDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMxNDVcdWMxNDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZc'@;
put 'dWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNcdWMxNjZcdWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMx'@;
put 'N2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMxODFcdWMxODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNc'@;
put 'dWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMx'@;
put 'YzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMxY2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlc'@;
put 'dWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRcdWMxZWVcdWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMy'@;
put 'MGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMyMTRcdWMyMTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTUzXVttXV09MzkxNjgrbSxGWzM5MTY4K21dPXhbMTUzXVttXSk7Zm9yKHhbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMwXHVj'@;
put 'MjMzXHVjMjM1XHVjMjM2XHVjMjM3XHVjMjM4XHVjMjM5XHVjMjNhXHVjMjNiXHVjMjNjXHVjMjNkXHVjMjNlXHVjMjNmXHVjMjQwXHVjMjQxXHVjMjQyXHVjMjQzXHVjMjQ0XHVjMjQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjQ2XHVjMjQ3XHVjMjQ5XHVjMjRh'@;
put 'XHVjMjRiXHVjMjRjXHVjMjRkXHVjMjRlXHVjMjRmXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5XHVjMjVhXHVjMjViXHVjMjVjXHVjMjVkXHVjMjVlXHVjMjVmXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVjMjY3XHVjMjY4XHVjMjY5XHVjMjZhXHVjMjZiXHVjMjZlXHVjMjZmXHVjMjcxXHVjMjcyXHVjMjczXHVjMjc1XHVjMjc2XHVjMjc3XHVjMjc4XHVjMjc5XHVjMjdhXHVjMjdiXHVjMjdlXHVjMjgwXHVjMjgyXHVjMjgzXHVjMjg0XHVjMjg1XHVjMjg2XHVjMjg3XHVjMjhhXHVjMjhi'@;
put 'XHVjMjhjXHVjMjhkXHVjMjhlXHVjMjhmXHVjMjkxXHVjMjkyXHVjMjkzXHVjMjk0XHVjMjk1XHVjMjk2XHVjMjk3XHVjMjk5XHVjMjlhXHVjMjljXHVjMjllXHVjMjlmXHVjMmEwXHVjMmExXHVjMmEyXHVjMmEzXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlXHVjMmFmXHVj'@;
put 'MmIwXHVjMmIxXHVjMmIyXHVjMmIzXHVjMmI2XHVjMmI4XHVjMmJhXHVjMmJiXHVjMmJjXHVjMmJkXHVjMmJlXHVjMmJmXHVjMmMwXHVjMmMxXHVjMmMyXHVjMmMzXHVjMmM0XHVjMmM1XHVjMmM2XHVjMmM3XHVjMmM4XHVjMmM5XHVjMmNhXHVjMmNiXHVjMmNjXHVjMmNkXHVjMmNlXHVjMmNm'@;
put 'XHVjMmQwXHVjMmQxXHVjMmQyXHVjMmQzXHVjMmQ0XHVjMmQ1XHVjMmQ2XHVjMmQ3XHVjMmQ4XHVjMmQ5XHVjMmRhXHVjMmRiXHVjMmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1XHVjMmU2XHVjMmU3XHVjMmU4XHVjMmU5XHVjMmVhXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVj'@;
put 'MmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxXHVjMzAyXHVjMzAzXHVjMzA0XHVjMzA1XHVjMzA2XHVjMzA3XHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTRdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE1NF1bbV1dPTM5NDI0K20sRlszOTQyNCttXT14WzE1NF1bbV0pO2Zvcih4WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzMxMFx1YzMxMVx1YzMxMlx1YzMxNlx1YzMxN1x1YzMxOVx1'@;
put 'YzMxYVx1YzMxYlx1YzMxZFx1YzMxZVx1YzMxZlx1YzMyMFx1YzMyMVx1YzMyMlx1YzMyM1x1YzMyNlx1YzMyN1x1YzMyYVx1YzMyYlx1YzMyY1x1YzMyZFx1YzMyZVx1YzMyZlx1YzMzMFx1YzMzMVx1YzMzMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzMzM1x1YzMz'@;
put 'NFx1YzMzNVx1YzMzNlx1YzMzN1x1YzMzOFx1YzMzOVx1YzMzYVx1YzMzYlx1YzMzY1x1YzMzZFx1YzMzZVx1YzMzZlx1YzM0MFx1YzM0MVx1YzM0Mlx1YzM0M1x1YzM0NFx1YzM0Nlx1YzM0N1x1YzM0OFx1YzM0OVx1YzM0YVx1YzM0Ylx1YzM0Y1x1YzM0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1YzM0ZVx1YzM0Zlx1YzM1MFx1YzM1MVx1YzM1Mlx1YzM1M1x1YzM1NFx1YzM1NVx1YzM1Nlx1YzM1N1x1YzM1OFx1YzM1OVx1YzM1YVx1YzM1Ylx1YzM1Y1x1YzM1ZFx1YzM1ZVx1YzM1Zlx1YzM2MFx1YzM2MVx1YzM2Mlx1YzM2M1x1YzM2NFx1YzM2NVx1YzM2'@;
put 'Nlx1YzM2N1x1YzM2YVx1YzM2Ylx1YzM2ZFx1YzM2ZVx1YzM2Zlx1YzM3MVx1YzM3M1x1YzM3NFx1YzM3NVx1YzM3Nlx1YzM3N1x1YzM3YVx1YzM3Ylx1YzM3ZVx1YzM3Zlx1YzM4MFx1YzM4MVx1YzM4Mlx1YzM4M1x1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZFx1'@;
put 'YzM4ZVx1YzM4Zlx1YzM5MFx1YzM5MVx1YzM5Mlx1YzM5M1x1YzM5NFx1YzM5NVx1YzM5Nlx1YzM5N1x1YzM5OFx1YzM5OVx1YzM5YVx1YzM5Ylx1YzM5Y1x1YzM5ZFx1YzM5ZVx1YzM5Zlx1YzNhMFx1YzNhMVx1YzNhMlx1YzNhM1x1YzNhNFx1YzNhNVx1YzNhNlx1YzNhN1x1YzNhOFx1YzNh'@;
put 'OVx1YzNhYVx1YzNhYlx1YzNhY1x1YzNhZFx1YzNhZVx1YzNhZlx1YzNiMFx1YzNiMVx1YzNiMlx1YzNiM1x1YzNiNFx1YzNiNVx1YzNiNlx1YzNiN1x1YzNiOFx1YzNiOVx1YzNiYVx1YzNiYlx1YzNiY1x1YzNiZFx1YzNiZVx1YzNiZlx1YzNjMVx1YzNjMlx1YzNjM1x1YzNjNFx1YzNjNVx1'@;
put 'YzNjNlx1YzNjN1x1YzNjOFx1YzNjOVx1YzNjYVx1YzNjYlx1YzNjY1x1YzNjZFx1YzNjZVx1YzNjZlx1YzNkMFx1YzNkMVx1YzNkMlx1YzNkM1x1YzNkNFx1YzNkNVx1YzNkNlx1YzNkN1x1YzNkYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MTU1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTVdW21dXT0zOTY4MCttLEZbMzk2ODArbV09eFsxNTVdW21dKTtmb3IoeFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFc'@;
put 'dWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMzZTdcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJcdWM0MDNcdWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0'@;
put 'MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0MzlcdWM0M2FcdWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNc'@;
put 'dWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0NThcdWM0NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0'@;
put 'NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2FcdWM0N2JcdWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJc'@;
put 'dWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0OThcdWM0OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTZdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzE1Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU2XVttXV09Mzk5MzYrbSxGWzM5OTM2K21dPXhbMTU2XVttXSk7Zm9yKHhbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGFhXHVjNGFi'@;
put 'XHVjNGFjXHVjNGFkXHVjNGFlXHVjNGFmXHVjNGIwXHVjNGIxXHVjNGIyXHVjNGIzXHVjNGI0XHVjNGI1XHVjNGI2XHVjNGI3XHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkXHVjNGJlXHVjNGJmXHVjNGMwXHVjNGMxXHVjNGMyXHVjNGMzXHVjNGM0XHVjNGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVjNGM2XHVjNGM3XHVjNGM4XHVjNGM5XHVjNGNhXHVjNGNiXHVjNGNjXHVjNGNkXHVjNGNlXHVjNGNmXHVjNGQwXHVjNGQxXHVjNGQyXHVjNGQzXHVjNGQ0XHVjNGQ1XHVjNGQ2XHVjNGQ3XHVjNGQ4XHVjNGQ5XHVjNGRhXHVjNGRiXHVjNGRjXHVjNGRkXHVjNGRl'@;
put 'XHVjNGRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGUwXHVjNGUxXHVjNGUyXHVjNGUzXHVjNGU0XHVjNGU1XHVjNGU2XHVjNGU3XHVjNGU4XHVjNGVhXHVjNGViXHVjNGVjXHVjNGVkXHVjNGVlXHVjNGVmXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVjNGY3XHVj'@;
put 'NGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyXHVjNTAzXHVjNTA0XHVjNTA1XHVjNTA2XHVjNTA3XHVjNTA4XHVjNTA5XHVjNTBhXHVjNTBiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1XHVjNTE2XHVjNTE3XHVjNTE4XHVjNTE5XHVjNTFhXHVjNTFi'@;
put 'XHVjNTFkXHVjNTFlXHVjNTFmXHVjNTIwXHVjNTIxXHVjNTIyXHVjNTIzXHVjNTI0XHVjNTI1XHVjNTI2XHVjNTI3XHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxXHVjNTMyXHVjNTMzXHVjNTM0XHVjNTM1XHVjNTM2XHVjNTM3XHVjNTNhXHVjNTNjXHVjNTNlXHVjNTNmXHVj'@;
put 'NTQwXHVjNTQxXHVjNTQyXHVjNTQzXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVjNTY3XHVjNTY5XHVjNTZhXHVjNTZiXHVjNTZjXHVjNTZkXHVjNTZlXHVjNTZm'@;
put 'XHVjNTcyXHVjNTc2XHVjNTc3XHVjNTc4XHVjNTc5XHVjNTdhXHVjNTdiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MTU3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1N11bbV1dPTQwMTkyK20sRls0MDE5MittXT14WzE1N11bbV0pO2Zvcih4WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5Ylx1YzU5ZFx1YzU5ZVx1YzU5Zlx1YzVhMVx1YzVhMlx1YzVhM1x1YzVhNFx1YzVhNVx1YzVhNlx1YzVhN1x1YzVhOFx1YzVhYVx1YzVhYlx1YzVhY1x1YzVhZFx1YzVhZVx1YzVhZlx1YzViMFx1YzViMVx1YzViMlx1YzViM1x1YzViNlx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzViN1x1YzViYVx1YzViZlx1YzVjMFx1YzVjMVx1YzVjMlx1YzVjM1x1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1YzVkNlx1YzVkN1x1YzVkOVx1YzVkYVx1YzVkYlx1YzVkY1x1YzVkZFx1YzVkZVx1YzVkZlx1YzVl'@;
put 'Mlx1YzVlNFx1YzVlNlx1YzVlN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzVlOFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1YzVmM1x1YzVmNVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1'@;
put 'YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMVx1YzYxMlx1YzYxM1x1YzYxNFx1YzYxNVx1YzYxNlx1YzYxN1x1YzYxYVx1YzYxZFx1YzYxZVx1YzYxZlx1YzYyMFx1YzYyMVx1YzYyMlx1YzYyM1x1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYz'@;
put 'Nlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYzZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OVx1YzY0YVx1YzY0Ylx1YzY0Y1x1YzY0ZFx1YzY0ZVx1YzY0Zlx1YzY1Mlx1YzY1Nlx1YzY1N1x1YzY1OFx1YzY1OVx1YzY1YVx1YzY1Ylx1YzY1ZVx1YzY1Zlx1'@;
put 'YzY2MVx1YzY2Mlx1YzY2M1x1YzY2NFx1YzY2NVx1YzY2Nlx1YzY2N1x1YzY2OFx1YzY2OVx1YzY2YVx1YzY2Ylx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3Mlx1YzY3M1x1YzY3NFx1YzY3NVx1YzY3Nlx1YzY3N1x1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MVx1YzY4Mlx1YzY4'@;
put 'M1x1YzY4NFx1YzY4NVx1YzY4Nlx1YzY4N1x1YzY4YVx1YzY4Y1x1YzY4ZVx1YzY4Zlx1YzY5MFx1YzY5MVx1YzY5Mlx1YzY5M1x1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5ZFx1YzY5ZVx1YzY5Zlx1YzZhMFx1YzZhMVx1YzZhMlx1YzZhM1x1YzZhNlx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzE1OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNThdW21dXT00MDQ0OCttLEZbNDA0NDgrbV09eFsxNThdW21dKTtmb3IoeFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2YWJcdWM2YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2Jc'@;
put 'dWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2'@;
put 'ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdc'@;
put 'dWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVcdWM3MGZcdWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3'@;
put 'MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVc'@;
put 'dWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRcdWM3NjVcdWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3'@;
put 'ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3Yjdc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU5XVttXV09NDA3MDQrbSxGWzQwNzA0K21dPXhbMTU5XVttXSk7Zm9yKHhbMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyXHVjN2MzXHVjN2M0XHVjN2M1XHVjN2M2XHVjN2M3XHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxXHVjN2QyXHVjN2QzXHVjN2Q0XHVjN2Q1XHVjN2Q2XHVjN2Q3XHVjN2Q5'@;
put 'XHVjN2RhXHVjN2RiXHVjN2RjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2RlXHVjN2RmXHVjN2UwXHVjN2UxXHVjN2UyXHVjN2UzXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkXHVjN2VlXHVjN2VmXHVjN2YwXHVjN2YxXHVjN2YyXHVj'@;
put 'N2YzXHVjN2Y0XHVjN2Y1XHVjN2Y2XHVjN2Y3XHVjN2Y4XHVjN2Y5XHVjN2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2ZiXHVjN2ZjXHVjN2ZkXHVjN2ZlXHVjN2ZmXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiXHVjODBjXHVjODBk'@;
put 'XHVjODBlXHVjODBmXHVjODEyXHVjODE0XHVjODE3XHVjODE4XHVjODE5XHVjODFhXHVjODFiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1XHVjODI2XHVjODI3XHVjODI4XHVjODI5XHVjODJhXHVjODJiXHVjODJlXHVjODMwXHVjODMyXHVjODMzXHVjODM0XHVjODM1XHVj'@;
put 'ODM2XHVjODM3XHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxXHVjODQyXHVjODQzXHVjODQ0XHVjODQ1XHVjODQ2XHVjODQ3XHVjODRhXHVjODRiXHVjODRlXHVjODRmXHVjODUwXHVjODUxXHVjODUyXHVjODUzXHVjODU1XHVjODU2XHVjODU3XHVjODU4XHVjODU5'@;
put 'XHVjODVhXHVjODViXHVjODVjXHVjODVkXHVjODVlXHVjODVmXHVjODYwXHVjODYxXHVjODYyXHVjODYzXHVjODY0XHVjODY1XHVjODY2XHVjODY3XHVjODY4XHVjODY5XHVjODZhXHVjODZiXHVjODZjXHVjODZkXHVjODZlXHVjODZmXHVjODcyXHVjODczXHVjODc1XHVjODc2XHVjODc3XHVj'@;
put 'ODc5XHVjODdiXHVjODdjXHVjODdkXHVjODdlXHVjODdmXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlXHVjODhmXHVjODkwXHVjODkxXHVjODkyXHVjODkzXHVjODk1XHVjODk2XHVjODk3XHVjODk4XHVjODk5XHVjODlhXHVjODliXHVjODljXHVjODllXHVjOGEwXHVjOGEy'@;
put 'XHVjOGEzXHVjOGE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MF1bbV1dPTQwOTYwK20sRls0MDk2MCttXT14WzE2MF1bbV0pO2Zvcih4WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOVx1YzhhYVx1YzhhYlx1YzhhY1x1YzhhZFx1YzhhZVx1YzhhZlx1YzhiMFx1YzhiMVx1YzhiMlx1YzhiM1x1YzhiNFx1YzhiNVx1YzhiNlx1YzhiN1x1YzhiOFx1YzhiOVx1Yzhi'@;
put 'YVx1YzhiYlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1YzhjYVx1YzhjYlx1YzhjZFx1YzhjZVx1YzhjZlx1YzhkMFx1YzhkMVx1YzhkMlx1YzhkM1x1YzhkNlx1'@;
put 'YzhkOFx1YzhkYVx1YzhkYlx1YzhkY1x1YzhkZFx1YzhkZVx1YzhkZlx1YzhlMlx1YzhlM1x1YzhlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzhlNlx1YzhlN1x1YzhlOFx1YzhlOVx1YzhlYVx1YzhlYlx1YzhlY1x1YzhlZFx1YzhlZVx1YzhlZlx1YzhmMFx1Yzhm'@;
put 'MVx1YzhmMlx1YzhmM1x1YzhmNFx1YzhmNlx1YzhmN1x1YzhmOFx1YzhmOVx1YzhmYVx1YzhmYlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1YzkwM1x1YzkwN1x1YzkwOFx1YzkwOVx1YzkwYVx1YzkwYlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVcdTIwMjZceGE4XHUzMDAz'@;
put 'XHhhZFx1MjAxNVx1MjIyNVx1ZmYzY1x1MjIzY1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIz'@;
put 'NFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZmZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUyMDNiXHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEw'@;
put 'XHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUy'@;
put 'MjI4XHVmZmUyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1'@;
put 'YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1Yzkz'@;
put 'ZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1Yzk0NFx1Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1'@;
put 'Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1ZFx1Yzk1ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhc'@;
put 'dTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQx'@;
put 'XHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNj'@;
put 'N1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYyXVttXV09NDE0NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1XHVjOTc2XHVjOTc3XHVjOTc4XHVjOTc5XHVjOTdhXHVjOTdiXHVjOTdkXHVjOTdlXHVjOTdmXHVjOTgwXHVjOTgxXHVjOTgyXHVjOTgzXHVjOTg0XHVjOTg1XHVjOTg2XHVjOTg3XHVj'@;
put 'OThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTkxXHVjOTkyXHVjOTkzXHVjOTk0XHVjOTk1XHVjOTk2XHVjOTk3XHVjOTlhXHVjOTljXHVjOTllXHVjOTlmXHVjOWEwXHVjOWExXHVjOWEyXHVjOWEzXHVjOWE0XHVjOWE1'@;
put 'XHVjOWE2XHVjOWE3XHVjOWE4XHVjOWE5XHVjOWFhXHVjOWFiXHVjOWFjXHVjOWFkXHVjOWFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWFmXHVjOWIwXHVjOWIxXHVjOWIyXHVjOWIzXHVjOWI0XHVjOWI1XHVjOWI2XHVjOWI3XHVjOWI4XHVjOWI5XHVjOWJhXHVj'@;
put 'OWJiXHVjOWJjXHVjOWJkXHVjOWJlXHVjOWJmXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiXHVjOWNjXHVjOWNkXHVjOWNlXHVjOWNmXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZjA0XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4'@;
put 'XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVm'@;
put 'ZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZmU2XHVmZjNkXHVmZjNlXHVmZjNm'@;
put 'XHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVm'@;
put 'ZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2NF09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1YzllZVx1YzlmMlx1YzlmM1x1YzlmNFx1YzlmNVx1YzlmNlx1YzlmN1x1YzlmYVx1YzlmYlx1'@;
put 'YzlmZFx1YzlmZVx1YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1Y2EwNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZVx1Y2EwZlx1Y2ExMFx1Y2ExMVx1Y2ExMlx1Y2ExM1x1Y2ExNVx1Y2ExNlx1Y2ExN1x1Y2ExOVx1Y2Ex'@;
put 'YVx1Y2ExYlx1Y2ExY1x1Y2ExZFx1Y2ExZVx1Y2ExZlx1Y2EyMFx1Y2EyMVx1Y2EyMlx1Y2EyM1x1Y2EyNFx1Y2EyNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2EyNlx1Y2EyN1x1Y2EyOFx1Y2EyYVx1Y2EyYlx1Y2EyY1x1Y2EyZFx1Y2EyZVx1Y2EyZlx1Y2EzMFx1'@;
put 'Y2EzMVx1Y2EzMlx1Y2EzM1x1Y2EzNFx1Y2EzNVx1Y2EzNlx1Y2EzN1x1Y2EzOFx1Y2EzOVx1Y2EzYVx1Y2EzYlx1Y2EzY1x1Y2EzZFx1Y2EzZVx1Y2EzZlx1Y2E0MFx1Y2E0MVx1Y2E0Mlx1Y2E0M1x1Y2E0NFx1Y2E0NVx1Y2E0Nlx1MzEzMVx1MzEzMlx1MzEzM1x1MzEzNFx1MzEzNVx1MzEz'@;
put 'Nlx1MzEzN1x1MzEzOFx1MzEzOVx1MzEzYVx1MzEzYlx1MzEzY1x1MzEzZFx1MzEzZVx1MzEzZlx1MzE0MFx1MzE0MVx1MzE0Mlx1MzE0M1x1MzE0NFx1MzE0NVx1MzE0Nlx1MzE0N1x1MzE0OFx1MzE0OVx1MzE0YVx1MzE0Ylx1MzE0Y1x1MzE0ZFx1MzE0ZVx1MzE0Zlx1MzE1MFx1MzE1MVx1'@;
put 'MzE1Mlx1MzE1M1x1MzE1NFx1MzE1NVx1MzE1Nlx1MzE1N1x1MzE1OFx1MzE1OVx1MzE1YVx1MzE1Ylx1MzE1Y1x1MzE1ZFx1MzE1ZVx1MzE1Zlx1MzE2MFx1MzE2MVx1MzE2Mlx1MzE2M1x1MzE2NFx1MzE2NVx1MzE2Nlx1MzE2N1x1MzE2OFx1MzE2OVx1MzE2YVx1MzE2Ylx1MzE2Y1x1MzE2'@;
put 'ZFx1MzE2ZVx1MzE2Zlx1MzE3MFx1MzE3MVx1MzE3Mlx1MzE3M1x1MzE3NFx1MzE3NVx1MzE3Nlx1MzE3N1x1MzE3OFx1MzE3OVx1MzE3YVx1MzE3Ylx1MzE3Y1x1MzE3ZFx1MzE3ZVx1MzE3Zlx1MzE4MFx1MzE4MVx1MzE4Mlx1MzE4M1x1MzE4NFx1MzE4NVx1MzE4Nlx1MzE4N1x1MzE4OFx1'@;
put 'MzE4OVx1MzE4YVx1MzE4Ylx1MzE4Y1x1MzE4ZFx1MzE4ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRdW21dKTtmb3IoeFsxNjVd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJc'@;
put 'dWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZcdWNhNjdcdWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNh'@;
put 'NzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNhN2VcdWNhN2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVc'@;
put 'dWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRcdWNhOTVcdWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIx'@;
put 'NzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdc'@;
put 'dTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQyMjQwK21dPXhbMTY1XVtt'@;
put 'XSk7Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWE4XHVjYWE5XHVjYWFhXHVjYWFiXHVjYWFjXHVjYWFkXHVjYWFlXHVjYWFmXHVjYWIwXHVjYWIxXHVjYWIyXHVjYWIzXHVjYWI0XHVjYWI1XHVjYWI2'@;
put 'XHVjYWI3XHVjYWI4XHVjYWI5XHVjYWJhXHVjYWJiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWM2XHVjYWM3XHVjYWM4XHVjYWM5XHVjYWNhXHVjYWNiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVj'@;
put 'YWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhXHVjYWRiXHVjYWRjXHVjYWRkXHVjYWRlXHVjYWRmXHVjYWUxXHVjYWUyXHVjYWUzXHVjYWU0XHVjYWU1XHVjYWU2XHVjYWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVkXHVjYWVl'@;
put 'XHVjYWVmXHVjYWYwXHVjYWYxXHVjYWYyXHVjYWYzXHVjYWY1XHVjYWY2XHVjYWY3XHVjYWY4XHVjYWY5XHVjYWZhXHVjYWZiXHVjYWZjXHVjYWZkXHVjYWZlXHVjYWZmXHVjYjAwXHVjYjAxXHVjYjAyXHVjYjAzXHVjYjA0XHVjYjA1XHVjYjA2XHVjYjA3XHVjYjA5XHVjYjBhXHUyNTAwXHUy'@;
put 'NTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMw'@;
put 'XHUyNTI1XHUyNTM4XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUy'@;
put 'NTNkXHUyNTNlXHUyNTQwXHUyNTQxXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1dPTQyNDk2K20sRls0MjQ5'@;
put 'NittXT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2IwYlx1Y2IwY1x1Y2IwZFx1Y2IwZVx1Y2IwZlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOVx1Y2Ix'@;
put 'YVx1Y2IxYlx1Y2IxY1x1Y2IxZFx1Y2IxZVx1Y2IxZlx1Y2IyMlx1Y2IyM1x1Y2IyNFx1Y2IyNVx1Y2IyNlx1Y2IyN1x1Y2IyOFx1Y2IyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2IyYVx1Y2IyYlx1Y2IyY1x1Y2IyZFx1Y2IyZVx1Y2IyZlx1Y2IzMFx1Y2IzMVx1'@;
put 'Y2IzMlx1Y2IzM1x1Y2IzNFx1Y2IzNVx1Y2IzNlx1Y2IzN1x1Y2IzOFx1Y2IzOVx1Y2IzYVx1Y2IzYlx1Y2IzY1x1Y2IzZFx1Y2IzZVx1Y2IzZlx1Y2I0MFx1Y2I0Mlx1Y2I0M1x1Y2I0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0'@;
put 'YVx1Y2I0Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MVx1Y2I1Mlx1Y2I1M1x1Y2I1NFx1Y2I1NVx1Y2I1Nlx1Y2I1N1x1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZVx1Y2I1Zlx1Y2I2MFx1Y2I2MVx1Y2I2Mlx1Y2I2M1x1Y2I2NVx1Y2I2Nlx1Y2I2N1x1Y2I2OFx1Y2I2OVx1Y2I2YVx1Y2I2Ylx1'@;
put 'Y2I2Y1x1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNjNFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OVx1MzM5YVx1MzM5Ylx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM5Zlx1MzNhMFx1MzNhMVx1MzNhMlx1MzNjYVx1MzM4ZFx1MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4'@;
put 'OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMFx1MzNiMVx1MzNiMlx1MzNiM1x1MzNiNFx1MzNiNVx1MzNiNlx1MzNiN1x1MzNiOFx1MzNiOVx1MzM4MFx1MzM4MVx1MzM4Mlx1MzM4M1x1MzM4NFx1MzNiYVx1MzNiYlx1MzNiY1x1MzNiZFx1MzNiZVx1MzNiZlx1MzM5MFx1MzM5MVx1MzM5Mlx1'@;
put 'MzM5M1x1MzM5NFx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNhYlx1MzNhY1x1MzNkZFx1MzNkMFx1MzNkM1x1MzNjM1x1MzNjOVx1MzNkY1x1MzNjNlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjddW21dXT00'@;
put 'Mjc1MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNi'@;
put 'NzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2ZcdWNiODBcdWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVc'@;
put 'dWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNiOTVcdWNiOTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNi'@;
put 'YTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJcdWNiYWNcdWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFc'@;
put 'dWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZmZmRcdTAxMzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMy'@;
put 'NmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBcdTMyNzFcdTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlc'@;
put 'dTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0ZTBcdTI0ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0'@;
put 'NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgr'@;
put 'bSxGWzQzMDA4K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmM1XHVjYmM2XHVjYmM3XHVjYmM4XHVjYmM5XHVjYmNhXHVjYmNiXHVjYmNjXHVjYmNkXHVjYmNlXHVjYmNmXHVj'@;
put 'YmQwXHVjYmQxXHVjYmQyXHVjYmQzXHVjYmQ1XHVjYmQ2XHVjYmQ3XHVjYmQ4XHVjYmQ5XHVjYmRhXHVjYmRiXHVjYmRjXHVjYmRkXHVjYmRlXHVjYmRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVjYmU4'@;
put 'XHVjYmVhXHVjYmViXHVjYmVjXHVjYmVkXHVjYmVlXHVjYmVmXHVjYmYwXHVjYmYxXHVjYmYyXHVjYmYzXHVjYmY0XHVjYmY1XHVjYmY2XHVjYmY3XHVjYmY4XHVjYmY5XHVjYmZhXHVjYmZiXHVjYmZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmZkXHVjYmZlXHVj'@;
put 'YmZmXHVjYzAwXHVjYzAxXHVjYzAyXHVjYzAzXHVjYzA0XHVjYzA1XHVjYzA2XHVjYzA3XHVjYzA4XHVjYzA5XHVjYzBhXHVjYzBiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1XHVjYzE2XHVjYzE3XHVjYzE4XHVjYzE5XHVjYzFhXHVjYzFiXHVjYzFlXHVjYzFmXHVjYzIw'@;
put 'XHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDBcdTMyMDFcdTMyMDJcdTMyMDNcdTMyMDRcdTMyMDVcdTMyMDZcdTMyMDdcdTMyMDhcdTMyMDlcdTMyMGFc'@;
put 'dTMyMGJcdTMyMGNcdTMyMGRcdTMyMGVcdTMyMGZcdTMyMTBcdTMyMTFcdTMyMTJcdTMyMTNcdTMyMTRcdTMyMTVcdTMyMTZcdTMyMTdcdTMyMThcdTMyMTlcdTMyMWFcdTMyMWJcdTI0OWNcdTI0OWRcdTI0OWVcdTI0OWZcdTI0YTBcdTI0YTFcdTI0YTJcdTI0YTNcdTI0YTRcdTI0YTVcdTI0'@;
put 'YTZcdTI0YTdcdTI0YThcdTI0YTlcdTI0YWFcdTI0YWJcdTI0YWNcdTI0YWRcdTI0YWVcdTI0YWZcdTI0YjBcdTI0YjFcdTI0YjJcdTI0YjNcdTI0YjRcdTI0YjVcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2Zc'@;
put 'dTI0ODBcdTI0ODFcdTI0ODJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY5XVttXV09NDMyNjQrbSxG'@;
put 'WzQzMjY0K21dPXhbMTY5XVttXSk7Zm9yKHhbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVjYzJkXHVjYzJmXHVjYzMxXHVjYzMyXHVjYzMzXHVjYzM0XHVjYzM1XHVjYzM2'@;
put 'XHVjYzM3XHVjYzNhXHVjYzNmXHVjYzQwXHVjYzQxXHVjYzQyXHVjYzQzXHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzRmXHVjYzUwXHVjYzUxXHVjYzUyXHVjYzUzXHVjYzU2XHVjYzVhXHVj'@;
put 'YzViXHVjYzVjXHVjYzVkXHVjYzVlXHVjYzVmXHVjYzYxXHVjYzYyXHVjYzYzXHVjYzY1XHVjYzY3XHVjYzY5XHVjYzZhXHVjYzZiXHVjYzZjXHVjYzZkXHVjYzZlXHVjYzZmXHVjYzcxXHVjYzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzczXHVjYzc0XHVjYzc2'@;
put 'XHVjYzc3XHVjYzc4XHVjYzc5XHVjYzdhXHVjYzdiXHVjYzdjXHVjYzdkXHVjYzdlXHVjYzdmXHVjYzgwXHVjYzgxXHVjYzgyXHVjYzgzXHVjYzg0XHVjYzg1XHVjYzg2XHVjYzg3XHVjYzg4XHVjYzg5XHVjYzhhXHVjYzhiXHVjYzhjXHVjYzhkXHVjYzhlXHVjYzhmXHVjYzkwXHVjYzkxXHVj'@;
put 'YzkyXHVjYzkzXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVh'@;
put 'XHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUz'@;
put 'MDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkx'@;
put 'XHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MF1b'@;
put 'bV1dPTQzNTIwK20sRls0MzUyMCttXT14WzE3MF1bbV0pO2Zvcih4WzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2Nh'@;
put 'MVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2NhYVx1Y2NhZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1'@;
put 'Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1Y2NjYlx1Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Nk'@;
put 'Ylx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2NlMlx1Y2NlM1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1'@;
put 'Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBi'@;
put 'OFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1'@;
put 'MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBl'@;
put 'Zlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcxXVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxNzFdW21dXT00Mzc3NittLEZbNDM3NzYrbV09eFsxNzFdW21dKTtmb3IoeFsxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDJcdWNkMDNcdWNkMDRcdWNkMDVcdWNk'@;
put 'MDZcdWNkMDdcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTFcdWNkMTJcdWNkMTNcdWNkMTRcdWNkMTVcdWNkMTZcdWNkMTdcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkMjFcdWNkMjJcdWNkMjNc'@;
put 'dWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmRcdWNkMmVcdWNkMmZcdWNkMzBcdWNkMzFcdWNkMzJcdWNkMzNcdWNkMzRcdWNkMzVcdWNkMzZcdWNkMzdcdWNkMzhcdWNkM2FcdWNkM2JcdWNkM2NcdWNkM2RcdWNkM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWNkM2ZcdWNkNDBcdWNkNDFcdWNkNDJcdWNkNDNcdWNkNDRcdWNkNDVcdWNkNDZcdWNkNDdcdWNkNDhcdWNkNDlcdWNkNGFcdWNkNGJcdWNkNGNcdWNkNGRcdWNkNGVcdWNkNGZcdWNkNTBcdWNkNTFcdWNkNTJcdWNkNTNcdWNkNTRcdWNkNTVcdWNkNTZcdWNkNTdcdWNkNThc'@;
put 'dWNkNTlcdWNkNWFcdWNkNWJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0'@;
put 'MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBc'@;
put 'dTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0'@;
put 'NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Ml1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTcyXVttXV09NDQwMzIrbSxGWzQ0MDMyK21dPXhbMTcyXVttXSk7Zm9yKHhbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1XHVjZDY2XHVj'@;
put 'ZDY3XHVjZDY4XHVjZDY5XHVjZDZhXHVjZDZiXHVjZDZlXHVjZDcwXHVjZDcyXHVjZDczXHVjZDc0XHVjZDc1XHVjZDc2XHVjZDc3XHVjZDc5XHVjZDdhXHVjZDdiXHVjZDdjXHVjZDdkXHVjZDdlXHVjZDdmXHVjZDgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZDgx'@;
put 'XHVjZDgyXHVjZDgzXHVjZDg0XHVjZDg1XHVjZDg2XHVjZDg3XHVjZDg5XHVjZDhhXHVjZDhiXHVjZDhjXHVjZDhkXHVjZDhlXHVjZDhmXHVjZDkwXHVjZDkxXHVjZDkyXHVjZDkzXHVjZDk2XHVjZDk3XHVjZDk5XHVjZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEzXHVjZGE2XHVjZGE4XHVjZGFhXHVjZGFiXHVjZGFjXHVjZGFkXHVjZGFlXHVjZGFmXHVjZGIxXHVjZGIyXHVjZGIzXHVjZGI0XHVjZGI1XHVjZGI2XHVjZGI3XHVjZGI4XHVjZGI5XHVjZGJhXHVjZGJiXHVjZGJj'@;
put 'XHVjZGJkXHVjZGJlXHVjZGJmXHVjZGMwXHVjZGMxXHVjZGMyXHVjZGMzXHVjZGM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTczXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxNzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3M11bbV1dPTQ0Mjg4K20sRls0NDI4OCttXT14WzE3M11bbV0pO2Zvcih4WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1'@;
put 'Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2RkMlx1Y2RkM1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2Ux'@;
put 'ZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NF0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTc0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzRdW21dXT00NDU0NCttLEZbNDQ1NDQrbV09eFsxNzRdW21dKTtmb3IoeFsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMmNc'@;
put 'dWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzZcdWNlMzdcdWNlMzhcdWNlMzlcdWNlM2FcdWNlM2JcdWNlM2NcdWNlM2RcdWNlM2VcdWNlM2ZcdWNlNDBcdWNlNDFcdWNlNDJcdWNlNDNcdWNlNDRcdWNlNDVcdWNlNDZcdWNlNDdcdWNlNDhcdWNlNDlcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNGFcdWNlNGJcdWNlNGNcdWNlNGRcdWNlNGVcdWNlNGZcdWNlNTBcdWNlNTFcdWNlNTJcdWNlNTNcdWNlNTRcdWNlNTVcdWNlNTZcdWNlNTdcdWNlNWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjJcdWNlNjNcdWNlNjRcdWNlNjVcdWNlNjZcdWNlNjdc'@;
put 'dWNlNmFcdWNlNmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNmVcdWNlNmZcdWNlNzBcdWNlNzFcdWNlNzJcdWNlNzNcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2RcdWNlN2VcdWNlN2ZcdWNlODBcdWNlODFcdWNlODJcdWNlODNcdWNlODZcdWNl'@;
put 'ODhcdWNlOGFcdWNlOGJcdWNlOGNcdWNlOGRcdWNlOGVcdWNlOGZcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxNzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc1XVttXV09NDQ4MDArbSxGWzQ0ODAwK21dPXhbMTc1XVttXSk7Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVjZTlhXHVjZTliXHVjZTljXHVjZTlkXHVjZTllXHVjZTlmXHVjZWEyXHVjZWE2XHVjZWE3XHVjZWE4XHVjZWE5XHVjZWFhXHVjZWFiXHVjZWFlXHVjZWFmXHVjZWIwXHVjZWIxXHVjZWIyXHVjZWIzXHVjZWI0XHVjZWI1XHVjZWI2XHVjZWI3XHVjZWI4XHVjZWI5XHVjZWJhXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZWJiXHVjZWJjXHVjZWJkXHVjZWJlXHVjZWJmXHVjZWMwXHVjZWMyXHVjZWMzXHVjZWM0XHVjZWM1XHVjZWM2XHVjZWM3XHVjZWM4XHVjZWM5XHVjZWNhXHVjZWNiXHVjZWNjXHVjZWNkXHVjZWNlXHVjZWNmXHVjZWQwXHVjZWQx'@;
put 'XHVjZWQyXHVjZWQzXHVjZWQ0XHVjZWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZWQ2XHVjZWQ3XHVjZWQ4XHVjZWQ5XHVjZWRhXHVjZWRiXHVjZWRjXHVjZWRkXHVjZWRlXHVjZWRmXHVjZWUwXHVjZWUxXHVjZWUyXHVjZWUzXHVjZWU2XHVjZWU3XHVjZWU5XHVj'@;
put 'ZWVhXHVjZWVkXHVjZWVlXHVjZWVmXHVjZWYwXHVjZWYxXHVjZWYyXHVjZWYzXHVjZWY2XHVjZWZhXHVjZWZiXHVjZWZjXHVjZWZkXHVjZWZlXHVjZWZmXHVhYzAwXHVhYzAxXHVhYzA0XHVhYzA3XHVhYzA4XHVhYzA5XHVhYzBhXHVhYzEwXHVhYzExXHVhYzEyXHVhYzEzXHVhYzE0XHVhYzE1'@;
put 'XHVhYzE2XHVhYzE3XHVhYzE5XHVhYzFhXHVhYzFiXHVhYzFjXHVhYzFkXHVhYzIwXHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRkXHVhYzU0XHVhYzU4XHVhYzVjXHVhYzcwXHVhYzcxXHVhYzc0XHVhYzc3XHVh'@;
put 'Yzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVhYzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVhY2E5XHVhY2FhXHVhY2FjXHVhY2FmXHVhY2IwXHVhY2I4XHVhY2I5XHVhY2Ji'@;
put 'XHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1XHVhY2Y2XHVhY2ZjXHVhY2ZkXHVhZDAwXHVhZDA0XHVhZDA2XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Nl1bbV1dPTQ1MDU2K20sRls0NTA1NittXT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1'@;
put 'Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YyNVx1Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2Yz'@;
put 'ZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1'@;
put 'Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1Y2Y2MFx1Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQz'@;
put 'NFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1'@;
put 'YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUz'@;
put 'MFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1'@;
put 'YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzddW21dXT00NTMxMittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNmNzlcdWNmN2FcdWNmN2JcdWNmN2NcdWNmN2RcdWNmN2VcdWNmN2ZcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODZcdWNmODdcdWNmODhc'@;
put 'dWNmODlcdWNmOGFcdWNmOGJcdWNmOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmOGVcdWNmOGZcdWNmOTBcdWNmOTFcdWNmOTJcdWNmOTNcdWNmOTRcdWNmOTVcdWNmOTZcdWNmOTdcdWNmOThcdWNmOTlcdWNmOWFcdWNmOWJcdWNmOWNcdWNmOWRcdWNmOWVcdWNm'@;
put 'OWZcdWNmYTBcdWNmYTJcdWNmYTNcdWNmYTRcdWNmYTVcdWNmYTZcdWNmYTdcdWNmYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmYWFcdWNmYWJcdWNmYWNcdWNmYWRcdWNmYWVcdWNmYWZcdWNmYjFcdWNmYjJcdWNmYjNcdWNmYjRcdWNmYjVcdWNmYjZcdWNmYjdc'@;
put 'dWNmYjhcdWNmYjlcdWNmYmFcdWNmYmJcdWNmYmNcdWNmYmRcdWNmYmVcdWNmYmZcdWNmYzBcdWNmYzFcdWNmYzJcdWNmYzNcdWNmYzVcdWNmYzZcdWNmYzdcdWNmYzhcdWNmYzlcdWNmY2FcdWNmY2JcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFl'@;
put 'YmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFlZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2Nc'@;
put 'dWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlcdWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFm'@;
put 'Y2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIwMDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRc'@;
put 'dWIwNTVcdWIwNTdcdWIwNTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7Zm9yKHhbMTc5XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmNjXHVjZmNkXHVjZmNlXHVjZmNmXHVjZmQwXHVjZmQxXHVjZmQyXHVjZmQzXHVjZmQ0XHVjZmQ1XHVjZmQ2XHVjZmQ3XHVjZmQ4XHVjZmQ5XHVjZmRhXHVjZmRiXHVjZmRjXHVjZmRkXHVjZmRlXHVjZmRm'@;
put 'XHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZmVhXHVjZmViXHVjZmVjXHVjZmVkXHVjZmVlXHVjZmVmXHVjZmYyXHVjZmY0XHVjZmY2XHVjZmY3XHVjZmY4XHVjZmY5XHVjZmZhXHVjZmZiXHVjZmZkXHVj'@;
put 'ZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1XHVkMDA2XHVkMDA3XHVkMDA4XHVkMDA5XHVkMDBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDBiXHVkMDBjXHVkMDBkXHVkMDBlXHVkMDBmXHVkMDEwXHVkMDEyXHVkMDEzXHVkMDE0XHVkMDE1XHVkMDE2'@;
put 'XHVkMDE3XHVkMDE5XHVkMDFhXHVkMDFiXHVkMDFjXHVkMDFkXHVkMDFlXHVkMDFmXHVkMDIwXHVkMDIxXHVkMDIyXHVkMDIzXHVkMDI0XHVkMDI1XHVkMDI2XHVkMDI3XHVkMDI4XHVkMDI5XHVkMDJhXHVkMDJiXHVkMDJjXHViMDVkXHViMDdjXHViMDdkXHViMDgwXHViMDg0XHViMDhjXHVi'@;
put 'MDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEwXHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiXHViMGFjXHViMGFkXHViMGFlXHViMGFmXHViMGIxXHViMGIzXHViMGI0XHViMGI1XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4'@;
put 'XHViMGM5XHViMGQwXHViMGQxXHViMGQ0XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHViMTA5XHViMTBiXHViMTBjXHViMTEwXHViMTEyXHViMTEzXHViMTE4XHViMTE5XHViMTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHViMTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHVi'@;
put 'MTM4XHViMTM5XHViMTQwXHViMTQxXHViMTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0XHViMTU1XHViMTU4XHViMTVjXHViMTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgwXHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThkXHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4'@;
put 'XHViMWNjXHViMWQwXHViMWQ0XHViMWRjXHViMWRkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCttXT14WzE3OV1bbV0pO2Zvcih4WzE4MF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0'@;
put 'M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1'@;
put 'ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2OVx1ZDA2YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3'@;
put 'YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1ZDA4Nlx1ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1'@;
put 'YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5'@;
put 'MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1'@;
put 'YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmN1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1'@;
put 'Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4MCttLEZbNDYwODArbV09eFsxODBdW21dKTtm'@;
put 'b3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwOTVcdWQwOTZcdWQwOTdcdWQwOThcdWQwOTlcdWQwOWFcdWQwOWJcdWQwOWNcdWQwOWRcdWQwOWVcdWQwOWZcdWQwYTBcdWQwYTFcdWQwYTJcdWQwYTNcdWQw'@;
put 'YTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWRcdWQwYWVcdWQwYWZcdWQwYjBcdWQwYjFcdWQwYjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmFcdWQwYmJcdWQwYmNcdWQwYmRcdWQwYmVcdWQwYmZcdWQwYzJcdWQwYzNc'@;
put 'dWQwYzVcdWQwYzZcdWQwYzdcdWQwY2FcdWQwY2JcdWQwY2NcdWQwY2RcdWQwY2VcdWQwY2ZcdWQwZDJcdWQwZDZcdWQwZDdcdWQwZDhcdWQwZDlcdWQwZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQw'@;
put 'ZTVcdWQwZTZcdWQwZTdcdWQwZThcdWQwZTlcdWQwZWFcdWQwZWJcdWQwZWVcdWQwZjJcdWQwZjNcdWQwZjRcdWQwZjVcdWQwZjZcdWQwZjdcdWQwZjlcdWQwZmFcdWQwZmJcdWQwZmNcdWQwZmRcdWQwZmVcdWQwZmZcdWQxMDBcdWQxMDFcdWQxMDJcdWQxMDNcdWQxMDRcdWIzNjdcdWIzNjlc'@;
put 'dWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIz'@;
put 'ZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRc'@;
put 'dWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1'@;
put 'MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgxXVttXV09NDYzMzYrbSxGWzQ2MzM2K21d'@;
put 'PXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTA1XHVkMTA2XHVkMTA3XHVkMTA4XHVkMTA5XHVkMTBhXHVkMTBiXHVkMTBjXHVkMTBlXHVkMTBmXHVkMTEwXHVkMTExXHVkMTEyXHVk'@;
put 'MTEzXHVkMTE0XHVkMTE1XHVkMTE2XHVkMTE3XHVkMTE4XHVkMTE5XHVkMTFhXHVkMTFiXHVkMTFjXHVkMTFkXHVkMTFlXHVkMTFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTIwXHVkMTIxXHVkMTIyXHVkMTIzXHVkMTI0XHVkMTI1XHVkMTI2XHVkMTI3XHVkMTI4'@;
put 'XHVkMTI5XHVkMTJhXHVkMTJiXHVkMTJjXHVkMTJkXHVkMTJlXHVkMTJmXHVkMTMyXHVkMTMzXHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTNmXHVkMTQyXHVkMTQ2XHVkMTQ3XHVk'@;
put 'MTQ4XHVkMTQ5XHVkMTRhXHVkMTRiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVkMTU1XHVkMTU2XHVkMTU3XHVkMTU4XHVkMTU5XHVkMTVhXHVkMTViXHVkMTVlXHVkMTYwXHVkMTYyXHVkMTYzXHVkMTY0XHVkMTY1XHVkMTY2XHVkMTY3XHVkMTY5XHVkMTZhXHVkMTZiXHVkMTZk'@;
put 'XHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUwXHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHViNWFhXHViNWFiXHViNWIwXHViNWIxXHViNWIzXHViNWI0XHViNWI1XHViNWJiXHVi'@;
put 'NWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHViNWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0XHViNjY4XHViNjljXHViNjlkXHViNmEwXHViNmE0XHViNmFiXHViNmFjXHViNmIx'@;
put 'XHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHViNzU1XHViNzYwXHViNzY0XHViNzY4XHViNzcwXHViNzcxXHViNzczXHViNzc1XHVi'@;
put 'NzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHViNzkyXHViNzk2XHViNzk3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Ml1bbV1dPTQ2NTky'@;
put 'K20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1'@;
put 'ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1ZDE4M1x1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5'@;
put 'MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5YVx1ZDE5Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1'@;
put 'ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFj'@;
put 'ZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1'@;
put 'YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3'@;
put 'MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1'@;
put 'YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'ODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZDBcdWQxZDFcdWQxZDJcdWQxZDNcdWQxZDRcdWQxZDVcdWQxZDZcdWQxZDdcdWQxZDlc'@;
put 'dWQxZGFcdWQxZGJcdWQxZGNcdWQxZGRcdWQxZGVcdWQxZGZcdWQxZTBcdWQxZTFcdWQxZTJcdWQxZTNcdWQxZTRcdWQxZTVcdWQxZTZcdWQxZTdcdWQxZThcdWQxZTlcdWQxZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZWJcdWQxZWNcdWQxZWRcdWQxZWVcdWQx'@;
put 'ZWZcdWQxZjBcdWQxZjFcdWQxZjJcdWQxZjNcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjlcdWQxZmFcdWQxZmJcdWQxZmNcdWQxZmRcdWQxZmVcdWQxZmZcdWQyMDBcdWQyMDFcdWQyMDJcdWQyMDNcdWQyMDRcdWQyMDVcdWQyMDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWQyMDhcdWQyMGFcdWQyMGJcdWQyMGNcdWQyMGRcdWQyMGVcdWQyMGZcdWQyMTFcdWQyMTJcdWQyMTNcdWQyMTRcdWQyMTVcdWQyMTZcdWQyMTdcdWQyMThcdWQyMTlcdWQyMWFcdWQyMWJcdWQyMWNcdWQyMWRcdWQyMWVcdWQyMWZcdWQyMjBcdWQyMjFcdWQyMjJcdWQyMjNcdWQyMjRcdWQy'@;
put 'MjVcdWQyMjZcdWQyMjdcdWQyMjhcdWQyMjlcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5Yzlc'@;
put 'dWI5Y2NcdWI5Y2VcdWI5Y2ZcdWI5ZDBcdWI5ZDFcdWI5ZDJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJh'@;
put 'MzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdc'@;
put 'dWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NF1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjJhXHVkMjJiXHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMz'@;
put 'XHVkMjM1XHVkMjM2XHVkMjM3XHVkMjM4XHVkMjM5XHVkMjNhXHVkMjNiXHVkMjNlXHVkMjQwXHVkMjQyXHVkMjQzXHVkMjQ0XHVkMjQ1XHVkMjQ2XHVkMjQ3XHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjRkXHVkMjRlXHVk'@;
put 'MjRmXHVkMjUwXHVkMjUxXHVkMjUyXHVkMjUzXHVkMjU0XHVkMjU1XHVkMjU2XHVkMjU3XHVkMjU4XHVkMjU5XHVkMjVhXHVkMjViXHVkMjVkXHVkMjVlXHVkMjVmXHVkMjYwXHVkMjYxXHVkMjYyXHVkMjYzXHVkMjY1XHVkMjY2XHVkMjY3XHVkMjY4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVkMjY5XHVkMjZhXHVkMjZiXHVkMjZjXHVkMjZkXHVkMjZlXHVkMjZmXHVkMjcwXHVkMjcxXHVkMjcyXHVkMjczXHVkMjc0XHVkMjc1XHVkMjc2XHVkMjc3XHVkMjc4XHVkMjc5XHVkMjdhXHVkMjdiXHVkMjdjXHVkMjdkXHVkMjdlXHVkMjdmXHVkMjgyXHVkMjgzXHVk'@;
put 'Mjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHViYjAwXHViYjA0XHViYjBkXHViYjBmXHViYjExXHViYjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNjXHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3'@;
put 'XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYxXHViYjYzXHViYjZjXHViYjg4XHViYjhjXHViYjkwXHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHViYmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHVi'@;
put 'YzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHViYzExXHViYzE0XHViYzE1XHViYzE2XHViYzE3XHViYzE4XHViYzFiXHViYzFjXHViYzFkXHViYzFlXHViYzFmXHViYzI0XHViYzI1XHViYzI3XHViYzI5XHViYzJkXHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQw'@;
put 'XHViYzQxXHViYzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHViYzRkXHViYzUwXHViYzVkXHViYzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODVd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0pO2Zvcih4WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5'@;
put 'M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJiYVx1ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1'@;
put 'ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNk'@;
put 'MFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1'@;
put 'YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUw'@;
put 'Y1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Nl0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYrbV09eFsxODZdW21dKTtmb3IoeFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZmJcdWQyZmNcdWQy'@;
put 'ZmRcdWQyZmVcdWQyZmZcdWQzMDJcdWQzMDRcdWQzMDZcdWQzMDdcdWQzMDhcdWQzMDlcdWQzMGFcdWQzMGJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTdcdWQzMThcdWQzMTlcdWQzMWFcdWQzMWJcdWQzMWVcdWQzMjJcdWQzMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzFcdWQzMzJcdWQzMzNcdWQzMzRcdWQzMzVcdWQzMzZcdWQzMzdcdWQzM2FcdWQzM2VcdWQzM2ZcdWQzNDBcdWQzNDFcdWQzNDJcdWQzNDNcdWQzNDZcdWQzNDdcdWQzNDhcdWQz'@;
put 'NDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNGFcdWQzNGJcdWQzNGNcdWQzNGRcdWQzNGVcdWQzNGZcdWQzNTBcdWQzNTFcdWQzNTJcdWQzNTNcdWQzNTRcdWQzNTVcdWQzNTZcdWQzNTdcdWQzNThcdWQzNTlcdWQzNWFcdWQzNWJcdWQzNWNcdWQzNWRcdWQzNWVc'@;
put 'dWQzNWZcdWQzNjBcdWQzNjFcdWQzNjJcdWQzNjNcdWQzNjRcdWQzNjVcdWQzNjZcdWQzNjdcdWQzNjhcdWQzNjlcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJl'@;
put 'OTFcdWJlOThcdWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFc'@;
put 'dWJmNTVcdWJmOTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMw'@;
put 'YWRcdWMwYWZcdWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODdd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4NzIrbSxGWzQ3ODcyK21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk'@;
put 'MzZhXHVkMzZiXHVkMzZjXHVkMzZkXHVkMzZlXHVkMzZmXHVkMzcwXHVkMzcxXHVkMzcyXHVkMzczXHVkMzc0XHVkMzc1XHVkMzc2XHVkMzc3XHVkMzc4XHVkMzc5XHVkMzdhXHVkMzdiXHVkMzdlXHVkMzdmXHVkMzgxXHVkMzgyXHVkMzgzXHVkMzg1XHVkMzg2XHVkMzg3XHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzkyXHVkMzkzXHVkMzk0XHVkMzk1XHVkMzk2XHVkMzk3XHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExXHVkM2EyXHVkM2EzXHVkM2E0XHVkM2E1XHVkM2E2XHVkM2E3XHVk'@;
put 'M2FhXHVkM2FjXHVkM2FlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2FmXHVkM2IwXHVkM2IxXHVkM2IyXHVkM2IzXHVkM2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkXHVkM2JlXHVkM2JmXHVkM2MwXHVkM2MxXHVkM2MyXHVkM2MzXHVkM2M2'@;
put 'XHVkM2M3XHVkM2NhXHVkM2NiXHVkM2NjXHVkM2NkXHVkM2NlXHVkM2NmXHVkM2QxXHVkM2QyXHVkM2QzXHVkM2Q0XHVkM2Q1XHVkM2Q2XHVjMGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0XHVjMTA4XHVjMTEwXHVjMTE1XHVjMTFjXHVjMTFkXHVj'@;
put 'MTFlXHVjMTFmXHVjMTIwXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVjMTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5XHVjMTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVjMTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1'@;
put 'XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThlXHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVjMTlkXHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJkXHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVj'@;
put 'MWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVjMjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBmXHVjMjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVjMjJiXHVjMjJkXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OF1bbV1dPTQ4MTI4K20sRls0ODEyOCttXT14WzE4OF1bbV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1ZDNlMFx1ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNm'@;
put 'N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1'@;
put 'ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQy'@;
put 'OFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQzMlx1ZDQzM1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1'@;
put 'YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJl'@;
put 'Ylx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1'@;
put 'YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODldW21dXT00ODM4NCttLEZbNDgzODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MzhcdWQ0MzlcdWQ0M2FcdWQ0M2JcdWQ0M2NcdWQ0M2RcdWQ0M2VcdWQ0M2ZcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDVcdWQ0NDZcdWQ0NDdcdWQ0NDhcdWQ0NDlcdWQ0NGFcdWQ0NGJcdWQ0NGNcdWQ0NGRcdWQ0NGVcdWQ0NGZcdWQ0NTBcdWQ0'@;
put 'NTFcdWQ0NTJcdWQ0NTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NTRcdWQ0NTVcdWQ0NTZcdWQ0NTdcdWQ0NThcdWQ0NTlcdWQ0NWFcdWQ0NWJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjVcdWQ0NjZcdWQ0NjdcdWQ0NjhcdWQ0Njlc'@;
put 'dWQ0NmFcdWQ0NmJcdWQ0NmNcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NzNcdWQ0NzRcdWQ0NzVcdWQ0NzZcdWQ0NzdcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODNcdWQ0ODRcdWQ0ODVcdWQ0ODZcdWQ0'@;
put 'ODdcdWQ0OGFcdWQ0OGNcdWQ0OGVcdWQ0OGZcdWQ0OTBcdWQ0OTFcdWQ0OTJcdWQ0OTNcdWQ0OTVcdWQ0OTZcdWQ0OTdcdWQ0OThcdWQ0OTlcdWQ0OWFcdWQ0OWJcdWQ0OWNcdWQ0OWRcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVc'@;
put 'dWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1'@;
put 'NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBc'@;
put 'dWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzRcdWM1YzVcdWM1YzZcdWM1YzdcdWM1YzhcdWM1YzlcdWM1Y2FcdWM1'@;
put 'Y2NcdWM1Y2VcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDllXHVkNDlmXHVkNGEwXHVkNGExXHVkNGEyXHVkNGEzXHVkNGE0XHVkNGE1XHVkNGE2XHVkNGE3XHVkNGE4XHVkNGFhXHVkNGFiXHVkNGFjXHVkNGFkXHVkNGFlXHVkNGFmXHVkNGIwXHVkNGIxXHVkNGIyXHVkNGIzXHVk'@;
put 'NGI0XHVkNGI1XHVkNGI2XHVkNGI3XHVkNGI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGI5XHVkNGJhXHVkNGJiXHVkNGJjXHVkNGJkXHVkNGJlXHVkNGJmXHVkNGMwXHVkNGMxXHVkNGMyXHVkNGMzXHVkNGM0XHVkNGM1XHVkNGM2XHVkNGM3XHVkNGM4XHVkNGM5'@;
put 'XHVkNGNhXHVkNGNiXHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGQ2XHVkNGQ3XHVkNGQ4XHVkNGQ5XHVkNGRhXHVkNGRiXHVkNGRkXHVkNGRlXHVkNGUwXHVkNGUxXHVkNGUyXHVkNGUzXHVk'@;
put 'NGU0XHVkNGU1XHVkNGU2XHVkNGU3XHVkNGU5XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYxXHVkNGYyXHVkNGYzXHVkNGY0XHVkNGY1XHVkNGY2XHVkNGY3XHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVjNWQxXHVjNWQ0XHVjNWQ4XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1'@;
put 'XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjXHVjNWZkXHVjNWZlXHVjNWZmXHVjNjAwXHVjNjAxXHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVjNjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVj'@;
put 'NjJkXHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVjNjM5XHVjNjNiXHVjNjQwXHVjNjQxXHVjNjQ0XHVjNjQ4XHVjNjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcxXHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgw'@;
put 'XHVjNjg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4XHVjNjljXHVjNmE0XHVjNmE1XHVjNmE3XHVjNmE5XHVjNmIwXHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVjNmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVj'@;
put 'NmRkXHVjNmUwXHVjNmUxXHVjNmU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1bbV0pO2Zvcih4WzE5Ml09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1ZDUwMFx1ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1'@;
put 'ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUy'@;
put 'Y1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1ZDUzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1'@;
put 'ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1NFx1ZDU1NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZm'@;
put 'ZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1'@;
put 'Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5'@;
put 'Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1'@;
put 'YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkxNTIrbV09eFsxOTJdW21dKTtmb3IoeFsxOTNd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmVcdWQ1NmZcdWQ1NzBcdWQ1NzFcdWQ1NzJcdWQ1NzNcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2Rc'@;
put 'dWQ1N2VcdWQ1N2ZcdWQ1ODBcdWQ1ODFcdWQ1ODJcdWQ1ODNcdWQ1ODZcdWQ1OGFcdWQ1OGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTFcdWQ1OTJcdWQ1OTNcdWQ1OTRcdWQ1OTVcdWQ1OTZcdWQ1OTdcdWQ1OThcdWQ1'@;
put 'OTlcdWQ1OWFcdWQ1OWJcdWQ1OWNcdWQ1OWRcdWQ1OWVcdWQ1OWZcdWQ1YTBcdWQ1YTFcdWQ1YTJcdWQ1YTNcdWQ1YTRcdWQ1YTZcdWQ1YTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1YThcdWQ1YTlcdWQ1YWFcdWQ1YWJcdWQ1YWNcdWQ1YWRcdWQ1YWVcdWQ1YWZc'@;
put 'dWQ1YjBcdWQ1YjFcdWQ1YjJcdWQ1YjNcdWQ1YjRcdWQ1YjVcdWQ1YjZcdWQ1YjdcdWQ1YjhcdWQ1YjlcdWQ1YmFcdWQ1YmJcdWQ1YmNcdWQ1YmRcdWQ1YmVcdWQ1YmZcdWQ1YzBcdWQ1YzFcdWQ1YzJcdWQ1YzNcdWQ1YzRcdWQ1YzVcdWQ1YzZcdWQ1YzdcdWM4MTBcdWM4MTFcdWM4MTNcdWM4'@;
put 'MTVcdWM4MTZcdWM4MWNcdWM4MWRcdWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZc'@;
put 'dWM4ODdcdWM4OGJcdWM4OGNcdWM4OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5'@;
put 'MDZcdWM5MGNcdWM5MGRcdWM5MGZcdWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBc'@;
put 'dWM5YzFcdWM5YzRcdWM5YzdcdWM5YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09NDk0MDgrbSxGWzQ5NDA4K21dPXhbMTkzXVtt'@;
put 'XSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQxXHVkNWQzXHVkNWQ0XHVkNWQ1XHVkNWQ2XHVkNWQ3XHVkNWRhXHVkNWRjXHVkNWRlXHVkNWRm'@;
put 'XHVkNWUwXHVkNWUxXHVkNWUyXHVkNWUzXHVkNWU2XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNWVmXHVkNWYwXHVkNWYxXHVkNWYyXHVkNWYzXHVkNWY2XHVkNWY4XHVkNWZhXHVkNWZiXHVkNWZjXHVk'@;
put 'NWZkXHVkNWZlXHVkNWZmXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5XHVkNjBhXHVkNjBiXHVkNjBjXHVkNjBkXHVkNjBlXHVkNjBmXHVkNjEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjE2XHVkNjE3XHVkNjE4XHVkNjE5XHVkNjFhXHVkNjFi'@;
put 'XHVkNjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1XHVkNjI2XHVkNjI3XHVkNjI4XHVkNjI5XHVkNjJhXHVkNjJiXHVkNjJjXHVkNjJlXHVkNjJmXHVkNjMwXHVkNjMxXHVkNjMyXHVkNjMzXHVkNjM0XHVkNjM1XHVkNjM2XHVkNjM3XHVkNjNhXHVkNjNiXHVjOWQ1XHVj'@;
put 'OWQ2XHVjOWQ5XHVjOWRhXHVjOWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVjOWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZjXHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVjYTE4XHVjYTI5XHVjYTRjXHVjYTRk'@;
put 'XHVjYTUwXHVjYTU0XHVjYTVjXHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVjYWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVjXHVjYWY0XHVjYjA4XHVjYjEwXHVj'@;
put 'YjE0XHVjYjE4XHVjYjIwXHVjYjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVjYjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVjYzE0XHVjYzFjXHVjYzFkXHVjYzIx'@;
put 'XHVjYzIyXHVjYzI3XHVjYzI4XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NF1bbV1dPTQ5NjY0K20sRls0OTY2'@;
put 'NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0'@;
put 'Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1Zlx1ZDY2MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1'@;
put 'ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1ZDY3YVx1ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4'@;
put 'Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NVx1ZDY5Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1'@;
put 'ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2Nh'@;
put 'ZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1'@;
put 'Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2Uw'@;
put 'NFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTVdW21dXT00'@;
put 'OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjFcdWQ2YjJcdWQ2YjNcdWQ2YjRcdWQ2YjVcdWQ2YjZcdWQ2'@;
put 'YjdcdWQ2YjhcdWQ2YmFcdWQ2YmNcdWQ2YmRcdWQ2YmVcdWQ2YmZcdWQ2YzBcdWQ2YzFcdWQ2YzJcdWQ2YzNcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBcdWQ2ZDJcdWQ2ZDNc'@;
put 'dWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGFcdWQ2ZGJcdWQ2ZGNcdWQ2ZGRcdWQ2ZGVcdWQ2ZGZcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTlcdWQ2ZWFcdWQ2ZWJcdWQ2ZWNcdWQ2ZWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ZWVcdWQ2'@;
put 'ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjZcdWQ2ZjdcdWQ2ZjhcdWQ2ZjlcdWQ2ZmFcdWQ2ZmJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3MDJcdWQ3MDNcdWQ3MDVcdWQ3MDZcdWQ3MDdcdWQ3MDhcdWQ3MDlcdWQ3MGFcdWQ3MGJcdWQ3MGNcdWQ3MGRcdWQ3MGVcdWQ3MGZcdWQ3MTBc'@;
put 'dWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRcdWNlOThcdWNlYTBcdWNlYTFcdWNl'@;
put 'YTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNc'@;
put 'dWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNm'@;
put 'ZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVkNzFkXHVkNzFlXHVkNzFmXHVk'@;
put 'NzIxXHVkNzIyXHVkNzIzXHVkNzI0XHVkNzI1XHVkNzI2XHVkNzI3XHVkNzJhXHVkNzJjXHVkNzJlXHVkNzJmXHVkNzMwXHVkNzMxXHVkNzMyXHVkNzMzXHVkNzM2XHVkNzM3XHVkNzM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzNhXHVkNzNiXHVkNzNkXHVkNzNl'@;
put 'XHVkNzNmXHVkNzQwXHVkNzQxXHVkNzQyXHVkNzQzXHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhXHVkNzRiXHVkNzRjXHVkNzRkXHVkNzRlXHVkNzRmXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhXHVkNzViXHVkNzVjXHVkNzVkXHVkNzVlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVkNzVmXHVkNzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZmXHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1XHVkNzc2XHVkNzc3XHVkNzc4XHVkNzc5XHVkNzdhXHVkNzdiXHVkNzdlXHVkNzdmXHVkNzgwXHVkNzgyXHVkNzgzXHVkNzg0'@;
put 'XHVkNzg1XHVkNzg2XHVkNzg3XHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVkMDU4XHVkMDYwXHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVkMGE1XHVkMGE4XHVkMGFjXHVkMGI0XHVkMGI1XHVkMGI3XHVk'@;
put 'MGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRjXHVkMGRkXHVkMGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBkXHVkMTMwXHVkMTMxXHVkMTM0XHVkMTM4XHVkMTNhXHVkMTQw'@;
put 'XHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVkMTYxXHVkMTY4XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVkMWIwXHVkMWIxXHVkMWIzXHVkMWI1XHVkMWJhXHVkMWJjXHVk'@;
put 'MWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNjXHVkMjNkXHVkMjNmXHVkMjQxXHVkMjQ4XHVkMjVjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTddW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1'@;
put 'ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1'@;
put 'ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMy'@;
put 'OFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1'@;
put 'ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThdW21dKTtmb3IoeFsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJc'@;
put 'dWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1'@;
put 'NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlc'@;
put 'dWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTldLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzE5OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk5XVttXV09NTA5NDQrbSxGWzUwOTQ0K21dPXhbMTk5XVttXSk7Zm9yKHhbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0XHVkNjU1XHVkNjU4XHVkNjVj'@;
put 'XHVkNjY3XHVkNjY5XHVkNjcwXHVkNjcxXHVkNjc0XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVkNjkwXHVkNjk0XHVkNjlkXHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVkNmQ0XHVkNmQ3XHVkNmQ5XHVk'@;
put 'NmUwXHVkNmU0XHVkNmU4XHVkNmYwXHVkNmY1XHVkNmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzExXHVkNzE4XHVkNzE5XHVkNzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5XHVkNzUwXHVkNzUxXHVkNzU0'@;
put 'XHVkNzU2XHVkNzU3XHVkNzU4XHVkNzU5XHVkNzYwXHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVkNzZjXHVkNzcwXHVkNzc0XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjAwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMF1bbV1dPTUxMjAwK20sRls1MTIwMCttXT14WzIwMF1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1Njdi'@;
put 'N1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1'@;
put 'NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1Nzhh'@;
put 'M1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdcdTVl'@;
put 'YjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1Mzlc'@;
put 'dTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBcdTcw'@;
put 'YWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZhYTJc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1MDQ4XHU2MWE5XHU2M2VkXHU2'@;
put 'NGNhXHU2ODNjXHU2YTg0XHU2ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZkXHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdjXHU2MTRhXHU3YjlkXHU4YjE5'@;
put 'XHU5MjU3XHU5MzhjXHU0ZWFjXHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZjXHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3MGYxXHU3NDlmXHU3NGE1XHU3'@;
put 'NGNhXHU3NWQ5XHU3ODZjXHU3OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYzXHU1YzQ2XHU2MGI4XHU2MjEy'@;
put 'XHU2ODQyXHU2OGIwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1'@;
put 'N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2Ez'@;
put 'Zlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1'@;
put 'NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUz'@;
put 'Mlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThc'@;
put 'dTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkw'@;
put 'MDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThc'@;
put 'dTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRl'@;
put 'MThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVttXSk7Zm9yKHhb'@;
put 'MjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzQwXHU1M2UzXHU1M2U1'@;
put 'XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2N2U5XHU2OWNiXHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlkXHU3MDc4XHU3MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5XHU3YTc2XHU3ZDdmXHU4MDA5XHU4'@;
put 'MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2XHU5OWQyXHU5YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1YzQwXHU4M2NhXHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3YTk4XHU3ZmE0XHU4OGQ5XHU4ZWNk'@;
put 'XHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1MDI2XHU1MjM4XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2MzcyXHU2YjBhXHU2ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4XHU4ZTc2XHU5NWQ1XHU2NzNhXHU2'@;
put 'YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5MittXT14WzIw'@;
put 'N11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIz'@;
put 'Y1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1'@;
put 'NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1Nzli'@;
put 'ZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1'@;
put 'NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01MzI0OCttLEZb'@;
put 'NTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBc'@;
put 'dTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVh'@;
put 'MWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGVcdWY5MGZcdWY5MTBcdWY5MTFcdWY5MTJcdWY5MTNcdTkwYTNcdWY5MTRcdWY5MTVcdWY5MTZcdWY5MTdcdWY5MThcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNc'@;
put 'dWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA5XVtt'@;
put 'XV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDBkXHVmOTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4XHVmOTI4XHVmOTI5XHVmOTJhXHVmOTJiXHVmOTJjXHU0ZTQzXHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1OTczXHU1ZTc0XHU2NDlhXHU3OWNhXHU1ZmY1XHU2MDZj'@;
put 'XHU2MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVmOTMzXHVmOTM0XHVmOTM1XHVmOTM2XHVmOTM3XHVmOTM4XHU5OWQxXHVmOTM5XHVmOTNhXHVmOTNiXHVmOTNjXHVmOTNkXHVmOTNlXHVmOTNmXHVm'@;
put 'OTQwXHVmOTQxXHVmOTQyXHVmOTQzXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2MGYxXHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4XHVmOTQ5XHU1YzNmXHVmOTRhXHVmOTRiXHVmOTRjXHVmOTRkXHVmOTRlXHVmOTRmXHVmOTUwXHVmOTUxXHU1YWU5XHU4YTI1XHU2NzdiXHU3ZDEw'@;
put 'XHVmOTUyXHVmOTUzXHVmOTU0XHVmOTU1XHVmOTU2XHVmOTU3XHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1MzNmXHU2ZWJhXHU1OTFhXHU4MzM2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZi'@;
put 'ZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1'@;
put 'NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBi'@;
put 'M1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjExXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkw'@;
put 'ZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNc'@;
put 'dTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgx'@;
put 'YzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjNmXHU4N2JhXHU4OGY4XHU5MDhmXHVmOTVjXHU2ZDFiXHU3MGQ5XHU3M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0XHU2'@;
put 'YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmViXHU3YzQzXHU3ZTljXHU4NWNkXHU4OTY0XHU4OWJkXHU2MmM5XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5MGRl'@;
put 'XHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2ODgxXHU2YTExXHU3Y2FlXHU3Y2IxXHU3Y2U3XHU4MjZmXHU4YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNlXHU2'@;
put 'NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1MjliXHU2NmM2XHU2Yjc3XHU3MDFkXHU3OTJiXHU4ZjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEzXS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1'@;
put 'NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZi'@;
put 'N1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1'@;
put 'NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVc'@;
put 'dTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRcdTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYx'@;
put 'NDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUxY2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJc'@;
put 'dTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5YjU0XHU5ZWJi'@;
put 'XHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2FiXHU5MDg4XHU0ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRlXHU2MTYyXHU2MzNkXHU2NjY5XHU2NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFjXHU2MmI5XHU2'@;
put 'NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0ZWExXHU1OTg0XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3ZjU0XHU4MjkyXHU4MzJiXHU4M2JkXHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3Zjc1XHU4Y2I3'@;
put 'XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4YzhhXHU5NjRjXHU5YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFiXHU3NmYyXHU3NmRmXHU4NDBjXHU1MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWI1XHU2'@;
put 'ZWM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZi'@;
put 'Zlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1'@;
put 'ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJk'@;
put 'N1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1'@;
put 'NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2'@;
put 'ZWZcdTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZc'@;
put 'dTY1ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThm'@;
put 'ZWJcdTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZc'@;
put 'dTUyYzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZmNTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhbMjE5XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjdjXHU4ZGNiXHU5MWIxXHU5MjYyXHU5'@;
put 'YWVlXHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRhXHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFhXHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4YjE3XHU5MGE2'@;
put 'XHU5NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVmOTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRhXHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2NmXHU2ODIyXHU3'@;
put 'NjdkXHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBhXHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2Y2Q1XHU3NDNh'@;
put 'XHU1MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2YTk3XHU3NGE3XHU3NjU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIxOV1bbV0pO2Zv'@;
put 'cih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1'@;
put 'OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYy'@;
put 'N1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1'@;
put 'ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVk'@;
put 'OFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZbNTYzMjArbV09'@;
put 'eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkx'@;
put 'ZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdc'@;
put 'dTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZj'@;
put 'YjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVttXV09NTY1NzYr'@;
put 'bSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRiXHU5ZjNiXHU1NmFjXHU1YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2YmFmXHU2ZDVjXHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4Y2E3XHU4Y2QzXHU5'@;
put 'ODNiXHU2MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1MGZmXHU1M2YyXHU1M2Y4XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGViXHU1OTYyXHU1YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYzXHU1ZTJiXHU1Zjk5'@;
put 'XHU2MDFkXHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNlXHU3OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3ZDE3XHU3ZDcyXHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4NmM3XHU4OGRmXHU4'@;
put 'YTUwXHU4YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVmOTZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIy'@;
put 'Ml1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1'@;
put 'ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZm'@;
put 'OFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1'@;
put 'NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlc'@;
put 'dTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3'@;
put 'ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNc'@;
put 'dTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2ZGJcdTc3MDFcdTdiNmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNF1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5MTkyXHU0ZTE2XHU1MmUyXHU2YjcyXHU2ZDE3XHU3YTA1XHU3YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBm'@;
put 'XHU1YzExXHU1ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQyXHU3NTI2XHU3NThmXHU3NThlXHU3NjE5XHU3YjExXHU3YmUwXHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5'@;
put 'MDYxXHU5MGI1XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZjXHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5MDFmXHU1YjZiXHU1ZGZkXHU2NDBkXHU4NGMwXHU5MDVjXHU5OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAx'@;
put 'XHU5ODBjXHU1MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1NzgyXHU1OGZkXHU1YWMyXHU1Yjg4XHU1Y2FiXHU1Y2MwXHU1ZTI1XHU2MTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYy'@;
put 'Nlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1'@;
put 'OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRm'@;
put 'M1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNl0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYy'@;
put 'N2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVhYTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZc'@;
put 'dThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZcdTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1'@;
put 'YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODFcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOTcyXHU2ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0'@;
put 'ZmM0XHU1MTUyXHU1NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5XHU4MmJkXHU4M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNmXHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVkXHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0'@;
put 'XHU5ODRlXHU5YzEwXHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2NjRmXHU2ODQ4XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3'@;
put 'MmNlXHU5ZDI4XHU0ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2YjgzXHU3OWU3XHU5ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhkXHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1'@;
put 'NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEy'@;
put 'M1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1'@;
put 'NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4'@;
put 'Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdc'@;
put 'dTgyNDVcdTgzMzlcdThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5'@;
put 'OGVcdTVlZjZcdWY5OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZc'@;
put 'dTdlMmZcdWY5OTdcdTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcx'@;
put 'MzBcdTc0MzBcdTgyNzZcdTgyZDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3'@;
put 'XHU3MWMxXHU4NDQ5XHVmOWE4XHVmOWE5XHU1ODRiXHVmOWFhXHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJmXHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3'@;
put 'NGQ0XHU3NmM4XHU3YTRlXHU3ZTkzXHVmOWFmXHVmOWIwXHU4MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVmOWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRk'@;
put 'XHU4NjAyXHVmOWI2XHU4OGQ0XHU4YTYzXHU4YjdkXHU4YzZiXHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNlXHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJhXHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2'@;
put 'NTU2XHU2NWZmXHU2NjY0XHU2OGE3XHU2YzVhXHU2ZmIzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zvcih4WzIzMl09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3'@;
put 'ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1'@;
put 'N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4'@;
put 'OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1'@;
put 'ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09eFsyMzJdW21d'@;
put 'KTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhODhcdTdh'@;
put 'YWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJc'@;
put 'dTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1'@;
put 'ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFc'@;
put 'dTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgrbSxGWzU5NjQ4'@;
put 'K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU5MDRiXHU5Njk1XHU5NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEyXHU1N2EzXHU1YTliXHU1YWM0XHU1YmMzXHU2MDI4XHU2MTNmXHU2M2Y0XHU2Yzg1XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3MzNm'@;
put 'XHU3NDU3XHU4MmQxXHU4ODgxXHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1MGRlXHU1MzcxXHU1NzBkXHU1OWQ0XHU1YTAxXHU1YzA5XHU2MTcwXHU2NjkwXHU2ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMzXHU4'@;
put 'NDBlXHU4NDY2XHU4NTNmXHU4NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3XHU1NTJmXHU1NWE5XHU1YjdhXHU1YmE1XHU1ZTdjXHU1ZTdkXHU1ZWJlXHU2MGEwXHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2NTM4'@;
put 'XHU2NzA5XHVmOWM4XHU2N2Q0XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNF1bbV1dPTU5'@;
put 'OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2'@;
put 'ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1'@;
put 'NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEw'@;
put 'MFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1'@;
put 'Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFc'@;
put 'dTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZl'@;
put 'YTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOWY3XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0ZWQ0XHU1MjNhXHU1NGE4XHU1OWM5XHU1OWZmXHU1YjUwXHU1YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3'@;
put 'Mzg2XHU3NGY3XHU3NWI1XHU3OGMxXHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZhXHU1NmJjXHU2NWFiXHU2NjI4XHU3MDdjXHU3MGI4XHU3MjM1XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3'@;
put 'XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJhXHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1OGJiXHU1OGVmXHU1OTZjXHU1YzA3XHU1ZTMzXHU1ZTg0XHU1ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2'@;
put 'ZjNmXHU3MjQ2XHVmOWZhXHU3MzUwXHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNmXHU4OGRkXHU4ZDEzXHU5MWFjXHU5NTc3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy'@;
put 'MzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1'@;
put 'NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4'@;
put 'N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1'@;
put 'OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNc'@;
put 'dTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRl'@;
put 'OTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFcdTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVc'@;
put 'dTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdkOGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy'@;
put 'MzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1MjkxXHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZk'@;
put 'XHU3YjJjXHU4MWNkXHU4NWJhXHU4OGZkXHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0XHU5NjliXHU5NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2'@;
put 'OGQ3XHU2OWZkXHU2ZjE1XHU2ZjZlXHU3MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3NzNhXHU3OTU2XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUz'@;
put 'XHU5NjNiXHU5NmQ1XHU5Y2U1XHU2NWNmXHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4XHU1YzBhXHU1MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0'@;
put 'Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1'@;
put 'ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgy'@;
put 'Mlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2'@;
put 'N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdc'@;
put 'dTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThj'@;
put 'ZDFcdThlZWJcdThmYjBcdTkwMzJcdTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdc'@;
put 'dTdkZGRcdThmMmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2Y2XHU5NmM2XHU1ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1'@;
put 'MDFmXHU1M2M5XHU1NWRmXHU1ZDZmXHU1ZGVlXHU2YjIxXHU2YjY0XHU3OGNiXHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgy'@;
put 'XHU3Y2IyXHU3ZTk4XHU4YjlhXHU4ZDBhXHU5NDdkXHU5OTEwXHU5OTRjXHU1MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFjXHU3YWQ5XHU4YjkyXHU4Yjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1'@;
put 'ZWUwXHU1ZjcwXHU2MTM0XHU2NTVlXHU2NjBjXHU2NjM2XHU2NmEyXHU2OWNkXHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1YmMwXHU1YmU4XHU1ZjY5XHU2M2ExXHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3'@;
put 'XHU5MWY1XHU1MThhXHU2N2Y1XHU3YjU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1'@;
put 'NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNl'@;
put 'NFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1'@;
put 'NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIx'@;
put 'ZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21dKTtmb3IoeFsy'@;
put 'NDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MTJcdTY5NWFcdTZhMzVc'@;
put 'dTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZcdTY3NTFcdTkwYThcdTUz'@;
put 'ZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThhY2ZcdThkYThcdThmZmRc'@;
put 'dTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFcdTY3MmVcdTllZGNcdTUx'@;
put 'NDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIwK21dPXhbMjQ1'@;
put 'XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDA1'@;
put 'XHU1M2Q2XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMxXHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0XHU1M2EwXHU2MGZiXHU2ZTJjXHU1YzY0XHU0Zjg4XHU1MDI0XHU1NWU0XHU1Y2Q5XHU1ZTVmXHU2MDY1XHU2ODk0XHU2'@;
put 'Y2JiXHU2ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5ZjUyXHU1MjQ3XHU1MmM1XHU5OGVkXHU4OWFhXHU0ZTAzXHU2N2QyXHU2ZjA2XHU0ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4'@;
put 'XHU2ZDc4XHU3NDFiXHU3ODI3XHU5MWRkXHU5MzdjXHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUzXHU2MmQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OWIxXHU5OWRkXHU1MDJjXHU1MzUzXHU1NTQ0XHU1NzdjXHVm'@;
put 'YTAxXHU2MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYyOTc2K20sRls2'@;
put 'Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1'@;
put 'NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3'@;
put 'MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1'@;
put 'NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDddW21d'@;
put 'XT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtmb3IoeFsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdc'@;
put 'dTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0'@;
put 'ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZc'@;
put 'dWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OF1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGFlW3hbMjQ4XVttXV09NjM0ODgrbSxGWzYzNDg4K21dPXhbMjQ4XVttXSk7Zm9yKHhbMjQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3NmFlXHU4OGFiXHU5MDdmXHU5NjQyXHU1MzM5XHU1ZjNjXHU1ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2'@;
put 'XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUwXHU5NzFlXHU5YzE1XHU1OGQxXHU1Yjc4XHU4NjUwXHU4YjE0XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2'@;
put 'YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N2QzXHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1NThhXHU2YWJiXHU2ZGI1XHU3ZGQ4XHU4MjY2XHU5MjljXHU5Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0'@;
put 'XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDliXHU4MjJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDldW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihhZVt4WzI0OV1bbV1dPTYzNzQ0K20sRls2Mzc0NCttXT14WzI0OV1bbV0pO2Zvcih4WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTll'@;
put 'ZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1'@;
put 'OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3'@;
put 'NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PXhbMjUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTBdW21dXT02NGUzK20sRls2NGUzK21dPXhbMjUwXVttXSk7Zm9yKHhbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3'@;
put 'XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3'@;
put 'MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNl'@;
put 'XHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUxXS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsyNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MV1bbV1dPTY0MjU2K20sRls2NDI1NittXT14WzI1MV1bbV0pO2Zvcih4WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEwYlx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5'@;
put 'YVx1NTk1MFx1NWJhNlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1NzRiMFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQzYlx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1'@;
put 'NjY0M1x1NjY0NFx1NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2JjMVx1N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRl'@;
put 'ZVx1NmZhZVx1NzA3MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMzNFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1NzM3Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1Njg5Zlx1NmQ4ZFx1NmRjNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzI1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTJdW21dXT02NDUxMittLEZbNjQ1MTIrbV09eFsyNTJdW21dKTtmb3IoeFsyNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3'@;
put 'M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFc'@;
put 'dThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0'@;
put 'MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUzXVttXV09NjQ3NjgrbSxGWzY0NzY4K21dPXhbMjUzXVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbOTUwXT1mdW5jdGlvbigpe3ZhciBtLEY9W10sYWU9'@;
put 'e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/'@;
put 'QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTMwMDBcdWZmMGNcdTMwMDFcdTMwMDJcdWZmMGVcdTIwMjdcdWZmMWJcdWZmMWFcdWZmMWZcdWZmMDFcdWZlMzBcdTIwMjZcdTIwMjVcdWZlNTBcdWZlNTFcdWZlNTJceGI3XHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZjVjXHUyMDEzXHVmZTMxXHUyMDE0XHVmZTMz'@;
put 'XHUyNTc0XHVmZTM0XHVmZTRmXHVmZjA4XHVmZjA5XHVmZTM1XHVmZTM2XHVmZjViXHVmZjVkXHVmZTM3XHVmZTM4XHUzMDE0XHUzMDE1XHVmZTM5XHVmZTNhXHUzMDEwXHUzMDExXHVmZTNiXHVmZTNjXHUzMDBhXHUzMDBiXHVmZTNkXHVmZTNlXHUzMDA4XHUzMDA5XHVmZTNmXHVmZTQwXHUz'@;
put 'MDBjXHUzMDBkXHVmZTQxXHVmZTQyXHUzMDBlXHUzMDBmXHVmZTQzXHVmZTQ0XHVmZTU5XHVmZTVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDFkXHUzMDFlXHUyMDM1XHUy'@;
put 'MDMyXHVmZjAzXHVmZjA2XHVmZjBhXHUyMDNiXHhhN1x1MzAwM1x1MjVjYlx1MjVjZlx1MjViM1x1MjViMlx1MjVjZVx1MjYwNlx1MjYwNVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViZFx1MjViY1x1MzJhM1x1MjEwNVx4YWZcdWZmZTNcdWZmM2ZcdTAyY2RcdWZlNDlcdWZlNGFcdWZl'@;
put 'NGRcdWZlNGVcdWZlNGJcdWZlNGNcdWZlNWZcdWZlNjBcdWZlNjFcdWZmMGJcdWZmMGRceGQ3XHhmN1x4YjFcdTIyMWFcdWZmMWNcdWZmMWVcdWZmMWRcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMWVcdTIyNTJcdTIyNjFcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZmNWVcdTIyMjlc'@;
put 'dTIyMmFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIyMjNcdWZmMGZcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYxXVttXV09NDEyMTYrbSxGWzQxMjE2K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1'@;
put 'OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1'@;
put 'MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1'@;
put 'MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAy'@;
put 'NVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1'@;
put 'ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1'@;
put 'Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAz'@;
put 'YTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhc'@;
put 'dTAzYzlcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThc'@;
put 'dTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5XHU0'@;
put 'ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJiXHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1YzBm'@;
put 'XHU1YzIyXHU1YzM4XHU1YzcxXHU1ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTExXHU0ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRi'@;
put 'XHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMxXHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1'@;
put 'MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1'@;
put 'XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3'@;
put 'MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0ZTE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1'@;
put 'NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNl'@;
put 'OVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1'@;
put 'NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1'@;
put 'NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1Nzkz'@;
put 'YVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1'@;
put 'NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3Io'@;
put 'eFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNc'@;
put 'dTU0MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5'@;
put 'NzhcdTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTViODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVkZGVcdTVlMDZcdTVlNzZcdTVlNzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGZcdTVmMWJcdTVm'@;
put 'ZDlcdTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJcdTY2ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlc'@;
put 'dTZjNWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdjZjhcdTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgx'@;
put 'ZTNcdTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2ZcdTk2MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBc'@;
put 'dTRmNTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2NcdTRmNDZcdTRmNjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhb'@;
put 'MTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1MTRjXHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3'@;
put 'XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMzXHU1NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1'@;
put 'NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1NzUxXHU1NzQwXHU1NzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1'@;
put 'NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVhXHU1YjViXHU1YjhjXHU1YjhiXHU1YjhmXHU1YzJj'@;
put 'XHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1ZmY4XHU1'@;
put 'ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYxXHU2NmY0'@;
put 'XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20s'@;
put 'Rls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2'@;
put 'YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1'@;
put 'NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBh'@;
put 'M1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1'@;
put 'NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJi'@;
put 'Ylx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhd'@;
put 'W21dXT00MzAwOCttLEZbNDMwMDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0'@;
put 'OTBcdTU0NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRc'@;
put 'dTU5YjlcdTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTViNjRcdTViNjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDVcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjNDZcdTVjYjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVlMTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVm'@;
put 'MjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2Zc'@;
put 'dTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYyYmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYy'@;
put 'YWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGFlW3hbMTY5XVttXV09NDMyNjQrbSxGWzQzMjY0K21dPXhbMTY5XVttXSk7Zm9yKHhbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2'@;
put 'NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2Nj'@;
put 'XHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2MxXHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3'@;
put 'NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZhXHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGEx'@;
put 'XHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4'@;
put 'ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzBdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MF1bbV1dPTQzNTIwK20sRls0MzUyMCttXT14WzE3MF1bbV0pO2Zvcih4WzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1'@;
put 'NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFh'@;
put 'MFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1'@;
put 'NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1'@;
put 'NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNk'@;
put 'OVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1'@;
put 'NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PXhbMTcxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzFdW21dXT00Mzc3NittLEZbNDM3NzYrbV09eFsxNzFdW21dKTtmb3IoeFsxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRc'@;
put 'dTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3'@;
put 'ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZiODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVc'@;
put 'dTZkMGNcdTZkMzFcdTZkMWVcdTZkMTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZkMWJcdTZjZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNc'@;
put 'dTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2FcdTczYmJcdTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1'@;
put 'YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3MDlcdTc3MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhc'@;
put 'dTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlcdTdkMDdcdTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzJdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT14WzE3Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcyXVttXV09NDQwMzIrbSxGWzQ0MDMyK21dPXhbMTcyXVttXSk7Zm9yKHhbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDEwXHU4MDBk'@;
put 'XHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4'@;
put 'MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNk'@;
put 'XHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUyXHU4ZmVhXHU4ZmU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNkXHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRj'@;
put 'XHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5OGRiXHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1'@;
put 'MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBiXHU1MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNjXHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVj'@;
put 'XHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1NGU4XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1NGVhXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPXhbMTczXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3M11bbV1dPTQ0Mjg4K20sRls0NDI4OCttXT14WzE3M11bbV0pO2Zvcih4WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1'@;
put 'NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUy'@;
put 'Ylx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4'@;
put 'Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1'@;
put 'NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1'@;
put 'MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5M1x1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT14WzE3NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzRdW21dXT00NDU0NCttLEZbNDQ1NDQrbV09eFsxNzRdW21dKTtmb3IoeFsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhcdTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdc'@;
put 'dTczODZcdTczZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3'@;
put 'MjlcdTc3MWZcdTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5'@;
put 'NWVcdTc5NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdiMTFcdTdjODlcdTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNc'@;
put 'dTdkMGRcdTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2ZcdTgwZjFcdTgxMDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgw'@;
put 'ZmNcdTgwZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhc'@;
put 'dTgzNDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc1XVttXV09NDQ4MDArbSxGWzQ0ODAwK21dPXhbMTc1XVttXSk7Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBlXHU4YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEz'@;
put 'XHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5MDA1XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5'@;
put 'MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5NjYyXHU5NjYzXHU5NjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFjXHU5'@;
put 'YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1MWYw'@;
put 'XHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMxXHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJmXHU1'@;
put 'NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1YTQ5'@;
put 'XHU1YTY2XHU1YTZhXHU1YTQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Nl1bbV1dPTQ1MDU2K20sRls0NTA1NittXT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQwNlx1NWQw'@;
put 'ZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1'@;
put 'NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1'@;
put 'NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4'@;
put 'OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1'@;
put 'NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1Njhh'@;
put 'OFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzddW21dXT00NTMxMittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNcdTZkZDlcdTZkYjJcdTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZk'@;
put 'YWVcdTZkZGVcdTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZkZWVcdTZkZThcdTZkYzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZc'@;
put 'dTcyM2RcdTcyN2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRcdTc0ZTBcdTc0ZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVc'@;
put 'dTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZcdTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdh'@;
put 'OTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdkM2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVc'@;
put 'dTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgz'@;
put 'OTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7'@;
put 'Zm9yKHhbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Mzg2XHU4M2E3XHU4NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4'@;
put 'ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFkXHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJkXHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJl'@;
put 'XHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGU4XHU5MGVk'@;
put 'XHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5'@;
put 'Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3'@;
put 'XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJiXHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1'@;
put 'ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCtt'@;
put 'XT14WzE3OV1bbV0pO2Zvcih4WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1'@;
put 'NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBm'@;
put 'YVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5MVx1'@;
put 'NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1Njhk'@;
put 'YVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1Nlx1'@;
put 'NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4'@;
put 'MCttLEZbNDYwODArbV09eFsxODBdW21dKTtmb3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlODlcdTZlMTlcdTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBc'@;
put 'dTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1'@;
put 'ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZcdTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZcdTdiNTFcdTdjOWZcdTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZc'@;
put 'dTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgxNDZcdTgxM2VcdTgxNGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgz'@;
put 'YzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVcdTg0MDRcdTgzZGNcdTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRc'@;
put 'dTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThhNTVcdThhNWVcdThhM2NcdThhNDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb'@;
put 'MTgxXVttXV09NDYzMzYrbSxGWzQ2MzM2K21dPXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4Yzgy'@;
put 'XHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5'@;
put 'MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMyXHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5NjhlXHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5ODA1XHU5ODA2XHU5ODA4'@;
put 'XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMzXHU5ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3XHU1MjdkXHU1MmRmXHU1'@;
put 'MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1NWNlXHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1ODUxXHU1ODU4XHU1ODU3'@;
put 'XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRiXHU1OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihhZVt4WzE4Ml1bbV1dPTQ2NTkyK20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVj'@;
put 'OVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1'@;
put 'NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJi'@;
put 'Zlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1'@;
put 'NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1'@;
put 'Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgz'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3'@;
put 'NjhcdTc3NjJcdTc3ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdhMWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBc'@;
put 'dTdiNjBcdTdiNmVcdTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThcdTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgx'@;
put 'NmVcdTgxNzNcdTgxNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M2RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0'@;
put 'NjNcdTg0NjlcdTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MGFcdTg4NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVc'@;
put 'dTg4ZDJcdTg5OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThhNmRcdThhNjJcdThhNmVcdThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThj'@;
put 'YzdcdThjYzhcdThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZcdThlYjJcdThmMDNcdThmMDlcdThlZmVcdThmMGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT14WzE4NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5'@;
put 'MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5MjNkXHU5MjQwXHU5MjNlXHU5MjViXHU5MjRi'@;
put 'XHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0XHU5Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5'@;
put 'ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1'@;
put 'MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEw'@;
put 'XHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1'@;
put 'YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0pO2Zvcih4WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjEzZlx1'@;
put 'NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5'@;
put 'ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1'@;
put 'NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1'@;
put 'NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZl'@;
put 'M1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1'@;
put 'N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT14WzE4Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYrbV09eFsxODZdW21dKTtmb3IoeFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTdmNzBcdTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgxZTdcdTgxZmFcdTgyMDdcdTgyMTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0'@;
put 'YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFc'@;
put 'dTg4ZWZcdThhYTZcdThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhYWFcdThhYTVcdThhYThcdThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFc'@;
put 'dThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkwNWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTky'@;
put 'ODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJcdTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZc'@;
put 'dTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUxMDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGNcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4NzIrbSxGWzQ3ODcyK21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2IyXHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMyXHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1'@;
put 'OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUz'@;
put 'XHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1XHU2MTgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTdjXHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlh'@;
put 'XHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkzXHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2'@;
put 'NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVkXHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0'@;
put 'XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3'@;
put 'NDhiXHU3NDgzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OF1bbV1dPTQ4MTI4K20sRls0ODEyOCttXT14WzE4OF1bbV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1'@;
put 'NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2Rl'@;
put 'Y1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5'@;
put 'OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1'@;
put 'ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNl'@;
put 'MFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1'@;
put 'OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODldW21dXT00ODM4NCttLEZbNDgzODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRc'@;
put 'dTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJcdTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5'@;
put 'ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlm'@;
put 'NTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUyZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NmFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVc'@;
put 'dTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFcdTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVcdTYxY2FcdTYxYzhcdTYyMzBcdTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0'@;
put 'YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZhNTlcdTZhNmJcdTZhNThcdTZhMzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhc'@;
put 'dTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkx'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5'@;
put 'XHU3MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3'@;
put 'OWE2XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTExXHU3ZTA4XHU3ZTFiXHU3'@;
put 'ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVlXHU4MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZhXHU4NTVl'@;
put 'XHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4OTJiXHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4YWYzXHU4'@;
put 'YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQyXHU4ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIwXHU5MzM2'@;
put 'XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5MzJiXHU5MzA0XHU5MzFhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1b'@;
put 'bV0pO2Zvcih4WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcx'@;
put 'M1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1'@;
put 'OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY4Zlx1'@;
put 'NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRl'@;
put 'MFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1'@;
put 'NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRi'@;
put 'MFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkx'@;
put 'NTIrbV09eFsxOTJdW21dKTtmb3IoeFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdj'@;
put 'MGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRcdTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2RcdTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2Zc'@;
put 'dTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgxYmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgyMDlcdTgyNzFcdTg1YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3YzZcdTg3YWJcdTg3YmJcdTg3YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5'@;
put 'YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhcdThjZmJcdThkYThcdThlNDlcdThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2Zc'@;
put 'dTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkzNGJcdTkzMThcdTkzN2VcdTkzNmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1'@;
put 'YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09'@;
put 'NDk0MDgrbSxGWzQ5NDA4K21dPXhbMTkzXVttXSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZmXHU5YmFlXHU5YmFiXHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5'@;
put 'ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIzXHU2YWFjXHU2YWMzXHU2YWJiXHU2YWI4'@;
put 'XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3NjU4XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3'@;
put 'ZTUyXHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4OWIyXHU4OWY0XHU4YjI4XHU4YjM5'@;
put 'XHU4YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2IzXHU5M2FlXHU5M2FjXHU5M2IwXHU5'@;
put 'Mzk4XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihh'@;
put 'ZVt4WzE5NF1bbV1dPTQ5NjY0K20sRls0OTY2NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1'@;
put 'OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJm'@;
put 'NVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1'@;
put 'N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0'@;
put 'OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1'@;
put 'OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoYWVbeFsxOTVdW21dXT00OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlc'@;
put 'dTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNcdTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYx'@;
put 'ZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdhZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2Rc'@;
put 'dTdlN2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNc'@;
put 'dThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFcdTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTll'@;
put 'NzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdc'@;
put 'dTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14'@;
put 'WzE5Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThk'@;
put 'XHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5'@;
put 'YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNhXHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0'@;
put 'XHU3NThhXHU3NjZlXHU3NjZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdkXHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUx'@;
put 'XHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZjXHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2'@;
put 'NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4YjhhXHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0'@;
put 'XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYyXHU4YjkzXHU4YjkyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxOTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQx'@;
put 'Ylx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1'@;
put 'OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIy'@;
put 'OFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE5OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThdW21dKTtmb3IoeFsyMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRl'@;
put 'NDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhcdTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNc'@;
put 'dTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVj'@;
put 'NzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZjMTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTczOGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRl'@;
put 'ZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZcdTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFc'@;
put 'dTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVmMWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYy'@;
put 'NjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJcdTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGJcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsyMDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAxXVttXV09NTE0NTYrbSxGWzUxNDU2K21dPXhbMjAxXVttXSk7Zm9yKHhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4MjgwXHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIz'@;
put 'XHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFjXHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1'@;
put 'MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDNkXHU1NDRmXHU1NDQxXHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1'@;
put 'NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1YzhiXHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2'@;
put 'XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1'@;
put 'ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYzXHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMl1bbV1dPTUxNzEyK20sRls1MTcxMittXT14WzIwMl1bbV0pO2Zvcih4WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5'@;
put 'NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1'@;
put 'ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1'@;
put 'OTA5ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5'@;
put 'Y1x1NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1'@;
put 'NTQ2Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3'@;
put 'M1x1NTc3NFx1NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDNdW21dXT01MTk2OCttLEZbNTE5NjgrbV09eFsyMDNdW21dKTtmb3IoeFsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZcdTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTVi'@;
put 'NjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVjYjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhc'@;
put 'dTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNc'@;
put 'dTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZcdTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1'@;
put 'YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNc'@;
put 'dTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZcdTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZj'@;
put 'YmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA0XVttXV09NTIyMjQrbSxGWzUyMjI0K21dPXhbMjA0XVttXSk7Zm9yKHhbMjA1XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2QyXHU2Y2RkXHU2Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3'@;
put 'MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRk'@;
put 'XHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYwXHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4'@;
put 'XHU3YTdiXHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4'@;
put 'MmE5XHU4MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNkXHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQz'@;
put 'XHU0ZmNkXHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1'@;
put 'Mzk5XHU1Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNV1bbV1dPTUyNDgwK20sRls1MjQ4MCttXT14WzIwNV1bbV0pO2Zvcih4'@;
put 'WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1'@;
put 'NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTll'@;
put 'NFx1NTlmMlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNj'@;
put 'OVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1'@;
put 'NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJl'@;
put 'Ylx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1'@;
put 'NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDZdW21dXT01MjczNittLEZbNTI3MzYrbV09eFsy'@;
put 'MDZdW21dKTtmb3IoeFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRcdTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZc'@;
put 'dTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZiMjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZi'@;
put 'ZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBcdTZkMWRcdTZkNDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZk'@;
put 'MDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZkMjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcwYTlcdTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNc'@;
put 'dTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFcdTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdcdTczYmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0'@;
put 'ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNc'@;
put 'dTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2RcdTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA3XVttXV09NTI5OTIrbSxG'@;
put 'WzUyOTkyK21dPXhbMjA3XVttXSk7Zm9yKHhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAx'@;
put 'XHU3ZjU4XHU3ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4MGQ3XHU4MGU2XHU4MGNkXHU4'@;
put 'MWZmXHU4MjIxXHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYzXHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1'@;
put 'XHU5MGM1XHU5MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1'@;
put 'MDE3XHU1MDFjXHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJmXHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUy'@;
put 'XHU1NTE3XHU1NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOF1b'@;
put 'bV1dPTUzMjQ4K20sRls1MzI0OCttXT14WzIwOF1bbV0pO2Zvcih4WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdj'@;
put 'Y1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1'@;
put 'NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0'@;
put 'M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1'@;
put 'NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1Njgy'@;
put 'OFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA5XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsyMDldW21dXT01MzUwNCttLEZbNTM1MDQrbV09eFsyMDldW21dKTtmb3IoeFsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZThcdTZiZTNcdTZiZTJcdTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZk'@;
put 'NzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZcdTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZkOThcdTZkMmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRc'@;
put 'dTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcwZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZcdTcwYzdcdTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzhcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdcdTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTcz'@;
put 'ZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJc'@;
put 'dTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJcdTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5'@;
put 'ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMF1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMjEwXVttXV09NTM3NjArbSxGWzUzNzYwK21dPXhbMjEwXVttXSk7Zm9yKHhbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3'@;
put 'YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBmXHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2'@;
put 'XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAxXHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4'@;
put 'MzFjXHU4MzIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRjXHU4MzUzXHU4MzFlXHU4MzJjXHU4'@;
put 'MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4NjlkXHU4NjkwXHU4Njk0XHU4ODQz'@;
put 'XHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4'@;
put 'ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjExXS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMV1bbV1dPTU0MDE2K20sRls1NDAxNittXT14WzIxMV1bbV0pO2Zvcih4WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1'@;
put 'OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2'@;
put 'Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1'@;
put 'NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1'@;
put 'NTdmNFx1NTgwMFx1NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1'@;
put 'Y1x1NWE2MFx1NWE1OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1'@;
put 'NWE2OVx1NWE0N1x1NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMl0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTJdW21dXT01NDI3MittLEZbNTQyNzIrbV09eFsyMTJdW21dKTtmb3IoeFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkMzBcdTVkMTJc'@;
put 'dTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYwZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYw'@;
put 'YzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdcdTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNc'@;
put 'dTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVcdTY2NjFcdTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThc'@;
put 'dTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4NzJcdTY4YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4'@;
put 'OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBcdTZkYWJcdTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlc'@;
put 'dTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZkYzJcdTZkY2ZcdTZkYzlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEzXVttXV09NTQ1MjgrbSxGWzU0NTI4K21dPXhbMjEzXVttXSk7Zm9yKHhbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3'@;
put 'MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBhXHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBj'@;
put 'XHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3NWQyXHU3NWNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWNiXHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0'@;
put 'XHU3NzMzXHU3NzNkXHU3NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0XHU3OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3'@;
put 'YTk0XHU3YTkwXHU3YjM1XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3YjJkXHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4'@;
put 'XHU3ZDM2XHU3ZDNhXHU3ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3ZjljXHU3ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNF1bbV1dPTU0Nzg0K20sRls1NDc4NCttXT14WzIxNF1bbV0pO2Zvcih4WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1'@;
put 'ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNi'@;
put 'MFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZi'@;
put 'NFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1'@;
put 'ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAy'@;
put 'NFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1'@;
put 'OTFlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTVdW21dXT01NTA0MCttLEZbNTUwNDArbV09eFsyMTVdW21dKTtmb3IoeFsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUwOTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNc'@;
put 'dTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNcdTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1'@;
put 'YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MTlcdTU4MWVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4'@;
put 'MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVcdTVhYWNcdTVhOTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFc'@;
put 'dTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVkNDNcdTVkNmJcdTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVk'@;
put 'NTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZcdTVmYTVcdTVmYWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJc'@;
put 'dTYwY2VcdTYwYzRcdTYxMTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE2XVttXV09NTUyOTYrbSxGWzU1Mjk2K21dPXhbMjE2XVttXSk7Zm9yKHhbMjE3XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2Mzk0XHU2M2IxXHU2M2Iw'@;
put 'XHU2M2NlXHU2M2U1XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2NiXHU2M2M4XHU2M2YwXHU2'@;
put 'M2Q3XHU2M2Q5XHU2NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2'@;
put 'NjZhXHU2NjcyXHU2NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVm'@;
put 'XHU2OGM2XHU2OTE0XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZjXHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2'@;
put 'Yjk0XHU2Yjk3XHU2Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQw'@;
put 'XHU2ZTUxXHU2ZTNiXHU2ZTAzXHU2ZTJlXHU2ZTVlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxN11bbV1dPTU1NTUyK20sRls1NTU1MittXT14WzIxN11bbV0pO2Zvcih4WzIxOF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3'@;
put 'OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1'@;
put 'NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1'@;
put 'NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0'@;
put 'ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1'@;
put 'N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1'@;
put 'NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMThdW21dXT01NTgwOCttLEZbNTU4MDgrbV09eFsyMThdW21dKTtm'@;
put 'b3IoeFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgxNDNcdTgxNGFcdTgxNTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgx'@;
put 'NGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNcdTgzZjZcdTg0MTBcdTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNc'@;
put 'dTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzZDVcdTgzZmFc'@;
put 'dTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2'@;
put 'ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJcdThhNGVcdThhNGRcdThhMzlcdThhNTlc'@;
put 'dThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThkZDNcdThkY2RcdThkYzdcdThkZDZcdThk'@;
put 'ZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE5XVttXV09NTYwNjQrbSxGWzU2MDY0K21d'@;
put 'PXhbMjE5XVttXSk7Zm9yKHhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWY5XHU4ZWU2XHU4ZWVlXHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5'@;
put 'MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBj'@;
put 'XHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThkXHU5NThjXHU5NTkwXHU5Njg3XHU5NjdlXHU5Njg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1MGNhXHU1MGI0XHU1MGM4XHU1'@;
put 'MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5XHU1NWJmXHU1NWQyXHU1NThk'@;
put 'XHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1ODYzXHU1ODcxXHU1OGZjXHU1'@;
put 'YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMF1bbV1dPTU2MzIw'@;
put 'K20sRls1NjMyMCttXT14WzIyMF1bbV0pO2Zvcih4WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1'@;
put 'NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0'@;
put 'YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1'@;
put 'NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1'@;
put 'OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1'@;
put 'Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsy'@;
put 'MjFdW21dXT01NjU3NittLEZbNTY1NzYrbV09eFsyMjFdW21dKTtmb3IoeFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZlOGZcdTZlYzBcdTZlOWZcdTZlOTNc'@;
put 'dTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRcdTZlYTRcdTZlYTFcdTZlYmZcdTZl'@;
put 'YjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcxNTBcdTcxNTNcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0NGFcdTc0NGJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBc'@;
put 'dTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1ZjlcdTc1ZjhcdTc2MTBcdTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1'@;
put 'ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4YTFcdTc4ODNcdTc4Nzlc'@;
put 'dTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMl1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMjIyXVttXV09NTY4MzIrbSxGWzU2ODMyK21dPXhbMjIyXVttXSk7Zm9yKHhbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0'@;
put 'XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3'@;
put 'ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZm'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYxXHU4NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMw'@;
put 'XHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4NDMyXHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4'@;
put 'NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZlXHU4NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5'@;
put 'XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4OWRmXHU4OWU1XHU4OWU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjNd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyM11bbV1dPTU3MDg4K20sRls1NzA4OCttXT14WzIyM11bbV0pO2Zvcih4WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3'@;
put 'Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1'@;
put 'OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYw'@;
put 'Ylx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIz'@;
put 'M1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1'@;
put 'OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1'@;
put 'Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNF0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21dKTtmb3IoeFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUyODBcdTUyODFcdTUy'@;
put 'ZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N2ZcdTU4NzRcdTU4OGJc'@;
put 'dTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVhZWNcdTVhZGVcdTVhZGRcdTVh'@;
put 'ZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlcdTVkODhcdTVkN2VcdTVkN2NcdTVkOGRcdTVkNzlcdTVk'@;
put 'N2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNmNcdTYxODBc'@;
put 'dTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVcdTY0NjZcdTY0YTZcdTY0NGVcdTY0ODJcdTY0NWVcdTY0'@;
put 'NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5YzlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjVd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAwK21dPXhbMjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OWEwXHU2'@;
put 'OWNlXHU2OTk2XHU2OWIwXHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWExXHU2OTllXHU2OWQ5'@;
put 'XHU2OTk3XHU2OTkwXHU2OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2ZjRlXHU2ZjE5XHU2'@;
put 'ZjFhXHU2ZjI3XHU2ZjE4XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2'@;
put 'ZWZkXHU2ZWY2XHU2ZjM5XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFmXHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQz'@;
put 'XHU3MzRkXHU3MzUxXHU3MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3'@;
put 'NzZlXHU3NzgwXHU3NzZmXHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFhXHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3ODU2K20sRls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4'@;
put 'NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1'@;
put 'N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1'@;
put 'ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRh'@;
put 'OFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1'@;
put 'ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjddW21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlcdThjZDVcdThjY2ZcdThjZDdcdThkOTZcdThlMDlcdThl'@;
put 'MDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkxMWFcdTkxMjRcdTkxMjFcdTkxMWJcdTkxN2FcdTkxNzJc'@;
put 'dTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTkyOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTkyZWVcdTkyOGVcdTkyODJc'@;
put 'dTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N2JcdTk3'@;
put 'ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTliNjBcdTliNjFcdTliNWZc'@;
put 'dTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFcdTU2NGFcdTU2NDlcdTU2'@;
put 'NDZcdTU2NThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1'@;
put 'YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEyXHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDljXHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVj'@;
put 'XHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTliXHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2MTkyXHU2MWFhXHU2MWEx'@;
put 'XHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIyXHU2NWIzXHU2NmI1XHU2'@;
put 'NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZlXHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2OWY3XHU2OWU3XHU2YTQw'@;
put 'XHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAyXHU2ZjQxXHU2ZjI2XHU2'@;
put 'ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4WzIzMF09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1'@;
put 'NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFh'@;
put 'YVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4'@;
put 'MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1'@;
put 'NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2Jj'@;
put 'YVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1'@;
put 'N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5Zlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsyMzBdW21dKTtmb3IoeFsyMzFd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxOWVcdTgxOTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBcdTg1MjlcdTg1MGVc'@;
put 'dTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1MWRcdTg1MmVcdTg1'@;
put 'MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3NTZcdTg3NjNcdTg3NjRcdTg3'@;
put 'NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZcdTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVcdTg3NGZcdTg3N2JcdTg3NzVcdTg3NjJcdTg3Njdc'@;
put 'dTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThhYjhcdThhZDNcdThhZDFcdThhZDRcdThhZDVcdThh'@;
put 'YmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFcdThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFcdThkOWJcdThlMjBcdThlMjNcdThlMjVcdThlMjRc'@;
put 'dThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxGWzU5MTM2K21dPXhbMjMxXVtt'@;
put 'XSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDcz'@;
put 'XHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5'@;
put 'MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmI1XHU5'@;
put 'MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5NzhlXHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3'@;
put 'XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2XHU5OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5'@;
put 'YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5ZDA3XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFj'@;
put 'XHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1bbV1dPTU5MzkyK20sRls1OTM5'@;
put 'MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThi'@;
put 'YVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1'@;
put 'NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZi'@;
put 'YVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1'@;
put 'NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZi'@;
put 'ZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzNdW21dXT01'@;
put 'OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYTJcdTZmYzlcdTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZcdTcxYjhcdTcx'@;
put 'ZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTczNjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0OTRcdTc0OTJc'@;
put 'dTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFcdTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVcdTdhYjFcdTdhYjdcdTdiZGVcdTdiZTNcdTdi'@;
put 'ZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdlMWZcdTdlMjBcdTdlMTNcdTdlMGVcdTdlMWNc'@;
put 'dTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlcdTgxYjVcdTgxYWJcdTgxYjBcdTgxYWNcdTgx'@;
put 'YjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFcdTg1NThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3XHU4NTYzXHU4'@;
put 'NTNlXHU4NTViXHU4NTcxXHU4NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4Nzk4XHU4Nzc5'@;
put 'XHU4Nzg3XHU4N2EzXHU4Nzg1XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUwXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWUyXHU4YWYyXHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4'@;
put 'Y2YwXHU4Y2YzXHU4ZDZjXHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdi'@;
put 'XHU5MDg2XHU5MGZhXHU5MTMzXHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkwXHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5'@;
put 'MmNiXHU5MzFkXHU5MmZhXHU5MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzVdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIzNV1bbV1dPTYwMTYwK20sRls2MDE2MCttXT14WzIzNV1bbV0pO2Zvcih4WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1'@;
put 'OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTll'@;
put 'Y1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1'@;
put 'OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1'@;
put 'OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIz'@;
put 'Mlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1'@;
put 'NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzZdW21dXT02MDQxNittLEZbNjA0MTYrbV09eFsyMzZdW21dKTtmb3IoeFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTVcdTZhODNcdTZhYThcdTZhYTRcdTZhOTFc'@;
put 'dTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcxZTFcdTcxZjFcdTcxZThcdTcxZjJcdTcx'@;
put 'ZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVcdTc3YWJc'@;
put 'dTc3YjJcdTc3YjdcdTc3YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNcdTdhNWJc'@;
put 'dTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdjMTBcdTdj'@;
put 'MGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJcdTgxYzRc'@;
put 'dTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTc3XHU4NTdjXHU4NTg5'@;
put 'XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4'@;
put 'N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFk'@;
put 'XHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFjXHU4YjEzXHU4YjFh'@;
put 'XHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlhXHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5MWExXHU5MTlkXHU5'@;
put 'MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3XHU5MzdiXHU5MzYx'@;
put 'XHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5NzlhXHU5N2ExXHU5NzljXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5'@;
put 'ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1'@;
put 'OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0'@;
put 'MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVj'@;
put 'OFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1'@;
put 'NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFj'@;
put 'N1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzldW21dXT02MTE4NCttLEZbNjExODQrbV09eFsyMzldW21dKTtmb3IoeFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5MTRc'@;
put 'dTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFcdTdl'@;
put 'NjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDBcdTgyNWZcdTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRcdTg1'@;
put 'YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3ZDNc'@;
put 'dTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVcdThiNDdcdThiMmZcdThiM2NcdThi'@;
put 'M2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThlNTZcdThlNWVcdThlNjVcdThlNjdc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQwXVttXV09NjE0NDArbSxGWzYxNDQwK21dPXhbMjQwXVttXSk7Zm9yKHhbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVkXHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5Mzli'@;
put 'XHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5MzhkXHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5'@;
put 'NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2FlXHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5'@;
put 'ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRjXHU5YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMz'@;
put 'XHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5'@;
put 'ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFkXHU1NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNm'@;
put 'XHU1ZGMzXHU1ZTcwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MV1bbV1dPTYxNjk2K20sRls2MTY5NittXT14WzI0MV1bbV0pO2Zvcih4WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFl'@;
put 'Ylx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1'@;
put 'NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1'@;
put 'N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2'@;
put 'NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1'@;
put 'ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1'@;
put 'M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDJdW21dXT02MTk1MittLEZbNjE5NTIrbV09eFsyNDJdW21dKTtmb3IoeFsyNDNdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThl'@;
put 'NmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVc'@;
put 'dTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVc'@;
put 'dTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlh'@;
put 'YzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhc'@;
put 'dTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlm'@;
put 'NDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQzXVttXV09NjIyMDgrbSxGWzYyMjA4K21dPXhbMjQzXVttXSk7Zm9yKHhb'@;
put 'MjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2NmU4XHU2'@;
put 'NmUzXHU2NmU0XHU2YWYzXHU2YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0XHU3MmE4'@;
put 'XHU3MzdkXHU3MzdjXHU3NGJhXHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OWIyXHU3YTZlXHU3YTZj'@;
put 'XHU3YTZkXHU3YWY3XHU3YzQ5XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4'@;
put 'NjA0XHU4NjA5XHU4NjA1XHU4NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODExXHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5'@;
put 'XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5'@;
put 'NDA3XHU5NDBlXHU5NDE2XHU5NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBhXHU5M2ZmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NF1bbV1dPTYyNDY0K20sRls2MjQ2NCttXT14WzI0'@;
put 'NF1bbV0pO2Zvcih4WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1'@;
put 'OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMw'@;
put 'Ylx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRh'@;
put 'MFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1'@;
put 'OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0'@;
put 'NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1'@;
put 'ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDVdW21dXT02MjcyMCttLEZb'@;
put 'NjI3MjArbV09eFsyNDVdW21dKTtmb3IoeFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFc'@;
put 'dThiNzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0'@;
put 'MmNcdTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVc'@;
put 'dTlkYzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRl'@;
put 'YjlcdTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVc'@;
put 'dTc0ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ2XVtt'@;
put 'XV09NjI5NzYrbSxGWzYyOTc2K21dPXhbMjQ2XVttXSk7Zm9yKHhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJj'@;
put 'XHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5'@;
put 'MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRjXHU5YTRmXHU5YTQ4XHU5YTRhXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5ZGRiXHU5ZGQy'@;
put 'XHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4XHU1OGU3XHU1'@;
put 'OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3MzgzXHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3ZTk1XHU4MjZj'@;
put 'XHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDddW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzI0N11bbV1dPTYzMjMyK20sRls2MzIzMittXT14WzI0N11bbV0pO2Zvcih4WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2'@;
put 'M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1'@;
put 'OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1Nzli'@;
put 'N1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1'@;
put 'OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3'@;
put 'Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ4XVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyNDhdW21dXT02MzQ4OCttLEZbNjM0ODgrbV09eFsyNDhdW21dKTtmb3IoeFsyNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2'@;
put 'NDdcdTg2NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJc'@;
put 'dTllMTFcdTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJcdThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTll'@;
put 'ZjZcdTlmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlh'@;
put 'NjZcdTlhNjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJcdTljN2FcdTllMWRc'@;
put 'dTcwNjlcdTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1'@;
put 'NjFcdTI1NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDldLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzI0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ5XVttXV09NjM3NDQrbSxGWzYzNzQ0K21dPXhbMjQ5XVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbMTI1MF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2'@;
put 'XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2'@;
put 'd3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUy'@;
put 'MTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAx'@;
put 'NWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhk'@;
put 'YVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAx'@;
put 'NzFceGZjXHhmZFx1MDE2M1x1MDJkOSIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBG'@;
put 'PSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5P'@;
put 'UFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAx'@;
put 'OVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIx'@;
put 'XHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQx'@;
put 'ZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1'@;
put 'MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9'@;
put 'PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBh'@;
put 'Y1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1'@;
put 'MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhj'@;
put 'M1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVj'@;
put 'XHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0p'@;
put 'O3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTNdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx'@;
put 'ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAz'@;
put 'MFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2'@;
put 'XHhhN1x4YThceGE5XHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5'@;
put 'N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1'@;
put 'MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNj'@;
put 'ZVx1ZmZmZCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgw'@;
put 'M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd'@;
put 'Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1'@;
put 'MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4Yjhc'@;
put 'eGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUw'@;
put 'XHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9'@;
put 'PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBh'@;
put 'Y1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFc'@;
put 'dTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThc'@;
put 'dTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU2XT1m'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8'@;
put 'PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2'@;
put 'ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhh'@;
put 'Zlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJm'@;
put 'XHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFc'@;
put 'eGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSks'@;
put 'YWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1N109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4'@;
put 'MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIw'@;
put 'XHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZmZFx4YTJceGEzXHhh'@;
put 'NFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBj'@;
put 'XHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUw'@;
put 'MTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1'@;
put 'NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1OF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm'@;
put 'XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm'@;
put 'XHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUy'@;
put 'MDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4'@;
put 'YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhl'@;
put 'N1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhb'@;
put 'Ri5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzFlNF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx'@;
put 'Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhk'@;
put 'Y1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYw'@;
put 'XHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUw'@;
put 'MTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0'@;
put 'XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5j'@;
put 'aGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwMDZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4'@;
put 'MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGI5XHhiMlx4YzlceGIzXHhkNlx4ZGNcdTAzODVceGUwXHhlMlx4ZTRcdTAz'@;
put 'ODRceGE4XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGEzXHUyMTIyXHhlZVx4ZWZcdTIwMjJceGJkXHUyMDMwXHhmNFx4ZjZceGE2XHhhZFx4ZjlceGZiXHhmY1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Ylx1MDM5ZVx1MDNhMFx4ZGZceGFlXHhhOVx1MDNhM1x1MDNhYVx4YTdcdTIyNjBc'@;
put 'eGIwXHUwMzg3XHUwMzkxXHhiMVx1MjI2NFx1MjI2NVx4YTVcdTAzOTJcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOTlcdTAzOWFcdTAzOWNcdTAzYTZcdTAzYWJcdTAzYThcdTAzYTlcdTAzYWNcdTAzOWRceGFjXHUwMzlmXHUwM2ExXHUyMjQ4XHUwM2E0XHhhYlx4YmJcdTIwMjZceGEwXHUwM2E1'@;
put 'XHUwM2E3XHUwMzg2XHUwMzg4XHUwMTUzXHUyMDEzXHUyMDE1XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDNhZFx1MDNhZVx1MDNhZlx1MDNjY1x1MDM4Zlx1MDNjZFx1MDNiMVx1MDNiMlx1MDNjOFx1MDNiNFx1MDNiNVx1MDNjNlx1MDNi'@;
put 'M1x1MDNiN1x1MDNiOVx1MDNiZVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZlx1MDNjMFx1MDNjZVx1MDNjMVx1MDNjM1x1MDNjNFx1MDNiOFx1MDNjOVx1MDNjMlx1MDNjN1x1MDNjNVx1MDNiNlx1MDNjYVx1MDNjYlx1MDM5MFx1MDNiMFx1ZmZmZCIsYWU9W10seD17fSxtPTA7MjU2'@;
put 'IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDA3XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZc'@;
put 'ZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3'@;
put 'eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0'@;
put 'MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhc'@;
put 'dTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4'@;
put 'XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0'@;
put 'MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVtt'@;
put 'XT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMDAwOF09ZnVuY3Rpb24oKXt2YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1'@;
put 'XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx1ZjhkOFx1ZjhkOVx1ZjhkYVx1'@;
put 'ZjhkYlx1ZjhkY1x1ZjhkZFx1ZjhkZVx1ZjhkZlx1ZjhlMFx1ZjhlMVx1ZjhlMlx1ZjhlM1x1ZjhlNFx1ZjhlNVx1ZjhlNlx1ZjhlN1x1ZjhlOFx1ZjhlOVx1ZjhlYVx1ZjhlYlx1ZjhlY1x1ZjhlZFx1ZjhlZVx1ZjhlZlx1ZjhmMFx1ZjhmMVx1ZjhmMlx1ZjhmM1x1ZjhmNFx1ZjhmNVx1Zjhm'@;
put 'Nlx1ZjhmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjhmOFx1ZjhmOVx1ZjhmYVx1ZjhmYlx1ZjhmY1x1ZjhmZFx1ZjhmZVx1ZjhmZiIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20s'@;
put 'RlswK21dPXhbMF1bbV0pO2Zvcih4WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZc'@;
put 'dTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIy'@;
put 'MWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZc'@;
put 'dTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYxXVttXV09NDEyMTYrbSxGWzQxMjE2'@;
put 'K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDky'@;
put 'XHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUy'@;
put 'NDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYx'@;
put 'XHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQx'@;
put 'NDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYx'@;
put 'OVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYxZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1'@;
put 'ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1'@;
put 'MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMw'@;
put 'NTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJc'@;
put 'dTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMw'@;
put 'OGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUz'@;
put 'MGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQw'@;
put 'XHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUz'@;
put 'MGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsx'@;
put 'NjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1'@;
put 'MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNi'@;
put 'ZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVc'@;
put 'dTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVc'@;
put 'dTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx'@;
put 'NjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAx'@;
put 'NmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUz'@;
put 'MTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUw'@;
put 'Y1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUxMVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1'@;
put 'MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0'@;
put 'M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14'@;
put 'WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcy'@;
put 'MzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0Mjdc'@;
put 'dTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3'@;
put 'N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3'@;
put 'MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNi'@;
put 'XHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0'@;
put 'ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIz'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1'@;
put 'NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0'@;
put 'ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1'@;
put 'NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThh'@;
put 'NFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJc'@;
put 'dTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThk'@;
put 'ODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhc'@;
put 'dTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1'@;
put 'MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2'@;
put 'XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2'@;
put 'MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTlj'@;
put 'XHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1'@;
put 'ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4'@;
put 'WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAyMFx1ODAzZFx1NjJj'@;
put 'NVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1'@;
put 'NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2Iy'@;
put 'Y1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1'@;
put 'OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsx'@;
put 'ODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRl'@;
put 'MDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRc'@;
put 'dTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1'@;
put 'NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2Nc'@;
put 'dTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxG'@;
put 'WzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2Ri'@;
put 'XHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1'@;
put 'MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2'@;
put 'XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11b'@;
put 'bV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIz'@;
put 'Nlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1'@;
put 'NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2'@;
put 'OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgy'@;
put 'ZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFc'@;
put 'dTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTli'@;
put 'M2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9yKHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2'@;
put 'MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4'@;
put 'XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1'@;
put 'ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1'@;
put 'NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0'@;
put 'Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1'@;
put 'NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3MittLEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZc'@;
put 'dTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5'@;
put 'OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2Nc'@;
put 'dTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVm'@;
put 'XHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3'@;
put 'ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEy'@;
put 'XHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2Ni'@;
put 'ZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1'@;
put 'NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUy'@;
put 'Zlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1'@;
put 'NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0'@;
put 'YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVc'@;
put 'dTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgy'@;
put 'ZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVc'@;
put 'dTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1'@;
put 'NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2'@;
put 'XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2'@;
put 'NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNl'@;
put 'XHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1'@;
put 'OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3'@;
put 'ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1'@;
put 'NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0'@;
put 'MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtm'@;
put 'b3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRc'@;
put 'dTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYy'@;
put 'MmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZc'@;
put 'dTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThm'@;
put 'YzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21d'@;
put 'PXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3'@;
put 'NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3Yzcz'@;
put 'XHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3'@;
put 'NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIw'@;
put 'K20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1'@;
put 'NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3'@;
put 'Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1'@;
put 'OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx'@;
put 'OTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdc'@;
put 'dTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVl'@;
put 'OWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNc'@;
put 'dTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkx'@;
put 'XHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4'@;
put 'NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3'@;
put 'XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0pO2Zvcih4WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0'@;
put 'NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1'@;
put 'N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3'@;
put 'N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PXhbMTk5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTldW21dXT01MDk0NCttLEZbNTA5NDQrbV09eFsxOTldW21dKTtmb3IoeFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdm'@;
put 'M2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2Rc'@;
put 'dTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThm'@;
put 'YjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDBd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAwXVttXV09NTEyMDArbSxGWzUxMjAwK21dPXhbMjAwXVttXSk7Zm9yKHhbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4'@;
put 'MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODky'@;
put 'XHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2'@;
put 'ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPXhbMjAxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMV1bbV1dPTUxNDU2K20sRls1MTQ1NittXT14WzIwMV1bbV0pO2Zvcih4WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3Zlx1OGJkN1x1NWMzOFx1'@;
put 'ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1NTJiZlx1NjYyZlx1NTVk'@;
put 'Y1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1NjhiM1x1NmI4YVx1NjI5Mlx1'@;
put 'OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1NjU3MFx1NmYzMVx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDJdW21dXT01MTcxMittLEZbNTE3MTIrbV09eFsyMDJdW21dKTtmb3IoeFsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNc'@;
put 'dTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRm'@;
put 'M2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhc'@;
put 'dTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5'@;
put 'NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAzXVttXV09NTE5NjgrbSxGWzUxOTY4K21dPXhbMjAzXVttXSk7Zm9yKHhbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2Yw'@;
put 'XHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2'@;
put 'OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIy'@;
put 'XHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1'@;
put 'ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNF1bbV1dPTUyMjI0K20sRls1MjIyNCttXT14WzIwNF1bbV0pO2Zvcih4WzIwNV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMz'@;
put 'YVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1'@;
put 'NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQz'@;
put 'Y1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1'@;
put 'NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDVdW21dXT01MjQ4MCttLEZbNTI0ODArbV09eFsyMDVdW21dKTtmb3IoeFsyMDZd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3'@;
put 'ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRcdThjMTNcdTVjMDlcdTYxNzBc'@;
put 'dTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZj'@;
put 'NjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZcdTY2MTRcdTcxOTlcdTY3OTBc'@;
put 'dTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA2XVttXV09NTI3MzYrbSxGWzUyNzM2K21dPXhbMjA2XVtt'@;
put 'XSk7Zm9yKHhbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTAwXHU2'@;
put 'MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2'@;
put 'XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4'@;
put 'MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3'@;
put 'XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwN11bbV1dPTUyOTkyK20sRls1Mjk5'@;
put 'MittXT14WzIwN11bbV0pO2Zvcih4WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMy'@;
put 'Mlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1'@;
put 'NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4'@;
put 'Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDhdW21dXT01'@;
put 'MzI0OCttLEZbNTMyNDgrbV09eFsyMDhdW21dKTtmb3IoeFsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZcdTkwMGFcdThmYzVcdTUz'@;
put 'OGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVjYTlcdTVlZjZcdThhMDBc'@;
put 'dTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdcdTY3NjhcdTYyNmNcdTRm'@;
put 'NmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFl'@;
put 'W3hbMjA5XVttXV09NTM1MDQrbSxGWzUzNTA0K21dPXhbMjA5XVttXSk7Zm9yKHhbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2'@;
put 'NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5'@;
put 'XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3'@;
put 'ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTBdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihhZVt4WzIxMF1bbV1dPTUzNzYwK20sRls1Mzc2MCttXT14WzIxMF1bbV0pO2Zvcih4WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1'@;
put 'NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1Njcw'@;
put 'OVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1'@;
put 'NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb'@;
put 'MjExXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTFdW21dXT01NDAxNittLEZbNTQwMTYrbV09eFsyMTFdW21dKTtmb3IoeFsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZc'@;
put 'dTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2'@;
put 'NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRc'@;
put 'dThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTJdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT14WzIxMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEyXVttXV09NTQyNzIrbSxGWzU0MjcyK21dPXhbMjEyXVttXSk7Zm9yKHhbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2Ji'@;
put 'XHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0'@;
put 'ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0'@;
put 'XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb'@;
put 'MjEzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxM11bbV1dPTU0NTI4K20sRls1NDUyOCttXT14WzIxM11bbV0pO2Zvcih4WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0'@;
put 'Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1'@;
put 'OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZi'@;
put 'MVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT14WzIxNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTRdW21dXT01NDc4NCttLEZbNTQ3ODQrbV09eFsyMTRdW21dKTtmb3IoeFsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThk'@;
put 'NWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFc'@;
put 'dTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThk'@;
put 'YjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE1XVttXV09NTUwNDArbSxGWzU1MDQwK21dPXhbMjE1XVttXSk7Zm9yKHhbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5'@;
put 'YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBm'@;
put 'XHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4'@;
put 'NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4'@;
put 'XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNl1bbV1dPTU1Mjk2K20sRls1NTI5NittXT14WzIxNl1bbV0pO2Zvcih4WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1'@;
put 'NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAx'@;
put 'Y1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1'@;
put 'OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2Zi'@;
put 'OFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTddW21dXT01NTU1MittLEZbNTU1NTIrbV09eFsyMTddW21dKTtmb3IoeFsyMThdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVcdThiYTBc'@;
put 'dThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThiZjZcdThi'@;
put 'ZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZcdThjMzJc'@;
put 'dThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkwOWRcdTkw'@;
put 'OTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE4XVttXV09NTU4MDgrbSxGWzU1ODA4K21dPXhbMjE4XVttXSk7Zm9yKHhb'@;
put 'MjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MGIwXHU5MGNm'@;
put 'XHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1'@;
put 'MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMz'@;
put 'XHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1'@;
put 'N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOV1bbV1dPTU2MDY0K20sRls1NjA2NCttXT14WzIx'@;
put 'OV1bbV0pO2Zvcih4WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgw'@;
put 'Ylx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1'@;
put 'ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMw'@;
put 'N1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1'@;
put 'ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjBdW21dXT01NjMyMCttLEZb'@;
put 'NTYzMjArbV09eFsyMjBdW21dKTtmb3IoeFsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgzYmFc'@;
put 'dTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFcdTg0'@;
put 'NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0ZTBc'@;
put 'dTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIxXVtt'@;
put 'XV09NTY1NzYrbSxGWzU2NTc2K21dPXhbMjIxXVttXSk7Zm9yKHhbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3'@;
put 'XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2'@;
put 'MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2Nl'@;
put 'XHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjJdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihhZVt4WzIyMl1bbV1dPTU2ODMyK20sRls1NjgzMittXT14WzIyMl1bbV0pO2Zvcih4WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNl'@;
put 'OFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1'@;
put 'NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUx'@;
put 'NFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIzXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoYWVbeFsyMjNdW21dXT01NzA4OCttLEZbNTcwODgrbV09eFsyMjNdW21dKTtmb3IoeFsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1'@;
put 'N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVc'@;
put 'dTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2'@;
put 'YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjRdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT14WzIyNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI0XVttXV09NTczNDQrbSxGWzU3MzQ0K21dPXhbMjI0XVttXSk7Zm9yKHhbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1'@;
put 'Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZj'@;
put 'XHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4'@;
put 'ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI1XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09eFsyMjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNV1bbV1dPTU3NjAwK20sRls1NzYwMCttXT14WzIyNV1bbV0pO2Zvcih4WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1'@;
put 'NzM0ZFx1NzM1N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5'@;
put 'MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1'@;
put 'NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT14WzIyNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjZdW21dXT01Nzg1NittLEZbNTc4NTYrbV09eFsyMjZdW21dKTtmb3IoeFsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFc'@;
put 'dTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1'@;
put 'ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVc'@;
put 'dTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9eFsyMjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI3XVttXV09NTgxMTIrbSxGWzU4MTEyK21dPXhbMjI3XVttXSk7Zm9yKHhbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRk'@;
put 'XHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2'@;
put 'ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJi'@;
put 'XHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2'@;
put 'ZmQxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOF1bbV1dPTU4MzY4K20sRls1ODM2OCttXT14WzIyOF1bbV0pO2Zvcih4WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZl'@;
put 'MFx1NmZlZlx1NzAxYVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1'@;
put 'OGZlZVx1OGZlNFx1OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3'@;
put 'NFx1OTA3ZFx1OTA4Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1'@;
put 'NTlhOVx1NTlhYVx1NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjldW21dXT01ODYyNCttLEZbNTg2MjQrbV09eFsyMjldW21dKTtmb3IoeFsyMzBdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5'@;
put 'YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJc'@;
put 'dTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTVi'@;
put 'NTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZc'@;
put 'dTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMwXVttXV09NTg4ODArbSxGWzU4ODgwK21dPXhbMjMwXVttXSk7Zm9yKHhbMjMxXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3'@;
put 'ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBi'@;
put 'XHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3'@;
put 'NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJh'@;
put 'XHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMV1bbV1dPTU5MTM2K20sRls1OTEzNittXT14WzIzMV1bbV0pO2Zv'@;
put 'cih4WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYlx1NzQxYVx1'@;
put 'NzQ0MVx1NzQ1Y1x1NzQ1N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0'@;
put 'OFx1Njc2OVx1NjdhNVx1Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1'@;
put 'NjdjM1x1NjdiOFx1NjdlMlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3'@;
put 'NFx1Njg3N1x1Njg5M1x1Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzJdW21dXT01OTM5MittLEZbNTkzOTIrbV09'@;
put 'eFsyMzJdW21dKTtmb3IoeFsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5'@;
put 'YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2Rc'@;
put 'dTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThm'@;
put 'NzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMzXVttXV09NTk2NDgr'@;
put 'bSxGWzU5NjQ4K21dPXhbMjMzXVttXSk7Zm9yKHhbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2'@;
put 'NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJl'@;
put 'XHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3'@;
put 'MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIz'@;
put 'NF1bbV1dPTU5OTA0K20sRls1OTkwNCttXT14WzIzNF1bbV0pO2Zvcih4WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1'@;
put 'NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBk'@;
put 'N1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1'@;
put 'ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM1XVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoYWVbeFsyMzVdW21dXT02MDE2MCttLEZbNjAxNjArbV09eFsyMzVdW21dKTtmb3IoeFsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNc'@;
put 'dTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcx'@;
put 'NDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZc'@;
put 'dTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNl1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM2XVttXV09NjA0MTYrbSxGWzYwNDE2K21dPXhbMjM2XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2Yzkz'@;
put 'XHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3'@;
put 'ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZi'@;
put 'XHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0'@;
put 'Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1'@;
put 'OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRj'@;
put 'YVx1OTRjYlx1OTRjY1x1OTRjZFx1OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1'@;
put 'MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1Mzhc'@;
put 'dTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1'@;
put 'NjZcdTk1NjdcdTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9eFsyMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM5XVttXV09NjExODQrbSxGWzYxMTg0K21dPXhbMjM5XVttXSk7Zm9yKHhbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3'@;
put 'NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUx'@;
put 'XHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3'@;
put 'NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPXhbMjQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MF1bbV1dPTYxNDQwK20sRls2MTQ0MCttXT14WzI0MF1bbV0pO2Zvcih4WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1'@;
put 'NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3'@;
put 'Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhiN1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1'@;
put 'NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4'@;
put 'MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDFdW21dXT02MTY5NittLEZbNjE2OTYrbV09eFsyNDFdW21dKTtmb3IoeFsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVc'@;
put 'dTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2'@;
put 'YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2Jc'@;
put 'dTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3'@;
put 'OTNcdTg3YWZcdTg3YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQyXVttXV09NjE5NTIrbSxGWzYxOTUyK21dPXhbMjQyXVttXSk7Zm9yKHhbMjQzXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4Nzgz'@;
put 'XHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4'@;
put 'MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVk'@;
put 'XHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3'@;
put 'YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0M11bbV1dPTYyMjA4K20sRls2MjIwOCttXT14WzI0M11bbV0pO2Zvcih4WzI0NF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2MxZlx1N2MyYVx1N2MyNlx1N2Mz'@;
put 'OFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1'@;
put 'ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2Nj'@;
put 'NVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1'@;
put 'OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDRdW21dXT02MjQ2NCttLEZbNjI0NjQrbV09eFsyNDRdW21d'@;
put 'KTtmb3IoeFsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkx'@;
put 'NjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVc'@;
put 'dThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThl'@;
put 'MmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhc'@;
put 'dThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ1XVttXV09NjI3MjArbSxGWzYyNzIw'@;
put 'K21dPXhbMjQ1XVttXSk7Zm9yKHhbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5Zjhj'@;
put 'XHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5'@;
put 'YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1'@;
put 'XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Nl1bbV1dPTYy'@;
put 'OTc2K20sRls2Mjk3NittXT14WzI0Nl1bbV0pO2Zvcih4WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OWNjY1x1OWNjZFx1OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdi'@;
put 'NFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1'@;
put 'OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVk'@;
put 'Zlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb'@;
put 'eFsyNDddW21dXT02MzIzMittLEZbNjMyMzIrbV09eFsyNDddW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxJZVsxMDAyOV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4'@;
put 'MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx1MDEwMFx1MDEwMVx4'@;
put 'YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhh'@;
put 'M1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEyZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1'@;
put 'MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAxNTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1'@;
put 'OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRcdTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAx'@;
put 'NDFcdTAxN2NcdTAxMjJcdTAyYzciLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9'@;
put 'IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9Q'@;
put 'UVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4'@;
put 'ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhm'@;
put 'OFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZk'@;
put 'XHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixhZT1bXSx4PXt9LG09'@;
put 'MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwODFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0'@;
put 'XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFy'@;
put 'c3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhh'@;
put 'N1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1'@;
put 'MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAz'@;
put 'MFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09'@;
put 'Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMjg1OTFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBc'@;
put 'eDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4'@;
put 'YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhk'@;
put 'M1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZj'@;
put 'XHhmZFx4ZmVceGZmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksYXQuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBB'@;
put 'R0U+InUiJiYoYXQuZXhwb3J0cz1JZSksZnVuY3Rpb24oRixhZSl7InVzZSBzdHJpY3QiO2lmKHR5cGVvZiBJZT4idSIpe3ZhciB4PUllO2F0LmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij9hdC5leHBvcnRzPWFlKHgpOkYuY3B0YWJsZT1hZSh4KX1lbHNlIEll'@;
put 'PWFlKEllKX0odGhpcyxmdW5jdGlvbihGKXsidXNlIHN0cmljdCI7dmFyIGFlPXsxMjAwOiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSx4'@;
put 'PVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRdLG09WzkzMiw5MzYsOTQ5LDk1MF0sbGU9WzY1MDAxXSxNPXt9LE89e30sUj17fSx6PXt9LEs9ZnVuY3Rpb24oUyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUyl9LEk9ZnVuY3Rpb24oUyl7cmV0dXJuIFMu'@;
put 'Y2hhckNvZGVBdCgwKX0saz10eXBlb2YgQnVmZmVyPCJ1IixFPWZ1bmN0aW9uKCl7fTtpZihrKXt2YXIgaj0hQnVmZmVyLmZyb207aWYoIWopdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7aj0hMH1FPWo/ZnVuY3Rpb24oQyxTKXtyZXR1cm4gUz9uZXcgQnVmZmVyKEMsUyk6'@;
put 'bmV3IEJ1ZmZlcihDKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IEJ1ZmZlcihDKX0pO3ZhciBWPTEwMjQsQj1CdWZmZXIuYWxsb2NVbnNhZmUoViksWD1mdW5jdGlvbihTKXt2'@;
put 'YXIgdj1mdW5jdGlvbihTKXtmb3IodmFyIHY9QnVmZmVyLmFsbG9jVW5zYWZlKDY1NTM2KSxwPTA7cDw2NTUzNjsrK3ApdltwXT0wO2Zvcih2YXIgdz1PYmplY3Qua2V5cyhTKSxKPXcubGVuZ3RoLG5lPTAsZGU9d1tuZV07bmU8SjsrK25lKShkZT13W25lXSkmJih2W2RlLmNoYXJDb2RlQXQo'@;
put 'MCldPVNbZGVdKTtyZXR1cm4gdn0oRltTXS5lbmMpO3JldHVybiBmdW5jdGlvbih3LEope3ZhciBkZSxuZT13Lmxlbmd0aCxmZT0wLHhlPTAsTGU9MCxGZT0wO2lmKCJzdHJpbmciPT10eXBlb2Ygdylmb3IoZGU9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSxmZT0wO2ZlPG5lOysrZmUpZGVbZmVd'@;
put 'PXZbdy5jaGFyQ29kZUF0KGZlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIodykpe2ZvcihkZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipuZSkseGU9MCxmZT0wO2ZlPG5lOysrZmUpKExlPXdbZmVdKTwxMjg/ZGVbeGUrK109dltMZV06TGU8MjI0PyhkZVt4ZSsrXT12WygoMzEmTGUpPDw2KSso'@;
put 'NjMmd1tmZSsxXSldLCsrZmUpOkxlPDI0MD8oZGVbeGUrK109dlsoKDE1JkxlKTw8MTIpKygoNjMmd1tmZSsxXSk8PDYpKyg2MyZ3W2ZlKzJdKV0sZmUrPTIpOihGZT0oKDcmTGUpPDwxOCkrKCg2MyZ3W2ZlKzFdKTw8MTIpKygoNjMmd1tmZSsyXSk8PDYpKyg2MyZ3W2ZlKzNdKSxmZSs9MyxG'@;
put 'ZTw2NTUzNj9kZVt4ZSsrXT12W0ZlXTooZGVbeGUrK109dls1NTI5NisoKEZlLT02NTUzNik+PjEwJjEwMjMpXSxkZVt4ZSsrXT12WzU2MzIwKygxMDIzJkZlKV0pKTtkZT1kZS5zbGljZSgwLHhlKX1lbHNlIGZvcihkZT1CdWZmZXIuYWxsb2NVbnNhZmUobmUpLGZlPTA7ZmU8bmU7KytmZSlk'@;
put 'ZVtmZV09dlt3W2ZlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gSiYmImJ1ZiIhPT1KPyJhcnIiIT09Sj9kZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChkZSk6ZGV9fSxVPWZ1bmN0aW9uKFMpe3ZhciB2PUZbU10uZGVjLHA9QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3Miksdz0w'@;
put 'LEo9IiI7Zm9yKHc9MDt3PHYubGVuZ3RoOysrdylpZihKPXZbd10pe3ZhciBuZT1KLmNoYXJDb2RlQXQoMCk7cFsyKnddPTI1NSZuZSxwWzIqdysxXT1uZT4+OH1yZXR1cm4gZnVuY3Rpb24oZmUpe3ZhciB4ZT1mZS5sZW5ndGgsTGU9MCxGZT0wO2lmKDIqeGU+ViYmKFY9Mip4ZSxCPUJ1ZmZl'@;
put 'ci5hbGxvY1Vuc2FmZShWKSksQnVmZmVyLmlzQnVmZmVyKGZlKSlmb3IoTGU9MDtMZTx4ZTtMZSsrKUJbMipMZV09cFtGZT0yKmZlW0xlXV0sQlsyKkxlKzFdPXBbRmUrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGZlKWZvcihMZT0wO0xlPHhlO0xlKyspRmU9MipmZS5jaGFyQ29kZUF0'@;
put 'KExlKSxCWzIqTGVdPXBbRmVdLEJbMipMZSsxXT1wW0ZlKzFdO2Vsc2UgZm9yKExlPTA7TGU8eGU7TGUrKylCWzIqTGVdPXBbRmU9MipmZVtMZV1dLEJbMipMZSsxXT1wW0ZlKzFdO3JldHVybiBCLnNsaWNlKDAsMip4ZSkudG9TdHJpbmcoInVjczIiKX19LHE9ZnVuY3Rpb24oUyl7Zm9yKHZh'@;
put 'ciB2PUZbU10uZW5jLHA9QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3Miksdz0wO3c8MTMxMDcyOysrdylwW3ddPTA7Zm9yKHZhciBKPU9iamVjdC5rZXlzKHYpLG5lPTAsZGU9SltuZV07bmU8Si5sZW5ndGg7KytuZSlpZihkZT1KW25lXSl7dmFyIGZlPWRlLmNoYXJDb2RlQXQoMCk7cFsyKmZl'@;
put 'XT0yNTUmdltkZV0scFsyKmZlKzFdPXZbZGVdPj44fXJldHVybiBmdW5jdGlvbihMZSxGZSl7dmFyIE9lPUxlLmxlbmd0aCxqZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipPZSksV2U9MCxLZT0wLFllPTAsUWU9MCxsdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgTGUpe2ZvcihXZT1RZT0wO1dlPE9l'@;
put 'OysrV2UpS2U9MipMZS5jaGFyQ29kZUF0KFdlKSxqZVtRZSsrXT1wW0tlKzFdfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtRZSsrXT1wW0tlXSk7amU9amUuc2xpY2UoMCxRZSl9ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIoTGUpKXtmb3IoV2U9UWU9MDtXZTxPZTsrK1dlKShsdD1MZVtXZV0pPDEy'@;
put 'OD9LZT1sdDpsdDwyMjQ/KEtlPSgoMzEmbHQpPDw2KSsoNjMmTGVbV2UrMV0pLCsrV2UpOmx0PDI0MD8oS2U9KCgxNSZsdCk8PDEyKSsoKDYzJkxlW1dlKzFdKTw8NikrKDYzJkxlW1dlKzJdKSxXZSs9Mik6KEtlPSgoNyZsdCk8PDE4KSsoKDYzJkxlW1dlKzFdKTw8MTIpKygoNjMmTGVbV2Ur'@;
put 'Ml0pPDw2KSsoNjMmTGVbV2UrM10pLFdlKz0zKSxLZTw2NTUzNj8oamVbUWUrK109cFsxKyhLZSo9MildfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtRZSsrXT1wW0tlXSkpOihqZVtRZSsrXT1wWzErKEtlPTIqKDU1Mjk2KygoWWU9S2UtNjU1MzYpPj4xMCYxMDIzKSkpXXx8cFtLZV0scFtLZSsx'@;
put 'XT4wJiYoamVbUWUrK109cFtLZV0pLGplW1FlKytdPXBbMSsoS2U9MiooNTYzMjArKDEwMjMmWWUpKSldfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtRZSsrXT1wW0tlXSkpO2plPWplLnNsaWNlKDAsUWUpfWVsc2UgZm9yKFdlPVFlPTA7V2U8T2U7V2UrKylLZT0yKkxlW1dlXS5jaGFyQ29kZUF0'@;
put 'KDApLGplW1FlKytdPXBbS2UrMV18fHBbS2VdLHBbS2UrMV0+MCYmKGplW1FlKytdPXBbS2VdKTtyZXR1cm4gRmUmJiJidWYiIT09RmU/ImFyciIhPT1GZT9qZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChqZSk6amV9fSxlZT1mdW5jdGlvbihTKXt2YXIgSix2PUZbU10uZGVj'@;
put 'LHA9QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3Miksdz0wLG5lPTAsZGU9MCxmZT0wO2ZvcihmZT0wO2ZlPDY1NTM2OysrZmUpcFsyKmZlXT0yNTUscFsyKmZlKzFdPTI1Mztmb3Iodz0wO3c8di5sZW5ndGg7Kyt3KShKPXZbd10pJiYobmU9Si5jaGFyQ29kZUF0KDApLHBbZGU9Mip3XT0yNTUm'@;
put 'bmUscFtkZSsxXT1uZT4+OCk7cmV0dXJuIGZ1bmN0aW9uKExlKXt2YXIgRmU9TGUubGVuZ3RoLE9lPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKkZlKSxqZT0wLFdlPTAsS2U9MDtpZihCdWZmZXIuaXNCdWZmZXIoTGUpKWZvcihqZT0wO2plPEZlO2plKyspMjU1PT09cFtXZT0yKkxlW2plXV0mJjI1'@;
put 'Mz09PXBbV2UrMV0mJihXZT0yKigoTGVbamVdPDw4KStMZVtqZSsxXSksKytqZSksT2VbS2UrK109cFtXZV0sT2VbS2UrK109cFtXZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgTGUpZm9yKGplPTA7amU8RmU7amUrKylXZT0yKkxlLmNoYXJDb2RlQXQoamUpLDI1NT09PXBbV2VdJiYy'@;
put 'NTM9PT1wW1dlKzFdJiYoV2U9MiooKExlLmNoYXJDb2RlQXQoamUpPDw4KStMZS5jaGFyQ29kZUF0KGplKzEpKSwrK2plKSxPZVtLZSsrXT1wW1dlXSxPZVtLZSsrXT1wW1dlKzFdO2Vsc2UgZm9yKGplPTA7amU8RmU7amUrKykyNTU9PT1wW1dlPTIqTGVbamVdXSYmMjUzPT09cFtXZSsxXSYm'@;
put 'KFdlPTIqKChMZVtqZV08PDgpK0xlW2plKzFdKSwrK2plKSxPZVtLZSsrXT1wW1dlXSxPZVtLZSsrXT1wW1dlKzFdO3JldHVybiBPZS5zbGljZSgwLEtlKS50b1N0cmluZygidWNzMiIpfX07TVs2NTAwMV09ZnVuY3Rpb24gQyhTKXtpZigic3RyaW5nIj09dHlwZW9mIFMpcmV0dXJuIEMoUy5z'@;
put 'cGxpdCgiIikubWFwKEkpKTt2YXIgdj1TLmxlbmd0aCxwPTAsdz0wOzQqdj5WJiYoVj00KnYsQj1CdWZmZXIuYWxsb2NVbnNhZmUoVikpO3ZhciBKPTA7dj49MyYmMjM5PT1TWzBdJiYxODc9PVNbMV0mJjE5MT09U1syXSYmKEo9Myk7Zm9yKHZhciBuZT0xLGRlPTAsZmU9MDtKPHY7Sis9bmUp'@;
put 'bmU9MSwoZmU9U1tKXSk8MTI4P3A9ZmU6ZmU8MjI0PyhwPTY0KigzMSZmZSkrKDYzJlNbSisxXSksbmU9Mik6ZmU8MjQwPyhwPSgoMTUmZmUpPDwxMikrNjQqKDYzJlNbSisxXSkrKDYzJlNbSisyXSksbmU9Myk6KHA9MjYyMTQ0Kig3JmZlKSsoKDYzJlNbSisxXSk8PDEyKSs2NCooNjMmU1tK'@;
put 'KzJdKSsoNjMmU1tKKzNdKSxuZT00KSxwPDY1NTM2PyhCW2RlKytdPTI1NSZwLEJbZGUrK109cD4+OCk6KHc9NTUyOTYrKChwLT02NTUzNik+PjEwJjEwMjMpLHA9NTYzMjArKDEwMjMmcCksQltkZSsrXT0yNTUmdyxCW2RlKytdPXc+Pj44LEJbZGUrK109MjU1JnAsQltkZSsrXT1wPj4+OCYy'@;
put 'NTUpO3JldHVybiBCLnNsaWNlKDAsZGUpLnRvU3RyaW5nKCJ1Y3MyIil9LE9bNjUwMDFdPWZ1bmN0aW9uKFMsdil7aWYoayYmQnVmZmVyLmlzQnVmZmVyKFMpKXJldHVybiB2JiYiYnVmIiE9PXY/ImFyciIhPT12P1MudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoUyk6Uzt2YXIg'@;
put 'cD1TLmxlbmd0aCx3PTAsSj0wLG5lPTAsZGU9InN0cmluZyI9PXR5cGVvZiBTOzQqcD5WJiYoVj00KnAsQj1CdWZmZXIuYWxsb2NVbnNhZmUoVikpO2Zvcih2YXIgZmU9MDtmZTxwOysrZmUpKHc9ZGU/Uy5jaGFyQ29kZUF0KGZlKTpTW2ZlXS5jaGFyQ29kZUF0KDApKTw9MTI3P0JbbmUrK109'@;
put 'dzp3PD0yMDQ3PyhCW25lKytdPTE5Misodz4+NiksQltuZSsrXT0xMjgrKDYzJncpKTp3Pj01NTI5NiYmdzw9NTczNDM/KHctPTU1Mjk2LCsrZmUsSj0oZGU/Uy5jaGFyQ29kZUF0KGZlKTpTW2ZlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsodzw8MTApLEJbbmUrK109MjQwKyhKPj4+MTgmNyks'@;
put 'QltuZSsrXT0xNDQrKEo+Pj4xMiY2MyksQltuZSsrXT0xMjgrKEo+Pj42JjYzKSxCW25lKytdPTEyOCsoNjMmSikpOihCW25lKytdPTIyNCsodz4+MTIpLEJbbmUrK109MTI4Kyh3Pj42JjYzKSxCW25lKytdPTEyOCsoNjMmdykpO3JldHVybiB2JiYiYnVmIiE9PXY/ImFyciIhPT12P0Iuc2xp'@;
put 'Y2UoMCxuZSkudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoQiwwLG5lKTpCLnNsaWNlKDAsbmUpfX12YXIgdGU9ZnVuY3Rpb24oKXtpZihrKXtpZihSW3hbMF1dKXJldHVybjt2YXIgUz0wLHY9MDtmb3IoUz0wO1M8eC5sZW5ndGg7KytTKUZbdj14W1NdXSYmKFJbdl09VSh2KSx6'@;
put 'W3ZdPVgodikpO2ZvcihTPTA7UzxtLmxlbmd0aDsrK1MpRlt2PW1bU11dJiYoUlt2XT1lZSh2KSx6W3ZdPXEodikpO2ZvcihTPTA7UzxsZS5sZW5ndGg7KytTKU1bdj1sZVtTXV0mJihSW3ZdPU1bdl0pLE9bdl0mJih6W3ZdPU9bdl0pfX0sb2U9ZnVuY3Rpb24oQyxTKXtyZXR1cm4iIn0sc2U9'@;
put 'ZnVuY3Rpb24oUyl7ZGVsZXRlIFJbU10sZGVsZXRlIHpbU119LHVlPXtlbmNhY2hlOnRlLGRlY2FjaGU6ZnVuY3Rpb24oKXtpZihrKXtpZighUlt4WzBdXSlyZXR1cm47eC5mb3JFYWNoKHNlKSxtLmZvckVhY2goc2UpLGxlLmZvckVhY2goc2UpfWI9b2UsRD0wfSxzYmNzOngsZGJjczptfTt0'@;
put 'ZSgpO3ZhciBjZT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsYj1vZSxEPTA7cmV0dXJuIEYudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBDKFMsdil7dmFyIHA7aWYocD1SW1NdKXJldHVybiBwKHYpO2lmKCJzdHJpbmci'@;
put 'PT10eXBlb2YgdilyZXR1cm4gQyhTLHYuc3BsaXQoIiIpLm1hcChJKSk7dmFyIGplLHc9di5sZW5ndGgsSj1uZXcgQXJyYXkodyksbmU9IiIsZGU9MCxmZT0wLHhlPTEsTGU9MCxGZT0wLE9lPUZbU10sV2U9IiI7aWYoT2UmJihqZT1PZS5kZWMpKWZvcihmZT0wO2ZlPHc7ZmUrPXhlKXtpZih4'@;
put 'ZT0yLChuZT1qZVsodltmZV08PDgpK3ZbZmUrMV1dKXx8KHhlPTEsbmU9amVbdltmZV1dKSwhbmUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgY29kZTogIit2W2ZlXSsiICIrdltmZSt4ZS0xXSsiICIrZmUrIiAiK3hlKyIgIitqZVt2W2ZlXV0pO0pbTGUrK109bmV9ZWxzZXtpZigh'@;
put 'KFdlPWFlW1NdKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitTKTtzd2l0Y2goV2Upe2Nhc2UidXRmOCI6Zm9yKHc+PTMmJjIzOT09dlswXSYmMTg3PT12WzFdJiYxOTE9PXZbMl0mJihmZT0zKTtmZTx3O2ZlKz14ZSl4ZT0xLHZbZmVdPDEyOD9kZT12W2ZlXTp2W2ZlXTwy'@;
put 'MjQ/KGRlPTY0KigzMSZ2W2ZlXSkrKDYzJnZbZmUrMV0pLHhlPTIpOnZbZmVdPDI0MD8oZGU9KCgxNSZ2W2ZlXSk8PDEyKSs2NCooNjMmdltmZSsxXSkrKDYzJnZbZmUrMl0pLHhlPTMpOihkZT0yNjIxNDQqKDcmdltmZV0pKygoNjMmdltmZSsxXSk8PDEyKSs2NCooNjMmdltmZSsyXSkrKDYz'@;
put 'JnZbZmUrM10pLHhlPTQpLGRlPDY1NTM2fHwoRmU9NTUyOTYrKChkZS09NjU1MzYpPj4xMCYxMDIzKSxkZT01NjMyMCsoMTAyMyZkZSksSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEZlKSksSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGRlKTticmVhaztjYXNlImFzY2lpIjppZihr'@;
put 'JiZCdWZmZXIuaXNCdWZmZXIodikpcmV0dXJuIHYudG9TdHJpbmcoV2UpO2ZvcihmZT0wO2ZlPHc7ZmUrKylKW2ZlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmVdKTtMZT13O2JyZWFrO2Nhc2UidXRmMTZsZSI6aWYodz49MiYmMjU1PT12WzBdJiYyNTQ9PXZbMV0mJihmZT0yKSxrJiZCdWZm'@;
put 'ZXIuaXNCdWZmZXIodikpcmV0dXJuIHYudG9TdHJpbmcoV2UpO2Zvcih4ZT0yO2ZlKzE8dztmZSs9eGUpSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKCh2W2ZlKzFdPDw4KSt2W2ZlXSk7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3Iodz49MiYmMjU0PT12WzBdJiYyNTU9PXZbMV0mJihmZT0y'@;
put 'KSx4ZT0yO2ZlKzE8dztmZSs9eGUpSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKCh2W2ZlXTw8OCkrdltmZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3Iodz49NCYmMjU1PT12WzBdJiYyNTQ9PXZbMV0mJjA9PT12WzJdJiYwPT09dlszXSYmKGZlPTQpLHhlPTQ7ZmU8dztmZSs9eGUp'@;
put 'KGRlPSh2W2ZlKzNdPDwyNCkrKHZbZmUrMl08PDE2KSsodltmZSsxXTw8OCkrdltmZV0pPjY1NTM1PyhkZS09NjU1MzYsSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhkZT4+MTAmMTAyMykpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZkZSkpKTpK'@;
put 'W0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoZGUpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKHc+PTQmJjI1NT09dlszXSYmMjU0PT12WzJdJiYwPT09dlsxXSYmMD09PXZbMF0mJihmZT00KSx4ZT00O2ZlPHc7ZmUrPXhlKShkZT0odltmZV08PDI0KSsodltmZSsxXTw8MTYpKyh2W2ZlKzJd'@;
put 'PDw4KSt2W2ZlKzNdKT42NTUzNT8oZGUtPTY1NTM2LEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoZGU+PjEwJjEwMjMpKSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmZGUpKSk6SltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGRlKTticmVhaztj'@;
put 'YXNlInV0ZjciOmZvcih3Pj00JiY0Mz09dlswXSYmNDc9PXZbMV0mJjExOD09dlsyXSYmKHc+PTUmJjU2PT12WzNdJiY0NT09dls0XT9mZT01Oig1Nj09dlszXXx8NTc9PXZbM118fDQzPT12WzNdfHw0Nz09dlszXSkmJihmZT00KSk7ZmU8dztmZSs9eGUpaWYoNDM9PT12W2ZlXSlpZih4ZT0x'@;
put 'LDQ1IT09dltmZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUreGVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspeGUrKzt2YXIgS2U9MDs0NT09PXZbZmUreGVdJiYoKyt4ZSxLZT0xKTtmb3IodmFyIFllPVtdLFFlPSIiLEFlPTAsVGU9MCxxZT0wLFhlPTAsVWU9MTtVZTx4'@;
put 'ZS1LZSYmKEFlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSksVGU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSxZZS5wdXNoKEFlPDwyfFRlPj40KSwtMSE9PShxZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUodltm'@;
put 'ZStVZSsrXSkpKSYmKFllLnB1c2goKDE1JlRlKTw8NHxxZT4+MiksLTEhPT0oWGU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSkpKTspWGU8NjQmJlllLnB1c2goKDMmcWUpPDw2fFhlKTtmb3IoUWU9QygxMjAxLFllKSxVZT0wO1VlPFFlLmxlbmd0aDsrK1Vl'@;
put 'KUpbTGUrK109UWUuY2hhckF0KFVlKX1lbHNlIHhlPTIsSltMZSsrXT0iKyI7ZWxzZSB4ZT0xLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK1MrIiAiK2FlW1NdKX19cmV0dXJuIEou'@;
put 'c2xpY2UoMCxMZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBDKFMsdixwKXtpZihTPT09RCYmYilyZXR1cm4gYih2LHApO2lmKHpbU10pcmV0dXJuKGI9eltEPVNdKSh2LHApO2smJkJ1ZmZlci5pc0J1ZmZlcih2KSYmKHY9di50b1N0cmluZygidXRmOCIpKTt2YXIgRmUsdz12Lmxlbmd0'@;
put 'aCxKPWs/QnVmZmVyLmFsbG9jVW5zYWZlKDQqdyk6W10sbmU9MCxkZT0wLGZlPTAseGU9MCxMZT1GW1NdLE9lPSIiLGplPSJzdHJpbmciPT10eXBlb2YgdjtpZihMZSYmKEZlPUxlLmVuYykpZm9yKGRlPTA7ZGU8dzsrK2RlLCsrZmUpKG5lPUZlW2plP3YuY2hhckF0KGRlKTp2W2RlXV0pPjI1'@;
put 'NT8oSltmZV09bmU+PjgsSlsrK2ZlXT0yNTUmbmUpOkpbZmVdPTI1NSZuZTtlbHNle2lmKCEoT2U9YWVbU10pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK1MpO3N3aXRjaChPZSl7Y2FzZSJ1dGY4IjppZihrJiZqZSl7ZmU9KEo9RSh2LE9lKSkubGVuZ3RoO2JyZWFrfWZv'@;
put 'cihkZT0wO2RlPHc7KytkZSwrK2ZlKShuZT1qZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCkpPD0xMjc/SltmZV09bmU6bmU8PTIwNDc/KEpbZmVdPTE5MisobmU+PjYpLEpbKytmZV09MTI4Kyg2MyZuZSkpOm5lPj01NTI5NiYmbmU8PTU3MzQzPyhuZS09NTUyOTYseGU9'@;
put 'KGplP3YuY2hhckNvZGVBdCgrK2RlKTp2WysrZGVdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyhuZTw8MTApLEpbZmVdPTI0MCsoeGU+Pj4xOCY3KSxKWysrZmVdPTE0NCsoeGU+Pj4xMiY2MyksSlsrK2ZlXT0xMjgrKHhlPj4+NiY2MyksSlsrK2ZlXT0xMjgrKDYzJnhlKSk6KEpbZmVdPTIyNCso'@;
put 'bmU+PjEyKSxKWysrZmVdPTEyOCsobmU+PjYmNjMpLEpbKytmZV09MTI4Kyg2MyZuZSkpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKGsmJiJzdHJpbmciPT10eXBlb2Ygdil7ZmU9KEo9RSh2LE9lKSkubGVuZ3RoO2JyZWFrfWZvcihkZT0wO2RlPHc7KytkZSwrK2ZlKXtpZighKChuZT1qZT92LmNo'@;
put 'YXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrbmUpO0pbZmVdPW5lfWJyZWFrO2Nhc2UidXRmMTZsZSI6aWYoayYmInN0cmluZyI9PXR5cGVvZiB2KXtmZT0oSj1FKHYsT2UpKS5sZW5ndGg7YnJlYWt9Zm9yKGRlPTA7'@;
put 'ZGU8dzsrK2RlKW5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSxKW2ZlKytdPTI1NSZuZSxKW2ZlKytdPW5lPj44O2JyZWFrO2Nhc2UidXRmMTZiZSI6Zm9yKGRlPTA7ZGU8dzsrK2RlKW5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSxK'@;
put 'W2ZlKytdPW5lPj44LEpbZmUrK109MjU1Jm5lO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKGRlPTA7ZGU8dzsrK2RlKShuZT1qZT92LmNoYXJDb2RlQXQoZGUpOnZbZGVdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwxMCkrKHZbKytkZV0u'@;
put 'Y2hhckNvZGVBdCgwKS01NjMyMCkpLEpbZmUrK109MjU1Jm5lLEpbZmUrK109MjU1JihuZT4+PTgpLEpbZmUrK109MjU1JihuZT4+PTgpLEpbZmUrK109MjU1JihuZT4+PTgpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKGRlPTA7ZGU8dzsrK2RlKShuZT1qZT92LmNoYXJDb2RlQXQoZGUpOnZb'@;
put 'ZGVdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5lLTU1Mjk2PDwxMCkrKHZbKytkZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLEpbZmUrM109MjU1Jm5lLEpbZmUrMl09MjU1JihuZT4+PTgpLEpbZmUrMV09MjU1JihuZT4+PTgpLEpbZmVdPTI1NSYobmU+'@;
put 'Pj04KSxmZSs9NDticmVhaztjYXNlInV0ZjciOmZvcihkZT0wO2RlPHc7ZGUrKyl7dmFyIFdlPWplP3YuY2hhckF0KGRlKTp2W2RlXS5jaGFyQXQoMCk7aWYoIisiIT09V2UpaWYoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5'@;
put 'JygpLC0uLzo/Ii5pbmRleE9mKFdlKT4tMSlKW2ZlKytdPVdlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgS2U9QygxMjAxLFdlKTtKW2ZlKytdPTQzLEpbZmUrK109Y2UuY2hhckNvZGVBdChLZVswXT4+MiksSltmZSsrXT1jZS5jaGFyQ29kZUF0KCgoMyZLZVswXSk8PDQpKygoS2VbMV18fDAp'@;
put 'Pj40KSksSltmZSsrXT1jZS5jaGFyQ29kZUF0KCgoMTUmS2VbMV0pPDwyKSsoKEtlWzJdfHwwKT4+NikpLEpbZmUrK109NDV9ZWxzZSBKW2ZlKytdPTQzLEpbZmUrK109NDV9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK1MrIiAiK2FlW1NdKX19'@;
put 'cmV0dXJuIEo9Si5zbGljZSgwLGZlKSxrP3AmJiJidWYiIT09cD8iYXJyIiE9PXA/Si50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChKKTpKOiJzdHIiPT1wP0oubWFwKEspLmpvaW4oIiIpOkp9LGhhc2NwOmZ1bmN0aW9uKFMpe3JldHVybiEoIUZbU10mJiFhZVtTXSl9LG1hZ2lj'@;
put 'OmFlLGNhY2hlOnVlfSxGfSl9LDc1NDQ2OihhdCxJZSk9Pnt2YXIgRixhZSx4OyFmdW5jdGlvbihtKXtpZih0eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpYXQuZXhwb3J0cz1tKCk7ZWxzZSBpZih0eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpSlNaaXBTeW5jPW0oKSxhZT1b'@;
put 'XSx2b2lkIDAhPT0oeD0iZnVuY3Rpb24iPT10eXBlb2YoRj1tKT9GLmFwcGx5KEllLGFlKTpGKSYmKGF0LmV4cG9ydHM9eCk7ZWxzZXt2YXIgbGU7dHlwZW9mIGdsb2JhbFRoaXM8InUiP2xlPWdsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/bGU9d2luZG93OnR5cGVvZiBnbG9iYWw8InUi'@;
put 'P2xlPWdsb2JhbDp0eXBlb2YgJDwidSImJiQuZ2xvYmFsP2xlPSQuZ2xvYmFsOnR5cGVvZiBzZWxmPCJ1IiYmKGxlPXNlbGYpLGxlLkpTWmlwU3luYz1tKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBPKFIseixLKXtmdW5jdGlvbiBJKGosVil7aWYoIXpbal0pe2lmKCFSW2pdKXtp'@;
put 'ZihrKXJldHVybiBrKGosITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2orIiciKX12YXIgWT16W2pdPXtleHBvcnRzOnt9fTtSW2pdWzBdLmNhbGwoWS5leHBvcnRzLGZ1bmN0aW9uKFgpe3JldHVybiBJKFJbal1bMV1bWF18fFgpfSxZLFkuZXhwb3J0cyxPLFIs'@;
put 'eixLKX1yZXR1cm4geltqXS5leHBvcnRzfWZvcih2YXIgaz12b2lkIDAsRT0wO0U8Sy5sZW5ndGg7RSsrKUkoS1tFXSk7cmV0dXJuIEl9KHsxOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0'@;
put 'dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ei5lbmNvZGU9ZnVuY3Rpb24oSSxrKXtmb3IodmFyIGosVixCLFksWCxVLHEsRT0iIixlZT0wO2VlPEkubGVuZ3RoOylZPShqPUkuY2hhckNvZGVBdChlZSsrKSk+PjIsWD0oMyZqKTw8NHwoVj1JLmNoYXJDb2RlQXQoZWUrKykpPj40LFU9KDE1JlYpPDwy'@;
put 'fChCPUkuY2hhckNvZGVBdChlZSsrKSk+PjYscT02MyZCLGlzTmFOKFYpP1U9cT02NDppc05hTihCKSYmKHE9NjQpLEU9RStLLmNoYXJBdChZKStLLmNoYXJBdChYKStLLmNoYXJBdChVKStLLmNoYXJBdChxKTtyZXR1cm4gRX0sei5kZWNvZGU9ZnVuY3Rpb24oSSxrKXt2YXIgVixCLFksWCxV'@;
put 'LHEsRT0iIixlZT0wO2ZvcihJPUkucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2VlPEkubGVuZ3RoOylZPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSksVj0oMTUmKFg9Sy5pbmRleE9mKEkuY2hhckF0KGVlKyspKSkpPDw0fChVPUsuaW5kZXhPZihJLmNoYXJBdChlZSsrKSkp'@;
put 'Pj4yLEI9KDMmVSk8PDZ8KHE9Sy5pbmRleE9mKEkuY2hhckF0KGVlKyspKSksRSs9U3RyaW5nLmZyb21DaGFyQ29kZShZPDwyfFg+PjQpLDY0IT1VJiYoRSs9U3RyaW5nLmZyb21DaGFyQ29kZShWKSksNjQhPXEmJihFKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEIpKTtyZXR1cm4gRX19LHt9XSwy'@;
put 'OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEsoKXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9Sy5wcm90'@;
put 'b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LFIuZXhwb3J0cz1LfSx7fV0sMzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt6LlNUT1JFPXttYWdpYzoiXDBcMCIsY29tcHJl'@;
put 'c3M6ZnVuY3Rpb24oSyl7cmV0dXJuIEt9LHVuY29tcHJlc3M6ZnVuY3Rpb24oSyl7cmV0dXJuIEt9LGNvbXByZXNzSW5wdXRUeXBlOm51bGwsdW5jb21wcmVzc0lucHV0VHlwZTpudWxsfSx6LkRFRkxBVEU9TygiLi9mbGF0ZSIpfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihPLFIseil7'@;
put 'InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKSxJPVswLDE5OTY5NTk4OTQsMzk5MzkxOTc4OCwyNTY3NTI0Nzk0LDEyNDYzNDEzNywxODg2MDU3NjE1LDM5MTU2MjE2ODUsMjY1NzM5MjAzNSwyNDkyNjgyNzQsMjA0NDUwODMyNCwzNzcyMTE1MjMwLDI1NDcxNzc4NjQsMTYyOTQxOTk1'@;
put 'LDIxMjU1NjEwMjEsMzg4NzYwNzA0NywyNDI4NDQ0MDQ5LDQ5ODUzNjU0OCwxNzg5OTI3NjY2LDQwODkwMTY2NDgsMjIyNzA2MTIxNCw0NTA1NDg4NjEsMTg0MzI1ODYwMyw0MTA3NTgwNzUzLDIyMTE2Nzc2MzksMzI1ODgzOTkwLDE2ODQ3NzcxNTIsNDI1MTEyMjA0MiwyMzIxOTI2NjM2LDMz'@;
put 'NTYzMzQ4NywxNjYxMzY1NDY1LDQxOTUzMDI3NTUsMjM2NjExNTMxNyw5OTcwNzMwOTYsMTI4MTk1Mzg4NiwzNTc5ODU1MzMyLDI3MjQ2ODgyNDIsMTAwNjg4ODE0NSwxMjU4NjA3Njg3LDM1MjQxMDE2MjksMjc2ODk0MjQ0Myw5MDEwOTc3MjIsMTExOTAwMDY4NCwzNjg2NTE3MjA2LDI4OTgw'@;
put 'NjU3MjgsODUzMDQ0NDUxLDExNzIyNjYxMDEsMzcwNTAxNTc1OSwyODgyNjE2NjY1LDY1MTc2Nzk4MCwxMzczNTAzNTQ2LDMzNjk1NTQzMDQsMzIxODEwNDU5OCw1NjU1MDcyNTMsMTQ1NDYyMTczMSwzNDg1MTExNzA1LDMwOTk0MzYzMDMsNjcxMjY2OTc0LDE1OTQxOTgwMjQsMzMyMjczMDkz'@;
put 'MCwyOTcwMzQ3ODEyLDc5NTgzNTUyNywxNDgzMjMwMjI1LDMyNDQzNjcyNzUsMzA2MDE0OTU2NSwxOTk0MTQ2MTkyLDMxMTU4NTM0LDI1NjM5MDc3NzIsNDAyMzcxNzkzMCwxOTA3NDU5NDY1LDExMjYzNzIxNSwyNjgwMTUzMjUzLDM5MDQ0MjcwNTksMjAxMzc3NjI5MCwyNTE3MjIwMzYsMjUx'@;
put 'NzIxNTM3NCwzNzc1ODMwMDQwLDIxMzc2NTY3NjMsMTQxMzc2ODEzLDI0MzkyNzc3MTksMzg2NTI3MTI5NywxODAyMTk1NDQ0LDQ3Njg2NDg2NiwyMjM4MDAxMzY4LDQwNjY1MDg4NzgsMTgxMjM3MDkyNSw0NTMwOTI3MzEsMjE4MTYyNTAyNSw0MTExNDUxMjIzLDE3MDYwODg5MDIsMzE0MDQy'@;
put 'NzA0LDIzNDQ1MzIyMDIsNDI0MDAxNzUzMiwxNjU4NjU4MjcxLDM2NjYxOTk3NywyMzYyNjcwMzIzLDQyMjQ5OTQ0MDUsMTMwMzUzNTk2MCw5ODQ5NjE0ODYsMjc0NzAwNzA5MiwzNTY5MDM3NTM4LDEyNTYxNzA4MTcsMTAzNzYwNDMxMSwyNzY1MjEwNzMzLDM1NTQwNzk5OTUsMTEzMTAxNDUw'@;
put 'Niw4Nzk2Nzk5OTYsMjkwOTI0MzQ2MiwzNjYzNzcxODU2LDExNDExMjQ0NjcsODU1ODQyMjc3LDI4NTI4MDE2MzEsMzcwODY0ODY0OSwxMzQyNTMzOTQ4LDY1NDQ1OTMwNiwzMTg4Mzk2MDQ4LDMzNzMwMTUxNzQsMTQ2NjQ3OTkwOSw1NDQxNzk2MzUsMzExMDUyMzkxMywzNDYyNTIyMDE1LDE1'@;
put 'OTE2NzEwNTQsNzAyMTM4Nzc2LDI5NjY0NjA0NTAsMzM1Mjc5OTQxMiwxNTA0OTE4ODA3LDc4MzU1MTg3MywzMDgyNjQwNDQzLDMyMzM0NDI5ODksMzk4ODI5MjM4NCwyNTk2MjU0NjQ2LDYyMzE3MDY4LDE5NTc4MTA4NDIsMzkzOTg0NTk0NSwyNjQ3ODE2MTExLDgxNDcwOTk3LDE5NDM4MDM1'@;
put 'MjMsMzgxNDkxODkzMCwyNDg5NTk2ODA0LDIyNTI3NDQzMCwyMDUzNzkwMzc2LDM4MjYxNzU3NTUsMjQ2NjkwNjAxMywxNjc4MTY3NDMsMjA5NzY1MTM3Nyw0MDI3NTUyNTgwLDIyNjU0OTAzODYsNTAzNDQ0MDcyLDE3NjIwNTA4MTQsNDE1MDQxNzI0NSwyMTU0MTI5MzU1LDQyNjUyMjIyNSwx'@;
put 'ODUyNTA3ODc5LDQyNzUzMTM1MjYsMjMxMjMxNzkyMCwyODI3NTM2MjYsMTc0MjU1NTg1Miw0MTg5NzA4MTQzLDIzOTQ4Nzc5NDUsMzk3OTE3NzYzLDE2MjIxODM2MzcsMzYwNDM5MDg4OCwyNzE0ODY2NTU4LDk1MzcyOTczMiwxMzQwMDc2NjI2LDM1MTg3MTk5ODUsMjc5NzM2MDk5OSwxMDY4'@;
put 'ODI4MzgxLDEyMTk2Mzg4NTksMzYyNDc0MTg1MCwyOTM2Njc1MTQ4LDkwNjE4NTQ2MiwxMDkwODEyNTEyLDM3NDc2NzIwMDMsMjgyNTM3OTY2OSw4MjkzMjkxMzUsMTE4MTMzNTE2MSwzNDEyMTc3ODA0LDMxNjA4MzQ4NDIsNjI4MDg1NDA4LDEzODI2MDUzNjYsMzQyMzM2OTEwOSwzMTM4MDc4'@;
put 'NDY3LDU3MDU2MjIzMywxNDI2NDAwODE1LDMzMTczMTY1NDIsMjk5ODczMzYwOCw3MzMyMzk5NTQsMTU1NTI2MTk1NiwzMjY4OTM1NTkxLDMwNTAzNjA2MjUsNzUyNDU5NDAzLDE1NDEzMjAyMjEsMjYwNzA3MTkyMCwzOTY1OTczMDMwLDE5Njk5MjI5NzIsNDA3MzU0OTgsMjYxNzgzNzIyNSwz'@;
put 'OTQzNTc3MTUxLDE5MTMwODc4NzcsODM5MDgzNzEsMjUxMjM0MTYzNCwzODAzNzQwNjkyLDIwNzUyMDg2MjIsMjEzMjYxMTEyLDI0NjMyNzI2MDMsMzg1NTk5MDI4NSwyMDk0ODU0MDcxLDE5ODk1ODg4MSwyMjYyMDI5MDEyLDQwNTcyNjA2MTAsMTc1OTM1OTk5Miw1MzQ0MTQxOTAsMjE3Njcx'@;
put 'ODU0MSw0MTM5MzI5MTE1LDE4NzM4MzYwMDEsNDE0NjY0NTY3LDIyODIyNDg5MzQsNDI3OTIwMDM2OCwxNzExNjg0NTU0LDI4NTI4MTExNiwyNDA1ODAxNzI3LDQxNjcyMTY3NDUsMTYzNDQ2Nzc5NSwzNzYyMjk3MDEsMjY4NTA2Nzg5NiwzNjA4MDA3NDA2LDEzMDg5MTg2MTIsOTU2NTQzOTM4'@;
put 'LDI4MDg1NTUxMDUsMzQ5NTk1ODI2MywxMjMxNjM2MzAxLDEwNDc0MjcwMzUsMjkzMjk1OTgxOCwzNjU0NzAzODM2LDEwODgzNTkyNzAsOTM2OTE4ZTMsMjg0NzcxNDg5OSwzNzM2ODM3ODI5LDEyMDI5MDA4NjMsODE3MjMzODk3LDMxODMzNDIxMDgsMzQwMTIzNzEzMCwxNDA0Mjc3NTUyLDYx'@;
put 'NTgxODE1MCwzMTM0MjA3NDkzLDM0NTM0MjEyMDMsMTQyMzg1NzQ0OSw2MDE0NTA0MzEsMzAwOTgzNzYxNCwzMjk0NzEwNDU2LDE1NjcxMDM3NDYsNzExOTI4NzI0LDMwMjA2Njg0NzEsMzI3MjM4MDA2NSwxNTEwMzM0MjM1LDc1NTE2NzExN107Ui5leHBvcnRzPWZ1bmN0aW9uKEUsail7aWYo'@;
put 'dHlwZW9mIEU+InUifHwhRS5sZW5ndGgpcmV0dXJuIDA7dmFyIFY9InN0cmluZyIhPT1LLmdldFR5cGVPZihFKTt0eXBlb2Ygaj4idSImJihqPTApO3ZhciBYPTA7al49LTE7Zm9yKHZhciBVPTAscT1FLmxlbmd0aDtVPHE7VSsrKVg9Vj9FW1VdOkUuY2hhckNvZGVBdChVKSxqPWo+Pj44Xklb'@;
put 'MjU1JihqXlgpXTtyZXR1cm4tMV5qfX0seyIuL3V0aWxzIjoyMX1dLDU6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpO2Z1bmN0aW9uIEkoayl7dGhpcy5kYXRhPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLmluZGV4PTB9SS5wcm90b3R5cGU9e2NoZWNr'@;
put 'T2Zmc2V0OmZ1bmN0aW9uKGspe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K2spfSxjaGVja0luZGV4OmZ1bmN0aW9uKGspe2lmKHRoaXMubGVuZ3RoPGt8fGs8MCl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIit0aGlzLmxlbmd0aCsiLCBh'@;
put 'c2tlZCBpbmRleCA9ICIraysiKS4gQ29ycnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0aW9uKGspe3RoaXMuY2hlY2tJbmRleChrKSx0aGlzLmluZGV4PWt9LHNraXA6ZnVuY3Rpb24oayl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K2spfSxieXRlQXQ6ZnVuY3Rpb24oayl7fSxyZWFk'@;
put 'SW50OmZ1bmN0aW9uKGspe3ZhciBqLEU9MDtmb3IodGhpcy5jaGVja09mZnNldChrKSxqPXRoaXMuaW5kZXgray0xO2o+PXRoaXMuaW5kZXg7ai0tKUU9KEU8PDgpK3RoaXMuYnl0ZUF0KGopO3JldHVybiB0aGlzLmluZGV4Kz1rLEV9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oayl7cmV0dXJuIEsu'@;
put 'dHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5yZWFkRGF0YShrKSl9LHJlYWREYXRhOmZ1bmN0aW9uKGspe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oayl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBrPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoMTk4MCsoaz4+'@;
put 'MjUmMTI3KSwoaz4+MjEmMTUpLTEsaz4+MTYmMzEsaz4+MTEmMzEsaz4+NSY2MywoMzEmayk8PDEpfX0sUi5leHBvcnRzPUl9LHsiLi91dGlscyI6MjF9XSw2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ouYmFzZTY0PSExLHouYmluYXJ5PSExLHouZGlyPSExLHouY3JlYXRlRm9s'@;
put 'ZGVycz0hMSx6LmRhdGU9bnVsbCx6LmNvbXByZXNzaW9uPW51bGwsei5jb21tZW50PW51bGx9LHt9XSw3OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKTt6LnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuc3RyaW5nMmJpbmFyeShJKX0s'@;
put 'ei5zdHJpbmcyVWludDhBcnJheT1mdW5jdGlvbihJKXtyZXR1cm4gSy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsSSl9LHoudWludDhBcnJheTJTdHJpbmc9ZnVuY3Rpb24oSSl7cmV0dXJuIEsudHJhbnNmb3JtVG8oInN0cmluZyIsSSl9LHouc3RyaW5nMkJsb2I9ZnVuY3Rpb24oSSl7dmFy'@;
put 'IGs9Sy50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLEkpO3JldHVybiBLLmFycmF5QnVmZmVyMkJsb2Ioayl9LHouYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihJKXtyZXR1cm4gSy5hcnJheUJ1ZmZlcjJCbG9iKEkpfSx6LnRyYW5zZm9ybVRvPWZ1bmN0aW9uKEksayl7cmV0dXJuIEsudHJh'@;
put 'bnNmb3JtVG8oSSxrKX0sei5nZXRUeXBlT2Y9ZnVuY3Rpb24oSSl7cmV0dXJuIEsuZ2V0VHlwZU9mKEkpfSx6LmNoZWNrU3VwcG9ydD1mdW5jdGlvbihJKXtyZXR1cm4gSy5jaGVja1N1cHBvcnQoSSl9LHouTUFYX1ZBTFVFXzE2QklUUz1LLk1BWF9WQUxVRV8xNkJJVFMsei5NQVhfVkFMVUVf'@;
put 'MzJCSVRTPUsuTUFYX1ZBTFVFXzMyQklUUyx6LnByZXR0eT1mdW5jdGlvbihJKXtyZXR1cm4gSy5wcmV0dHkoSSl9LHouZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKEkpe3JldHVybiBLLmZpbmRDb21wcmVzc2lvbihJKX0sei5pc1JlZ0V4cD1mdW5jdGlvbihJKXtyZXR1cm4gSy5pc1JlZ0V4'@;
put 'cChJKX19LHsiLi91dGlscyI6MjF9XSw4OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIFVpbnQzMkFycmF5PCJ1IixJPU8oInBha28iKTt6LnVuY29tcHJlc3NJbnB1dFR5cGU9'@;
put 'Sz8idWludDhhcnJheSI6ImFycmF5Iix6LmNvbXByZXNzSW5wdXRUeXBlPUs/InVpbnQ4YXJyYXkiOiJhcnJheSIsei5tYWdpYz0iXGJcMCIsei5jb21wcmVzcz1mdW5jdGlvbihrKXtyZXR1cm4gSS5kZWZsYXRlUmF3KGspfSx6LnVuY29tcHJlc3M9ZnVuY3Rpb24oayl7cmV0dXJuIEkuaW5m'@;
put 'bGF0ZVJhdyhrKX19LHtwYWtvOjI0fV0sOTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL2Jhc2U2NCIpO2Z1bmN0aW9uIEkoayxFKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoayxFKTt0aGlzLmZpbGVzPXt9LHRoaXMuY29tbWVudD1udWxs'@;
put 'LHRoaXMucm9vdD0iIixrJiZ0aGlzLmxvYWQoayxFKSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGo9bmV3IEk7Zm9yKHZhciBWIGluIHRoaXMpImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXNbVl0mJihqW1ZdPXRoaXNbVl0pO3JldHVybiBqfX0oSS5wcm90b3R5cGU9TygiLi9vYmplY3QiKSku'@;
put 'bG9hZD1PKCIuL2xvYWQiKSxJLnN1cHBvcnQ9TygiLi9zdXBwb3J0IiksSS5kZWZhdWx0cz1PKCIuL2RlZmF1bHRzIiksSS51dGlscz1PKCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyIpLEkuYmFzZTY0PXtlbmNvZGU6ZnVuY3Rpb24oayl7cmV0dXJuIEsuZW5jb2RlKGspfSxkZWNvZGU6ZnVu'@;
put 'Y3Rpb24oayl7cmV0dXJuIEsuZGVjb2RlKGspfX0sSS5jb21wcmVzc2lvbnM9TygiLi9jb21wcmVzc2lvbnMiKSxSLmV4cG9ydHM9SX0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2lvbnMiOjMsIi4vZGVmYXVsdHMiOjYsIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIjo3LCIuL2xvYWQiOjEw'@;
put 'LCIuL29iamVjdCI6MTMsIi4vc3VwcG9ydCI6MTd9XSwxMDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL2Jhc2U2NCIpLEk9TygiLi96aXBFbnRyaWVzIik7Ui5leHBvcnRzPWZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFk7Zm9yKChFPUV8fHt9KS5iYXNlNjQmJihr'@;
put 'PUsuZGVjb2RlKGspKSxqPShWPW5ldyBJKGssRSkpLmZpbGVzLEI9MDtCPGoubGVuZ3RoO0IrKyl0aGlzLmZpbGUoKFk9altCXSkuZmlsZU5hbWUsWS5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpZLmRhdGUsZGlyOlkuZGlyLGNvbW1lbnQ6'@;
put 'WS5maWxlQ29tbWVudC5sZW5ndGg/WS5maWxlQ29tbWVudDpudWxsLGNyZWF0ZUZvbGRlcnM6RS5jcmVhdGVGb2xkZXJzfSk7cmV0dXJuIFYuemlwQ29tbWVudC5sZW5ndGgmJih0aGlzLmNvbW1lbnQ9Vi56aXBDb21tZW50KSx0aGlzfX0seyIuL2Jhc2U2NCI6MSwiLi96aXBFbnRyaWVzIjoy'@;
put 'Mn1dLDExOltmdW5jdGlvbihPLFIseil7KGZ1bmN0aW9uKEspeyJ1c2Ugc3RyaWN0Ijt2YXIgST1mdW5jdGlvbigpe307aWYodHlwZW9mIEs8InUiKXt2YXIgaz0hSy5mcm9tO2lmKCFrKXRyeXtLLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtrPSEwfUk9az9mdW5jdGlvbihFLGope3JldHVy'@;
put 'biBqP25ldyBLKEUsaik6bmV3IEsoRSl9OksuZnJvbS5iaW5kKEspLEsuYWxsb2N8fChLLmFsbG9jPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgSyhFKX0pfVIuZXhwb3J0cz1mdW5jdGlvbihFLGope3JldHVybiJudW1iZXIiPT10eXBlb2YgRT9LLmFsbG9jKEUpOkkoRSxqKX0sUi5leHBvcnRz'@;
put 'LnRlc3Q9ZnVuY3Rpb24oRSl7cmV0dXJuIEsuaXNCdWZmZXIoRSl9fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTI6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91aW50OEFycmF5UmVhZGVyIik7ZnVuY3Rpb24gSShr'@;
put 'KXt0aGlzLmRhdGE9ayx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oSS5wcm90b3R5cGU9bmV3IEspLnJlYWREYXRhPWZ1bmN0aW9uKGspe3RoaXMuY2hlY2tPZmZzZXQoayk7dmFyIEU9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCtrKTty'@;
put 'ZXR1cm4gdGhpcy5pbmRleCs9ayxFfSxSLmV4cG9ydHM9SX0seyIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4fV0sMTM6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdXBwb3J0IiksST1PKCIuL3V0aWxzIiksaz1PKCIuL2NyYzMyIiksRT1PKCIuL3NpZ25hdHVyZSIp'@;
put 'LGo9TygiLi9kZWZhdWx0cyIpLFY9TygiLi9iYXNlNjQiKSxCPU8oIi4vY29tcHJlc3Npb25zIiksWT1PKCIuL2NvbXByZXNzZWRPYmplY3QiKSxYPU8oIi4vbm9kZUJ1ZmZlciIpLFU9TygiLi91dGY4IikscT1PKCIuL3N0cmluZ1dyaXRlciIpLGVlPU8oIi4vdWludDhBcnJheVdyaXRlciIp'@;
put 'LHRlPWZ1bmN0aW9uKFMpe2lmKFMuX2RhdGEgaW5zdGFuY2VvZiBZJiYoUy5fZGF0YT1TLl9kYXRhLmdldENvbnRlbnQoKSxTLm9wdGlvbnMuYmluYXJ5PSEwLFMub3B0aW9ucy5iYXNlNjQ9ITEsInVpbnQ4YXJyYXkiPT09SS5nZXRUeXBlT2YoUy5fZGF0YSkpKXt2YXIgdj1TLl9kYXRhO1Mu'@;
put 'X2RhdGE9bmV3IFVpbnQ4QXJyYXkodi5sZW5ndGgpLDAhPT12Lmxlbmd0aCYmUy5fZGF0YS5zZXQodiwwKX1yZXR1cm4gUy5fZGF0YX0sb2U9ZnVuY3Rpb24oUyl7dmFyIHY9dGUoUyk7cmV0dXJuInN0cmluZyI9PT1JLmdldFR5cGVPZih2KT8hUy5vcHRpb25zLmJpbmFyeSYmSy5ub2RlYnVm'@;
put 'ZmVyP1godiwidXRmLTgiKTpTLmFzQmluYXJ5KCk6dn0sc2U9ZnVuY3Rpb24oUyl7dmFyIHY9dGUodGhpcyk7cmV0dXJuIG51bGw9PT12fHx0eXBlb2Ygdj4idSI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJih2PVYuZGVjb2RlKHYpKSx2PVMmJnRoaXMub3B0aW9ucy5iaW5hcnk/Qy51dGY4'@;
put 'ZGVjb2RlKHYpOkkudHJhbnNmb3JtVG8oInN0cmluZyIsdiksIVMmJiF0aGlzLm9wdGlvbnMuYmluYXJ5JiYodj1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLEMudXRmOGVuY29kZSh2KSkpLHYpfSxoZT1mdW5jdGlvbihTLHYscCl7dGhpcy5uYW1lPVMsdGhpcy5kaXI9cC5kaXIsdGhpcy5kYXRl'@;
put 'PXAuZGF0ZSx0aGlzLmNvbW1lbnQ9cC5jb21tZW50LHRoaXMuX2RhdGE9dix0aGlzLm9wdGlvbnM9cCx0aGlzLl9pbml0aWFsTWV0YWRhdGE9e2RpcjpwLmRpcixkYXRlOnAuZGF0ZX19O2hlLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHNlLmNhbGwodGhpcywhMCl9LGFz'@;
put 'QmluYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHNlLmNhbGwodGhpcywhMSl9LGFzTm9kZUJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBTPW9lKHRoaXMpO3JldHVybiBJLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixTKX0sYXNVaW50OEFycmF5OmZ1bmN0aW9uKCl7dmFyIFM9b2UodGhpcyk7cmV0dXJu'@;
put 'IEkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLFMpfSxhc0FycmF5QnVmZmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIHVlPWZ1bmN0aW9uKFMsdil7dmFyIHcscD0iIjtmb3Iodz0wO3c8djt3KyspcCs9U3RyaW5nLmZyb21DaGFyQ29kZSgy'@;
put 'NTUmUyksUz4+Pj04O3JldHVybiBwfSxjZT1mdW5jdGlvbigpe3ZhciB2LHAsUz17fTtmb3Iodj0wO3Y8YXJndW1lbnRzLmxlbmd0aDt2KyspZm9yKHAgaW4gYXJndW1lbnRzW3ZdKWFyZ3VtZW50c1t2XS5oYXNPd25Qcm9wZXJ0eShwKSYmdHlwZW9mIFNbcF0+InUiJiYoU1twXT1hcmd1bWVu'@;
put 'dHNbdl1bcF0pO3JldHVybiBTfSxiPWZ1bmN0aW9uKFMsdixwKXt2YXIgSix3PUkuZ2V0VHlwZU9mKHYpO2lmKHA9ZnVuY3Rpb24oUyl7cmV0dXJuITA9PT0oUz1TfHx7fSkuYmFzZTY0JiZudWxsPT1TLmJpbmFyeSYmKFMuYmluYXJ5PSEwKSwoUz1jZShTLGopKS5kYXRlPVMuZGF0ZXx8bmV3'@;
put 'IERhdGUsbnVsbCE9PVMuY29tcHJlc3Npb24mJihTLmNvbXByZXNzaW9uPVMuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksU30ocCkscC5jcmVhdGVGb2xkZXJzJiYoSj1EKFMpKSYmSC5jYWxsKHRoaXMsSiwhMCkscC5kaXJ8fG51bGw9PT12fHx0eXBlb2Ygdj4idSIpcC5iYXNlNjQ9ITEs'@;
put 'cC5iaW5hcnk9ITEsdj1udWxsO2Vsc2UgaWYoInN0cmluZyI9PT13KXAuYmluYXJ5JiYhcC5iYXNlNjQmJiEwIT09cC5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcmJih2PUkuc3RyaW5nMmJpbmFyeSh2KSk7ZWxzZXtpZihwLmJhc2U2ND0hMSxwLmJpbmFyeT0hMCwhKHd8fHYgaW5zdGFuY2VvZiBZ'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciK1MrIicgaXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0ICEiKTsiYXJyYXlidWZmZXIiPT09dyYmKHY9SS50cmFuc2Zvcm1UbygidWludDhhcnJheSIsdikpfXZhciBuZT1uZXcgaGUoUyx2LHApO3JldHVybiB0aGlzLmZpbGVzW1Nd'@;
put 'PW5lLG5lfSxEPWZ1bmN0aW9uKFMpeyIvIj09Uy5zbGljZSgtMSkmJihTPVMuc3Vic3RyaW5nKDAsUy5sZW5ndGgtMSkpO3ZhciB2PVMubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gdj4wP1Muc3Vic3RyaW5nKDAsdik6IiJ9LEg9ZnVuY3Rpb24oUyx2KXtyZXR1cm4iLyIhPVMuc2xpY2UoLTEp'@;
put 'JiYoUys9Ii8iKSx2PXR5cGVvZiB2PCJ1IiYmdix0aGlzLmZpbGVzW1NdfHxiLmNhbGwodGhpcyxTLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOnZ9KSx0aGlzLmZpbGVzW1NdfSxOPWZ1bmN0aW9uKFMsdil7dmFyIHcscD1uZXcgWTtyZXR1cm4gUy5fZGF0YSBpbnN0YW5jZW9mIFk/KHAu'@;
put 'dW5jb21wcmVzc2VkU2l6ZT1TLl9kYXRhLnVuY29tcHJlc3NlZFNpemUscC5jcmMzMj1TLl9kYXRhLmNyYzMyLDA9PT1wLnVuY29tcHJlc3NlZFNpemV8fFMuZGlyPyh2PUIuU1RPUkUscC5jb21wcmVzc2VkQ29udGVudD0iIixwLmNyYzMyPTApOlMuX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9'@;
put 'PT12Lm1hZ2ljP3AuY29tcHJlc3NlZENvbnRlbnQ9Uy5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpOih3PVMuX2RhdGEuZ2V0Q29udGVudCgpLHAuY29tcHJlc3NlZENvbnRlbnQ9di5jb21wcmVzcyhJLnRyYW5zZm9ybVRvKHYuY29tcHJlc3NJbnB1dFR5cGUsdykpKSk6KCghKHc9b2Uo'@;
put 'UykpfHwwPT09dy5sZW5ndGh8fFMuZGlyKSYmKHY9Qi5TVE9SRSx3PSIiKSxwLnVuY29tcHJlc3NlZFNpemU9dy5sZW5ndGgscC5jcmMzMj1rKHcpLHAuY29tcHJlc3NlZENvbnRlbnQ9di5jb21wcmVzcyhJLnRyYW5zZm9ybVRvKHYuY29tcHJlc3NJbnB1dFR5cGUsdykpKSxwLmNvbXByZXNz'@;
put 'ZWRTaXplPXAuY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLHAuY29tcHJlc3Npb25NZXRob2Q9di5tYWdpYyxwfSxnPWZ1bmN0aW9uKFMsdixwLHcpe3ZhciBPZSxqZSxRZSxsdCxuZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLFUudXRmOGVuY29kZSh2Lm5hbWUpKSxkZT12LmNvbW1lbnR8fCIi'@;
put 'LGZlPUkudHJhbnNmb3JtVG8oInN0cmluZyIsVS51dGY4ZW5jb2RlKGRlKSkseGU9bmUubGVuZ3RoIT09di5uYW1lLmxlbmd0aCxMZT1mZS5sZW5ndGghPT1kZS5sZW5ndGgsRmU9di5vcHRpb25zLFdlPSIiLEtlPSIiLFllPSIiO1FlPXYuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT12LmRpcj92'@;
put 'LmRpcjpGZS5kaXIsT2U9KGx0PXYuX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09di5kYXRlP3YuZGF0ZTpGZS5kYXRlKS5nZXRIb3VycygpLE9lPDw9NixPZXw9bHQuZ2V0TWludXRlcygpLE9lPDw9NSxPZXw9bHQuZ2V0U2Vjb25kcygpLzIsamU9bHQuZ2V0RnVsbFllYXIoKS0xOTgwLGplPDw9'@;
put 'NCxqZXw9bHQuZ2V0TW9udGgoKSsxLGplPDw9NSxqZXw9bHQuZ2V0RGF0ZSgpLHhlJiYoS2U9dWUoMSwxKSt1ZShrKG5lKSw0KStuZSxXZSs9InVwIit1ZShLZS5sZW5ndGgsMikrS2UpLExlJiYoWWU9dWUoMSwxKSt1ZSh0aGlzLmNyYzMyKGZlKSw0KStmZSxXZSs9InVjIit1ZShZZS5sZW5n'@;
put 'dGgsMikrWWUpO3ZhciBQZT0iIjtyZXR1cm4gUGUrPSJcblwwIixQZSs9eGV8fExlPyJcMFxiIjoiXDBcMCIsUGUrPXAuY29tcHJlc3Npb25NZXRob2QsUGUrPXVlKE9lLDIpLFBlKz11ZShqZSwyKSxQZSs9dWUocC5jcmMzMiw0KSxQZSs9dWUocC5jb21wcmVzc2VkU2l6ZSw0KSxQZSs9dWUo'@;
put 'cC51bmNvbXByZXNzZWRTaXplLDQpLFBlKz11ZShuZS5sZW5ndGgsMiksUGUrPXVlKFdlLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpFLkxPQ0FMX0ZJTEVfSEVBREVSK1BlK25lK1dlLGRpclJlY29yZDpFLkNFTlRSQUxfRklMRV9IRUFERVIrIlx4MTRcMCIrUGUrdWUoZmUubGVuZ3RoLDIpKyJc'@;
put 'MFwwXDBcMCIrKCEwPT09UWU/Ilx4MTBcMFwwXDAiOiJcMFwwXDBcMCIpK3VlKHcsNCkrbmUrV2UrZmUsY29tcHJlc3NlZE9iamVjdDpwfX0sQz17bG9hZDpmdW5jdGlvbihTLHYpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlw'@;
put 'LWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rpb24oUyl7dmFyIHAsdyxKLG5lLHY9W107Zm9yKHAgaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KHApJiYobmU9bmV3IGhlKChKPXRoaXMuZmlsZXNbcF0pLm5hbWUsSi5fZGF0YSxjZShKLm9wdGlvbnMp'@;
put 'KSx3PXAuc2xpY2UodGhpcy5yb290Lmxlbmd0aCxwLmxlbmd0aCkscC5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZTKHcsbmUpJiZ2LnB1c2gobmUpKTtyZXR1cm4gdn0sZmlsZTpmdW5jdGlvbihTLHYscCl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKEkuaXNS'@;
put 'ZWdFeHAoUykpe3ZhciB3PVM7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiFuZS5kaXImJncudGVzdChKKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4hbmUuZGlyJiZKPT09U30pWzBdfHxudWxsfXJldHVybiBiLmNhbGwodGhpcyxT'@;
put 'PXRoaXMucm9vdCtTLHYscCksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKFMpe2lmKCFTKXJldHVybiB0aGlzO2lmKEkuaXNSZWdFeHAoUykpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiBuZS5kaXImJlMudGVzdChKKX0pO3ZhciBwPUguY2FsbCh0aGlzLHRoaXMucm9v'@;
put 'dCtTKSx3PXRoaXMuY2xvbmUoKTtyZXR1cm4gdy5yb290PXAubmFtZSx3fSxyZW1vdmU6ZnVuY3Rpb24oUyl7dmFyIHY9dGhpcy5maWxlc1tTPXRoaXMucm9vdCtTXTtpZih2fHwoIi8iIT1TLnNsaWNlKC0xKSYmKFMrPSIvIiksdj10aGlzLmZpbGVzW1NdKSx2JiYhdi5kaXIpZGVsZXRlIHRo'@;
put 'aXMuZmlsZXNbU107ZWxzZSBmb3IodmFyIHA9dGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIG5lLm5hbWUuc2xpY2UoMCxTLmxlbmd0aCk9PT1TfSksdz0wO3c8cC5sZW5ndGg7dysrKWRlbGV0ZSB0aGlzLmZpbGVzW3Bbd10ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1'@;
put 'bmN0aW9uKFMpe1M9Y2UoU3x8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksSS5jaGVja1N1cHBvcnQoUy50eXBlKTt2YXIgSixuZSxXZSx2PVtdLHA9MCx3PTAsZGU9SS50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0Zjhl'@;
put 'bmNvZGUoUy5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7Zm9yKHZhciBmZSBpbiB0aGlzLmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkoZmUpKXt2YXIgeGU9dGhpcy5maWxlc1tmZV0sTGU9eGUub3B0aW9ucy5jb21wcmVzc2lvbnx8Uy5jb21wcmVzc2lvbi50b1VwcGVy'@;
put 'Q2FzZSgpLEZlPUJbTGVdO2lmKCFGZSl0aHJvdyBuZXcgRXJyb3IoTGUrIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciBPZT1OLmNhbGwodGhpcyx4ZSxGZSksamU9Zy5jYWxsKHRoaXMsZmUseGUsT2UscCk7cCs9amUuZmlsZVJlY29yZC5sZW5ndGgrT2UuY29t'@;
put 'cHJlc3NlZFNpemUsdys9amUuZGlyUmVjb3JkLmxlbmd0aCx2LnB1c2goamUpfVdlPUUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIrdWUodi5sZW5ndGgsMikrdWUodi5sZW5ndGgsMikrdWUodyw0KSt1ZShwLDQpK3VlKGRlLmxlbmd0aCwyKStkZTt2YXIgS2U9Uy50eXBlLnRv'@;
put 'TG93ZXJDYXNlKCk7Zm9yKEo9InVpbnQ4YXJyYXkiPT09S2V8fCJhcnJheWJ1ZmZlciI9PT1LZXx8ImJsb2IiPT09S2V8fCJub2RlYnVmZmVyIj09PUtlP25ldyBlZShwK3crV2UubGVuZ3RoKTpuZXcgcShwK3crV2UubGVuZ3RoKSxuZT0wO25lPHYubGVuZ3RoO25lKyspSi5hcHBlbmQodltu'@;
put 'ZV0uZmlsZVJlY29yZCksSi5hcHBlbmQodltuZV0uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKG5lPTA7bmU8di5sZW5ndGg7bmUrKylKLmFwcGVuZCh2W25lXS5kaXJSZWNvcmQpO0ouYXBwZW5kKFdlKTt2YXIgWWU9Si5maW5hbGl6ZSgpO3N3aXRjaChTLnR5cGUu'@;
put 'dG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBJLnRyYW5zZm9ybVRvKFMudHlwZS50b0xvd2VyQ2FzZSgpLFllKTtjYXNlImJsb2IiOnJldHVybiBJLmFycmF5QnVmZmVyMkJsb2IoSS50cmFuc2Zvcm1Ubygi'@;
put 'YXJyYXlidWZmZXIiLFllKSk7Y2FzZSJiYXNlNjQiOnJldHVybiBTLmJhc2U2ND9WLmVuY29kZShZZSk6WWU7ZGVmYXVsdDpyZXR1cm4gWWV9fSxjcmMzMjpmdW5jdGlvbihTLHYpe3JldHVybiBrKFMsdil9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oUyl7cmV0dXJuIEkudHJhbnNmb3JtVG8oInN0'@;
put 'cmluZyIsVS51dGY4ZW5jb2RlKFMpKX0sdXRmOGRlY29kZTpmdW5jdGlvbihTKXtyZXR1cm4gVS51dGY4ZGVjb2RlKFMpfX07Ui5leHBvcnRzPUN9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vZGVmYXVsdHMi'@;
put 'OjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ouTE9DQUxf'@;
put 'RklMRV9IRUFERVI9IlBLXHgwM1x4MDQiLHouQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEtceDAxXHgwMiIsei5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNVx4MDYiLHouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEtceDA2XHgwNyIsei5aSVA2NF9DRU5UUkFMX0RJUkVD'@;
put 'VE9SWV9FTkQ9IlBLXHgwNlx4MDYiLHouREFUQV9ERVNDUklQVE9SPSJQS1x4MDdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL2RhdGFSZWFkZXIiKSxJPU8oIi4vdXRpbHMiKTtmdW5jdGlvbiBrKEUsail7dGhpcy5kYXRhPUUsanx8KHRoaXMu'@;
put 'ZGF0YT1JLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KGsucHJvdG90eXBlPW5ldyBLKS5ieXRlQXQ9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KEUpfSxrLnByb3RvdHlwZS5sYXN0SW5k'@;
put 'ZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKEUpfSxrLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihFKXt0aGlzLmNoZWNrT2Zmc2V0KEUpO3ZhciBqPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrRSk7cmV0dXJu'@;
put 'IHRoaXMuaW5kZXgrPUUsan0sUi5leHBvcnRzPWt9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKSxJPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtdfTtJLnByb3RvdHlwZT17YXBwZW5kOmZ1'@;
put 'bmN0aW9uKGspe2s9Sy50cmFuc2Zvcm1Ubygic3RyaW5nIixrKSx0aGlzLmRhdGEucHVzaChrKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmpvaW4oIiIpfX0sUi5leHBvcnRzPUl9LHsiLi91dGlscyI6MjF9XSwxNzpbZnVuY3Rpb24oTyxSLHopeyhmdW5jdGlvbihL'@;
put 'KXsidXNlIHN0cmljdCI7aWYoei5iYXNlNjQ9ITAsei5hcnJheT0hMCx6LnN0cmluZz0hMCx6LmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1Iix6Lm5vZGVidWZmZXI9dHlwZW9mIEs8InUiLHoudWludDhhcnJheT10eXBlb2YgVWludDhB'@;
put 'cnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil6LmJsb2I9ITE7ZWxzZXt2YXIgST1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e3ouYmxvYj0wPT09bmV3IEJsb2IoW0ldLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaHt0cnl7dmFyIEU9bmV3KHdpbmRvdy5CbG9iQnVp'@;
put 'bGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtFLmFwcGVuZChJKSx6LmJsb2I9MD09PUUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaHt6LmJsb2I9ITF9fX19KS5jYWxsKHRoaXMs'@;
put 'dHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL2RhdGFSZWFkZXIiKTtmdW5jdGlvbiBJKGspe2smJih0aGlzLmRhdGE9ayx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9'@;
put 'MCl9KEkucHJvdG90eXBlPW5ldyBLKS5ieXRlQXQ9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuZGF0YVtrXX0sSS5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oayl7Zm9yKHZhciBFPWsuY2hhckNvZGVBdCgwKSxqPWsuY2hhckNvZGVBdCgxKSxWPWsuY2hhckNvZGVB'@;
put 'dCgyKSxCPWsuY2hhckNvZGVBdCgzKSxZPXRoaXMubGVuZ3RoLTQ7WT49MDstLVkpaWYodGhpcy5kYXRhW1ldPT09RSYmdGhpcy5kYXRhW1krMV09PT1qJiZ0aGlzLmRhdGFbWSsyXT09PVYmJnRoaXMuZGF0YVtZKzNdPT09QilyZXR1cm4gWTtyZXR1cm4tMX0sSS5wcm90b3R5cGUucmVhZERh'@;
put 'dGE9ZnVuY3Rpb24oayl7aWYodGhpcy5jaGVja09mZnNldChrKSwwPT09aylyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIEU9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCtrKTtyZXR1cm4gdGhpcy5pbmRleCs9ayxFfSxSLmV4cG9ydHM9SX0seyIuL2RhdGFS'@;
put 'ZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3V0aWxzIiksST1mdW5jdGlvbihrKXt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoayksdGhpcy5pbmRleD0wfTtJLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKGspezAhPT1rLmxlbmd0aCYm'@;
put 'KGs9Sy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsayksdGhpcy5kYXRhLnNldChrLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPWsubGVuZ3RoKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sUi5leHBvcnRzPUl9LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24o'@;
put 'TyxSLHopeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIEs9TygiLi91dGlscyIpLEk9TygiLi9zdXBwb3J0Iiksaz1PKCIuL25vZGVCdWZmZXIiKSxFPW5ldyBBcnJheSgyNTYpLGo9MDtqPDI1NjtqKyspRVtqXT1qPj0yNTI/NjpqPj0yNDg/NTpqPj0yNDA/NDpqPj0yMjQ/MzpqPj0xOTI/MjoxO0Vb'@;
put 'MjU0XT1FWzI1NF09MTt2YXIgQj1mdW5jdGlvbihYLFUpe3ZhciBxO2ZvcigoVT1VfHxYLmxlbmd0aCk+WC5sZW5ndGgmJihVPVgubGVuZ3RoKSxxPVUtMTtxPj0wJiYxMjg9PSgxOTImWFtxXSk7KXEtLTtyZXR1cm4gcTwwfHwwPT09cT9VOnErRVtYW3FdXT5VP3E6VX0sWT1mdW5jdGlvbihY'@;
put 'KXt2YXIgcSxlZSx0ZSxvZSxzZT1YLmxlbmd0aCxoZT1uZXcgQXJyYXkoMipzZSk7Zm9yKGVlPTAscT0wO3E8c2U7KWlmKCh0ZT1YW3ErK10pPDEyOCloZVtlZSsrXT10ZTtlbHNlIGlmKChvZT1FW3RlXSk+NCloZVtlZSsrXT02NTUzMyxxKz1vZS0xO2Vsc2V7Zm9yKHRlJj0yPT09b2U/MzE6'@;
put 'Mz09PW9lPzE1Ojc7b2U+MSYmcTxzZTspdGU9dGU8PDZ8NjMmWFtxKytdLG9lLS07b2U+MT9oZVtlZSsrXT02NTUzMzp0ZTw2NTUzNj9oZVtlZSsrXT10ZTooaGVbZWUrK109NTUyOTZ8KHRlLT02NTUzNik+PjEwJjEwMjMsaGVbZWUrK109NTYzMjB8MTAyMyZ0ZSl9cmV0dXJuIGhlLmxlbmd0'@;
put 'aCE9PWVlJiYoaGUuc3ViYXJyYXk/aGU9aGUuc3ViYXJyYXkoMCxlZSk6aGUubGVuZ3RoPWVlKSxLLmFwcGx5RnJvbUNoYXJDb2RlKGhlKX07ei51dGY4ZW5jb2RlPWZ1bmN0aW9uKFUpe3JldHVybiBJLm5vZGVidWZmZXI/ayhVLCJ1dGYtOCIpOmZ1bmN0aW9uKFgpe3ZhciBVLHEsZWUsdGUs'@;
put 'b2Usc2U9WC5sZW5ndGgsaGU9MDtmb3IodGU9MDt0ZTxzZTt0ZSsrKTU1Mjk2PT0oNjQ1MTImKHE9WC5jaGFyQ29kZUF0KHRlKSkpJiZ0ZSsxPHNlJiY1NjMyMD09KDY0NTEyJihlZT1YLmNoYXJDb2RlQXQodGUrMSkpKSYmKHE9NjU1MzYrKHEtNTUyOTY8PDEwKSsoZWUtNTYzMjApLHRlKysp'@;
put 'LGhlKz1xPDEyOD8xOnE8MjA0OD8yOnE8NjU1MzY/Mzo0O2ZvcihVPUkudWludDhhcnJheT9uZXcgVWludDhBcnJheShoZSk6bmV3IEFycmF5KGhlKSxvZT0wLHRlPTA7b2U8aGU7dGUrKyk1NTI5Nj09KDY0NTEyJihxPVguY2hhckNvZGVBdCh0ZSkpKSYmdGUrMTxzZSYmNTYzMjA9PSg2NDUx'@;
put 'MiYoZWU9WC5jaGFyQ29kZUF0KHRlKzEpKSkmJihxPTY1NTM2KyhxLTU1Mjk2PDwxMCkrKGVlLTU2MzIwKSx0ZSsrKSxxPDEyOD9VW29lKytdPXE6cTwyMDQ4PyhVW29lKytdPTE5MnxxPj4+NixVW29lKytdPTEyOHw2MyZxKTpxPDY1NTM2PyhVW29lKytdPTIyNHxxPj4+MTIsVVtvZSsrXT0x'@;
put 'Mjh8cT4+PjYmNjMsVVtvZSsrXT0xMjh8NjMmcSk6KFVbb2UrK109MjQwfHE+Pj4xOCxVW29lKytdPTEyOHxxPj4+MTImNjMsVVtvZSsrXT0xMjh8cT4+PjYmNjMsVVtvZSsrXT0xMjh8NjMmcSk7cmV0dXJuIFV9KFUpfSx6LnV0ZjhkZWNvZGU9ZnVuY3Rpb24oVSl7aWYoSS5ub2RlYnVmZmVy'@;
put 'KXJldHVybiBLLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixVKS50b1N0cmluZygidXRmLTgiKTtmb3IodmFyIHE9W10sZWU9MCx0ZT0oVT1LLnRyYW5zZm9ybVRvKEkudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixVKSkubGVuZ3RoO2VlPHRlOyl7dmFyIHNlPUIoVSxNYXRoLm1p'@;
put 'bihlZSs2NTUzNix0ZSkpO3EucHVzaChZKEkudWludDhhcnJheT9VLnN1YmFycmF5KGVlLHNlKTpVLnNsaWNlKGVlLHNlKSkpLGVlPXNlfXJldHVybiBxLmpvaW4oIiIpfX0seyIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3LCIuL3V0aWxzIjoyMX1dLDIxOltmdW5jdGlvbihPLFIs'@;
put 'eil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vc3VwcG9ydCIpLEk9TygiLi9jb21wcmVzc2lvbnMiKSxrPU8oIi4vbm9kZUJ1ZmZlciIpO2Z1bmN0aW9uIEUoWCl7cmV0dXJuIFh9ZnVuY3Rpb24gaihYLFUpe2Zvcih2YXIgcT0wO3E8WC5sZW5ndGg7KytxKVVbcV09MjU1JlguY2hhckNvZGVB'@;
put 'dChxKTtyZXR1cm4gVX1mdW5jdGlvbiBWKFgpe3ZhciBVPTY1NTM2LHE9W10sZWU9WC5sZW5ndGgsdGU9ei5nZXRUeXBlT2YoWCksb2U9MCxzZT0hMDt0cnl7c3dpdGNoKHRlKXtjYXNlInVpbnQ4YXJyYXkiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgw'@;
put 'KSk7YnJlYWs7Y2FzZSJub2RlYnVmZmVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsaygwKSl9fWNhdGNoe3NlPSExfWlmKCFzZSl7Zm9yKHZhciBoZT0iIix1ZT0wO3VlPFgubGVuZ3RoO3VlKyspaGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWFt1ZV0pO3JldHVybiBoZX1mb3Io'@;
put 'O29lPGVlJiZVPjE7KXRyeXtxLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT10ZXx8Im5vZGVidWZmZXIiPT09dGU/WC5zbGljZShvZSxNYXRoLm1pbihvZStVLGVlKSk6WC5zdWJhcnJheShvZSxNYXRoLm1pbihvZStVLGVlKSkpKSxvZSs9VX1jYXRjaHtV'@;
put 'PU1hdGguZmxvb3IoVS8yKX1yZXR1cm4gcS5qb2luKCIiKX1mdW5jdGlvbiBCKFgsVSl7Zm9yKHZhciBxPTA7cTxYLmxlbmd0aDtxKyspVVtxXT1YW3FdO3JldHVybiBVfXouc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihYKXtmb3IodmFyIFU9IiIscT0wO3E8WC5sZW5ndGg7cSsrKVUrPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoMjU1JlguY2hhckNvZGVBdChxKSk7cmV0dXJuIFV9LHouYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihYKXt6LmNoZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW1hdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2h7dHJ5e3ZhciBx'@;
put 'PW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7cmV0dXJuIHEuYXBwZW5kKFgpLHEuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2h7dGhyb3cgbmV3IEVycm9y'@;
put 'KCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sei5hcHBseUZyb21DaGFyQ29kZT1WO3ZhciBZPXt9O1kuc3RyaW5nPXtzdHJpbmc6RSxhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4gaihYLG5ldyBBcnJheShYLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXty'@;
put 'ZXR1cm4gWS5zdHJpbmcudWludDhhcnJheShYKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIGooWCxuZXcgVWludDhBcnJheShYLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBqKFgsayhYLmxlbmd0aCkpfX0sWS5hcnJheT17c3RyaW5nOlYs'@;
put 'YXJyYXk6RSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWCkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBuZXcgVWludDhBcnJheShYKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gayhYKX19LFkuYXJyYXlidWZmZXI9'@;
put 'e3N0cmluZzpmdW5jdGlvbihYKXtyZXR1cm4gVihuZXcgVWludDhBcnJheShYKSl9LGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBCKG5ldyBVaW50OEFycmF5KFgpLG5ldyBBcnJheShYLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6RSx1aW50OGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBu'@;
put 'ZXcgVWludDhBcnJheShYKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gayhuZXcgVWludDhBcnJheShYKSl9fSxZLnVpbnQ4YXJyYXk9e3N0cmluZzpWLGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBCKFgsbmV3IEFycmF5KFgubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9u'@;
put 'KFgpe3JldHVybiBYLmJ1ZmZlcn0sdWludDhhcnJheTpFLG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGsoWCl9fSxZLm5vZGVidWZmZXI9e3N0cmluZzpWLGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBCKFgsbmV3IEFycmF5KFgubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9u'@;
put 'KFgpe3JldHVybiBZLm5vZGVidWZmZXIudWludDhhcnJheShYKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIEIoWCxuZXcgVWludDhBcnJheShYLmxlbmd0aCkpfSxub2RlYnVmZmVyOkV9LHoudHJhbnNmb3JtVG89ZnVuY3Rpb24oWCxVKXtpZihVfHwoVT0iIiksIVgp'@;
put 'cmV0dXJuIFU7ei5jaGVja1N1cHBvcnQoWCk7dmFyIHE9ei5nZXRUeXBlT2YoVSk7cmV0dXJuIFlbcV1bWF0oVSl9LHouZ2V0VHlwZU9mPWZ1bmN0aW9uKFgpe3JldHVybiJzdHJpbmciPT10eXBlb2YgWD8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0'@;
put 'cmluZy5jYWxsKFgpPyJhcnJheSI6Sy5ub2RlYnVmZmVyJiZrLnRlc3QoWCk/Im5vZGVidWZmZXIiOksudWludDhhcnJheSYmWCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOksuYXJyYXlidWZmZXImJlggaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8iYXJyYXlidWZmZXIiOnZv'@;
put 'aWQgMH0sei5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oWCl7aWYoIUtbWC50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoWCsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyIil9LHouTUFYX1ZBTFVFXzE2QklUUz02NTUzNSx6Lk1BWF9WQUxVRV8zMkJJVFM9LTEsei5wcmV0'@;
put 'dHk9ZnVuY3Rpb24oWCl7dmFyIHEsZWUsVT0iIjtmb3IoZWU9MDtlZTwoWHx8IiIpLmxlbmd0aDtlZSsrKVUrPSJcXHgiKygocT1YLmNoYXJDb2RlQXQoZWUpKTwxNj8iMCI6IiIpK3EudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIFV9LHouZmluZENvbXByZXNzaW9uPWZ1bmN0'@;
put 'aW9uKFgpe2Zvcih2YXIgVSBpbiBJKWlmKEkuaGFzT3duUHJvcGVydHkoVSkmJklbVV0ubWFnaWM9PT1YKXJldHVybiBJW1VdO3JldHVybiBudWxsfSx6LmlzUmVnRXhwPWZ1bmN0aW9uKFgpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs'@;
put 'KFgpfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vc3RyaW5nUmVhZGVyIiksST1PKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxrPU8oIi4vdWludDhBcnJheVJl'@;
put 'YWRlciIpLEU9TygiLi91dGlscyIpLGo9TygiLi9zaWduYXR1cmUiKSxWPU8oIi4vemlwRW50cnkiKSxCPU8oIi4vc3VwcG9ydCIpLFk9TygiLi9vYmplY3QiKTtmdW5jdGlvbiBYKFUscSl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPXEsVSYmdGhpcy5sb2FkKFUpfVgucHJvdG90'@;
put 'eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihVKXt2YXIgcT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKHEhPT1VKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitFLnByZXR0eShxKSsiLCBleHBlY3RlZCAiK0Uu'@;
put 'cHJldHR5KFUpKyIpIil9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25U'@;
put 'aGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCks'@;
put 'dGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy56aXBDb21tZW50PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGhpcy56aXBDb21tZW50TGVuZ3RoKSx0aGlzLnppcENvbW1lbnQ9WS51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCl9LHJlYWRCbG9ja1pp'@;
put 'cDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnZlcnNpb25NYWRlQnk9dGhpcy5yZWFkZXIucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0'@;
put 'aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNv'@;
put 'cmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGVlLHRlLG9lLFU9dGhp'@;
put 'cy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxVOyllZT10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRlPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksb2U9dGhpcy5yZWFkZXIucmVhZFN0cmluZyh0ZSksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2VlXT17aWQ6ZWUsbGVuZ3RoOnRlLHZhbHVl'@;
put 'Om9lfX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJl'@;
put 'YWRJbnQoOCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrc0NvdW50PjEpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBVLHE7Zm9yKFU9MDtV'@;
put 'PHRoaXMuZmlsZXMubGVuZ3RoO1UrKyl0aGlzLnJlYWRlci5zZXRJbmRleCgocT10aGlzLmZpbGVzW1VdKS5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShqLkxPQ0FMX0ZJTEVfSEVBREVSKSxxLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLHEuaGFuZGxlVVRGOCgp'@;
put 'fSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBVO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1qLkNFTlRSQUxfRklMRV9IRUFERVI7KShVPW5ldyBWKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlz'@;
put 'LmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goVSl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgVT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShqLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1V'@;
put 'KXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgoVSksdGhpcy5jaGVja1NpZ25hdHVyZShqLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNl'@;
put 'bnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1FLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1FLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxE'@;
put 'aXJSZWNvcmRzPT09RS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09RS5NQVhfVkFMVUVfMzJCSVRTfHx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9PT1FLk1BWF9WQUxVRV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsLTE9PT0oVT10aGlzLnJlYWRlci5sYXN0SW5kZXhP'@;
put 'ZlNpZ25hdHVyZShqLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KFUpLHRoaXMu'@;
put 'Y2hlY2tTaWduYXR1cmUoai5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1Np'@;
put 'Z25hdHVyZShqLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihVKXt2YXIgcT1FLmdldFR5cGVPZihVKTt0aGlzLnJlYWRlcj0ic3RyaW5nIiE9PXF8fEIudWludDhhcnJheT8ibm9k'@;
put 'ZWJ1ZmZlciI9PT1xP25ldyBJKFUpOm5ldyBrKEUudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLFUpKTpuZXcgSyhVLHRoaXMubG9hZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKX0sbG9hZDpmdW5jdGlvbihVKXt0aGlzLnByZXBhcmVSZWFkZXIoVSksdGhpcy5yZWFkRW5kT2ZDZW50'@;
put 'cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LFIuZXhwb3J0cz1YfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhB'@;
put 'cnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vc3RyaW5nUmVhZGVyIiksST1PKCIuL3V0aWxzIiksaz1PKCIuL2NvbXByZXNzZWRPYmplY3QiKSxFPU8oIi4vb2JqZWN0Iik7ZnVu'@;
put 'Y3Rpb24gaihWLEIpe3RoaXMub3B0aW9ucz1WLHRoaXMubG9hZE9wdGlvbnM9Qn1qLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiAyMDQ4PT0oMjA0OCZ0aGlzLmJpdEZsYWcpfSxw'@;
put 'cmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oVixCLFkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBYPVYuaW5kZXg7Vi5zZXRJbmRleChCKTt2YXIgVT1WLnJlYWREYXRhKFkpO3JldHVybiBWLnNldEluZGV4KFgpLFV9fSxwcmVwYXJlQ29udGVudDpmdW5jdGlvbihWLEIsWSxYLFUp'@;
put 'e3JldHVybiBmdW5jdGlvbigpe3ZhciBxPUkudHJhbnNmb3JtVG8oWC51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSksZWU9WC51bmNvbXByZXNzKHEpO2lmKGVlLmxlbmd0aCE9PVUpdGhyb3cgbmV3IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0'@;
put 'YSBzaXplIG1pc21hdGNoIik7cmV0dXJuIGVlfX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihWKXt2YXIgQixZO2lmKFYuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1WLnJlYWRJbnQoMiksWT1WLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1WLnJlYWRTdHJpbmcodGhpcy5maWxlTmFt'@;
put 'ZUxlbmd0aCksVi5za2lwKFkpLC0xPT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3Rv'@;
put 'cnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYobnVsbD09PShCPUkuZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK0kucHJldHR5'@;
put 'KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsiKSIpO2lmKHRoaXMuZGVjb21wcmVzc2VkPW5ldyBrLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNz'@;
put 'ZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9dGhpcy5jcmMzMix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9kLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNz'@;
put 'ZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KFYsVi5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLEIpLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChWLFYuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxCLHRoaXMudW5jb21w'@;
put 'cmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5jaGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9SS50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLEUuY3JjMzIodGhpcy5kZWNvbXByZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIgbWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKFYpe2lmKHRoaXMudmVyc2lvbk1hZGVCeT1WLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPVYucmVhZEludCgyKSx0aGlzLmJpdEZsYWc9Vi5yZWFkSW50KDIp'@;
put 'LHRoaXMuY29tcHJlc3Npb25NZXRob2Q9Vi5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1WLnJlYWREYXRlKCksdGhpcy5jcmMzMj1WLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1WLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPVYucmVhZEludCg0KSx0aGlzLmZpbGVO'@;
put 'YW1lTGVuZ3RoPVYucmVhZEludCgyKSx0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPVYucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPVYucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1WLnJlYWRJbnQoMiksdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPVYucmVhZElu'@;
put 'dCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9Vi5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Vi5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1l'@;
put 'PVYucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhWKSx0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKFYpLHRoaXMuZmlsZUNvbW1lbnQ9Vi5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpLHRoaXMuZGlyPSEhKDE2JnRoaXMuZXh0'@;
put 'ZXJuYWxGaWxlQXR0cmlidXRlcyl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKFYpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBCPW5ldyBLKHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2VkU2l6ZT09PUkuTUFYX1ZBTFVFXzMyQklUUyYmKHRo'@;
put 'aXMudW5jb21wcmVzc2VkU2l6ZT1CLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1JLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPUIucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09PUkuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9j'@;
put 'YWxIZWFkZXJPZmZzZXQ9Qi5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PUkuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PUIucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24oVil7dmFyIFksWCxVLEI9Vi5pbmRleDtmb3IodGhp'@;
put 'cy5leHRyYUZpZWxkcz10aGlzLmV4dHJhRmllbGRzfHx7fTtWLmluZGV4PEIrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDspWT1WLnJlYWRJbnQoMiksWD1WLnJlYWRJbnQoMiksVT1WLnJlYWRTdHJpbmcoWCksdGhpcy5leHRyYUZpZWxkc1tZXT17aWQ6WSxsZW5ndGg6WCx2YWx1ZTpVfX0saGFu'@;
put 'ZGxlVVRGODpmdW5jdGlvbigpe2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWU9RS51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9RS51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIFY9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQ'@;
put 'YXRoKCk7bnVsbCE9PVYmJih0aGlzLmZpbGVOYW1lPVYpO3ZhciBCPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO251bGwhPT1CJiYodGhpcy5maWxlQ29tbWVudD1CKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLmV4dHJhRmll'@;
put 'bGRzWzI4Nzg5XTtpZihWKXt2YXIgQj1uZXcgSyhWLnZhbHVlKTtyZXR1cm4gMSE9PUIucmVhZEludCgxKXx8RS5jcmMzMih0aGlzLmZpbGVOYW1lKSE9PUIucmVhZEludCg0KT9udWxsOkUudXRmOGRlY29kZShCLnJlYWRTdHJpbmcoVi5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0'@;
put 'cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoVil7dmFyIEI9bmV3IEsoVi52YWx1ZSk7cmV0dXJuIDEhPT1CLnJlYWRJbnQoMSl8fEUuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1CLnJlYWRJbnQoNCk/bnVsbDpFLnV0'@;
put 'ZjhkZWNvZGUoQi5yZWFkU3RyaW5nKFYubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LFIuZXhwb3J0cz1qfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmlj'@;
put 'dCI7dmFyIGo9e307KDAsTygiLi9saWIvdXRpbHMvY29tbW9uIikuYXNzaWduKShqLE8oIi4vbGliL2RlZmxhdGUiKSxPKCIuL2xpYi9pbmZsYXRlIiksTygiLi9saWIvemxpYi9jb25zdGFudHMiKSksUi5leHBvcnRzPWp9LHsiLi9saWIvZGVmbGF0ZSI6MjUsIi4vbGliL2luZmxhdGUiOjI2'@;
put 'LCIuL2xpYi91dGlscy9jb21tb24iOjI3LCIuL2xpYi96bGliL2NvbnN0YW50cyI6MzB9XSwyNTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3psaWIvZGVmbGF0ZS5qcyIpLEk9TygiLi91dGlscy9jb21tb24iKSxrPU8oIi4vdXRpbHMvc3RyaW5ncyIpLEU9Tygi'@;
put 'Li96bGliL21lc3NhZ2VzIiksaj1PKCIuL3psaWIvenN0cmVhbSIpLHRlPWZ1bmN0aW9uKHVlKXt0aGlzLm9wdGlvbnM9SS5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzoiIn0sdWV8fHt9KTt2'@;
put 'YXIgY2U9dGhpcy5vcHRpb25zO2NlLnJhdyYmY2Uud2luZG93Qml0cz4wP2NlLndpbmRvd0JpdHM9LWNlLndpbmRvd0JpdHM6Y2UuZ3ppcCYmY2Uud2luZG93Qml0cz4wJiZjZS53aW5kb3dCaXRzPDE2JiYoY2Uud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5l'@;
put 'bmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGosdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBHPUsuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxjZS5sZXZlbCxjZS5tZXRob2QsY2Uud2luZG93Qml0cyxjZS5tZW1MZXZlbCxjZS5zdHJhdGVneSk7aWYoMCE9PUcpdGhyb3cg'@;
put 'bmV3IEVycm9yKEVbR10pO2NlLmhlYWRlciYmSy5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxjZS5oZWFkZXIpfTtmdW5jdGlvbiBvZSh1ZSxjZSl7dmFyIEc9bmV3IHRlKGNlKTtpZihHLnB1c2godWUsITApLEcuZXJyKXRocm93IEcubXNnO3JldHVybiBHLnJlc3VsdH10ZS5wcm90b3R5'@;
put 'cGUucHVzaD1mdW5jdGlvbih1ZSxjZSl7dmFyIEQsSCxHPXRoaXMuc3RybSxiPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtIPWNlPT09fn5jZT9jZTohMD09PWNlPzQ6MCxHLmlucHV0PSJzdHJpbmciPT10eXBlb2YgdWU/ay5zdHJpbmcyYnVmKHVlKTp1'@;
put 'ZSxHLm5leHRfaW49MCxHLmF2YWlsX2luPUcuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1HLmF2YWlsX291dCYmKEcub3V0cHV0PW5ldyBJLkJ1ZjgoYiksRy5uZXh0X291dD0wLEcuYXZhaWxfb3V0PWIpLDEhPT0oRD1LLmRlZmxhdGUoRyxIKSkmJjAhPT1EKXJldHVybiB0aGlzLm9uRW5kKEQp'@;
put 'LHRoaXMuZW5kZWQ9ITAsITE7KDA9PT1HLmF2YWlsX291dHx8MD09PUcuYXZhaWxfaW4mJjQ9PT1IKSYmdGhpcy5vbkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/ay5idWYyYmluc3RyaW5nKEkuc2hyaW5rQnVmKEcub3V0cHV0LEcubmV4dF9vdXQpKTpJLnNocmlua0J1ZihHLm91'@;
put 'dHB1dCxHLm5leHRfb3V0KSl9d2hpbGUoKEcuYXZhaWxfaW4+MHx8MD09PUcuYXZhaWxfb3V0KSYmMSE9PUQpO3JldHVybiA0IT09SHx8KEQ9Sy5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChEKSx0aGlzLmVuZGVkPSEwLDA9PT1EKX0sdGUucHJvdG90eXBlLm9uRGF0YT1mdW5j'@;
put 'dGlvbih1ZSl7dGhpcy5jaHVua3MucHVzaCh1ZSl9LHRlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih1ZSl7MD09PXVlJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6SS5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhp'@;
put 'cy5jaHVua3M9W10sdGhpcy5lcnI9dWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sei5EZWZsYXRlPXRlLHouZGVmbGF0ZT1vZSx6LmRlZmxhdGVSYXc9ZnVuY3Rpb24gc2UodWUsY2Upe3JldHVybihjZT1jZXx8e30pLnJhdz0hMCxvZSh1ZSxjZSl9LHouZ3ppcD1mdW5jdGlvbiBoZSh1ZSxj'@;
put 'ZSl7cmV0dXJuKGNlPWNlfHx7fSkuZ3ppcD0hMCxvZSh1ZSxjZSl9fSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oTyxS'@;
put 'LHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3psaWIvaW5mbGF0ZS5qcyIpLEk9TygiLi91dGlscy9jb21tb24iKSxrPU8oIi4vdXRpbHMvc3RyaW5ncyIpLEU9TygiLi96bGliL2NvbnN0YW50cyIpLGo9TygiLi96bGliL21lc3NhZ2VzIiksVj1PKCIuL3psaWIvenN0cmVhbSIpLEI9Tygi'@;
put 'Li96bGliL2d6aGVhZGVyIiksWT1mdW5jdGlvbihxKXt0aGlzLm9wdGlvbnM9SS5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LHF8fHt9KTt2YXIgZWU9dGhpcy5vcHRpb25zO2VlLnJhdyYmZWUud2luZG93Qml0cz49MCYmZWUud2luZG93Qml0czwxNiYmKGVl'@;
put 'LndpbmRvd0JpdHM9LWVlLndpbmRvd0JpdHMsMD09PWVlLndpbmRvd0JpdHMmJihlZS53aW5kb3dCaXRzPS0xNSkpLGVlLndpbmRvd0JpdHM+PTAmJmVlLndpbmRvd0JpdHM8MTYmJiEocSYmcS53aW5kb3dCaXRzKSYmKGVlLndpbmRvd0JpdHMrPTMyKSxlZS53aW5kb3dCaXRzPjE1JiZlZS53'@;
put 'aW5kb3dCaXRzPDQ4JiYoMTUmZWUud2luZG93Qml0c3x8KGVlLndpbmRvd0JpdHN8PTE1KSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgVix0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIHRlPUsuaW5mbGF0ZUluaXQy'@;
put 'KHRoaXMuc3RybSxlZS53aW5kb3dCaXRzKTtpZih0ZSE9PUUuWl9PSyl0aHJvdyBuZXcgRXJyb3Ioalt0ZV0pO3RoaXMuaGVhZGVyPW5ldyBCLEsuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfTtmdW5jdGlvbiBYKHEsZWUpe3ZhciB0ZT1uZXcgWShlZSk7aWYodGUu'@;
put 'cHVzaChxLCEwKSx0ZS5lcnIpdGhyb3cgdGUubXNnO3JldHVybiB0ZS5yZXN1bHR9WS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihxLGVlKXt2YXIgc2UsaGUsdWUsY2UsRyx0ZT10aGlzLnN0cm0sb2U9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO2hlPWVl'@;
put 'PT09fn5lZT9lZTohMD09PWVlP0UuWl9GSU5JU0g6RS5aX05PX0ZMVVNILHRlLmlucHV0PSJzdHJpbmciPT10eXBlb2YgcT9rLmJpbnN0cmluZzJidWYocSk6cSx0ZS5uZXh0X2luPTAsdGUuYXZhaWxfaW49dGUuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT10ZS5hdmFpbF9vdXQmJih0ZS5vdXRw'@;
put 'dXQ9bmV3IEkuQnVmOChvZSksdGUubmV4dF9vdXQ9MCx0ZS5hdmFpbF9vdXQ9b2UpLChzZT1LLmluZmxhdGUodGUsRS5aX05PX0ZMVVNIKSkhPT1FLlpfU1RSRUFNX0VORCYmc2UhPT1FLlpfT0spcmV0dXJuIHRoaXMub25FbmQoc2UpLHRoaXMuZW5kZWQ9ITAsITE7dGUubmV4dF9vdXQmJigw'@;
put 'PT09dGUuYXZhaWxfb3V0fHxzZT09PUUuWl9TVFJFQU1fRU5EfHwwPT09dGUuYXZhaWxfaW4mJmhlPT09RS5aX0ZJTklTSCkmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz8odWU9ay51dGY4Ym9yZGVyKHRlLm91dHB1dCx0ZS5uZXh0X291dCksY2U9dGUubmV4dF9vdXQtdWUsRz1rLmJ1'@;
put 'ZjJzdHJpbmcodGUub3V0cHV0LHVlKSx0ZS5uZXh0X291dD1jZSx0ZS5hdmFpbF9vdXQ9b2UtY2UsY2UmJkkuYXJyYXlTZXQodGUub3V0cHV0LHRlLm91dHB1dCx1ZSxjZSwwKSx0aGlzLm9uRGF0YShHKSk6dGhpcy5vbkRhdGEoSS5zaHJpbmtCdWYodGUub3V0cHV0LHRlLm5leHRfb3V0KSkp'@;
put 'fXdoaWxlKHRlLmF2YWlsX2luPjAmJnNlIT09RS5aX1NUUkVBTV9FTkQpO3JldHVybiBzZT09PUUuWl9TVFJFQU1fRU5EJiYoaGU9RS5aX0ZJTklTSCksaGUhPT1FLlpfRklOSVNIfHwoc2U9Sy5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChzZSksdGhpcy5lbmRlZD0hMCxzZT09'@;
put 'PUUuWl9PSyl9LFkucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihxKXt0aGlzLmNodW5rcy5wdXNoKHEpfSxZLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihxKXtxPT09RS5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6'@;
put 'SS5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9cSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSx6LkluZmxhdGU9WSx6LmluZmxhdGU9WCx6LmluZmxhdGVSYXc9ZnVuY3Rpb24gVShxLGVlKXtyZXR1cm4oZWU9ZWV8fHt9KS5yYXc9ITAsWChxLGVl'@;
put 'KX0sei51bmd6aXA9WH0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9jb25zdGFudHMiOjMwLCIuL3psaWIvZ3poZWFkZXIiOjMzLCIuL3psaWIvaW5mbGF0ZS5qcyI6MzUsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1d'@;
put 'LDI3OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIEludDMyQXJyYXk8InUiO3ouYXNzaWduPWZ1bmN0aW9uKEUpe2Zvcih2YXIgaj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs'@;
put 'bChhcmd1bWVudHMsMSk7ai5sZW5ndGg7KXt2YXIgVj1qLnNoaWZ0KCk7aWYoVil7aWYoIm9iamVjdCIhPXR5cGVvZiBWKXRocm93IG5ldyBUeXBlRXJyb3IoVisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBCIGluIFYpVi5oYXNPd25Qcm9wZXJ0eShCKSYmKEVbQl09VltCXSl9fXJl'@;
put 'dHVybiBFfSx6LnNocmlua0J1Zj1mdW5jdGlvbihFLGope3JldHVybiBFLmxlbmd0aD09PWo/RTpFLnN1YmFycmF5P0Uuc3ViYXJyYXkoMCxqKTooRS5sZW5ndGg9aixFKX07dmFyIEk9e2FycmF5U2V0OmZ1bmN0aW9uKEUsaixWLEIsWSl7aWYoai5zdWJhcnJheSYmRS5zdWJhcnJheSlFLnNl'@;
put 'dChqLnN1YmFycmF5KFYsVitCKSxZKTtlbHNlIGZvcih2YXIgWD0wO1g8QjtYKyspRVtZK1hdPWpbVitYXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihFKXt2YXIgaixWLEIsWSxYLFU7Zm9yKEI9MCxqPTAsVj1FLmxlbmd0aDtqPFY7aisrKUIrPUVbal0ubGVuZ3RoO2ZvcihVPW5ldyBVaW50'@;
put 'OEFycmF5KEIpLFk9MCxqPTAsVj1FLmxlbmd0aDtqPFY7aisrKVUuc2V0KFg9RVtqXSxZKSxZKz1YLmxlbmd0aDtyZXR1cm4gVX19LGs9e2FycmF5U2V0OmZ1bmN0aW9uKEUsaixWLEIsWSl7Zm9yKHZhciBYPTA7WDxCO1grKylFW1krWF09altWK1hdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9u'@;
put 'KEUpe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxFKX19O3ouc2V0VHlwZWQ9ZnVuY3Rpb24oRSl7RT8oei5CdWY4PVVpbnQ4QXJyYXksei5CdWYxNj1VaW50MTZBcnJheSx6LkJ1ZjMyPUludDMyQXJyYXksei5hc3NpZ24oeixJKSk6KHouQnVmOD1BcnJheSx6LkJ1ZjE2PUFycmF5LHouQnVm'@;
put 'MzI9QXJyYXksei5hc3NpZ24oeixrKSl9LHouc2V0VHlwZWQoSyl9LHt9XSwyODpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL2NvbW1vbiIpLEk9ITAsaz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7ST0hMX10cnl7U3Ry'@;
put 'aW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHtrPSExfWZvcih2YXIgRT1uZXcgSy5CdWY4KDI1Niksaj0wO2o8MjU2O2orKylFW2pdPWo+PTI1Mj82Omo+PTI0OD81Omo+PTI0MD80Omo+PTIyND8zOmo+PTE5Mj8yOjE7ZnVuY3Rpb24gVihCLFkp'@;
put 'e2lmKFk8NjU1MzcmJihCLnN1YmFycmF5JiZrfHwhQi5zdWJhcnJheSYmSSkpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxLLnNocmlua0J1ZihCLFkpKTtmb3IodmFyIFg9IiIsVT0wO1U8WTtVKyspWCs9U3RyaW5nLmZyb21DaGFyQ29kZShCW1VdKTtyZXR1cm4gWH1F'@;
put 'WzI1NF09RVsyNTRdPTEsei5zdHJpbmcyYnVmPWZ1bmN0aW9uKEIpe3ZhciBZLFgsVSxxLGVlLHRlPUIubGVuZ3RoLG9lPTA7Zm9yKHE9MDtxPHRlO3ErKyk1NTI5Nj09KDY0NTEyJihYPUIuY2hhckNvZGVBdChxKSkpJiZxKzE8dGUmJjU2MzIwPT0oNjQ1MTImKFU9Qi5jaGFyQ29kZUF0KHEr'@;
put 'MSkpKSYmKFg9NjU1MzYrKFgtNTUyOTY8PDEwKSsoVS01NjMyMCkscSsrKSxvZSs9WDwxMjg/MTpYPDIwNDg/MjpYPDY1NTM2PzM6NDtmb3IoWT1uZXcgSy5CdWY4KG9lKSxlZT0wLHE9MDtlZTxvZTtxKyspNTUyOTY9PSg2NDUxMiYoWD1CLmNoYXJDb2RlQXQocSkpKSYmcSsxPHRlJiY1NjMy'@;
put 'MD09KDY0NTEyJihVPUIuY2hhckNvZGVBdChxKzEpKSkmJihYPTY1NTM2KyhYLTU1Mjk2PDwxMCkrKFUtNTYzMjApLHErKyksWDwxMjg/WVtlZSsrXT1YOlg8MjA0OD8oWVtlZSsrXT0xOTJ8WD4+PjYsWVtlZSsrXT0xMjh8NjMmWCk6WDw2NTUzNj8oWVtlZSsrXT0yMjR8WD4+PjEyLFlbZWUr'@;
put 'K109MTI4fFg+Pj42JjYzLFlbZWUrK109MTI4fDYzJlgpOihZW2VlKytdPTI0MHxYPj4+MTgsWVtlZSsrXT0xMjh8WD4+PjEyJjYzLFlbZWUrK109MTI4fFg+Pj42JjYzLFlbZWUrK109MTI4fDYzJlgpO3JldHVybiBZfSx6LmJ1ZjJiaW5zdHJpbmc9ZnVuY3Rpb24oQil7cmV0dXJuIFYoQixC'@;
put 'Lmxlbmd0aCl9LHouYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbihCKXtmb3IodmFyIFk9bmV3IEsuQnVmOChCLmxlbmd0aCksWD0wLFU9WS5sZW5ndGg7WDxVO1grKylZW1hdPUIuY2hhckNvZGVBdChYKTtyZXR1cm4gWX0sei5idWYyc3RyaW5nPWZ1bmN0aW9uKEIsWSl7dmFyIFgsVSxxLGVlLHRl'@;
put 'PVl8fEIubGVuZ3RoLG9lPW5ldyBBcnJheSgyKnRlKTtmb3IoVT0wLFg9MDtYPHRlOylpZigocT1CW1grK10pPDEyOClvZVtVKytdPXE7ZWxzZSBpZigoZWU9RVtxXSk+NClvZVtVKytdPTY1NTMzLFgrPWVlLTE7ZWxzZXtmb3IocSY9Mj09PWVlPzMxOjM9PT1lZT8xNTo3O2VlPjEmJlg8dGU7'@;
put 'KXE9cTw8Nnw2MyZCW1grK10sZWUtLTtlZT4xP29lW1UrK109NjU1MzM6cTw2NTUzNj9vZVtVKytdPXE6KG9lW1UrK109NTUyOTZ8KHEtPTY1NTM2KT4+MTAmMTAyMyxvZVtVKytdPTU2MzIwfDEwMjMmcSl9cmV0dXJuIFYob2UsVSl9LHoudXRmOGJvcmRlcj1mdW5jdGlvbihCLFkpe3ZhciBY'@;
put 'O2ZvcigoWT1ZfHxCLmxlbmd0aCk+Qi5sZW5ndGgmJihZPUIubGVuZ3RoKSxYPVktMTtYPj0wJiYxMjg9PSgxOTImQltYXSk7KVgtLTtyZXR1cm4gWDwwfHwwPT09WD9ZOlgrRVtCW1hdXT5ZP1g6WX19LHsiLi9jb21tb24iOjI3fV0sMjk6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7'@;
put 'Ui5leHBvcnRzPWZ1bmN0aW9uIEsoSSxrLEUsail7Zm9yKHZhciBWPTY1NTM1Jkl8MCxCPUk+Pj4xNiY2NTUzNXwwLFk9MDswIT09RTspe0UtPVk9RT4yZTM/MmUzOkU7ZG97Qj1CKyhWPVYra1tqKytdfDApfDB9d2hpbGUoLS1ZKTtWJT02NTUyMSxCJT02NTUyMX1yZXR1cm4gVnxCPDwxNnww'@;
put 'fX0se31dLDMwOltmdW5jdGlvbihPLFIseil7Ui5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoy'@;
put 'LFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9P'@;
put 'TkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sMzE6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEk9ZnVuY3Rpb24gSygpe2Zvcih2YXIgRSxqPVtdLFY9'@;
put 'MDtWPDI1NjtWKyspe0U9Vjtmb3IodmFyIEI9MDtCPDg7QisrKUU9MSZFPzM5ODgyOTIzODReRT4+PjE6RT4+PjE7altWXT1FfXJldHVybiBqfSgpO1IuZXhwb3J0cz1mdW5jdGlvbiBrKEUsaixWLEIpe3ZhciBZPUksWD1CK1Y7RV49LTE7Zm9yKHZhciBVPUI7VTxYO1UrKylFPUU+Pj44Xllb'@;
put 'MjU1JihFXmpbVV0pXTtyZXR1cm4tMV5FfX0se31dLDMyOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpLEk9TygiLi90cmVlcyIpLGs9TygiLi9hZGxlcjMyIiksRT1PKCIuL2NyYzMyIiksaj1PKCIuL21lc3NhZ2VzIiksVj0wLHE9MCx0'@;
put 'ZT0tMixIPTIsTj04LHc9Mjg2LEo9MzAsbmU9MTksZGU9Mip3KzEsZmU9MTUseGU9MyxMZT0yNTgsRmU9TGUreGUrMSxqZT00MixsdD0xMTM7ZnVuY3Rpb24gVWUocnQsSXQpe3JldHVybiBydC5tc2c9altJdF0sSXR9ZnVuY3Rpb24gaHQocnQpe3JldHVybihydDw8MSktKHJ0PjQ/OTowKX1m'@;
put 'dW5jdGlvbiBNZShydCl7Zm9yKHZhciBJdD1ydC5sZW5ndGg7LS1JdD49MDspcnRbSXRdPTB9ZnVuY3Rpb24gRGUocnQpe3ZhciBJdD1ydC5zdGF0ZSxRdD1JdC5wZW5kaW5nO1F0PnJ0LmF2YWlsX291dCYmKFF0PXJ0LmF2YWlsX291dCksMCE9PVF0JiYoSy5hcnJheVNldChydC5vdXRwdXQs'@;
put 'SXQucGVuZGluZ19idWYsSXQucGVuZGluZ19vdXQsUXQscnQubmV4dF9vdXQpLHJ0Lm5leHRfb3V0Kz1RdCxJdC5wZW5kaW5nX291dCs9UXQscnQudG90YWxfb3V0Kz1RdCxydC5hdmFpbF9vdXQtPVF0LEl0LnBlbmRpbmctPVF0LDA9PT1JdC5wZW5kaW5nJiYoSXQucGVuZGluZ19vdXQ9MCkp'@;
put 'fWZ1bmN0aW9uIHplKHJ0LEl0KXtJLl90cl9mbHVzaF9ibG9jayhydCxydC5ibG9ja19zdGFydD49MD9ydC5ibG9ja19zdGFydDotMSxydC5zdHJzdGFydC1ydC5ibG9ja19zdGFydCxJdCkscnQuYmxvY2tfc3RhcnQ9cnQuc3Ryc3RhcnQsRGUocnQuc3RybSl9ZnVuY3Rpb24gb3QocnQsSXQp'@;
put 'e3J0LnBlbmRpbmdfYnVmW3J0LnBlbmRpbmcrK109SXR9ZnVuY3Rpb24gdXQocnQsSXQpe3J0LnBlbmRpbmdfYnVmW3J0LnBlbmRpbmcrK109SXQ+Pj44JjI1NSxydC5wZW5kaW5nX2J1ZltydC5wZW5kaW5nKytdPTI1NSZJdH1mdW5jdGlvbiBNdChydCxJdCxRdCxEdCl7dmFyIHB0PXJ0LmF2'@;
put 'YWlsX2luO3JldHVybiBwdD5EdCYmKHB0PUR0KSwwPT09cHQ/MDoocnQuYXZhaWxfaW4tPXB0LEsuYXJyYXlTZXQoSXQscnQuaW5wdXQscnQubmV4dF9pbixwdCxRdCksMT09PXJ0LnN0YXRlLndyYXA/cnQuYWRsZXI9ayhydC5hZGxlcixJdCxwdCxRdCk6Mj09PXJ0LnN0YXRlLndyYXAmJihy'@;
put 'dC5hZGxlcj1FKHJ0LmFkbGVyLEl0LHB0LFF0KSkscnQubmV4dF9pbis9cHQscnQudG90YWxfaW4rPXB0LHB0KX1mdW5jdGlvbiBIdChydCxJdCl7dmFyIHB0LFl0LFF0PXJ0Lm1heF9jaGFpbl9sZW5ndGgsRHQ9cnQuc3Ryc3RhcnQsSW49cnQucHJldl9sZW5ndGgsenQ9cnQubmljZV9tYXRj'@;
put 'aCx5bj1ydC5zdHJzdGFydD5ydC53X3NpemUtRmU/cnQuc3Ryc3RhcnQtKHJ0Lndfc2l6ZS1GZSk6MCx4bj1ydC53aW5kb3csc249cnQud19tYXNrLEJuPXJ0LnByZXYsUm49cnQuc3Ryc3RhcnQrTGUsJHQ9eG5bRHQrSW4tMV0sUG49eG5bRHQrSW5dO3J0LnByZXZfbGVuZ3RoPj1ydC5nb29k'@;
put 'X21hdGNoJiYoUXQ+Pj0yKSx6dD5ydC5sb29rYWhlYWQmJih6dD1ydC5sb29rYWhlYWQpO2Rve2lmKHhuWyhwdD1JdCkrSW5dPT09UG4mJnhuW3B0K0luLTFdPT09JHQmJnhuW3B0XT09PXhuW0R0XSYmeG5bKytwdF09PT14bltEdCsxXSl7RHQrPTIscHQrKztkb3t9d2hpbGUoeG5bKytEdF09'@;
put 'PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmeG5bKytEdF09PT14blsrK3B0XSYmRHQ8Um4p'@;
put 'O2lmKFl0PUxlLShSbi1EdCksRHQ9Um4tTGUsWXQ+SW4pe2lmKHJ0Lm1hdGNoX3N0YXJ0PUl0LEluPVl0LFl0Pj16dClicmVhazskdD14bltEdCtJbi0xXSxQbj14bltEdCtJbl19fX13aGlsZSgoSXQ9Qm5bSXQmc25dKT55biYmMCE9LS1RdCk7cmV0dXJuIEluPD1ydC5sb29rYWhlYWQ/SW46'@;
put 'cnQubG9va2FoZWFkfWZ1bmN0aW9uIFB0KHJ0KXt2YXIgUXQsRHQscHQsWXQsSW4sSXQ9cnQud19zaXplO2Rve2lmKFl0PXJ0LndpbmRvd19zaXplLXJ0Lmxvb2thaGVhZC1ydC5zdHJzdGFydCxydC5zdHJzdGFydD49SXQrKEl0LUZlKSl7Sy5hcnJheVNldChydC53aW5kb3cscnQud2luZG93'@;
put 'LEl0LEl0LDApLHJ0Lm1hdGNoX3N0YXJ0LT1JdCxydC5zdHJzdGFydC09SXQscnQuYmxvY2tfc3RhcnQtPUl0LFF0PUR0PXJ0Lmhhc2hfc2l6ZTtkb3twdD1ydC5oZWFkWy0tUXRdLHJ0LmhlYWRbUXRdPXB0Pj1JdD9wdC1JdDowfXdoaWxlKC0tRHQpO1F0PUR0PUl0O2Rve3B0PXJ0LnByZXZb'@;
put 'LS1RdF0scnQucHJldltRdF09cHQ+PUl0P3B0LUl0OjB9d2hpbGUoLS1EdCk7WXQrPUl0fWlmKDA9PT1ydC5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKER0PU10KHJ0LnN0cm0scnQud2luZG93LHJ0LnN0cnN0YXJ0K3J0Lmxvb2thaGVhZCxZdCkscnQubG9va2FoZWFkKz1EdCxydC5sb29rYWhl'@;
put 'YWQrcnQuaW5zZXJ0Pj14ZSlmb3IocnQuaW5zX2g9cnQud2luZG93W0luPXJ0LnN0cnN0YXJ0LXJ0Lmluc2VydF0scnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tJbisxXSkmcnQuaGFzaF9tYXNrO3J0Lmluc2VydCYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQu'@;
put 'aGFzaF9zaGlmdF5ydC53aW5kb3dbSW4reGUtMV0pJnJ0Lmhhc2hfbWFzayxydC5wcmV2W0luJnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNfaF09SW4sSW4rKyxydC5pbnNlcnQtLSwhKHJ0Lmxvb2thaGVhZCtydC5pbnNlcnQ8eGUpKTspO313aGlsZShydC5s'@;
put 'b29rYWhlYWQ8RmUmJjAhPT1ydC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBDbihydCxJdCl7Zm9yKHZhciBRdCxEdDs7KXtpZihydC5sb29rYWhlYWQ8RmUpe2lmKFB0KHJ0KSxydC5sb29rYWhlYWQ8RmUmJkl0PT09VilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfWlmKFF0'@;
put 'PTAscnQubG9va2FoZWFkPj14ZSYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxRdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNf'@;
put 'aF09cnQuc3Ryc3RhcnQpLDAhPT1RdCYmcnQuc3Ryc3RhcnQtUXQ8PXJ0Lndfc2l6ZS1GZSYmKHJ0Lm1hdGNoX2xlbmd0aD1IdChydCxRdCkpLHJ0Lm1hdGNoX2xlbmd0aD49eGUpaWYoRHQ9SS5fdHJfdGFsbHkocnQscnQuc3Ryc3RhcnQtcnQubWF0Y2hfc3RhcnQscnQubWF0Y2hfbGVuZ3Ro'@;
put 'LXhlKSxydC5sb29rYWhlYWQtPXJ0Lm1hdGNoX2xlbmd0aCxydC5tYXRjaF9sZW5ndGg8PXJ0Lm1heF9sYXp5X21hdGNoJiZydC5sb29rYWhlYWQ+PXhlKXtydC5tYXRjaF9sZW5ndGgtLTtkb3tydC5zdHJzdGFydCsrLHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5k'@;
put 'b3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxRdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNfaF09cnQuc3Ryc3RhcnR9d2hpbGUoMCE9LS1ydC5tYXRjaF9sZW5ndGgpO3J0LnN0cnN0YXJ0Kyt9ZWxzZSBy'@;
put 'dC5zdHJzdGFydCs9cnQubWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aD0wLHJ0Lmluc19oPXJ0LndpbmRvd1tydC5zdHJzdGFydF0scnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCsxXSkmcnQuaGFzaF9tYXNrO2Vsc2UgRHQ9SS5fdHJf'@;
put 'dGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnRdKSxydC5sb29rYWhlYWQtLSxydC5zdHJzdGFydCsrO2lmKER0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD1ydC5zdHJzdGFydDx4ZS0xP3J0LnN0cnN0YXJ0OnhlLTEs'@;
put 'ND09PUl0Pyh6ZShydCwhMCksMD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6cnQubGFzdF9saXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gVXQocnQsSXQpe2Zvcih2YXIgUXQsRHQscHQ7Oyl7aWYocnQubG9va2FoZWFkPEZlKXtpZihQdChydCks'@;
put 'cnQubG9va2FoZWFkPEZlJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31pZihRdD0wLHJ0Lmxvb2thaGVhZD49eGUmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFdKSZydC5oYXNoX21hc2ssUXQ9'@;
put 'cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0KSxydC5wcmV2X2xlbmd0aD1ydC5tYXRjaF9sZW5ndGgscnQucHJldl9tYXRjaD1ydC5tYXRjaF9zdGFydCxydC5tYXRjaF9sZW5ndGg9eGUtMSwwIT09'@;
put 'UXQmJnJ0LnByZXZfbGVuZ3RoPHJ0Lm1heF9sYXp5X21hdGNoJiZydC5zdHJzdGFydC1RdDw9cnQud19zaXplLUZlJiYocnQubWF0Y2hfbGVuZ3RoPUh0KHJ0LFF0KSxydC5tYXRjaF9sZW5ndGg8PTUmJigxPT09cnQuc3RyYXRlZ3l8fHJ0Lm1hdGNoX2xlbmd0aD09PXhlJiZydC5zdHJzdGFy'@;
put 'dC1ydC5tYXRjaF9zdGFydD40MDk2KSYmKHJ0Lm1hdGNoX2xlbmd0aD14ZS0xKSkscnQucHJldl9sZW5ndGg+PXhlJiZydC5tYXRjaF9sZW5ndGg8PXJ0LnByZXZfbGVuZ3RoKXtwdD1ydC5zdHJzdGFydCtydC5sb29rYWhlYWQteGUsRHQ9SS5fdHJfdGFsbHkocnQscnQuc3Ryc3RhcnQtMS1y'@;
put 'dC5wcmV2X21hdGNoLHJ0LnByZXZfbGVuZ3RoLXhlKSxydC5sb29rYWhlYWQtPXJ0LnByZXZfbGVuZ3RoLTEscnQucHJldl9sZW5ndGgtPTI7ZG97KytydC5zdHJzdGFydDw9cHQmJihydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0K3hlLTFd'@;
put 'KSZydC5oYXNoX21hc2ssUXQ9cnQucHJldltydC5zdHJzdGFydCZydC53X21hc2tdPXJ0LmhlYWRbcnQuaW5zX2hdLHJ0LmhlYWRbcnQuaW5zX2hdPXJ0LnN0cnN0YXJ0KX13aGlsZSgwIT0tLXJ0LnByZXZfbGVuZ3RoKTtpZihydC5tYXRjaF9hdmFpbGFibGU9MCxydC5tYXRjaF9sZW5ndGg9'@;
put 'eGUtMSxydC5zdHJzdGFydCsrLER0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihydC5tYXRjaF9hdmFpbGFibGUpe2lmKChEdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydC0xXSkpJiZ6ZShydCwhMSkscnQuc3Ryc3Rh'@;
put 'cnQrKyxydC5sb29rYWhlYWQtLSwwPT09cnQuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBydC5tYXRjaF9hdmFpbGFibGU9MSxydC5zdHJzdGFydCsrLHJ0Lmxvb2thaGVhZC0tfXJldHVybiBydC5tYXRjaF9hdmFpbGFibGUmJihEdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1ty'@;
put 'dC5zdHJzdGFydC0xXSkscnQubWF0Y2hfYXZhaWxhYmxlPTApLHJ0Lmluc2VydD1ydC5zdHJzdGFydDx4ZS0xP3J0LnN0cnN0YXJ0OnhlLTEsND09PUl0Pyh6ZShydCwhMCksMD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6cnQubGFzdF9saXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZh'@;
put 'aWxfb3V0KT8xOjJ9dmFyICRuLGVuPWZ1bmN0aW9uKHJ0LEl0LFF0LER0LHB0KXt0aGlzLmdvb2RfbGVuZ3RoPXJ0LHRoaXMubWF4X2xhenk9SXQsdGhpcy5uaWNlX2xlbmd0aD1RdCx0aGlzLm1heF9jaGFpbj1EdCx0aGlzLmZ1bmM9cHR9O2Z1bmN0aW9uIGZ0KCl7dGhpcy5zdHJtPW51bGws'@;
put 'dGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9Tix0aGlzLmxhc3RfZmx1'@;
put 'c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlz'@;
put 'Lmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRo'@;
put 'aXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgSy5CdWYxNigyKmRlKSx0aGlz'@;
put 'LmR5bl9kdHJlZT1uZXcgSy5CdWYxNigyKigyKkorMSkpLHRoaXMuYmxfdHJlZT1uZXcgSy5CdWYxNigyKigyKm5lKzEpKSxNZSh0aGlzLmR5bl9sdHJlZSksTWUodGhpcy5keW5fZHRyZWUpLE1lKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMu'@;
put 'YmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IEsuQnVmMTYoZmUrMSksdGhpcy5oZWFwPW5ldyBLLkJ1ZjE2KDIqdysxKSxNZSh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgSy5CdWYxNigyKncrMSksTWUodGhpcy5kZXB0aCks'@;
put 'dGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gZm4o'@;
put 'cnQpe3ZhciBJdDtyZXR1cm4gcnQmJnJ0LnN0YXRlPyhydC50b3RhbF9pbj1ydC50b3RhbF9vdXQ9MCxydC5kYXRhX3R5cGU9SCwoSXQ9cnQuc3RhdGUpLnBlbmRpbmc9MCxJdC5wZW5kaW5nX291dD0wLEl0LndyYXA8MCYmKEl0LndyYXA9LUl0LndyYXApLEl0LnN0YXR1cz1JdC53cmFwP2pl'@;
put 'Omx0LHJ0LmFkbGVyPTI9PT1JdC53cmFwPzA6MSxJdC5sYXN0X2ZsdXNoPVYsSS5fdHJfaW5pdChJdCkscSk6VWUocnQsdGUpfWZ1bmN0aW9uIGhuKHJ0KXt2YXIgSXQ9Zm4ocnQpO3JldHVybiBJdD09PXEmJmZ1bmN0aW9uIEhuKHJ0KXtydC53aW5kb3dfc2l6ZT0yKnJ0Lndfc2l6ZSxNZShy'@;
put 'dC5oZWFkKSxydC5tYXhfbGF6eV9tYXRjaD0kbltydC5sZXZlbF0ubWF4X2xhenkscnQuZ29vZF9tYXRjaD0kbltydC5sZXZlbF0uZ29vZF9sZW5ndGgscnQubmljZV9tYXRjaD0kbltydC5sZXZlbF0ubmljZV9sZW5ndGgscnQubWF4X2NoYWluX2xlbmd0aD0kbltydC5sZXZlbF0ubWF4X2No'@;
put 'YWluLHJ0LnN0cnN0YXJ0PTAscnQuYmxvY2tfc3RhcnQ9MCxydC5sb29rYWhlYWQ9MCxydC5pbnNlcnQ9MCxydC5tYXRjaF9sZW5ndGg9cnQucHJldl9sZW5ndGg9eGUtMSxydC5tYXRjaF9hdmFpbGFibGU9MCxydC5pbnNfaD0wfShydC5zdGF0ZSksSXR9ZnVuY3Rpb24gWHQocnQsSXQsUXQs'@;
put 'RHQscHQsWXQpe2lmKCFydClyZXR1cm4gdGU7dmFyIEluPTE7aWYoLTE9PT1JdCYmKEl0PTYpLER0PDA/KEluPTAsRHQ9LUR0KTpEdD4xNSYmKEluPTIsRHQtPTE2KSxwdDwxfHxwdD45fHxRdCE9PU58fER0PDh8fER0PjE1fHxJdDwwfHxJdD45fHxZdDwwfHxZdD40KXJldHVybiBVZShydCx0'@;
put 'ZSk7OD09PUR0JiYoRHQ9OSk7dmFyIHp0PW5ldyBmdDtyZXR1cm4gcnQuc3RhdGU9enQsenQuc3RybT1ydCx6dC53cmFwPUluLHp0Lmd6aGVhZD1udWxsLHp0LndfYml0cz1EdCx6dC53X3NpemU9MTw8enQud19iaXRzLHp0LndfbWFzaz16dC53X3NpemUtMSx6dC5oYXNoX2JpdHM9cHQrNyx6'@;
put 'dC5oYXNoX3NpemU9MTw8enQuaGFzaF9iaXRzLHp0Lmhhc2hfbWFzaz16dC5oYXNoX3NpemUtMSx6dC5oYXNoX3NoaWZ0PX5+KCh6dC5oYXNoX2JpdHMreGUtMSkveGUpLHp0LndpbmRvdz1uZXcgSy5CdWY4KDIqenQud19zaXplKSx6dC5oZWFkPW5ldyBLLkJ1ZjE2KHp0Lmhhc2hfc2l6ZSks'@;
put 'enQucHJldj1uZXcgSy5CdWYxNih6dC53X3NpemUpLHp0LmxpdF9idWZzaXplPTE8PHB0KzYsenQucGVuZGluZ19idWZfc2l6ZT00Knp0LmxpdF9idWZzaXplLHp0LnBlbmRpbmdfYnVmPW5ldyBLLkJ1ZjgoenQucGVuZGluZ19idWZfc2l6ZSksenQuZF9idWY9enQubGl0X2J1ZnNpemU+PjEs'@;
put 'enQubF9idWY9Myp6dC5saXRfYnVmc2l6ZSx6dC5sZXZlbD1JdCx6dC5zdHJhdGVneT1ZdCx6dC5tZXRob2Q9UXQsaG4ocnQpfSRuPVtuZXcgZW4oMCwwLDAsMCxmdW5jdGlvbiBvbihydCxJdCl7dmFyIFF0PTY1NTM1O2ZvcihRdD5ydC5wZW5kaW5nX2J1Zl9zaXplLTUmJihRdD1ydC5wZW5k'@;
put 'aW5nX2J1Zl9zaXplLTUpOzspe2lmKHJ0Lmxvb2thaGVhZDw9MSl7aWYoUHQocnQpLDA9PT1ydC5sb29rYWhlYWQmJkl0PT09VilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfXJ0LnN0cnN0YXJ0Kz1ydC5sb29rYWhlYWQscnQubG9va2FoZWFkPTA7dmFyIER0PXJ0LmJsb2Nr'@;
put 'X3N0YXJ0K1F0O2lmKCgwPT09cnQuc3Ryc3RhcnR8fHJ0LnN0cnN0YXJ0Pj1EdCkmJihydC5sb29rYWhlYWQ9cnQuc3Ryc3RhcnQtRHQscnQuc3Ryc3RhcnQ9RHQsemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCl8fHJ0LnN0cnN0YXJ0LXJ0LmJsb2NrX3N0YXJ0Pj1ydC53X3NpemUt'@;
put 'RmUmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PTAsND09PUl0Pyh6ZShydCwhMCksMD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6KHJ0LnN0cnN0YXJ0PnJ0LmJsb2NrX3N0YXJ0JiZ6ZShydCwhMSksMSl9KSxuZXcgZW4oNCw0'@;
put 'LDgsNCxDbiksbmV3IGVuKDQsNSwxNiw4LENuKSxuZXcgZW4oNCw2LDMyLDMyLENuKSxuZXcgZW4oNCw0LDE2LDE2LFV0KSxuZXcgZW4oOCwxNiwzMiwzMixVdCksbmV3IGVuKDgsMTYsMTI4LDEyOCxVdCksbmV3IGVuKDgsMzIsMTI4LDI1NixVdCksbmV3IGVuKDMyLDEyOCwyNTgsMTAyNCxV'@;
put 'dCksbmV3IGVuKDMyLDI1OCwyNTgsNDA5NixVdCldLHouZGVmbGF0ZUluaXQ9ZnVuY3Rpb24gX3QocnQsSXQpe3JldHVybiBYdChydCxJdCxOLDE1LDgsMCl9LHouZGVmbGF0ZUluaXQyPVh0LHouZGVmbGF0ZVJlc2V0PWhuLHouZGVmbGF0ZVJlc2V0S2VlcD1mbix6LmRlZmxhdGVTZXRIZWFk'@;
put 'ZXI9ZnVuY3Rpb24gd3QocnQsSXQpe3JldHVybiBydCYmcnQuc3RhdGUmJjI9PT1ydC5zdGF0ZS53cmFwPyhydC5zdGF0ZS5nemhlYWQ9SXQscSk6dGV9LHouZGVmbGF0ZT1mdW5jdGlvbiBOdChydCxJdCl7dmFyIFF0LER0LHB0LFl0O2lmKCFydHx8IXJ0LnN0YXRlfHxJdD41fHxJdDwwKXJl'@;
put 'dHVybiBydD9VZShydCx0ZSk6dGU7aWYoRHQ9cnQuc3RhdGUsIXJ0Lm91dHB1dHx8IXJ0LmlucHV0JiYwIT09cnQuYXZhaWxfaW58fDY2Nj09PUR0LnN0YXR1cyYmNCE9PUl0KXJldHVybiBVZShydCwwPT09cnQuYXZhaWxfb3V0Py01OnRlKTtpZihEdC5zdHJtPXJ0LFF0PUR0Lmxhc3RfZmx1'@;
put 'c2gsRHQubGFzdF9mbHVzaD1JdCxEdC5zdGF0dXM9PT1qZSlpZigyPT09RHQud3JhcClydC5hZGxlcj0wLG90KER0LDMxKSxvdChEdCwxMzkpLG90KER0LDgpLER0Lmd6aGVhZD8ob3QoRHQsKER0Lmd6aGVhZC50ZXh0PzE6MCkrKER0Lmd6aGVhZC5oY3JjPzI6MCkrKER0Lmd6aGVhZC5leHRy'@;
put 'YT80OjApKyhEdC5nemhlYWQubmFtZT84OjApKyhEdC5nemhlYWQuY29tbWVudD8xNjowKSksb3QoRHQsMjU1JkR0Lmd6aGVhZC50aW1lKSxvdChEdCxEdC5nemhlYWQudGltZT4+OCYyNTUpLG90KER0LER0Lmd6aGVhZC50aW1lPj4xNiYyNTUpLG90KER0LER0Lmd6aGVhZC50aW1lPj4yNCYy'@;
put 'NTUpLG90KER0LDk9PT1EdC5sZXZlbD8yOkR0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZlbDwyPzQ6MCksb3QoRHQsMjU1JkR0Lmd6aGVhZC5vcyksRHQuZ3poZWFkLmV4dHJhJiZEdC5nemhlYWQuZXh0cmEubGVuZ3RoJiYob3QoRHQsMjU1JkR0Lmd6aGVhZC5leHRyYS5sZW5ndGgpLG90KER0LER0'@;
put 'Lmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksRHQuZ3poZWFkLmhjcmMmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmcsMCkpLER0Lmd6aW5kZXg9MCxEdC5zdGF0dXM9NjkpOihvdChEdCwwKSxvdChEdCwwKSxvdChEdCwwKSxvdChEdCwwKSxvdChE'@;
put 'dCwwKSxvdChEdCw5PT09RHQubGV2ZWw/MjpEdC5zdHJhdGVneT49Mnx8RHQubGV2ZWw8Mj80OjApLG90KER0LDMpLER0LnN0YXR1cz1sdCk7ZWxzZXt2YXIgSW49TisoRHQud19iaXRzLTg8PDQpPDw4O0lufD0oRHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/MDpEdC5sZXZlbDw2PzE6Nj09'@;
put 'PUR0LmxldmVsPzI6Myk8PDYsMCE9PUR0LnN0cnN0YXJ0JiYoSW58PTMyKSxJbis9MzEtSW4lMzEsRHQuc3RhdHVzPWx0LHV0KER0LEluKSwwIT09RHQuc3Ryc3RhcnQmJih1dChEdCxydC5hZGxlcj4+PjE2KSx1dChEdCw2NTUzNSZydC5hZGxlcikpLHJ0LmFkbGVyPTF9aWYoNjk9PT1EdC5z'@;
put 'dGF0dXMpaWYoRHQuZ3poZWFkLmV4dHJhKXtmb3IocHQ9RHQucGVuZGluZztEdC5nemluZGV4PCg2NTUzNSZEdC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKER0LnBlbmRpbmchPT1EdC5wZW5kaW5nX2J1Zl9zaXplfHwoRHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1F'@;
put 'KHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSxEZShydCkscHQ9RHQucGVuZGluZyxEdC5wZW5kaW5nIT09RHQucGVuZGluZ19idWZfc2l6ZSkpOylvdChEdCwyNTUmRHQuZ3poZWFkLmV4dHJhW0R0Lmd6aW5kZXhdKSxEdC5nemluZGV4Kys7RHQuZ3poZWFkLmhj'@;
put 'cmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSxEdC5nemluZGV4PT09RHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKER0Lmd6aW5kZXg9MCxEdC5zdGF0dXM9NzMpfWVsc2UgRHQuc3RhdHVzPTczO2lmKDczPT09'@;
put 'RHQuc3RhdHVzKWlmKER0Lmd6aGVhZC5uYW1lKXtwdD1EdC5wZW5kaW5nO2Rve2lmKER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplJiYoRHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQs'@;
put 'cHQpKSxEZShydCkscHQ9RHQucGVuZGluZyxEdC5wZW5kaW5nPT09RHQucGVuZGluZ19idWZfc2l6ZSkpe1l0PTE7YnJlYWt9WXQ9RHQuZ3ppbmRleDxEdC5nemhlYWQubmFtZS5sZW5ndGg/MjU1JkR0Lmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoRHQuZ3ppbmRleCsrKTowLG90KER0LFl0KX13'@;
put 'aGlsZSgwIT09WXQpO0R0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksMD09PVl0JiYoRHQuZ3ppbmRleD0wLER0LnN0YXR1cz05MSl9ZWxzZSBEdC5zdGF0dXM9OTE7aWYoOTE9PT1EdC5z'@;
put 'dGF0dXMpaWYoRHQuZ3poZWFkLmNvbW1lbnQpe3B0PUR0LnBlbmRpbmc7ZG97aWYoRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUmJihEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxw'@;
put 'dCkpLERlKHJ0KSxwdD1EdC5wZW5kaW5nLER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplKSl7WXQ9MTticmVha31ZdD1EdC5nemluZGV4PER0Lmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmRHQuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChEdC5nemluZGV4KyspOjAsb3QoRHQs'@;
put 'WXQpfXdoaWxlKDAhPT1ZdCk7RHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSwwPT09WXQmJihEdC5zdGF0dXM9MTAzKX1lbHNlIER0LnN0YXR1cz0xMDM7aWYoMTAzPT09RHQuc3RhdHVz'@;
put 'JiYoRHQuZ3poZWFkLmhjcmM/KER0LnBlbmRpbmcrMj5EdC5wZW5kaW5nX2J1Zl9zaXplJiZEZShydCksRHQucGVuZGluZysyPD1EdC5wZW5kaW5nX2J1Zl9zaXplJiYob3QoRHQsMjU1JnJ0LmFkbGVyKSxvdChEdCxydC5hZGxlcj4+OCYyNTUpLHJ0LmFkbGVyPTAsRHQuc3RhdHVzPWx0KSk6'@;
put 'RHQuc3RhdHVzPWx0KSwwIT09RHQucGVuZGluZyl7aWYoRGUocnQpLDA9PT1ydC5hdmFpbF9vdXQpcmV0dXJuIER0Lmxhc3RfZmx1c2g9LTEscX1lbHNlIGlmKDA9PT1ydC5hdmFpbF9pbiYmaHQoSXQpPD1odChRdCkmJjQhPT1JdClyZXR1cm4gVWUocnQsLTUpO2lmKDY2Nj09PUR0LnN0YXR1'@;
put 'cyYmMCE9PXJ0LmF2YWlsX2luKXJldHVybiBVZShydCwtNSk7aWYoMCE9PXJ0LmF2YWlsX2lufHwwIT09RHQubG9va2FoZWFkfHxJdCE9PVYmJjY2NiE9PUR0LnN0YXR1cyl7dmFyIHluPTI9PT1EdC5zdHJhdGVneT9mdW5jdGlvbiBXbihydCxJdCl7Zm9yKHZhciBRdDs7KXtpZigwPT09cnQu'@;
put 'bG9va2FoZWFkJiYoUHQocnQpLDA9PT1ydC5sb29rYWhlYWQpKXtpZihJdD09PVYpcmV0dXJuIDE7YnJlYWt9aWYocnQubWF0Y2hfbGVuZ3RoPTAsUXQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnRdKSxydC5sb29rYWhlYWQtLSxydC5zdHJzdGFydCsrLFF0JiYoemUo'@;
put 'cnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHJ0Lmluc2VydD0wLDQ9PT1JdD8oemUocnQsITApLDA9PT1ydC5zdHJtLmF2YWlsX291dD8zOjQpOnJ0Lmxhc3RfbGl0JiYoemUocnQsITEpLDA9PT1ydC5zdHJtLmF2YWlsX291dCk/MToyfShEdCxJdCk6Mz09'@;
put 'PUR0LnN0cmF0ZWd5P2Z1bmN0aW9uIGJuKHJ0LEl0KXtmb3IodmFyIFF0LER0LHB0LFl0LEluPXJ0LndpbmRvdzs7KXtpZihydC5sb29rYWhlYWQ8PUxlKXtpZihQdChydCkscnQubG9va2FoZWFkPD1MZSYmSXQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYocnQu'@;
put 'bWF0Y2hfbGVuZ3RoPTAscnQubG9va2FoZWFkPj14ZSYmcnQuc3Ryc3RhcnQ+MCYmKER0PUluW3B0PXJ0LnN0cnN0YXJ0LTFdKT09PUluWysrcHRdJiZEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRdKXtZdD1ydC5zdHJzdGFydCtMZTtkb3t9d2hpbGUoRHQ9PT1JblsrK3B0XSYmRHQ9PT1J'@;
put 'blsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmRHQ9PT1JblsrK3B0XSYmcHQ8WXQpO3J0Lm1hdGNoX2xlbmd0aD1MZS0oWXQtcHQpLHJ0Lm1hdGNoX2xlbmd0aD5ydC5sb29rYWhlYWQmJihy'@;
put 'dC5tYXRjaF9sZW5ndGg9cnQubG9va2FoZWFkKX1pZihydC5tYXRjaF9sZW5ndGg+PXhlPyhRdD1JLl90cl90YWxseShydCwxLHJ0Lm1hdGNoX2xlbmd0aC14ZSkscnQubG9va2FoZWFkLT1ydC5tYXRjaF9sZW5ndGgscnQuc3Ryc3RhcnQrPXJ0Lm1hdGNoX2xlbmd0aCxydC5tYXRjaF9sZW5n'@;
put 'dGg9MCk6KFF0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0XSkscnQubG9va2FoZWFkLS0scnQuc3Ryc3RhcnQrKyksUXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PTAsND09PUl0Pyh6ZShydCwhMCks'@;
put 'MD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6cnQubGFzdF9saXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KT8xOjJ9KER0LEl0KTokbltEdC5sZXZlbF0uZnVuYyhEdCxJdCk7aWYoKDM9PT15bnx8ND09PXluKSYmKER0LnN0YXR1cz02NjYpLDE9PT15bnx8Mz09PXluKXJl'@;
put 'dHVybiAwPT09cnQuYXZhaWxfb3V0JiYoRHQubGFzdF9mbHVzaD0tMSkscTtpZigyPT09eW4mJigxPT09SXQ/SS5fdHJfYWxpZ24oRHQpOjUhPT1JdCYmKEkuX3RyX3N0b3JlZF9ibG9jayhEdCwwLDAsITEpLDM9PT1JdCYmKE1lKER0LmhlYWQpLDA9PT1EdC5sb29rYWhlYWQmJihEdC5zdHJz'@;
put 'dGFydD0wLER0LmJsb2NrX3N0YXJ0PTAsRHQuaW5zZXJ0PTApKSksRGUocnQpLDA9PT1ydC5hdmFpbF9vdXQpKXJldHVybiBEdC5sYXN0X2ZsdXNoPS0xLHF9cmV0dXJuIDQhPT1JdD9xOkR0LndyYXA8PTA/MTooMj09PUR0LndyYXA/KG90KER0LDI1NSZydC5hZGxlciksb3QoRHQscnQuYWRs'@;
put 'ZXI+PjgmMjU1KSxvdChEdCxydC5hZGxlcj4+MTYmMjU1KSxvdChEdCxydC5hZGxlcj4+MjQmMjU1KSxvdChEdCwyNTUmcnQudG90YWxfaW4pLG90KER0LHJ0LnRvdGFsX2luPj44JjI1NSksb3QoRHQscnQudG90YWxfaW4+PjE2JjI1NSksb3QoRHQscnQudG90YWxfaW4+PjI0JjI1NSkpOih1'@;
put 'dChEdCxydC5hZGxlcj4+PjE2KSx1dChEdCw2NTUzNSZydC5hZGxlcikpLERlKHJ0KSxEdC53cmFwPjAmJihEdC53cmFwPS1EdC53cmFwKSwwIT09RHQucGVuZGluZz9xOjEpfSx6LmRlZmxhdGVFbmQ9ZnVuY3Rpb24gbW4ocnQpe3ZhciBJdDtyZXR1cm4gcnQmJnJ0LnN0YXRlPyhJdD1ydC5z'@;
put 'dGF0ZS5zdGF0dXMpIT09amUmJjY5IT09SXQmJjczIT09SXQmJjkxIT09SXQmJjEwMyE9PUl0JiZJdCE9PWx0JiY2NjYhPT1JdD9VZShydCx0ZSk6KHJ0LnN0YXRlPW51bGwsSXQ9PT1sdD9VZShydCwtMyk6cSk6dGV9LHouZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2Eg'@;
put 'cHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24gSygpe3RoaXMudGV4dD0wLHRoaXMu'@;
put 'dGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDM0OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0'@;
put 'cz1mdW5jdGlvbihFLGope3ZhciBWLEIsWSxYLFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxDLFMsdixwLHcsSjt3PUUuaW5wdXQsWT0oQj1FLm5leHRfaW4pKyhFLmF2YWlsX2luLTUpLEo9RS5vdXRwdXQsVT0oWD1FLm5leHRfb3V0KS0oai1FLmF2YWlsX291dCkscT1Y'@;
put 'KyhFLmF2YWlsX291dC0yNTcpLGVlPShWPUUuc3RhdGUpLmRtYXgsdGU9Vi53c2l6ZSxvZT1WLndoYXZlLHNlPVYud25leHQsaGU9Vi53aW5kb3csdWU9Vi5ob2xkLGNlPVYuYml0cyxHPVYubGVuY29kZSxiPVYuZGlzdGNvZGUsRD0oMTw8Vi5sZW5iaXRzKS0xLEg9KDE8PFYuZGlzdGJpdHMp'@;
put 'LTE7ZTpkb3tjZTwxNSYmKHVlKz13W0IrK108PGNlLHVlKz13W0IrK108PChjZSs9OCksY2UrPTgpLE49R1t1ZSZEXTt0OmZvcig7Oyl7aWYodWU+Pj49Zz1OPj4+MjQsY2UtPWcsMD09KGc9Tj4+PjE2JjI1NSkpSltYKytdPTY1NTM1Jk47ZWxzZXtpZighKDE2JmcpKXtpZig2NCZnKXtpZigz'@;
put 'MiZnKXtWLm1vZGU9MTI7YnJlYWsgZX1FLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixWLm1vZGU9MzA7YnJlYWsgZX1OPUdbKDY1NTM1Jk4pKyh1ZSYoMTw8ZyktMSldO2NvbnRpbnVlIHR9Zm9yKEM9NjU1MzUmTiwoZyY9MTUpJiYoY2U8ZyYmKHVlKz13W0IrK108PGNlLGNl'@;
put 'Kz04KSxDKz11ZSYoMTw8ZyktMSx1ZT4+Pj1nLGNlLT1nKSxjZTwxNSYmKHVlKz13W0IrK108PGNlLHVlKz13W0IrK108PChjZSs9OCksY2UrPTgpLE49Ylt1ZSZIXTs7KXtpZih1ZT4+Pj1nPU4+Pj4yNCxjZS09ZywxNiYoZz1OPj4+MTYmMjU1KSl7aWYoUz02NTUzNSZOLGNlPChnJj0xNSkm'@;
put 'Jih1ZSs9d1tCKytdPDxjZSwoY2UrPTgpPGcmJih1ZSs9d1tCKytdPDxjZSxjZSs9OCkpLChTKz11ZSYoMTw8ZyktMSk+ZWUpe0UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVi5tb2RlPTMwO2JyZWFrIGV9aWYodWU+Pj49ZyxjZS09ZyxTPihnPVgtVSkpe2lmKChnPVMt'@;
put 'Zyk+b2UmJlYuc2FuZSl7RS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixWLm1vZGU9MzA7YnJlYWsgZX1pZih2PTAscD1oZSwwPT09c2Upe2lmKHYrPXRlLWcsZzxDKXtDLT1nO2Rve0pbWCsrXT1oZVt2KytdfXdoaWxlKC0tZyk7dj1YLVMscD1KfX1lbHNlIGlmKHNlPGcp'@;
put 'e2lmKHYrPXRlK3NlLWcsKGctPXNlKTxDKXtDLT1nO2Rve0pbWCsrXT1oZVt2KytdfXdoaWxlKC0tZyk7aWYodj0wLHNlPEMpe0MtPWc9c2U7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1nKTt2PVgtUyxwPUp9fX1lbHNlIGlmKHYrPXNlLWcsZzxDKXtDLT1nO2Rve0pbWCsrXT1oZVt2Kytd'@;
put 'fXdoaWxlKC0tZyk7dj1YLVMscD1KfWZvcig7Qz4yOylKW1grK109cFt2KytdLEpbWCsrXT1wW3YrK10sSltYKytdPXBbdisrXSxDLT0zO0MmJihKW1grK109cFt2KytdLEM+MSYmKEpbWCsrXT1wW3YrK10pKX1lbHNle3Y9WC1TO2Rve0pbWCsrXT1KW3YrK10sSltYKytdPUpbdisrXSxKW1gr'@;
put 'K109Slt2KytdLEMtPTN9d2hpbGUoQz4yKTtDJiYoSltYKytdPUpbdisrXSxDPjEmJihKW1grK109Slt2KytdKSl9YnJlYWt9aWYoNjQmZyl7RS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsVi5tb2RlPTMwO2JyZWFrIGV9Tj1iWyg2NTUzNSZOKSsodWUmKDE8PGcpLTEpXX19YnJlYWt9'@;
put 'fXdoaWxlKEI8WSYmWDxxKTt1ZSY9KDE8PChjZS09KEM9Y2U+PjMpPDwzKSktMSxFLm5leHRfaW49Qi09QyxFLm5leHRfb3V0PVgsRS5hdmFpbF9pbj1CPFk/WS1CKzU6NS0oQi1ZKSxFLmF2YWlsX291dD1YPHE/cS1YKzI1NzoyNTctKFgtcSksVi5ob2xkPXVlLFYuYml0cz1jZX19LHt9XSwz'@;
put 'NTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKSxJPU8oIi4vYWRsZXIzMiIpLGs9TygiLi9jcmMzMiIpLEU9TygiLi9pbmZmYXN0Iiksaj1PKCIuL2luZnRyZWVzIiksZWU9MCxzZT0tMixiPTEsTWU9ODUyLERlPTU5MjtmdW5jdGlvbiB1'@;
put 'dCh3dCl7cmV0dXJuKHd0Pj4+MjQmMjU1KSsod3Q+Pj44JjY1MjgwKSsoKDY1MjgwJnd0KTw8OCkrKCgyNTUmd3QpPDwyNCl9ZnVuY3Rpb24gTXQoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAs'@;
put 'dGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhp'@;
put 'cy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEsuQnVmMTYo'@;
put 'MzIwKSx0aGlzLndvcms9bmV3IEsuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gSHQod3Qpe3ZhciBYdDtyZXR1cm4gd3QmJnd0LnN0YXRlPyh3dC50b3RhbF9pbj13dC50b3Rh'@;
put 'bF9vdXQ9KFh0PXd0LnN0YXRlKS50b3RhbD0wLHd0Lm1zZz0iIixYdC53cmFwJiYod3QuYWRsZXI9MSZYdC53cmFwKSxYdC5tb2RlPWIsWHQubGFzdD0wLFh0LmhhdmVkaWN0PTAsWHQuZG1heD0zMjc2OCxYdC5oZWFkPW51bGwsWHQuaG9sZD0wLFh0LmJpdHM9MCxYdC5sZW5jb2RlPVh0Lmxl'@;
put 'bmR5bj1uZXcgSy5CdWYzMihNZSksWHQuZGlzdGNvZGU9WHQuZGlzdGR5bj1uZXcgSy5CdWYzMihEZSksWHQuc2FuZT0xLFh0LmJhY2s9LTEsZWUpOnNlfWZ1bmN0aW9uIFB0KHd0KXt2YXIgWHQ7cmV0dXJuIHd0JiZ3dC5zdGF0ZT8oKFh0PXd0LnN0YXRlKS53c2l6ZT0wLFh0LndoYXZlPTAs'@;
put 'WHQud25leHQ9MCxIdCh3dCkpOnNlfWZ1bmN0aW9uIG9uKHd0LFh0KXt2YXIgX3QsTnQ7cmV0dXJuIXd0fHwhd3Quc3RhdGV8fChOdD13dC5zdGF0ZSxYdDwwPyhfdD0wLFh0PS1YdCk6KF90PTErKFh0Pj40KSxYdDw0OCYmKFh0Jj0xNSkpLFh0JiYoWHQ8OHx8WHQ+MTUpKT9zZToobnVsbCE9'@;
put 'PU50LndpbmRvdyYmTnQud2JpdHMhPT1YdCYmKE50LndpbmRvdz1udWxsKSxOdC53cmFwPV90LE50LndiaXRzPVh0LFB0KHd0KSl9ZnVuY3Rpb24gQ24od3QsWHQpe3ZhciBfdCxOdDtyZXR1cm4gd3Q/KE50PW5ldyBNdCx3dC5zdGF0ZT1OdCxOdC53aW5kb3c9bnVsbCwoX3Q9b24od3QsWHQp'@;
put 'KSE9PWVlJiYod3Quc3RhdGU9bnVsbCksX3QpOnNlfXZhciBXbixlbixibj0hMDtmdW5jdGlvbiAkbih3dCl7aWYoYm4pe3ZhciBYdDtmb3IoV249bmV3IEsuQnVmMzIoNTEyKSxlbj1uZXcgSy5CdWYzMigzMiksWHQ9MDtYdDwxNDQ7KXd0LmxlbnNbWHQrK109ODtmb3IoO1h0PDI1Njspd3Qu'@;
put 'bGVuc1tYdCsrXT05O2Zvcig7WHQ8MjgwOyl3dC5sZW5zW1h0KytdPTc7Zm9yKDtYdDwyODg7KXd0LmxlbnNbWHQrK109ODtmb3IoaigxLHd0LmxlbnMsMCwyODgsV24sMCx3dC53b3JrLHtiaXRzOjl9KSxYdD0wO1h0PDMyOyl3dC5sZW5zW1h0KytdPTU7aigyLHd0LmxlbnMsMCwzMixlbiww'@;
put 'LHd0Lndvcmsse2JpdHM6NX0pLGJuPSExfXd0LmxlbmNvZGU9V24sd3QubGVuYml0cz05LHd0LmRpc3Rjb2RlPWVuLHd0LmRpc3RiaXRzPTV9ei5pbmZsYXRlUmVzZXQ9UHQsei5pbmZsYXRlUmVzZXQyPW9uLHouaW5mbGF0ZVJlc2V0S2VlcD1IdCx6LmluZmxhdGVJbml0PWZ1bmN0aW9uIFV0'@;
put 'KHd0KXtyZXR1cm4gQ24od3QsMTUpfSx6LmluZmxhdGVJbml0Mj1Dbix6LmluZmxhdGU9ZnVuY3Rpb24gZnQod3QsWHQpe3ZhciBfdCxOdCxtbixydCxJdCxRdCxEdCxwdCxZdCxJbix6dCx5bix4bixzbixSbiwkdCxQbixuaSxsbixqbixxcixnaSxVaSxLcixCbj0wLHhyPW5ldyBLLkJ1Zjgo'@;
put 'NCksbm89WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCF3dHx8IXd0LnN0YXRlfHwhd3Qub3V0cHV0fHwhd3QuaW5wdXQmJjAhPT13dC5hdmFpbF9pbilyZXR1cm4gc2U7MTI9PT0oX3Q9d3Quc3RhdGUpLm1vZGUmJihfdC5tb2RlPTEzKSxJdD13'@;
put 'dC5uZXh0X291dCxtbj13dC5vdXRwdXQscnQ9d3QubmV4dF9pbixOdD13dC5pbnB1dCxwdD1fdC5ob2xkLFl0PV90LmJpdHMsSW49UXQ9d3QuYXZhaWxfaW4senQ9RHQ9d3QuYXZhaWxfb3V0LGdpPWVlO2U6Zm9yKDs7KXN3aXRjaChfdC5tb2RlKXtjYXNlIGI6aWYoMD09PV90LndyYXApe190'@;
put 'Lm1vZGU9MTM7YnJlYWt9Zm9yKDtZdDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZigyJl90LndyYXAmJjM1NjE1PT09cHQpe190LmNoZWNrPTAseHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUsX3QuY2hlY2s9ayhfdC5jaGVjayx4ciwy'@;
put 'LDApLHB0PTAsWXQ9MCxfdC5tb2RlPTI7YnJlYWt9aWYoX3QuZmxhZ3M9MCxfdC5oZWFkJiYoX3QuaGVhZC5kb25lPSExKSwhKDEmX3Qud3JhcCl8fCgoKDI1NSZwdCk8PDgpKyhwdD4+OCkpJTMxKXt3dC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9aWYo'@;
put 'OCE9KDE1JnB0KSl7d3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsX3QubW9kZT0zMDticmVha31pZihZdC09NCxxcj04KygxNSYocHQ+Pj49NCkpLDA9PT1fdC53Yml0cylfdC53Yml0cz1xcjtlbHNlIGlmKHFyPl90LndiaXRzKXt3dC5tc2c9ImludmFsaWQgd2luZG93IHNp'@;
put 'emUiLF90Lm1vZGU9MzA7YnJlYWt9X3QuZG1heD0xPDxxcix3dC5hZGxlcj1fdC5jaGVjaz0xLF90Lm1vZGU9NTEyJnB0PzEwOjEyLHB0PTAsWXQ9MDticmVhaztjYXNlIDI6Zm9yKDtZdDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihfdC5m'@;
put 'bGFncz1wdCw4IT0oMjU1Jl90LmZsYWdzKSl7d3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsX3QubW9kZT0zMDticmVha31pZig1NzM0NCZfdC5mbGFncyl7d3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLF90Lm1vZGU9MzA7YnJlYWt9X3QuaGVhZCYmKF90Lmhl'@;
put 'YWQudGV4dD1wdD4+OCYxKSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkpLHB0PTAsWXQ9MCxfdC5tb2RlPTM7Y2FzZSAzOmZvcig7WXQ8MzI7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsr'@;
put 'XTw8WXQsWXQrPTh9X3QuaGVhZCYmKF90LmhlYWQudGltZT1wdCksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUseHJbMl09cHQ+Pj4xNiYyNTUseHJbM109cHQ+Pj4yNCYyNTUsX3QuY2hlY2s9ayhfdC5jaGVjayx4ciw0LDApKSxwdD0wLFl0PTAsX3QubW9k'@;
put 'ZT00O2Nhc2UgNDpmb3IoO1l0PDE2Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90LmhlYWQmJihfdC5oZWFkLnhmbGFncz0yNTUmcHQsX3QuaGVhZC5vcz1wdD4+OCksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUs'@;
put 'X3QuY2hlY2s9ayhfdC5jaGVjayx4ciwyLDApKSxwdD0wLFl0PTAsX3QubW9kZT01O2Nhc2UgNTppZigxMDI0Jl90LmZsYWdzKXtmb3IoO1l0PDE2Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fV90Lmxlbmd0aD1wdCxfdC5oZWFkJiYoX3QuaGVhZC5l'@;
put 'eHRyYV9sZW49cHQpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNoZWNrPWsoX3QuY2hlY2sseHIsMiwwKSkscHQ9MCxZdD0wfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQuZXh0cmE9bnVsbCk7X3QubW9kZT02O2Nhc2UgNjppZigxMDI0Jl90LmZsYWdz'@;
put 'JiYoKHluPV90Lmxlbmd0aCk+UXQmJih5bj1RdCkseW4mJihfdC5oZWFkJiYocXI9X3QuaGVhZC5leHRyYV9sZW4tX3QubGVuZ3RoLF90LmhlYWQuZXh0cmF8fChfdC5oZWFkLmV4dHJhPW5ldyBBcnJheShfdC5oZWFkLmV4dHJhX2xlbikpLEsuYXJyYXlTZXQoX3QuaGVhZC5leHRyYSxOdCxy'@;
put 'dCx5bixxcikpLDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPWsoX3QuY2hlY2ssTnQseW4scnQpKSxRdC09eW4scnQrPXluLF90Lmxlbmd0aC09eW4pLF90Lmxlbmd0aCkpYnJlYWsgZTtfdC5sZW5ndGg9MCxfdC5tb2RlPTc7Y2FzZSA3OmlmKDIwNDgmX3QuZmxhZ3Mpe2lmKDA9PT1RdClicmVh'@;
put 'ayBlO3luPTA7ZG97cXI9TnRbcnQreW4rK10sX3QuaGVhZCYmcXImJl90Lmxlbmd0aDw2NTUzNiYmKF90LmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShxcikpfXdoaWxlKHFyJiZ5bjxRdCk7aWYoNTEyJl90LmZsYWdzJiYoX3QuY2hlY2s9ayhfdC5jaGVjayxOdCx5bixydCkpLFF0'@;
put 'LT15bixydCs9eW4scXIpYnJlYWsgZX1lbHNlIF90LmhlYWQmJihfdC5oZWFkLm5hbWU9bnVsbCk7X3QubGVuZ3RoPTAsX3QubW9kZT04O2Nhc2UgODppZig0MDk2Jl90LmZsYWdzKXtpZigwPT09UXQpYnJlYWsgZTt5bj0wO2Rve3FyPU50W3J0K3luKytdLF90LmhlYWQmJnFyJiZfdC5sZW5n'@;
put 'dGg8NjU1MzYmJihfdC5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUocXIpKX13aGlsZShxciYmeW48UXQpO2lmKDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPWsoX3QuY2hlY2ssTnQseW4scnQpKSxRdC09eW4scnQrPXluLHFyKWJyZWFrIGV9ZWxzZSBfdC5oZWFkJiYoX3QuaGVh'@;
put 'ZC5jb21tZW50PW51bGwpO190Lm1vZGU9OTtjYXNlIDk6aWYoNTEyJl90LmZsYWdzKXtmb3IoO1l0PDE2Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKHB0IT09KDY1NTM1Jl90LmNoZWNrKSl7d3QubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixf'@;
put 'dC5tb2RlPTMwO2JyZWFrfXB0PTAsWXQ9MH1fdC5oZWFkJiYoX3QuaGVhZC5oY3JjPV90LmZsYWdzPj45JjEsX3QuaGVhZC5kb25lPSEwKSx3dC5hZGxlcj1fdC5jaGVjaz0wLF90Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO1l0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9'@;
put 'TnRbcnQrK108PFl0LFl0Kz04fXd0LmFkbGVyPV90LmNoZWNrPXV0KHB0KSxwdD0wLFl0PTAsX3QubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1fdC5oYXZlZGljdClyZXR1cm4gd3QubmV4dF9vdXQ9SXQsd3QuYXZhaWxfb3V0PUR0LHd0Lm5leHRfaW49cnQsd3QuYXZhaWxfaW49UXQsX3QuaG9s'@;
put 'ZD1wdCxfdC5iaXRzPVl0LDI7d3QuYWRsZXI9X3QuY2hlY2s9MSxfdC5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PVh0fHw2PT09WHQpYnJlYWsgZTtjYXNlIDEzOmlmKF90Lmxhc3Qpe3B0Pj4+PTcmWXQsWXQtPTcmWXQsX3QubW9kZT0yNzticmVha31mb3IoO1l0PDM7KXtpZigwPT09UXQpYnJl'@;
put 'YWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9c3dpdGNoKF90Lmxhc3Q9MSZwdCxZdC09MSwzJihwdD4+Pj0xKSl7Y2FzZSAwOl90Lm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKCRuKF90KSxfdC5tb2RlPTIwLDY9PT1YdCl7cHQ+Pj49MixZdC09MjticmVhayBlfWJyZWFrO2Nhc2Ug'@;
put 'MjpfdC5tb2RlPTE3O2JyZWFrO2Nhc2UgMzp3dC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsX3QubW9kZT0zMH1wdD4+Pj0yLFl0LT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKHB0Pj4+PTcmWXQsWXQtPTcmWXQ7WXQ8MzI7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQs'@;
put 'WXQrPTh9aWYoKDY1NTM1JnB0KSE9KHB0Pj4+MTZeNjU1MzUpKXt3dC5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLF90Lm1vZGU9MzA7YnJlYWt9aWYoX3QubGVuZ3RoPTY1NTM1JnB0LHB0PTAsWXQ9MCxfdC5tb2RlPTE1LDY9PT1YdClicmVhayBlO2Nhc2UgMTU6X3QubW9k'@;
put 'ZT0xNjtjYXNlIDE2OmlmKHluPV90Lmxlbmd0aCl7aWYoeW4+UXQmJih5bj1RdCkseW4+RHQmJih5bj1EdCksMD09PXluKWJyZWFrIGU7Sy5hcnJheVNldChtbixOdCxydCx5bixJdCksUXQtPXluLHJ0Kz15bixEdC09eW4sSXQrPXluLF90Lmxlbmd0aC09eW47YnJlYWt9X3QubW9kZT0xMjti'@;
put 'cmVhaztjYXNlIDE3OmZvcig7WXQ8MTQ7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoX3Qubmxlbj0yNTcrKDMxJnB0KSxZdC09NSxfdC5uZGlzdD0xKygzMSYocHQ+Pj49NSkpLFl0LT01LF90Lm5jb2RlPTQrKDE1JihwdD4+Pj01KSkscHQ+Pj49'@;
put 'NCxZdC09NCxfdC5ubGVuPjI4Nnx8X3QubmRpc3Q+MzApe3d0Lm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLF90Lm1vZGU9MzA7YnJlYWt9X3QuaGF2ZT0wLF90Lm1vZGU9MTg7Y2FzZSAxODpmb3IoO190LmhhdmU8X3QubmNvZGU7KXtmb3IoO1l0PDM7KXtpZigw'@;
put 'PT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9X3QubGVuc1tub1tfdC5oYXZlKytdXT03JnB0LHB0Pj4+PTMsWXQtPTN9Zm9yKDtfdC5oYXZlPDE5OylfdC5sZW5zW25vW190LmhhdmUrK11dPTA7aWYoX3QubGVuY29kZT1fdC5sZW5keW4sX3QubGVuYml0cz03LGdp'@;
put 'PWooMCxfdC5sZW5zLDAsMTksX3QubGVuY29kZSwwLF90LndvcmssVWk9e2JpdHM6X3QubGVuYml0c30pLF90LmxlbmJpdHM9VWkuYml0cyxnaSl7d3QubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLF90Lm1vZGU9MzA7YnJlYWt9X3QuaGF2ZT0wLF90Lm1vZGU9MTk7Y2FzZSAxOTpm'@;
put 'b3IoO190LmhhdmU8X3QubmxlbitfdC5uZGlzdDspe2Zvcig7JHQ9KEJuPV90LmxlbmNvZGVbcHQmKDE8PF90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxQbj02NTUzNSZCbiwhKChSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04'@;
put 'fWlmKFBuPDE2KXB0Pj4+PVJuLFl0LT1SbixfdC5sZW5zW190LmhhdmUrK109UG47ZWxzZXtpZigxNj09PVBuKXtmb3IoS3I9Um4rMjtZdDxLcjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZihwdD4+Pj1SbixZdC09Um4sMD09PV90LmhhdmUpe3d0'@;
put 'Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsX3QubW9kZT0zMDticmVha31xcj1fdC5sZW5zW190LmhhdmUtMV0seW49MysoMyZwdCkscHQ+Pj49MixZdC09Mn1lbHNlIGlmKDE3PT09UG4pe2ZvcihLcj1SbiszO1l0PEtyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRb'@;
put 'cnQrK108PFl0LFl0Kz04fVl0LT1Sbixxcj0wLHluPTMrKDcmKHB0Pj4+PVJuKSkscHQ+Pj49MyxZdC09M31lbHNle2ZvcihLcj1Sbis3O1l0PEtyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fVl0LT1Sbixxcj0wLHluPTExKygxMjcmKHB0Pj4+PVJu'@;
put 'KSkscHQ+Pj49NyxZdC09N31pZihfdC5oYXZlK3luPl90Lm5sZW4rX3QubmRpc3Qpe3d0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsX3QubW9kZT0zMDticmVha31mb3IoO3luLS07KV90LmxlbnNbX3QuaGF2ZSsrXT1xcn19aWYoMzA9PT1fdC5tb2RlKWJyZWFrO2lmKDA9PT1f'@;
put 'dC5sZW5zWzI1Nl0pe3d0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixfdC5tb2RlPTMwO2JyZWFrfWlmKF90LmxlbmJpdHM9OSxnaT1qKDEsX3QubGVucywwLF90Lm5sZW4sX3QubGVuY29kZSwwLF90LndvcmssVWk9e2JpdHM6X3QubGVuYml0c30pLF90Lmxl'@;
put 'bmJpdHM9VWkuYml0cyxnaSl7d3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLF90Lm1vZGU9MzA7YnJlYWt9aWYoX3QuZGlzdGJpdHM9NixfdC5kaXN0Y29kZT1fdC5kaXN0ZHluLGdpPWooMixfdC5sZW5zLF90Lm5sZW4sX3QubmRpc3QsX3QuZGlzdGNvZGUsMCxfdC53b3Jr'@;
put 'LFVpPXtiaXRzOl90LmRpc3RiaXRzfSksX3QuZGlzdGJpdHM9VWkuYml0cyxnaSl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLF90Lm1vZGU9MzA7YnJlYWt9aWYoX3QubW9kZT0yMCw2PT09WHQpYnJlYWsgZTtjYXNlIDIwOl90Lm1vZGU9MjE7Y2FzZSAyMTppZihRdD49NiYmRHQ+'@;
put 'PTI1OCl7d3QubmV4dF9vdXQ9SXQsd3QuYXZhaWxfb3V0PUR0LHd0Lm5leHRfaW49cnQsd3QuYXZhaWxfaW49UXQsX3QuaG9sZD1wdCxfdC5iaXRzPVl0LEUod3QsenQpLEl0PXd0Lm5leHRfb3V0LG1uPXd0Lm91dHB1dCxEdD13dC5hdmFpbF9vdXQscnQ9d3QubmV4dF9pbixOdD13dC5pbnB1'@;
put 'dCxRdD13dC5hdmFpbF9pbixwdD1fdC5ob2xkLFl0PV90LmJpdHMsMTI9PT1fdC5tb2RlJiYoX3QuYmFjaz0tMSk7YnJlYWt9Zm9yKF90LmJhY2s9MDskdD0oQm49X3QubGVuY29kZVtwdCYoMTw8X3QubGVuYml0cyktMV0pPj4+MTYmMjU1LFBuPTY1NTM1JkJuLCEoKFJuPUJuPj4+MjQpPD1Z'@;
put 'dCk7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoJHQmJiEoMjQwJiR0KSl7Zm9yKG5pPVJuLGxuPSR0LGpuPVBuOyR0PShCbj1fdC5sZW5jb2RlW2puKygocHQmKDE8PG5pK2xuKS0xKT4+bmkpXSk+Pj4xNiYyNTUsUG49NjU1MzUmQm4sIShuaSso'@;
put 'Um49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1wdD4+Pj1uaSxZdC09bmksX3QuYmFjays9bml9aWYocHQ+Pj49Um4sWXQtPVJuLF90LmJhY2srPVJuLF90Lmxlbmd0aD1QbiwwPT09JHQpe190Lm1vZGU9MjY7YnJlYWt9aWYo'@;
put 'MzImJHQpe190LmJhY2s9LTEsX3QubW9kZT0xMjticmVha31pZig2NCYkdCl7d3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLF90Lm1vZGU9MzA7YnJlYWt9X3QuZXh0cmE9MTUmJHQsX3QubW9kZT0yMjtjYXNlIDIyOmlmKF90LmV4dHJhKXtmb3IoS3I9X3QuZXh0cmE7WXQ8'@;
put 'S3I7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9X3QubGVuZ3RoKz1wdCYoMTw8X3QuZXh0cmEpLTEscHQ+Pj49X3QuZXh0cmEsWXQtPV90LmV4dHJhLF90LmJhY2srPV90LmV4dHJhfV90Lndhcz1fdC5sZW5ndGgsX3QubW9kZT0yMztjYXNlIDIzOmZv'@;
put 'cig7JHQ9KEJuPV90LmRpc3Rjb2RlW3B0JigxPDxfdC5kaXN0Yml0cyktMV0pPj4+MTYmMjU1LFBuPTY1NTM1JkJuLCEoKFJuPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoISgyNDAmJHQpKXtmb3Iobmk9Um4sbG49JHQs'@;
put 'am49UG47JHQ9KEJuPV90LmRpc3Rjb2RlW2puKygocHQmKDE8PG5pK2xuKS0xKT4+bmkpXSk+Pj4xNiYyNTUsUG49NjU1MzUmQm4sIShuaSsoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1RdClicmVhayBlO1F0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1wdD4+Pj1uaSxZdC09bmksX3Qu'@;
put 'YmFjays9bml9aWYocHQ+Pj49Um4sWXQtPVJuLF90LmJhY2srPVJuLDY0JiR0KXt3dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsX3QubW9kZT0zMDticmVha31fdC5vZmZzZXQ9UG4sX3QuZXh0cmE9MTUmJHQsX3QubW9kZT0yNDtjYXNlIDI0OmlmKF90LmV4dHJhKXtmb3IoS3I9X3Qu'@;
put 'ZXh0cmE7WXQ8S3I7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9X3Qub2Zmc2V0Kz1wdCYoMTw8X3QuZXh0cmEpLTEscHQ+Pj49X3QuZXh0cmEsWXQtPV90LmV4dHJhLF90LmJhY2srPV90LmV4dHJhfWlmKF90Lm9mZnNldD5fdC5kbWF4KXt3dC5tc2c9'@;
put 'ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixfdC5tb2RlPTMwO2JyZWFrfV90Lm1vZGU9MjU7Y2FzZSAyNTppZigwPT09RHQpYnJlYWsgZTtpZihfdC5vZmZzZXQ+KHluPXp0LUR0KSl7aWYoKHluPV90Lm9mZnNldC15bik+X3Qud2hhdmUmJl90LnNhbmUpe3d0Lm1zZz0iaW52YWxp'@;
put 'ZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLF90Lm1vZGU9MzA7YnJlYWt9eG49eW4+X3Qud25leHQ/X3Qud3NpemUtKHluLT1fdC53bmV4dCk6X3Qud25leHQteW4seW4+X3QubGVuZ3RoJiYoeW49X3QubGVuZ3RoKSxzbj1fdC53aW5kb3d9ZWxzZSBzbj1tbix4bj1JdC1fdC5vZmZzZXQseW49'@;
put 'X3QubGVuZ3RoO3luPkR0JiYoeW49RHQpLER0LT15bixfdC5sZW5ndGgtPXluO2Rve21uW0l0KytdPXNuW3huKytdfXdoaWxlKC0teW4pOzA9PT1fdC5sZW5ndGgmJihfdC5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1EdClicmVhayBlO21uW0l0KytdPV90Lmxlbmd0aCxEdC0tLF90'@;
put 'Lm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihfdC53cmFwKXtmb3IoO1l0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxwdHw9TnRbcnQrK108PFl0LFl0Kz04fWlmKHd0LnRvdGFsX291dCs9enQtPUR0LF90LnRvdGFsKz16dCx6dCYmKHd0LmFkbGVyPV90LmNoZWNrPV90LmZsYWdzP2so'@;
put 'X3QuY2hlY2ssbW4senQsSXQtenQpOkkoX3QuY2hlY2ssbW4senQsSXQtenQpKSx6dD1EdCwoX3QuZmxhZ3M/cHQ6dXQocHQpKSE9PV90LmNoZWNrKXt3dC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixfdC5tb2RlPTMwO2JyZWFrfXB0PTAsWXQ9MH1fdC5tb2RlPTI4O2Nhc2UgMjg6aWYo'@;
put 'X3Qud3JhcCYmX3QuZmxhZ3Mpe2Zvcig7WXQ8MzI7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYocHQhPT0oNDI5NDk2NzI5NSZfdC50b3RhbCkpe3d0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsX3QubW9kZT0zMDticmVha31wdD0wLFl0'@;
put 'PTB9X3QubW9kZT0yOTtjYXNlIDI5OmdpPTE7YnJlYWsgZTtjYXNlIDMwOmdpPS0zO2JyZWFrIGU7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiBzZX1yZXR1cm4gd3QubmV4dF9vdXQ9SXQsd3QuYXZhaWxfb3V0PUR0LHd0Lm5leHRfaW49cnQsd3QuYXZhaWxfaW49UXQsX3QuaG9s'@;
put 'ZD1wdCxfdC5iaXRzPVl0LChfdC53c2l6ZXx8enQhPT13dC5hdmFpbF9vdXQmJl90Lm1vZGU8MzAmJihfdC5tb2RlPDI3fHw0IT09WHQpKSYmZnVuY3Rpb24gSG4od3QsWHQsX3QsTnQpe3ZhciBtbixydD13dC5zdGF0ZTtyZXR1cm4gbnVsbD09PXJ0LndpbmRvdyYmKHJ0LndzaXplPTE8PHJ0'@;
put 'LndiaXRzLHJ0LnduZXh0PTAscnQud2hhdmU9MCxydC53aW5kb3c9bmV3IEsuQnVmOChydC53c2l6ZSkpLE50Pj1ydC53c2l6ZT8oSy5hcnJheVNldChydC53aW5kb3csWHQsX3QtcnQud3NpemUscnQud3NpemUsMCkscnQud25leHQ9MCxydC53aGF2ZT1ydC53c2l6ZSk6KChtbj1ydC53c2l6'@;
put 'ZS1ydC53bmV4dCk+TnQmJihtbj1OdCksSy5hcnJheVNldChydC53aW5kb3csWHQsX3QtTnQsbW4scnQud25leHQpLChOdC09bW4pPyhLLmFycmF5U2V0KHJ0LndpbmRvdyxYdCxfdC1OdCxOdCwwKSxydC53bmV4dD1OdCxydC53aGF2ZT1ydC53c2l6ZSk6KHJ0LnduZXh0Kz1tbixydC53bmV4'@;
put 'dD09PXJ0LndzaXplJiYocnQud25leHQ9MCkscnQud2hhdmU8cnQud3NpemUmJihydC53aGF2ZSs9bW4pKSksMH0od3Qsd3Qub3V0cHV0LHd0Lm5leHRfb3V0LHp0LXd0LmF2YWlsX291dCk/KF90Lm1vZGU9MzEsLTQpOih6dC09d3QuYXZhaWxfb3V0LHd0LnRvdGFsX2luKz1Jbi09d3QuYXZh'@;
put 'aWxfaW4sd3QudG90YWxfb3V0Kz16dCxfdC50b3RhbCs9enQsX3Qud3JhcCYmenQmJih3dC5hZGxlcj1fdC5jaGVjaz1fdC5mbGFncz9rKF90LmNoZWNrLG1uLHp0LHd0Lm5leHRfb3V0LXp0KTpJKF90LmNoZWNrLG1uLHp0LHd0Lm5leHRfb3V0LXp0KSksd3QuZGF0YV90eXBlPV90LmJpdHMr'@;
put 'KF90Lmxhc3Q/NjQ6MCkrKDEyPT09X3QubW9kZT8xMjg6MCkrKDIwPT09X3QubW9kZXx8MTU9PT1fdC5tb2RlPzI1NjowKSwoMD09PUluJiYwPT09enR8fDQ9PT1YdCkmJmdpPT09ZWUmJihnaT0tNSksZ2kpfSx6LmluZmxhdGVFbmQ9ZnVuY3Rpb24gZm4od3Qpe2lmKCF3dHx8IXd0LnN0YXRl'@;
put 'KXJldHVybiBzZTt2YXIgWHQ9d3Quc3RhdGU7cmV0dXJuIFh0LndpbmRvdyYmKFh0LndpbmRvdz1udWxsKSx3dC5zdGF0ZT1udWxsLGVlfSx6LmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gaG4od3QsWHQpe3ZhciBfdDtyZXR1cm4gd3QmJnd0LnN0YXRlJiYyJihfdD13dC5zdGF0ZSkud3Jh'@;
put 'cD8oX3QuaGVhZD1YdCxYdC5kb25lPSExLGVlKTpzZX0sei5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vaW5mZmFzdCI6MzQsIi4vaW5mdHJlZXMiOjM2'@;
put 'fV0sMzY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIiksWT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLFg9WzE2LDE2'@;
put 'LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxVPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5'@;
put 'LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxxPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF07Ui5leHBvcnRzPWZ1bmN0aW9uKHRl'@;
put 'LG9lLHNlLGhlLHVlLGNlLEcsYil7dmFyIGRlLGZlLHhlLExlLEZlLFdlLFBlLGJlLEFlLEQ9Yi5iaXRzLEg9MCxOPTAsZz0wLEM9MCxTPTAsdj0wLHA9MCx3PTAsSj0wLG5lPTAsT2U9bnVsbCxqZT0wLEtlPW5ldyBLLkJ1ZjE2KDE2KSxZZT1uZXcgSy5CdWYxNigxNiksUWU9bnVsbCxsdD0w'@;
put 'O2ZvcihIPTA7SDw9MTU7SCsrKUtlW0hdPTA7Zm9yKE49MDtOPGhlO04rKylLZVtvZVtzZStOXV0rKztmb3IoUz1ELEM9MTU7Qz49MSYmMD09PUtlW0NdO0MtLSk7aWYoUz5DJiYoUz1DKSwwPT09QylyZXR1cm4gdWVbY2UrK109MjA5NzE1MjAsdWVbY2UrK109MjA5NzE1MjAsYi5iaXRzPTEs'@;
put 'MDtmb3IoZz0xO2c8QyYmMD09PUtlW2ddO2crKyk7Zm9yKFM8ZyYmKFM9Zyksdz0xLEg9MTtIPD0xNTtIKyspaWYodzw8PTEsKHctPUtlW0hdKTwwKXJldHVybi0xO2lmKHc+MCYmKDA9PT10ZXx8MSE9PUMpKXJldHVybi0xO2ZvcihZZVsxXT0wLEg9MTtIPDE1O0grKylZZVtIKzFdPVllW0hd'@;
put 'K0tlW0hdO2ZvcihOPTA7TjxoZTtOKyspMCE9PW9lW3NlK05dJiYoR1tZZVtvZVtzZStOXV0rK109Tik7aWYoMD09PXRlPyhPZT1RZT1HLFdlPTE5KToxPT09dGU/KE9lPVksamUtPTI1NyxRZT1YLGx0LT0yNTcsV2U9MjU2KTooT2U9VSxRZT1xLFdlPS0xKSxuZT0wLE49MCxIPWcsRmU9Y2Us'@;
put 'dj1TLHA9MCx4ZT0tMSxMZT0oSj0xPDxTKS0xLDE9PT10ZSYmSj44NTJ8fDI9PT10ZSYmSj41OTIpcmV0dXJuIDE7Zm9yKDs7KXtQZT1ILXAsR1tOXTxXZT8oYmU9MCxBZT1HW05dKTpHW05dPldlPyhiZT1RZVtsdCtHW05dXSxBZT1PZVtqZStHW05dXSk6KGJlPTk2LEFlPTApLGRlPTE8PEgt'@;
put 'cCxnPWZlPTE8PHY7ZG97dWVbRmUrKG5lPj5wKSsoZmUtPWRlKV09UGU8PDI0fGJlPDwxNnxBZXwwfXdoaWxlKDAhPT1mZSk7Zm9yKGRlPTE8PEgtMTtuZSZkZTspZGU+Pj0xO2lmKDAhPT1kZT8obmUmPWRlLTEsbmUrPWRlKTpuZT0wLE4rKywwPT0tLUtlW0hdKXtpZihIPT09QylicmVhaztI'@;
put 'PW9lW3NlK0dbTl1dfWlmKEg+UyYmKG5lJkxlKSE9PXhlKXtmb3IoMD09PXAmJihwPVMpLEZlKz1nLHc9MTw8KHY9SC1wKTt2K3A8QyYmISgody09S2VbditwXSk8PTApOyl2Kyssdzw8PTE7aWYoSis9MTw8diwxPT09dGUmJko+ODUyfHwyPT09dGUmJko+NTkyKXJldHVybiAxO3VlW3hlPW5l'@;
put 'JkxlXT1TPDwyNHx2PDwxNnxGZS1jZXwwfX1yZXR1cm4gMCE9PW5lJiYodWVbRmUrbmVdPUgtcDw8MjR8NjQ8PDE2fDApLGIuYml0cz1TLDB9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzNzpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ezI6Im5lZWQgZGljdGlv'@;
put 'bmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0se31dLDM4'@;
put 'OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpO2Z1bmN0aW9uIFYoZnQpe2Zvcih2YXIgZm49ZnQubGVuZ3RoOy0tZm4+PTA7KWZ0W2ZuXT0wfXZhciBjZT0xNSxHPTE2LEM9WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywz'@;
put 'LDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0sUz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sdj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10scD1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUs'@;
put 'MTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sSj1uZXcgQXJyYXkoNTc2KTtWKEopO3ZhciBuZT1uZXcgQXJyYXkoNjApO1YobmUpO3ZhciBkZT1uZXcgQXJyYXkoNTEyKTtWKGRlKTt2YXIgZmU9bmV3IEFycmF5KDI1Nik7VihmZSk7dmFyIHhlPW5ldyBBcnJheSgyOSk7Vih4ZSk7dmFyIExlPW5l'@;
put 'dyBBcnJheSgzMCk7VihMZSk7dmFyIE9lLGplLFdlLEZlPWZ1bmN0aW9uKGZ0LGZuLGhuLHd0LFh0KXt0aGlzLnN0YXRpY190cmVlPWZ0LHRoaXMuZXh0cmFfYml0cz1mbix0aGlzLmV4dHJhX2Jhc2U9aG4sdGhpcy5lbGVtcz13dCx0aGlzLm1heF9sZW5ndGg9WHQsdGhpcy5oYXNfc3RyZWU9'@;
put 'ZnQmJmZ0Lmxlbmd0aH0sS2U9ZnVuY3Rpb24oZnQsZm4pe3RoaXMuZHluX3RyZWU9ZnQsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPWZufTtmdW5jdGlvbiBZZShmdCl7cmV0dXJuIGZ0PDI1Nj9kZVtmdF06ZGVbMjU2KyhmdD4+PjcpXX1mdW5jdGlvbiBRZShmdCxmbil7ZnQucGVu'@;
put 'ZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmZm4sZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mbj4+PjgmMjU1fWZ1bmN0aW9uIGx0KGZ0LGZuLGhuKXtmdC5iaV92YWxpZD5HLWhuPyhmdC5iaV9idWZ8PWZuPDxmdC5iaV92YWxpZCY2NTUzNSxRZShmdCxmdC5iaV9idWYpLGZ0LmJp'@;
put 'X2J1Zj1mbj4+Ry1mdC5iaV92YWxpZCxmdC5iaV92YWxpZCs9aG4tRyk6KGZ0LmJpX2J1Znw9Zm48PGZ0LmJpX3ZhbGlkJjY1NTM1LGZ0LmJpX3ZhbGlkKz1obil9ZnVuY3Rpb24gUGUoZnQsZm4saG4pe2x0KGZ0LGhuWzIqZm5dLGhuWzIqZm4rMV0pfWZ1bmN0aW9uIGJlKGZ0LGZuKXt2YXIg'@;
put 'aG49MDtkb3tobnw9MSZmdCxmdD4+Pj0xLGhuPDw9MX13aGlsZSgtLWZuPjApO3JldHVybiBobj4+PjF9ZnVuY3Rpb24gcWUoZnQsZm4saG4pe3ZhciBfdCxOdCx3dD1uZXcgQXJyYXkoY2UrMSksWHQ9MDtmb3IoX3Q9MTtfdDw9Y2U7X3QrKyl3dFtfdF09WHQ9WHQraG5bX3QtMV08PDE7Zm9y'@;
put 'KE50PTA7TnQ8PWZuO050Kyspe3ZhciBtbj1mdFsyKk50KzFdOzAhPT1tbiYmKGZ0WzIqTnRdPWJlKHd0W21uXSsrLG1uKSl9fWZ1bmN0aW9uIFVlKGZ0KXt2YXIgZm47Zm9yKGZuPTA7Zm48Mjg2O2ZuKyspZnQuZHluX2x0cmVlWzIqZm5dPTA7Zm9yKGZuPTA7Zm48MzA7Zm4rKylmdC5keW5f'@;
put 'ZHRyZWVbMipmbl09MDtmb3IoZm49MDtmbjwxOTtmbisrKWZ0LmJsX3RyZWVbMipmbl09MDtmdC5keW5fbHRyZWVbNTEyXT0xLGZ0Lm9wdF9sZW49ZnQuc3RhdGljX2xlbj0wLGZ0Lmxhc3RfbGl0PWZ0Lm1hdGNoZXM9MH1mdW5jdGlvbiBodChmdCl7ZnQuYmlfdmFsaWQ+OD9RZShmdCxmdC5i'@;
put 'aV9idWYpOmZ0LmJpX3ZhbGlkPjAmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MH1mdW5jdGlvbiBEZShmdCxmbixobix3dCl7dmFyIFh0PTIqZm4sX3Q9MipobjtyZXR1cm4gZnRbWHRdPGZ0W190XXx8ZnRbWHRdPT09'@;
put 'ZnRbX3RdJiZ3dFtmbl08PXd0W2huXX1mdW5jdGlvbiB6ZShmdCxmbixobil7Zm9yKHZhciB3dD1mdC5oZWFwW2huXSxYdD1objw8MTtYdDw9ZnQuaGVhcF9sZW4mJihYdDxmdC5oZWFwX2xlbiYmRGUoZm4sZnQuaGVhcFtYdCsxXSxmdC5oZWFwW1h0XSxmdC5kZXB0aCkmJlh0KyssIURlKGZu'@;
put 'LHd0LGZ0LmhlYXBbWHRdLGZ0LmRlcHRoKSk7KWZ0LmhlYXBbaG5dPWZ0LmhlYXBbWHRdLGhuPVh0LFh0PDw9MTtmdC5oZWFwW2huXT13dH1mdW5jdGlvbiBvdChmdCxmbixobil7dmFyIHd0LFh0LE50LG1uLF90PTA7aWYoMCE9PWZ0Lmxhc3RfbGl0KWRve3d0PWZ0LnBlbmRpbmdfYnVmW2Z0'@;
put 'LmRfYnVmKzIqX3RdPDw4fGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqX3QrMV0sWHQ9ZnQucGVuZGluZ19idWZbZnQubF9idWYrX3RdLF90KyssMD09PXd0P1BlKGZ0LFh0LGZuKTooUGUoZnQsKE50PWZlW1h0XSkrMjU2KzEsZm4pLDAhPT0obW49Q1tOdF0pJiZsdChmdCxYdC09eGVbTnRd'@;
put 'LG1uKSxQZShmdCxOdD1ZZSgtLXd0KSxobiksMCE9PShtbj1TW050XSkmJmx0KGZ0LHd0LT1MZVtOdF0sbW4pKX13aGlsZShfdDxmdC5sYXN0X2xpdCk7UGUoZnQsMjU2LGZuKX1mdW5jdGlvbiB1dChmdCxmbil7dmFyIE50LG1uLEl0LGhuPWZuLmR5bl90cmVlLHd0PWZuLnN0YXRfZGVzYy5z'@;
put 'dGF0aWNfdHJlZSxYdD1mbi5zdGF0X2Rlc2MuaGFzX3N0cmVlLF90PWZuLnN0YXRfZGVzYy5lbGVtcyxydD0tMTtmb3IoZnQuaGVhcF9sZW49MCxmdC5oZWFwX21heD01NzMsTnQ9MDtOdDxfdDtOdCsrKTAhPT1oblsyKk50XT8oZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1ydD1OdCxmdC5kZXB0'@;
put 'aFtOdF09MCk6aG5bMipOdCsxXT0wO2Zvcig7ZnQuaGVhcF9sZW48MjspaG5bMiooSXQ9ZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1ydDwyPysrcnQ6MCldPTEsZnQuZGVwdGhbSXRdPTAsZnQub3B0X2xlbi0tLFh0JiYoZnQuc3RhdGljX2xlbi09d3RbMipJdCsxXSk7Zm9yKGZuLm1heF9jb2Rl'@;
put 'PXJ0LE50PWZ0LmhlYXBfbGVuPj4xO050Pj0xO050LS0pemUoZnQsaG4sTnQpO0l0PV90O2Rve050PWZ0LmhlYXBbMV0sZnQuaGVhcFsxXT1mdC5oZWFwW2Z0LmhlYXBfbGVuLS1dLHplKGZ0LGhuLDEpLG1uPWZ0LmhlYXBbMV0sZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1OdCxmdC5oZWFwWy0t'@;
put 'ZnQuaGVhcF9tYXhdPW1uLGhuWzIqSXRdPWhuWzIqTnRdK2huWzIqbW5dLGZ0LmRlcHRoW0l0XT0oZnQuZGVwdGhbTnRdPj1mdC5kZXB0aFttbl0/ZnQuZGVwdGhbTnRdOmZ0LmRlcHRoW21uXSkrMSxoblsyKk50KzFdPWhuWzIqbW4rMV09SXQsZnQuaGVhcFsxXT1JdCsrLHplKGZ0LGhuLDEp'@;
put 'fXdoaWxlKGZ0LmhlYXBfbGVuPj0yKTtmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPWZ0LmhlYXBbMV0sZnVuY3Rpb24gVGUoZnQsZm4pe3ZhciBJdCxRdCxEdCxwdCxZdCxJbixobj1mbi5keW5fdHJlZSx3dD1mbi5tYXhfY29kZSxYdD1mbi5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsX3Q9Zm4uc3Rh'@;
put 'dF9kZXNjLmhhc19zdHJlZSxOdD1mbi5zdGF0X2Rlc2MuZXh0cmFfYml0cyxtbj1mbi5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxydD1mbi5zdGF0X2Rlc2MubWF4X2xlbmd0aCx6dD0wO2ZvcihwdD0wO3B0PD1jZTtwdCsrKWZ0LmJsX2NvdW50W3B0XT0wO2ZvcihoblsyKmZ0LmhlYXBbZnQuaGVh'@;
put 'cF9tYXhdKzFdPTAsSXQ9ZnQuaGVhcF9tYXgrMTtJdDw1NzM7SXQrKykocHQ9aG5bMipoblsyKihRdD1mdC5oZWFwW0l0XSkrMV0rMV0rMSk+cnQmJihwdD1ydCx6dCsrKSxoblsyKlF0KzFdPXB0LCEoUXQ+d3QpJiYoZnQuYmxfY291bnRbcHRdKyssWXQ9MCxRdD49bW4mJihZdD1OdFtRdC1t'@;
put 'bl0pLGZ0Lm9wdF9sZW4rPShJbj1oblsyKlF0XSkqKHB0K1l0KSxfdCYmKGZ0LnN0YXRpY19sZW4rPUluKihYdFsyKlF0KzFdK1l0KSkpO2lmKDAhPT16dCl7ZG97Zm9yKHB0PXJ0LTE7MD09PWZ0LmJsX2NvdW50W3B0XTspcHQtLTtmdC5ibF9jb3VudFtwdF0tLSxmdC5ibF9jb3VudFtwdCsx'@;
put 'XSs9MixmdC5ibF9jb3VudFtydF0tLSx6dC09Mn13aGlsZSh6dD4wKTtmb3IocHQ9cnQ7MCE9PXB0O3B0LS0pZm9yKFF0PWZ0LmJsX2NvdW50W3B0XTswIT09UXQ7KSEoKER0PWZ0LmhlYXBbLS1JdF0pPnd0KSYmKGhuWzIqRHQrMV0hPT1wdCYmKGZ0Lm9wdF9sZW4rPShwdC1oblsyKkR0KzFd'@;
put 'KSpoblsyKkR0XSxoblsyKkR0KzFdPXB0KSxRdC0tKX19KGZ0LGZuKSxxZShobixydCxmdC5ibF9jb3VudCl9ZnVuY3Rpb24gTXQoZnQsZm4saG4pe3ZhciB3dCxfdCxYdD0tMSxOdD1mblsxXSxtbj0wLHJ0PTcsSXQ9NDtmb3IoMD09PU50JiYocnQ9MTM4LEl0PTMpLGZuWzIqKGhuKzEpKzFd'@;
put 'PTY1NTM1LHd0PTA7d3Q8PWhuO3d0KyspX3Q9TnQsTnQ9Zm5bMiood3QrMSkrMV0sISgrK21uPHJ0JiZfdD09PU50KSYmKG1uPEl0P2Z0LmJsX3RyZWVbMipfdF0rPW1uOjAhPT1fdD8oX3QhPT1YdCYmZnQuYmxfdHJlZVsyKl90XSsrLGZ0LmJsX3RyZWVbMzJdKyspOm1uPD0xMD9mdC5ibF90'@;
put 'cmVlWzM0XSsrOmZ0LmJsX3RyZWVbMzZdKyssbW49MCxYdD1fdCwwPT09TnQ/KHJ0PTEzOCxJdD0zKTpfdD09PU50PyhydD02LEl0PTMpOihydD03LEl0PTQpKX1mdW5jdGlvbiBIdChmdCxmbixobil7dmFyIHd0LF90LFh0PS0xLE50PWZuWzFdLG1uPTAscnQ9NyxJdD00O2ZvcigwPT09TnQm'@;
put 'JihydD0xMzgsSXQ9Myksd3Q9MDt3dDw9aG47d3QrKylpZihfdD1OdCxOdD1mblsyKih3dCsxKSsxXSwhKCsrbW48cnQmJl90PT09TnQpKXtpZihtbjxJdClkb3tQZShmdCxfdCxmdC5ibF90cmVlKX13aGlsZSgwIT0tLW1uKTtlbHNlIDAhPT1fdD8oX3QhPT1YdCYmKFBlKGZ0LF90LGZ0LmJs'@;
put 'X3RyZWUpLG1uLS0pLFBlKGZ0LDE2LGZ0LmJsX3RyZWUpLGx0KGZ0LG1uLTMsMikpOm1uPD0xMD8oUGUoZnQsMTcsZnQuYmxfdHJlZSksbHQoZnQsbW4tMywzKSk6KFBlKGZ0LDE4LGZ0LmJsX3RyZWUpLGx0KGZ0LG1uLTExLDcpKTttbj0wLFh0PV90LDA9PT1OdD8ocnQ9MTM4LEl0PTMpOl90'@;
put 'PT09TnQ/KHJ0PTYsSXQ9Myk6KHJ0PTcsSXQ9NCl9fXZhciBVdD0hMTtmdW5jdGlvbiBXbihmdCxmbixobix3dCl7bHQoZnQsMCsod3Q/MTowKSwzKSxmdW5jdGlvbiBNZShmdCxmbixobix3dCl7aHQoZnQpLHd0JiYoUWUoZnQsaG4pLFFlKGZ0LH5obikpLEsuYXJyYXlTZXQoZnQucGVuZGlu'@;
put 'Z19idWYsZnQud2luZG93LGZuLGhuLGZ0LnBlbmRpbmcpLGZ0LnBlbmRpbmcrPWhufShmdCxmbixobiwhMCl9ei5fdHJfaW5pdD1mdW5jdGlvbiBibihmdCl7VXR8fChmdW5jdGlvbiBYZSgpe3ZhciBmdCxmbixobix3dCxYdCxfdD1uZXcgQXJyYXkoY2UrMSk7Zm9yKGhuPTAsd3Q9MDt3dDwy'@;
put 'ODt3dCsrKWZvcih4ZVt3dF09aG4sZnQ9MDtmdDwxPDxDW3d0XTtmdCsrKWZlW2huKytdPXd0O2ZvcihmZVtobi0xXT13dCxYdD0wLHd0PTA7d3Q8MTY7d3QrKylmb3IoTGVbd3RdPVh0LGZ0PTA7ZnQ8MTw8U1t3dF07ZnQrKylkZVtYdCsrXT13dDtmb3IoWHQ+Pj03O3d0PDMwO3d0KyspZm9y'@;
put 'KExlW3d0XT1YdDw8NyxmdD0wO2Z0PDE8PFNbd3RdLTc7ZnQrKylkZVsyNTYrWHQrK109d3Q7Zm9yKGZuPTA7Zm48PWNlO2ZuKyspX3RbZm5dPTA7Zm9yKGZ0PTA7ZnQ8PTE0MzspSlsyKmZ0KzFdPTgsZnQrKyxfdFs4XSsrO2Zvcig7ZnQ8PTI1NTspSlsyKmZ0KzFdPTksZnQrKyxfdFs5XSsr'@;
put 'O2Zvcig7ZnQ8PTI3OTspSlsyKmZ0KzFdPTcsZnQrKyxfdFs3XSsrO2Zvcig7ZnQ8PTI4NzspSlsyKmZ0KzFdPTgsZnQrKyxfdFs4XSsrO2ZvcihxZShKLDI4NyxfdCksZnQ9MDtmdDwzMDtmdCsrKW5lWzIqZnQrMV09NSxuZVsyKmZ0XT1iZShmdCw1KTtPZT1uZXcgRmUoSixDLDI1NywyODYs'@;
put 'Y2UpLGplPW5ldyBGZShuZSxTLDAsMzAsY2UpLFdlPW5ldyBGZShuZXcgQXJyYXkoMCksdiwwLDE5LDcpfSgpLFV0PSEwKSxmdC5sX2Rlc2M9bmV3IEtlKGZ0LmR5bl9sdHJlZSxPZSksZnQuZF9kZXNjPW5ldyBLZShmdC5keW5fZHRyZWUsamUpLGZ0LmJsX2Rlc2M9bmV3IEtlKGZ0LmJsX3Ry'@;
put 'ZWUsV2UpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTAsVWUoZnQpfSx6Ll90cl9zdG9yZWRfYmxvY2s9V24sei5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gJG4oZnQsZm4saG4sd3Qpe3ZhciBYdCxfdCxOdD0wO2Z0LmxldmVsPjA/KDI9PT1mdC5zdHJtLmRhdGFfdHlwZSYmKGZ0LnN0cm0u'@;
put 'ZGF0YV90eXBlPWZ1bmN0aW9uIENuKGZ0KXt2YXIgaG4sZm49NDA5MzYyNDQ0Nztmb3IoaG49MDtobjw9MzE7aG4rKyxmbj4+Pj0xKWlmKDEmZm4mJjAhPT1mdC5keW5fbHRyZWVbMipobl0pcmV0dXJuIDA7aWYoMCE9PWZ0LmR5bl9sdHJlZVsxOF18fDAhPT1mdC5keW5fbHRyZWVbMjBdfHww'@;
put 'IT09ZnQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoaG49MzI7aG48MjU2O2huKyspaWYoMCE9PWZ0LmR5bl9sdHJlZVsyKmhuXSlyZXR1cm4gMTtyZXR1cm4gMH0oZnQpKSx1dChmdCxmdC5sX2Rlc2MpLHV0KGZ0LGZ0LmRfZGVzYyksTnQ9ZnVuY3Rpb24gUHQoZnQpe3ZhciBmbjtmb3Io'@;
put 'TXQoZnQsZnQuZHluX2x0cmVlLGZ0LmxfZGVzYy5tYXhfY29kZSksTXQoZnQsZnQuZHluX2R0cmVlLGZ0LmRfZGVzYy5tYXhfY29kZSksdXQoZnQsZnQuYmxfZGVzYyksZm49MTg7Zm4+PTMmJjA9PT1mdC5ibF90cmVlWzIqcFtmbl0rMV07Zm4tLSk7cmV0dXJuIGZ0Lm9wdF9sZW4rPTMqKGZu'@;
put 'KzEpKzUrNSs0LGZufShmdCksKF90PWZ0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShYdD1mdC5vcHRfbGVuKzMrNz4+PjMpJiYoWHQ9X3QpKTpYdD1fdD1obis1LGhuKzQ8PVh0JiYtMSE9PWZuP1duKGZ0LGZuLGhuLHd0KTo0PT09ZnQuc3RyYXRlZ3l8fF90PT09WHQ/KGx0KGZ0LDIrKHd0PzE6'@;
put 'MCksMyksb3QoZnQsSixuZSkpOihsdChmdCw0Kyh3dD8xOjApLDMpLGZ1bmN0aW9uIG9uKGZ0LGZuLGhuLHd0KXt2YXIgWHQ7Zm9yKGx0KGZ0LGZuLTI1Nyw1KSxsdChmdCxobi0xLDUpLGx0KGZ0LHd0LTQsNCksWHQ9MDtYdDx3dDtYdCsrKWx0KGZ0LGZ0LmJsX3RyZWVbMipwW1h0XSsxXSwz'@;
put 'KTtIdChmdCxmdC5keW5fbHRyZWUsZm4tMSksSHQoZnQsZnQuZHluX2R0cmVlLGhuLTEpfShmdCxmdC5sX2Rlc2MubWF4X2NvZGUrMSxmdC5kX2Rlc2MubWF4X2NvZGUrMSxOdCsxKSxvdChmdCxmdC5keW5fbHRyZWUsZnQuZHluX2R0cmVlKSksVWUoZnQpLHd0JiZodChmdCl9LHouX3RyX3Rh'@;
put 'bGx5PWZ1bmN0aW9uIEhuKGZ0LGZuLGhuKXtyZXR1cm4gZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdF09Zm4+Pj44JjI1NSxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0KzFdPTI1NSZmbixmdC5wZW5kaW5nX2J1ZltmdC5sX2J1ZitmdC5sYXN0X2xp'@;
put 'dF09MjU1JmhuLGZ0Lmxhc3RfbGl0KyssMD09PWZuP2Z0LmR5bl9sdHJlZVsyKmhuXSsrOihmdC5tYXRjaGVzKyssZm4tLSxmdC5keW5fbHRyZWVbMiooZmVbaG5dKzI1NisxKV0rKyxmdC5keW5fZHRyZWVbMipZZShmbildKyspLGZ0Lmxhc3RfbGl0PT09ZnQubGl0X2J1ZnNpemUtMX0sei5f'@;
put 'dHJfYWxpZ249ZnVuY3Rpb24gZW4oZnQpe2x0KGZ0LDIsMyksUGUoZnQsMjU2LEopLGZ1bmN0aW9uIEFlKGZ0KXsxNj09PWZ0LmJpX3ZhbGlkPyhRZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTApOmZ0LmJpX3ZhbGlkPj04JiYoZnQucGVuZGluZ19idWZbZnQucGVu'@;
put 'ZGluZysrXT0yNTUmZnQuYmlfYnVmLGZ0LmJpX2J1Zj4+PTgsZnQuYmlfdmFsaWQtPTgpfShmdCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24gSygpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRf'@;
put 'aW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7'@;
put 'fV19LHt9LFs5XSkoOSl9KX0sODM0MTc6KGF0LEllLEYpPT57IWZ1bmN0aW9uIHgoTSl7TS52ZXJzaW9uPSIxLjIwMjExMTIyLjEiO3ZhciBPPTEyMDAsUj0xMjUyO3R5cGVvZiBjcHRhYmxlPiJ1IiYmKHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbC5jcHRhYmxlPUYoODA3ODgpOnR5cGVvZiB3'@;
put 'aW5kb3c8InUiJiYod2luZG93LmNwdGFibGU9Rig4MDc4OCkpKTtmb3IodmFyIHo9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMWU0XSxLPTA7Szw9ODsrK0spei5wdXNoKDEyNTArSyk7dmFyIEk9ezA6MTI1MiwxOjY1MDAxLDI6NjUwMDEsNzc6MWU0LDEyODo5MzIsMTI5Ojk0OSwxMzA6MTM2MSwx'@;
put 'MzQ6OTM2LDEzNjo5NTAsMTYxOjEyNTMsMTYyOjEyNTQsMTYzOjEyNTgsMTc3OjEyNTUsMTc4OjEyNTYsMTg2OjEyNTcsMjA0OjEyNTEsMjIyOjg3NCwyMzg6MTI1MCwyNTU6MTI1Miw2OTo2OTY5fSxrPWZ1bmN0aW9uKHkpey0xIT16LmluZGV4T2YoeSkmJihSPUlbMF09eSl9LGo9ZnVuY3Rp'@;
put 'b24oeSl7Tz15LGsoeSl9O2Z1bmN0aW9uIFYoKXtqKDEyMDApLGZ1bmN0aW9uIEUoKXtrKDEyNTIpfSgpfWZ1bmN0aW9uIEIoeSl7Zm9yKHZhciBQPVtdLEw9MCxRPXkubGVuZ3RoO0w8UTsrK0wpUFtMXT15LmNoYXJDb2RlQXQoTCk7cmV0dXJuIFB9dmFyIFU9ZnVuY3Rpb24oeSl7dmFyIFA9'@;
put 'eS5jaGFyQ29kZUF0KDApLEw9eS5jaGFyQ29kZUF0KDEpO3JldHVybiAyNTU9PVAmJjI1ND09TD9mdW5jdGlvbiBZKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aD4+MTsrK0wpUFtMXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHkuY2hhckNvZGVBdCgyKkwpKyh5LmNoYXJDb2RlQXQoMipM'@;
put 'KzEpPDw4KSk7cmV0dXJuIFAuam9pbigiIil9KHkuc2xpY2UoMikpOjI1ND09UCYmMjU1PT1MP2Z1bmN0aW9uIFgoeSl7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoPj4xOysrTClQW0xdPVN0cmluZy5mcm9tQ2hhckNvZGUoeS5jaGFyQ29kZUF0KDIqTCsxKSsoeS5jaGFyQ29kZUF0KDIq'@;
put 'TCk8PDgpKTtyZXR1cm4gUC5qb2luKCIiKX0oeS5zbGljZSgyKSk6NjUyNzk9PVA/eS5zbGljZSgxKTp5fSxxPWZ1bmN0aW9uKFApe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFApfSxlZT1mdW5jdGlvbihQKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShQKX07dHlwZW9mIGNwdGFi'@;
put 'bGU8InUiJiYoaj1mdW5jdGlvbih5KXtPPXksayh5KX0sVT1mdW5jdGlvbih5KXtyZXR1cm4gMjU1PT09eS5jaGFyQ29kZUF0KDApJiYyNTQ9PT15LmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxCKHkuc2xpY2UoMikpKTp5fSxxPWZ1bmN0aW9uKFApe3JldHVybiAx'@;
put 'MjAwPT09Tz9TdHJpbmcuZnJvbUNoYXJDb2RlKFApOmNwdGFibGUudXRpbHMuZGVjb2RlKE8sWzI1NSZQLFA+PjhdKVswXX0sZWU9ZnVuY3Rpb24oUCl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKFIsW1BdKVswXX0pO3ZhciBQLHRlPW51bGwsc2U9KFA9IkFCQ0RFRkdISUpLTE1OT1BR'@;
put 'UlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Iix7ZW5jb2RlOmZ1bmN0aW9uKEwpe2Zvcih2YXIgUT0iIixyZT0wLGdlPTAsX2U9MCx2ZT0wLFNlPTAsSGU9MCxCZT0wLEdlPTA7R2U8TC5sZW5ndGg7KXZlPShyZT1MLmNoYXJDb2RlQXQoR2UrKykpPj4y'@;
put 'LFNlPSgzJnJlKTw8NHwoZ2U9TC5jaGFyQ29kZUF0KEdlKyspKT4+NCxIZT0oMTUmZ2UpPDwyfChfZT1MLmNoYXJDb2RlQXQoR2UrKykpPj42LEJlPTYzJl9lLGlzTmFOKGdlKT9IZT1CZT02NDppc05hTihfZSkmJihCZT02NCksUSs9UC5jaGFyQXQodmUpK1AuY2hhckF0KFNlKStQLmNoYXJB'@;
put 'dChIZSkrUC5jaGFyQXQoQmUpO3JldHVybiBRfSxkZWNvZGU6ZnVuY3Rpb24oUSl7dmFyIHJlPSIiLFNlPTAsSGU9MCxCZT0wLEdlPTA7UT1RLnJlcGxhY2UoL1teXHdcK1wvXD1dL2csIiIpO2Zvcih2YXIgbnQ9MDtudDxRLmxlbmd0aDspU2U9UC5pbmRleE9mKFEuY2hhckF0KG50KyspKSxI'@;
put 'ZT1QLmluZGV4T2YoUS5jaGFyQXQobnQrKykpLHJlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNlPDwyfEhlPj40KSw2NCE9PShCZT1QLmluZGV4T2YoUS5jaGFyQXQobnQrKykpKSYmKHJlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZIZSk8PDR8QmU+PjIpKSw2NCE9PShHZT1QLmluZGV4T2Yo'@;
put 'US5jaGFyQXQobnQrKykpKSYmKHJlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJkJlKTw8NnxHZSkpO3JldHVybiByZX19KSxoZT10eXBlb2YgQnVmZmVyPCJ1IiYmdHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9uczwidSImJiEhcHJvY2Vzcy52ZXJzaW9ucy5ub2Rl'@;
put 'LHVlPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgQnVmZmVyPCJ1Iil7dmFyIGNlPSFCdWZmZXIuZnJvbTtpZighY2UpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7Y2U9ITB9dWU9Y2U/ZnVuY3Rpb24oeSxQKXtyZXR1cm4gUD9uZXcgQnVmZmVyKHksUCk6bmV3IEJ1ZmZlcih5'@;
put 'KX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY3x8KEJ1ZmZlci5hbGxvYz1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IEJ1ZmZlcih5KX0pLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IEJ1ZmZlcih5KX0p'@;
put 'fWZ1bmN0aW9uIEcoeSl7cmV0dXJuIGhlP0J1ZmZlci5hbGxvYyh5KTpuZXcgQXJyYXkoeSl9ZnVuY3Rpb24gYih5KXtyZXR1cm4gaGU/QnVmZmVyLmFsbG9jVW5zYWZlKHkpOm5ldyBBcnJheSh5KX12YXIgRD1mdW5jdGlvbihQKXtyZXR1cm4gaGU/dWUoUCwiYmluYXJ5Iik6UC5zcGxpdCgi'@;
put 'IikubWFwKGZ1bmN0aW9uKEwpe3JldHVybiAyNTUmTC5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIEgoeSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1IilyZXR1cm4gRCh5KTtmb3IodmFyIFA9bmV3IEFycmF5QnVmZmVyKHkubGVuZ3RoKSxMPW5ldyBVaW50OEFycmF5KFApLFE9MDtRIT15'@;
put 'Lmxlbmd0aDsrK1EpTFtRXT0yNTUmeS5jaGFyQ29kZUF0KFEpO3JldHVybiBQfWZ1bmN0aW9uIE4oeSl7aWYoQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4geS5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUSl9KS5qb2luKCIiKTtmb3IodmFyIFA9W10sTD0wO0w8'@;
put 'eS5sZW5ndGg7KytMKVBbTF09U3RyaW5nLmZyb21DaGFyQ29kZSh5W0xdKTtyZXR1cm4gUC5qb2luKCIiKX1mdW5jdGlvbiBDKHkpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO2lmKHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1'@;
put 'cm4gQyhuZXcgVWludDhBcnJheSh5KSk7Zm9yKHZhciBQPW5ldyBBcnJheSh5Lmxlbmd0aCksTD0wO0w8eS5sZW5ndGg7KytMKVBbTF09eVtMXTtyZXR1cm4gUH12YXIgUz1mdW5jdGlvbih5KXt2YXIgUD1bXTtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEwpe0FycmF5LmlzQXJyYXkoTCk/'@;
put 'UD1QLmNvbmNhdChMKToodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZMIGluc3RhbmNlb2YgVWludDhBcnJheXx8dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmTCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSYmKFA9UC5jb25jYXQoQyhMKSkpfSksUH0sdj0vXHUwMDAwL2cscD0vW1x1MDAwMS1cdTAw'@;
put 'MDZdL2csdz17fSxKPWZ1bmN0aW9uKFApe2Z1bmN0aW9uIEwoS3Qpe2Zvcih2YXIgZ249IiIsTG49S3QubGVuZ3RoLTE7TG4+PTA7KWduKz1LdC5jaGFyQXQoTG4tLSk7cmV0dXJuIGdufWZ1bmN0aW9uIFEoS3QsZ24pe2Zvcih2YXIgTG49IiI7TG4ubGVuZ3RoPGduOylMbis9S3Q7cmV0dXJu'@;
put 'IExufWZ1bmN0aW9uIHJlKEt0LGduKXt2YXIgTG49IiIrS3Q7cmV0dXJuIExuLmxlbmd0aD49Z24/TG46USgiMCIsZ24tTG4ubGVuZ3RoKStMbn1mdW5jdGlvbiBnZShLdCxnbil7dmFyIExuPSIiK0t0O3JldHVybiBMbi5sZW5ndGg+PWduP0xuOlEoIiAiLGduLUxuLmxlbmd0aCkrTG59ZnVu'@;
put 'Y3Rpb24gX2UoS3QsZ24pe3ZhciBMbj0iIitLdDtyZXR1cm4gTG4ubGVuZ3RoPj1nbj9MbjpMbitRKCIgIixnbi1Mbi5sZW5ndGgpfVAudmVyc2lvbj0iMS4yMDIxMDcyNi4xIjt2YXIgSGU9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gQmUoS3QsZ24pe3JldHVybiBLdD5IZXx8S3Q8LUhlP2Z1'@;
put 'bmN0aW9uIHZlKEt0LGduKXt2YXIgTG49IiIrTWF0aC5yb3VuZChLdCk7cmV0dXJuIExuLmxlbmd0aD49Z24/TG46USgiMCIsZ24tTG4ubGVuZ3RoKStMbn0oS3QsZ24pOmZ1bmN0aW9uIFNlKEt0LGduKXt2YXIgTG49IiIrS3Q7cmV0dXJuIExuLmxlbmd0aD49Z24/TG46USgiMCIsZ24tTG4u'@;
put 'bGVuZ3RoKStMbn0oTWF0aC5yb3VuZChLdCksZ24pfWZ1bmN0aW9uIEdlKEt0LGduKXtyZXR1cm4gS3QubGVuZ3RoPj03Kyhnbj1nbnx8MCkmJjEwMz09KDMyfEt0LmNoYXJDb2RlQXQoZ24pKSYmMTAxPT0oMzJ8S3QuY2hhckNvZGVBdChnbisxKSkmJjExMD09KDMyfEt0LmNoYXJDb2RlQXQo'@;
put 'Z24rMikpJiYxMDE9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzMpKSYmMTE0PT0oMzJ8S3QuY2hhckNvZGVBdChnbis0KSkmJjk3PT0oMzJ8S3QuY2hhckNvZGVBdChnbis1KSkmJjEwOD09KDMyfEt0LmNoYXJDb2RlQXQoZ24rNikpfWZ1bmN0aW9uIG50KEt0KXtmb3IodmFyIGduPVtdLExuPU9i'@;
put 'amVjdC5rZXlzKEt0KSxXcj0wO1dyIT09TG4ubGVuZ3RoOysrV3IpZ25bS3RbTG5bV3JdXV09TG5bV3JdO3JldHVybiBnbn12YXIgZHQ9W1siU3VuIiwiU3VuZGF5Il0sWyJNb24iLCJNb25kYXkiXSxbIlR1ZSIsIlR1ZXNkYXkiXSxbIldlZCIsIldlZG5lc2RheSJdLFsiVGh1IiwiVGh1cnNk'@;
put 'YXkiXSxbIkZyaSIsIkZyaWRheSJdLFsiU2F0IiwiU2F0dXJkYXkiXV0sQ3Q9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXByIiwiQXByaWwiXSxbIk0iLCJNYXkiLCJNYXkiXSxbIkoiLCJKdW4iLCJKdW5l'@;
put 'Il0sWyJKIiwiSnVsIiwiSnVseSJdLFsiQSIsIkF1ZyIsIkF1Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRlYyIsIkRlY2VtYmVyIl1dO2Z1bmN0aW9uIGN0KEt0KXtLdFswXT0iR2VuZXJh'@;
put 'bCIsS3RbMV09IjAiLEt0WzJdPSIwLjAwIixLdFszXT0iIywjIzAiLEt0WzRdPSIjLCMjMC4wMCIsS3RbOV09IjAlIixLdFsxMF09IjAuMDAlIixLdFsxMV09IjAuMDBFKzAwIixLdFsxMl09IiMgPy8/IixLdFsxM109IiMgPz8vPz8iLEt0WzE0XT0ibS9kL3l5IixLdFsxNV09ImQtbW1tLXl5'@;
put 'IixLdFsxNl09ImQtbW1tIixLdFsxN109Im1tbS15eSIsS3RbMThdPSJoOm1tIEFNL1BNIixLdFsxOV09Img6bW06c3MgQU0vUE0iLEt0WzIwXT0iaDptbSIsS3RbMjFdPSJoOm1tOnNzIixLdFsyMl09Im0vZC95eSBoOm1tIixLdFszN109IiMsIyMwIDsoIywjIzApIixLdFszOF09IiMsIyMw'@;
put 'IDtbUmVkXSgjLCMjMCkiLEt0WzM5XT0iIywjIzAuMDA7KCMsIyMwLjAwKSIsS3RbNDBdPSIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLEt0WzQ1XT0ibW06c3MiLEt0WzQ2XT0iW2hdOm1tOnNzIixLdFs0N109Im1tc3MuMCIsS3RbNDhdPSIjIzAuMEUrMCIsS3RbNDldPSJAIixLdFs1Nl09'@;
put 'JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJyxTbihLdCl9dmFyIGJ0PXt9O2N0KGJ0KTt2YXIgRnQ9W10sa3Q9MDtmb3Ioa3Q9NTtrdDw9ODsrK2t0KUZ0W2t0XT0zMitrdDtmb3Ioa3Q9MjM7a3Q8PTI2Oysra3QpRnRba3RdPTA7'@;
put 'Zm9yKGt0PTI3O2t0PD0zMTsrK2t0KUZ0W2t0XT0xNDtmb3Ioa3Q9NTA7a3Q8PTU4Oysra3QpRnRba3RdPTE0O2ZvcihrdD01OTtrdDw9NjI7KytrdClGdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KUZ0W2t0XT1rdC01ODtmb3Ioa3Q9NzI7a3Q8PTc1Oysra3QpRnRba3RdPWt0'@;
put 'LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClGdFtrdF09a3QtNTc7Zm9yKGt0PTc2O2t0PD03ODsrK2t0KUZ0W2t0XT1rdC01Njtmb3Ioa3Q9Nzk7a3Q8PTgxOysra3QpRnRba3RdPWt0LTM0O3ZhciBUdD1bXTtmdW5jdGlvbiBadChLdCxnbixMbil7Zm9yKHZhciBXcj1LdDwwPy0xOjEsWG49'@;
put 'S3QqV3IsZWk9MCxpcj0xLHJpPTAsbW89MSxpaT0wLHppPTAsSnI9TWF0aC5mbG9vcihYbik7aWk8Z24mJihyaT0oSnI9TWF0aC5mbG9vcihYbikpKmlyK2VpLHppPUpyKmlpK21vLCEoWG4tSnI8NWUtOCkpOylYbj0xLyhYbi1KciksZWk9aXIsaXI9cmksbW89aWksaWk9emk7aWYoemk+Z24m'@;
put 'JihpaT5nbj8oemk9bW8scmk9ZWkpOih6aT1paSxyaT1pcikpLCFMbilyZXR1cm5bMCxXcipyaSx6aV07dmFyIHdzPU1hdGguZmxvb3IoV3IqcmkvemkpO3JldHVyblt3cyxXcipyaS13cyp6aSx6aV19ZnVuY3Rpb24gcG4oS3QsZ24sTG4pe2lmKEt0PjI5NTg0NjV8fEt0PDApcmV0dXJuIG51'@;
put 'bGw7dmFyIFdyPTB8S3QsWG49TWF0aC5mbG9vcig4NjQwMCooS3QtV3IpKSxlaT0wLGlyPVtdLHJpPXtEOldyLFQ6WG4sdTo4NjQwMCooS3QtV3IpLVhuLHk6MCxtOjAsZDowLEg6MCxNOjAsUzowLHE6MH07aWYoTWF0aC5hYnMocmkudSk8MWUtNiYmKHJpLnU9MCksZ24mJmduLmRhdGUxOTA0'@;
put 'JiYoV3IrPTE0NjIpLHJpLnU+Ljk5OTkmJihyaS51PTAsODY0MDA9PSsrWG4mJihyaS5UPVhuPTAsKytXciwrK3JpLkQpKSw2MD09PVdyKWlyPUxuP1sxMzE3LDEwLDI5XTpbMTkwMCwyLDI5XSxlaT0zO2Vsc2UgaWYoMD09PVdyKWlyPUxuP1sxMzE3LDgsMjldOlsxOTAwLDEsMF0sZWk9Njtl'@;
put 'bHNle1dyPjYwJiYtLVdyO3ZhciBtbz1uZXcgRGF0ZSgxOTAwLDAsMSk7bW8uc2V0RGF0ZShtby5nZXREYXRlKCkrV3ItMSksaXI9W21vLmdldEZ1bGxZZWFyKCksbW8uZ2V0TW9udGgoKSsxLG1vLmdldERhdGUoKV0sZWk9bW8uZ2V0RGF5KCksV3I8NjAmJihlaT0oZWkrNiklNyksTG4mJihl'@;
put 'aT1mdW5jdGlvbiBfbyhLdCxnbil7Z25bMF0tPTU4MTt2YXIgTG49S3QuZ2V0RGF5KCk7cmV0dXJuIEt0PDYwJiYoTG49KExuKzYpJTcpLExufShtbyxpcikpfXJldHVybiByaS55PWlyWzBdLHJpLm09aXJbMV0scmkuZD1pclsyXSxyaS5TPVhuJTYwLFhuPU1hdGguZmxvb3IoWG4vNjApLHJp'@;
put 'Lk09WG4lNjAsWG49TWF0aC5mbG9vcihYbi82MCkscmkuSD1YbixyaS5xPWVpLHJpfVR0WzVdPVR0WzYzXT0nIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsVHRbNl09VHRbNjRdPSciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLFR0WzddPVR0WzY1XT0nIiQiIywjIzAuMDBfKTtc'@;
put 'XCgiJCIjLCMjMC4wMFxcKScsVHRbOF09VHRbNjZdPSciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLFR0WzQxXT0nXygqICMsIyMwXyk7XygqIFxcKCMsIyMwXFwpO18oKiAiLSJfKTtfKEBfKScsVHRbNDJdPSdfKCIkIiogIywjIzBfKTtfKCIkIiogXFwoIywjIzBcXCk7'@;
put 'XygiJCIqICItIl8pO18oQF8pJyxUdFs0M109J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsVHRbNDRdPSdfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogXFwoIywjIzAuMDBcXCk7XygiJCIqICItIj8/Xyk7XyhAXyknLFAucGFyc2VfZGF0ZV9j'@;
put 'b2RlPXBuO3ZhciBLbj1uZXcgRGF0ZSgxODk5LDExLDMxLDAsMCwwKSx1bj1Lbi5nZXRUaW1lKCkscW49bmV3IERhdGUoMTkwMCwyLDEsMCwwLDApO2Z1bmN0aW9uIHpuKEt0LGduKXt2YXIgTG49S3QuZ2V0VGltZSgpO3JldHVybiBnbj9Mbi09MTI2MjMwNGU1Okt0Pj1xbiYmKExuKz04NjRl'@;
put 'NSksKExuLSh1bis2ZTQqKEt0LmdldFRpbWV6b25lT2Zmc2V0KCktS24uZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIga249IiIsZXI9eyJlbi11cyI6e3k6InkiLGQ6ImQiLCIsIjoiLCIsIi4iOiIuIixkYXRlOiJfLyJ9LCJkZS1kZSI6e3k6ImoiLGQ6InQiLCIsIjoiLiIsIi4i'@;
put 'OiIsIixkYXRlOiJfLiJ9LCJpdC1pdCI6e3k6InkiLGQ6ImQiLCIsIjoiLiIsIi4iOiIsIixkYXRlOiJfLyJ9fSx0cj1lcltrbi50b0xvd2VyQ2FzZSgpXXx8ZXJbImVuLXVzIl0sWm49bnQodHIpLEJyPSIkIixvaT0iIixRcj0iLCIsdXI9Ii4iLEFuPSIvIjtmdW5jdGlvbiBTbihLdCl7c3dp'@;
put 'dGNoKChrbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOkt0WzI3XT0iWyQtNDA0XWUvbS9kIixLdFsyOF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzI5XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzBdPSdtIi8iZCIv'@;
put 'Inl5JyxLdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzJdPSdoaCJcdTY2NDIibW0iXHU1MjA2IicsS3RbMzNdPSdoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1'@;
put 'MjA2IicsS3RbMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzZdPSJbJC00MDRdZS9tL2QiLEt0WzUwXT0iWyQtNDA0XWUvbS9kIixLdFs1MV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUy'@;
put 'XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsS3RbNTNdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbNTRdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1'@;
put 'NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU3XT0iWyQtNDA0XWUvbS9kIixLdFs1OF09J1skLTQwNF1lIlx1NWU3NCJt'@;
put 'Ilx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiemgtY24iOkt0WzI3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFsyOF09J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbMjldPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSItImQiLSJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJt'@;
put 'Ilx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naCJcdTY1ZjYibW0iXHU1MjA2IicsS3RbMzNdPSdoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLEt0WzM1XT0nXHU0ZTBhXHU1MzQ4L1x1'@;
put 'NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzZdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzUwXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1MV09J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0'@;
put 'WzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NF09J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiInLEt0WzU2XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYic3Mi'@;
put 'XHU3OWQyIicsS3RbNTddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzU4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImphLWpwIjpLdFsyN109J1skLTQxMV1nZSIuIm0iLiJkJyxLdFsyOF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzI5'@;
put 'XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzBdPSdtIi8iZCIvInl5JyxLdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzJdPSdoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFszM109J2giXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5'@;
put 'ZDIiJyxLdFszNF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbMzVdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzM2XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzUwXT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzUxXT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iics'@;
put 'S3RbNTJdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzUzXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1Nl09J20iXHU2NzA4ImQiXHU2NWU1Iics'@;
put 'S3RbNTddPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbNThdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlImtvLWtyIjpLdFsyN109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLEt0WzI4XT0ibW0tZGQiLEt0WzI5XT0ibW0tZGQi'@;
put 'LEt0WzMwXT0ibW0tZGQteXkiLEt0WzMxXT0neXl5eSJcdWIxNDQiIG1tIlx1YzZkNCIgZGQiXHVjNzdjIicsS3RbMzJdPSdoIlx1YzJkYyIgbW0iXHViZDg0IicsS3RbMzNdPSdoIlx1YzJkYyIgbW0iXHViZDg0IiBzcyJcdWNkMDgiJyxLdFszNF09Inl5eXktbW0tZGQiLEt0WzM1XT0ieXl5'@;
put 'eS1tbS1kZCIsS3RbMzZdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFs1MF09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLEt0WzUxXT0ibW0tZGQiLEt0WzUyXT0ieXl5eS1tbS1kZCIsS3RbNTNdPSJ5eXl5LW1tLWRkIixLdFs1NF09Im1tLWRk'@;
put 'IixLdFs1NV09Inl5eXktbW0tZGQiLEt0WzU2XT0ieXl5eS1tbS1kZCIsS3RbNTddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFs1OF09Im1tLWRkIjticmVhaztjYXNlInRoLXRoIjpLdFs1OV09JyJ0IjAnLEt0WzYwXT0nInQiMC4wMCcsS3RbNjFdPScidCIjLCMj'@;
put 'MCcsS3RbNjJdPScidCIjLCMjMC4wMCcsS3RbNjddPSJ0MCUiLEt0WzY4XT0idDAuMDAlIixLdFs2OV09InQjID8vPyIsS3RbNzBdPSJ0IyA/Py8/PyIsS3RbNzFdPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWInLEt0WzcyXT0nXHUwZTI3Ii0iXHUwZTE0XHUw'@;
put 'ZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxLdFs3M109J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCcsS3RbNzRdPSdcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLEt0Wzc1XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5JyxLdFs3Nl09J1x1MGUwYSI6Ilx1MGUxOVx1MGUx'@;
put 'OSI6Ilx1MGUxN1x1MGUxNycsS3RbNzddPSdcdTBlMjciLyJcdTBlMTQiLyJcdTBlMWJcdTBlMWJcdTBlMWJcdTBlMWIgXHUwZTBhIjoiXHUwZTE5XHUwZTE5JyxLdFs3OF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNycsS3RbNzldPSdbXHUwZTBhXVx1MGUxOVx1MGUxOSI6Ilx1MGUx'@;
put 'N1x1MGUxNycsS3RbODBdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcuMCcsS3RbODFdPSJkL20vYmIifX1QLl9nZW5lcmFsX2ludD1mdW5jdGlvbiBDaShLdCl7cmV0dXJuIEt0LnRvU3RyaW5nKDEwKX07dmFyIHpyPWZ1bmN0aW9uKCl7dmFyIGduPS8oPzpcLjAqfChcLlxkKlsxLTld'@;
put 'KTArKSQvO2Z1bmN0aW9uIExuKGlpKXtyZXR1cm4tMT09aWkuaW5kZXhPZigiLiIpP2lpOmlpLnJlcGxhY2UoZ24sIiQxIil9dmFyIFdyPS8oPzpcLjAqfChcLlxkKlsxLTldKTArKVtFZV0vLFhuPS8oRVsrLV0pKFxkKSQvO3JldHVybiBmdW5jdGlvbih6aSl7dmFyIEpyPWZ1bmN0aW9uIG1v'@;
put 'KGlpKXt2YXIgSnIsemk9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhpaSkpKk1hdGguTE9HMTBFKTtyZXR1cm4gSnI9emk+PS00JiZ6aTw9LTE/aWkudG9QcmVjaXNpb24oMTAremkpOk1hdGguYWJzKHppKTw9OT9mdW5jdGlvbiBpcihpaSl7dmFyIHppPWlpPDA/MTI6MTEsSnI9TG4o'@;
put 'aWkudG9GaXhlZCgxMikpO3JldHVybiBKci5sZW5ndGg8PXppfHwoSnI9aWkudG9QcmVjaXNpb24oMTApKS5sZW5ndGg8PXppP0pyOmlpLnRvRXhwb25lbnRpYWwoNSl9KGlpKToxMD09PXppP2lpLnRvRml4ZWQoMTApLnN1YnN0cigwLDEyKTpmdW5jdGlvbiByaShpaSl7dmFyIHppPUxuKGlp'@;
put 'LnRvRml4ZWQoMTEpKTtyZXR1cm4gemkubGVuZ3RoPihpaTwwPzEyOjExKXx8IjAiPT09eml8fCItMCI9PT16aT9paS50b1ByZWNpc2lvbig2KTp6aX0oaWkpLExuKGZ1bmN0aW9uIGVpKGlpKXtyZXR1cm4tMT09aWkuaW5kZXhPZigiRSIpP2lpOmlpLnJlcGxhY2UoV3IsIiQxRSIpLnJlcGxh'@;
put 'Y2UoWG4sIiQxMCQyIil9KEpyLnRvVXBwZXJDYXNlKCkpKX0oemkpO3JldHVybiIsIj09PVFyJiYiLiI9PT11cj9KcjpKci5yZXBsYWNlKC9bLC5dL2csZnVuY3Rpb24od3Mpe3JldHVybiIsIj09d3M/UXI6dXJ9KX19KCk7ZnVuY3Rpb24gamkoS3QsZ24pe3N3aXRjaCh0eXBlb2YgS3Qpe2Nh'@;
put 'c2Uic3RyaW5nIjpyZXR1cm4gS3Q7Y2FzZSJib29sZWFuIjpyZXR1cm4gS3Q/IlRSVUUiOiJGQUxTRSI7Y2FzZSJudW1iZXIiOnJldHVybigwfEt0KT09PUt0P0t0LnRvU3RyaW5nKDEwKTp6cihLdCk7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1LdCly'@;
put 'ZXR1cm4iIjtpZihLdCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG51KDE0LHpuKEt0LGduJiZnbi5kYXRlMTkwNCksZ24pfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6ICIrS3QpfVAuX2dlbmVyYWxfbnVtPXpyLFAuX2dlbmVyYWw9amk7dmFy'@;
put 'IERpPSJcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTkiLnNwbGl0KCIiKTtmdW5jdGlvbiBZbyhLdCxnbixMbixXcil7dmFyIG1vLFhuPSIiLGVpPTAsaXI9MCxyaT1Mbi55LGlpPTA7c3dpdGNoKEt0KXtjYXNlIDk4OnJpPUxuLnkr'@;
put 'NTQzO2Nhc2UgMTIxOnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89cmklMTAwLGlpPTI7YnJlYWs7ZGVmYXVsdDptbz1yaSUxZTQsaWk9NH1icmVhaztjYXNlIDEwOTpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPUxuLm0saWk9Z24ubGVuZ3RoO2JyZWFrO2Nh'@;
put 'c2UgMzpyZXR1cm4gQ3RbTG4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIEN0W0xuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gQ3RbTG4ubS0xXVsyXX1icmVhaztjYXNlIDEwMDpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPUxuLmQsaWk9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzpy'@;
put 'ZXR1cm4gZHRbTG4ucV1bMF07ZGVmYXVsdDpyZXR1cm4gZHRbTG4ucV1bMV19YnJlYWs7Y2FzZSAxMDQ6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz0xKyhMbi5IKzExKSUxMixpaT1nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrZ259'@;
put 'YnJlYWs7Y2FzZSA3Mjpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPUxuLkgsaWk9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK2dufWJyZWFrO2Nhc2UgNzc6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5NLGlp'@;
put 'PWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBtaW51dGUgZm9ybWF0OiAiK2dufWJyZWFrO2Nhc2UgMTE1OmlmKCJzIiE9Z24mJiJzcyIhPWduJiYiLjAiIT1nbiYmIi4wMCIhPWduJiYiLjAwMCIhPWduKXRocm93ImJhZCBzZWNvbmQgZm9ybWF0OiAiK2duO3JldHVybiAwIT09'@;
put 'TG4udXx8InMiIT1nbiYmInNzIiE9Z24/KGlyPVdyPj0yPzM9PT1Xcj8xZTM6MTAwOjE9PT1Xcj8xMDoxLChlaT1NYXRoLnJvdW5kKGlyKihMbi5TK0xuLnUpKSk+PTYwKmlyJiYoZWk9MCksInMiPT09Z24/MD09PWVpPyIwIjoiIitlaS9pcjooWG49cmUoZWksMitXciksInNzIj09PWduP1hu'@;
put 'LnN1YnN0cigwLDIpOiIuIitYbi5zdWJzdHIoMixnbi5sZW5ndGgtMSkpKTpyZShMbi5TLGduLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2goZ24pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOm1vPTI0KkxuLkQrTG4uSDticmVhaztjYXNl'@;
put 'IlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjptbz02MCooMjQqTG4uRCtMbi5IKStMbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10iOm1vPTYwKig2MCooMjQqTG4uRCtMbi5I'@;
put 'KStMbi5NKStNYXRoLnJvdW5kKExuLlMrTG4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrZ259aWk9Mz09PWduLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6bW89cmksaWk9MTticmVhaztjYXNlIDM2MjM6bW89TG4uZCxpaT1nbi5sZW5ndGg7YnJlYWs7'@;
put 'Y2FzZSAzNjA0OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89TG4ubSxpaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBDdFtMbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gQ3RbTG4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBDdFtMbi5tLTFdWzJdfWJyZWFrO2Nhc2Ug'@;
put 'MzYxMTpzd2l0Y2gocmk9TG4ueSs1NDMsZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPXJpJTEwMCxpaT0yO2JyZWFrO2RlZmF1bHQ6bW89cmklMWU0LGlpPTR9YnJlYWs7Y2FzZSAzNTk0Om1vPUxuLkgsaWk9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTptbz1Mbi5NLGlpPWduLmxlbmd0'@;
put 'aDticmVhaztjYXNlIDM2MDc6bW89TG4uUyxpaT1nbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBLdC50b1N0cmluZygxNil9dmFyIHppPWlpPjA/cmUobW8saWkpOiIiO3JldHVybig5MD09S3Q/Z24uY2hhckNvZGVBdCgxKTwzNTg0Okt0PDM1ODQpP3ppOnppLnJlcGxhY2UoL1swLTld'@;
put 'L2csZnVuY3Rpb24oSnIpe3JldHVybiBEaVsrSnJdfSl9ZnVuY3Rpb24gbG8oS3Qpe2lmKEt0Lmxlbmd0aDw9MylyZXR1cm4gS3Q7Zm9yKHZhciBMbj1LdC5sZW5ndGglMyxXcj1LdC5zdWJzdHIoMCxMbik7TG4hPUt0Lmxlbmd0aDtMbis9MylXcis9KFdyLmxlbmd0aD4wPyIsIjoiIikrS3Qu'@;
put 'c3Vic3RyKExuLDMpO3JldHVybiBXcn12YXIgQW89ZnVuY3Rpb24oKXt2YXIgZ249LyUvZztmdW5jdGlvbiBYbihhbixWdCl7dmFyIFd0LGRuPWFuLmluZGV4T2YoIkUiKS1hbi5pbmRleE9mKCIuIiktMTtpZihhbi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09VnQpcmV0dXJuIjAuMEUr'@;
put 'MCI7aWYoVnQ8MClyZXR1cm4iLSIrWG4oYW4sLVZ0KTt2YXIgVG49YW4uaW5kZXhPZigiLiIpOy0xPT09VG4mJihUbj1hbi5pbmRleE9mKCJFIikpO3ZhciBucj1NYXRoLmZsb29yKE1hdGgubG9nKFZ0KSpNYXRoLkxPRzEwRSklVG47aWYobnI8MCYmKG5yKz1UbiksLTE9PT0oV3Q9KFZ0L01h'@;
put 'dGgucG93KDEwLG5yKSkudG9QcmVjaXNpb24oZG4rMSsoVG4rbnIpJVRuKSkuaW5kZXhPZigiZSIpKXt2YXIgYnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpO2ZvcigtMT09PVd0LmluZGV4T2YoIi4iKT9XdD1XdC5jaGFyQXQoMCkrIi4iK1d0LnN1YnN0cigxKSsiRSsi'@;
put 'Kyhici1XdC5sZW5ndGgrbnIpOld0Kz0iRSsiKyhici1ucik7IjAuIj09PVd0LnN1YnN0cigwLDIpOylXdD0oV3Q9V3QuY2hhckF0KDApK1d0LnN1YnN0cigyLFRuKSsiLiIrV3Quc3Vic3RyKDIrVG4pKS5yZXBsYWNlKC9eMCsoWzEtOV0pLywiJDEiKS5yZXBsYWNlKC9eMCtcLi8sIjAuIik7'@;
put 'V3Q9V3QucmVwbGFjZSgvXCstLywiLSIpfVd0PVd0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oVXIsTHIseGksY2kpe3JldHVybiBMcit4aStjaS5zdWJzdHIoMCwoVG4rbnIpJVRuKSsiLiIrY2kuc3Vic3RyKG5yKSsiRSJ9KX1lbHNlIFd0PVZ0LnRvRXhw'@;
put 'b25lbnRpYWwoZG4pO3JldHVybiBhbi5tYXRjaCgvRVwrMDAkLykmJld0Lm1hdGNoKC9lWystXVxkJC8pJiYoV3Q9V3Quc3Vic3RyKDAsV3QubGVuZ3RoLTEpKyIwIitXdC5jaGFyQXQoV3QubGVuZ3RoLTEpKSxhbi5tYXRjaCgvRVwtLykmJld0Lm1hdGNoKC9lXCsvKSYmKFd0PVd0LnJlcGxh'@;
put 'Y2UoL2VcKy8sImUiKSksV3QucmVwbGFjZSgiZSIsIkUiKX12YXIgZWk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLG1vPS9eIyowKlwuKFswI10rKS8saWk9L1wpLipbMCNdLyx6aT0vXCgjIyNcKSAjIyNcXD8tIyMjIy87ZnVuY3Rpb24gSnIoYW4pe2Zvcih2YXIgV3QsVnQ9IiIsZG49MDtk'@;
put 'biE9YW4ubGVuZ3RoOysrZG4pc3dpdGNoKFd0PWFuLmNoYXJDb2RlQXQoZG4pKXtjYXNlIDM1OmJyZWFrO2Nhc2UgNjM6VnQrPSIgIjticmVhaztjYXNlIDQ4OlZ0Kz0iMCI7YnJlYWs7ZGVmYXVsdDpWdCs9U3RyaW5nLmZyb21DaGFyQ29kZShXdCl9cmV0dXJuIFZ0fWZ1bmN0aW9uIHdzKGFu'@;
put 'LFZ0KXt2YXIgV3Q9TWF0aC5wb3coMTAsVnQpO3JldHVybiIiK01hdGgucm91bmQoYW4qV3QpL1d0fWZ1bmN0aW9uIHZzKGFuLFZ0KXtpZihWdD4xMSlyZXR1cm4gdnMoYW4sMTEpKk1hdGgucG93KDEwLFZ0LTExKTt2YXIgV3Q9YW4tTWF0aC5mbG9vcihhbiksZG49TWF0aC5wb3coMTAsVnQp'@;
put 'O3JldHVybiBWdDwoIiIrTWF0aC5yb3VuZChXdCpkbikpLmxlbmd0aD8wOk1hdGgucm91bmQoV3QqZG4pfWZ1bmN0aW9uIGhhKGFuLFZ0LFd0KXtpZig0MD09PWFuLmNoYXJDb2RlQXQoMCkmJiFWdC5tYXRjaChpaSkpe3ZhciBkbj1WdC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwp'@;
put 'LywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gV3Q+PTA/aGEoIm4iLGRuLFd0KToiKCIraGEoIm4iLGRuLC1XdCkrIikifWlmKDQ0PT09VnQuY2hhckNvZGVBdChWdC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIFdyKGFuLFZ0LFd0KXtmb3IodmFyIGRuPVZ0Lmxlbmd0aC0xOzQ0PT09'@;
put 'VnQuY2hhckNvZGVBdChkbi0xKTspLS1kbjtyZXR1cm4gQW8oYW4sVnQuc3Vic3RyKDAsZG4pLFd0L01hdGgucG93KDEwLDMqKFZ0Lmxlbmd0aC1kbikpKX0oYW4sVnQsV3QpO2lmKC0xIT09VnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBMbihhbixWdCxXdCl7dmFyIGRuPVZ0LnJl'@;
put 'cGxhY2UoZ24sIiIpLFRuPVZ0Lmxlbmd0aC1kbi5sZW5ndGg7cmV0dXJuIEFvKGFuLGRuLFd0Kk1hdGgucG93KDEwLDIqVG4pKStRKCIlIixUbil9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIkUiKSlyZXR1cm4gWG4oVnQsV3QpO2lmKDM2PT09VnQuY2hhckNvZGVBdCgwKSlyZXR1'@;
put 'cm4iJCIraGEoYW4sVnQuc3Vic3RyKCIgIj09VnQuY2hhckF0KDEpPzI6MSksV3QpO3ZhciBUbixucixicixVcixMcj1NYXRoLmFicyhXdCkseGk9V3Q8MD8iLSI6IiI7aWYoVnQubWF0Y2goL14wMCskLykpcmV0dXJuIHhpK0JlKExyLFZ0Lmxlbmd0aCk7aWYoVnQubWF0Y2goL15bIz9dKyQv'@;
put 'KSlyZXR1cm4iMCI9PT0oVG49QmUoV3QsMCkpJiYoVG49IiIpLFRuLmxlbmd0aD5WdC5sZW5ndGg/VG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLVRuLmxlbmd0aCkpK1RuO2lmKG5yPVZ0Lm1hdGNoKGVpKSlyZXR1cm4gZnVuY3Rpb24gaXIoYW4sVnQsV3Qpe3ZhciBkbj1wYXJzZUludChh'@;
put 'bls0XSwxMCksVG49TWF0aC5yb3VuZChWdCpkbiksbnI9TWF0aC5mbG9vcihUbi9kbiksYnI9VG4tbnIqZG4sVXI9ZG47cmV0dXJuIFd0KygwPT09bnI/IiI6IiIrbnIpKyIgIisoMD09PWJyP1EoIiAiLGFuWzFdLmxlbmd0aCsxK2FuWzRdLmxlbmd0aCk6Z2UoYnIsYW5bMV0ubGVuZ3RoKSth'@;
put 'blsyXSsiLyIrYW5bM10rcmUoVXIsYW5bNF0ubGVuZ3RoKSl9KG5yLExyLHhpKTtpZihWdC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIHhpK0JlKExyLFZ0Lmxlbmd0aC1WdC5pbmRleE9mKCIwIikpO2lmKG5yPVZ0Lm1hdGNoKG1vKSlyZXR1cm4gVG49d3MoV3QsbnJbMV0ubGVuZ3RoKS5yZXBs'@;
put 'YWNlKC9eKFteXC5dKykkLywiJDEuIitKcihuclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0pyKG5yWzFdKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFVvLHRpKXtyZXR1cm4iLiIrdGkrUSgiMCIsSnIobnJbMV0pLmxlbmd0aC10aS5sZW5ndGgpfSksLTEhPT1WdC5pbmRleE9mKCIw'@;
put 'LiIpP1RuOlRuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoVnQ9VnQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxucj1WdC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIHhpK3dzKExyLG5yWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgv'@;
put 'XigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sbnJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihucj1WdC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4geGkrbG8oQmUoTHIsMCkpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBXdDwwPyIt'@;
put 'IitoYShhbixWdCwtV3QpOmxvKCIiKyhNYXRoLmZsb29yKFd0KStmdW5jdGlvbiBtbChhbixWdCl7cmV0dXJuIFZ0PCgiIitNYXRoLnJvdW5kKChhbi1NYXRoLmZsb29yKGFuKSkqTWF0aC5wb3coMTAsVnQpKSkubGVuZ3RoPzE6MH0oV3QsbnJbMV0ubGVuZ3RoKSkpKyIuIityZSh2cyhXdCxu'@;
put 'clsxXS5sZW5ndGgpLG5yWzFdLmxlbmd0aCk7aWYobnI9VnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIGhhKGFuLFZ0LnJlcGxhY2UoL14jLCMqLC8sIiIpLFd0KTtpZihucj1WdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gVG49TChoYShhbixWdC5yZXBsYWNl'@;
put 'KC9bXFwtXS9nLCIiKSxXdCkpLGJyPTAsTChMKFZ0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVW8pe3JldHVybiBicjxUbi5sZW5ndGg/VG4uY2hhckF0KGJyKyspOiIwIj09PVVvPyIwIjoiIn0pKTtpZihWdC5tYXRjaCh6aSkpcmV0dXJuIigiKyhUbj1o'@;
put 'YShhbiwiIyMjIyMjIyMjIyIsV3QpKS5zdWJzdHIoMCwzKSsiKSAiK1RuLnN1YnN0cigzLDMpKyItIitUbi5zdWJzdHIoNik7dmFyIGNpPSIiO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4obnJbNF0ubGVuZ3RoLDcpLFVy'@;
put 'PVp0KExyLE1hdGgucG93KDEwLGJyKS0xLCExKSxUbj0iIit4aSwiICI9PShjaT1BbygibiIsbnJbMV0sVXJbMV0pKS5jaGFyQXQoY2kubGVuZ3RoLTEpJiYoY2k9Y2kuc3Vic3RyKDAsY2kubGVuZ3RoLTEpKyIwIiksVG4rPWNpK25yWzJdKyIvIituclszXSwoY2k9X2UoVXJbMl0sYnIpKS5s'@;
put 'ZW5ndGg8bnJbNF0ubGVuZ3RoJiYoY2k9SnIobnJbNF0uc3Vic3RyKG5yWzRdLmxlbmd0aC1jaS5sZW5ndGgpKStjaSksVG4rPWNpO2lmKG5yPVZ0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBicj1NYXRoLm1pbihNYXRoLm1heChuclsxXS5sZW5ndGgs'@;
put 'bnJbNF0ubGVuZ3RoKSw3KSx4aSsoKFVyPVp0KExyLE1hdGgucG93KDEwLGJyKS0xLCEwKSlbMF18fChVclsxXT8iIjoiMCIpKSsiICIrKFVyWzFdP2dlKFVyWzFdLGJyKStuclsyXSsiLyIrbnJbM10rX2UoVXJbMl0sYnIpOlEoIiAiLDIqYnIrMStuclsyXS5sZW5ndGgrbnJbM10ubGVuZ3Ro'@;
put 'KSk7aWYobnI9VnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFRuPUJlKFd0LDApLFZ0Lmxlbmd0aDw9VG4ubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgpKStUbjtpZihucj1WdC5tYXRjaCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXtUbj0iIitXdC50b0Zp'@;
put 'eGVkKE1hdGgubWluKG5yWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksYnI9VG4uaW5kZXhPZigiLiIpO3ZhciBDbz1WdC5pbmRleE9mKCIuIiktYnIscG89VnQubGVuZ3RoLVRuLmxlbmd0aC1DbztyZXR1cm4gSnIoVnQuc3Vic3RyKDAsQ28pK1RuK1Z0LnN1YnN0'@;
put 'cihWdC5sZW5ndGgtcG8pKX1pZihucj1WdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIGJyPXZzKFd0LG5yWzFdLmxlbmd0aCksV3Q8MD8iLSIraGEoYW4sVnQsLVd0KTpsbyhmdW5jdGlvbiBqbChhbil7cmV0dXJuIGFuPDIxNDc0ODM2NDcmJmFuPi0yMTQ3NDgzNjQ4PyIi'@;
put 'Kyhhbj49MD8wfGFuOmFuLTF8MCk6IiIrTWF0aC5mbG9vcihhbil9KFd0KSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihVbyl7cmV0dXJuIjAwLCIrKFVvLmxlbmd0aDwzP3JlKDAsMy1Vby5sZW5ndGgpOiIiKStVb30pKyIuIityZShicixu'@;
put 'clsxXS5sZW5ndGgpO3N3aXRjaChWdCl7Y2FzZSIjIyMsIyMwLjAwIjpyZXR1cm4gaGEoYW4sIiMsIyMwLjAwIixXdCk7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIFZpPWxvKEJlKExyLDApKTtyZXR1cm4iMCIhPT1WaT94aStWaToiIjtjYXNlIiMjIywjIyMu'@;
put 'MDAiOnJldHVybiBoYShhbiwiIyMjLCMjMC4wMCIsV3QpLnJlcGxhY2UoL14wXC4vLCIuIik7Y2FzZSIjLCMjIy4wMCI6cmV0dXJuIGhhKGFuLCIjLCMjMC4wMCIsV3QpLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrVnQrInwiKX1m'@;
put 'dW5jdGlvbiBybihhbixWdCl7dmFyIFd0LGRuPWFuLmluZGV4T2YoIkUiKS1hbi5pbmRleE9mKCIuIiktMTtpZihhbi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09VnQpcmV0dXJuIjAuMEUrMCI7aWYoVnQ8MClyZXR1cm4iLSIrcm4oYW4sLVZ0KTt2YXIgVG49YW4uaW5kZXhPZigiLiIp'@;
put 'Oy0xPT09VG4mJihUbj1hbi5pbmRleE9mKCJFIikpO3ZhciBucj1NYXRoLmZsb29yKE1hdGgubG9nKFZ0KSpNYXRoLkxPRzEwRSklVG47aWYobnI8MCYmKG5yKz1UbiksIShXdD0oVnQvTWF0aC5wb3coMTAsbnIpKS50b1ByZWNpc2lvbihkbisxKyhUbituciklVG4pKS5tYXRjaCgvW0VlXS8p'@;
put 'KXt2YXIgYnI9TWF0aC5mbG9vcihNYXRoLmxvZyhWdCkqTWF0aC5MT0cxMEUpOy0xPT09V3QuaW5kZXhPZigiLiIpP1d0PVd0LmNoYXJBdCgwKSsiLiIrV3Quc3Vic3RyKDEpKyJFKyIrKGJyLVd0Lmxlbmd0aCtucik6V3QrPSJFKyIrKGJyLW5yKSxXdD1XdC5yZXBsYWNlKC9cKy0vLCItIil9'@;
put 'V3Q9V3QucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihVcixMcix4aSxjaSl7cmV0dXJuIExyK3hpK2NpLnN1YnN0cigwLChUbituciklVG4pKyIuIitjaS5zdWJzdHIobnIpKyJFIn0pfWVsc2UgV3Q9VnQudG9FeHBvbmVudGlhbChkbik7cmV0dXJuIGFuLm1h'@;
put 'dGNoKC9FXCswMCQvKSYmV3QubWF0Y2goL2VbKy1dXGQkLykmJihXdD1XdC5zdWJzdHIoMCxXdC5sZW5ndGgtMSkrIjAiK1d0LmNoYXJBdChXdC5sZW5ndGgtMSkpLGFuLm1hdGNoKC9FXC0vKSYmV3QubWF0Y2goL2VcKy8pJiYoV3Q9V3QucmVwbGFjZSgvZVwrLywiZSIpKSxXdC5yZXBsYWNl'@;
put 'KCJlIiwiRSIpfWZ1bmN0aW9uIF9uKGFuLFZ0LFd0KXtpZig0MD09PWFuLmNoYXJDb2RlQXQoMCkmJiFWdC5tYXRjaChpaSkpe3ZhciBkbj1WdC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gV3Q+PTA/X24oIm4iLGRuLFd0KToi'@;
put 'KCIrX24oIm4iLGRuLC1XdCkrIikifWlmKDQ0PT09VnQuY2hhckNvZGVBdChWdC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHlmKGFuLFZ0LFd0KXtmb3IodmFyIGRuPVZ0Lmxlbmd0aC0xOzQ0PT09VnQuY2hhckNvZGVBdChkbi0xKTspLS1kbjtyZXR1cm4gQW8oYW4sVnQuc3Vic3RyKDAs'@;
put 'ZG4pLFd0L01hdGgucG93KDEwLDMqKFZ0Lmxlbmd0aC1kbikpKX0oYW4sVnQsV3QpO2lmKC0xIT09VnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBvcChhbixWdCxXdCl7dmFyIGRuPVZ0LnJlcGxhY2UoZ24sIiIpLFRuPVZ0Lmxlbmd0aC1kbi5sZW5ndGg7cmV0dXJuIEFvKGFuLGRu'@;
put 'LFd0Kk1hdGgucG93KDEwLDIqVG4pKStRKCIlIixUbil9KGFuLFZ0LFd0KTtpZigtMSE9PVZ0LmluZGV4T2YoIkUiKSlyZXR1cm4gcm4oVnQsV3QpO2lmKDM2PT09VnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIrX24oYW4sVnQuc3Vic3RyKCIgIj09VnQuY2hhckF0KDEpPzI6MSksV3QpO3Zh'@;
put 'ciBUbixucixicixVcixMcj1NYXRoLmFicyhXdCkseGk9V3Q8MD8iLSI6IiI7aWYoVnQubWF0Y2goL14wMCskLykpcmV0dXJuIHhpK3JlKExyLFZ0Lmxlbmd0aCk7aWYoVnQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gVG49IiIrV3QsMD09PVd0JiYoVG49IiIpLFRuLmxlbmd0aD5WdC5sZW5n'@;
put 'dGg/VG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLVRuLmxlbmd0aCkpK1RuO2lmKG5yPVZ0Lm1hdGNoKGVpKSlyZXR1cm4gZnVuY3Rpb24gcmkoYW4sVnQsV3Qpe3JldHVybiBXdCsoMD09PVZ0PyIiOiIiK1Z0KStRKCIgIixhblsxXS5sZW5ndGgrMithbls0XS5sZW5ndGgpfShucixMcix4'@;
put 'aSk7aWYoVnQubWF0Y2goL14jKzArJC8pKXJldHVybiB4aStyZShMcixWdC5sZW5ndGgtVnQuaW5kZXhPZigiMCIpKTtpZihucj1WdC5tYXRjaChtbykpcmV0dXJuIFRuPShUbj0oIiIrV3QpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK0pyKG5yWzFdKSkucmVwbGFjZSgvXC4kLywiLiIr'@;
put 'SnIobnJbMV0pKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFVvLHRpKXtyZXR1cm4iLiIrdGkrUSgiMCIsSnIobnJbMV0pLmxlbmd0aC10aS5sZW5ndGgpfSksLTEhPT1WdC5pbmRleE9mKCIwLiIpP1RuOlRuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoVnQ9VnQucmVwbGFjZSgvXiMr'@;
put 'KFswLl0pLywiJDEiKSxucj1WdC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIHhpKygiIitMcikucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sbnJbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihucj1W'@;
put 'dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4geGkrbG8oIiIrTHIpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBXdDwwPyItIitfbihhbixWdCwtV3QpOmxvKCIiK1d0KSsiLiIrUSgiMCIsbnJbMV0ubGVuZ3RoKTtpZihucj1WdC5tYXRjaCgv'@;
put 'XiMsIyosIzAvKSlyZXR1cm4gX24oYW4sVnQucmVwbGFjZSgvXiMsIyosLywiIiksV3QpO2lmKG5yPVZ0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiBUbj1MKF9uKGFuLFZ0LnJlcGxhY2UoL1tcXC1dL2csIiIpLFd0KSksYnI9MCxMKEwoVnQucmVwbGFjZSgvXFwv'@;
put 'ZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihVbyl7cmV0dXJuIGJyPFRuLmxlbmd0aD9Ubi5jaGFyQXQoYnIrKyk6IjAiPT09VW8/IjAiOiIifSkpO2lmKFZ0Lm1hdGNoKHppKSlyZXR1cm4iKCIrKFRuPV9uKGFuLCIjIyMjIyMjIyMjIixXdCkpLnN1YnN0cigwLDMpKyIpICIrVG4u'@;
put 'c3Vic3RyKDMsMykrIi0iK1RuLnN1YnN0cig2KTt2YXIgY2k9IiI7aWYobnI9VnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBicj1NYXRoLm1pbihucls0XS5sZW5ndGgsNyksVXI9WnQoTHIsTWF0aC5wb3coMTAsYnIpLTEsITEpLFRuPSIiK3hpLCIgIj09'@;
put 'KGNpPUFvKCJuIixuclsxXSxVclsxXSkpLmNoYXJBdChjaS5sZW5ndGgtMSkmJihjaT1jaS5zdWJzdHIoMCxjaS5sZW5ndGgtMSkrIjAiKSxUbis9Y2krbnJbMl0rIi8iK25yWzNdLChjaT1fZShVclsyXSxicikpLmxlbmd0aDxucls0XS5sZW5ndGgmJihjaT1Kcihucls0XS5zdWJzdHIobnJb'@;
put 'NF0ubGVuZ3RoLWNpLmxlbmd0aCkpK2NpKSxUbis9Y2k7aWYobnI9VnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgubWluKE1hdGgubWF4KG5yWzFdLmxlbmd0aCxucls0XS5sZW5ndGgpLDcpLHhpKygoVXI9WnQoTHIsTWF0aC5wb3coMTAs'@;
put 'YnIpLTEsITApKVswXXx8KFVyWzFdPyIiOiIwIikpKyIgIisoVXJbMV0/Z2UoVXJbMV0sYnIpK25yWzJdKyIvIituclszXStfZShVclsyXSxicik6USgiICIsMipicisxK25yWzJdLmxlbmd0aCtuclszXS5sZW5ndGgpKTtpZihucj1WdC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gVnQubGVu'@;
put 'Z3RoPD0oVG49IiIrV3QpLmxlbmd0aD9UbjpKcihWdC5zdWJzdHIoMCxWdC5sZW5ndGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXtUbj0iIitXdC50b0ZpeGVkKE1hdGgubWluKG5yWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTAr'@;
put 'JC8sIiQxIiksYnI9VG4uaW5kZXhPZigiLiIpO3ZhciBDbz1WdC5pbmRleE9mKCIuIiktYnIscG89VnQubGVuZ3RoLVRuLmxlbmd0aC1DbztyZXR1cm4gSnIoVnQuc3Vic3RyKDAsQ28pK1RuK1Z0LnN1YnN0cihWdC5sZW5ndGgtcG8pKX1pZihucj1WdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0q'@;
put 'MCkkLykpcmV0dXJuIFd0PDA/Ii0iK19uKGFuLFZ0LC1XdCk6bG8oIiIrV3QpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYiKS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oVW8pe3JldHVybiIwMCwiKyhVby5sZW5ndGg8Mz9yZSgwLDMtVW8ubGVuZ3RoKToiIikrVW99KSsiLiIrcmUoMCxu'@;
put 'clsxXS5sZW5ndGgpO3ZhciBWaT1sbygiIitMcik7c3dpdGNoKFZ0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT1WaT94aStWaToiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KFZpPXJlKFZpLDIpKT94aStWaToiIjtkZWZhdWx0OmlmKFZ0'@;
put 'Lm1hdGNoKC9cLlswIz9dKiQvKSlyZXR1cm4gX24oYW4sVnQuc2xpY2UoMCxWdC5sYXN0SW5kZXhPZigiLiIpKSxXdCkrSnIoVnQuc2xpY2UoVnQubGFzdEluZGV4T2YoIi4iKSkpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1Z0KyJ8Iil9cmV0dXJuIGZ1bmN0aW9u'@;
put 'KFZ0LFd0LGRuKXtyZXR1cm4iMCwwIj09V3QmJihXdD0iIywjMDAiKSwoMHxkbik9PT1kbj9fbihWdCxXdCxkbik6aGEoVnQsV3QsZG4pfX0oKTtmdW5jdGlvbiB4byhLdCl7Zm9yKHZhciBnbj1bXSxMbj0hMSxXcj0wLFhuPTA7V3I8S3QubGVuZ3RoOysrV3Ipc3dpdGNoKEt0LmNoYXJDb2Rl'@;
put 'QXQoV3IpKXtjYXNlIDM0OkxuPSFMbjticmVhaztjYXNlIDk1OmNhc2UgNDI6Y2FzZSA5MjorK1dyO2JyZWFrO2Nhc2UgNTk6Z25bZ24ubGVuZ3RoXT1LdC5zdWJzdHIoWG4sV3ItWG4pLFhuPVdyKzF9aWYoZ25bZ24ubGVuZ3RoXT1LdC5zdWJzdHIoWG4pLCEwPT09TG4pdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJGb3JtYXQgfCIrS3QrInwgdW50ZXJtaW5hdGVkIHN0cmluZyAiKTtyZXR1cm4gZ259UC5fc3BsaXQ9eG87dmFyIGhpPS9cW1tIaE1tU3NcdTBFMEFcdTBFMTlcdTBFMTddKlxdLztmdW5jdGlvbiB0YShLdCl7Zm9yKHZhciBnbj0wLExuPSIiLFdyPSIiO2duPEt0Lmxlbmd0aDspc3dp'@;
put 'dGNoKExuPUt0LmNoYXJBdChnbikpe2Nhc2UiRyI6R2UoS3QsZ24pJiYoZ24rPTYpLGduKys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09S3QuY2hhckNvZGVBdCgrK2duKSYmZ248S3QubGVuZ3RoOyk7KytnbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOmduKz0yO2JyZWFrO2Nhc2UiQCI6Kytn'@;
put 'bjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09S3QuY2hhckF0KGduKzEpfHwiMiI9PT1LdC5jaGFyQXQoZ24rMSkpcmV0dXJuITA7Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNl'@;
put 'InMiOmNhc2UiZSI6Y2FzZSJnIjpyZXR1cm4hMDtjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOmlmKCJBL1AiPT09S3Quc3Vic3RyKGduLDMpLnRvVXBwZXJDYXNlKCl8fCJBTS9QTSI9PT1LdC5zdWJzdHIoZ24sNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUz'@;
put 'NDgiPT09S3Quc3Vic3RyKGduLDUpLnRvVXBwZXJDYXNlKCkpcmV0dXJuITA7KytnbjticmVhaztjYXNlIlsiOmZvcihXcj1MbjsiXSIhPT1LdC5jaGFyQXQoZ24rKykmJmduPEt0Lmxlbmd0aDspV3IrPUt0LmNoYXJBdChnbik7aWYoV3IubWF0Y2goaGkpKXJldHVybiEwO2JyZWFrO2Nhc2Ui'@;
put 'LiI6Y2FzZSIwIjpjYXNlIiMiOmZvcig7Z248S3QubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihMbj1LdC5jaGFyQXQoKytnbikpPi0xfHwiXFwiPT1MbiYmIi0iPT1LdC5jaGFyQXQoZ24rMSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQoZ24rMikpPi0xKTspO2JyZWFrO2Nhc2UiPyI6'@;
put 'Zm9yKDtLdC5jaGFyQXQoKytnbik9PT1MbjspO2JyZWFrO2Nhc2UiKiI6KytnbiwoIiAiPT1LdC5jaGFyQXQoZ24pfHwiKiI9PUt0LmNoYXJBdChnbikpJiYrK2duO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjorK2duO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1'@;
put 'IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7Z248S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihLdC5jaGFyQXQoKytnbikpPi0xOyk7YnJlYWs7ZGVmYXVsdDorK2dufXJldHVybiExfWZ1bmN0aW9uIE1uKEt0LGduLExuLFdyKXtmb3IodmFyIGlpLHppLEpy'@;
put 'LFhuPVtdLGVpPSIiLGlyPTAscmk9IiIsbW89InQiLHdzPSJIIjtpcjxLdC5sZW5ndGg7KXN3aXRjaChyaT1LdC5jaGFyQXQoaXIpKXtjYXNlIkciOmlmKCFHZShLdCxpcikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrcmkrIiBpbiAiK0t0KTtYbltYbi5sZW5n'@;
put 'dGhdPXt0OiJHIix2OiJHZW5lcmFsIn0saXIrPTc7YnJlYWs7Y2FzZSciJzpmb3IoZWk9IiI7MzQhPT0oSnI9S3QuY2hhckNvZGVBdCgrK2lyKSkmJmlyPEt0Lmxlbmd0aDspZWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoSnIpO1huW1huLmxlbmd0aF09e3Q6InQiLHY6ZWl9LCsraXI7YnJlYWs7'@;
put 'Y2FzZSJcXCI6dmFyIHZzPUt0LmNoYXJBdCgrK2lyKTtYbltYbi5sZW5ndGhdPXt0OiIoIj09PXZzfHwiKSI9PT12cz92czoidCIsdjp2c30sKytpcjticmVhaztjYXNlIl8iOlhuW1huLmxlbmd0aF09e3Q6InQiLHY6IiAifSxpcis9MjticmVhaztjYXNlIkAiOlhuW1huLmxlbmd0aF09e3Q6'@;
put 'IlQiLHY6Z259LCsraXI7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PUt0LmNoYXJBdChpcisxKXx8IjIiPT09S3QuY2hhckF0KGlyKzEpKXtpZihudWxsPT1paSYmbnVsbD09KGlpPXBuKGduLExuLCIyIj09PUt0LmNoYXJBdChpcisxKSkpKXJldHVybiIiO1huW1huLmxlbmd0aF09'@;
put 'e3Q6IlgiLHY6S3Quc3Vic3RyKGlyLDIpfSxtbz1yaSxpcis9MjticmVha31jYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpyaT1yaS50b0xvd2VyQ2FzZSgpO2Nhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2Ui'@;
put 'ZyI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6aWYoZ248MHx8bnVsbD09aWkmJm51bGw9PShpaT1wbihnbixMbikpKXJldHVybiIiO2ZvcihlaT1yaTsrK2lyPEt0Lmxlbmd0aCYmS3QuY2hhckF0'@;
put 'KGlyKS50b0xvd2VyQ2FzZSgpPT09cmk7KWVpKz1yaTsibSI9PT1yaSYmImgiPT09bW8udG9Mb3dlckNhc2UoKSYmKHJpPSJNIiksImgiPT09cmkmJihyaT13cyksWG5bWG4ubGVuZ3RoXT17dDpyaSx2OmVpfSxtbz1yaTticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciBq'@;
put 'bD17dDpyaSx2OnJpfTtpZihudWxsPT1paSYmKGlpPXBuKGduLExuKSksIkEvUCI9PT1LdC5zdWJzdHIoaXIsMykudG9VcHBlckNhc2UoKT8obnVsbCE9aWkmJihqbC52PWlpLkg+PTEyPyJQIjoiQSIpLGpsLnQ9IlQiLHdzPSJoIixpcis9Myk6IkFNL1BNIj09PUt0LnN1YnN0cihpciw1KS50'@;
put 'b1VwcGVyQ2FzZSgpPyhudWxsIT1paSYmKGpsLnY9aWkuSD49MTI/IlBNIjoiQU0iKSxqbC50PSJUIixpcis9NSx3cz0iaCIpOiJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PUt0LnN1YnN0cihpciw1KS50b1VwcGVyQ2FzZSgpPyhudWxsIT1paSYmKGpsLnY9aWkuSD49MTI/Ilx1NGUw'@;
put 'Ylx1NTM0OCI6Ilx1NGUwYVx1NTM0OCIpLGpsLnQ9IlQiLGlyKz01LHdzPSJoIik6KGpsLnQ9InQiLCsraXIpLG51bGw9PWlpJiYiVCI9PT1qbC50KXJldHVybiIiO1huW1huLmxlbmd0aF09amwsbW89cmk7YnJlYWs7Y2FzZSJbIjpmb3IoZWk9cmk7Il0iIT09S3QuY2hhckF0KGlyKyspJiZp'@;
put 'cjxLdC5sZW5ndGg7KWVpKz1LdC5jaGFyQXQoaXIpO2lmKCJdIiE9PWVpLnNsaWNlKC0xKSl0aHJvdyd1bnRlcm1pbmF0ZWQgIlsiIGJsb2NrOiB8JytlaSsifCI7aWYoZWkubWF0Y2goaGkpKXtpZihudWxsPT1paSYmbnVsbD09KGlpPXBuKGduLExuKSkpcmV0dXJuIiI7WG5bWG4ubGVuZ3Ro'@;
put 'XT17dDoiWiIsdjplaS50b0xvd2VyQ2FzZSgpfSxtbz1laS5jaGFyQXQoMSl9ZWxzZSBlaS5pbmRleE9mKCIkIik+LTEmJihlaT0oZWkubWF0Y2goL1wkKFteLVxbXF1dKikvKXx8W10pWzFdfHwiJCIsdGEoS3QpfHwoWG5bWG4ubGVuZ3RoXT17dDoidCIsdjplaX0pKTticmVhaztjYXNlIi4i'@;
put 'OmlmKG51bGwhPWlpKXtmb3IoZWk9cmk7KytpcjxLdC5sZW5ndGgmJiIwIj09PShyaT1LdC5jaGFyQXQoaXIpKTspZWkrPXJpO1huW1huLmxlbmd0aF09e3Q6InMiLHY6ZWl9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoZWk9cmk7KytpcjxLdC5sZW5ndGgmJiIwIz8uLEUrLSUiLmluZGV4'@;
put 'T2Yocmk9S3QuY2hhckF0KGlyKSk+LTE7KWVpKz1yaTtYbltYbi5sZW5ndGhdPXt0OiJuIix2OmVpfTticmVhaztjYXNlIj8iOmZvcihlaT1yaTtLdC5jaGFyQXQoKytpcik9PT1yaTspZWkrPXJpO1huW1huLmxlbmd0aF09e3Q6cmksdjplaX0sbW89cmk7YnJlYWs7Y2FzZSIqIjorK2lyLCgi'@;
put 'ICI9PUt0LmNoYXJBdChpcil8fCIqIj09S3QuY2hhckF0KGlyKSkmJisraXI7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOlhuW1huLmxlbmd0aF09e3Q6MT09PVdyPyJ0IjpyaSx2OnJpfSwrK2lyO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNh'@;
put 'c2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihlaT1yaTtpcjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKEt0LmNoYXJBdCgrK2lyKSk+LTE7KWVpKz1LdC5jaGFyQXQoaXIpO1huW1huLmxlbmd0aF09e3Q6IkQiLHY6ZWl9O2JyZWFrO2Nhc2UiICI6WG5bWG4ubGVuZ3RoXT17dDpy'@;
put 'aSx2OnJpfSwrK2lyO2JyZWFrO2Nhc2UiJCI6WG5bWG4ubGVuZ3RoXT17dDoidCIsdjpCcn0sKytpcjticmVhaztjYXNlIi8iOlhuW1huLmxlbmd0aF09WG4ubGVuZ3RoPjAmJnRhKFhuW1huLmxlbmd0aC0xXS52KT97dDoidCIsdjpBbn06e3Q6InQiLHY6Ii8ifSwrK2lyO2JyZWFrO2RlZmF1'@;
put 'bHQ6aWYoLTE9PT0iLCQtKy8oKTohXiYnfnt9PD49XHUyMGFjYWNmaWprbG9wcXJ0dXZ3eHpQIi5pbmRleE9mKHJpKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIityaSsiIGluICIrS3QpO1huW1huLmxlbmd0aF09e3Q6InQiLHY6cml9LCsraXJ9dmFyIG9wLGhh'@;
put 'PTAseWY9MDtmb3IoaXI9WG4ubGVuZ3RoLTEsbW89InQiO2lyPj0wOy0taXIpc3dpdGNoKFhuW2lyXS50KXtjYXNlImgiOmNhc2UiSCI6WG5baXJdLnQ9d3MsbW89ImgiLGhhPDEmJihoYT0xKTticmVhaztjYXNlInMiOihvcD1Ybltpcl0udi5tYXRjaCgvXC4wKyQvKSkmJih5Zj1NYXRoLm1h'@;
put 'eCh5ZixvcFswXS5sZW5ndGgtMSkpLGhhPDMmJihoYT0zKTtjYXNlImQiOmNhc2UieSI6Y2FzZSJNIjpjYXNlImUiOm1vPVhuW2lyXS50O2JyZWFrO2Nhc2UibSI6InMiPT09bW8mJihYbltpcl0udD0iTSIsaGE8MiYmKGhhPTIpKTticmVhaztjYXNlIlgiOmJyZWFrO2Nhc2UiWiI6aGE8MSYm'@;
put 'WG5baXJdLnYubWF0Y2goL1tIaF0vKSYmKGhhPTEpLGhhPDImJlhuW2lyXS52Lm1hdGNoKC9bTW1dLykmJihoYT0yKSxoYTwzJiZYbltpcl0udi5tYXRjaCgvW1NzXS8pJiYoaGE9Myl9c3dpdGNoKGhhKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOmlpLnU+PS41JiYoaWkudT0wLCsraWkuUyksaWku'@;
put 'Uz49NjAmJihpaS5TPTAsKytpaS5NKSxpaS5NPj02MCYmKGlpLk09MCwrK2lpLkgpO2JyZWFrO2Nhc2UgMjppaS51Pj0uNSYmKGlpLnU9MCwrK2lpLlMpLGlpLlM+PTYwJiYoaWkuUz0wLCsraWkuTSl9dmFyIF9uLHJuPSIiO2Zvcihpcj0wO2lyPFhuLmxlbmd0aDsrK2lyKXN3aXRjaChYbltp'@;
put 'cl0udCl7Y2FzZSJ0IjpjYXNlIlQiOmNhc2UiICI6Y2FzZSJEIjpicmVhaztjYXNlIlgiOlhuW2lyXS52PSIiLFhuW2lyXS50PSI7IjticmVhaztjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UiSCI6Y2FzZSJNIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJiIjpjYXNlIloiOmNh'@;
put 'c2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOlhuW2lyXS52PVlvKFhuW2lyXS50LmNoYXJDb2RlQXQoMCksWG5baXJdLnYsaWkseWYpLFhuW2lyXS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9y'@;
put 'KF9uPWlyKzE7bnVsbCE9WG5bX25dJiYoIj8iPT09KHJpPVhuW19uXS50KXx8IkQiPT09cml8fCgiICI9PT1yaXx8InQiPT09cmkpJiZudWxsIT1YbltfbisxXSYmKCI/Ij09PVhuW19uKzFdLnR8fCJ0Ij09PVhuW19uKzFdLnQmJiIvIj09PVhuW19uKzFdLnYpfHwiKCI9PT1Ybltpcl0udCYm'@;
put 'KCIgIj09PXJpfHwibiI9PT1yaXx8IikiPT09cmkpfHwidCI9PT1yaSYmKCIvIj09PVhuW19uXS52fHwiICI9PT1Ybltfbl0udiYmbnVsbCE9WG5bX24rMV0mJiI/Ij09WG5bX24rMV0udCkpOylYbltpcl0udis9WG5bX25dLnYsWG5bX25dPXt2OiIiLHQ6IjsifSwrK19uO3JuKz1Ybltpcl0u'@;
put 'dixpcj1fbi0xO2JyZWFrO2Nhc2UiRyI6WG5baXJdLnQ9InQiLFhuW2lyXS52PWppKGduLExuKX12YXIgVnQsV3QsYW49IiI7aWYocm4ubGVuZ3RoPjApezQwPT1ybi5jaGFyQ29kZUF0KDApPyhWdD1nbjwwJiY0NT09PXJuLmNoYXJDb2RlQXQoMCk/LWduOmduLFd0PUFvKCJuIixybixWdCkp'@;
put 'OihXdD1BbygibiIscm4sVnQ9Z248MCYmV3I+MT8tZ246Z24pLFZ0PDAmJlhuWzBdJiYidCI9PVhuWzBdLnQmJihXdD1XdC5zdWJzdHIoMSksWG5bMF0udj0iLSIrWG5bMF0udikpLF9uPShXdD1XdC5yZXBsYWNlKC9bLFwuXS9nLGZ1bmN0aW9uKGJyKXtyZXR1cm4iLiI9PWJyP3VyOlFyfSkp'@;
put 'Lmxlbmd0aC0xO3ZhciBkbj1Ybi5sZW5ndGg7Zm9yKGlyPTA7aXI8WG4ubGVuZ3RoOysraXIpaWYobnVsbCE9WG5baXJdJiYidCIhPVhuW2lyXS50JiZYbltpcl0udi5pbmRleE9mKCIuIik+LTEpe2RuPWlyO2JyZWFrfXZhciBUbj1Ybi5sZW5ndGg7aWYoZG49PT1Ybi5sZW5ndGgmJi0xPT09'@;
put 'V3QuaW5kZXhPZigiRSIpKXtmb3IoaXI9WG4ubGVuZ3RoLTE7aXI+PTA7LS1pciludWxsPT1Ybltpcl18fC0xPT09Im4/Ii5pbmRleE9mKFhuW2lyXS50KXx8KF9uPj1Ybltpcl0udi5sZW5ndGgtMT9Ybltpcl0udj1XdC5zdWJzdHIoMSsoX24tPVhuW2lyXS52Lmxlbmd0aCksWG5baXJdLnYu'@;
put 'bGVuZ3RoKTpfbjwwP1huW2lyXS52PSIiOihYbltpcl0udj1XdC5zdWJzdHIoMCxfbisxKSxfbj0tMSksWG5baXJdLnQ9InQiLFRuPWlyKTtfbj49MCYmVG48WG4ubGVuZ3RoJiYoWG5bVG5dLnY9V3Quc3Vic3RyKDAsX24rMSkrWG5bVG5dLnYpfWVsc2UgaWYoZG4hPT1Ybi5sZW5ndGgmJi0x'@;
put 'PT09V3QuaW5kZXhPZigiRSIpKXtmb3IoX249V3QuaW5kZXhPZih1ciktMSxpcj1kbjtpcj49MDstLWlyKWlmKG51bGwhPVhuW2lyXSYmLTEhPT0ibj8iLmluZGV4T2YoWG5baXJdLnQpKXtmb3Ioemk9WG5baXJdLnYuaW5kZXhPZigiLiIpPi0xJiZpcj09PWRuP1huW2lyXS52LmluZGV4T2Yo'@;
put 'Ii4iKS0xOlhuW2lyXS52Lmxlbmd0aC0xLGFuPVhuW2lyXS52LnN1YnN0cih6aSsxKTt6aT49MDstLXppKV9uPj0wJiYoIjAiPT09WG5baXJdLnYuY2hhckF0KHppKXx8IiMiPT09WG5baXJdLnYuY2hhckF0KHppKSkmJihhbj1XdC5jaGFyQXQoX24tLSkrYW4pO1huW2lyXS52PWFuLFhuW2ly'@;
put 'XS50PSJ0IixUbj1pcn1mb3IoX24+PTAmJlRuPFhuLmxlbmd0aCYmKFhuW1RuXS52PVd0LnN1YnN0cigwLF9uKzEpK1huW1RuXS52KSxfbj1XdC5pbmRleE9mKHVyKSsxLGlyPWRuO2lyPFhuLmxlbmd0aDsrK2lyKWlmKG51bGwhPVhuW2lyXSYmKC0xIT09Im4/KCIuaW5kZXhPZihYbltpcl0u'@;
put 'dCl8fGlyPT09ZG4pKXtmb3Ioemk9WG5baXJdLnYuaW5kZXhPZih1cik+LTEmJmlyPT09ZG4/WG5baXJdLnYuaW5kZXhPZih1cikrMTowLGFuPVhuW2lyXS52LnN1YnN0cigwLHppKTt6aTxYbltpcl0udi5sZW5ndGg7Kyt6aSlfbjxXdC5sZW5ndGgmJihhbis9V3QuY2hhckF0KF9uKyspKTtY'@;
put 'bltpcl0udj1hbixYbltpcl0udD0idCIsVG49aXJ9fX1mb3IoaXI9MDtpcjxYbi5sZW5ndGg7KytpciludWxsIT1Ybltpcl0mJiJuPyIuaW5kZXhPZihYbltpcl0udCk+LTEmJihYbltpcl0udj1BbyhYbltpcl0udCxYbltpcl0udixWdD1Xcj4xJiZnbjwwJiZpcj4wJiYiLSI9PT1Ybltpci0x'@;
put 'XS52Py1nbjpnbikucmVwbGFjZSgvXC4vZyx1cikucmVwbGFjZSgvLC8sUXIpLFhuW2lyXS50PSJ0Iik7dmFyIG5yPSIiO2Zvcihpcj0wO2lyIT09WG4ubGVuZ3RoOysraXIpbnVsbCE9WG5baXJdJiYobnIrPVhuW2lyXS52KTtyZXR1cm4gbnJ9UC5pc19kYXRlPXRhLFAuX2V2YWw9TW47dmFy'@;
put 'IHlzPS9cW1s9PD5dLyxFbD0vXFsoPXw+Wz1dP3w8Wz49XT8pKC0/XGQrKD86XC5cZCopPylcXS87ZnVuY3Rpb24gc2woS3QsZ24pe2lmKG51bGw9PWduKXJldHVybiExO3ZhciBMbj1wYXJzZUZsb2F0KGduWzJdKTtzd2l0Y2goZ25bMV0pe2Nhc2UiPSI6aWYoS3Q9PUxuKXJldHVybiEwO2Jy'@;
put 'ZWFrO2Nhc2UiPiI6aWYoS3Q+TG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8IjppZihLdDxMbilyZXR1cm4hMDticmVhaztjYXNlIjw+IjppZihLdCE9TG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+PSI6aWYoS3Q+PUxuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKEt0PD1MbilyZXR1cm4hMH1y'@;
put 'ZXR1cm4hMX1mdW5jdGlvbiBudShLdCxnbixMbil7bnVsbD09TG4mJihMbj17fSk7dmFyIFdyPSIiO3N3aXRjaCh0eXBlb2YgS3Qpe2Nhc2Uic3RyaW5nIjpXcj0ibS9kL3l5Ij09S3QmJkxuLmRhdGVORj9Mbi5kYXRlTkY6S3Q7YnJlYWs7Y2FzZSJudW1iZXIiOm51bGw9PShXcj0xND09S3Qm'@;
put 'JkxuLmRhdGVORj9Mbi5kYXRlTkY6KG51bGwhPUxuLnRhYmxlP0xuLnRhYmxlOmJ0KVtLdF0pJiYoV3I9TG4udGFibGUmJkxuLnRhYmxlW0Z0W0t0XV18fGJ0W0Z0W0t0XV0pLG51bGw9PVdyJiYoV3I9VHRbS3RdfHwiR2VuZXJhbCIpfWlmKEdlKFdyLDApKXJldHVybiBqaShnbixMbik7Z24g'@;
put 'aW5zdGFuY2VvZiBEYXRlJiYoZ249em4oZ24sTG4uZGF0ZTE5MDQpKTt2YXIgWG49ZnVuY3Rpb24gZ2woS3QsZ24pe3ZhciBMbj14byhLdCksV3I9TG4ubGVuZ3RoLFhuPUxuW1dyLTFdLmluZGV4T2YoIkAiKTtpZihXcjw0JiZYbj4tMSYmLS1XcixMbi5sZW5ndGg+NCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoImNhbm5vdCBmaW5kIHJpZ2h0IGZvcm1hdCBmb3IgfCIrTG4uam9pbigifCIpKyJ8Iik7aWYoIm51bWJlciIhPXR5cGVvZiBnbilyZXR1cm5bNCw0PT09TG4ubGVuZ3RofHxYbj4tMT9MbltMbi5sZW5ndGgtMV06IkAiXTtzd2l0Y2goTG4ubGVuZ3RoKXtjYXNlIDE6TG49WG4+LTE/WyJH'@;
put 'ZW5lcmFsIiwiR2VuZXJhbCIsIkdlbmVyYWwiLExuWzBdXTpbTG5bMF0sTG5bMF0sTG5bMF0sIkAiXTticmVhaztjYXNlIDI6TG49WG4+LTE/W0xuWzBdLExuWzBdLExuWzBdLExuWzFdXTpbTG5bMF0sTG5bMV0sTG5bMF0sIkAiXTticmVhaztjYXNlIDM6TG49WG4+LTE/W0xuWzBdLExuWzFd'@;
put 'LExuWzBdLExuWzJdXTpbTG5bMF0sTG5bMV0sTG5bMl0sIkAiXX12YXIgZWk9Z24+MD9MblswXTpnbjwwP0xuWzFdOkxuWzJdO2lmKC0xPT09TG5bMF0uaW5kZXhPZigiWyIpJiYtMT09PUxuWzFdLmluZGV4T2YoIlsiKSlyZXR1cm5bV3IsZWldO2lmKG51bGwhPUxuWzBdLm1hdGNoKHlzKXx8'@;
put 'bnVsbCE9TG5bMV0ubWF0Y2goeXMpKXt2YXIgaXI9TG5bMF0ubWF0Y2goRWwpLHJpPUxuWzFdLm1hdGNoKEVsKTtyZXR1cm4gc2woZ24saXIpP1tXcixMblswXV06c2woZ24scmkpP1tXcixMblsxXV06W1dyLExuW251bGwhPWlyJiZudWxsIT1yaT8yOjFdXX1yZXR1cm5bV3IsZWldfShXcixn'@;
put 'bik7aWYoR2UoWG5bMV0pKXJldHVybiBqaShnbixMbik7aWYoITA9PT1nbilnbj0iVFJVRSI7ZWxzZSBpZighMT09PWduKWduPSJGQUxTRSI7ZWxzZSBpZigiIj09PWdufHxudWxsPT1nbilyZXR1cm4iIjtyZXR1cm4gTW4oWG5bMV0sZ24sTG4sWG5bMF0pfWZ1bmN0aW9uIHRsKEt0LGduKXtp'@;
put 'ZigibnVtYmVyIiE9dHlwZW9mIGduKXtnbj0rZ258fC0xO2Zvcih2YXIgTG49MDtMbjwzOTI7KytMbilpZihudWxsIT1idFtMbl0pe2lmKGJ0W0xuXT09S3Qpe2duPUxuO2JyZWFrfX1lbHNlIGduPDAmJihnbj1Mbik7Z248MCYmKGduPTM5MSl9cmV0dXJuIGJ0W2duXT1LdCxnbn1QLmxvYWQ9'@;
put 'dGwsUC5fdGFibGU9YnQsUC5nZXRfdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gYnR9LFAubG9hZF90YWJsZT1mdW5jdGlvbihnbil7Zm9yKHZhciBMbj0wOzM5MiE9TG47KytMbil2b2lkIDAhPT1nbltMbl0mJnRsKGduW0xuXSxMbil9LFAuaW5pdF90YWJsZT1jdCxQLmZvcm1hdD1udSxQLmdl'@;
put 'dGxvY2FsZT1mdW5jdGlvbiB2cigpe3JldHVybiBrbnx8ImVuLVVTIn0sUC5zZXRsb2NhbGU9ZnVuY3Rpb24gcnIoS3Qpe2lmKGZ1bmN0aW9uIGdyKEt0KXt2YXIgZ249MDtzd2l0Y2goKGtufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6Y2FzZSJ6aC1jbiI6Y2FzZSJqYS1qcCI6'@;
put 'Y2FzZSJrby1rciI6Zm9yKGduPTI3O2duPD0zNjsrK2duKWRlbGV0ZSBLdFtnbl07Zm9yKGduPTUwO2duPD01ODsrK2duKWRlbGV0ZSBLdFtnbl07YnJlYWs7Y2FzZSJ0aC10aCI6Zm9yKGduPTU5O2duPD02MjsrK2duKWRlbGV0ZSBLdFtnbl07Zm9yKGduPTY3O2duPD04MTsrK2duKWRlbGV0'@;
put 'ZSBLdFtnbl19fShidCksa249S3QsU24oYnQpLHR5cGVvZiBJbnRsPCJ1Iil7dmFyIGduPUludGwuRGF0ZVRpbWVGb3JtYXQoS3QpO2lmKGduLmZvcm1hdFRvUGFydHMpe2Zvcih2YXIgTG49Z24uZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNSwwLDAsMCkpLFdyPTA7V3I8NzsrK1dy'@;
put 'KWR0W1dyXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0LHt3ZWVrZGF5OiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrV3IsMCwwLDApKVswXS52YWx1ZSxkdFtXcl1bMF09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7d2Vla2RheToic2hvcnQifSkuZm9ybWF0VG9Q'@;
put 'YXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNStXciwwLDAsMCkpWzBdLnZhbHVlO2Zvcih2YXIgWG49MDtYbjwxMjsrK1huKUN0W1huXVsyXT1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0LHttb250aDoibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsWG4sMiwwLDAsMCkpWzBdLnZhbHVl'@;
put 'LEN0W1huXVsxXT1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0LHttb250aDoic2hvcnQifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLFhuLDIsMCwwLDApKVswXS52YWx1ZSxDdFtYbl1bMF09Q3RbWG5dWzFdLnNsaWNlKDAsMSk7Zm9yKHZhciBlaT0iIixpcj0wO2lyPExuLmxlbmd0aDsr'@;
put 'K2lyKXt2YXIgcmk9TG5baXJdLnZhbHVlO3N3aXRjaChMbltpcl0udHlwZSl7Y2FzZSJ5ZWFyIjplaSs9Mj09cmkubGVuZ3RoPyJ5eSI6Inl5eXkiO2JyZWFrO2Nhc2UibW9udGgiOmVpKz0iMSI9PXJpPyJtIjoiMDEiPT1yaT8ibW0iOnJpPT1DdFswXVsxXT8ibW1tIjpyaT09Q3RbMF1bMl0/'@;
put 'Im1tbW0iOnJpPT1DdFswXVswXT8ibW1tbW0iOiJtbSI7YnJlYWs7Y2FzZSJkYXkiOmVpKz0iNSI9PXJpPyJkIjoiMDUiPT1yaT8iZGQiOnJpPT1kdFswXVswXT8iZGRkIjpyaT09ZHRbMF1bMV0/ImRkZGQiOiJkZCI7YnJlYWs7Y2FzZSJsaXRlcmFsIjplaSs9cmkucmVwbGFjZSgvLi9nLCJc'@;
put 'XCQmIiksMT09cmkubGVuZ3RoJiYoQW49cmkpfX0oS3QubWF0Y2goL2VuL2kpJiZLdC5tYXRjaCgvdXMvaSl8fCFLdCkmJihlaT0ibS9kL3l5IiksYnRbMTRdPWVpfWVsc2UiamEtanAiPT1LdC50b0xvd2VyQ2FzZSgpJiYoYnRbMTRdPSJ5eXl5XFwvbVxcL2QiKTt2YXIgbW89SW50bC5OdW1i'@;
put 'ZXJGb3JtYXQoS3Qse30pLmZvcm1hdCgxMjM0NTY3Ljg5KTttbyYmKFFyPShtby5tYXRjaCgvMSguKikyLyl8fFtdKVsxXSx1cj0obW8ubWF0Y2goLzcoLiopOC8pfHxbXSlbMV0pfWVyW0t0LnRvTG93ZXJDYXNlKCldfHwoZXJbS3QudG9Mb3dlckNhc2UoKV09eyIuIjp1ciwiLCI6UXJ9KSxa'@;
put 'bj1udCh0cj1lcltLdC50b0xvd2VyQ2FzZSgpXXx8ZXJbImVuLXVzIl0pfSxQLm5vcm1hbGl6ZT1mdW5jdGlvbiBNcyhLdCl7Zm9yKHZhciBnbj0wLExuPTAsV3I9IiIsWG49IiIsZWk9IiIsaXI9dHIueXx8InkiLHJpPWlyLnRvVXBwZXJDYXNlKCksbW89dHIuZHx8ImQiLGlpPW1vLnRvVXBw'@;
put 'ZXJDYXNlKCksemk9dHJbIi4iXSxKcj10clsiLCJdLHdzPSIwIz9FKy0lIit0clsiLCJdK3ppO2duPEt0Lmxlbmd0aDspc3dpdGNoKFdyPUt0LmNoYXJBdChnbikpe2Nhc2UiRyI6Z24rKyxlaSs9V3I7YnJlYWs7Y2FzZSciJzpmb3IoZWkrPVdyOzM0IT09KExuPUt0LmNoYXJDb2RlQXQoKytn'@;
put 'bikpJiZnbjxLdC5sZW5ndGg7KWVpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKExuKTtlaSs9JyInLCsrZ247YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjplaSs9S3Quc2xpY2UoZ24sZ24rMiksZ24rPTI7YnJlYWs7Y2FzZSJAIjplaSs9V3IsKytnbjticmVhaztjYXNlIkIiOmNhc2UiYiI6Kytnbixl'@;
put 'aSs9V3I7YnJlYWs7Y2FzZSBpcjpjYXNlIHJpOmNhc2UgbW86Y2FzZSBpaTplaSs9Wm5bV3IudG9Mb3dlckNhc2UoKV0sKytnbjticmVhaztjYXNlIk0iOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIkEiOmNhc2Ui'@;
put 'YSI6ZWkrPVdyLCsrZ247YnJlYWs7Y2FzZSJbIjpmb3IoWG49V3I7Il0iIT09S3QuY2hhckF0KGduKyspJiZnbjxLdC5sZW5ndGg7KVhuKz1LdC5jaGFyQXQoZ24pO2VpKz1YbjticmVhaztjYXNlIEpyOmVpKz0nIicrV3IrJyInLCsrZ247YnJlYWs7Y2FzZSB6aTppZighKGduPEt0Lmxlbmd0'@;
put 'aCYmKHdzLmluZGV4T2YoV3I9S3QuY2hhckF0KCsrZ24pKT4tMXx8IlxcIj09V3ImJiItIj09S3QuY2hhckF0KGduKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KGduKzIpKT4tMSkpKXtlaSs9JyInK3ppKyciJzticmVha31Xcj16aSwtLWduO2Nhc2UiMCI6Y2FzZSIjIjpmb3IoZWkrPVpu'@;
put 'W1dyLnRvTG93ZXJDYXNlKCldfHxXcjtnbjxLdC5sZW5ndGgmJih3cy5pbmRleE9mKFdyPUt0LmNoYXJBdCgrK2duKSk+LTF8fCJcXCI9PVdyJiYiLSI9PUt0LmNoYXJBdChnbisxKSYmIjAjIi5pbmRleE9mKEt0LmNoYXJBdChnbisyKSk+LTEpOyllaSs9Wm5bV3IudG9Mb3dlckNhc2UoKV18'@;
put 'fFdyO2JyZWFrO2Nhc2UiPyI6Zm9yKGVpKz1XcjtLdC5jaGFyQXQoKytnbik9PT1XcjspZWkrPVdyO2JyZWFrO2Nhc2UiKiI6ZWkrPVdyLCsrZ24sKCIgIj09S3QuY2hhckF0KGduKXx8IioiPT1LdC5jaGFyQXQoZ24pKSYmKGVpKz1LdC5jaGFyQXQoZ24pLCsrZ24pO2JyZWFrO2Nhc2UiKCI6'@;
put 'Y2FzZSIpIjplaSs9V3IsKytnbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoZWkrPVdyO2duPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoS3QuY2hhckF0KCsrZ24pKT4tMTsp'@;
put 'ZWkrPUt0LmNoYXJBdChnbik7YnJlYWs7ZGVmYXVsdDplaSs9V3IsKytnbn1yZXR1cm4gZWl9LFAuZ2V0Y3VycmVuY3k9ZnVuY3Rpb24ga2koKXtyZXR1cm4gb2l8fCJVU0QifSxQLnNldGN1cnJlbmN5PWZ1bmN0aW9uIExpKEt0KXtvaT1LdCxCcj10eXBlb2YgSW50bDwidSI/SW50bC5OdW1i'@;
put 'ZXJGb3JtYXQoa24se3N0eWxlOiJjdXJyZW5jeSIsY3VycmVuY3lEaXNwbGF5OiJzeW1ib2wiLGN1cnJlbmN5Okt0fSkuZm9ybWF0KDApLnJlcGxhY2UoL1swXC5cLFxzXS9nLCIiKToiJCJ9fTtKKHcpO3ZhciBPZSxuZT17IkdlbmVyYWwgTnVtYmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0'@;
put 'ZSI6dy5fdGFibGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOncuX3RhYmxlWzE1XSwiU2hvcnQgRGF0ZSI6dy5fdGFibGVbMTRdLCJMb25nIFRpbWUiOncuX3RhYmxlWzE5XSwiTWVkaXVtIFRpbWUiOncuX3RhYmxlWzE4XSwiU2hvcnQgVGlt'@;
put 'ZSI6dy5fdGFibGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOncuX3RhYmxlWzJdLFN0YW5kYXJkOncuX3RhYmxlWzRdLFBlcmNlbnQ6dy5fdGFibGVbMTBdLFNjaWVudGlmaWM6dy5fdGFibGVbMTFdLCJZZXMvTm8iOiciWWVzIjsi'@;
put 'WWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxkZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4w'@;
put 'MF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5Iiwz'@;
put 'MToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJf'@;
put 'KTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJt'@;
put 'L2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIk'@;
put 'IiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1t'@;
put 'bS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0sZmU9L1tkRF0rfFttTV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24oeSl7eS52ZXJz'@;
put 'aW9uPSIxLjIuMCI7dmFyIEw9ZnVuY3Rpb24gUCgpe2Zvcih2YXIgdmU9MCxTZT1uZXcgQXJyYXkoMjU2KSxIZT0wOzI1NiE9SGU7KytIZSlTZVtIZV09dmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9MSYodmU9SGUpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+'@;
put 'MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3'@;
put 'NDkxMl52ZT4+PjE6dmU+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoU2UpOlNlfSgpO3kudGFibGU9TCx5LmJzdHI9ZnVuY3Rpb24gUSh2ZSxTZSl7Zm9yKHZhciBIZT0tMV5TZSxCZT12ZS5sZW5ndGgtMSxHZT0wO0dlPEJlOylIZT0oSGU9SGU+Pj44'@;
put 'XkxbMjU1JihIZV52ZS5jaGFyQ29kZUF0KEdlKyspKV0pPj4+OF5MWzI1NSYoSGVedmUuY2hhckNvZGVBdChHZSsrKSldO3JldHVybiBHZT09PUJlJiYoSGU9SGU+Pj44XkxbMjU1JihIZV52ZS5jaGFyQ29kZUF0KEdlKSldKSwtMV5IZX0seS5idWY9ZnVuY3Rpb24gcmUodmUsU2Upe2lmKHZl'@;
put 'Lmxlbmd0aD4xZTQpcmV0dXJuIGZ1bmN0aW9uIGdlKHZlLFNlKXtmb3IodmFyIEhlPS0xXlNlLEJlPXZlLmxlbmd0aC03LEdlPTA7R2U8QmU7KUhlPShIZT0oSGU9KEhlPShIZT0oSGU9KEhlPShIZT1IZT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10p'@;
put 'XSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtmb3IoO0dl'@;
put 'PEJlKzc7KUhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXTtyZXR1cm4tMV5IZX0odmUsU2UpO2Zvcih2YXIgSGU9LTFeU2UsQmU9dmUubGVuZ3RoLTMsR2U9MDtHZTxCZTspSGU9KEhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dl'@;
put 'KytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldO2Zvcig7R2U8QmUrMzspSGU9SGU+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldO3JldHVybi0xXkhlfSx5LnN0cj1mdW5jdGlvbiBfZSh2ZSxTZSl7Zm9yKHZhciBudCxkdCxIZT0tMV5TZSxC'@;
put 'ZT0wLEdlPXZlLmxlbmd0aDtCZTxHZTspKG50PXZlLmNoYXJDb2RlQXQoQmUrKykpPDEyOD9IZT1IZT4+PjheTFsyNTUmKEhlXm50KV06bnQ8MjA0OD9IZT0oSGU9SGU+Pj44XkxbMjU1JihIZV4oMTkyfG50Pj42JjMxKSldKT4+PjheTFsyNTUmKEhlXigxMjh8NjMmbnQpKV06bnQ+PTU1Mjk2'@;
put 'JiZudDw1NzM0ND8obnQ9NjQrKDEwMjMmbnQpLGR0PTEwMjMmdmUuY2hhckNvZGVBdChCZSsrKSxIZT0oSGU9KEhlPShIZT1IZT4+PjheTFsyNTUmKEhlXigyNDB8bnQ+PjgmNykpXSk+Pj44XkxbMjU1JihIZV4oMTI4fG50Pj4yJjYzKSldKT4+PjheTFsyNTUmKEhlXigxMjh8ZHQ+PjYmMTV8'@;
put 'KDMmbnQpPDw0KSldKT4+PjheTFsyNTUmKEhlXigxMjh8NjMmZHQpKV0pOkhlPShIZT0oSGU9SGU+Pj44XkxbMjU1JihIZV4oMjI0fG50Pj4xMiYxNSkpXSk+Pj44XkxbMjU1JihIZV4oMTI4fG50Pj42JjYzKSldKT4+PjheTFsyNTUmKEhlXigxMjh8NjMmbnQpKV07cmV0dXJuLTFeSGV9fShP'@;
put 'ZT17fSk7dmFyIFdlLGplPWZ1bmN0aW9uKCl7dmFyIFNlLFA9e307ZnVuY3Rpb24gUShybil7aWYoIi8iPT1ybi5jaGFyQXQocm4ubGVuZ3RoLTEpKXJldHVybi0xPT09cm4uc2xpY2UoMCwtMSkuaW5kZXhPZigiLyIpP3JuOlEocm4uc2xpY2UoMCwtMSkpO3ZhciBfbj1ybi5sYXN0SW5kZXhP'@;
put 'ZigiLyIpO3JldHVybi0xPT09X24/cm46cm4uc2xpY2UoMCxfbisxKX1mdW5jdGlvbiByZShybil7aWYoIi8iPT1ybi5jaGFyQXQocm4ubGVuZ3RoLTEpKXJldHVybiByZShybi5zbGljZSgwLC0xKSk7dmFyIF9uPXJuLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1fbj9ybjpybi5zbGlj'@;
put 'ZShfbisxKX1mdW5jdGlvbiBnZShybixfbil7InN0cmluZyI9PXR5cGVvZiBfbiYmKF9uPW5ldyBEYXRlKF9uKSk7dmFyIGFuPV9uLmdldEhvdXJzKCk7YW49KGFuPWFuPDw2fF9uLmdldE1pbnV0ZXMoKSk8PDV8X24uZ2V0U2Vjb25kcygpPj4+MSxybi53cml0ZV9zaGlmdCgyLGFuKTt2YXIg'@;
put 'VnQ9X24uZ2V0RnVsbFllYXIoKS0xOTgwO1Z0PShWdD1WdDw8NHxfbi5nZXRNb250aCgpKzEpPDw1fF9uLmdldERhdGUoKSxybi53cml0ZV9zaGlmdCgyLFZ0KX1mdW5jdGlvbiB2ZShybil7b2wocm4sMCk7Zm9yKHZhciBfbj17fSxhbj0wO3JuLmw8PXJuLmxlbmd0aC00Oyl7dmFyIFZ0PXJu'@;
put 'LnJlYWRfc2hpZnQoMiksV3Q9cm4ucmVhZF9zaGlmdCgyKSxkbj1ybi5sK1d0LFRuPXt9OzIxNTg5PT09VnQmJigxJihhbj1ybi5yZWFkX3NoaWZ0KDEpKSYmKFRuLm10aW1lPXJuLnJlYWRfc2hpZnQoNCkpLFd0PjUmJigyJmFuJiYoVG4uYXRpbWU9cm4ucmVhZF9zaGlmdCg0KSksNCZhbiYm'@;
put 'KFRuLmN0aW1lPXJuLnJlYWRfc2hpZnQoNCkpKSxUbi5tdGltZSYmKFRuLm10PW5ldyBEYXRlKDFlMypUbi5tdGltZSkpKSxybi5sPWRuLF9uW1Z0XT1Ubn1yZXR1cm4gX259ZnVuY3Rpb24gSGUoKXtyZXR1cm4gU2V8fChTZT1GKDc4NzczKSl9ZnVuY3Rpb24gQmUocm4sX24pe2lmKDgwPT1y'@;
put 'blswXSYmNzU9PXJuWzFdKXJldHVybiBKcihybixfbik7aWYocm4ubGVuZ3RoPDUxMil0aHJvdyBuZXcgRXJyb3IoIkNGQiBmaWxlIHNpemUgIitybi5sZW5ndGgrIiA8IDUxMiIpO3ZhciBhbixXdCxkbixUbixucixicixWdD01MTIsVXI9W10sTHI9cm4uc2xpY2UoMCw1MTIpO29sKExyLDAp'@;
put 'O3ZhciB4aT1mdW5jdGlvbiBHZShybil7aWYoODA9PXJuW3JuLmxdJiY3NT09cm5bcm4ubCsxXSlyZXR1cm5bMCwwXTtybi5jaGsoQnIsIkhlYWRlciBTaWduYXR1cmU6ICIpLHJuLmwrPTE2O3ZhciBfbj1ybi5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bcm4ucmVhZF9zaGlmdCgyLCJ1Iiks'@;
put 'X25dfShMcik7c3dpdGNoKGFuPXhpWzBdKXtjYXNlIDM6VnQ9NTEyO2JyZWFrO2Nhc2UgNDpWdD00MDk2O2JyZWFrO2Nhc2UgMDppZigwPT14aVsxXSlyZXR1cm4gSnIocm4sX24pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJNYWpvciBWZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIr'@;
put 'YW4pfTUxMiE9PVZ0JiZvbChMcj1ybi5zbGljZSgwLFZ0KSwyOCk7dmFyIGNpPXJuLnNsaWNlKDAsVnQpOyFmdW5jdGlvbiBudChybixfbil7dmFyIGFuO3N3aXRjaChybi5sKz0yLGFuPXJuLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1fbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBT'@;
put 'aGlmdDogRXhwZWN0ZWQgOSBzYXcgIithbik7YnJlYWs7Y2FzZSAxMjppZig0IT1fbil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrYW4pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIg'@;
put 'c2F3ICIrYW4pfXJuLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxybi5jaGsoIjAwMDAwMDAwMDAwMCIsIlJlc2VydmVkOiAiKX0oTHIsYW4pO3ZhciBDbz1Mci5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09YW4mJjAhPT1Dbyl0aHJvdyBuZXcgRXJyb3IoIiMgRGlyZWN0b3J5'@;
put 'IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICIrQ28pO0xyLmwrPTQsVG49THIucmVhZF9zaGlmdCg0LCJpIiksTHIubCs9NCxMci5jaGsoIjAwMTAwMDAwIiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLG5yPUxyLnJlYWRfc2hpZnQoNCwiaSIpLFd0PUxyLnJlYWRfc2hpZnQoNCwiaSIp'@;
put 'LGJyPUxyLnJlYWRfc2hpZnQoNCwiaSIpLGRuPUxyLnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgcG89LTEsVmk9MDtWaTwxMDkmJiEoKHBvPUxyLnJlYWRfc2hpZnQoNCwiaSIpKTwwKTsrK1ZpKVVyW1ZpXT1wbzt2YXIgVW89ZnVuY3Rpb24gZHQocm4sX24pe2Zvcih2YXIgYW49TWF0aC5j'@;
put 'ZWlsKHJuLmxlbmd0aC9fbiktMSxWdD1bXSxXdD0xO1d0PGFuOysrV3QpVnRbV3QtMV09cm4uc2xpY2UoV3QqX24sKFd0KzEpKl9uKTtyZXR1cm4gVnRbYW4tMV09cm4uc2xpY2UoYW4qX24pLFZ0fShybixWdCk7YnQoYnIsZG4sVW8sVnQsVXIpO3ZhciB0aT1mdW5jdGlvbiBrdChybixfbixh'@;
put 'bixWdCl7dmFyIFd0PXJuLmxlbmd0aCxkbj1bXSxUbj1bXSxucj1bXSxicj1bXSxVcj1WdC0xLExyPTAseGk9MCxjaT0wLENvPTA7Zm9yKExyPTA7THI8V3Q7KytMcilpZihucj1bXSwoY2k9THIrX24pPj1XdCYmKGNpLT1XdCksIVRuW2NpXSl7YnI9W107dmFyIHBvPVtdO2Zvcih4aT1jaTt4'@;
put 'aT49MDspe3BvW3hpXT0hMCxUblt4aV09ITAsbnJbbnIubGVuZ3RoXT14aSxici5wdXNoKHJuW3hpXSk7dmFyIFZpPWFuW01hdGguZmxvb3IoNCp4aS9WdCldO2lmKFZ0PDQrKENvPTQqeGkmVXIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIreGkrIiA0ICIrVnQp'@;
put 'O2lmKCFybltWaV18fHBvW3hpPW9zKHJuW1ZpXSxDbyldKWJyZWFrfWRuW2NpXT17bm9kZXM6bnIsZGF0YTpTYShbYnJdKX19cmV0dXJuIGRufShVbyxUbixVcixWdCk7dGlbVG5dLm5hbWU9IiFEaXJlY3RvcnkiLFd0PjAmJm5yIT09Wm4mJih0aVtucl0ubmFtZT0iIU1pbmlGQVQiKSx0aVtV'@;
put 'clswXV0ubmFtZT0iIUZBVCIsdGkuZmF0X2FkZHJzPVVyLHRpLnNzej1WdDt2YXIgbGM9W10sTnU9W10sVjY9W107KGZ1bmN0aW9uIFR0KHJuLF9uLGFuLFZ0LFd0LGRuLFRuLG5yKXtmb3IodmFyIENvLGJyPTAsVXI9VnQubGVuZ3RoPzI6MCxMcj1fbltybl0uZGF0YSx4aT0wLGNpPTA7eGk8'@;
put 'THIubGVuZ3RoO3hpKz0xMjgpe3ZhciBwbz1Mci5zbGljZSh4aSx4aSsxMjgpO29sKHBvLDY0KSxjaT1wby5yZWFkX3NoaWZ0KDIpLENvPUV1KHBvLDAsY2ktVXIpLFZ0LnB1c2goQ28pO3ZhciBWaT17bmFtZTpDbyx0eXBlOnBvLnJlYWRfc2hpZnQoMSksY29sb3I6cG8ucmVhZF9zaGlmdCgx'@;
put 'KSxMOnBvLnJlYWRfc2hpZnQoNCwiaSIpLFI6cG8ucmVhZF9zaGlmdCg0LCJpIiksQzpwby5yZWFkX3NoaWZ0KDQsImkiKSxjbHNpZDpwby5yZWFkX3NoaWZ0KDE2KSxzdGF0ZTpwby5yZWFkX3NoaWZ0KDQsImkiKSxzdGFydDowLHNpemU6MH07MCE9PXBvLnJlYWRfc2hpZnQoMikrcG8ucmVh'@;
put 'ZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikmJihWaS5jdD1adChwbyxwby5sLTgpKSwwIT09cG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKSYmKFZpLm10PVp0KHBvLHBvLmwtOCkpLFZp'@;
put 'LnN0YXJ0PXBvLnJlYWRfc2hpZnQoNCwiaSIpLFZpLnNpemU9cG8ucmVhZF9zaGlmdCg0LCJpIiksVmkuc2l6ZTwwJiZWaS5zdGFydDwwJiYoVmkuc2l6ZT1WaS50eXBlPTAsVmkuc3RhcnQ9Wm4sVmkubmFtZT0iIiksNT09PVZpLnR5cGU/KGJyPVZpLnN0YXJ0LFd0PjAmJmJyIT09Wm4mJihf'@;
put 'blticl0ubmFtZT0iIVN0cmVhbURhdGEiKSk6Vmkuc2l6ZT49NDA5Nj8oVmkuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1fbltWaS5zdGFydF0mJihfbltWaS5zdGFydF09RnQoYW4sVmkuc3RhcnQsX24uZmF0X2FkZHJzLF9uLnNzeikpLF9uW1ZpLnN0YXJ0XS5uYW1lPVZpLm5hbWUsVmkuY29u'@;
put 'dGVudD1fbltWaS5zdGFydF0uZGF0YS5zbGljZSgwLFZpLnNpemUpKTooVmkuc3RvcmFnZT0ibWluaWZhdCIsVmkuc2l6ZTwwP1ZpLnNpemU9MDpiciE9PVpuJiZWaS5zdGFydCE9PVpuJiZfblticl0mJihWaS5jb250ZW50PWN0KFZpLF9uW2JyXS5kYXRhLChfbltucl18fHt9KS5kYXRhKSkp'@;
put 'LFZpLmNvbnRlbnQmJm9sKFZpLmNvbnRlbnQsMCksZG5bQ29dPVZpLFRuLnB1c2goVmkpfX0pKFRuLHRpLFVvLGxjLFd0LHt9LE51LG5yKSxmdW5jdGlvbiBDdChybixfbixhbil7Zm9yKHZhciBWdD0wLFd0PTAsZG49MCxUbj0wLG5yPTAsYnI9YW4ubGVuZ3RoLFVyPVtdLExyPVtdO1Z0PGJy'@;
put 'OysrVnQpVXJbVnRdPUxyW1Z0XT1WdCxfbltWdF09YW5bVnRdO2Zvcig7bnI8THIubGVuZ3RoOysrbnIpV3Q9cm5bVnQ9THJbbnJdXS5MLGRuPXJuW1Z0XS5SLFRuPXJuW1Z0XS5DLFVyW1Z0XT09PVZ0JiYoLTEhPT1XdCYmVXJbV3RdIT09V3QmJihVcltWdF09VXJbV3RdKSwtMSE9PWRuJiZV'@;
put 'cltkbl0hPT1kbiYmKFVyW1Z0XT1Vcltkbl0pKSwtMSE9PVRuJiYoVXJbVG5dPVZ0KSwtMSE9PVd0JiZWdCE9VXJbVnRdJiYoVXJbV3RdPVVyW1Z0XSxMci5sYXN0SW5kZXhPZihXdCk8bnImJkxyLnB1c2goV3QpKSwtMSE9PWRuJiZWdCE9VXJbVnRdJiYoVXJbZG5dPVVyW1Z0XSxMci5sYXN0'@;
put 'SW5kZXhPZihkbik8bnImJkxyLnB1c2goZG4pKTtmb3IoVnQ9MTtWdDxicjsrK1Z0KVVyW1Z0XT09PVZ0JiYoLTEhPT1kbiYmVXJbZG5dIT09ZG4/VXJbVnRdPVVyW2RuXTotMSE9PVd0JiZVcltXdF0hPT1XdCYmKFVyW1Z0XT1VcltXdF0pKTtmb3IoVnQ9MTtWdDxicjsrK1Z0KWlmKDAhPT1y'@;
put 'bltWdF0udHlwZSl7aWYoKG5yPVZ0KSE9VXJbbnJdKWRve19uW1Z0XT1fbltucj1Vcltucl1dKyIvIitfbltWdF19d2hpbGUoMCE9PW5yJiYtMSE9PVVyW25yXSYmbnIhPVVyW25yXSk7VXJbVnRdPS0xfWZvcihfblswXSs9Ii8iLFZ0PTE7VnQ8YnI7KytWdCkyIT09cm5bVnRdLnR5cGUmJihf'@;
put 'bltWdF0rPSIvIil9KE51LFY2LGxjKSxsYy5zaGlmdCgpO3ZhciB3Zj17RmlsZUluZGV4Ok51LEZ1bGxQYXRoczpWNn07cmV0dXJuIF9uJiZfbi5yYXcmJih3Zi5yYXc9e2hlYWRlcjpjaSxzZWN0b3JzOlVvfSksd2Z9ZnVuY3Rpb24gY3Qocm4sX24sYW4pe2Zvcih2YXIgV3Q9cm4uc2l6ZSxk'@;
put 'bj1bXSxUbj1ybi5zdGFydDthbiYmV3Q+MCYmVG4+PTA7KWRuLnB1c2goX24uc2xpY2UoVG4qdHIsVG4qdHIrdHIpKSxXdC09dHIsVG49b3MoYW4sNCpUbik7cmV0dXJuIDA9PT1kbi5sZW5ndGg/ZnIoMCk6Uyhkbikuc2xpY2UoMCxybi5zaXplKX1mdW5jdGlvbiBidChybixfbixhbixWdCxX'@;
put 'dCl7dmFyIGRuPVpuO2lmKHJuPT09Wm4pe2lmKDAhPT1fbil0aHJvdyBuZXcgRXJyb3IoIkRJRkFUIGNoYWluIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIpfWVsc2UgaWYoLTEhPT1ybil7dmFyIFRuPWFuW3JuXSxucj0oVnQ+Pj4yKS0xO2lmKCFUbilyZXR1cm47Zm9yKHZhciBicj0wO2JyPG5y'@;
put 'JiYoZG49b3MoVG4sNCpicikpIT09Wm47KyticilXdC5wdXNoKGRuKTtidChvcyhUbixWdC00KSxfbi0xLGFuLFZ0LFd0KX19ZnVuY3Rpb24gRnQocm4sX24sYW4sVnQsV3Qpe3ZhciBkbj1bXSxUbj1bXTtXdHx8KFd0PVtdKTt2YXIgbnI9VnQtMSxicj0wLFVyPTA7Zm9yKGJyPV9uO2JyPj0w'@;
put 'Oyl7V3RbYnJdPSEwLGRuW2RuLmxlbmd0aF09YnIsVG4ucHVzaChyblticl0pO3ZhciBMcj1hbltNYXRoLmZsb29yKDQqYnIvVnQpXTtpZihWdDw0KyhVcj00KmJyJm5yKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK2JyKyIgNCAiK1Z0KTtpZighcm5bTHJdKWJy'@;
put 'ZWFrO2JyPW9zKHJuW0xyXSxVcil9cmV0dXJue25vZGVzOmRuLGRhdGE6U2EoW1RuXSl9fWZ1bmN0aW9uIFp0KHJuLF9uKXtyZXR1cm4gbmV3IERhdGUoMWUzKih5aShybixfbis0KS8xZTcqTWF0aC5wb3coMiwzMikreWkocm4sX24pLzFlNy0xMTY0NDQ3MzYwMCkpfWZ1bmN0aW9uIHVuKHJu'@;
put 'LF9uKXt2YXIgYW49X258fHt9LFZ0PWFuLnJvb3R8fCJSb290IEVudHJ5IjtpZihybi5GdWxsUGF0aHN8fChybi5GdWxsUGF0aHM9W10pLHJuLkZpbGVJbmRleHx8KHJuLkZpbGVJbmRleD1bXSkscm4uRnVsbFBhdGhzLmxlbmd0aCE9PXJuLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1ybi5GdWxsUGF0aHMubGVuZ3RoJiYocm4uRnVsbFBhdGhzWzBdPVZ0KyIvIixybi5GaWxlSW5kZXhbMF09e25hbWU6VnQsdHlwZTo1fSksYW4uQ0xTSUQmJihybi5GaWxlSW5kZXhbMF0uY2xzaWQ9YW4uQ0xTSUQpLGZ1bmN0'@;
put 'aW9uIHFuKHJuKXt2YXIgX249Ilx4MDFTaDMzdEo1IjtpZighamUuZmluZChybiwiLyIrX24pKXt2YXIgYW49ZnIoNCk7YW5bMF09NTUsYW5bMV09YW5bM109NTAsYW5bMl09NTQscm4uRmlsZUluZGV4LnB1c2goe25hbWU6X24sdHlwZToyLGNvbnRlbnQ6YW4sc2l6ZTo0LEw6NjksUjo2OSxD'@;
put 'OjY5fSkscm4uRnVsbFBhdGhzLnB1c2gocm4uRnVsbFBhdGhzWzBdK19uKSx6bihybil9fShybil9ZnVuY3Rpb24gem4ocm4sX24pe3VuKHJuKTtmb3IodmFyIGFuPSExLFZ0PSExLFd0PXJuLkZ1bGxQYXRocy5sZW5ndGgtMTtXdD49MDstLVd0KXt2YXIgZG49cm4uRmlsZUluZGV4W1d0XTtz'@;
put 'd2l0Y2goZG4udHlwZSl7Y2FzZSAwOlZ0P2FuPSEwOihybi5GaWxlSW5kZXgucG9wKCkscm4uRnVsbFBhdGhzLnBvcCgpKTticmVhaztjYXNlIDE6Y2FzZSAyOmNhc2UgNTpWdD0hMCxpc05hTihkbi5SKmRuLkwqZG4uQykmJihhbj0hMCksZG4uUj4tMSYmZG4uTD4tMSYmZG4uUj09ZG4uTCYm'@;
put 'KGFuPSEwKTticmVhaztkZWZhdWx0OmFuPSEwfX1pZihhbnx8X24pe3ZhciBUbj1uZXcgRGF0ZSgxOTg3LDEsMTkpLG5yPTAsYnI9W107Zm9yKFd0PTA7V3Q8cm4uRnVsbFBhdGhzLmxlbmd0aDsrK1d0KTAhPT1ybi5GaWxlSW5kZXhbV3RdLnR5cGUmJmJyLnB1c2goW3JuLkZ1bGxQYXRoc1tX'@;
put 'dF0scm4uRmlsZUluZGV4W1d0XV0pO2ZvcihXdD0wO1d0PGJyLmxlbmd0aDsrK1d0KXt2YXIgVXI9UShicltXdF1bMF0pO2ZvcihWdD0hMSxucj0wO25yPGJyLmxlbmd0aDsrK25yKWJyW25yXVswXT09PVVyJiYoVnQ9ITApO1Z0fHxici5wdXNoKFtVcix7bmFtZTpyZShVcikucmVwbGFjZSgi'@;
put 'LyIsIiIpLHR5cGU6MSxjbHNpZDpraSxjdDpUbixtdDpUbixjb250ZW50Om51bGx9XSl9Zm9yKGJyLnNvcnQoZnVuY3Rpb24oY2ksQ28pe3JldHVybiBmdW5jdGlvbiBMKHJuLF9uKXtmb3IodmFyIGFuPXJuLnNwbGl0KCIvIiksVnQ9X24uc3BsaXQoIi8iKSxXdD0wLGRuPTAsVG49TWF0aC5t'@;
put 'aW4oYW4ubGVuZ3RoLFZ0Lmxlbmd0aCk7V3Q8VG47KytXdCl7aWYoZG49YW5bV3RdLmxlbmd0aC1WdFtXdF0ubGVuZ3RoKXJldHVybiBkbjtpZihhbltXdF0hPVZ0W1d0XSlyZXR1cm4gYW5bV3RdPFZ0W1d0XT8tMToxfXJldHVybiBhbi5sZW5ndGgtVnQubGVuZ3RofShjaVswXSxDb1swXSl9'@;
put 'KSxybi5GdWxsUGF0aHM9W10scm4uRmlsZUluZGV4PVtdLFd0PTA7V3Q8YnIubGVuZ3RoOysrV3Qpcm4uRnVsbFBhdGhzW1d0XT1icltXdF1bMF0scm4uRmlsZUluZGV4W1d0XT1icltXdF1bMV07Zm9yKFd0PTA7V3Q8YnIubGVuZ3RoOysrV3Qpe3ZhciBMcj1ybi5GaWxlSW5kZXhbV3RdLHhp'@;
put 'PXJuLkZ1bGxQYXRoc1tXdF07aWYoTHIubmFtZT1yZSh4aSkucmVwbGFjZSgiLyIsIiIpLExyLkw9THIuUj1Mci5DPS0oTHIuY29sb3I9MSksTHIuc2l6ZT1Mci5jb250ZW50P0xyLmNvbnRlbnQubGVuZ3RoOjAsTHIuc3RhcnQ9MCxMci5jbHNpZD1Mci5jbHNpZHx8a2ksMD09PVd0KUxyLkM9'@;
put 'YnIubGVuZ3RoPjE/MTotMSxMci5zaXplPTAsTHIudHlwZT01O2Vsc2UgaWYoIi8iPT14aS5zbGljZSgtMSkpe2Zvcihucj1XdCsxO25yPGJyLmxlbmd0aCYmUShybi5GdWxsUGF0aHNbbnJdKSE9eGk7Kytucik7Zm9yKExyLkM9bnI+PWJyLmxlbmd0aD8tMTpucixucj1XdCsxO25yPGJyLmxl'@;
put 'bmd0aCYmUShybi5GdWxsUGF0aHNbbnJdKSE9USh4aSk7Kytucik7THIuUj1ucj49YnIubGVuZ3RoPy0xOm5yLExyLnR5cGU9MX1lbHNlIFEocm4uRnVsbFBhdGhzW1d0KzFdfHwiIik9PVEoeGkpJiYoTHIuUj1XdCsxKSxMci50eXBlPTJ9fX1mdW5jdGlvbiBrbihybixfbil7dmFyIGFuPV9u'@;
put 'fHx7fTtpZih6bihybiksInppcCI9PWFuLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiB2cyhybixfbil7dmFyIGFuPV9ufHx7fSxWdD1bXSxXdD1bXSxkbj1mcigxKSxUbj1hbi5jb21wcmVzc2lvbj84OjAsbnI9MCxVcj0wLExyPTAseGk9MCxjaT0wLENvPXJuLkZ1bGxQYXRoc1swXSxwbz1D'@;
put 'byxWaT1ybi5GaWxlSW5kZXhbMF0sVW89W10sdGk9MDtmb3IoVXI9MTtVcjxybi5GdWxsUGF0aHMubGVuZ3RoOysrVXIpaWYocG89cm4uRnVsbFBhdGhzW1VyXS5zbGljZShDby5sZW5ndGgpLChWaT1ybi5GaWxlSW5kZXhbVXJdKS5zaXplJiZWaS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT1w'@;
put 'byl7dmFyIHpsPXhpLGxjPWZyKHBvLmxlbmd0aCk7Zm9yKExyPTA7THI8cG8ubGVuZ3RoOysrTHIpbGMud3JpdGVfc2hpZnQoMSwxMjcmcG8uY2hhckNvZGVBdChMcikpO2xjPWxjLnNsaWNlKDAsbGMubCksVW9bY2ldPU9lLmJ1ZihWaS5jb250ZW50LDApO3ZhciBOdT1WaS5jb250ZW50Ozg9'@;
put 'PVRuJiYoTnU9Z3IoTnUpKSwoZG49ZnIoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxkbi53cml0ZV9zaGlmdCgyLDIwKSxkbi53cml0ZV9zaGlmdCgyLG5yKSxkbi53cml0ZV9zaGlmdCgyLFRuKSxWaS5tdD9nZShkbixWaS5tdCk6ZG4ud3JpdGVfc2hpZnQoNCwwKSxkbi53cml0ZV9z'@;
put 'aGlmdCgtNCw4Jm5yPzA6VW9bY2ldKSxkbi53cml0ZV9zaGlmdCg0LDgmbnI/MDpOdS5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDQsOCZucj8wOlZpLmNvbnRlbnQubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLGxjLmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoMiwwKSx4aSs9ZG4ubGVuZ3RoLFZ0'@;
put 'LnB1c2goZG4pLHhpKz1sYy5sZW5ndGgsVnQucHVzaChsYykseGkrPU51Lmxlbmd0aCxWdC5wdXNoKE51KSw4Jm5yJiYoKGRuPWZyKDEyKSkud3JpdGVfc2hpZnQoLTQsVW9bY2ldKSxkbi53cml0ZV9zaGlmdCg0LE51Lmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoNCxWaS5jb250ZW50Lmxlbmd0'@;
put 'aCkseGkrPWRuLmwsVnQucHVzaChkbikpLChkbj1mcig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwyMCksZG4ud3JpdGVfc2hpZnQoMixuciksZG4ud3JpdGVfc2hpZnQoMixUbiksZG4ud3JpdGVfc2hpZnQoNCwwKSxk'@;
put 'bi53cml0ZV9zaGlmdCgtNCxVb1tjaV0pLGRuLndyaXRlX3NoaWZ0KDQsTnUubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCg0LFZpLmNvbnRlbnQubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLGxjLmxlbmd0aCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRl'@;
put 'X3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCg0LDApLGRuLndyaXRlX3NoaWZ0KDQsemwpLHRpKz1kbi5sLFd0LnB1c2goZG4pLHRpKz1sYy5sZW5ndGgsV3QucHVzaChsYyksKytjaX1yZXR1cm4oZG49ZnIoMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1'@;
put 'NiksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsY2kpLGRuLndyaXRlX3NoaWZ0KDIsY2kpLGRuLndyaXRlX3NoaWZ0KDQsdGkpLGRuLndyaXRlX3NoaWZ0KDQseGkpLGRuLndyaXRlX3NoaWZ0KDIsMCksUyhbUyhWdCksUyhXdCksZG5d'@;
put 'KX0ocm4sYW4pO3ZhciBWdD1mdW5jdGlvbihDbyl7Zm9yKHZhciBwbz0wLFZpPTAsVW89MDtVbzxDby5GaWxlSW5kZXgubGVuZ3RoOysrVW8pe3ZhciB0aT1Dby5GaWxlSW5kZXhbVW9dO2lmKHRpLmNvbnRlbnQpe3ZhciB6bD10aS5jb250ZW50Lmxlbmd0aDt6bD4wJiYoemw8NDA5Nj9wbys9'@;
put 'emwrNjM+PjY6VmkrPXpsKzUxMT4+OSl9fWZvcih2YXIgbGM9Q28uRnVsbFBhdGhzLmxlbmd0aCszPj4yLFY2PXBvKzEyNz4+Nyx3Zj0ocG8rNz4+MykrVmkrbGMrVjYscWQ9d2YrMTI3Pj43LGJfPXFkPD0xMDk/MDpNYXRoLmNlaWwoKHFkLTEwOSkvMTI3KTt3ZitxZCtiXysxMjc+Pjc+cWQ7'@;
put 'KWJfPSsrcWQ8PTEwOT8wOk1hdGguY2VpbCgocWQtMTA5KS8xMjcpO3ZhciBRMT1bMSxiXyxxZCxWNixsYyxWaSxwbywwXTtyZXR1cm4gQ28uRmlsZUluZGV4WzBdLnNpemU9cG88PDYsUTFbN109KENvLkZpbGVJbmRleFswXS5zdGFydD1RMVswXStRMVsxXStRMVsyXStRMVszXStRMVs0XStR'@;
put 'MVs1XSkrKFExWzZdKzc+PjMpLFExfShybiksV3Q9ZnIoVnRbN108PDkpLGRuPTAsVG49MDtmb3IoZG49MDtkbjw4OysrZG4pV3Qud3JpdGVfc2hpZnQoMSxvaVtkbl0pO2Zvcihkbj0wO2RuPDg7KytkbilXdC53cml0ZV9zaGlmdCgyLDApO2ZvcihXdC53cml0ZV9zaGlmdCgyLDYyKSxXdC53'@;
put 'cml0ZV9zaGlmdCgyLDMpLFd0LndyaXRlX3NoaWZ0KDIsNjU1MzQpLFd0LndyaXRlX3NoaWZ0KDIsOSksV3Qud3JpdGVfc2hpZnQoMiw2KSxkbj0wO2RuPDM7KytkbilXdC53cml0ZV9zaGlmdCgyLDApO2ZvcihXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsVnRbMl0pLFd0'@;
put 'LndyaXRlX3NoaWZ0KDQsVnRbMF0rVnRbMV0rVnRbMl0rVnRbM10tMSksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LDQwOTYpLFd0LndyaXRlX3NoaWZ0KDQsVnRbM10/VnRbMF0rVnRbMV0rVnRbMl0tMTpabiksV3Qud3JpdGVfc2hpZnQoNCxWdFszXSksV3Qud3JpdGVf'@;
put 'c2hpZnQoLTQsVnRbMV0/VnRbMF0tMTpabiksV3Qud3JpdGVfc2hpZnQoNCxWdFsxXSksZG49MDtkbjwxMDk7KytkbilXdC53cml0ZV9zaGlmdCgtNCxkbjxWdFsyXT9WdFsxXStkbjotMSk7aWYoVnRbMV0pZm9yKFRuPTA7VG48VnRbMV07KytUbil7Zm9yKDtkbjwyMzYrMTI3KlRuOysrZG4p'@;
put 'V3Qud3JpdGVfc2hpZnQoLTQsZG48VnRbMl0/VnRbMV0rZG46LTEpO1d0LndyaXRlX3NoaWZ0KC00LFRuPT09VnRbMV0tMT9abjpUbisxKX12YXIgbnI9ZnVuY3Rpb24oQ28pe2ZvcihUbis9Q287ZG48VG4tMTsrK2RuKVd0LndyaXRlX3NoaWZ0KC00LGRuKzEpO0NvJiYoKytkbixXdC53cml0'@;
put 'ZV9zaGlmdCgtNCxabikpfTtmb3IoVG49ZG49MCxUbis9VnRbMV07ZG48VG47KytkbilXdC53cml0ZV9zaGlmdCgtNCxMaS5ESUZTRUNUKTtmb3IoVG4rPVZ0WzJdO2RuPFRuOysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsTGkuRkFUU0VDVCk7bnIoVnRbM10pLG5yKFZ0WzRdKTtmb3IodmFyIGJy'@;
put 'PTAsVXI9MCxMcj1ybi5GaWxlSW5kZXhbMF07YnI8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK2JyKShMcj1ybi5GaWxlSW5kZXhbYnJdKS5jb250ZW50JiYhKChVcj1Mci5jb250ZW50Lmxlbmd0aCk8NDA5NikmJihMci5zdGFydD1UbixucihVcis1MTE+PjkpKTtmb3IobnIoVnRbNl0rNz4+Myk7'@;
put 'NTExJld0Lmw7KVd0LndyaXRlX3NoaWZ0KC00LExpLkVORE9GQ0hBSU4pO2ZvcihUbj1kbj0wLGJyPTA7YnI8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK2JyKShMcj1ybi5GaWxlSW5kZXhbYnJdKS5jb250ZW50JiYoVXI9THIuY29udGVudC5sZW5ndGgpJiYhKFVyPj00MDk2KSYmKExyLnN0YXJ0'@;
put 'PVRuLG5yKFVyKzYzPj42KSk7Zm9yKDs1MTEmV3QubDspV3Qud3JpdGVfc2hpZnQoLTQsTGkuRU5ET0ZDSEFJTik7Zm9yKGRuPTA7ZG48VnRbNF08PDI7Kytkbil7dmFyIHhpPXJuLkZ1bGxQYXRoc1tkbl07aWYoeGkmJjAhPT14aS5sZW5ndGgpe0xyPXJuLkZpbGVJbmRleFtkbl0sMD09PWRu'@;
put 'JiYoTHIuc3RhcnQ9THIuc2l6ZT9Mci5zdGFydC0xOlpuKTt2YXIgY2k9MD09PWRuJiZhbi5yb290fHxMci5uYW1lO2lmKFVyPTIqKGNpLmxlbmd0aCsxKSxXdC53cml0ZV9zaGlmdCg2NCxjaSwidXRmMTZsZSIpLFd0LndyaXRlX3NoaWZ0KDIsVXIpLFd0LndyaXRlX3NoaWZ0KDEsTHIudHlw'@;
put 'ZSksV3Qud3JpdGVfc2hpZnQoMSxMci5jb2xvciksV3Qud3JpdGVfc2hpZnQoLTQsTHIuTCksV3Qud3JpdGVfc2hpZnQoLTQsTHIuUiksV3Qud3JpdGVfc2hpZnQoLTQsTHIuQyksTHIuY2xzaWQpV3Qud3JpdGVfc2hpZnQoMTYsTHIuY2xzaWQsImhleCIpO2Vsc2UgZm9yKGJyPTA7YnI8NDsr'@;
put 'K2JyKVd0LndyaXRlX3NoaWZ0KDQsMCk7V3Qud3JpdGVfc2hpZnQoNCxMci5zdGF0ZXx8MCksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LExyLnN0YXJ0KSxXdC53'@;
put 'cml0ZV9zaGlmdCg0LExyLnNpemUpLFd0LndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoYnI9MDticjwxNzsrK2JyKVd0LndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGJyPTA7YnI8MzsrK2JyKVd0LndyaXRlX3NoaWZ0KDQsLTEpO2Zvcihicj0wO2JyPDEyOysrYnIpV3Qud3JpdGVfc2hpZnQoNCww'@;
put 'KX19Zm9yKGRuPTE7ZG48cm4uRmlsZUluZGV4Lmxlbmd0aDsrK2RuKWlmKChMcj1ybi5GaWxlSW5kZXhbZG5dKS5zaXplPj00MDk2KXtmb3IoV3QubD1Mci5zdGFydCsxPDw5LGJyPTA7YnI8THIuc2l6ZTsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsTHIuY29udGVudFticl0pO2Zvcig7NTExJmJy'@;
put 'OysrYnIpV3Qud3JpdGVfc2hpZnQoMSwwKX1mb3IoZG49MTtkbjxybi5GaWxlSW5kZXgubGVuZ3RoOysrZG4paWYoKExyPXJuLkZpbGVJbmRleFtkbl0pLnNpemU+MCYmTHIuc2l6ZTw0MDk2KXtmb3IoYnI9MDticjxMci5zaXplOysrYnIpV3Qud3JpdGVfc2hpZnQoMSxMci5jb250ZW50W2Jy'@;
put 'XSk7Zm9yKDs2MyZicjsrK2JyKVd0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDtXdC5sPFd0Lmxlbmd0aDspV3Qud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gV3R9UC52ZXJzaW9uPSIxLjEuNCI7dmFyIHZyLHRyPTY0LFpuPS0yLEJyPSJkMGNmMTFlMGExYjExYWUxIixvaT1bMjA4LDIwNywxNywy'@;
put 'MjQsMTYxLDE3NywyNiwyMjVdLGtpPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsTGk9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46Wm4sRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTpCcixIRUFERVJfTUlOT1JfVkVSU0lPTjoi'@;
put 'M2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpraSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24gdXIocm4pe2Zvcih2YXIgX249bmV3IEFycmF5KHJuLmxlbmd0'@;
put 'aCksYW49MDthbjxybi5sZW5ndGg7Kythbilfblthbl09U3RyaW5nLmZyb21DaGFyQ29kZShyblthbl0pO3JldHVybiBfbi5qb2luKCIiKX1mdW5jdGlvbiBncihybil7cmV0dXJuIHZyP3ZyLmRlZmxhdGVSYXdTeW5jKHJuKTpnbChybil9Zm9yKHZhciBybixfbixDaT1bMTYsMTcsMTgsMCw4'@;
put 'LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0senI9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLGppPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3'@;
put 'LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLERpPXR5cGVvZiBVaW50OEFycmF5PCJ1IixZbz1EaT9uZXcgVWludDhBcnJheSgyNTYpOltdLGxvPTA7bG88MjU2OysrbG8pWW9bbG9dPSh2b2lkIDAs'@;
put 'MjU1JigoX249MTM5NTM2Jigocm49bG8pPDwxfHJuPDwxMSl8NTU4MTQ0Jihybjw8NXxybjw8MTUpKT4+MTZ8X24+Pjh8X24pKTtmdW5jdGlvbiBBbyhybixfbil7dmFyIGFuPVlvWzI1NSZybl07cmV0dXJuIF9uPD04P2FuPj4+OC1fbjooYW49YW48PDh8WW9bcm4+PjgmMjU1XSxfbjw9MTY/'@;
put 'YW4+Pj4xNi1fbjooYW49YW48PDh8WW9bcm4+PjE2JjI1NV0pPj4+MjQtX24pfWZ1bmN0aW9uIHhvKHJuLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKHJuW1Z0XXwoYW48PTY/MDpybltWdCsxXTw8OCkpPj4+YW4mM31mdW5jdGlvbiBoaShybixfbil7dmFyIGFuPTcmX24sVnQ9'@;
put 'X24+Pj4zO3JldHVybihybltWdF18KGFuPD01PzA6cm5bVnQrMV08PDgpKT4+PmFuJjd9ZnVuY3Rpb24gTW4ocm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4ocm5bVnRdfChhbjw9Mz8wOnJuW1Z0KzFdPDw4KSk+Pj5hbiYzMX1mdW5jdGlvbiBNcyhybixfbil7dmFyIGFuPTcm'@;
put 'X24sVnQ9X24+Pj4zO3JldHVybihybltWdF18KGFuPD0xPzA6cm5bVnQrMV08PDgpKT4+PmFuJjEyN31mdW5jdGlvbiB5cyhybixfbixhbil7dmFyIFZ0PTcmX24sV3Q9X24+Pj4zLFRuPXJuW1d0XT4+PlZ0O3JldHVybiBhbjw4LVZ0fHwoVG58PXJuW1d0KzFdPDw4LVZ0LGFuPDE2LVZ0KXx8'@;
put 'KFRufD1ybltXdCsyXTw8MTYtVnQsYW48MjQtVnQpfHwoVG58PXJuW1d0KzNdPDwyNC1WdCksVG4mKDE8PGFuKS0xfWZ1bmN0aW9uIEVsKHJuLF9uKXt2YXIgYW49cm4ubGVuZ3RoLFZ0PTIqYW4+X24/Miphbjpfbis1LFd0PTA7aWYoYW4+PV9uKXJldHVybiBybjtpZihoZSl7dmFyIGRuPWIo'@;
put 'VnQpO2lmKHJuLmNvcHkpcm4uY29weShkbik7ZWxzZSBmb3IoO1d0PHJuLmxlbmd0aDsrK1d0KWRuW1d0XT1ybltXdF07cmV0dXJuIGRufWlmKERpKXt2YXIgVG49bmV3IFVpbnQ4QXJyYXkoVnQpO2lmKFRuLnNldClUbi5zZXQocm4pO2Vsc2UgZm9yKDtXdDxybi5sZW5ndGg7KytXdClUbltX'@;
put 'dF09cm5bV3RdO3JldHVybiBUbn1yZXR1cm4gcm4ubGVuZ3RoPVZ0LHJufWZ1bmN0aW9uIHNsKHJuKXtmb3IodmFyIF9uPW5ldyBBcnJheShybiksYW49MDthbjxybjsrK2FuKV9uW2FuXT0wO3JldHVybiBfbn12YXIgZ2w9ZnVuY3Rpb24oX24pe3ZhciBhbj1mcig1MCtNYXRoLmZsb29yKDEu'@;
put 'MSpfbi5sZW5ndGgpKSxWdD1mdW5jdGlvbihhbixWdCl7Zm9yKHZhciBXdD0wO1d0PGFuLmxlbmd0aDspe3ZhciBkbj1NYXRoLm1pbig2NTUzNSxhbi5sZW5ndGgtV3QpO2ZvcihWdC53cml0ZV9zaGlmdCgxLCsoV3QrZG49PWFuLmxlbmd0aCkpLFZ0LndyaXRlX3NoaWZ0KDIsZG4pLFZ0Lndy'@;
put 'aXRlX3NoaWZ0KDIsNjU1MzUmfmRuKTtkbi0tID4wOylWdFtWdC5sKytdPWFuW1d0KytdfXJldHVybiBWdC5sfShfbixhbik7cmV0dXJuIGFuLnNsaWNlKDAsVnQpfTtmdW5jdGlvbiBudShybixfbixhbil7dmFyIFZ0PTEsV3Q9MCxkbj0wLFRuPTAsbnI9MCxicj1ybi5sZW5ndGgsVXI9RGk/'@;
put 'bmV3IFVpbnQxNkFycmF5KDMyKTpzbCgzMik7Zm9yKGRuPTA7ZG48MzI7KytkbilVcltkbl09MDtmb3IoZG49YnI7ZG48YW47Kytkbilybltkbl09MDticj1ybi5sZW5ndGg7dmFyIExyPURpP25ldyBVaW50MTZBcnJheShicik6c2woYnIpO2Zvcihkbj0wO2RuPGJyOysrZG4pVXJbV3Q9cm5b'@;
put 'ZG5dXSsrLFZ0PFd0JiYoVnQ9V3QpLExyW2RuXT0wO2ZvcihVclswXT0wLGRuPTE7ZG48PVZ0OysrZG4pVXJbZG4rMTZdPW5yPW5yK1VyW2RuLTFdPDwxO2Zvcihkbj0wO2RuPGJyOysrZG4pMCE9KG5yPXJuW2RuXSkmJihMcltkbl09VXJbbnIrMTZdKyspO3ZhciB4aT0wO2Zvcihkbj0wO2Ru'@;
put 'PGJyOysrZG4paWYoMCE9KHhpPXJuW2RuXSkpZm9yKG5yPUFvKExyW2RuXSxWdCk+PlZ0LXhpLFRuPSgxPDxWdCs0LXhpKS0xO1RuPj0wOy0tVG4pX25bbnJ8VG48PHhpXT0xNSZ4aXxkbjw8NDtyZXR1cm4gVnR9dmFyIHRsPURpP25ldyBVaW50MTZBcnJheSg1MTIpOnNsKDUxMiksS3Q9RGk/'@;
put 'bmV3IFVpbnQxNkFycmF5KDMyKTpzbCgzMik7aWYoIURpKXtmb3IodmFyIGduPTA7Z248NTEyOysrZ24pdGxbZ25dPTA7Zm9yKGduPTA7Z248MzI7KytnbilLdFtnbl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIHJuPVtdLF9uPTA7X248MzI7X24rKylybi5wdXNoKDUpO251KHJuLEt0LDMyKTt2'@;
put 'YXIgYW49W107Zm9yKF9uPTA7X248PTE0MztfbisrKWFuLnB1c2goOCk7Zm9yKDtfbjw9MjU1O19uKyspYW4ucHVzaCg5KTtmb3IoO19uPD0yNzk7X24rKylhbi5wdXNoKDcpO2Zvcig7X248PTI4NztfbisrKWFuLnB1c2goOCk7bnUoYW4sdGwsMjg4KX0oKTt2YXIgTG49RGk/bmV3IFVpbnQx'@;
put 'NkFycmF5KDMyNzY4KTpzbCgzMjc2OCksV3I9RGk/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpzbCgzMjc2OCksWG49RGk/bmV3IFVpbnQxNkFycmF5KDEyOCk6c2woMTI4KSxlaT0xLGlyPTE7ZnVuY3Rpb24gcmkocm4sX24pe3ZhciBhbj1NbihybixfbikrMjU3LFZ0PU1uKHJuLF9uKz01KSsx'@;
put 'LFd0PWZ1bmN0aW9uIHRhKHJuLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKHJuW1Z0XXwoYW48PTQ/MDpybltWdCsxXTw8OCkpPj4+YW4mMTV9KHJuLF9uKz01KSs0O19uKz00O2Zvcih2YXIgZG49MCxUbj1EaT9uZXcgVWludDhBcnJheSgxOSk6c2woMTkpLG5yPVswLDAsMCww'@;
put 'LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxicj0xLFVyPURpP25ldyBVaW50OEFycmF5KDgpOnNsKDgpLExyPURpP25ldyBVaW50OEFycmF5KDgpOnNsKDgpLHhpPVRuLmxlbmd0aCxjaT0wO2NpPFd0OysrY2kpVG5bQ2lbY2ldXT1kbj1oaShybixfbiksYnI8ZG4mJihicj1kbiks'@;
put 'VXJbZG5dKyssX24rPTM7dmFyIENvPTA7Zm9yKFVyWzBdPTAsY2k9MTtjaTw9YnI7KytjaSlMcltjaV09Q289Q28rVXJbY2ktMV08PDE7Zm9yKGNpPTA7Y2k8eGk7KytjaSkwIT0oQ289VG5bY2ldKSYmKG5yW2NpXT1McltDb10rKyk7dmFyIHBvPTA7Zm9yKGNpPTA7Y2k8eGk7KytjaSlpZigw'@;
put 'IT0ocG89VG5bY2ldKSl7Q289WW9bbnJbY2ldXT4+OC1wbztmb3IodmFyIFZpPSgxPDw3LXBvKS0xO1ZpPj0wOy0tVmkpWG5bQ298Vmk8PHBvXT03JnBvfGNpPDwzfXZhciBVbz1bXTtmb3IoYnI9MTtVby5sZW5ndGg8YW4rVnQ7KXN3aXRjaChDbz1YbltNcyhybixfbildLF9uKz03JkNvLENv'@;
put 'Pj4+PTMpe2Nhc2UgMTY6Zm9yKGRuPTMreG8ocm4sX24pLF9uKz0yLENvPVVvW1VvLmxlbmd0aC0xXTtkbi0tID4wOylVby5wdXNoKENvKTticmVhaztjYXNlIDE3OmZvcihkbj0zK2hpKHJuLF9uKSxfbis9Mztkbi0tID4wOylVby5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKGRuPTExK01z'@;
put 'KHJuLF9uKSxfbis9Nztkbi0tID4wOylVby5wdXNoKDApO2JyZWFrO2RlZmF1bHQ6VW8ucHVzaChDbyksYnI8Q28mJihicj1Dbyl9dmFyIHRpPVVvLnNsaWNlKDAsYW4pLHpsPVVvLnNsaWNlKGFuKTtmb3IoY2k9YW47Y2k8Mjg2OysrY2kpdGlbY2ldPTA7Zm9yKGNpPVZ0O2NpPDMwOysrY2kp'@;
put 'emxbY2ldPTA7cmV0dXJuIGVpPW51KHRpLExuLDI4NiksaXI9bnUoemwsV3IsMzApLF9ufWZ1bmN0aW9uIGlpKHJuLF9uKXt2YXIgVnQ9ZnVuY3Rpb24gbW8ocm4sX24pe2lmKDM9PXJuWzBdJiYhKDMmcm5bMV0pKXJldHVybltHKF9uKSwyXTtmb3IodmFyIGFuPTAsVnQ9MCxXdD1iKF9ufHwx'@;
put 'PDwxOCksZG49MCxUbj1XdC5sZW5ndGg+Pj4wLG5yPTAsYnI9MDshKDEmVnQpOylpZihWdD1oaShybixhbiksYW4rPTMsVnQ+Pj4xKWZvcihWdD4+PjE9PTE/KG5yPTksYnI9NSk6KGFuPXJpKHJuLGFuKSxucj1laSxicj1pciksIV9uJiZUbjxkbiszMjc2NyYmKFRuPShXdD1FbChXdCxkbisz'@;
put 'Mjc2NykpLmxlbmd0aCk7Oyl7dmFyIExyPXlzKHJuLGFuLG5yKSx4aT1WdD4+PjE9PTE/dGxbTHJdOkxuW0xyXTtpZihhbis9MTUmeGksKHhpPj4+PTQpPj4+OCYyNTUpe2lmKDI1Nj09eGkpYnJlYWs7dmFyIGNpPSh4aS09MjU3KTw4PzA6eGktND4+MjtjaT41JiYoY2k9MCk7dmFyIENvPWRu'@;
put 'K3pyW3hpXTtjaT4wJiYoQ28rPXlzKHJuLGFuLGNpKSxhbis9Y2kpLExyPXlzKHJuLGFuLGJyKSxhbis9MTUmKHhpPVZ0Pj4+MT09MT9LdFtMcl06V3JbTHJdKTt2YXIgcG89KHhpPj4+PTQpPDQ/MDp4aS0yPj4xLFZpPWppW3hpXTtmb3IocG8+MCYmKFZpKz15cyhybixhbixwbyksYW4rPXBv'@;
put 'KSwhX24mJlRuPENvJiYoVG49KFd0PUVsKFd0LENvKSkubGVuZ3RoKTtkbjxDbzspV3RbZG5dPVd0W2RuLVZpXSwrK2RufWVsc2UgV3RbZG4rK109eGl9ZWxzZXs3JmFuJiYoYW4rPTgtKDcmYW4pKTt2YXIgVXI9cm5bYW4+Pj4zXXxyblsxKyhhbj4+PjMpXTw8ODtpZihhbis9MzIsIV9uJiZU'@;
put 'bjxkbitVciYmKFRuPShXdD1FbChXdCxkbitVcikpLmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIHJuLmNvcHkpcm4uY29weShXdCxkbixhbj4+PjMsKGFuPj4+MykrVXIpLGRuKz1Vcixhbis9OCpVcjtlbHNlIGZvcig7VXItLSA+MDspV3RbZG4rK109cm5bYW4+Pj4zXSxhbis9OH1yZXR1'@;
put 'cm5bX24/V3Q6V3Quc2xpY2UoMCxkbiksYW4rNz4+PjNdfShybi5zbGljZShybi5sfHwwKSxfbik7cmV0dXJuIHJuLmwrPVZ0WzFdLFZ0WzBdfWZ1bmN0aW9uIHppKHJuLF9uKXtpZighcm4pdGhyb3cgbmV3IEVycm9yKF9uKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3IoX24p'@;
put 'fWZ1bmN0aW9uIEpyKHJuLF9uKXt2YXIgYW49cm47b2woYW4sMCk7dmFyIGRuPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTt1bihkbix7cm9vdDpfbi5yb290fSk7Zm9yKHZhciBUbj1hbi5sZW5ndGgtNDsoODAhPWFuW1RuXXx8NzUhPWFuW1RuKzFdfHw1IT1hbltUbisyXXx8NiE9YW5b'@;
put 'VG4rM10pJiZUbj49MDspLS1Ubjthbi5sPVRuKzQsYW4ubCs9NDt2YXIgbnI9YW4ucmVhZF9zaGlmdCgyKTthbi5sKz02O3ZhciBicj1hbi5yZWFkX3NoaWZ0KDQpO2Zvcihhbi5sPWJyLFRuPTA7VG48bnI7KytUbil7YW4ubCs9MjA7dmFyIFVyPWFuLnJlYWRfc2hpZnQoNCksTHI9YW4ucmVh'@;
put 'ZF9zaGlmdCg0KSx4aT1hbi5yZWFkX3NoaWZ0KDIpLGNpPWFuLnJlYWRfc2hpZnQoMiksQ289YW4ucmVhZF9zaGlmdCgyKTthbi5sKz04O3ZhciBwbz1hbi5yZWFkX3NoaWZ0KDQpLFZpPXZlKGFuLnNsaWNlKGFuLmwreGksYW4ubCt4aStjaSkpO2FuLmwrPXhpK2NpK0NvO3ZhciBVbz1hbi5s'@;
put 'O2FuLmw9cG8rNCx3cyhhbixVcixMcixkbixWaSksYW4ubD1Vb31yZXR1cm4gZG59ZnVuY3Rpb24gd3Mocm4sX24sYW4sVnQsV3Qpe3JuLmwrPTI7dmFyIGRuPXJuLnJlYWRfc2hpZnQoMiksVG49cm4ucmVhZF9zaGlmdCgyKSxucj1mdW5jdGlvbiBfZShybil7dmFyIF9uPTY1NTM1JnJuLnJl'@;
put 'YWRfc2hpZnQoMiksYW49NjU1MzUmcm4ucmVhZF9zaGlmdCgyKSxWdD1uZXcgRGF0ZSxXdD0zMSZhbixkbj0xNSYoYW4+Pj49NSk7YW4+Pj49NCxWdC5zZXRNaWxsaXNlY29uZHMoMCksVnQuc2V0RnVsbFllYXIoYW4rMTk4MCksVnQuc2V0TW9udGgoZG4tMSksVnQuc2V0RGF0ZShXdCk7dmFy'@;
put 'IFRuPTMxJl9uLG5yPTYzJihfbj4+Pj01KTtyZXR1cm4gVnQuc2V0SG91cnMoX24+Pj49NiksVnQuc2V0TWludXRlcyhuciksVnQuc2V0U2Vjb25kcyhUbjw8MSksVnR9KHJuKTtpZig4MjU3JmRuKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIGVuY3J5cHRpb24iKTtmb3IodmFy'@;
put 'IGJyPXJuLnJlYWRfc2hpZnQoNCksVXI9cm4ucmVhZF9zaGlmdCg0KSxMcj1ybi5yZWFkX3NoaWZ0KDQpLHhpPXJuLnJlYWRfc2hpZnQoMiksY2k9cm4ucmVhZF9zaGlmdCgyKSxDbz0iIixwbz0wO3BvPHhpOysrcG8pQ28rPVN0cmluZy5mcm9tQ2hhckNvZGUocm5bcm4ubCsrXSk7aWYoY2kp'@;
put 'e3ZhciBWaT12ZShybi5zbGljZShybi5sLHJuLmwrY2kpKTsoVmlbMjE1ODldfHx7fSkubXQmJihucj1WaVsyMTU4OV0ubXQpLCgoV3R8fHt9KVsyMTU4OV18fHt9KS5tdCYmKG5yPVd0WzIxNTg5XS5tdCl9cm4ubCs9Y2k7dmFyIFVvPXJuLnNsaWNlKHJuLmwscm4ubCtVcik7c3dpdGNoKFRu'@;
put 'KXtjYXNlIDg6VW89ZnVuY3Rpb24gU24ocm4sX24pe2lmKCF2cilyZXR1cm4gaWkocm4sX24pO3ZhciBWdD1uZXcoMCx2ci5JbmZsYXRlUmF3KSxXdD1WdC5fcHJvY2Vzc0NodW5rKHJuLnNsaWNlKHJuLmwpLFZ0Ll9maW5pc2hGbHVzaEZsYWcpO3JldHVybiBybi5sKz1WdC5ieXRlc1JlYWQs'@;
put 'V3R9KHJuLExyKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitUbil9dmFyIHRpPSExOzgmZG4mJigxMzQ2OTU3NjA9PShicj1ybi5yZWFkX3NoaWZ0KDQpKSYmKGJyPXJuLnJlYWRfc2hpZnQo'@;
put 'NCksdGk9ITApLFVyPXJuLnJlYWRfc2hpZnQoNCksTHI9cm4ucmVhZF9zaGlmdCg0KSksVXIhPV9uJiZ6aSh0aSwiQmFkIGNvbXByZXNzZWQgc2l6ZTogIitfbisiICE9ICIrVXIpLExyIT1hbiYmemkodGksIkJhZCB1bmNvbXByZXNzZWQgc2l6ZTogIithbisiICE9ICIrTHIpO3ZhciB6bD1P'@;
put 'ZS5idWYoVW8sMCk7YnI+PjAhPXpsPj4wJiZ6aSh0aSwiQmFkIENSQzMyIGNoZWNrc3VtOiAiK2JyKyIgIT0gIit6bCksamwoVnQsQ28sVW8se3Vuc2FmZTohMCxtdDpucn0pfWZ1bmN0aW9uIGpsKHJuLF9uLGFuLFZ0KXt2YXIgV3Q9VnQmJlZ0LnVuc2FmZTtXdHx8dW4ocm4pO3ZhciBkbj0h'@;
put 'V3QmJmplLmZpbmQocm4sX24pO2lmKCFkbil7dmFyIFRuPXJuLkZ1bGxQYXRoc1swXTtfbi5zbGljZSgwLFRuLmxlbmd0aCk9PVRuP1RuPV9uOigiLyIhPVRuLnNsaWNlKC0xKSYmKFRuKz0iLyIpLFRuPShUbitfbikucmVwbGFjZSgiLy8iLCIvIikpLGRuPXtuYW1lOnJlKF9uKSx0eXBlOjJ9'@;
put 'LHJuLkZpbGVJbmRleC5wdXNoKGRuKSxybi5GdWxsUGF0aHMucHVzaChUbiksV3R8fGplLnV0aWxzLmNmYl9nYyhybil9cmV0dXJuIGRuLmNvbnRlbnQ9YW4sZG4uc2l6ZT1hbj9hbi5sZW5ndGg6MCxWdCYmKFZ0LkNMU0lEJiYoZG4uY2xzaWQ9VnQuQ0xTSUQpLFZ0Lm10JiYoZG4ubXQ9VnQu'@;
put 'bXQpLFZ0LmN0JiYoZG4uY3Q9VnQuY3QpKSxkbn1yZXR1cm4gUC5maW5kPWZ1bmN0aW9uIGVyKHJuLF9uKXt2YXIgYW49cm4uRnVsbFBhdGhzLm1hcChmdW5jdGlvbihicil7cmV0dXJuIGJyLnRvVXBwZXJDYXNlKCl9KSxWdD1hbi5tYXAoZnVuY3Rpb24oYnIpe3ZhciBVcj1ici5zcGxpdCgi'@;
put 'LyIpO3JldHVybiBVcltVci5sZW5ndGgtKCIvIj09YnIuc2xpY2UoLTEpPzI6MSldfSksV3Q9ITE7NDc9PT1fbi5jaGFyQ29kZUF0KDApPyhXdD0hMCxfbj1hblswXS5zbGljZSgwLC0xKStfbik6V3Q9LTEhPT1fbi5pbmRleE9mKCIvIik7dmFyIGRuPV9uLnRvVXBwZXJDYXNlKCksVG49ITA9'@;
put 'PT1XdD9hbi5pbmRleE9mKGRuKTpWdC5pbmRleE9mKGRuKTtpZigtMSE9PVRuKXJldHVybiBybi5GaWxlSW5kZXhbVG5dO3ZhciBucj0hZG4ubWF0Y2gocCk7Zm9yKGRuPWRuLnJlcGxhY2UodiwiIiksbnImJihkbj1kbi5yZXBsYWNlKHAsIiEiKSksVG49MDtUbjxhbi5sZW5ndGg7KytUbilp'@;
put 'ZigobnI/YW5bVG5dLnJlcGxhY2UocCwiISIpOmFuW1RuXSkucmVwbGFjZSh2LCIiKT09ZG58fChucj9WdFtUbl0ucmVwbGFjZShwLCIhIik6VnRbVG5dKS5yZXBsYWNlKHYsIiIpPT1kbilyZXR1cm4gcm4uRmlsZUluZGV4W1RuXTtyZXR1cm4gbnVsbH0sUC5yZWFkPWZ1bmN0aW9uIEtuKHJu'@;
put 'LF9uKXtzd2l0Y2goX24mJl9uLnR5cGV8fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBmdW5jdGlvbiBwbihybixfbil7cmV0dXJuIEhlKCksQmUoU2UucmVhZEZpbGVTeW5jKHJuKSxfbil9KHJuLF9uKTtjYXNlImJhc2U2NCI6cmV0dXJuIEJlKEQoc2UuZGVjb2RlKHJuKSksX24pO2Nh'@;
put 'c2UiYmluYXJ5IjpyZXR1cm4gQmUoRChybiksX24pfXJldHVybiBCZShybixfbil9LFAucGFyc2U9QmUsUC53cml0ZT1mdW5jdGlvbiBBbihybixfbil7dmFyIGFuPWtuKHJuLF9uKTtzd2l0Y2goX24mJl9uLnR5cGUpe2Nhc2UiZmlsZSI6cmV0dXJuIEhlKCksU2Uud3JpdGVGaWxlU3luYyhf'@;
put 'bi5maWxlbmFtZSxhbiksYW47Y2FzZSJiaW5hcnkiOnJldHVybiB1cihhbik7Y2FzZSJiYXNlNjQiOnJldHVybiBzZS5lbmNvZGUodXIoYW4pKX1yZXR1cm4gYW59LFAud3JpdGVGaWxlPWZ1bmN0aW9uIFFyKHJuLF9uLGFuKXtIZSgpO3ZhciBWdD1rbihybixhbik7U2Uud3JpdGVGaWxlU3lu'@;
put 'YyhfbixWdCl9LFAudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gbWwocm4pe3ZhciBfbj17fTtyZXR1cm4gdW4oX24scm4pLF9ufSxjZmJfYWRkOmpsLGNmYl9kZWw6ZnVuY3Rpb24gaGEocm4sX24pe3VuKHJuKTt2YXIgYW49amUuZmluZChybixfbik7aWYoYW4pZm9yKHZhciBWdD0wO1Z0PHJu'@;
put 'LkZpbGVJbmRleC5sZW5ndGg7KytWdClpZihybi5GaWxlSW5kZXhbVnRdPT1hbilyZXR1cm4gcm4uRmlsZUluZGV4LnNwbGljZShWdCwxKSxybi5GdWxsUGF0aHMuc3BsaWNlKFZ0LDEpLCEwO3JldHVybiExfSxjZmJfbW92OmZ1bmN0aW9uIHlmKHJuLF9uLGFuKXt1bihybik7dmFyIFZ0PWpl'@;
put 'LmZpbmQocm4sX24pO2lmKFZ0KWZvcih2YXIgV3Q9MDtXdDxybi5GaWxlSW5kZXgubGVuZ3RoOysrV3QpaWYocm4uRmlsZUluZGV4W1d0XT09VnQpcmV0dXJuIHJuLkZpbGVJbmRleFtXdF0ubmFtZT1yZShhbikscm4uRnVsbFBhdGhzW1d0XT1hbiwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0'@;
put 'aW9uIG9wKHJuKXt6bihybiwhMCl9LFJlYWRTaGlmdDpIYSxDaGVja0ZpZWxkOkJoLHByZXBfYmxvYjpvbCxiY29uY2F0OlMsdXNlX3psaWI6ZnVuY3Rpb24gcnIocm4pe3RyeXt2YXIgYW49bmV3KDAscm4uSW5mbGF0ZVJhdyk7aWYoYW4uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShb'@;
put 'MywwXSksYW4uX2ZpbmlzaEZsdXNoRmxhZyksIWFuLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO3ZyPXJufWNhdGNoKFZ0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhWdC5tZXNzYWdlfHxWdCkp'@;
put 'fX0sX2RlZmxhdGVSYXc6Z2wsX2luZmxhdGVSYXc6aWksY29uc3RzOkxpfSxQfSgpO3RyeXtXZT1GKDc4NzczKX1jYXRjaHt9ZnVuY3Rpb24gS2UoeSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB5P0goeSk6QXJyYXkuaXNBcnJheSh5KT9mdW5jdGlvbiBnKHkpe2lmKHR5cGVvZiBVaW50OEFy'@;
put 'cmF5PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KHkpfSh5KTp5fWZ1bmN0aW9uIFllKHksUCxMKXtpZih0eXBlb2YgV2U8InUiJiZXZS53cml0ZUZpbGVTeW5jKXJldHVybiBMP1dlLndyaXRlRmlsZVN5bmMoeSxQLEwpOldlLndyaXRl'@;
put 'RmlsZVN5bmMoeSxQKTt2YXIgUT0idXRmOCI9PUw/TG8oUCk6UDtpZih0eXBlb2YgSUVfU2F2ZUZpbGU8InUiKXJldHVybiBJRV9TYXZlRmlsZShRLHkpO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIHJlPW5ldyBCbG9iKFtLZShRKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9'@;
put 'KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKHJlLHkpO2lmKHR5cGVvZiBzYXZlQXM8InUiKXJldHVybiBzYXZlQXMocmUseSk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRv'@;
put 'Y3VtZW50LmNyZWF0ZUVsZW1lbnQmJlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBnZT1VUkwuY3JlYXRlT2JqZWN0VVJMKHJlKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJl'@;
put 'dm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChnZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOmdlLGZpbGVuYW1lOnksc2F2ZUFzOiEwfSk7dmFyIF9lPWRvY3VtZW50LmNy'@;
put 'ZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1fZS5kb3dubG9hZClyZXR1cm4gX2UuZG93bmxvYWQ9eSxfZS5ocmVmPWdlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoX2UpLF9lLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChfZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlw'@;
put 'ZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChnZSl9LDZlNCksZ2V9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHZlPUZpbGUoeSk7cmV0dXJuIHZlLm9wZW4oInci'@;
put 'KSx2ZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KFApJiYoUD1OKFApKSx2ZS53cml0ZShQKSx2ZS5jbG9zZSgpLFB9Y2F0Y2goU2Upe2lmKCFTZS5tZXNzYWdlfHwhU2UubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBTZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBz'@;
put 'YXZlIGZpbGUgIit5KX1mdW5jdGlvbiBsdCh5KXtmb3IodmFyIFA9T2JqZWN0LmtleXMoeSksTD1bXSxRPTA7UTxQLmxlbmd0aDsrK1EpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksUFtRXSkmJkwucHVzaChQW1FdKTtyZXR1cm4gTH1mdW5jdGlvbiBQZSh5LFApe2Zv'@;
put 'cih2YXIgTD1bXSxRPWx0KHkpLHJlPTA7cmUhPT1RLmxlbmd0aDsrK3JlKW51bGw9PUxbeVtRW3JlXV1bUF1dJiYoTFt5W1FbcmVdXVtQXV09UVtyZV0pO3JldHVybiBMfWZ1bmN0aW9uIGJlKHkpe2Zvcih2YXIgUD1bXSxMPWx0KHkpLFE9MDtRIT09TC5sZW5ndGg7KytRKVBbeVtMW1FdXV09'@;
put 'TFtRXTtyZXR1cm4gUH1mdW5jdGlvbiBBZSh5KXtmb3IodmFyIFA9W10sTD1sdCh5KSxRPTA7USE9PUwubGVuZ3RoOysrUSlQW3lbTFtRXV1dPXBhcnNlSW50KExbUV0sMTApO3JldHVybiBQfXZhciBVZSxodCxxZT1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKSxYZT0wO2Z1bmN0aW9uIE1l'@;
put 'KCl7WGU9cWUuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLXFlLmdldFRpbWV6b25lT2Zmc2V0KCkpLFVlPWZ1bmN0aW9uKFAsTCl7dmFyIFE9UC5nZXRUaW1lKCk7cmV0dXJuIEwmJihRLT0xMjYzMTY4ZTUpLChRLVhlKS84NjRlNX0saHQ9ZnVuY3Rpb24o'@;
put 'UCl7dmFyIEw9bmV3IERhdGU7cmV0dXJuIEwuc2V0VGltZSgyNCpQKjYwKjYwKjFlMytYZSksTH19ZnVuY3Rpb24gb3QoeSl7dmFyIFA9MCxMPTAsUT0hMSxyZT15Lm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhb'@;
put 'MC05XC5dK1MpPy8pO2lmKCFyZSl0aHJvdyBuZXcgRXJyb3IoInwiK3krInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFyIGdlPTE7Z2UhPXJlLmxlbmd0aDsrK2dlKWlmKHJlW2dlXSl7c3dpdGNoKEw9MSxnZT4zJiYoUT0hMCkscmVbZ2VdLnNsaWNlKHJlW2dlXS5sZW5n'@;
put 'dGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIrcmVbZ2VdLnNsaWNlKHJlW2dlXS5sZW5ndGgtMSkpO2Nhc2UiRCI6TCo9MjQ7Y2FzZSJIIjpMKj02MDtjYXNlIk0iOmlmKCFRKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0'@;
put 'ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7TCo9NjB9UCs9TCpwYXJzZUludChyZVtnZV0sMTApfXJldHVybiBQfU1lKCk7dmFyIHV0PW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTih1dC5nZXRGdWxsWWVhcigpKSYmKHV0PW5ldyBEYXRlKCIyLzE5LzE3Iikp'@;
put 'O3ZhciBNdD0yMDE3PT11dC5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIEh0KHksUCl7dmFyIEw9bmV3IERhdGUoeSk7aWYoTXQpcmV0dXJuIFA+MD9MLnNldFRpbWUoTC5nZXRUaW1lKCkrNjAqTC5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6UDwwJiZMLnNldFRpbWUoTC5nZXRUaW1lKCktNjAq'@;
put 'TC5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksTDtpZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4geTtpZigxOTE3PT11dC5nZXRGdWxsWWVhcigpJiYhaXNOYU4oTC5nZXRGdWxsWWVhcigpKSl7dmFyIFE9TC5nZXRGdWxsWWVhcigpO3JldHVybiB5LmluZGV4T2YoIiIrUSk+LTF8fEwuc2V0'@;
put 'RnVsbFllYXIoTC5nZXRGdWxsWWVhcigpKzEwMCksTH12YXIgcmU9eS5tYXRjaCgvXGQrL2cpfHxbIjIwMTciLCIyIiwiMTkiLCIwIiwiMCIsIjAiXSxnZT1uZXcgRGF0ZSgrcmVbMF0sK3JlWzFdLTEsK3JlWzJdLCtyZVszXXx8MCwrcmVbNF18fDAsK3JlWzVdfHwwKTtyZXR1cm4geS5pbmRl'@;
put 'eE9mKCJaIik+LTEmJihnZT1uZXcgRGF0ZShnZS5nZXRUaW1lKCktNjAqZ2UuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpKSxnZX1mdW5jdGlvbiBQdCh5KXtmb3IodmFyIFA9IiIsTD0wO0whPXkubGVuZ3RoOysrTClQKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHlbTF0pO3JldHVybiBQfWZ1bmN0'@;
put 'aW9uIG9uKHkpe2lmKCJvYmplY3QiIT10eXBlb2YgeXx8bnVsbD09eSlyZXR1cm4geTtpZih5IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoeS5nZXRUaW1lKCkpO2lmKEFycmF5LmlzQXJyYXkoeSkpcmV0dXJuIGZ1bmN0aW9uIENuKHkpe2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxl'@;
put 'bmd0aDsrK0wpe3ZhciBRPXlbTF07Im9iamVjdCI9PXR5cGVvZiBRP1BbTF09b24oUSk6bnVsbCE9USYmKFBbTF09USl9cmV0dXJuIFB9KHkpO3ZhciBQPXt9O2Zvcih2YXIgTCBpbiB5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LEwpJiYoUFtMXT1vbih5W0xdKSk7'@;
put 'cmV0dXJuIFB9ZnVuY3Rpb24gVXQoeSxQKXtpZigib2JqZWN0IiE9dHlwZW9mIFB8fG51bGw9PVApcmV0dXJuIHk7Zm9yKHZhciBMIGluIFApT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsTCkmJih5W0xdPW9uKFBbTF0pKTtyZXR1cm4geX1mdW5jdGlvbiBibih5LFAp'@;
put 'e2Zvcih2YXIgTD0iIjtMLmxlbmd0aDxQOylMKz15O3JldHVybiBMfWZ1bmN0aW9uIFduKHkpe3ZhciBQPU51bWJlcih5KTtpZighaXNOYU4oUCkpcmV0dXJuIGlzRmluaXRlKFApP1A6TmFOO2lmKCEvXGQvLnRlc3QoeSkpcmV0dXJuIFA7dmFyIEw9MSxRPXkucmVwbGFjZSgvKFtcZF0pLChb'@;
put 'XGRdKS9nLCIkMSQyIikucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIEwqPTEwMCwiIn0pO3JldHVybiBpc05hTihQPU51bWJlcihRKSkmJihRPVEucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24ocmUsZ2Upe3JldHVybiBMPS1MLGdlfSks'@;
put 'aXNOYU4oUD1OdW1iZXIoUSkpKT9QOlAvTH1mdW5jdGlvbiBlbih5KXt2YXIgUD1uZXcgRGF0ZSh5KSxMPW5ldyBEYXRlKE5hTiksUT1QLmdldFllYXIoKSxyZT1QLmdldE1vbnRoKCksZ2U9UC5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKGdlKXx8UTwwfHxRPjgwOTk/TDoocmU+MHx8Z2U+MSkm'@;
put 'JjEwMSE9UXx8eS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pP1A6eS5tYXRjaCgvW14tMC05OixcL1xcXS8pP0w6UH1mdW5jdGlvbiAkbih5LFApe2lmKFAmJlAucmF3KXJldHVybnt0OiJzIix2Onl9O2lmKCF5'@;
put 'KXJldHVybnt0OiJ6In07aWYoIlRSVUUiPT09eSlyZXR1cm57dDoiYiIsdjohMH07aWYoIkZBTFNFIj09PXkpcmV0dXJue3Q6ImIiLHY6ITF9O3ZhciBMPSIiLFE9TnVtYmVyKHkpO2lmKGlzRmluaXRlKFEpKXJldHVybnt0OiJuIix2OlF9O2lmKGlzTmFOKFEpJiYvXGQvLnRlc3QoeSkpe3Zh'@;
put 'ciByZT0xLGdlPXkucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLGZ1bmN0aW9uKG50LGR0LEN0KXtyZXR1cm4gTHx8KEw9IiMsIyMwIiksZHQrQ3R9KS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKG50KXtMfHwoTD0iMCIpLEwrPSIuIjtmb3IodmFyIGR0PTI7'@;
put 'ZHQ8PW50Lmxlbmd0aDsrK2R0KUwrPSIwIjtyZXR1cm4gbnR9KS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiByZSo9MTAwLEx8fChMPSIwIiksTCs9IiUiLCIifSk7aWYoIWlzTmFOKFE9TnVtYmVyKGdlKSkpcmV0dXJue3Q6Im4iLHY6US9yZSx6Okx9O2lmKGdlPWdlLnJlcGxh'@;
put 'Y2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKG50LGR0KXtyZXR1cm4gcmU9LXJlLGR0fSksIWlzTmFOKFE9TnVtYmVyKGdlKSkpcmV0dXJue3Q6Im4iLHY6US9yZSx6OihMfHwiMCIpKyJfKTsoIisoTHx8IjAiKSsiKTtAIn19ZTppZighUHx8IVAucmF3RGF0ZXMpe3ZhciBfZT1QJiZQLmNlbGxE'@;
put 'YXRlcyx2ZT1uZXcgRGF0ZSh5KSxIZT12ZS5nZXRZZWFyKCksQmU9dmUuZ2V0TW9udGgoKSxHZT12ZS5nZXREYXRlKCk7aWYoaXNOYU4oR2UpfHxIZTwwfHxIZT44MDk5KWJyZWFrIGU7aWYoKEJlPjB8fEdlPjEpJiYxMDEhPUhlKXJldHVybnt0Ol9lPyJkIjoibiIsdjpfZT92ZTpVZSh2ZSks'@;
put 'ejpQLmRhdGVORnx8dy5fdGFibGVbMTRdfTtpZih5LnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLykpcmV0dXJue3Q6X2U/ImQiOiJuIix2Ol9lP3ZlOlVlKHZlKSx6OlAuZGF0ZU5GfHx3Ll90YWJsZVsxNF19O2lm'@;
put 'KHkubWF0Y2goL1teLTAtOTosXC9cXF0vKSlicmVhayBlO3JldHVybiB2ZX1yZXR1cm57dDoicyIsdjp5fX12YXIgenQsSG49NT09ImFiYWNhYmEiLnNwbGl0KC8oOj9iKS9pKS5sZW5ndGg7ZnVuY3Rpb24gaG4oeSl7cmV0dXJuIG51bGwhPXkmJiF5fWZ1bmN0aW9uIHd0KHkpe3JldHVybiB5'@;
put 'LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3kuc2xpY2UoMSl9ZnVuY3Rpb24gWHQoeSl7cmV0dXJuIHk/eS5kYXRhP1UoeS5kYXRhKTp5LmFzTm9kZUJ1ZmZlciYmaGU/VSh5LmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6eS5hc0JpbmFyeT9VKHkuYXNCaW5hcnkoKSk6eS5f'@;
put 'ZGF0YSYmeS5fZGF0YS5nZXRDb250ZW50P1UoUHQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeS5fZGF0YS5nZXRDb250ZW50KCksMCkpKTp5LmNvbnRlbnQmJnkudHlwZT9VKFB0KHkuY29udGVudCkpOm51bGw6bnVsbH1mdW5jdGlvbiBfdCh5KXtpZigheSlyZXR1cm4gbnVsbDtpZih5'@;
put 'LmRhdGEpcmV0dXJuIEIoeS5kYXRhKTtpZih5LmFzTm9kZUJ1ZmZlciYmaGUpcmV0dXJuIHkuYXNOb2RlQnVmZmVyKCk7aWYoeS5fZGF0YSYmeS5fZGF0YS5nZXRDb250ZW50KXt2YXIgUD15Ll9kYXRhLmdldENvbnRlbnQoKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFA/QihQKTpBcnJheS5w'@;
put 'cm90b3R5cGUuc2xpY2UuY2FsbChQKX1yZXR1cm4geS5jb250ZW50JiZ5LnR5cGU/eS5jb250ZW50Om51bGx9ZnVuY3Rpb24gbW4oeSxQKXtmb3IodmFyIEw9eS5GdWxsUGF0aHN8fGx0KHkuZmlsZXMpLFE9UC50b0xvd2VyQ2FzZSgpLHJlPVEucmVwbGFjZSgvXC8vZywiXFwiKSxnZT0wO2dl'@;
put 'PEwubGVuZ3RoOysrZ2Upe3ZhciBfZT1MW2dlXS50b0xvd2VyQ2FzZSgpO2lmKFE9PV9lfHxyZT09X2UpcmV0dXJuIHkuZmlsZXNbTFtnZV1dfXJldHVybiBudWxsfWZ1bmN0aW9uIHJ0KHksUCl7dmFyIEw9bW4oeSxQKTtpZihudWxsPT1MKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQg'@;
put 'ZmlsZSAiK1ArIiBpbiB6aXAiKTtyZXR1cm4gTH1mdW5jdGlvbiBJdCh5LFAsTCl7aWYoIUwpcmV0dXJuIGZ1bmN0aW9uIE50KHkpe3JldHVybiB5JiYiLmJpbiI9PT15Lm5hbWUuc2xpY2UoLTQpP190KHkpOlh0KHkpfShydCh5LFApKTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEl0'@;
put 'KHksUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIFF0KHksUCxMKXtpZighTClyZXR1cm4gWHQocnQoeSxQKSk7aWYoIVApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBRdCh5LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBEdCh5LFAsTCl7aWYoIUwpcmV0dXJuIF90KHJ0KHks'@;
put 'UCkpO2lmKCFQKXJldHVybiBudWxsO3RyeXtyZXR1cm4gRHQoeSxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gWXQoeSxQLEwpe3kuRnVsbFBhdGhzP2plLnV0aWxzLmNmYl9hZGQoeSxQLEwpOnkuZmlsZShQLEwpfWZ1bmN0aW9uIHluKCl7cmV0dXJuIHp0P25ldyB6dDpqZS51dGls'@;
put 'cy5jZmJfbmV3KCl9ZnVuY3Rpb24geG4oeSxQKXt2YXIgTDtpZih6dClzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6TD1uZXcgenQoeSx7YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOkw9bmV3IHp0KHkse2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVy'@;
put 'IjpMPW5ldyB6dCh5KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfWVsc2Ugc3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOkw9amUucmVhZCh5LHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOkw9amUucmVhZCh5'@;
put 'LHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOkw9amUucmVhZCh5LHt0eXBlOiJidWZmZXIifSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1yZXR1cm4gTH1mdW5jdGlvbiBzbih5LFApe2lm'@;
put 'KCIvIj09eS5jaGFyQXQoMCkpcmV0dXJuIHkuc2xpY2UoMSk7dmFyIEw9UC5zcGxpdCgiLyIpOyIvIiE9UC5zbGljZSgtMSkmJkwucG9wKCk7Zm9yKHZhciBRPXkuc3BsaXQoIi8iKTswIT09US5sZW5ndGg7KXt2YXIgcmU9US5zaGlmdCgpOyIuLiI9PT1yZT9MLnBvcCgpOiIuIiE9PXJlJiZM'@;
put 'LnB1c2gocmUpfXJldHVybiBMLmpvaW4oIi8iKX10eXBlb2YgSlNaaXBTeW5jPCJ1IiYmKHp0PUpTWmlwU3luYyksYXQuZXhwb3J0cyYmdHlwZW9mIHp0PiJ1IiYmKHp0PUYoNzU0NDYpKTt2YXIgQm49Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5'@;
put 'ZXMiPz5cclxuJyxSbj0vKD86W14iXHM/PlwvXSspXHMqPVxzKigoPzoiKSg/OlteIl0qPykoPzoiKXwoPzonKSg/OlteJ10qPykoPzonKXwoPzpbXiciPlxzXSspKS9nLCR0PS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJdKiJ8J1teJ10q'@;
put 'J3xbXiciPlxzPV0rKSkqXHM/W1wvXD9dPz4vZztCbi5tYXRjaCgkdCl8fCgkdD0vPFtePl0qPi9nKTt2YXIgUG49Lzxcdyo6LyxuaT0vPChcLz8pXHcrOi87ZnVuY3Rpb24gbG4oeSxQLEwpe2Zvcih2YXIgUT17fSxyZT0wLGdlPTA7cmUhPT15Lmxlbmd0aCYmMzIhPT0oZ2U9eS5jaGFyQ29k'@;
put 'ZUF0KHJlKSkmJjEwIT09Z2UmJjEzIT09Z2U7KytyZSk7aWYoUHx8KFFbMF09eS5zbGljZSgwLHJlKSkscmU9PT15Lmxlbmd0aClyZXR1cm4gUTt2YXIgX2U9eS5tYXRjaChSbiksdmU9MCxTZT0iIixIZT0wLEJlPSIiLEdlPSIiLG50PTE7aWYoX2UpZm9yKEhlPTA7SGUhPV9lLmxlbmd0aDsr'@;
put 'K0hlKXtmb3IoR2U9X2VbSGVdLGdlPTA7Z2UhPUdlLmxlbmd0aCYmNjEhPT1HZS5jaGFyQ29kZUF0KGdlKTsrK2dlKTtmb3IoQmU9R2Uuc2xpY2UoMCxnZSkudHJpbSgpOzMyPT1HZS5jaGFyQ29kZUF0KGdlKzEpOykrK2dlO2ZvcihudD0zND09KHJlPUdlLmNoYXJDb2RlQXQoZ2UrMSkpfHwz'@;
put 'OT09cmU/MTowLFNlPUdlLnNsaWNlKGdlKzErbnQsR2UubGVuZ3RoLW50KSx2ZT0wO3ZlIT1CZS5sZW5ndGgmJjU4IT09QmUuY2hhckNvZGVBdCh2ZSk7Kyt2ZSk7aWYodmU9PT1CZS5sZW5ndGgpQmUuaW5kZXhPZigiXyIpPjAmJihCZT1CZS5zbGljZSgwLEJlLmluZGV4T2YoIl8iKSkpLFFb'@;
put 'QmVdPVNlLEx8fChRW0JlLnRvTG93ZXJDYXNlKCldPVNlKTtlbHNle3ZhciBkdD0oNT09PXZlJiYieG1sbnMiPT09QmUuc2xpY2UoMCw1KT8ieG1sbnMiOiIiKStCZS5zbGljZSh2ZSsxKTtpZihRW2R0XSYmImV4dCI9PUJlLnNsaWNlKHZlLTMsdmUpKWNvbnRpbnVlO1FbZHRdPVNlLEx8fChR'@;
put 'W2R0LnRvTG93ZXJDYXNlKCldPVNlKX19cmV0dXJuIFF9ZnVuY3Rpb24gam4oeSl7cmV0dXJuIHkucmVwbGFjZShuaSwiPCQxIil9dmFyIHFyPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sZ2k9YmUocXIpLHhyPWZ1bmN0aW9u'@;
put 'KCl7dmFyIHk9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSxQPS9feChbXGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIEwoUSl7dmFyIHJlPVErIiIsZ2U9cmUuaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWdlKXJldHVybiByZS5yZXBs'@;
put 'YWNlKHksZnVuY3Rpb24odmUsU2Upe3JldHVybiBxclt2ZV18fFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoU2UsdmUuaW5kZXhPZigieCIpPi0xPzE2OjEwKSl8fHZlfSkucmVwbGFjZShQLGZ1bmN0aW9uKHZlLFNlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChT'@;
put 'ZSwxNikpfSk7dmFyIF9lPXJlLmluZGV4T2YoIl1dPiIpO3JldHVybiBMKHJlLnNsaWNlKDAsZ2UpKStyZS5zbGljZShnZSs5LF9lKStMKHJlLnNsaWNlKF9lKzMpKX19KCksVWk9L1smPD4nIl0vZyxLcj0vW1x1MDAwMC1cdTAwMDhcdTAwMGItXHUwMDFmXS9nLG5vPS9feFswLTlhLWZBLUZd'@;
put 'ezR9Xy9nO2Z1bmN0aW9uIEhyKHkpe3JldHVybih5KyIiKS5yZXBsYWNlKG5vLCJfeDAwNUYkJiIpLnJlcGxhY2UoVWksZnVuY3Rpb24oTCl7cmV0dXJuIGdpW0xdfSkucmVwbGFjZShLcixmdW5jdGlvbihMKXtyZXR1cm4iX3giKygiMDAwIitMLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYp'@;
put 'KS5zbGljZSgtNCkrIl8ifSl9ZnVuY3Rpb24gcWkoeSl7cmV0dXJuIEhyKHkpLnJlcGxhY2UoL1xuL2csIl94MDAwYV8iKX1mdW5jdGlvbiBKaSh5KXtyZXR1cm4gSHIoeSkucmVwbGFjZSgvIC9nLCJfeDAwMjBfIil9dmFyIGFvPS9bXHUwMDAwLVx1MDAxZl0vZztmdW5jdGlvbiBybyh5KXty'@;
put 'ZXR1cm4oeSsiIikucmVwbGFjZShVaSxmdW5jdGlvbihMKXtyZXR1cm4gZ2lbTF19KS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpLnJlcGxhY2UoYW8sZnVuY3Rpb24oTCl7cmV0dXJuIiYjeCIrKCIwMDAiK0wuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiOyJ9KX1mdW5j'@;
put 'dGlvbiBpbyh5KXtyZXR1cm4oeSsiIikucmVwbGFjZShVaSxmdW5jdGlvbihMKXtyZXR1cm4gZ2lbTF19KS5yZXBsYWNlKGFvLGZ1bmN0aW9uKEwpe3JldHVybiImI3giK0wuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiOyJ9KX12YXIgR2k9ZnVuY3Rpb24oKXt2'@;
put 'YXIgeT0vJiMoXGQrKTsvZztmdW5jdGlvbiBQKEwsUSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoUSwxMCkpfXJldHVybiBmdW5jdGlvbihRKXtyZXR1cm4gUS5yZXBsYWNlKHksUCl9fSgpLGhvPWZ1bmN0aW9uKFApe3JldHVybiBQLnJlcGxhY2UoLyhcclxufFtcclxu'@;
put 'XSkvZywiJiMxMDsiKX07ZnVuY3Rpb24geXIoeSl7c3dpdGNoKHkpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19dmFyIFBpPWZ1bmN0aW9uKFApe2Zvcih2YXIgTD0iIixRPTAscmU9MCxnZT0wLF9lPTAsdmU9'@;
put 'MCxTZT0wO1E8UC5sZW5ndGg7KShyZT1QLmNoYXJDb2RlQXQoUSsrKSk8MTI4P0wrPVN0cmluZy5mcm9tQ2hhckNvZGUocmUpOihnZT1QLmNoYXJDb2RlQXQoUSsrKSxyZT4xOTEmJnJlPDIyND8odmU9KDMxJnJlKTw8Nix2ZXw9NjMmZ2UsTCs9U3RyaW5nLmZyb21DaGFyQ29kZSh2ZSkpOihf'@;
put 'ZT1QLmNoYXJDb2RlQXQoUSsrKSxyZTwyNDA/TCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmcmUpPDwxMnwoNjMmZ2UpPDw2fDYzJl9lKTooU2U9KCg3JnJlKTw8MTh8KDYzJmdlKTw8MTJ8KDYzJl9lKTw8Nnw2MyYodmU9UC5jaGFyQ29kZUF0KFErKykpKS02NTUzNixMKz1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKDU1Mjk2KyhTZT4+PjEwJjEwMjMpKSxMKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJlNlKSkpKSk7cmV0dXJuIEx9LExvPWZ1bmN0aW9uKHkpe2Zvcih2YXIgUD1bXSxMPTAsUT0wLHJlPTA7TDx5Lmxlbmd0aDspc3dpdGNoKFE9eS5jaGFyQ29kZUF0KEwrKyks'@;
put 'ITApe2Nhc2UgUTwxMjg6UC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoUSkpO2JyZWFrO2Nhc2UgUTwyMDQ4OlAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoUT4+NikpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlEpKSk7YnJlYWs7Y2FzZSBRPj01NTI5NiYm'@;
put 'UTw1NzM0NDpRLT01NTI5NixyZT15LmNoYXJDb2RlQXQoTCsrKS01NjMyMCsoUTw8MTApLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDI0MCsocmU+PjE4JjcpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTQ0KyhyZT4+MTImNjMpKSksUC5wdXNoKFN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUoMTI4KyhyZT4+NiY2MykpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJnJlKSkpO2JyZWFrO2RlZmF1bHQ6UC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjI0KyhRPj4xMikpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKFE+PjYmNjMpKSksUC5wdXNo'@;
put 'KFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkpfXJldHVybiBQLmpvaW4oIiIpfTtpZihoZSl7dmFyIGhzPWZ1bmN0aW9uKFApe3ZhciBRLHJlLFNlLEw9QnVmZmVyLmFsbG9jKDIqUC5sZW5ndGgpLGdlPTEsX2U9MCx2ZT0wO2ZvcihyZT0wO3JlPFAubGVuZ3RoO3JlKz1nZSlnZT0x'@;
put 'LChTZT1QLmNoYXJDb2RlQXQocmUpKTwxMjg/UT1TZTpTZTwyMjQ/KFE9NjQqKDMxJlNlKSsoNjMmUC5jaGFyQ29kZUF0KHJlKzEpKSxnZT0yKTpTZTwyNDA/KFE9NDA5NiooMTUmU2UpKzY0Kig2MyZQLmNoYXJDb2RlQXQocmUrMSkpKyg2MyZQLmNoYXJDb2RlQXQocmUrMikpLGdlPTMpOihn'@;
put 'ZT00LFE9MjYyMTQ0Kig3JlNlKSs0MDk2Kig2MyZQLmNoYXJDb2RlQXQocmUrMSkpKzY0Kig2MyZQLmNoYXJDb2RlQXQocmUrMikpKyg2MyZQLmNoYXJDb2RlQXQocmUrMykpLHZlPTU1Mjk2KygoUS09NjU1MzYpPj4+MTAmMTAyMyksUT01NjMyMCsoMTAyMyZRKSksMCE9PXZlJiYoTFtfZSsr'@;
put 'XT0yNTUmdmUsTFtfZSsrXT12ZT4+PjgsdmU9MCksTFtfZSsrXT1RJTI1NixMW19lKytdPVE+Pj44O3JldHVybiBMLnNsaWNlKDAsX2UpLnRvU3RyaW5nKCJ1Y3MyIil9LHJzPSJmb28gYmFyIGJhelx4ZTJceDk4XHg4M1x4ZjBceDlmXHg4ZFx4YTMiO1BpKHJzKT09aHMocnMpJiYoUGk9aHMp'@;
put 'O3ZhciBSYz1mdW5jdGlvbihQKXtyZXR1cm4gdWUoUCwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX07UGkocnMpPT1SYyhycykmJihQaT1SYyksTG89ZnVuY3Rpb24oeSl7cmV0dXJuIHVlKHksInV0ZjgiKS50b1N0cmluZygiYmluYXJ5Iil9fXZhciB5LHVsPSh5PXt9LGZ1bmN0aW9uKEws'@;
put 'USl7dmFyIHJlPUwrInwiKyhRfHwiIik7cmV0dXJuIHlbcmVdP3lbcmVdOnlbcmVdPW5ldyBSZWdFeHAoIjwoPzpcXHcrOik/IitMKycoPzogeG1sOnNwYWNlPSJwcmVzZXJ2ZSIpPyg/OltePl0qKT4oW1xcc1xcU10qPyk8Lyg/Olxcdys6KT8nK0wrIj4iLFF8fCIiKX0pLE9jPWZ1bmN0aW9u'@;
put 'KCl7dmFyIHk9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9zIiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKFApe3JldHVybltuZXcgUmVnRXhwKCImIitQWzBdKyI7IiwiaWciKSxQWzFdXX0pO3Jl'@;
put 'dHVybiBmdW5jdGlvbihMKXtmb3IodmFyIFE9TC5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywi'@;
put 'IikscmU9MDtyZTx5Lmxlbmd0aDsrK3JlKVE9US5yZXBsYWNlKHlbcmVdWzBdLHlbcmVdWzFdKTtyZXR1cm4gUX19KCksTjA9ZnVuY3Rpb24oKXt2YXIgeT17fTtyZXR1cm4gZnVuY3Rpb24oTCl7cmV0dXJuIHZvaWQgMCE9PXlbTF0/eVtMXTp5W0xdPW5ldyBSZWdFeHAoIjwoPzp2dDopPyIr'@;
put 'TCsiPihbXFxzXFxTXSo/KTwvKD86dnQ6KT8iK0wrIj4iLCJnIil9fSgpLHMzPS88XC8/KD86dnQ6KT92YXJpYW50Pi9nLGsyPS88KD86dnQ6KShbXj5dKik+KFtcc1xTXSopPC87ZnVuY3Rpb24gZTAoeSxQKXt2YXIgTD1sbih5KSxRPXkubWF0Y2goTjAoTC5iYXNlVHlwZSkpfHxbXSxyZT1b'@;
put 'XTtpZihRLmxlbmd0aCE9TC5zaXplKXtpZihQLldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK1EubGVuZ3RoKyIgIT0gIitMLnNpemUpO3JldHVybiByZX1yZXR1cm4gUS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgX2U9Z2UucmVwbGFjZShzMywiIiku'@;
put 'bWF0Y2goazIpO19lJiZyZS5wdXNoKHt2OlBpKF9lWzJdKSx0Ol9lWzFdfSl9KSxyZX12YXIgeHU9LyheXHN8XHMkfFxuKS87ZnVuY3Rpb24gZnMoeSxQKXtyZXR1cm4iPCIreSsoUC5tYXRjaCh4dSk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitQKyI8LyIreSsiPiJ9ZnVuY3Rp'@;
put 'b24gUGEoeSl7cmV0dXJuIGx0KHkpLm1hcChmdW5jdGlvbihQKXtyZXR1cm4iICIrUCsnPSInK3lbUF0rJyInfSkuam9pbigiIil9ZnVuY3Rpb24gU3IoeSxQLEwpe3JldHVybiI8Iit5KyhudWxsIT1MP1BhKEwpOiIiKSsobnVsbCE9UD8oUC5tYXRjaCh4dSk/JyB4bWw6c3BhY2U9InByZXNl'@;
put 'cnZlIic6IiIpKyI+IitQKyI8LyIreToiLyIpKyI+In1mdW5jdGlvbiBQaCh5LFApe3RyeXtyZXR1cm4geS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqLywiIil9Y2F0Y2goTCl7aWYoUCl0aHJvdyBMfXJldHVybiIifXZhciBBcixiYyxpcz17ZGM6Imh0dHA6Ly9wdXJsLm9yZy9kYy9l'@;
put 'bGVtZW50cy8xLjEvIixkY3Rlcm1zOiJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIixkY21pdHlwZToiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlLyIsbXg6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21hYy9leGNlbC8yMDA4L21haW4iLHI6Imh0dHA6Ly9zY2hl'@;
put 'bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLHNqczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9zaGVldGpzL2NvcmUtcHJvcGVydGllcyIsdnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt'@;
put 'YXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzIix4c2k6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIix4c2Q6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIixtYWluOlsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h'@;
put 'dHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvc3ByZWFkc2hlZXRtbC9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9v'@;
put 'ZmZpY2UvZXhjZWwvMjAwNi8yIl19LFdpPXtvOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLHg6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOmV4Y2VsIixzczoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLGR0'@;
put 'OiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsbXY6Imh0dHA6Ly9tYWNWbWxTY2hlbWFVcmkiLHY6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIixodG1sOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0sU2E9ZnVuY3Rpb24oeSl7Zm9y'@;
put 'KHZhciBQPVtdLFE9MDtRPHlbMF0ubGVuZ3RoOysrUSlpZih5WzBdW1FdKWZvcih2YXIgcmU9MCxnZT15WzBdW1FdLmxlbmd0aDtyZTxnZTtyZSs9MTAyNDApUC5wdXNoLmFwcGx5KFAseVswXVtRXS5zbGljZShyZSxyZSsxMDI0MCkpO3JldHVybiBQfSxGaD1TYSxFdT1mdW5jdGlvbih5LFAs'@;
put 'TCl7Zm9yKHZhciBRPVtdLHJlPVA7cmU8TDtyZSs9MilRLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShZbih5LHJlKSkpO3JldHVybiBRLmpvaW4oIiIpLnJlcGxhY2UodiwiIil9LEFzPUV1LG4wPWZ1bmN0aW9uKHksUCxMKXtmb3IodmFyIFE9W10scmU9UDtyZTxQK0w7KytyZSlRLnB1c2go'@;
put 'KCIwIit5W3JlXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIFEuam9pbigiIil9LHFhPW4wLF9jPWZ1bmN0aW9uKHksUCxMKXtmb3IodmFyIFE9W10scmU9UDtyZTxMO3JlKyspUS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoUWkoeSxyZSkpKTtyZXR1cm4gUS5qb2luKCIiKX0s'@;
put 'SGg9X2MsSXM9ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/X2MoeSxQKzQsUCs0K0wtMSk6IiJ9LGJvPUlzLHIwPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP19jKHksUCs0LFArNCtMLTEpOiIifSxUMj1yMCxEMj1mdW5jdGlvbih5LFApe3Zh'@;
put 'ciBMPTIqeWkoeSxQKTtyZXR1cm4gTD4wP19jKHksUCs0LFArNCtMLTEpOiIifSxsMz1EMjtBcj1iYz1mdW5jdGlvbihQLEwpe3ZhciBRPXlpKFAsTCk7cmV0dXJuIFE+MD9FdShQLEwrNCxMKzQrUSk6IiJ9O3ZhciBvMCxJMixrbz1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJu'@;
put 'IEw+MD9fYyh5LFArNCxQKzQrTCk6IiJ9LENzPWtvO28wPUkyPWZ1bmN0aW9uKHksUCl7cmV0dXJuIGZ1bmN0aW9uICRhKHksUCl7Zm9yKHZhciBMPTEtMiooeVtQKzddPj4+NyksUT0oKDEyNyZ5W1ArN10pPDw0KSsoeVtQKzZdPj4+NCYxNSkscmU9MTUmeVtQKzZdLGdlPTU7Z2U+PTA7LS1n'@;
put 'ZSlyZT0yNTYqcmUreVtQK2dlXTtyZXR1cm4gMjA0Nz09UT8wPT1yZT9MKigxLzApOk5hTjooMD09UT9RPS0xMDIyOihRLT0xMDIzLHJlKz1NYXRoLnBvdygyLDUyKSksTCpNYXRoLnBvdygyLFEtNTIpKnJlKX0oeSxQKX07dmFyIE5oPWZ1bmN0aW9uKFApe3JldHVybiBBcnJheS5pc0FycmF5'@;
put 'KFApfTtoZSYmKEV1PWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHkpP3kudG9TdHJpbmcoInV0ZjE2bGUiLFAsTCkucmVwbGFjZSh2LCIiKTpBcyh5LFAsTCl9LG4wPWZ1bmN0aW9uKHksUCxMKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHkpP3kudG9TdHJpbmcoImhl'@;
put 'eCIsUCxQK0wpOnFhKHksUCxMKX0sSXM9ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBibyhQLEwpO3ZhciBRPVAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBRPjA/UC50b1N0cmluZygidXRmOCIsTCs0LEwrNCtRLTEpOiIifSxyMD1mdW5jdGlvbihQLEwpe2lm'@;
put 'KCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIFQyKFAsTCk7dmFyIFE9UC5yZWFkVUludDMyTEUoTCk7cmV0dXJuIFE+MD9QLnRvU3RyaW5nKCJ1dGY4IixMKzQsTCs0K1EtMSk6IiJ9LEQyPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gbDMoUCxMKTt2YXIg'@;
put 'UT0yKlAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBQLnRvU3RyaW5nKCJ1dGYxNmxlIixMKzQsTCs0K1EtMSl9LEFyPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gYmMoUCxMKTt2YXIgUT1QLnJlYWRVSW50MzJMRShMKTtyZXR1cm4gUC50b1N0cmluZygidXRm'@;
put 'MTZsZSIsTCs0LEwrNCtRKX0sa289ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBDcyhQLEwpO3ZhciBRPVAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBQLnRvU3RyaW5nKCJ1dGY4IixMKzQsTCs0K1EpfSxfYz1mdW5jdGlvbihQLEwsUSl7cmV0dXJuIEJ1ZmZl'@;
put 'ci5pc0J1ZmZlcihQKT9QLnRvU3RyaW5nKCJ1dGY4IixMLFEpOkhoKFAsTCxRKX0sU2E9ZnVuY3Rpb24oeSl7cmV0dXJuIHlbMF0ubGVuZ3RoPjAmJkJ1ZmZlci5pc0J1ZmZlcih5WzBdWzBdKT9CdWZmZXIuY29uY2F0KHlbMF0pOkZoKHkpfSxTPWZ1bmN0aW9uKHkpe3JldHVybiBCdWZmZXIu'@;
put 'aXNCdWZmZXIoeVswXSk/QnVmZmVyLmNvbmNhdCh5KTpbXS5jb25jYXQuYXBwbHkoW10seSl9LG8wPWZ1bmN0aW9uKFAsTCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihQKT9QLnJlYWREb3VibGVMRShMKTpJMihQLEwpfSxOaD1mdW5jdGlvbihQKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFAp'@;
put 'fHxBcnJheS5pc0FycmF5KFApfSksdHlwZW9mIGNwdGFibGU8InUiJiYoRXU9ZnVuY3Rpb24oeSxQLEwpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHkuc2xpY2UoUCxMKSkucmVwbGFjZSh2LCIiKX0sX2M9ZnVuY3Rpb24oeSxQLEwpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRl'@;
put 'Y29kZSg2NTAwMSx5LnNsaWNlKFAsTCkpfSxJcz1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShSLHkuc2xpY2UoUCs0LFArNCtMLTEpKToiIn0scjA9ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/Y3B0YWJs'@;
put 'ZS51dGlscy5kZWNvZGUoTyx5LnNsaWNlKFArNCxQKzQrTC0xKSk6IiJ9LEQyPWZ1bmN0aW9uKHksUCl7dmFyIEw9Mip5aSh5LFApO3JldHVybiBMPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCx5LnNsaWNlKFArNCxQKzQrTC0xKSk6IiJ9LEFyPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWko'@;
put 'eSxQKTtyZXR1cm4gTD4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAseS5zbGljZShQKzQsUCs0K0wpKToiIn0sa289ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEseS5zbGljZShQKzQsUCs0K0wpKToiIn0pO3ZhciBR'@;
put 'aT1mdW5jdGlvbih5LFApe3JldHVybiB5W1BdfSxZbj1mdW5jdGlvbih5LFApe3JldHVybiAyNTYqeVtQKzFdK3lbUF19LGJpPWZ1bmN0aW9uKHksUCl7dmFyIEw9MjU2KnlbUCsxXSt5W1BdO3JldHVybiBMPDMyNzY4P0w6LTEqKDY1NTM1LUwrMSl9LHlpPWZ1bmN0aW9uKHksUCl7cmV0dXJu'@;
put 'IHlbUCszXSooMTw8MjQpKyh5W1ArMl08PDE2KSsoeVtQKzFdPDw4KSt5W1BdfSxvcz1mdW5jdGlvbih5LFApe3JldHVybiB5W1ArM108PDI0fHlbUCsyXTw8MTZ8eVtQKzFdPDw4fHlbUF19LEZhPWZ1bmN0aW9uKHksUCl7cmV0dXJuIHlbUF08PDI0fHlbUCsxXTw8MTZ8eVtQKzJdPDw4fHlb'@;
put 'UCszXX07ZnVuY3Rpb24gSGEoeSxQKXt2YXIgUSxyZSxfZSx2ZSxTZSxIZSxMPSIiLGdlPVtdO3N3aXRjaChQKXtjYXNlImRiY3MiOmlmKEhlPXRoaXMubCxoZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMpKUw9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqeSkudG9TdHJpbmcoInV0ZjE2bGUi'@;
put 'KTtlbHNlIGZvcihTZT0wO1NlPHk7KytTZSlMKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFluKHRoaXMsSGUpKSxIZSs9Mjt5Kj0yO2JyZWFrO2Nhc2UidXRmOCI6TD1fYyh0aGlzLHRoaXMubCx0aGlzLmwreSk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjpMPUV1KHRoaXMsdGhpcy5sLHRoaXMubCsoeSo9'@;
put 'MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJsZTwidSIpKXJldHVybiBIYS5jYWxsKHRoaXMseSwiZGJjcyIpO0w9Y3B0YWJsZS51dGlscy5kZWNvZGUoTyx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMip5KSkseSo9MjticmVhaztjYXNlImxwc3RyLWFuc2kiOkw9SXMo'@;
put 'dGhpcyx0aGlzLmwpLHk9NCt5aSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6TD1yMCh0aGlzLHRoaXMubCkseT00K3lpKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6TD1EMih0aGlzLHRoaXMubCkseT00KzIqeWkodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBw'@;
put 'NCI6eT00K3lpKHRoaXMsdGhpcy5sKSxMPUFyKHRoaXMsdGhpcy5sKSwyJnkmJih5Kz0yKTticmVhaztjYXNlIjhscHA0Ijp5PTQreWkodGhpcyx0aGlzLmwpLEw9a28odGhpcyx0aGlzLmwpLDMmeSYmKHkrPTQtKDMmeSkpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKHk9MCxMPSIiOzAhPT0oX2U9'@;
put 'UWkodGhpcyx0aGlzLmwreSsrKSk7KWdlLnB1c2gocShfZSkpO0w9Z2Uuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKHk9MCxMPSIiOzAhPT0oX2U9WW4odGhpcyx0aGlzLmwreSkpOylnZS5wdXNoKHEoX2UpKSx5Kz0yO3krPTIsTD1nZS5qb2luKCIiKTticmVhaztjYXNlImRiY3Mt'@;
put 'Y29udCI6Zm9yKEw9IiIsSGU9dGhpcy5sLFNlPTA7U2U8eTsrK1NlKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YoSGUpKXJldHVybiBfZT1RaSh0aGlzLEhlKSx0aGlzLmw9SGUrMSx2ZT1IYS5jYWxsKHRoaXMseS1TZSxfZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iiks'@;
put 'Z2Uuam9pbigiIikrdmU7Z2UucHVzaChxKFluKHRoaXMsSGUpKSksSGUrPTJ9TD1nZS5qb2luKCIiKSx5Kj0yO2JyZWFrO2Nhc2UiY3BzdHIiOmlmKHR5cGVvZiBjcHRhYmxlPCJ1Iil7TD1jcHRhYmxlLnV0aWxzLmRlY29kZShPLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCt5KSk7YnJlYWt9'@;
put 'Y2FzZSJzYmNzLWNvbnQiOmZvcihMPSIiLEhlPXRoaXMubCxTZT0wO1NlIT15OysrU2Upe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihIZSkpcmV0dXJuIF9lPVFpKHRoaXMsSGUpLHRoaXMubD1IZSsxLHZlPUhhLmNhbGwodGhpcyx5LVNlLF9lPyJkYmNzLWNvbnQiOiJz'@;
put 'YmNzLWNvbnQiKSxnZS5qb2luKCIiKSt2ZTtnZS5wdXNoKHEoUWkodGhpcyxIZSkpKSxIZSs9MX1MPWdlLmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKHkpe2Nhc2UgMTpyZXR1cm4gUT1RaSh0aGlzLHRoaXMubCksdGhpcy5sKyssUTtjYXNlIDI6cmV0dXJuIFE9KCJpIj09PVA/Ymk6'@;
put 'WW4pKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTIsUTtjYXNlIDQ6Y2FzZS00OnJldHVybiJpIiE9PVAmJjEyOCZ0aGlzW3RoaXMubCszXT8ocmU9eWkodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxyZSk6KFE9KHk+MD9vczpGYSkodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxRKTtjYXNlIDg6Y2FzZS04'@;
put 'OmlmKCJmIj09PVApcmV0dXJuIHJlPTg9PXk/bzAodGhpcyx0aGlzLmwpOm8wKFt0aGlzW3RoaXMubCs3XSx0aGlzW3RoaXMubCs2XSx0aGlzW3RoaXMubCs1XSx0aGlzW3RoaXMubCs0XSx0aGlzW3RoaXMubCszXSx0aGlzW3RoaXMubCsyXSx0aGlzW3RoaXMubCsxXSx0aGlzW3RoaXMubCsw'@;
put 'XV0sMCksdGhpcy5sKz04LHJlO3k9ODtjYXNlIDE2Okw9bjAodGhpcyx0aGlzLmwseSl9fXJldHVybiB0aGlzLmwrPXksTH12YXIgJG89ZnVuY3Rpb24oeSxQLEwpe3lbTF09MjU1JlAseVtMKzFdPVA+Pj44JjI1NSx5W0wrMl09UD4+PjE2JjI1NSx5W0wrM109UD4+PjI0JjI1NX0sVjA9ZnVu'@;
put 'Y3Rpb24oeSxQLEwpe3lbTF09MjU1JlAseVtMKzFdPVA+PjgmMjU1LHlbTCsyXT1QPj4xNiYyNTUseVtMKzNdPVA+PjI0JjI1NX0sRGE9ZnVuY3Rpb24oeSxQLEwpe3lbTF09MjU1JlAseVtMKzFdPVA+Pj44JjI1NX07ZnVuY3Rpb24gVmgoeSxQLEwpe3ZhciBRPTAscmU9MDtpZigiZGJjcyI9'@;
put 'PT1MKXtmb3IocmU9MDtyZSE9UC5sZW5ndGg7KytyZSlEYSh0aGlzLFAuY2hhckNvZGVBdChyZSksdGhpcy5sKzIqcmUpO1E9MipQLmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PUwpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IiYmODc0PT1SKWZvcihyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXt2YXIg'@;
put 'Z2U9Y3B0YWJsZS51dGlscy5lbmNvZGUoUixQLmNoYXJBdChyZSkpO3RoaXNbdGhpcy5sK3JlXT1nZVswXX1lbHNlIGZvcihQPVAucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXRoaXNbdGhpcy5sK3JlXT0yNTUmUC5jaGFyQ29kZUF0KHJlKTtR'@;
put 'PVAubGVuZ3RofWVsc2V7aWYoImhleCI9PT1MKXtmb3IoO3JlPHk7KytyZSl0aGlzW3RoaXMubCsrXT1wYXJzZUludChQLnNsaWNlKDIqcmUsMipyZSsyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09TCl7dmFyIF9lPU1hdGgubWluKHRoaXMubCt5LHRoaXMubGVuZ3RoKTtm'@;
put 'b3IocmU9MDtyZTxNYXRoLm1pbihQLmxlbmd0aCx5KTsrK3JlKXt2YXIgdmU9UC5jaGFyQ29kZUF0KHJlKTt0aGlzW3RoaXMubCsrXT0yNTUmdmUsdGhpc1t0aGlzLmwrK109dmU+Pjh9Zm9yKDt0aGlzLmw8X2U7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKHkpe2Nhc2Ug'@;
put 'MTpRPTEsdGhpc1t0aGlzLmxdPTI1NSZQO2JyZWFrO2Nhc2UgMjpRPTIsdGhpc1t0aGlzLmxdPTI1NSZQLHRoaXNbdGhpcy5sKzFdPTI1NSYoUD4+Pj04KTticmVhaztjYXNlIDM6UT0zLHRoaXNbdGhpcy5sXT0yNTUmUCx0aGlzW3RoaXMubCsxXT0yNTUmKFA+Pj49OCksdGhpc1t0aGlzLmwr'@;
put 'Ml09MjU1JihQPj4+PTgpO2JyZWFrO2Nhc2UgNDpRPTQsJG8odGhpcyxQLHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKFE9OCwiZiI9PT1MKXshZnVuY3Rpb24gdDAoeSxQLEwpe3ZhciBRPShQPDB8fDEvUD09LTEvMD8xOjApPDw3LHJlPTAsZ2U9MCxfZT1RPy1QOlA7aXNGaW5pdGUoX2UpPzA9'@;
put 'PV9lP3JlPWdlPTA6KHJlPU1hdGguZmxvb3IoTWF0aC5sb2coX2UpL01hdGguTE4yKSxnZT1fZSpNYXRoLnBvdygyLDUyLXJlKSxyZTw9LTEwMjMmJighaXNGaW5pdGUoZ2UpfHxnZTxNYXRoLnBvdygyLDUyKSk/cmU9LTEwMjI6KGdlLT1NYXRoLnBvdygyLDUyKSxyZSs9MTAyMykpOihyZT0y'@;
put 'MDQ3LGdlPWlzTmFOKFApPzI2OTg1OjApO2Zvcih2YXIgdmU9MDt2ZTw9NTsrK3ZlLGdlLz0yNTYpeVtMK3ZlXT0yNTUmZ2U7eVtMKzZdPSgxNSZyZSk8PDR8MTUmZ2UseVtMKzddPXJlPj40fFF9KHRoaXMsUCx0aGlzLmwpO2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00OlE9NCxWMCh0aGlz'@;
put 'LFAsdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9USx0aGlzfWZ1bmN0aW9uIEJoKHksUCl7dmFyIEw9bjAodGhpcyx0aGlzLmwseS5sZW5ndGg+PjEpO2lmKEwhPT15KXRocm93IG5ldyBFcnJvcihQKyJFeHBlY3RlZCAiK3krIiBzYXcgIitMKTt0aGlzLmwrPXkubGVuZ3RoPj4xfWZ1bmN0aW9u'@;
put 'IG9sKHksUCl7eS5sPVAseS5yZWFkX3NoaWZ0PUhhLHkuY2hrPUJoLHkud3JpdGVfc2hpZnQ9Vmh9ZnVuY3Rpb24geWMoeSxQKXt5LmwrPVB9ZnVuY3Rpb24gZnIoeSl7dmFyIFA9Ryh5KTtyZXR1cm4gb2woUCwwKSxQfWZ1bmN0aW9uIEhvKHksUCxMKXtpZih5KXt2YXIgUSxyZSxnZTtvbCh5'@;
put 'LHkubHx8MCk7Zm9yKHZhciBfZT15Lmxlbmd0aCx2ZT0wLFNlPTA7eS5sPF9lOyl7MTI4Jih2ZT15LnJlYWRfc2hpZnQoMSkpJiYodmU9KDEyNyZ2ZSkrKCgxMjcmeS5yZWFkX3NoaWZ0KDEpKTw8NykpO3ZhciBIZT1tZlt2ZV18fG1mWzY1NTM1XTtmb3IoZ2U9MTI3JihRPXkucmVhZF9zaGlm'@;
put 'dCgxKSkscmU9MTtyZTw0JiYxMjgmUTsrK3JlKWdlKz0oMTI3JihRPXkucmVhZF9zaGlmdCgxKSkpPDw3KnJlO1NlPXkubCtnZTt2YXIgQmU9KEhlLmZ8fHljKSh5LGdlLEwpO2lmKHkubD1TZSxQKEJlLEhlLm4sdmUpKXJldHVybn19fWZ1bmN0aW9uIHdjKCl7dmFyIHk9W10sUD1oZT8yNTY6'@;
put 'MjA0OCxMPWZ1bmN0aW9uKEhlKXt2YXIgQmU9ZnIoSGUpO3JldHVybiBvbChCZSwwKSxCZX0sUT1MKFApLHJlPWZ1bmN0aW9uKCl7USYmKFEubGVuZ3RoPlEubCYmKChRPVEuc2xpY2UoMCxRLmwpKS5sPVEubGVuZ3RoKSxRLmxlbmd0aD4wJiZ5LnB1c2goUSksUT1udWxsKX0sZ2U9ZnVuY3Rp'@;
put 'b24oSGUpe3JldHVybiBRJiZIZTxRLmxlbmd0aC1RLmw/UToocmUoKSxRPUwoTWF0aC5tYXgoSGUrMSxQKSkpfTtyZXR1cm57bmV4dDpnZSxwdXNoOmZ1bmN0aW9uKEhlKXtyZSgpLG51bGw9PShRPUhlKS5sJiYoUS5sPVEubGVuZ3RoKSxnZShQKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHJl'@;
put 'KCksU2EoW3ldKX0sX2J1ZnM6eX19ZnVuY3Rpb24gdWkoeSxQLEwsUSl7dmFyIGdlLHJlPStiNVtQXTtpZighaXNOYU4ocmUpKXtRfHwoUT1tZltyZV0ucHx8KEx8fFtdKS5sZW5ndGh8fDApLGdlPTErKHJlPj0xMjg/MTowKSsxLFE+PTEyOCYmKytnZSxRPj0xNjM4NCYmKytnZSxRPj0yMDk3'@;
put 'MTUyJiYrK2dlO3ZhciBfZT15Lm5leHQoZ2UpO3JlPD0xMjc/X2Uud3JpdGVfc2hpZnQoMSxyZSk6KF9lLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmcmUpKSxfZS53cml0ZV9zaGlmdCgxLHJlPj43KSk7Zm9yKHZhciB2ZT0wOzQhPXZlOysrdmUpe2lmKCEoUT49MTI4KSl7X2Uud3JpdGVfc2hp'@;
put 'ZnQoMSxRKTticmVha31fZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JlEpKSxRPj49N31RPjAmJk5oKEwpJiZ5LnB1c2goTCl9fWZ1bmN0aW9uIGx1KHksUCxMKXt2YXIgUT1vbih5KTtpZihQLnM/KFEuY1JlbCYmKFEuYys9UC5zLmMpLFEuclJlbCYmKFEucis9UC5zLnIpKTooUS5jUmVsJiYo'@;
put 'US5jKz1QLmMpLFEuclJlbCYmKFEucis9UC5yKSksIUx8fEwuYmlmZjwxMil7Zm9yKDtRLmM+PTI1NjspUS5jLT0yNTY7Zm9yKDtRLnI+PTY1NTM2OylRLnItPTY1NTM2fXJldHVybiBRfWZ1bmN0aW9uIGhyKHksUCxMKXt2YXIgUT1vbih5KTtyZXR1cm4gUS5zPWx1KFEucyxQLnMsTCksUS5l'@;
put 'PWx1KFEuZSxQLnMsTCksUX1mdW5jdGlvbiBMMih5LFApe2lmKHkuY1JlbCYmeS5jPDApZm9yKHk9b24oeSk7eS5jPDA7KXkuYys9UD44PzE2Mzg0OjI1NjtpZih5LnJSZWwmJnkucjwwKWZvcih5PW9uKHkpO3kucjwwOyl5LnIrPVA+OD8xMDQ4NTc2OlA+NT82NTUzNjoxNjM4NDtpZih5LmNS'@;
put 'ZWwmJnkuYz49KFA+OD8xNjM4NDoyNTYpKWZvcih5PW9uKHkpO3kuYz49KFA+OD8xNjM4NDoyNTYpOyl5LmMtPVA+OD8xNjM4NDoyNTY7aWYoeS5yUmVsJiZ5LnI+PTEwNDg1NzYpZm9yKHk9b24oeSk7eS5yPj0xMDQ4NTc2Oyl5LnItPTEwNDg1NzY7dmFyIEw9ZGkoeSk7cmV0dXJuIXkuY1Jl'@;
put 'bCYmbnVsbCE9eS5jUmVsJiYoTD1mdW5jdGlvbiBLNyh5KXtyZXR1cm4geS5yZXBsYWNlKC9eKFtBLVpdKS8sIiQkJDEiKX0oTCkpLCF5LnJSZWwmJm51bGwhPXkuclJlbCYmKEw9ZnVuY3Rpb24gbm0oeSl7cmV0dXJuIHkucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KEwp'@;
put 'KSxMfWZ1bmN0aW9uIG1pKHksUCl7cmV0dXJuIDAhPXkucy5yfHx5LnMuclJlbHx8eS5lLnIhPShQLmJpZmY+PTEyPzEwNDg1NzU6UC5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8eS5lLnJSZWw/MCE9eS5zLmN8fHkucy5jUmVsfHx5LmUuYyE9KFAuYmlmZj49MTI/MTYzODM6MjU1KXx8eS5lLmNS'@;
put 'ZWw/TDIoeS5zLFAuYmlmZikrIjoiK0wyKHkuZSxQLmJpZmYpOih5LnMuclJlbD8iIjoiJCIpK0hzKHkucy5yKSsiOiIrKHkuZS5yUmVsPyIiOiIkIikrSHMoeS5lLnIpOih5LnMuY1JlbD8iIjoiJCIpK05zKHkucy5jKSsiOiIrKHkuZS5jUmVsPyIiOiIkIikrTnMoeS5lLmMpfXZhciB4ZD17'@;
put 'fTtmdW5jdGlvbiBCMCh5KXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24gYzMoeSl7cmV0dXJuIHkucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfSh5KSwxMCktMX1mdW5jdGlvbiBIcyh5KXtyZXR1cm4iIisoeSsxKX1mdW5jdGlvbiBqaCh5KXtmb3IodmFyIFA9ZnVuY3Rpb24gbnMoeSl7cmV0'@;
put 'dXJuIHkucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KHkpLEw9MCxRPTA7USE9PVAubGVuZ3RoOysrUSlMPTI2KkwrUC5jaGFyQ29kZUF0KFEpLTY0O3JldHVybiBMLTF9ZnVuY3Rpb24gTnMoeSl7aWYoeTwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIit5KTt2YXIgUD0i'@;
put 'Ijtmb3IoKyt5O3k7eT1NYXRoLmZsb29yKCh5LTEpLzI2KSlQPVN0cmluZy5mcm9tQ2hhckNvZGUoKHktMSklMjYrNjUpK1A7cmV0dXJuIFB9ZnVuY3Rpb24gc3MoeSl7Zm9yKHZhciBQPTAsTD0wLFE9MDtRPHkubGVuZ3RoOysrUSl7dmFyIHJlPXkuY2hhckNvZGVBdChRKTtyZT49NDgmJnJl'@;
put 'PD01Nz9QPTEwKlArKHJlLTQ4KTpyZT49NjUmJnJlPD05MCYmKEw9MjYqTCsocmUtNjQpKX1yZXR1cm57YzpMLTEscjpQLTF9fWZ1bmN0aW9uIGRpKHkpe2Zvcih2YXIgUD15LmMrMSxMPSIiO1A7UD0oUC0xKS8yNnwwKUw9U3RyaW5nLmZyb21DaGFyQ29kZSgoUC0xKSUyNis2NSkrTDtyZXR1'@;
put 'cm4gTCsoeS5yKzEpfWZ1bmN0aW9uIFdzKHkpe3ZhciBQPXkuaW5kZXhPZigiOiIpO3JldHVybi0xPT1QP3tzOnNzKHkpLGU6c3MoeSl9OntzOnNzKHkuc2xpY2UoMCxQKSksZTpzcyh5LnNsaWNlKFArMSkpfX1mdW5jdGlvbiBPbyh5LFApe3JldHVybiB0eXBlb2YgUD4idSJ8fCJudW1iZXIi'@;
put 'PT10eXBlb2YgUD9Pbyh5LnMseS5lKTooInN0cmluZyIhPXR5cGVvZiB5JiYoeT1kaSh5KSksInN0cmluZyIhPXR5cGVvZiBQJiYoUD1kaShQKSkseT09UD95OnkrIjoiK1ApfWZ1bmN0aW9uIE9pKHkpe3ZhciBQPUpTT04ucGFyc2UoJ3sicyI6eyJjIjowLCJyIjowfSwiZSI6eyJjIjowLCJy'@;
put 'IjowfX0nKSxMPTAsUT0wLHJlPTAsZ2U9eS5sZW5ndGg7Zm9yKEw9MDtRPGdlJiYhKChyZT15LmNoYXJDb2RlQXQoUSktNjQpPDF8fHJlPjI2KTsrK1EpTD0yNipMK3JlO2ZvcihQLnMuYz0tLUwsTD0wO1E8Z2UmJiEoKHJlPXkuY2hhckNvZGVBdChRKS00OCk8MHx8cmU+OSk7KytRKUw9MTAq'@;
put 'TCtyZTtpZihQLnMucj0tLUwsUT09PWdlfHw1OD09PXkuY2hhckNvZGVBdCgrK1EpKXJldHVybiBQLmUuYz1QLnMuYyxQLmUucj1QLnMucixQO2ZvcihMPTA7USE9Z2UmJiEoKHJlPXkuY2hhckNvZGVBdChRKS02NCk8MXx8cmU+MjYpOysrUSlMPTI2KkwrcmU7Zm9yKFAuZS5jPS0tTCxMPTA7'@;
put 'USE9Z2UmJiEoKHJlPXkuY2hhckNvZGVBdChRKS00OCk8MHx8cmU+OSk7KytRKUw9MTAqTCtyZTtyZXR1cm4gUC5lLnI9LS1MLFB9ZnVuY3Rpb24gcm0oeSxQKXt2YXIgTD0iZCI9PXkudCYmUCBpbnN0YW5jZW9mIERhdGU7aWYobnVsbCE9eS56KXRyeXtyZXR1cm4geS53PXcuZm9ybWF0KHku'@;
put 'eixMP1VlKFApOlApfWNhdGNoe310cnl7cmV0dXJuIHkudz13LmZvcm1hdCgoeS5YRnx8e30pLm51bUZtdElkfHwoTD8xNDowKSxMP1VlKFApOlApfWNhdGNoe3JldHVybiIiK1B9fWZ1bmN0aW9uIGN1KHksUCxMKXtyZXR1cm4gbnVsbD09eXx8bnVsbD09eS50fHwieiI9PXkudD8iIjp2b2lk'@;
put 'IDAhPT15Lnc/eS53OigiZCI9PXkudCYmIXkueiYmTCYmTC5kYXRlTkYmJih5Lno9TC5kYXRlTkYpLCJlIj09eS50P1FvW3kudl18fHkudjpybSh5LG51bGw9PVA/eS52OlApKX1mdW5jdGlvbiBFZCh5LFApe3ZhciBMPVAmJlAuc2hlZXQ/UC5zaGVldDoiU2hlZXQxIixRPXt9O3JldHVybiBR'@;
put 'W0xdPXkse1NoZWV0TmFtZXM6W0xdLFNoZWV0czpRfX1mdW5jdGlvbiBzMCh5LFAsTCl7dmFyIFE9THx8e30scmU9eT9BcnJheS5pc0FycmF5KHkpOlEuZGVuc2U7bnVsbCE9dGUmJm51bGw9PXJlJiYocmU9dGUpO3ZhciBnZT15fHwocmU/W106e30pLF9lPTAsdmU9MDtpZihnZSYmbnVsbCE9'@;
put 'US5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgUS5vcmlnaW4pX2U9US5vcmlnaW47ZWxzZXt2YXIgU2U9InN0cmluZyI9PXR5cGVvZiBRLm9yaWdpbj9zcyhRLm9yaWdpbik6US5vcmlnaW47X2U9U2Uucix2ZT1TZS5jfWdlWyIhcmVmIl18fChnZVsiIXJlZiJdPSJBMTpBMSIpfXZhciBI'@;
put 'ZT17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihnZVsiIXJlZiJdKXt2YXIgQmU9T2koZ2VbIiFyZWYiXSk7SGUucy5jPUJlLnMuYyxIZS5zLnI9QmUucy5yLEhlLmUuYz1NYXRoLm1heChIZS5lLmMsQmUuZS5jKSxIZS5lLnI9TWF0aC5tYXgoSGUuZS5yLEJlLmUuciksLTE9PV9l'@;
put 'JiYoSGUuZS5yPV9lPUJlLmUucisxKX1mb3IodmFyIEdlPTA7R2UhPVAubGVuZ3RoOysrR2UpaWYoUFtHZV0pe2lmKCFBcnJheS5pc0FycmF5KFBbR2VdKSl0aHJvdyBuZXcgRXJyb3IoImFvYV90b19zaGVldCBleHBlY3RzIGFuIGFycmF5IG9mIGFycmF5cyIpO2Zvcih2YXIgbnQ9MDtudCE9'@;
put 'UFtHZV0ubGVuZ3RoOysrbnQpaWYoISh0eXBlb2YgUFtHZV1bbnRdPiJ1Iikpe3ZhciBkdD17djpQW0dlXVtudF19LEN0PV9lK0dlLGN0PXZlK250O2lmKEhlLnMucj5DdCYmKEhlLnMucj1DdCksSGUucy5jPmN0JiYoSGUucy5jPWN0KSxIZS5lLnI8Q3QmJihIZS5lLnI9Q3QpLEhlLmUuYzxj'@;
put 'dCYmKEhlLmUuYz1jdCksIVBbR2VdW250XXx8Im9iamVjdCIhPXR5cGVvZiBQW0dlXVtudF18fEFycmF5LmlzQXJyYXkoUFtHZV1bbnRdKXx8UFtHZV1bbnRdaW5zdGFuY2VvZiBEYXRlKWlmKEFycmF5LmlzQXJyYXkoZHQudikmJihkdC5mPVBbR2VdW250XVsxXSxkdC52PWR0LnZbMF0pLG51'@;
put 'bGw9PT1kdC52KWlmKGR0LmYpZHQudD0ibiI7ZWxzZSBpZihRLm51bGxFcnJvcilkdC50PSJlIixkdC52PTA7ZWxzZXtpZighUS5zaGVldFN0dWJzKWNvbnRpbnVlO2R0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGR0LnY/ZHQudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZHQudj9kdC50'@;
put 'PSJiIjpkdC52IGluc3RhbmNlb2YgRGF0ZT8oZHQuej1RLmRhdGVORnx8dy5fdGFibGVbMTRdLFEuY2VsbERhdGVzPyhkdC50PSJkIixkdC53PXcuZm9ybWF0KGR0LnosVWUoZHQudikpKTooZHQudD0ibiIsZHQudj1VZShkdC52KSxkdC53PXcuZm9ybWF0KGR0LnosZHQudikpKTpkdC50PSJz'@;
put 'IjtlbHNlIGR0PVBbR2VdW250XTtpZihkdCYmZHQuaCl0cnl7ZHQuUj1GdS5odG1sX3RvX3JzKGR0LmgpLGR0LnY9IiI7Zm9yKHZhciBidD0wO2J0PGR0LlIubGVuZ3RoOysrYnQpZHQudis9ZHQuUltidF0udnx8IiJ9Y2F0Y2h7fWlmKHJlKWdlW0N0XXx8KGdlW0N0XT1bXSksZ2VbQ3RdW2N0'@;
put 'XSYmZ2VbQ3RdW2N0XS5zJiYoZHQucz1nZVtDdF1bY3RdLnMpLGdlW0N0XVtjdF0mJmdlW0N0XVtjdF0ueiYmKGR0Lno9Z2VbQ3RdW2N0XS56KSxnZVtDdF1bY3RdPWR0O2Vsc2V7dmFyIEZ0PWRpKHtjOmN0LHI6Q3R9KTtnZVtGdF0mJmdlW0Z0XS5zJiYoZHQucz1nZVtGdF0ucyksZ2VbRnRd'@;
put 'JiZnZVtGdF0ueiYmKGR0Lno9Z2VbRnRdLnopLGdlW0Z0XT1kdH19fXJldHVybiBIZS5zLmM8MWU3JiYoZ2VbIiFyZWYiXT1PbyhIZSkpLGdlfWZ1bmN0aW9uIGsxKHksUCl7cmV0dXJuIHMwKG51bGwseSxQKX1mdW5jdGlvbiBrdSh5LFApe3JldHVybiBQfHwoUD1mcig0KSksUC53cml0ZV9z'@;
put 'aGlmdCg0LHkpLFB9ZnVuY3Rpb24gQ2MoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09UD8iIjp5LnJlYWRfc2hpZnQoUCwiZGJjcyIpfWZ1bmN0aW9uIG5jKHksUCl7dmFyIEw9ITE7cmV0dXJuIG51bGw9PVAmJihMPSEwLFA9ZnIoNCsyKnkubGVuZ3RoKSksUC53cml0ZV9z'@;
put 'aGlmdCg0LHkubGVuZ3RoKSx5Lmxlbmd0aD4wJiZQLndyaXRlX3NoaWZ0KDAseSwiZGJjcyIpLEw/UC5zbGljZSgwLFAubCk6UH1mdW5jdGlvbiBvbSh5KXtyZXR1cm57aWNoOnkucmVhZF9zaGlmdCgyKSxpZm50OnkucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gY2EoeSxQKXt2YXIgTD15Lmws'@;
put 'UT15LnJlYWRfc2hpZnQoMSkscmU9Q2MoeSksZ2U9W10sX2U9e3Q6cmUsaDpyZX07aWYoMSZRKXtmb3IodmFyIHZlPXkucmVhZF9zaGlmdCg0KSxTZT0wO1NlIT12ZTsrK1NlKWdlLnB1c2gob20oeSkpO19lLnI9Z2V9ZWxzZSBfZS5yPVt7aWNoOjAsaWZudDowfV07cmV0dXJuIHkubD1MK1As'@;
put 'X2V9IWZ1bmN0aW9uKHksUCl7dmFyIEw7aWYodHlwZW9mIGNyeXB0b0Jyb3dzZXJpZnk8InUiKUw9Y3J5cHRvQnJvd3NlcmlmeTtlbHNlIGlmKHR5cGVvZiBQPCJ1IilMPVA7ZWxzZSB0cnl7TD1GKDc3OTAzKX1jYXRjaHtMPW51bGx9eS5yYzQ9ZnVuY3Rpb24oUSxyZSl7dmFyIGdlPW5ldyBB'@;
put 'cnJheSgyNTYpLF9lPTAsdmU9MCxTZT0wLEhlPTA7Zm9yKHZlPTA7MjU2IT12ZTsrK3ZlKWdlW3ZlXT12ZTtmb3IodmU9MDsyNTYhPXZlOysrdmUpU2U9U2UrZ2VbdmVdK1FbdmUlUS5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1LEhlPWdlW3ZlXSxnZVt2ZV09Z2VbU2VdLGdlW1NlXT1IZTt2'@;
put 'ZT1TZT0wO3ZhciBCZT1HKHJlLmxlbmd0aCk7Zm9yKF9lPTA7X2UhPXJlLmxlbmd0aDsrK19lKUhlPWdlW3ZlPXZlKzEmMjU1XSxnZVt2ZV09Z2VbU2U9KFNlK2dlW3ZlXSklMjU2XSxnZVtTZV09SGUsQmVbX2VdPXJlW19lXV5nZVtnZVt2ZV0rZ2VbU2VdJjI1NV07cmV0dXJuIEJlfSx5Lm1k'@;
put 'NT1mdW5jdGlvbihRKXtpZighTCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNyeXB0byIpO3JldHVybiBMLmNyZWF0ZUhhc2goIm1kNSIpLnVwZGF0ZShCdWZmZXIuZnJvbShRKSkuZGlnZXN0KCJoZXgiKX19KHhkLHR5cGVvZiBjcnlwdG88InUiP2NyeXB0bzp2b2lkIDApO3ZhciBY'@;
put 'Nz1jYTtmdW5jdGlvbiB1dSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCksTD15LnJlYWRfc2hpZnQoMik7cmV0dXJuIEwrPXkucmVhZF9zaGlmdCgxKTw8MTYseS5sKysse2M6UCxpU3R5bGVSZWY6TH19ZnVuY3Rpb24gRmkoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoOCkpLFAud3JpdGVf'@;
put 'c2hpZnQoLTQseS5jKSxQLndyaXRlX3NoaWZ0KDMseS5pU3R5bGVSZWZ8fHkucyksUC53cml0ZV9zaGlmdCgxLDApLFB9ZnVuY3Rpb24gYTAoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBQKz15LnJlYWRfc2hpZnQoMSk8PDE2LHkubCsrLHtjOi0xLGlTdHlsZVJlZjpQfX1mdW5j'@;
put 'dGlvbiBLYyh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcig0KSksUC53cml0ZV9zaGlmdCgzLHkuaVN0eWxlUmVmfHx5LnMpLFAud3JpdGVfc2hpZnQoMSwwKSxQfXZhciB6aD1DYyxzbT1uYztmdW5jdGlvbiBBdSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1QfHw0Mjk0'@;
put 'OTY3Mjk1PT09UD8iIjp5LnJlYWRfc2hpZnQoUCwiZGJjcyIpfWZ1bmN0aW9uIEFkKHksUCl7dmFyIEw9ITE7cmV0dXJuIG51bGw9PVAmJihMPSEwLFA9ZnIoMTI3KSksUC53cml0ZV9zaGlmdCg0LHkubGVuZ3RoPjA/eS5sZW5ndGg6NDI5NDk2NzI5NSkseS5sZW5ndGg+MCYmUC53cml0ZV9z'@;
put 'aGlmdCgwLHksImRiY3MiKSxMP1Auc2xpY2UoMCxQLmwpOlB9dmFyIGR1PUNjLFQxPUF1LFBjPUFkO2Z1bmN0aW9uIFhjKHkpe3ZhciBQPXkuc2xpY2UoeS5sLHkubCs0KSxMPTEmUFswXSxRPTImUFswXTt5LmwrPTQsUFswXSY9MjUyO3ZhciByZT0wPT09UT9vMChbMCwwLDAsMCxQWzBdLFBb'@;
put 'MV0sUFsyXSxQWzNdXSwwKTpvcyhQLDApPj4yO3JldHVybiBMP3JlLzEwMDpyZX1mdW5jdGlvbiBTcyh5LFApe251bGw9PVAmJihQPWZyKDQpKTt2YXIgTD0wLFE9MCxyZT0xMDAqeTtpZih5PT0oMHx5KSYmeT49LSgxPDwyOSkmJnk8MTw8Mjk/UT0xOnJlPT0oMHxyZSkmJnJlPj0tKDE8PDI5'@;
put 'KSYmcmU8MTw8MjkmJihRPTEsTD0xKSwhUSl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIFJrTnVtYmVyICIreSk7UC53cml0ZV9zaGlmdCgtNCwoKEw/cmU6eSk8PDIpKyhMKzIpKX1mdW5jdGlvbiBUZCh5KXt2YXIgUD17czp7fSxlOnt9fTtyZXR1cm4gUC5zLnI9eS5yZWFkX3NoaWZ0'@;
put 'KDQpLFAuZS5yPXkucmVhZF9zaGlmdCg0KSxQLnMuYz15LnJlYWRfc2hpZnQoNCksUC5lLmM9eS5yZWFkX3NoaWZ0KDQpLFB9dmFyIEpjPVRkLEQxPWZ1bmN0aW9uIFVoKHksUCl7cmV0dXJuIFB8fChQPWZyKDE2KSksUC53cml0ZV9zaGlmdCg0LHkucy5yKSxQLndyaXRlX3NoaWZ0KDQseS5l'@;
put 'LnIpLFAud3JpdGVfc2hpZnQoNCx5LnMuYyksUC53cml0ZV9zaGlmdCg0LHkuZS5jKSxQfTtmdW5jdGlvbiBsMCh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W10sUT0wO1E8UDsrK1Epe3ZhciByZT1KYyh5KTtMLnB1c2goT28ocmUpKX1yZXR1cm4gTC5qb2luKCIsIil9ZnVuY3Rp'@;
put 'b24gbWEoeSl7aWYoeS5sZW5ndGgteS5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIHkucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gRmMoeSxQKXtyZXR1cm4oUHx8ZnIoOCkpLndyaXRlX3NoaWZ0KDgseSwiZiIpfWZ1bmN0aW9uIERkKHkpe3ZhciBQPXt9'@;
put 'LFE9eS5yZWFkX3NoaWZ0KDEpPj4+MSxyZT15LnJlYWRfc2hpZnQoMSksZ2U9eS5yZWFkX3NoaWZ0KDIsImkiKSxfZT15LnJlYWRfc2hpZnQoMSksdmU9eS5yZWFkX3NoaWZ0KDEpLFNlPXkucmVhZF9zaGlmdCgxKTtzd2l0Y2goeS5sKyssUSl7Y2FzZSAwOlAuYXV0bz0xO2JyZWFrO2Nhc2Ug'@;
put 'MTpQLmluZGV4PXJlO3ZhciBIZT1DcltyZV07SGUmJihQLnJnYj16MShIZSkpO2JyZWFrO2Nhc2UgMjpQLnJnYj16MShbX2UsdmUsU2VdKTticmVhaztjYXNlIDM6UC50aGVtZT1yZX1yZXR1cm4gMCE9Z2UmJihQLnRpbnQ9Z2U+MD9nZS8zMjc2NzpnZS8zMjc2OCksUH1mdW5jdGlvbiBSMih5'@;
put 'LFApe2lmKFB8fChQPWZyKDgpKSwheXx8eS5hdXRvKXJldHVybiBQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFA7bnVsbCE9eS5pbmRleD8oUC53cml0ZV9zaGlmdCgxLDIpLFAud3JpdGVfc2hpZnQoMSx5LmluZGV4KSk6bnVsbCE9eS50aGVtZT8oUC53cml0ZV9zaGlm'@;
put 'dCgxLDYpLFAud3JpdGVfc2hpZnQoMSx5LnRoZW1lKSk6KFAud3JpdGVfc2hpZnQoMSw1KSxQLndyaXRlX3NoaWZ0KDEsMCkpO3ZhciBMPXkudGludHx8MDtpZihMPjA/TCo9MzI3Njc6TDwwJiYoTCo9MzI3NjgpLFAud3JpdGVfc2hpZnQoMixMKSx5LnJnYiYmbnVsbD09eS50aGVtZSl7dmFy'@;
put 'IFE9eS5yZ2J8fCJGRkZGRkYiOyJudW1iZXIiPT10eXBlb2YgUSYmKFE9KCIwMDAwMDAiK1EudG9TdHJpbmcoMTYpKS5zbGljZSgtNikpLFAud3JpdGVfc2hpZnQoMSxwYXJzZUludChRLnNsaWNlKDAsMiksMTYpKSxQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUS5zbGljZSgyLDQpLDE2KSks'@;
put 'UC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFEuc2xpY2UoNCw2KSwxNikpLFAud3JpdGVfc2hpZnQoMSwyNTUpfWVsc2UgUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFB9ZnVuY3Rpb24gZjQoeSl7dmFyIFA9eS5yZWFkX3No'@;
put 'aWZ0KDEpO3JldHVybiB5LmwrKyx7ZkJvbGQ6MSZQLGZJdGFsaWM6MiZQLGZVbmRlcmxpbmU6NCZQLGZTdHJpa2VvdXQ6OCZQLGZPdXRsaW5lOjE2JlAsZlNoYWRvdzozMiZQLGZDb25kZW5zZTo2NCZQLGZFeHRlbmQ6MTI4JlB9fWZ1bmN0aW9uIHA0KHksUCl7dmFyIFE9eS5yZWFkX3NoaWZ0'@;
put 'KDQpO3N3aXRjaChRKXtjYXNlIDA6cmV0dXJuIiI7Y2FzZSA0Mjk0OTY3Mjk1OmNhc2UgNDI5NDk2NzI5NDpyZXR1cm57MjoiQklUTUFQIiwzOiJNRVRBRklMRVBJQ1QiLDg6IkRJQiIsMTQ6IkVOSE1FVEFGSUxFIn1beS5yZWFkX3NoaWZ0KDQpXXx8IiJ9aWYoUT40MDApdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnN1cHBvcnRlZCBDbGlwYm9hcmQ6ICIrUS50b1N0cmluZygxNikpO3JldHVybiB5LmwtPTQseS5yZWFkX3NoaWZ0KDAsMT09UD8ibHBzdHIiOiJscHdzdHIiKX12YXIgdTM9MixNYT0zLEhjPTEyLGFtPTgxLHQ5PVs4MCxhbV0sXzQ9ezE6e246IkNvZGVQYWdlIix0OnUzfSwyOntu'@;
put 'OiJDYXRlZ29yeSIsdDo4MH0sMzp7bjoiUHJlc2VudGF0aW9uRm9ybWF0Iix0OjgwfSw0OntuOiJCeXRlQ291bnQiLHQ6TWF9LDU6e246IkxpbmVDb3VudCIsdDpNYX0sNjp7bjoiUGFyYWdyYXBoQ291bnQiLHQ6TWF9LDc6e246IlNsaWRlQ291bnQiLHQ6TWF9LDg6e246Ik5vdGVDb3VudCIs'@;
put 'dDpNYX0sOTp7bjoiSGlkZGVuQ291bnQiLHQ6TWF9LDEwOntuOiJNdWx0aW1lZGlhQ2xpcENvdW50Iix0Ok1hfSwxMTp7bjoiU2NhbGVDcm9wIix0OjExfSwxMjp7bjoiSGVhZGluZ1BhaXJzIix0OjQwOTZ8SGN9LDEzOntuOiJUaXRsZXNPZlBhcnRzIix0OjQxMjZ9LDE0OntuOiJNYW5hZ2Vy'@;
put 'Iix0OjgwfSwxNTp7bjoiQ29tcGFueSIsdDo4MH0sMTY6e246IkxpbmtzVXBUb0RhdGUiLHQ6MTF9LDE3OntuOiJDaGFyYWN0ZXJDb3VudCIsdDpNYX0sMTk6e246IlNoYXJlZERvYyIsdDoxMX0sMjI6e246Ikh5cGVybGlua3NDaGFuZ2VkIix0OjExfSwyMzp7bjoiQXBwVmVyc2lvbiIsdDpN'@;
put 'YSxwOiJ2ZXJzaW9uIn0sMjQ6e246IkRpZ1NpZyIsdDo2NX0sMjY6e246IkNvbnRlbnRUeXBlIix0OjgwfSwyNzp7bjoiQ29udGVudFN0YXR1cyIsdDo4MH0sMjg6e246Ikxhbmd1YWdlIix0OjgwfSwyOTp7bjoiVmVyc2lvbiIsdDo4MH0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIs'@;
put 'dDoxOX0sMjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LHdyPXsxOntuOiJDb2RlUGFnZSIsdDp1M30sMjp7bjoiVGl0bGUiLHQ6ODB9LDM6e246IlN1YmplY3QiLHQ6ODB9LDQ6e246IkF1dGhvciIsdDo4MH0sNTp7bjoiS2V5d29yZHMiLHQ6ODB9LDY6e246'@;
put 'IkNvbW1lbnRzIix0OjgwfSw3OntuOiJUZW1wbGF0ZSIsdDo4MH0sODp7bjoiTGFzdEF1dGhvciIsdDo4MH0sOTp7bjoiUmV2TnVtYmVyIix0OjgwfSwxMDp7bjoiRWRpdFRpbWUiLHQ6NjR9LDExOntuOiJMYXN0UHJpbnRlZCIsdDo2NH0sMTI6e246IkNyZWF0ZWREYXRlIix0OjY0fSwxMzp7'@;
put 'bjoiTW9kaWZpZWREYXRlIix0OjY0fSwxNDp7bjoiUGFnZUNvdW50Iix0Ok1hfSwxNTp7bjoiV29yZENvdW50Iix0Ok1hfSwxNjp7bjoiQ2hhckNvdW50Iix0Ok1hfSwxNzp7bjoiVGh1bWJuYWlsIix0OjcxfSwxODp7bjoiQXBwbGljYXRpb24iLHQ6ODB9LDE5OntuOiJEb2NTZWN1cml0eSIs'@;
put 'dDpNYX0sMjU1Ont9LDIxNDc0ODM2NDg6e246IkxvY2FsZSIsdDoxOX0sMjE0NzQ4MzY1MTp7bjoiQmVoYXZpb3IiLHQ6MTl9LDE5MTkwNTQ0MzQ6e319LGI0PVBlKF80LCJuIikseTQ9UGUod3IsIm4iKSxsbT17MToiVVMiLDI6IkNBIiwzOiIiLDc6IlJVIiwyMDoiRUciLDMwOiJHUiIsMzE6'@;
put 'Ik5MIiwzMjoiQkUiLDMzOiJGUiIsMzQ6IkVTIiwzNjoiSFUiLDM5OiJJVCIsNDE6IkNIIiw0MzoiQVQiLDQ0OiJHQiIsNDU6IkRLIiw0NjoiU0UiLDQ3OiJOTyIsNDg6IlBMIiw0OToiREUiLDUyOiJNWCIsNTU6IkJSIiw2MToiQVUiLDY0OiJOWiIsNjY6IlRIIiw4MToiSlAiLDgyOiJLUiIs'@;
put 'ODQ6IlZOIiw4NjoiQ04iLDkwOiJUUiIsMTA1OiJKUyIsMjEzOiJEWiIsMjE2OiJNQSIsMjE4OiJMWSIsMzUxOiJQVCIsMzU0OiJJUyIsMzU4OiJGSSIsNDIwOiJDWiIsODg2OiJUVyIsOTYxOiJMQiIsOTYyOiJKTyIsOTYzOiJTWSIsOTY0OiJJUSIsOTY1OiJLVyIsOTY2OiJTQSIsOTcxOiJB'@;
put 'RSIsOTcyOiJJTCIsOTc0OiJRQSIsOTgxOiJJUiIsNjU1MzU6IlVTIn0sdmk9W251bGwsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1Ry'@;
put 'ZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdO2Z1bmN0aW9uIHc0KHkpe3JldHVybiB5Lm1hcChmdW5jdGlvbihQKXtyZXR1cm5bUD4+MTYm'@;
put 'MjU1LFA+PjgmMjU1LDI1NSZQXX0pfXZhciBoMz13NChbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsODM4ODYwOCwzMjc2OCwxMjgsODQyMTM3'@;
put 'Niw4Mzg4NzM2LDMyODk2LDEyNjMyMjU2LDg0MjE1MDQsMTAwNjY0MzEsMTAwNDAxNjYsMTY3NzcxNjQsMTM0MzQ4NzksNjY4NDc3NCwxNjc0NDU3NiwyNjMxNiwxMzQyMTgyMywxMjgsMTY3MTE5MzUsMTY3NzY5NjAsNjU1MzUsODM4ODczNiw4Mzg4NjA4LDMyODk2LDI1NSw1MjQ3OSwxMzQz'@;
put 'NDg3OSwxMzQzNDgyOCwxNjc3NzExMywxMDA3OTQ4NywxNjc1MTA1MiwxMzQwODc2NywxNjc2NDA1NywzMzY4NzAzLDMzOTQ3NjQsMTAwNzkyMzIsMTY3NjM5MDQsMTY3NTA4NDgsMTY3Mzc3OTIsNjcxMDkzNyw5ODY4OTUwLDEzMTU4LDMzODE2MDYsMTMwNTYsMzM1NTM5MiwxMDA0MDA2NCwx'@;
put 'MDA0MDE2NiwzMzU1NTQ1LDMzNTU0NDMsMCwxNjc3NzIxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSksQ3I9b24oaDMpLE5hPXc0KFsxMjYzMjI1Niw5ODY4OTUwLDg0MjE1MDQsNjcxMDg4NiwzMzU1NDQzLDE2NzExNjgwLDMyNzY4LDEzMzY5NDk3LDEyOCwzMzk0NTYwLDI2'@;
put 'MzY3LDEwMDI3MjEyLDEwMDUzMTcxLDEyOCwzMjc2OCw4Mzg4NjA4LDMyODk2LDgzODg3MzYsODQyMTM3NiwxMzYzMTQ4OCwxNDUzOTk5NCwxMzA2ODg1MCwxMzkyNDM1Miw5OTY3NDk2LDkxNzUyNjcsOTE5NTAwOCwzNjgzNTM3LDEwNjkyNTgsODg4MDg5OSw3NDk0NjQsMjg5MzQ3NiwxMTc0'@;
put 'NTczMCwzNzUwMjAxLDE1NTU5NTAzLDE4Mzc5NDEsMTIwODQzNTksNzYzMjI1MCw3MzYzMzI4LDk1MTQ1ODgsODI4ODYxNywzMDM2ODE0LDExMTg0ODEwXSksUW89ezA6IiNOVUxMISIsNzoiI0RJVi8wISIsMTU6IiNWQUxVRSEiLDIzOiIjUkVGISIsMjk6IiNOQU1FPyIsMzY6IiNOVU0hIiw0'@;
put 'MjoiI04vQSIsNDM6IiNHRVRUSU5HX0RBVEEiLDI1NToiI1dURj8ifSxLYT1BZShRbyksUmw9eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1l'@;
put 'eGNlbC5iaW5JbmRleFdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5pbnRsbWFjcm9zaGVldCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhNcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXBy'@;
put 'b3BlcnRpZXMreG1sIjoiY29yZXByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbCI6ImN1c3Rwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1w'@;
put 'cm9wZXJ0aWVzK3htbCI6ImV4dHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbVhtbFByb3BlcnRpZXMreG1sIjoiY3VzdG9teG1scHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3By'@;
put 'ZWFkc2hlZXRtbC5jdXN0b21Qcm9wZXJ0eSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIjoicGl2b3Rz'@;
put 'IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJjaGFydG9ianMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0Y29sb3JzdHlsZSt4bWwiOiJjaGFydGNvbG9ycyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1v'@;
put 'ZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJjaGFydHN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRleCt4bWwiOiJjaGFydGV4cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jYWxjQ2hhaW4iOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt'@;
put 'YXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY0NoYWluK3htbCI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5wcmludGVyU2V0dGluZ3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1z'@;
put 'LW9mZmljZS5hY3RpdmVYIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmF0dGFjaGVkVG9vbGJhcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIjoiY29u'@;
put 'bnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9y'@;
put 'bWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiOiJsaW5rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldE1ldGFkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVl'@;
put 'dG1sLnNoZWV0TWV0YWRhdGEreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVSZWNvcmRzIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24v'@;
put 'dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jk'@;
put 'cyt4bWwiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucXVlcnlUYWJsZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5xdWVyeVRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92'@;
put 'bmQubXMtZXhjZWwudXNlck5hbWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkhlYWRlcnMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uTG9nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uSGVhZGVycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25Mb2creG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0'@;
put 'cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnVzZXJOYW1lcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlU2luZ2xlQ2VsbHMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwu'@;
put 'dGFibGVTaW5nbGVDZWxscyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlciI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlcit4bWwiOiJUT0RPIiwiYXBw'@;
put 'bGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud3NTb3J0TWFwIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZSI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1v'@;
put 'ZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6InRhYmxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWwiOiJ0aGVtZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhl'@;
put 'bWVPdmVycmlkZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmVDYWNoZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IjoidmJh'@;
put 'IiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0U2lnbmF0dXJlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2Uudm9sYXRpbGVEZXBlbmRlbmNpZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVh'@;
put 'ZHNoZWV0bWwudm9sYXRpbGVEZXBlbmRlbmNpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb250cm9scHJvcGVydGllcyt4bWwiOiJjdHJscHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSI6ImRh'@;
put 'dGFtb2RlbHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuU3VydmV5K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZyt4bWwiOiJkcmF3aW5ncyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5kcmF3aW5nbWwuY2hhcnRzaGFwZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUNvbG9ycyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv'@;
put 'Y3VtZW50LmRyYXdpbmdtbC5kaWFncmFtRGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtTGF5b3V0K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j'@;
put 'dW1lbnQuZHJhd2luZ21sLmRpYWdyYW1TdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwi'@;
put 'OiJyZWxzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm9sZU9iamVjdCI6IlRPRE8iLCJpbWFnZS9wbmciOiJUT0RPIixzaGVldDoianMifSxJZD1mdW5jdGlvbigpe3ZhciB5PXt3b3JrYm9va3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIix4bHNtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5h'@;
put 'YmxlZC5tYWluIix4bGFtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYWRkaW4ubWFjcm9FbmFibGVkLm1haW4reG1sIix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZS5tYWluK3htbCJ9LHN0cnM6e3hs'@;
put 'c3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoYXJlZFN0cmluZ3MreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyJ9LGNvbW1lbnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3Bl'@;
put 'bnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50cyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb21tZW50cyJ9LHNoZWV0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNo'@;
put 'ZWV0bWwud29ya3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndvcmtzaGVldCJ9LGNoYXJ0czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2hhcnRzaGVldCt4bWwiLHhsc2I6ImFwcGxp'@;
put 'Y2F0aW9uL3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0In0sZGlhbG9nczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZGlhbG9nc2hl'@;
put 'ZXQifSxtYWNyb3M6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQifSx0YWJsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z'@;
put 'cHJlYWRzaGVldG1sLnRhYmxlK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIn0scGl2b3RzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCIseGxzYjoiYXBwbGlj'@;
put 'YXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUifSxwaXZvdGNhY2hlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZURlZmluaXRpb24reG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhj'@;
put 'ZWwucGl2b3RDYWNoZURlZmluaXRpb24ifSxwaXZvdHJlY29yZHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90'@;
put 'Q2FjaGVSZWNvcmRzIn0sY29ubnM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbm5lY3Rpb25zIn0sbGlua3M6e3hsc3g6ImFw'@;
put 'cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmV4dGVybmFsTGluayt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5leHRlcm5hbExpbmsifSxzdHlsZXM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0'@;
put 'cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zdHlsZXMifX07cmV0dXJuIGx0KHkpLmZvckVhY2goZnVuY3Rpb24oUCl7WyJ4bHNtIiwieGxhbSJdLmZvckVhY2goZnVuY3Rpb24oTCl7eVtQXVtMXXx8KHlb'@;
put 'UF1bTF09eVtQXS54bHN4KX0pfSksbHQoeSkuZm9yRWFjaChmdW5jdGlvbihQKXtsdCh5W1BdKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe1JsW3lbUF1bTF1dPVB9KX0pLHl9KCksTmM9ZnVuY3Rpb24gVGUoeSl7Zm9yKHZhciBQPVtdLEw9bHQoeSksUT0wO1EhPT1MLmxlbmd0aDsrK1EpbnVsbD09'@;
put 'UFt5W0xbUV1dXSYmKFBbeVtMW1FdXV09W10pLFBbeVtMW1FdXV0ucHVzaChMW1FdKTtyZXR1cm4gUH0oUmwpO2lzLkNUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiO3ZhciBmMz1TcigiVHlwZXMiLG51bGwse3htbG5zOmlz'@;
put 'LkNULCJ4bWxuczp4c2QiOmlzLnhzZCwieG1sbnM6eHNpIjppcy54c2l9KSxuOT1bWyJ4bWwiLCJhcHBsaWNhdGlvbi94bWwiXSxbImJpbiIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iXSxbInZtbCIsImFwcGxpY2F0aW9uL3ZuZC5v'@;
put 'cGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIl0sWyJkYXRhIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiXSxbImJtcCIsImltYWdlL2JtcCJdLFsicG5nIiwiaW1hZ2UvcG5nIl0sWyJnaWYiLCJpbWFnZS9n'@;
put 'aWYiXSxbImVtZiIsImltYWdlL3gtZW1mIl0sWyJ3bWYiLCJpbWFnZS94LXdtZiJdLFsianBnIiwiaW1hZ2UvanBlZyJdLFsianBlZyIsImltYWdlL2pwZWciXSxbInRpZiIsImltYWdlL3RpZmYiXSxbInRpZmYiLCJpbWFnZS90aWZmIl0sWyJwZGYiLCJhcHBsaWNhdGlvbi9wZGYiXSxbInJl'@;
put 'bHMiLE5jLnJlbHNbMF1dXS5tYXAoZnVuY3Rpb24oeSl7cmV0dXJuIFNyKCJEZWZhdWx0IixudWxsLHtFeHRlbnNpb246eVswXSxDb250ZW50VHlwZTp5WzFdfSl9KSxIaT17V0I6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9u'@;
put 'c2hpcHMvb2ZmaWNlRG9jdW1lbnQiLFNIRUVUOiJodHRwOi8vc2hlZXRqcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixITElOSzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3Vt'@;
put 'ZW50LzIwMDYvcmVsYXRpb25zaGlwcy9oeXBlcmxpbmsiLFZNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixYUEFUSDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj'@;
put 'ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmtQYXRoIixYTUlTUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsRXh0ZXJuYWxMaW5rUGF0aC94bFBhdGhNaXNzaW5nIixYTElOSzoiaHR0cDovL3NjaGVtYXMu'@;
put 'b3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlcm5hbExpbmsiLENYTUw6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sIixDWE1MUDoiaHR0cDov'@;
put 'L3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWxQcm9wcyIsVkJBOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMvdmJhUHJvamVjdCJ9O2Z1bmN0aW9uIEJpKHkp'@;
put 'e3ZhciBQPXkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4geS5zbGljZSgwLFArMSkrIl9yZWxzLyIreS5zbGljZShQKzEpKyIucmVscyJ9ZnVuY3Rpb24gRG8oeSxQKXt2YXIgTD17IiFpZCI6e319O2lmKCF5KXJldHVybiBMOyIvIiE9PVAuY2hhckF0KDApJiYoUD0iLyIrUCk7dmFyIFE9e307'@;
put 'cmV0dXJuKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIGdlPWxuKHJlKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1nZVswXSl7dmFyIF9lPXt9O19lLlR5cGU9Z2UuVHlwZSxfZS5UYXJnZXQ9Z2UuVGFyZ2V0LF9lLklkPWdlLklkLF9lLlRhcmdldE1vZGU9Z2UuVGFy'@;
put 'Z2V0TW9kZTt2YXIgdmU9IkV4dGVybmFsIj09PWdlLlRhcmdldE1vZGU/Z2UuVGFyZ2V0OnNuKGdlLlRhcmdldCxQKTtMW3ZlXT1fZSxRW2dlLklkXT1fZX19KSxMWyIhaWQiXT1RLEx9aXMuUkVMUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxh'@;
put 'dGlvbnNoaXBzIjt2YXIgdWE9U3IoIlJlbGF0aW9uc2hpcHMiLG51bGwse3htbG5zOmlzLlJFTFN9KTtmdW5jdGlvbiBYYSh5KXt2YXIgUD1bQm4sdWFdO3JldHVybiBsdCh5WyIhaWQiXSkuZm9yRWFjaChmdW5jdGlvbihMKXtQW1AubGVuZ3RoXT1TcigiUmVsYXRpb25zaGlwIixudWxsLHlb'@;
put 'IiFpZCJdW0xdKX0pLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9SZWxhdGlvbnNoaXBzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfXZhciBJMT1bSGkuSExJTkssSGkuWFBBVEgsSGkuWE1JU1NdO2Z1bmN0aW9uIHpvKHksUCxMLFEscmUsZ2Upe2lmKHJl'@;
put 'fHwocmU9e30pLHlbIiFpZCJdfHwoeVsiIWlkIl09e30pLFA8MClmb3IoUD0xO3lbIiFpZCJdWyJySWQiK1BdOysrUCk7aWYocmUuSWQ9InJJZCIrUCxyZS5UeXBlPVEscmUuVGFyZ2V0PUwsZ2U/cmUuVGFyZ2V0TW9kZT1nZTpJMS5pbmRleE9mKHJlLlR5cGUpPi0xJiYocmUuVGFyZ2V0TW9k'@;
put 'ZT0iRXh0ZXJuYWwiKSx5WyIhaWQiXVtyZS5JZF0pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmV3cml0ZSBySWQgIitQKTtyZXR1cm4geVsiIWlkIl1bcmUuSWRdPXJlLHlbKCIvIityZS5UYXJnZXQpLnJlcGxhY2UoIi8vIiwiLyIpXT1yZSxQfXZhciBUdT0iYXBwbGljYXRpb24vdm5kLm9h'@;
put 'c2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCI7ZnVuY3Rpb24gTDEoeSxQLEwpe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJyt5KyciPlxuJywnICAgIDxyZGY6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8x'@;
put 'LjIvbWV0YS8nKyhMfHwib2RmIikrIiMiK1ArJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfWZ1bmN0aW9uIFZvKHksUCl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK3krJyI+XG4nLCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD0i'@;
put 'aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhL3BrZyMiIHJkZjpyZXNvdXJjZT0iJytQKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX12YXIgUzQ9ZnVuY3Rpb24oKXt2YXIgeT0nPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5z'@;
put 'Om9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiB4bWxuczptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHht'@;
put 'bG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvZmZpY2U6dmVyc2lvbj0iMS4yIj48b2ZmaWNlOm1ldGE+PG1ldGE6Z2VuZXJhdG9yPlNoZWV0SlMgJytNLnZlcnNpb24rIjwvbWV0YTpnZW5lcmF0b3I+PC9vZmZpY2U6bWV0YT48L29mZmljZTpkb2N1bWVudC1tZXRh'@;
put 'PiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHl9fSgpLE9sPVtbImNwOmNhdGVnb3J5IiwiQ2F0ZWdvcnkiXSxbImNwOmNvbnRlbnRTdGF0dXMiLCJDb250ZW50U3RhdHVzIl0sWyJjcDprZXl3b3JkcyIsIktleXdvcmRzIl0sWyJjcDpsYXN0TW9kaWZpZWRCeSIsIkxhc3RBdXRob3IiXSxb'@;
put 'ImNwOmxhc3RQcmludGVkIiwiTGFzdFByaW50ZWQiXSxbImNwOnJldmlzaW9uIiwiUmV2TnVtYmVyIl0sWyJjcDp2ZXJzaW9uIiwiVmVyc2lvbiJdLFsiZGM6Y3JlYXRvciIsIkF1dGhvciJdLFsiZGM6ZGVzY3JpcHRpb24iLCJDb21tZW50cyJdLFsiZGM6aWRlbnRpZmllciIsIklkZW50aWZp'@;
put 'ZXIiXSxbImRjOmxhbmd1YWdlIiwiTGFuZ3VhZ2UiXSxbImRjOnN1YmplY3QiLCJTdWJqZWN0Il0sWyJkYzp0aXRsZSIsIlRpdGxlIl0sWyJkY3Rlcm1zOmNyZWF0ZWQiLCJDcmVhdGVkRGF0ZSIsImRhdGUiXSxbImRjdGVybXM6bW9kaWZpZWQiLCJNb2RpZmllZERhdGUiLCJkYXRlIl1dO2lz'@;
put 'LkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixIaS5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0'@;
put 'YWRhdGEvY29yZS1wcm9wZXJ0aWVzIjt2YXIgSmE9ZnVuY3Rpb24oKXtmb3IodmFyIHk9bmV3IEFycmF5KE9sLmxlbmd0aCksUD0wO1A8T2wubGVuZ3RoOysrUCl7dmFyIEw9T2xbUF0sUT0iKD86IitMWzBdLnNsaWNlKDAsTFswXS5pbmRleE9mKCI6IikpKyI6KSIrTFswXS5zbGljZShMWzBd'@;
put 'LmluZGV4T2YoIjoiKSsxKTt5W1BdPW5ldyBSZWdFeHAoIjwiK1ErIltePl0qPihbXFxzXFxTXSo/KTwvIitRKyI+Iil9cmV0dXJuIHl9KCk7ZnVuY3Rpb24gTzIoeSl7dmFyIFA9e307eT1QaSh5KTtmb3IodmFyIEw9MDtMPE9sLmxlbmd0aDsrK0wpe3ZhciBRPU9sW0xdLHJlPXkubWF0Y2go'@;
put 'SmFbTF0pO251bGwhPXJlJiZyZS5sZW5ndGg+MCYmKFBbUVsxXV09eHIocmVbMV0pKSwiZGF0ZSI9PT1RWzJdJiZQW1FbMV1dJiYoUFtRWzFdXT1IdChQW1FbMV1dKSl9cmV0dXJuIFB9dmFyIFAyPVNyKCJjcDpjb3JlUHJvcGVydGllcyIsbnVsbCx7InhtbG5zOmNwIjppcy5DT1JFX1BST1BT'@;
put 'LCJ4bWxuczpkYyI6aXMuZGMsInhtbG5zOmRjdGVybXMiOmlzLmRjdGVybXMsInhtbG5zOmRjbWl0eXBlIjppcy5kY21pdHlwZSwieG1sbnM6eHNpIjppcy54c2l9KTtmdW5jdGlvbiBodSh5LFAsTCxRLHJlKXtudWxsIT1yZVt5XXx8bnVsbD09UHx8IiI9PT1QfHwocmVbeV09UCxQPUhyKFAp'@;
put 'LFFbUS5sZW5ndGhdPUw/U3IoeSxQLEwpOmZzKHksUCkpfXZhciBSMT1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5Iiwi'@;
put 'RG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0Rh'@;
put 'dGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHUwKHksUCxMLFEpe3ZhciByZT1bXTtpZigic3RyaW5n'@;
put 'Ij09dHlwZW9mIHkpcmU9ZTAoeSxRKTtlbHNlIGZvcih2YXIgZ2U9MDtnZTx5Lmxlbmd0aDsrK2dlKXJlPXJlLmNvbmNhdCh5W2dlXS5tYXAoZnVuY3Rpb24oQmUpe3JldHVybnt2OkJlfX0pKTt2YXIgX2U9InN0cmluZyI9PXR5cGVvZiBQP2UwKFAsUSkubWFwKGZ1bmN0aW9uKEJlKXtyZXR1'@;
put 'cm4gQmUudn0pOlAsdmU9MCxTZT0wO2lmKF9lLmxlbmd0aD4wKWZvcih2YXIgSGU9MDtIZSE9PXJlLmxlbmd0aDtIZSs9Mil7c3dpdGNoKFNlPStyZVtIZSsxXS52LHJlW0hlXS52KXtjYXNlIldvcmtzaGVldHMiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjpjYXNlIlx1MDQxYlx1MDQzOFx1'@;
put 'MDQ0MVx1MDQ0Mlx1MDQ0YiI6Y2FzZSJcdTA2MjNcdTA2NDhcdTA2MzFcdTA2MjdcdTA2NDIgXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ1XHUwNjQ0IjpjYXNlIlx1MzBlZlx1MzBmY1x1MzBhZlx1MzBiN1x1MzBmY1x1MzBjOCI6Y2FzZSJcdTA1ZDJcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZTBc'@;
put 'dTA1ZDVcdTA1ZWEgXHUwNWUyXHUwNWQxXHUwNWQ1XHUwNWQzXHUwNWQ0IjpjYXNlIkFyYmVpdHNibFx4ZTR0dGVyIjpjYXNlIlx4YzdhbFx1MDEzMVx1MDE1Zm1hIFNheWZhbGFyXHUwMTMxIjpjYXNlIkZldWlsbGVzIGRlIGNhbGN1bCI6Y2FzZSJGb2dsaSBkaSBsYXZvcm8iOmNhc2UiRm9s'@;
put 'aGFzIGRlIGNceGUxbGN1bG8iOmNhc2UiUGxhbmlsaGFzIjpjYXNlIlJlZ25lYXJrIjpjYXNlIkhvamFzIGRlIGNceGUxbGN1bG8iOmNhc2UiV2Vya2JsYWRlbiI6TC5Xb3Jrc2hlZXRzPVNlLEwuU2hlZXROYW1lcz1fZS5zbGljZSh2ZSx2ZStTZSk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMi'@;
put 'OmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpMLk5hbWVkUmFuZ2VzPVNlLEwuRGVmaW5lZE5hbWVzPV9lLnNsaWNlKHZlLHZl'@;
put 'K1NlKTticmVhaztjYXNlIkNoYXJ0cyI6Y2FzZSJEaWFncmFtbWUiOkwuQ2hhcnRzaGVldHM9U2UsTC5DaGFydE5hbWVzPV9lLnNsaWNlKHZlLHZlK1NlKX12ZSs9U2V9fWlzLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYv'@;
put 'ZXh0ZW5kZWQtcHJvcGVydGllcyIsSGkuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiO3ZhciBnMz1TcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6aXMuRVhU'@;
put 'X1BST1BTLCJ4bWxuczp2dCI6aXMudnR9KTtpcy5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9jdXN0b20tcHJvcGVydGllcyIsSGkuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyI7dmFyIEF3PS88W14+XSs+W148XSovZyx1bT1TcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6aXMuQ1VTVF9QUk9QUywieG1sbnM6dnQiOmlzLnZ0fSk7dmFyIEYyPXtUaXRsZToiVGl0bGUiLFN1Ympl'@;
put 'Y3Q6IlN1YmplY3QiLEF1dGhvcjoiQXV0aG9yIixLZXl3b3JkczoiS2V5d29yZHMiLENvbW1lbnRzOiJEZXNjcmlwdGlvbiIsTGFzdEF1dGhvcjoiTGFzdEF1dGhvciIsUmV2TnVtYmVyOiJSZXZpc2lvbiIsQXBwbGljYXRpb246IkFwcE5hbWUiLExhc3RQcmludGVkOiJMYXN0UHJpbnRlZCIs'@;
put 'Q3JlYXRlZERhdGU6IkNyZWF0ZWQiLE1vZGlmaWVkRGF0ZToiTGFzdFNhdmVkIixDYXRlZ29yeToiQ2F0ZWdvcnkiLE1hbmFnZXI6Ik1hbmFnZXIiLENvbXBhbnk6IkNvbXBhbnkiLEFwcFZlcnNpb246IlZlcnNpb24iLENvbnRlbnRTdGF0dXM6IkNvbnRlbnRTdGF0dXMiLElkZW50aWZpZXI6'@;
put 'IklkZW50aWZpZXIiLExhbmd1YWdlOiJMYW5ndWFnZSJ9LEgyPWJlKEYyKTtmdW5jdGlvbiBSZCh5LFAsTCl7eVtQPUgyW1BdfHxQXT1MfWZ1bmN0aW9uIFNjKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gbmV3IERhdGUoMWUzKihMLzFlNypNYXRo'@;
put 'LnBvdygyLDMyKStQLzFlNy0xMTY0NDQ3MzYwMCkpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC4wMDAvLCIiKX1mdW5jdGlvbiBPZCh5LFAsTCl7dmFyIFE9eS5sLHJlPXkucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpO2lmKEwpZm9yKDt5LmwtUSYzOykrK3kubDtyZXR1cm4gcmV9ZnVuY3Rp'@;
put 'b24gUDEoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gTCYmKHkubCs9NC0oUS5sZW5ndGgrMSYzKSYzKSxRfWZ1bmN0aW9uIHFoKHksUCxMKXtyZXR1cm4gMzE9PT1QP1AxKHkpOk9kKHksMCxMKX1mdW5jdGlvbiBRYyh5LFAsTCl7cmV0dXJuIHFoKHksUCwh'@;
put 'MT09PUw/MDo0KX1mdW5jdGlvbiBzOSh5KXt2YXIgUD15LmwsTD1FNCh5LGFtKTtyZXR1cm4gMD09eVt5LmxdJiYwPT15W3kubCsxXSYmeS5sLVAmMiYmKHkubCs9MiksW0wsRTQoeSxNYSldfWZ1bmN0aW9uIGRtKHksUCl7Zm9yKHZhciBMPXkucmVhZF9zaGlmdCg0KSxRPXt9LHJlPTA7cmUh'@;
put 'PUw7KytyZSl7dmFyIGdlPXkucmVhZF9zaGlmdCg0KSxfZT15LnJlYWRfc2hpZnQoNCk7UVtnZV09eS5yZWFkX3NoaWZ0KF9lLDEyMDA9PT1QPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UodiwiIikucmVwbGFjZShwLCIhIiksMTIwMD09PVAmJl9lJTImJih5LmwrPTIpfXJldHVybiAzJnku'@;
put 'bCYmKHkubD15Lmw+PjM8PDIpLFF9ZnVuY3Rpb24gaG0oeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5zbGljZSh5LmwseS5sK1ApO3JldHVybiB5LmwrPVAsKDMmUCk+MCYmKHkubCs9NC0oMyZQKSYzKSxMfWZ1bmN0aW9uIEU0KHksUCxMKXt2YXIgcmUsUT15LnJlYWRfc2hpZnQoMiks'@;
put 'Z2U9THx8e307aWYoeS5sKz0yLFAhPT1IYyYmUSE9PVAmJi0xPT09dDkuaW5kZXhPZihQKSYmKDQxMjYhPSg2NTUzNCZQKXx8NDEyNiE9KDY1NTM0JlEpKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHR5cGUgIitQKyIgc2F3ICIrUSk7c3dpdGNoKFA9PT1IYz9ROlApe2Nhc2UgMjpyZXR1'@;
put 'cm4gcmU9eS5yZWFkX3NoaWZ0KDIsImkiKSxnZS5yYXd8fCh5LmwrPTIpLHJlO2Nhc2UgMzpyZXR1cm4geS5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVybiAwIT09eS5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIHkucmVhZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVybiBPZCh5'@;
put 'LDAsNCkucmVwbGFjZSh2LCIiKTtjYXNlIDMxOnJldHVybiBQMSh5KTtjYXNlIDY0OnJldHVybiBTYyh5KTtjYXNlIDY1OnJldHVybiBobSh5KTtjYXNlIDcxOnJldHVybiBmdW5jdGlvbiBEdyh5KXt2YXIgUD17fTtyZXR1cm4gUC5TaXplPXkucmVhZF9zaGlmdCg0KSx5LmwrPVAuU2l6ZSsz'@;
put 'LShQLlNpemUtMSklNCxQfSh5KTtjYXNlIDgwOnJldHVybiBRYyh5LFEsIWdlLnJhdykucmVwbGFjZSh2LCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiB4NCh5LFApe2lmKCFQKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIp'@;
put 'O3JldHVybiBxaCh5LFAsMCl9KHksUSkucmVwbGFjZSh2LCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIGE5KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7UTxQLzI7KytRKUwucHVzaChzOSh5KSk7cmV0dXJuIEx9KHkpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0'@;
put 'dXJuIDQxMjc9PVE/ZnVuY3Rpb24gaTkoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdLFE9MDtRIT1QOysrUSl7dmFyIHJlPXkubDtMW1FdPXkucmVhZF9zaGlmdCgwLCJscHdzdHIiKS5yZXBsYWNlKHYsIiIpLHkubC1yZSYyJiYoeS5sKz0yKX1yZXR1cm4gTH0oeSk6ZnVuY3Rp'@;
put 'b24gbzkoeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdLFE9MDtRIT1QOysrUSlMW1FdPXkucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpLnJlcGxhY2UodiwiIik7cmV0dXJuIEx9KHkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25p'@;
put 'emVkIHR5cGUgIitQKyIgIitRKX19ZnVuY3Rpb24gbDkoeSxQKXt2YXIgTD1mcig0KSxRPWZyKDQpO3N3aXRjaChMLndyaXRlX3NoaWZ0KDQsODA9PXk/MzE6eSkseSl7Y2FzZSAzOlEud3JpdGVfc2hpZnQoLTQsUCk7YnJlYWs7Y2FzZSA1OihRPWZyKDgpKS53cml0ZV9zaGlmdCg4LFAsImYi'@;
put 'KTticmVhaztjYXNlIDExOlEud3JpdGVfc2hpZnQoNCxQPzE6MCk7YnJlYWs7Y2FzZSA2NDpRPWZ1bmN0aW9uIGljKHkpe3ZhciBMPSgic3RyaW5nIj09dHlwZW9mIHk/bmV3IERhdGUoRGF0ZS5wYXJzZSh5KSk6eSkuZ2V0VGltZSgpLzFlMysxMTY0NDQ3MzYwMCxRPUwlTWF0aC5wb3coMiwz'@;
put 'MikscmU9KEwtUSkvTWF0aC5wb3coMiwzMik7cmUqPTFlNzt2YXIgZ2U9KFEqPTFlNykvTWF0aC5wb3coMiwzMil8MDtnZT4wJiYoUSU9TWF0aC5wb3coMiwzMikscmUrPWdlKTt2YXIgX2U9ZnIoOCk7cmV0dXJuIF9lLndyaXRlX3NoaWZ0KDQsUSksX2Uud3JpdGVfc2hpZnQoNCxyZSksX2V9'@;
put 'KFApO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3IoKFE9ZnIoNCsyKihQLmxlbmd0aCsxKSsoUC5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxQLmxlbmd0aCsxKSxRLndyaXRlX3NoaWZ0KDAsUCwiZGJjcyIpO1EubCE9US5sZW5ndGg7KVEud3JpdGVfc2hpZnQoMSwwKTticmVhaztk'@;
put 'ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIreSsiICIrUCl9cmV0dXJuIFMoW0wsUV0pfWZ1bmN0aW9uIEYxKHksUCl7dmFyIEw9eS5sLFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXkucmVhZF9zaGlmdCg0KSxnZT1bXSxfZT0wLHZl'@;
put 'PTAsU2U9LTEsSGU9e307Zm9yKF9lPTA7X2UhPXJlOysrX2Upe3ZhciBCZT15LnJlYWRfc2hpZnQoNCksR2U9eS5yZWFkX3NoaWZ0KDQpO2dlW19lXT1bQmUsR2UrTF19Z2Uuc29ydChmdW5jdGlvbihrdCxUdCl7cmV0dXJuIGt0WzFdLVR0WzFdfSk7dmFyIG50PXt9O2ZvcihfZT0wO19lIT1y'@;
put 'ZTsrK19lKXtpZih5LmwhPT1nZVtfZV1bMV0pe3ZhciBkdD0hMDtpZihfZT4wJiZQKXN3aXRjaChQW2dlW19lLTFdWzBdXS50KXtjYXNlIDI6eS5sKzI9PT1nZVtfZV1bMV0mJih5LmwrPTIsZHQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OnkubDw9Z2VbX2VdWzFdJiYoeS5sPWdlW19l'@;
put 'XVsxXSxkdD0hMSl9aWYoKCFQfHwwPT1fZSkmJnkubDw9Z2VbX2VdWzFdJiYoZHQ9ITEseS5sPWdlW19lXVsxXSksZHQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIrZ2VbX2VdWzFdKyIgYXQgIit5LmwrIiA6IitfZSl9aWYoUCl7dmFyIEN0PVBbZ2Vb'@;
put 'X2VdWzBdXTtpZihudFtDdC5uXT1FNCh5LEN0LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PUN0LnAmJihudFtDdC5uXT1TdHJpbmcobnRbQ3Qubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmbnRbQ3Qubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFnZSI9PUN0Lm4pc3dpdGNoKG50W0N0'@;
put 'Lm5dKXtjYXNlIDA6bnRbQ3Qubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2Ug'@;
put 'MTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1OmoodmU9bnRbQ3Qubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIrbnRbQ3Qubl0pfX1lbHNlIGlmKDE9'@;
put 'PT1nZVtfZV1bMF0pe2lmKHZlPW50LkNvZGVQYWdlPUU0KHksdTMpLGoodmUpLC0xIT09U2Upe3ZhciBjdD15Lmw7eS5sPWdlW1NlXVsxXSxIZT1kbSh5LHZlKSx5Lmw9Y3R9fWVsc2UgaWYoMD09PWdlW19lXVswXSl7aWYoMD09PXZlKXtTZT1fZSx5Lmw9Z2VbX2UrMV1bMV07Y29udGludWV9'@;
put 'SGU9ZG0oeSx2ZSl9ZWxzZXt2YXIgRnQsYnQ9SGVbZ2VbX2VdWzBdXTtzd2l0Y2goeVt5LmxdKXtjYXNlIDY1OnkubCs9NCxGdD1obSh5KTticmVhaztjYXNlIDMwOmNhc2UgMzE6eS5sKz00LEZ0PVFjKHkseVt5LmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOnku'@;
put 'bCs9NCxGdD15LnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UgMTk6eS5sKz00LEZ0PXkucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6eS5sKz00LEZ0PXkucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTp5LmwrPTQsRnQ9U28oeSw0KTticmVhaztjYXNlIDY0OnkubCs9NCxG'@;
put 'dD1IdChTYyh5KSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK3lbeS5sXSl9bnRbYnRdPUZ0fX1yZXR1cm4geS5sPUwrUSxudH12YXIgZm09WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJfUElEX0hMSU5LUyIsIlN5c3Rl'@;
put 'bUlkZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIiwiTmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gSXcoeSl7c3dpdGNoKHR5cGVvZiB5KXtjYXNlImJvb2xlYW4iOnJldHVy'@;
put 'biAxMTtjYXNlIm51bWJlciI6cmV0dXJuKDB8eSk9PXk/Mzo1O2Nhc2Uic3RyaW5nIjpyZXR1cm4gMzE7Y2FzZSJvYmplY3QiOmlmKHkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBjOSh5LFAsTCl7dmFyIFE9ZnIoOCkscmU9W10sZ2U9W10sX2U9OCx2ZT0w'@;
put 'LFNlPWZyKDgpLEhlPWZyKDgpO2lmKFNlLndyaXRlX3NoaWZ0KDQsMiksU2Uud3JpdGVfc2hpZnQoNCwxMjAwKSxIZS53cml0ZV9zaGlmdCg0LDEpLGdlLnB1c2goU2UpLHJlLnB1c2goSGUpLF9lKz04K1NlLmxlbmd0aCwhUCl7KEhlPWZyKDgpKS53cml0ZV9zaGlmdCg0LDApLHJlLnVuc2hp'@;
put 'ZnQoSGUpO3ZhciBCZT1bZnIoNCldO2ZvcihCZVswXS53cml0ZV9zaGlmdCg0LHkubGVuZ3RoKSx2ZT0wO3ZlPHkubGVuZ3RoOysrdmUpe3ZhciBHZT15W3ZlXVswXTtmb3IoKFNlPWZyKDgrMiooR2UubGVuZ3RoKzEpKyhHZS5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCx2ZSsyKSxT'@;
put 'ZS53cml0ZV9zaGlmdCg0LEdlLmxlbmd0aCsxKSxTZS53cml0ZV9zaGlmdCgwLEdlLCJkYmNzIik7U2UubCE9U2UubGVuZ3RoOylTZS53cml0ZV9zaGlmdCgxLDApO0JlLnB1c2goU2UpfVNlPVMoQmUpLGdlLnVuc2hpZnQoU2UpLF9lKz04K1NlLmxlbmd0aH1mb3IodmU9MDt2ZTx5Lmxlbmd0'@;
put 'aDsrK3ZlKWlmKCghUHx8UFt5W3ZlXVswXV0pJiYhKGZtLmluZGV4T2YoeVt2ZV1bMF0pPi0xKSYmbnVsbCE9eVt2ZV1bMV0pe3ZhciBudD15W3ZlXVsxXSxkdD0wO2lmKFApe3ZhciBDdD1MW2R0PStQW3lbdmVdWzBdXV07aWYoInZlcnNpb24iPT1DdC5wJiYic3RyaW5nIj09dHlwZW9mIG50'@;
put 'KXt2YXIgY3Q9bnQuc3BsaXQoIi4iKTtudD0oK2N0WzBdPDwxNikrKCtjdFsxXXx8MCl9U2U9bDkoQ3QudCxudCl9ZWxzZXt2YXIgYnQ9SXcobnQpOy0xPT1idCYmKGJ0PTMxLG50PVN0cmluZyhudCkpLFNlPWw5KGJ0LG50KX1nZS5wdXNoKFNlKSwoSGU9ZnIoOCkpLndyaXRlX3NoaWZ0KDQs'@;
put 'UD9kdDoyK3ZlKSxyZS5wdXNoKEhlKSxfZSs9OCtTZS5sZW5ndGh9dmFyIEZ0PTgqKGdlLmxlbmd0aCsxKTtmb3IodmU9MDt2ZTxnZS5sZW5ndGg7Kyt2ZSlyZVt2ZV0ud3JpdGVfc2hpZnQoNCxGdCksRnQrPWdlW3ZlXS5sZW5ndGg7cmV0dXJuIFEud3JpdGVfc2hpZnQoNCxfZSksUS53cml0'@;
put 'ZV9zaGlmdCg0LGdlLmxlbmd0aCksUyhbUV0uY29uY2F0KHJlKS5jb25jYXQoZ2UpKX1mdW5jdGlvbiB1OSh5LFAsTCl7dmFyIFE9eS5jb250ZW50O2lmKCFRKXJldHVybnt9O29sKFEsMCk7dmFyIHJlLGdlLF9lLHZlLFNlPTA7US5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxRLnJlYWRf'@;
put 'c2hpZnQoMik7dmFyIEhlPVEucmVhZF9zaGlmdCg0KSxCZT1RLnJlYWRfc2hpZnQoMTYpO2lmKEJlIT09amUudXRpbHMuY29uc3RzLkhFQURFUl9DTFNJRCYmQmUhPT1MKXRocm93IG5ldyBFcnJvcigiQmFkIFByb3BlcnR5U2V0IENMU0lEICIrQmUpO2lmKDEhPT0ocmU9US5yZWFkX3NoaWZ0'@;
put 'KDQpKSYmMiE9PXJlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICNTZXRzOiAiK3JlKTtpZihnZT1RLnJlYWRfc2hpZnQoMTYpLHZlPVEucmVhZF9zaGlmdCg0KSwxPT09cmUmJnZlIT09US5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK3ZlKyIgIT09ICIrUS5s'@;
put 'KTsyPT09cmUmJihfZT1RLnJlYWRfc2hpZnQoMTYpLFNlPVEucmVhZF9zaGlmdCg0KSk7dmFyIEN0LEdlPUYxKFEsUCksbnQ9e1N5c3RlbUlkZW50aWZpZXI6SGV9O2Zvcih2YXIgZHQgaW4gR2UpbnRbZHRdPUdlW2R0XTtpZihudC5GTVRJRD1nZSwxPT09cmUpcmV0dXJuIG50O2lmKFNlLVEu'@;
put 'bD09MiYmKFEubCs9MiksUS5sIT09U2UpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2ggMjogIitRLmwrIiAhPT0gIitTZSk7dHJ5e0N0PUYxKFEsbnVsbCl9Y2F0Y2h7fWZvcihkdCBpbiBDdCludFtkdF09Q3RbZHRdO3JldHVybiBudC5GTVRJRD1bZ2UsX2VdLG50fWZ1bmN0aW9u'@;
put 'IHdpKHksUCxMLFEscmUsZ2Upe3ZhciBfZT1mcihyZT82ODo0OCksdmU9W19lXTtfZS53cml0ZV9zaGlmdCgyLDY1NTM0KSxfZS53cml0ZV9zaGlmdCgyLDApLF9lLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxfZS53cml0ZV9zaGlmdCgxNixqZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lE'@;
put 'LCJoZXgiKSxfZS53cml0ZV9zaGlmdCg0LHJlPzI6MSksX2Uud3JpdGVfc2hpZnQoMTYsUCwiaGV4IiksX2Uud3JpdGVfc2hpZnQoNCxyZT82ODo0OCk7dmFyIFNlPWM5KHksTCxRKTtpZih2ZS5wdXNoKFNlKSxyZSl7dmFyIEhlPWM5KHJlLG51bGwsbnVsbCk7X2Uud3JpdGVfc2hpZnQoMTYs'@;
put 'Z2UsImhleCIpLF9lLndyaXRlX3NoaWZ0KDQsNjgrU2UubGVuZ3RoKSx2ZS5wdXNoKEhlKX1yZXR1cm4gUyh2ZSl9ZnVuY3Rpb24gUGQoeSxQKXtyZXR1cm4geS5yZWFkX3NoaWZ0KFApLG51bGx9ZnVuY3Rpb24gU28oeSxQKXtyZXR1cm4gMT09PXkucmVhZF9zaGlmdChQKX1mdW5jdGlvbiBQ'@;
put 'bCh5LFApe3JldHVybiBQfHwoUD1mcigyKSksUC53cml0ZV9zaGlmdCgyLCshIXkpLFB9ZnVuY3Rpb24gaGwoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCgyLCJ1Iil9ZnVuY3Rpb24gZnUoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMikpLFAud3JpdGVfc2hpZnQoMix5KSxQfWZ1bmN0aW9uIEgxKHks'@;
put 'UCl7cmV0dXJuIGZ1bmN0aW9uIGs0KHksUCxMKXtmb3IodmFyIFE9W10scmU9eS5sK1A7eS5sPHJlOylRLnB1c2goTCh5LHJlLXkubCkpO2lmKHJlIT09eS5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJyb3IiKTtyZXR1cm4gUX0oeSxQLGhsKX1mdW5jdGlvbiBkOSh5LFAsTCl7cmV0dXJu'@;
put 'IEx8fChMPWZyKDIpKSxMLndyaXRlX3NoaWZ0KDEsImUiPT1QPyt5OishIXkpLEwud3JpdGVfc2hpZnQoMSwiZSI9PVA/MTowKSxMfWZ1bmN0aW9uIEZkKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoTCYmTC5iaWZmPj0xMj8yOjEpLHJlPSJzYmNzLWNvbnQiLGdlPU87TCYmTC5iaWZmPj04'@;
put 'JiYoTz0xMjAwKSxMJiY4IT1MLmJpZmY/MTI9PUwuYmlmZiYmKHJlPSJ3c3RyIik6eS5yZWFkX3NoaWZ0KDEpJiYocmU9ImRiY3MtY29udCIpLEwuYmlmZj49MiYmTC5iaWZmPD01JiYocmU9ImNwc3RyIik7dmFyIHZlPVE/eS5yZWFkX3NoaWZ0KFEscmUpOiIiO3JldHVybiBPPWdlLHZlfWZ1'@;
put 'bmN0aW9uIGdtKHkpe3ZhciBQPU87Tz0xMjAwO3ZhciBTZSxMPXkucmVhZF9zaGlmdCgyKSxRPXkucmVhZF9zaGlmdCgxKSxyZT00JlEsZ2U9OCZRLF9lPTErKDEmUSksdmU9MCxIZT17fTtnZSYmKHZlPXkucmVhZF9zaGlmdCgyKSkscmUmJihTZT15LnJlYWRfc2hpZnQoNCkpO3ZhciBHZT0w'@;
put 'PT09TD8iIjp5LnJlYWRfc2hpZnQoTCwyPT1fZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iik7aWYoZ2UpZm9yKEhlLl9SPVtdO3ZlLS0gPjA7KUhlLl9SLnB1c2goe2lkeDp5LnJlYWRfc2hpZnQoMiksaWZudDp5LnJlYWRfc2hpZnQoMil9KTtyZXR1cm4gcmUmJih5LmwrPVNlKSxIZS50PUdl'@;
put 'LGdlfHwoSGUucj0iPHQ+IitIZS50KyI8L3Q+IiksTz1QLEhlfWZ1bmN0aW9uIGowKHksUCl7dmFyIEw9eS5SJiZ5LlIubGVuZ3RofHx5LnI7eS5yJiYoeS5SPURtKHkucikpO3ZhciBRPSIiLHJlPTA7TD95LlIuZm9yRWFjaChmdW5jdGlvbihDdCl7cmUrKyxRKz1DdC52fHwiIn0pOihRPXku'@;
put 'dHx8IiIscmU9MSk7dmFyIGdlPWZyKDMrKHJlPjE/MjowKSk7Z2Uud3JpdGVfc2hpZnQoMixRLmxlbmd0aCksZ2Uud3JpdGVfc2hpZnQoMSwxfChyZT4xPzg6MCkpLHJlPjEmJmdlLndyaXRlX3NoaWZ0KDIscmUpO3ZhciBfZT1mcigyKlEubGVuZ3RoKTtfZS53cml0ZV9zaGlmdCgyKlEubGVu'@;
put 'Z3RoLFEsInV0ZjE2bGUiKTt2YXIgdmU9W2dlLF9lXTtpZihMKXt2YXIgU2U9ZnIoNCp5LlIubGVuZ3RoKSxIZT0wO3ZlLnB1c2goU2UpO2Zvcih2YXIgQmU9MDtCZTx5LlIubGVuZ3RoOysrQmUpe3ZhciBHZT15LlJbQmVdO1NlLndyaXRlX3NoaWZ0KDIsSGUpLEhlKz0oR2Uudnx8IiIpLmxl'@;
put 'bmd0aDt2YXIgbnQ9R2Uucz9ndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkdlLnN9LFApOjAsZHQ9UC5jZWxsWGZzW250XS5mb250SWQ7U2Uud3JpdGVfc2hpZnQoMixkdDw0P2R0OmR0KzEpfX1yZXR1cm4gUyh2ZSl9ZnVuY3Rpb24gSGQoeSxQLEwpe2lmKEwpe2lm'@;
put 'KEwuYmlmZj49MiYmTC5iaWZmPD01KXJldHVybiB5LnJlYWRfc2hpZnQoUCwiY3BzdHIiKTtpZihMLmJpZmY+PTEyKXJldHVybiB5LnJlYWRfc2hpZnQoUCwiZGJjcy1jb250Iil9dmFyIHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5yZWFkX3NoaWZ0KFAsMD09PXJlPyJzYmNzLWNvbnQi'@;
put 'OiJkYmNzLWNvbnQiKX1mdW5jdGlvbiBOMih5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpO3JldHVybiAwPT09UT8oeS5sKyssIiIpOkhkKHksUSxMKX1mdW5jdGlvbiBWMih5LFAsTCl7aWYoTC5iaWZmPjUpcmV0dXJuIE4yKHksMCxMKTt2YXIgUT15LnJlYWRf'@;
put 'c2hpZnQoMSk7cmV0dXJuIDA9PT1RPyh5LmwrKywiIik6eS5yZWFkX3NoaWZ0KFEsTC5iaWZmPD00fHwheS5sZW5zPyJjcHN0ciI6InNiY3MtY29udCIpfWZ1bmN0aW9uIG1tKHksUCxMKXtyZXR1cm4gTHx8KEw9ZnIoMysyKnkubGVuZ3RoKSksTC53cml0ZV9zaGlmdCgyLHkubGVuZ3RoKSxM'@;
put 'LndyaXRlX3NoaWZ0KDEsMSksTC53cml0ZV9zaGlmdCgzMSx5LCJ1dGYxNmxlIiksTH1mdW5jdGlvbiBBNCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIFA+MD95LnJlYWRfc2hpZnQoUCwidXRmMTZsZSIpLnJlcGxhY2UodiwiIik6IiJ9ZnVuY3Rpb24gXzMoeSxQKXtQfHwoUD1m'@;
put 'cig2KzIqeS5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDQsMSt5Lmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx5Lmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCgyLHkuY2hhckNvZGVBdChMKSk7cmV0dXJuIFAud3JpdGVfc2hpZnQoMiwwKSxQfWZ1bmN0aW9uIGIzKHkpe3ZhciBQPWZyKDUxMiksTD0w'@;
put 'LFE9eS5UYXJnZXQ7ImZpbGU6Ly8iPT1RLnNsaWNlKDAsNykmJihRPVEuc2xpY2UoNykpO3ZhciByZT1RLmluZGV4T2YoIiMiKSxnZT1yZT4tMT8zMToyMztzd2l0Y2goUS5jaGFyQXQoMCkpe2Nhc2UiIyI6Z2U9Mjg7YnJlYWs7Y2FzZSIuIjpnZSY9LTN9UC53cml0ZV9zaGlmdCg0LDIpLFAu'@;
put 'd3JpdGVfc2hpZnQoNCxnZSk7dmFyIF9lPVs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtmb3IoTD0wO0w8X2UubGVuZ3RoOysrTClQLndyaXRlX3NoaWZ0KDQsX2VbTF0pO2lmKDI4PT1nZSlfMyhRPVEuc2xpY2UoMSksUCk7ZWxzZSBpZigyJmdlKXtmb3IoX2U9ImUwIGM5IGVhIDc5'@;
put 'IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLEw9MDtMPF9lLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KF9lW0xdLDE2KSk7dmFyIHZlPXJlPi0xP1Euc2xpY2UoMCxyZSk6UTtmb3IoUC53cml0ZV9zaGlmdCg0LDIqKHZlLmxlbmd0'@;
put 'aCsxKSksTD0wO0w8dmUubGVuZ3RoOysrTClQLndyaXRlX3NoaWZ0KDIsdmUuY2hhckNvZGVBdChMKSk7UC53cml0ZV9zaGlmdCgyLDApLDgmZ2UmJl8zKHJlPi0xP1Euc2xpY2UocmUrMSk6IiIsUCl9ZWxzZXtmb3IoX2U9IjAzIDAzIDAwIDAwIDAwIDAwIDAwIDAwIGMwIDAwIDAwIDAwIDAw'@;
put 'IDAwIDAwIDQ2Ii5zcGxpdCgiICIpLEw9MDtMPF9lLmxlbmd0aDsrK0wpUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KF9lW0xdLDE2KSk7Zm9yKHZhciBTZT0wOyIuLi8iPT1RLnNsaWNlKDMqU2UsMypTZSszKXx8Ii4uXFwiPT1RLnNsaWNlKDMqU2UsMypTZSszKTspKytTZTtmb3IoUC53cml0'@;
put 'ZV9zaGlmdCgyLFNlKSxQLndyaXRlX3NoaWZ0KDQsUS5sZW5ndGgtMypTZSsxKSxMPTA7TDxRLmxlbmd0aC0zKlNlOysrTClQLndyaXRlX3NoaWZ0KDEsMjU1JlEuY2hhckNvZGVBdChMKzMqU2UpKTtmb3IoUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMiw2NTUzNSksUC53cml0'@;
put 'ZV9zaGlmdCgyLDU3MDA1KSxMPTA7TDw2OysrTClQLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFAuc2xpY2UoMCxQLmwpfWZ1bmN0aW9uIHZtKHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9u'@;
put 'IGg5KHksUCl7dmFyIEw9dm0oeSk7cmV0dXJuIExbM109MCxMfWZ1bmN0aW9uIEx1KHkpe3JldHVybntyOnkucmVhZF9zaGlmdCgyKSxjOnkucmVhZF9zaGlmdCgyKSxpeGZlOnkucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gejAoeSxQLEwsUSl7cmV0dXJuIFF8fChRPWZyKDYpKSxRLndyaXRl'@;
put 'X3NoaWZ0KDIseSksUS53cml0ZV9zaGlmdCgyLFApLFEud3JpdGVfc2hpZnQoMixMfHwwKSxRfWZ1bmN0aW9uIHA5KHksUCxMKXt2YXIgUT1MLmJpZmY+OD80OjI7cmV0dXJuW3kucmVhZF9zaGlmdChRKSx5LnJlYWRfc2hpZnQoUSwiaSIpLHkucmVhZF9zaGlmdChRLCJpIildfWZ1bmN0aW9u'@;
put 'IGc5KHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMiksWGMoeSldfWZ1bmN0aW9uIEtoKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm57czp7Yzp5LnJlYWRfc2hpZnQoMikscjpQfSxlOntjOnkucmVhZF9zaGlmdCgyKSxyOkx9fX1mdW5jdGlvbiBVMCh5'@;
put 'LFApe3JldHVybiBQfHwoUD1mcig4KSksUC53cml0ZV9zaGlmdCgyLHkucy5yKSxQLndyaXRlX3NoaWZ0KDIseS5lLnIpLFAud3JpdGVfc2hpZnQoMix5LnMuYyksUC53cml0ZV9zaGlmdCgyLHkuZS5jKSxQfWZ1bmN0aW9uIF9tKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9z'@;
put 'aGlmdCgyKTtyZXR1cm57czp7Yzp5LnJlYWRfc2hpZnQoMSkscjpQfSxlOntjOnkucmVhZF9zaGlmdCgxKSxyOkx9fX12YXIgdmE9X207ZnVuY3Rpb24gVDQoeSl7eS5sKz00O3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKSxRPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4g'@;
put 'eS5sKz0xMixbTCxQLFFdfWZ1bmN0aW9uIEZsKHkpe3kubCs9Mix5LmwrPXkucmVhZF9zaGlmdCgyKX12YXIgYm09ezA6RmwsNDpGbCw1OkZsLDY6RmwsNzpmdW5jdGlvbiBfOSh5KXtyZXR1cm4geS5sKz00LHkuY2Y9eS5yZWFkX3NoaWZ0KDIpLHt9fSw4OkZsLDk6RmwsMTA6RmwsMTE6Rmws'@;
put 'MTI6RmwsMTM6ZnVuY3Rpb24gdjkoeSl7dmFyIFA9e307cmV0dXJuIHkubCs9NCx5LmwrPTE2LFAuZlNoYXJlZE5vdGU9eS5yZWFkX3NoaWZ0KDIpLHkubCs9NCxQfSwxNDpGbCwxNTpGbCwxNjpGbCwxNzpGbCwxODpGbCwxOTpGbCwyMDpGbCwyMTpUNH07ZnVuY3Rpb24gUnUoeSxQKXt2YXIg'@;
put 'TD17QklGRlZlcjowLGR0OjB9O3N3aXRjaChMLkJJRkZWZXI9eS5yZWFkX3NoaWZ0KDIpLChQLT0yKT49MiYmKEwuZHQ9eS5yZWFkX3NoaWZ0KDIpLHkubC09MiksTC5CSUZGVmVyKXtjYXNlIDE1MzY6Y2FzZSAxMjgwOmNhc2UgMTAyNDpjYXNlIDc2ODpjYXNlIDUxMjpjYXNlIDI6Y2FzZSA3'@;
put 'OmJyZWFrO2RlZmF1bHQ6aWYoUD42KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBCSUZGIFZlciAiK0wuQklGRlZlcil9cmV0dXJuIHkucmVhZF9zaGlmdChQKSxMfWZ1bmN0aW9uIEQ0KHksUCxMKXt2YXIgUT0xNTM2LHJlPTE2O3N3aXRjaChMLmJvb2tUeXBlKXtjYXNlImJpZmY4Ijpj'@;
put 'YXNlInhsYSI6YnJlYWs7Y2FzZSJiaWZmNSI6UT0xMjgwLHJlPTg7YnJlYWs7Y2FzZSJiaWZmNCI6UT00LHJlPTY7YnJlYWs7Y2FzZSJiaWZmMyI6UT0zLHJlPTY7YnJlYWs7Y2FzZSJiaWZmMiI6UT0yLHJlPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJ'@;
put 'RkYgdmVyc2lvbiIpfXZhciBnZT1mcihyZSk7cmV0dXJuIGdlLndyaXRlX3NoaWZ0KDIsUSksZ2Uud3JpdGVfc2hpZnQoMixQKSxyZT40JiZnZS53cml0ZV9zaGlmdCgyLDI5MjgyKSxyZT42JiZnZS53cml0ZV9zaGlmdCgyLDE5OTcpLHJlPjgmJihnZS53cml0ZV9zaGlmdCgyLDQ5MTYxKSxn'@;
put 'ZS53cml0ZV9zaGlmdCgyLDEpLGdlLndyaXRlX3NoaWZ0KDIsMTc5OCksZ2Uud3JpdGVfc2hpZnQoMiwwKSksZ2V9ZnVuY3Rpb24gWTAoeSxQKXt2YXIgTD0hUHx8UC5iaWZmPj04PzI6MSxRPWZyKDgrTCp5Lm5hbWUubGVuZ3RoKTtRLndyaXRlX3NoaWZ0KDQseS5wb3MpLFEud3JpdGVfc2hp'@;
put 'ZnQoMSx5LmhzfHwwKSxRLndyaXRlX3NoaWZ0KDEseS5kdCksUS53cml0ZV9zaGlmdCgxLHkubmFtZS5sZW5ndGgpLFAuYmlmZj49OCYmUS53cml0ZV9zaGlmdCgxLDEpLFEud3JpdGVfc2hpZnQoTCp5Lm5hbWUubGVuZ3RoLHkubmFtZSxQLmJpZmY8OD8ic2JjcyI6InV0ZjE2bGUiKTt2YXIg'@;
put 'cmU9US5zbGljZSgwLFEubCk7cmV0dXJuIHJlLmw9US5sLHJlfWZ1bmN0aW9uIElyKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoNCksSmMoeSl9ZnVuY3Rpb24gZXMoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCg0KSxsMCh5KX1mdW5jdGlvbiBvYyh5LFAsTCl7cmV0dXJuIHkucmVhZF9zaGlmdCg0'@;
put 'KSxvUyh5LDAsTCl9ZnVuY3Rpb24gVzAoeSxQLEwpe3ZhciBRPTA7TCYmMj09TC5iaWZmfHwoUT15LnJlYWRfc2hpZnQoMikpO3ZhciByZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIEwmJjI9PUwuYmlmZiYmKFE9MS0ocmU+PjE1KSxyZSY9MzI3NjcpLFt7VW5zeW5jZWQ6MSZRLER5WmVybzoo'@;
put 'MiZRKT4+MSxFeEFzYzooNCZRKT4+MixFeERzYzooOCZRKT4+M30scmVdfWZ1bmN0aW9uIFhyKHksUCxMLFEpe3ZhciByZT1MJiY1PT1MLmJpZmY7UXx8KFE9ZnIocmU/MytQLmxlbmd0aDo1KzIqUC5sZW5ndGgpKSxRLndyaXRlX3NoaWZ0KDIseSksUS53cml0ZV9zaGlmdChyZT8xOjIsUC5s'@;
put 'ZW5ndGgpLHJlfHxRLndyaXRlX3NoaWZ0KDEsMSksUS53cml0ZV9zaGlmdCgocmU/MToyKSpQLmxlbmd0aCxQLHJlPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBnZT1RLmxlbmd0aD5RLmw/US5zbGljZSgwLFEubCk6UTtyZXR1cm4gbnVsbD09Z2UubCYmKGdlLmw9Z2UubGVuZ3RoKSxnZX12YXIg'@;
put 'VHM9VjI7ZnVuY3Rpb24gQnQoeSxQLEwpe3ZhciBRPXkubCtQLHJlPTghPUwuYmlmZiYmTC5iaWZmPzI6NCxnZT15LnJlYWRfc2hpZnQocmUpLF9lPXkucmVhZF9zaGlmdChyZSksdmU9eS5yZWFkX3NoaWZ0KDIpLFNlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4geS5sPVEse3M6e3I6Z2UsYzp2'@;
put 'ZX0sZTp7cjpfZSxjOlNlfX19ZnVuY3Rpb24gQ20oeSxQLEwsUSl7dmFyIGdlPSFMfHwhTC5iaWZmfHw4PT1MLmJpZmY7UXx8KFE9ZnIoTCYmNT09TC5iaWZmPzE2OjIwKSksUS53cml0ZV9zaGlmdCgyLGdlJiZMLmNlbGxTdHlsZXMmJnkuZm9udElkJiYoeS5mb250SWQ8ND95LmZvbnRJZDp5'@;
put 'LmZvbnRJZCsxKXx8MCk7dmFyIF9lPTE7eS5wcm90ZWN0aW9uJiYoeS5wcm90ZWN0aW9uLmVkaXRhYmxlJiYoX2UmPS0yKSx5LnByb3RlY3Rpb24uaGlkZGVuJiYoX2V8PTIpKSx5LnN0eWxlPyhRLndyaXRlX3NoaWZ0KDIseS5udW1GbXRJZHx8MCksUS53cml0ZV9zaGlmdCgyLDY1NTI0fF9l'@;
put 'KSk6KFEud3JpdGVfc2hpZnQoMix5Lm51bUZtdElkfHwwKSxRLndyaXRlX3NoaWZ0KDIsUDw8NHxfZSkpO3ZhciB2ZT15LmFsaWdubWVudHx8e307aWYoZ2Upe3ZhciBTZT0wLEhlPTA7V20uaW5kZXhPZih2ZS5ob3Jpem9udGFsKT4tMSYmKFNlfD1XbS5pbmRleE9mKHZlLmhvcml6b250YWwp'@;
put 'KSx2ZS53cmFwVGV4dCYmKFNlfD04KSxCNC5pbmRleE9mKHZlLnZlcnRpY2FsKT4tMT9TZXw9QjQuaW5kZXhPZih2ZS52ZXJ0aWNhbCk8PDQ6bnVsbD09dmUudmVydGljYWwmJihTZXw9MzIpLFEud3JpdGVfc2hpZnQoMSxTZSksUS53cml0ZV9zaGlmdCgxLDApLHZlLnNocmlua1RvRml0JiYo'@;
put 'SGV8PTE2KSxRLndyaXRlX3NoaWZ0KDIsSGUpO3ZhciBCZT1udWxsO251bGwhPXkuYm9yZGVySWQmJihCZT1MLkJvcmRlcnMmJkwuQm9yZGVyc1t5LmJvcmRlcklkfHwwXXx8e30pO3ZhciBHZT0wLG50PTAsZHQ9MDtCZSYmKG51bGwhPUJlLmxlZnQmJkJlLmxlZnQuc3R5bGUmJihHZXw9KGR0'@;
put 'PVcyLmluZGV4T2YoQmUubGVmdC5zdHlsZSkpPi0xP2R0OjApLG51bGwhPUJlLnJpZ2h0JiZCZS5yaWdodC5zdHlsZSYmKEdlfD0oKGR0PVcyLmluZGV4T2YoQmUucmlnaHQuc3R5bGUpKT4tMT9kdDowKTw8NCksbnVsbCE9QmUudG9wJiZCZS50b3Auc3R5bGUmJihudHw9KGR0PVcyLmluZGV4'@;
put 'T2YoQmUudG9wLnN0eWxlKSk+LTE/ZHQ6MCksbnVsbCE9QmUuYm90dG9tJiZCZS5ib3R0b20uc3R5bGUmJihudHw9KChkdD1XMi5pbmRleE9mKEJlLmJvdHRvbS5zdHlsZSkpPi0xP2R0OjApPDw0KSksUS53cml0ZV9zaGlmdCgxLEdlKSxRLndyaXRlX3NoaWZ0KDEsbnQpLFEud3JpdGVfc2hp'@;
put 'ZnQoMiwwKSxRLndyaXRlX3NoaWZ0KDIsMCksUS53cml0ZV9zaGlmdCgxLDApO3ZhciBDdD0wLGN0PUwuRmlsbHMmJkwuRmlsbHNbeS5maWxsSWR8fDBdfHx7fTsoY3QuZmdDb2xvcnx8Y3QuYmdDb2xvcikmJihDdHw9NCksUS53cml0ZV9zaGlmdCgxLEN0KTt2YXIgYnQ9MDtidHw9SDMoY3Qu'@;
put 'ZmdDb2xvciw2NSksYnR8PUgzKGN0LmJnQ29sb3IsNjUpPDw3LFEud3JpdGVfc2hpZnQoMixidCl9ZWxzZSBRLndyaXRlX3NoaWZ0KDQsMCksUS53cml0ZV9zaGlmdCg0LDApLFEud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gUX1mdW5jdGlvbiBWYyh5LFAsTCl7dmFyIFE9THUoeSk7KDI9PUwu'@;
put 'YmlmZnx8OT09UCkmJisreS5sO3ZhciByZT1mdW5jdGlvbiBwbSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIDE9PT15LnJlYWRfc2hpZnQoMSk/UDoxPT09UH0oeSk7cmV0dXJuIFEudmFsPXJlLFEudD0hMD09PXJlfHwhMT09PXJlPyJiIjoiZSIsUX12YXIgVjE9ZnVuY3Rpb24g'@;
put 'eTMoeSxQLEwpe3JldHVybiAwPT09UD8iIjpWMih5LDAsTCl9O2Z1bmN0aW9uIHk5KHksUCxMKXt2YXIgcmUsUT15LnJlYWRfc2hpZnQoMiksZ2U9e2ZCdWlsdEluOjEmUSxmV2FudEFkdmlzZTpRPj4+MSYxLGZXYW50UGljdDpRPj4+MiYxLGZPbGU6UT4+PjMmMSxmT2xlTGluazpRPj4+NCYx'@;
put 'LGNmOlE+Pj41JjEwMjMsZkljb246UT4+PjE1JjF9O3JldHVybiAxNDg0OT09PUwuc2JjY2gmJihyZT1mdW5jdGlvbiBSdyh5LFAsTCl7eS5sKz00O3ZhciBRPXkubCsoUC09NCkscmU9RmQoeSwwLEwpLGdlPXkucmVhZF9zaGlmdCgyKTtpZihnZSE9PShRLT15LmwpKXRocm93IG5ldyBFcnJv'@;
put 'cigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitRKyIgIT0gIitnZSk7cmV0dXJuIHkubCs9Z2UscmV9KHksUC0yLEwpKSxnZS5ib2R5PXJlfHx5LnJlYWRfc2hpZnQoUC0yKSwic3RyaW5nIj09dHlwZW9mIHJlJiYoZ2UuTmFtZT1yZSksZ2V9dmFyIEtUPVsiX3hsbm0uQ29uc29s'@;
put 'aWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJhc2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRh'@;
put 'dGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIFZ3KHksUCxMKXt2YXIgUT15LmwrUCxyZT15LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFkX3NoaWZ0'@;
put 'KDEpLF9lPXkucmVhZF9zaGlmdCgxKSx2ZT15LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MiksU2U9MDsoIUx8fEwuYmlmZj49NSkmJig1IT1MLmJpZmYmJih5LmwrPTIpLFNlPXkucmVhZF9zaGlmdCgyKSw1PT1MLmJpZmYmJih5LmwrPTIpLHkubCs9NCk7dmFyIEhlPUhkKHksX2UsTCk7'@;
put 'MzImcmUmJihIZT1LVFtIZS5jaGFyQ29kZUF0KDApXSk7dmFyIEJlPVEteS5sO0wmJjI9PUwuYmlmZiYmLS1CZTt2YXIgR2U9USE9eS5sJiYwIT09dmUmJkJlPjA/ZnVuY3Rpb24gZDYoeSxQLEwsUSl7dmFyIF9lLHJlPXkubCtQLGdlPW41KHksUSxMKTtyZXR1cm4gcmUhPT15LmwmJihfZT1q'@;
put 'Myh5LHJlLXkubCxnZSxMKSksW2dlLF9lXX0oeSxCZSxMLHZlKTpbXTtyZXR1cm57Y2hLZXk6Z2UsTmFtZTpIZSxpdGFiOlNlLHJnY2U6R2V9fWZ1bmN0aW9uIFNtKHksUCxMKXtpZihMLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gdzkoeSxQLEwpezM9PXlbeS5sKzFdJiZ5W3kubF0rKzt2YXIg'@;
put 'UT1GZCh5LDAsTCk7cmV0dXJuIDM9PVEuY2hhckNvZGVBdCgwKT9RLnNsaWNlKDEpOlF9KHksMCxMKTtmb3IodmFyIFE9W10scmU9eS5sK1AsZ2U9eS5yZWFkX3NoaWZ0KEwuYmlmZj44PzQ6Mik7MCE9Z2UtLTspUS5wdXNoKHA5KHksMCxMKSk7aWYoeS5sIT1yZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkJhZCBFeHRlcm5TaGVldDogIit5LmwrIiAhPSAiK3JlKTtyZXR1cm4gUX1mdW5jdGlvbiBqdyh5LFAsTCl7dmFyIFE9dmEoeSw2KTtzd2l0Y2goTC5iaWZmKXtjYXNlIDI6eS5sKyssUC09NzticmVhaztjYXNlIDM6Y2FzZSA0OnkubCs9MixQLT04O2JyZWFrO2RlZmF1bHQ6eS5sKz02LFAt'@;
put 'PTEyfXJldHVybltRLGZ2KHksUCxMKV19dmFyIE1tPVtdO2Z1bmN0aW9uIFhoKHkpe3ZhciBQPWZyKDI0KSxMPXNzKHlbMF0pO1Aud3JpdGVfc2hpZnQoMixMLnIpLFAud3JpdGVfc2hpZnQoMixMLnIpLFAud3JpdGVfc2hpZnQoMixMLmMpLFAud3JpdGVfc2hpZnQoMixMLmMpO2Zvcih2YXIg'@;
put 'UT0iZDAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIikscmU9MDtyZTwxNjsrK3JlKVAud3JpdGVfc2hpZnQoMSxwYXJzZUludChRW3JlXSwxNikpO3JldHVybiBTKFtQLGIzKHlbMV0pXSl9ZnVuY3Rpb24gUVQoeSl7dmFyIFA9eVsxXS5U'@;
put 'b29sdGlwLEw9ZnIoMTArMiooUC5sZW5ndGgrMSkpO0wud3JpdGVfc2hpZnQoMiwyMDQ4KTt2YXIgUT1zcyh5WzBdKTtMLndyaXRlX3NoaWZ0KDIsUS5yKSxMLndyaXRlX3NoaWZ0KDIsUS5yKSxMLndyaXRlX3NoaWZ0KDIsUS5jKSxMLndyaXRlX3NoaWZ0KDIsUS5jKTtmb3IodmFyIHJlPTA7'@;
put 'cmU8UC5sZW5ndGg7KytyZSlMLndyaXRlX3NoaWZ0KDIsUC5jaGFyQ29kZUF0KHJlKSk7cmV0dXJuIEwud3JpdGVfc2hpZnQoMiwwKSxMfWZ1bmN0aW9uIFZkKHksUCxMKXtpZighTC5jZWxsU3R5bGVzKXJldHVybiB5Yyh5LFApO3ZhciBRPUwmJkwuYmlmZj49MTI/NDoyLHJlPXkucmVhZF9z'@;
put 'aGlmdChRKSxnZT15LnJlYWRfc2hpZnQoUSksX2U9eS5yZWFkX3NoaWZ0KFEpLHZlPXkucmVhZF9zaGlmdChRKSxTZT15LnJlYWRfc2hpZnQoMik7Mj09USYmKHkubCs9Mik7dmFyIEhlPXtzOnJlLGU6Z2UsdzpfZSxpeGZlOnZlLGZsYWdzOlNlfTtyZXR1cm4oTC5iaWZmPj01fHwhTC5iaWZm'@;
put 'KSYmKEhlLmxldmVsPVNlPj44JjcpLEhlfU1tWzhdPWZ1bmN0aW9uKHksUCl7dmFyIEw9eS5sK1A7eS5sKz0xMDt2YXIgUT15LnJlYWRfc2hpZnQoMik7eS5sKz00LHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9NDt2YXIgcmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiB5LmwrPXJlLHkubD1M'@;
put 'LHtmbXQ6UX19O3ZhciBxdz1MdSxLdz1IMSxpRD1OMjt2YXIgQjI9ZnVuY3Rpb24oKXt2YXIgeT17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIy'@;
put 'OjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAsMTU6NDM3LDE2Ojg1'@;
put 'MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5MzYsNzg6OTQ5LDc5'@;
put 'Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LFA9YmUoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYy'@;
put 'MCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtmdW5jdGlvbiByZShT'@;
put 'ZSxIZSl7dmFyIEJlPUhlfHx7fTtyZXR1cm4gQmUuZGF0ZU5GfHwoQmUuZGF0ZU5GPSJ5eXl5bW1kZCIpLGsxKGZ1bmN0aW9uIFEoU2UsSGUpe3ZhciBCZT1bXSxHZT1HKDEpO3N3aXRjaChIZS50eXBlKXtjYXNlImJhc2U2NCI6R2U9RChzZS5kZWNvZGUoU2UpKTticmVhaztjYXNlImJpbmFy'@;
put 'eSI6R2U9RChTZSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOkdlPVNlfW9sKEdlLDApO3ZhciBudD1HZS5yZWFkX3NoaWZ0KDEpLGR0PSEhKDEzNiZudCksQ3Q9ITEsY3Q9ITE7c3dpdGNoKG50KXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFr'@;
put 'O2Nhc2UgNDg6Y2FzZSA0OTpDdD0hMCxkdD0hMDticmVhaztjYXNlIDE0MDpjdD0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIFZlcnNpb246ICIrbnQudG9TdHJpbmcoMTYpKX12YXIgYnQ9MCxGdD01MjE7Mj09bnQmJihidD1HZS5yZWFkX3NoaWZ0'@;
put 'KDIpKSxHZS5sKz0zLDIhPW50JiYoYnQ9R2UucmVhZF9zaGlmdCg0KSksYnQ+MTA0ODU3NiYmKGJ0PTFlNiksMiE9bnQmJihGdD1HZS5yZWFkX3NoaWZ0KDIpKTt2YXIga3Q9R2UucmVhZF9zaGlmdCgyKSxUdD1IZS5jb2RlcGFnZXx8MTI1MjsyIT1udCYmKEdlLmwrPTE2LEdlLnJlYWRfc2hp'@;
put 'ZnQoMSksMCE9PUdlW0dlLmxdJiYoVHQ9eVtHZVtHZS5sXV0pLEdlLmwrPTEsR2UubCs9MiksY3QmJihHZS5sKz0zNik7Zm9yKHZhciBadD1bXSxwbj17fSxLbj1NYXRoLm1pbihHZS5sZW5ndGgsMj09bnQ/NTIxOkZ0LTEwLShDdD8yNjQ6MCkpLHVuPWN0PzMyOjExO0dlLmw8S24mJjEzIT1H'@;
put 'ZVtHZS5sXTspc3dpdGNoKHBuPXt9LHBuLm5hbWU9Y3B0YWJsZS51dGlscy5kZWNvZGUoVHQsR2Uuc2xpY2UoR2UubCxHZS5sK3VuKSkucmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLEdlLmwrPXVuLHBuLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShHZS5yZWFkX3NoaWZ0KDEpKSwy'@;
put 'IT1udCYmIWN0JiYocG4ub2Zmc2V0PUdlLnJlYWRfc2hpZnQoNCkpLHBuLmxlbj1HZS5yZWFkX3NoaWZ0KDEpLDI9PW50JiYocG4ub2Zmc2V0PUdlLnJlYWRfc2hpZnQoMikpLHBuLmRlYz1HZS5yZWFkX3NoaWZ0KDEpLHBuLm5hbWUubGVuZ3RoJiZadC5wdXNoKHBuKSwyIT1udCYmKEdlLmwr'@;
put 'PWN0PzEzOjE0KSxwbi50eXBlKXtjYXNlIkIiOighQ3R8fDghPXBuLmxlbikmJkhlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrcG4ubmFtZSsiOiIrcG4udHlwZSk7YnJlYWs7Y2FzZSJHIjpjYXNlIlAiOkhlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrcG4ubmFtZSsiOiIr'@;
put 'cG4udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2UiVCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBU'@;
put 'eXBlOiAiK3BuLnR5cGUpfWlmKDEzIT09R2VbR2UubF0mJihHZS5sPUZ0LTEpLDEzIT09R2UucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK0dlLmwrIiAiK0dlW0dlLmxdKTtHZS5sPUZ0O3ZhciBxbj0wLHpuPTA7Zm9yKEJlWzBdPVtd'@;
put 'LHpuPTA7em4hPVp0Lmxlbmd0aDsrK3puKUJlWzBdW3puXT1adFt6bl0ubmFtZTtmb3IoO2J0LS0gPjA7KWlmKDQyIT09R2VbR2UubF0pZm9yKCsrR2UubCxCZVsrK3FuXT1bXSx6bj0wLHpuPTA7em4hPVp0Lmxlbmd0aDsrK3puKXt2YXIga249R2Uuc2xpY2UoR2UubCxHZS5sK1p0W3puXS5s'@;
put 'ZW4pO0dlLmwrPVp0W3puXS5sZW4sb2woa24sMCk7dmFyIGVyPWNwdGFibGUudXRpbHMuZGVjb2RlKFR0LGtuKTtzd2l0Y2goWnRbem5dLnR5cGUpe2Nhc2UiQyI6ZXIudHJpbSgpLmxlbmd0aCYmKEJlW3FuXVt6bl09ZXIucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNlIkQiOkJlW3Fu'@;
put 'XVt6bl09OD09PWVyLmxlbmd0aD9uZXcgRGF0ZSgrZXIuc2xpY2UoMCw0KSwrZXIuc2xpY2UoNCw2KS0xLCtlci5zbGljZSg2LDgpKTplcjticmVhaztjYXNlIkYiOkJlW3FuXVt6bl09cGFyc2VGbG9hdChlci50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpCZVtxbl1bem5dPWN0PzIx'@;
put 'NDc0ODM2NDhea24ucmVhZF9zaGlmdCgtNCwiaSIpOmtuLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNoKGVyLnRyaW0oKS50b1VwcGVyQ2FzZSgpKXtjYXNlIlkiOmNhc2UiVCI6QmVbcW5dW3puXT0hMDticmVhaztjYXNlIk4iOmNhc2UiRiI6QmVbcW5dW3puXT0hMTti'@;
put 'cmVhaztjYXNlIiI6Y2FzZSI/IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVucmVjb2duaXplZCBMOnwiK2VyKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZighZHQpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIrbnQudG9TdHJpbmcoMTYp'@;
put 'KTtCZVtxbl1bem5dPSIjI01FTU8jIyIrKGN0P3BhcnNlSW50KGVyLnRyaW0oKSwxMCk6a24ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJOIjooZXI9ZXIucmVwbGFjZSgvXHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9ZXImJihCZVtxbl1bem5dPStlcnx8MCk7YnJlYWs7Y2FzZSJAIjpC'@;
put 'ZVtxbl1bem5dPW5ldyBEYXRlKGtuLnJlYWRfc2hpZnQoLTgsImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpCZVtxbl1bem5dPW5ldyBEYXRlKDg2NGU1Kihrbi5yZWFkX3NoaWZ0KDQpLTI0NDA1ODgpK2tuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6QmVbcW5dW3puXT1r'@;
put 'bi5yZWFkX3NoaWZ0KDQsImkiKS8xZTQ7YnJlYWs7Y2FzZSJPIjpCZVtxbl1bem5dPS1rbi5yZWFkX3NoaWZ0KC04LCJmIik7YnJlYWs7Y2FzZSJCIjppZihDdCYmOD09WnRbem5dLmxlbil7QmVbcW5dW3puXT1rbi5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6a24u'@;
put 'bCs9WnRbem5dLmxlbjticmVhaztjYXNlIjAiOmlmKCJfTnVsbEZsYWdzIj09PVp0W3puXS5uYW1lKWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICIrWnRbem5dLnR5cGUpfX1lbHNlIEdlLmwrPWt0O2lmKDIhPW50JiZHZS5sPEdlLmxl'@;
put 'bmd0aCYmMjYhPUdlW0dlLmwrK10pdGhyb3cgbmV3IEVycm9yKCJEQkYgRU9GIE1hcmtlciBtaXNzaW5nICIrKEdlLmwtMSkrIiBvZiAiK0dlLmxlbmd0aCsiICIrR2VbR2UubC0xXS50b1N0cmluZygxNikpO3JldHVybiBIZSYmSGUuc2hlZXRSb3dzJiYoQmU9QmUuc2xpY2UoMCxIZS5zaGVl'@;
put 'dFJvd3MpKSxCZX0oU2UsQmUpLEJlKX12YXIgX2U9e0I6OCxDOjI1MCxMOjEsRDo4LCI/IjowLCIiOjB9O3JldHVybnt2ZXJzaW9uczpbMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gZ2UoU2UsSGUpe3RyeXtyZXR1cm4gRWQocmUoU2UsSGUpLEhlKX1j'@;
put 'YXRjaChCZSl7aWYoSGUmJkhlLldURil0aHJvdyBCZX1yZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx0b19zaGVldDpyZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHZlKFNlLEhlKXt2YXIgQmU9SGV8fHt9O2lmKCtCZS5jb2RlcGFnZT49MCYmaigrQmUuY29kZXBhZ2UpLCJzdHJpbmci'@;
put 'PT1CZS50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIERCRiB0byBKUyBzdHJpbmciKTt2YXIgR2U9d2MoKSxudD1INihTZSx7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLGR0PW50WzBdLEN0PW50LnNsaWNlKDEpLGN0PTAsYnQ9MCxGdD0wLGt0PTE7Zm9yKGN0PTA7'@;
put 'Y3Q8ZHQubGVuZ3RoOysrY3QpaWYobnVsbCE9Y3Qpe2lmKCsrRnQsIm51bWJlciI9PXR5cGVvZiBkdFtjdF0mJihkdFtjdF09ZHRbY3RdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiBkdFtjdF0pdGhyb3cgbmV3IEVycm9yKCJEQkYgSW52YWxpZCBjb2x1bW4gbmFtZSAiK2R0W2N0'@;
put 'XSsiIHwiK3R5cGVvZiBkdFtjdF0rInwiKTtpZihkdC5pbmRleE9mKGR0W2N0XSkhPT1jdClmb3IoYnQ9MDtidDwxMDI0OysrYnQpaWYoLTE9PWR0LmluZGV4T2YoZHRbY3RdKyJfIitidCkpe2R0W2N0XSs9Il8iK2J0O2JyZWFrfX12YXIgVHQ9T2koU2VbIiFyZWYiXSksWnQ9W107Zm9yKGN0'@;
put 'PTA7Y3Q8PVR0LmUuYy1UdC5zLmM7KytjdCl7dmFyIHBuPVtdO2ZvcihidD0wO2J0PEN0Lmxlbmd0aDsrK2J0KW51bGwhPUN0W2J0XVtjdF0mJnBuLnB1c2goQ3RbYnRdW2N0XSk7aWYoMCE9cG4ubGVuZ3RoJiZudWxsIT1kdFtjdF0pe3ZhciBLbj0iIix1bj0iIjtmb3IoYnQ9MDtidDxwbi5s'@;
put 'ZW5ndGg7KytidCl7c3dpdGNoKHR5cGVvZiBwbltidF0pe2Nhc2UibnVtYmVyIjp1bj0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6dW49IkMiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6dW49IkwiO2JyZWFrO2Nhc2Uib2JqZWN0Ijp1bj1wbltidF1pbnN0YW5jZW9mIERhdGU/IkQiOiJD'@;
put 'In1pZigiQyI9PShLbj1LbiYmS24hPXVuPyJDIjp1bikpYnJlYWt9a3QrPV9lW0tuXXx8MCxadFtjdF09S259ZWxzZSBadFtjdF09Ij8ifXZhciBxbj1HZS5uZXh0KDMyKTtmb3IocW4ud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLHFuLndyaXRlX3NoaWZ0KDQsQ3QubGVuZ3RoKSxxbi53cml0'@;
put 'ZV9zaGlmdCgyLDI5NiszMipGdCkscW4ud3JpdGVfc2hpZnQoMixrdCksY3Q9MDtjdDw0OysrY3QpcW4ud3JpdGVfc2hpZnQoNCwwKTtmb3IocW4ud3JpdGVfc2hpZnQoNCwwfCgrUFtSXXx8Myk8PDgpLGN0PTAsYnQ9MDtjdDxkdC5sZW5ndGg7KytjdClpZihudWxsIT1kdFtjdF0pe3ZhciB6'@;
put 'bj1HZS5uZXh0KDMyKSxrbj0oZHRbY3RdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiKS5zbGljZSgwLDExKTt6bi53cml0ZV9zaGlmdCgxLGtuLCJzYmNzIiksem4ud3JpdGVfc2hpZnQoMSwiPyI9PVp0W2N0XT8iQyI6WnRbY3RdLCJzYmNzIiksem4ud3JpdGVfc2hpZnQo'@;
put 'NCxidCksem4ud3JpdGVfc2hpZnQoMSxfZVtadFtjdF1dfHwwKSx6bi53cml0ZV9zaGlmdCgxLDApLHpuLndyaXRlX3NoaWZ0KDEsMiksem4ud3JpdGVfc2hpZnQoNCwwKSx6bi53cml0ZV9zaGlmdCgxLDApLHpuLndyaXRlX3NoaWZ0KDQsMCksem4ud3JpdGVfc2hpZnQoNCwwKSxidCs9X2Vb'@;
put 'WnRbY3RdXXx8MH12YXIgZXI9R2UubmV4dCgyNjQpO2Zvcihlci53cml0ZV9zaGlmdCg0LDEzKSxjdD0wO2N0PDY1OysrY3QpZXIud3JpdGVfc2hpZnQoNCwwKTtmb3IoY3Q9MDtjdDxDdC5sZW5ndGg7KytjdCl7dmFyIHRyPUdlLm5leHQoa3QpO2Zvcih0ci53cml0ZV9zaGlmdCgxLDApLGJ0'@;
put 'PTA7YnQ8ZHQubGVuZ3RoOysrYnQpaWYobnVsbCE9ZHRbYnRdKXN3aXRjaChadFtidF0pe2Nhc2UiTCI6dHIud3JpdGVfc2hpZnQoMSxudWxsPT1DdFtjdF1bYnRdPzYzOkN0W2N0XVtidF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6dHIud3JpdGVfc2hpZnQoOCxDdFtjdF1bYnRdfHwwLCJmIik7'@;
put 'YnJlYWs7Y2FzZSJEIjpDdFtjdF1bYnRdPyh0ci53cml0ZV9zaGlmdCg0LCgiMDAwMCIrQ3RbY3RdW2J0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSx0ci53cml0ZV9zaGlmdCgyLCgiMDAiKyhDdFtjdF1bYnRdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHRy'@;
put 'LndyaXRlX3NoaWZ0KDIsKCIwMCIrQ3RbY3RdW2J0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTp0ci53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciBabj1TdHJpbmcoQ3RbY3RdW2J0XXx8IiIpO2Zvcih0ci53cml0ZV9zaGlmdCgxLFpu'@;
put 'LCJzYmNzIiksRnQ9MDtGdDwyNTAtWm4ubGVuZ3RoOysrRnQpdHIud3JpdGVfc2hpZnQoMSwzMil9fXJldHVybiBHZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLEdlLmVuZCgpfX19KCksRTk9ZnVuY3Rpb24oKXt2YXIgeT17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1'@;
put 'LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIs'@;
put 'Q1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixC'@;
put 'bzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6'@;
put 'MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjox'@;
put 'NzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LFA9bmV3IFJlZ0V4cCgiXHgxYk4oIitsdCh5KS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20iKSxMPWZ1bmN0'@;
put 'aW9uKG50LGR0KXt2YXIgQ3Q9eVtkdF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBDdD9lZShDdCk6Q3R9LFE9ZnVuY3Rpb24obnQsZHQsQ3Qpe3ZhciBjdD1kdC5jaGFyQ29kZUF0KDApLTMyPDw0fEN0LmNoYXJDb2RlQXQoMCktNDg7cmV0dXJuIDU5PT1jdD9udDplZShjdCl9O2Z1bmN0aW9u'@;
put 'IGdlKG50LGR0KXt2YXIgZXIsQ3Q9bnQuc3BsaXQoL1tcblxyXSsvKSxjdD0tMSxidD0tMSxGdD0wLGt0PTAsVHQ9W10sWnQ9W10scG49bnVsbCxLbj17fSx1bj1bXSxxbj1bXSx6bj1bXSxrbj0wO2ZvcigrZHQuY29kZXBhZ2U+PTAmJmooK2R0LmNvZGVwYWdlKTtGdCE9PUN0Lmxlbmd0aDsr'@;
put 'K0Z0KXtrbj0wO3ZhciBvaSx0cj1DdFtGdF0udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgyRl0pKFtceDMwLVx4M0ZdKS9nLFEpLnJlcGxhY2UoUCxMKSxabj10ci5yZXBsYWNlKC87Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKENpKXtyZXR1cm4gQ2kucmVwbGFjZSgv'@;
put 'XHUwMDAwL2csIjsiKX0pO2lmKHRyLmxlbmd0aD4wKXN3aXRjaChablswXSl7Y2FzZSJJRCI6Y2FzZSJFIjpjYXNlIkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09Wm5bMV0uY2hhckF0KDApJiZadC5wdXNoKHRyLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2csIjsiKSk7YnJl'@;
put 'YWs7Y2FzZSJDIjp2YXIga2k9ITEsTGk9ITEsUXI9ITEsdXI9ITEsQW49LTEsdnI9LTE7Zm9yKGt0PTE7a3Q8Wm4ubGVuZ3RoOysra3Qpc3dpdGNoKFpuW2t0XS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOmJ0PXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMSxM'@;
put 'aT0hMDticmVhaztjYXNlIlkiOmZvcihjdD1wYXJzZUludChabltrdF0uc2xpY2UoMSkpLTEsTGl8fChidD0wKSxlcj1UdC5sZW5ndGg7ZXI8PWN0OysrZXIpVHRbZXJdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KG9pPVpuW2t0XS5zbGljZSgxKSkuY2hhckF0KDApP29pPW9pLnNsaWNlKDEs'@;
put 'b2kubGVuZ3RoLTEpOiJUUlVFIj09PW9pP29pPSEwOiJGQUxTRSI9PT1vaT9vaT0hMTppc05hTihXbihvaSkpP2lzTmFOKGVuKG9pKS5nZXREYXRlKCkpfHwob2k9SHQob2kpKToob2k9V24ob2kpLG51bGwhPT1wbiYmdy5pc19kYXRlKHBuKSYmKG9pPWh0KG9pKSkpLHR5cGVvZiBjcHRhYmxl'@;
put 'PCJ1IiYmInN0cmluZyI9PXR5cGVvZiBvaSYmInN0cmluZyIhPShkdHx8e30pLnR5cGUmJihkdHx8e30pLmNvZGVwYWdlJiYob2k9Y3B0YWJsZS51dGlscy5kZWNvZGUoZHQuY29kZXBhZ2Usb2kpKSxraT0hMDticmVhaztjYXNlIkUiOnVyPSEwO3ZhciBycj1hZihabltrdF0uc2xpY2UoMSks'@;
put 'e3I6Y3QsYzpidH0pO1R0W2N0XVtidF09W1R0W2N0XVtidF0scnJdO2JyZWFrO2Nhc2UiUyI6UXI9ITAsVHRbY3RdW2J0XT1bVHRbY3RdW2J0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpBbj1wYXJzZUludChabltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7Y2FzZSJDIjp2cj1wYXJzZUludChabltr'@;
put 'dF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZihkdCYmZHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrdHIpfWlmKGtpJiYoVHRbY3RdW2J0XSYmMj09VHRbY3RdW2J0XS5sZW5ndGg/VHRbY3RdW2J0XVswXT1vaTpUdFtjdF1bYnRdPW9pLHBuPW51bGwpLFFy'@;
put 'KXtpZih1cil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUgb3duIGZvcm11bGEiKTt2YXIgU249QW4+LTEmJlR0W0FuXVt2cl07aWYoIVNufHwhU25bMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBmaW5kIGJhc2Ui'@;
put 'KTtUdFtjdF1bYnRdWzFdPWpDKFNuWzFdLHtyOmN0LUFuLGM6YnQtdnJ9KX1icmVhaztjYXNlIkYiOnZhciBncj0wO2ZvcihrdD0xO2t0PFpuLmxlbmd0aDsrK2t0KXN3aXRjaChabltrdF0uY2hhckF0KDApKXtjYXNlIlgiOmJ0PXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMSwrK2dyO2Jy'@;
put 'ZWFrO2Nhc2UiWSI6Zm9yKGN0PXBhcnNlSW50KFpuW2t0XS5zbGljZSgxKSktMSxlcj1UdC5sZW5ndGg7ZXI8PWN0OysrZXIpVHRbZXJdPVtdO2JyZWFrO2Nhc2UiTSI6a249cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQi'@;
put 'OmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpwbj1adFtwYXJzZUludChabltrdF0uc2xpY2UoMSkpXTticmVhaztjYXNlIlciOmZvcih6bj1abltrdF0uc2xpY2UoMSkuc3BsaXQoIiAiKSxlcj1wYXJzZUludCh6blswXSwxMCk7ZXI8PXBhcnNlSW50KHpuWzFdLDEwKTsrK2VyKWtuPXBhcnNlSW50'@;
put 'KHpuWzJdLDEwKSxxbltlci0xXT0wPT09a24/e2hpZGRlbjohMH06e3djaDprbn0scHUocW5bZXItMV0pO2JyZWFrO2Nhc2UiQyI6cW5bYnQ9cGFyc2VJbnQoWm5ba3RdLnNsaWNlKDEpKS0xXXx8KHFuW2J0XT17fSk7YnJlYWs7Y2FzZSJSIjp1bltjdD1wYXJzZUludChabltrdF0uc2xpY2Uo'@;
put 'MSkpLTFdfHwodW5bY3RdPXt9KSxrbj4wPyh1bltjdF0uaHB0PWtuLHVuW2N0XS5ocHg9VTEoa24pKTowPT09a24mJih1bltjdF0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKGR0JiZkdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIit0cil9Z3I8MSYmKHBuPW51'@;
put 'bGwpO2JyZWFrO2RlZmF1bHQ6aWYoZHQmJmR0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK3RyKX19cmV0dXJuIHVuLmxlbmd0aD4wJiYoS25bIiFyb3dzIl09dW4pLHFuLmxlbmd0aD4wJiYoS25bIiFjb2xzIl09cW4pLGR0JiZkdC5zaGVldFJvd3MmJihUdD1UdC5z'@;
put 'bGljZSgwLGR0LnNoZWV0Um93cykpLFtUdCxLbl19ZnVuY3Rpb24gX2UobnQsZHQpe3ZhciBDdD1mdW5jdGlvbiByZShudCxkdCl7c3dpdGNoKGR0LnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gZ2Uoc2UuZGVjb2RlKG50KSxkdCk7Y2FzZSJiaW5hcnkiOnJldHVybiBnZShudCxkdCk7Y2Fz'@;
put 'ZSJidWZmZXIiOnJldHVybiBnZShudC50b1N0cmluZygiYmluYXJ5IiksZHQpO2Nhc2UiYXJyYXkiOnJldHVybiBnZShQdChudCksZHQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitkdC50eXBlKX0obnQsZHQpLGJ0PUN0WzFdLEZ0PWsxKEN0WzBdLGR0KTtyZXR1cm4g'@;
put 'bHQoYnQpLmZvckVhY2goZnVuY3Rpb24oa3Qpe0Z0W2t0XT1idFtrdF19KSxGdH1mdW5jdGlvbiBTZShudCxkdCxDdCxjdCl7dmFyIGJ0PSJDO1kiKyhDdCsxKSsiO1giKyhjdCsxKSsiO0siO3N3aXRjaChudC50KXtjYXNlIm4iOmJ0Kz1udC52fHwwLG50LmYmJiFudC5GJiYoYnQrPSI7RSIr'@;
put 'SzkobnQuZix7cjpDdCxjOmN0fSkpO2JyZWFrO2Nhc2UiYiI6YnQrPW50LnY/IlRSVUUiOiJGQUxTRSI7YnJlYWs7Y2FzZSJlIjpidCs9bnQud3x8bnQudjticmVhaztjYXNlImQiOmJ0Kz0nIicrKG50Lnd8fG50LnYpKyciJzticmVhaztjYXNlInMiOmJ0Kz0nIicrbnQudi5yZXBsYWNlKC8i'@;
put 'L2csIiIpKyciJ31yZXR1cm4gYnR9cmV0dXJuIHlbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIHZlKG50LGR0KXtyZXR1cm4gRWQoX2UobnQsZHQpLGR0KX0sdG9fc2hlZXQ6X2UsZnJvbV9zaGVldDpmdW5jdGlvbiBHZShudCxkdCl7dmFyIEZ0LEN0PVsiSUQ7UFNoZWV0SlM7TjtF'@;
put 'Il0sY3Q9W10sYnQ9T2kobnRbIiFyZWYiXSksa3Q9QXJyYXkuaXNBcnJheShudCksVHQ9IlxyXG4iO0N0LnB1c2goIlA7UEdlbmVyYWwiKSxDdC5wdXNoKCJGO1AwO0RHMEc4O00yNTUiKSxudFsiIWNvbHMiXSYmZnVuY3Rpb24gSGUobnQsZHQpe2R0LmZvckVhY2goZnVuY3Rpb24oQ3QsY3Qp'@;
put 'e3ZhciBidD0iRjtXIisoY3QrMSkrIiAiKyhjdCsxKSsiICI7Q3QuaGlkZGVuP2J0Kz0iMCI6KCJudW1iZXIiPT10eXBlb2YgQ3Qud2lkdGgmJiFDdC53cHgmJihDdC53cHg9eGMoQ3Qud2lkdGgpKSwibnVtYmVyIj09dHlwZW9mIEN0LndweCYmIUN0LndjaCYmKEN0LndjaD10ZihDdC53cHgp'@;
put 'KSwibnVtYmVyIj09dHlwZW9mIEN0LndjaCYmKGJ0Kz1NYXRoLnJvdW5kKEN0LndjaCkpKSwiICIhPWJ0LmNoYXJBdChidC5sZW5ndGgtMSkmJm50LnB1c2goYnQpfSl9KEN0LG50WyIhY29scyJdKSxudFsiIXJvd3MiXSYmZnVuY3Rpb24gQmUobnQsZHQpe2R0LmZvckVhY2goZnVuY3Rpb24o'@;
put 'Q3QsY3Qpe3ZhciBidD0iRjsiO0N0LmhpZGRlbj9idCs9Ik0wOyI6Q3QuaHB0P2J0Kz0iTSIrMjAqQ3QuaHB0KyI7IjpDdC5ocHgmJihidCs9Ik0iKzIwKmoyKEN0LmhweCkrIjsiKSxidC5sZW5ndGg+MiYmbnQucHVzaChidCsiUiIrKGN0KzEpKX0pfShDdCxudFsiIXJvd3MiXSksQ3QucHVz'@;
put 'aCgiQjtZIisoYnQuZS5yLWJ0LnMucisxKSsiO1giKyhidC5lLmMtYnQucy5jKzEpKyI7RCIrW2J0LnMuYyxidC5zLnIsYnQuZS5jLGJ0LmUucl0uam9pbigiICIpKTtmb3IodmFyIFp0PWJ0LnMucjtadDw9YnQuZS5yOysrWnQpZm9yKHZhciBwbj1idC5zLmM7cG48PWJ0LmUuYzsrK3BuKXt2'@;
put 'YXIgS249ZGkoe3I6WnQsYzpwbn0pOyhGdD1rdD8obnRbWnRdfHxbXSlbcG5dOm50W0tuXSkmJihudWxsIT1GdC52fHxGdC5mJiYhRnQuRikmJmN0LnB1c2goU2UoRnQsMCxadCxwbikpfXJldHVybiBDdC5qb2luKFR0KStUdCtjdC5qb2luKFR0KStUdCsiRSIrVHR9fX0oKSxNMz1mdW5jdGlv'@;
put 'bigpe2Z1bmN0aW9uIFAoZ2UsX2Upe2Zvcih2YXIgdmU9Z2Uuc3BsaXQoIlxuIiksU2U9LTEsSGU9LTEsQmU9MCxHZT1bXTtCZSE9PXZlLmxlbmd0aDsrK0JlKWlmKCJCT1QiIT09dmVbQmVdLnRyaW0oKSl7aWYoIShTZTwwKSl7Zm9yKHZhciBudD12ZVtCZV0udHJpbSgpLnNwbGl0KCIsIiks'@;
put 'ZHQ9bnRbMF0sQ3Q9bnRbMV0sY3Q9dmVbKytCZV18fCIiOzEmKGN0Lm1hdGNoKC9bIl0vZyl8fFtdKS5sZW5ndGgmJkJlPHZlLmxlbmd0aC0xOyljdCs9IlxuIit2ZVsrK0JlXTtzd2l0Y2goY3Q9Y3QudHJpbSgpLCtkdCl7Y2FzZS0xOmlmKCJCT1QiPT09Y3Qpe0dlWysrU2VdPVtdLEhlPTA7'@;
put 'Y29udGludWV9aWYoIkVPRCIhPT1jdCl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBESUYgc3BlY2lhbCBjb21tYW5kICIrY3QpO2JyZWFrO2Nhc2UgMDpHZVtTZV1bSGVdPSJUUlVFIj09PWN0fHwiRkFMU0UiIT09Y3QmJihpc05hTihXbihDdCkpP2lzTmFOKGVuKEN0KS5nZXREYXRl'@;
put 'KCkpP0N0Okh0KEN0KTpXbihDdCkpLCsrSGU7YnJlYWs7Y2FzZSAxOihjdD0oY3Q9Y3Quc2xpY2UoMSxjdC5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJmN0Lm1hdGNoKC9ePSIuKiIkLykmJihjdD1jdC5zbGljZSgyLC0xKSksR2VbU2VdW0hlKytdPSIiIT09Y3Q/Y3Q6bnVsbH1p'@;
put 'ZigiRU9EIj09PWN0KWJyZWFrfX1lbHNlIEdlWysrU2VdPVtdLEhlPTA7cmV0dXJuIF9lJiZfZS5zaGVldFJvd3MmJihHZT1HZS5zbGljZSgwLF9lLnNoZWV0Um93cykpLEdlfWZ1bmN0aW9uIEwoZ2UsX2Upe3JldHVybiBrMShmdW5jdGlvbiB5KGdlLF9lKXtzd2l0Y2goX2UudHlwZSl7Y2Fz'@;
put 'ZSJiYXNlNjQiOnJldHVybiBQKHNlLmRlY29kZShnZSksX2UpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUChnZSxfZSk7Y2FzZSJidWZmZXIiOnJldHVybiBQKGdlLnRvU3RyaW5nKCJiaW5hcnkiKSxfZSk7Y2FzZSJhcnJheSI6cmV0dXJuIFAoUHQoZ2UpLF9lKX10aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'cmVjb2duaXplZCB0eXBlICIrX2UudHlwZSl9KGdlLF9lKSxfZSl9dmFyIGdlLF9lO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBRKGdlLF9lKXtyZXR1cm4gRWQoTChnZSxfZSksX2UpfSx0b19zaGVldDpMLGZyb21fc2hlZXQ6KGdlPWZ1bmN0aW9uKFNlLEhlLEJlLEdlLG50KXtTZS5w'@;
put 'dXNoKEhlKSxTZS5wdXNoKEJlKyIsIitHZSksU2UucHVzaCgnIicrbnQucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LF9lPWZ1bmN0aW9uKFNlLEhlLEJlLEdlKXtTZS5wdXNoKEhlKyIsIitCZSksU2UucHVzaCgxPT1IZT8nIicrR2UucmVwbGFjZSgvIi9nLCciIicpKyciJzpHZSl9LGZ1bmN0'@;
put 'aW9uKFNlKXt2YXIgR2UsSGU9W10sQmU9T2koU2VbIiFyZWYiXSksbnQ9QXJyYXkuaXNBcnJheShTZSk7Z2UoSGUsIlRBQkxFIiwwLDEsInNoZWV0anMiKSxnZShIZSwiVkVDVE9SUyIsMCxCZS5lLnItQmUucy5yKzEsIiIpLGdlKEhlLCJUVVBMRVMiLDAsQmUuZS5jLUJlLnMuYysxLCIiKSxn'@;
put 'ZShIZSwiREFUQSIsMCwwLCIiKTtmb3IodmFyIGR0PUJlLnMucjtkdDw9QmUuZS5yOysrZHQpe19lKEhlLC0xLDAsIkJPVCIpO2Zvcih2YXIgQ3Q9QmUucy5jO0N0PD1CZS5lLmM7KytDdCl7dmFyIGN0PWRpKHtyOmR0LGM6Q3R9KTtpZihHZT1udD8oU2VbZHRdfHxbXSlbQ3RdOlNlW2N0XSlz'@;
put 'd2l0Y2goR2UudCl7Y2FzZSJuIjp2YXIgYnQ9R2UudzshYnQmJm51bGwhPUdlLnYmJihidD1HZS52KSxudWxsPT1idD9fZShIZSwxLDAsR2UuZiYmIUdlLkY/Ij0iK0dlLmY6IiIpOl9lKEhlLDAsYnQsIlYiKTticmVhaztjYXNlImIiOl9lKEhlLDAsR2Uudj8xOjAsR2Uudj8iVFJVRSI6IkZB'@;
put 'TFNFIik7YnJlYWs7Y2FzZSJzIjpfZShIZSwxLDAsaXNOYU4oR2Uudik/R2UudjonPSInK0dlLnYrJyInKTticmVhaztjYXNlImQiOkdlLnd8fChHZS53PXcuZm9ybWF0KEdlLnp8fHcuX3RhYmxlWzE0XSxVZShIdChHZS52KSkpKSxfZShIZSwwLEdlLncsIlYiKTticmVhaztkZWZhdWx0Ol9l'@;
put 'KEhlLDEsMCwiIil9ZWxzZSBfZShIZSwxLDAsIiIpfX1yZXR1cm4gX2UoSGUsLTEsMCwiRU9EIiksSGUuam9pbigiXHJcbiIpfSl9fSgpLE80PWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShHZSl7cmV0dXJuIEdlLnJlcGxhY2UoL1xcYi9nLCJcXCIpLnJlcGxhY2UoL1xcYy9nLCI6IikucmVwbGFj'@;
put 'ZSgvXFxuL2csIlxuIil9ZnVuY3Rpb24gUChHZSl7cmV0dXJuIEdlLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVuY3Rpb24gUShHZSxudCl7cmV0dXJuIGsxKGZ1bmN0aW9uIEwoR2UsbnQpe2Zvcih2YXIgZHQ9R2Uuc3Bs'@;
put 'aXQoIlxuIiksQ3Q9LTEsY3Q9LTEsYnQ9MCxGdD1bXTtidCE9PWR0Lmxlbmd0aDsrK2J0KXt2YXIga3Q9ZHRbYnRdLnRyaW0oKS5zcGxpdCgiOiIpO2lmKCJjZWxsIj09PWt0WzBdKXt2YXIgVHQ9c3Moa3RbMV0pO2lmKEZ0Lmxlbmd0aDw9VHQucilmb3IoQ3Q9RnQubGVuZ3RoO0N0PD1UdC5y'@;
put 'OysrQ3QpRnRbQ3RdfHwoRnRbQ3RdPVtdKTtzd2l0Y2goQ3Q9VHQucixjdD1UdC5jLGt0WzJdKXtjYXNlInQiOkZ0W0N0XVtjdF09eShrdFszXSk7YnJlYWs7Y2FzZSJ2IjpGdFtDdF1bY3RdPStrdFszXTticmVhaztjYXNlInZ0ZiI6dmFyIFp0PWt0W2t0Lmxlbmd0aC0xXTtjYXNlInZ0YyI6'@;
put 'RnRbQ3RdW2N0XT0ibmwiPT09a3RbM10/ISEra3RbNF06K2t0WzRdLCJ2dGYiPT1rdFsyXSYmKEZ0W0N0XVtjdF09W0Z0W0N0XVtjdF0sWnRdKX19fXJldHVybiBudCYmbnQuc2hlZXRSb3dzJiYoRnQ9RnQuc2xpY2UoMCxudC5zaGVldFJvd3MpKSxGdH0oR2UsbnQpLG50KX12YXIgZ2U9WyJz'@;
put 'b2NpYWxjYWxjOnZlcnNpb246MS41IiwiTUlNRS1WZXJzaW9uOiAxLjAiLCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiXS5qb2luKCJcbiIpLF9lPVsiLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9s'@;
put 'U2F2ZSIsIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCJdLmpvaW4oIlxuIikrIlxuIix2ZT1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxTZT0iLS1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250'@;
put 'cm9sU2F2ZS0tIjtmdW5jdGlvbiBIZShHZSl7aWYoIUdlfHwhR2VbIiFyZWYiXSlyZXR1cm4iIjtmb3IodmFyIEN0LG50PVtdLGR0PVtdLGN0PSIiLGJ0PVdzKEdlWyIhcmVmIl0pLEZ0PUFycmF5LmlzQXJyYXkoR2UpLGt0PWJ0LnMucjtrdDw9YnQuZS5yOysra3QpZm9yKHZhciBUdD1idC5z'@;
put 'LmM7VHQ8PWJ0LmUuYzsrK1R0KWlmKGN0PWRpKHtyOmt0LGM6VHR9KSwoQ3Q9RnQ/KEdlW2t0XXx8W10pW1R0XTpHZVtjdF0pJiZudWxsIT1DdC52JiYieiIhPT1DdC50KXtzd2l0Y2goZHQ9WyJjZWxsIixjdCwidCJdLEN0LnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmR0LnB1c2goUChDdC52KSk7'@;
put 'YnJlYWs7Y2FzZSJuIjpDdC5mPyhkdFsyXT0idnRmIixkdFszXT0ibiIsZHRbNF09Q3QudixkdFs1XT1QKEN0LmYpKTooZHRbMl09InYiLGR0WzNdPUN0LnYpO2JyZWFrO2Nhc2UiYiI6ZHRbMl09InZ0IisoQ3QuZj8iZiI6ImMiKSxkdFszXT0ibmwiLGR0WzRdPUN0LnY/IjEiOiIwIixkdFs1'@;
put 'XT1QKEN0LmZ8fChDdC52PyJUUlVFIjoiRkFMU0UiKSk7YnJlYWs7Y2FzZSJkIjp2YXIgWnQ9VWUoSHQoQ3QudikpO2R0WzJdPSJ2dGMiLGR0WzNdPSJuZCIsZHRbNF09IiIrWnQsZHRbNV09Q3Qud3x8dy5mb3JtYXQoQ3Quenx8dy5fdGFibGVbMTRdLFp0KTticmVhaztjYXNlImUiOmNvbnRp'@;
put 'bnVlfW50LnB1c2goZHQuam9pbigiOiIpKX1yZXR1cm4gbnQucHVzaCgic2hlZXQ6YzoiKyhidC5lLmMtYnQucy5jKzEpKyI6cjoiKyhidC5lLnItYnQucy5yKzEpKyI6dHZmOjEiKSxudC5wdXNoKCJ2YWx1ZWZvcm1hdDoxOnRleHQtd2lraSIpLG50LmpvaW4oIlxuIil9cmV0dXJue3RvX3dv'@;
put 'cmtib29rOmZ1bmN0aW9uIHJlKEdlLG50KXtyZXR1cm4gRWQoUShHZSxudCksbnQpfSx0b19zaGVldDpRLGZyb21fc2hlZXQ6ZnVuY3Rpb24gQmUoR2Upe3JldHVybltnZSxfZSx2ZSxfZSxIZShHZSksU2VdLmpvaW4oIlxuIil9fX0oKSxCMT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoQmUsR2Us'@;
put 'bnQsZHQsQ3Qpe0N0LnJhdz9HZVtudF1bZHRdPUJlOiIiPT09QmV8fChHZVtudF1bZHRdPSRuKEJlLEN0KT8kbihCZSxDdCkudjpCZSl9dmFyIEw9ezQ0OiIsIiw5OiJcdCIsNTk6IjsifSxRPXs0NDozLDk6Miw1OToxfTtmdW5jdGlvbiByZShCZSl7Zm9yKHZhciBHZT17fSxudD0hMSxkdD0w'@;
put 'LEN0PTA7ZHQ8QmUubGVuZ3RoOysrZHQpMzQ9PShDdD1CZS5jaGFyQ29kZUF0KGR0KSk/bnQ9IW50OiFudCYmQ3QgaW4gTCYmKEdlW0N0XT0oR2VbQ3RdfHwwKSsxKTtmb3IoZHQgaW4gQ3Q9W10sR2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEdlLGR0KSYmQ3QucHVz'@;
put 'aChbR2VbZHRdLGR0XSk7aWYoIUN0Lmxlbmd0aClmb3IoZHQgaW4gR2U9USlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR2UsZHQpJiZDdC5wdXNoKFtHZVtkdF0sZHRdKTtyZXR1cm4gQ3Quc29ydChmdW5jdGlvbihjdCxidCl7cmV0dXJuIGN0WzBdLWJ0WzBdfHxRW2N0'@;
put 'WzFdXS1RW2J0WzFdXX0pLExbQ3QucG9wKClbMV1dfWZ1bmN0aW9uIF9lKEJlLEdlKXtyZXR1cm4hR2V8fCFHZS5QUk58fCJzZXA9Ij09QmUuc2xpY2UoMCw0KXx8QmUuaW5kZXhPZigiXHQiKT49MHx8QmUuaW5kZXhPZigiLCIpPj0wfHxCZS5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gZ2Uo'@;
put 'QmUsR2Upe3ZhciBudD1HZXx8e30sZHQ9IiI7bnVsbCE9dGUmJm51bGw9PW50LmRlbnNlJiYobnQuZGVuc2U9dGUpO3ZhciBDdD1udC5kZW5zZT9bXTp7fSxjdD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJzZXA9Ij09QmUuc2xpY2UoMCw0KT8xMz09QmUuY2hhckNvZGVBdCg1KSYmMTA9'@;
put 'PUJlLmNoYXJDb2RlQXQoNik/KGR0PUJlLmNoYXJBdCg0KSxCZT1CZS5zbGljZSg3KSk6MTM9PUJlLmNoYXJDb2RlQXQoNSl8fDEwPT1CZS5jaGFyQ29kZUF0KDUpPyhkdD1CZS5jaGFyQXQoNCksQmU9QmUuc2xpY2UoNikpOmR0PXJlKEJlLnNsaWNlKDAsMTAyNCkpOmR0PXJlKEJlLnNsaWNl'@;
put 'KDAsMTAyNCkpO3ZhciBidD0wLEZ0PTAsa3Q9MCxUdD0wLFp0PTAscG49ZHQuY2hhckNvZGVBdCgwKSxLbj0hMSx1bj0wLHFuPUJlLmNoYXJDb2RlQXQoMCk7QmU9QmUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKTt2YXIgem49bnVsbCE9bnQuZGF0ZU5GP2Z1bmN0aW9uIHhlKHkpe3ZhciBQPSJu'@;
put 'dW1iZXIiPT10eXBlb2YgeT93Ll90YWJsZVt5XTp5O3JldHVybiBQPVAucmVwbGFjZShmZSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrUCsiJCIpfShudC5kYXRlTkYpOm51bGw7ZnVuY3Rpb24ga24oKXt2YXIgZXI9QmUuc2xpY2UoVHQsWnQpLHRyPXt9O2lmKCciJz09ZXIuY2hhckF0KDAp'@;
put 'JiYnIic9PWVyLmNoYXJBdChlci5sZW5ndGgtMSkmJihlcj1lci5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1lci5sZW5ndGgpdHIudD0ieiI7ZWxzZSBpZihudC5yYXcpdHIudD0icyIsdHIudj1lcjtlbHNlIGlmKDA9PT1lci50cmltKCkubGVuZ3RoKXRyLnQ9InMiLHRy'@;
put 'LnY9ZXI7ZWxzZSBpZig2MT09ZXIuY2hhckNvZGVBdCgwKSkzND09ZXIuY2hhckNvZGVBdCgxKSYmMzQ9PWVyLmNoYXJDb2RlQXQoZXIubGVuZ3RoLTEpPyh0ci50PSJzIix0ci52PWVyLnNsaWNlKDIsLTEpLnJlcGxhY2UoLyIiL2csJyInKSk6ZnVuY3Rpb24gWDkoeSl7cmV0dXJuIDEhPXku'@;
put 'bGVuZ3RofShlcik/KHRyLnQ9Im4iLHRyLmY9ZXIuc2xpY2UoMSkpOih0ci50PSJzIix0ci52PWVyKTtlbHNlIGlmKCJUUlVFIj09ZXIpdHIudD0iYiIsdHIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PWVyKXRyLnQ9ImIiLHRyLnY9ITE7ZWxzZSBpZihpc05hTihrdD1XbihlcikpKWlmKCFpc05h'@;
put 'TihlbihlcikuZ2V0RGF0ZSgpKXx8em4mJmVyLm1hdGNoKHpuKSl7dHIuej1udC5kYXRlTkZ8fHcuX3RhYmxlWzE0XTt2YXIgWm49MDt6biYmZXIubWF0Y2goem4pJiYoZXI9ZnVuY3Rpb24gTGUoeSxQLEwpe3ZhciBRPS0xLHJlPS0xLGdlPS0xLF9lPS0xLHZlPS0xLFNlPS0xOyhQLm1hdGNo'@;
put 'KGZlKXx8W10pLmZvckVhY2goZnVuY3Rpb24oR2UsbnQpe3ZhciBkdD1wYXJzZUludChMW250KzFdLDEwKTtzd2l0Y2goR2UudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkpe2Nhc2UieSI6UT1kdDticmVhaztjYXNlImQiOmdlPWR0O2JyZWFrO2Nhc2UiaCI6X2U9ZHQ7YnJlYWs7Y2FzZSJzIjpT'@;
put 'ZT1kdDticmVhaztjYXNlIm0iOl9lPj0wP3ZlPWR0OnJlPWR0fX0pLFNlPj0wJiYtMT09dmUmJnJlPj0wJiYodmU9cmUscmU9LTEpO3ZhciBIZT0oIiIrKFE+PTA/UToobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkrIi0iKygiMDAiKyhyZT49MT9yZToxKSkuc2xpY2UoLTIp'@;
put 'KyItIisoIjAwIisoZ2U+PTE/Z2U6MSkpLnNsaWNlKC0yKTs3PT1IZS5sZW5ndGgmJihIZT0iMCIrSGUpLDg9PUhlLmxlbmd0aCYmKEhlPSIyMCIrSGUpO3ZhciBCZT0oIjAwIisoX2U+PTA/X2U6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKHZlPj0wP3ZlOjApKS5zbGljZSgtMikrIjoiKygi'@;
put 'MDAiKyhTZT49MD9TZTowKSkuc2xpY2UoLTIpO3JldHVybi0xPT1fZSYmLTE9PXZlJiYtMT09U2U/SGU6LTE9PVEmJi0xPT1yZSYmLTE9PWdlP0JlOkhlKyJUIitCZX0oMCxudC5kYXRlTkYsZXIubWF0Y2goem4pfHxbXSksWm49MSksbnQuY2VsbERhdGVzPyh0ci50PSJkIix0ci52PUh0KGVy'@;
put 'LFpuKSk6KHRyLnQ9Im4iLHRyLnY9VWUoSHQoZXIsWm4pKSksITEhPT1udC5jZWxsVGV4dCYmKHRyLnc9dy5mb3JtYXQodHIueix0ci52IGluc3RhbmNlb2YgRGF0ZT9VZSh0ci52KTp0ci52KSksbnQuY2VsbE5GfHxkZWxldGUgdHIuen1lbHNlIHRyLnQ9InMiLHRyLnY9ZXI7ZWxzZSB0ci50'@;
put 'PSJuIiwhMSE9PW50LmNlbGxUZXh0JiYodHIudz1lciksdHIudj1rdDtpZigieiI9PXRyLnR8fChudC5kZW5zZT8oQ3RbYnRdfHwoQ3RbYnRdPVtdKSxDdFtidF1bRnRdPXRyKTpDdFtkaSh7YzpGdCxyOmJ0fSldPXRyKSxxbj1CZS5jaGFyQ29kZUF0KFR0PVp0KzEpLGN0LmUuYzxGdCYmKGN0'@;
put 'LmUuYz1GdCksY3QuZS5yPGJ0JiYoY3QuZS5yPWJ0KSx1bj09cG4pKytGdDtlbHNlIGlmKEZ0PTAsKytidCxudC5zaGVldFJvd3MmJm50LnNoZWV0Um93czw9YnQpcmV0dXJuITB9ZTpmb3IoO1p0PEJlLmxlbmd0aDsrK1p0KXN3aXRjaCh1bj1CZS5jaGFyQ29kZUF0KFp0KSl7Y2FzZSAzNDoz'@;
put 'ND09PXFuJiYoS249IUtuKTticmVhaztjYXNlIHBuOmNhc2UgMTA6Y2FzZSAxMzppZighS24mJmtuKCkpYnJlYWsgZX1yZXR1cm4gWnQtVHQ+MCYma24oKSxDdFsiIXJlZiJdPU9vKGN0KSxDdH0oQmUsR2UpOmsxKGZ1bmN0aW9uIFAoQmUsR2Upe3ZhciBudD1HZXx8e30sZHQ9W107aWYoIUJl'@;
put 'fHwwPT09QmUubGVuZ3RoKXJldHVybiBkdDtmb3IodmFyIEN0PUJlLnNwbGl0KC9bXHJcbl0vKSxjdD1DdC5sZW5ndGgtMTtjdD49MCYmMD09PUN0W2N0XS5sZW5ndGg7KS0tY3Q7Zm9yKHZhciBidD0xMCxGdD0wLGt0PTA7a3Q8PWN0Oysra3QpLTE9PShGdD1DdFtrdF0uaW5kZXhPZigiICIp'@;
put 'KT9GdD1DdFtrdF0ubGVuZ3RoOkZ0KyssYnQ9TWF0aC5tYXgoYnQsRnQpO2ZvcihrdD0wO2t0PD1jdDsrK2t0KXtkdFtrdF09W107dmFyIFR0PTA7Zm9yKHkoQ3Rba3RdLnNsaWNlKDAsYnQpLnRyaW0oKSxkdCxrdCxUdCxudCksVHQ9MTtUdDw9KEN0W2t0XS5sZW5ndGgtYnQpLzEwKzE7KytU'@;
put 'dCl5KEN0W2t0XS5zbGljZShidCsxMCooVHQtMSksYnQrMTAqVHQpLnRyaW0oKSxkdCxrdCxUdCxudCl9cmV0dXJuIG50LnNoZWV0Um93cyYmKGR0PWR0LnNsaWNlKDAsbnQuc2hlZXRSb3dzKSksZHR9KEJlLEdlKSxHZSl9ZnVuY3Rpb24gdmUoQmUsR2Upe3ZhciBudD0iIixkdD0ic3RyaW5n'@;
put 'Ij09R2UudHlwZT9bMCwwLDAsMF06Zl8oQmUsR2UpO3N3aXRjaChHZS50eXBlKXtjYXNlImJhc2U2NCI6bnQ9c2UuZGVjb2RlKEJlKTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOm50PUJlO2JyZWFrO2Nhc2UiYnVmZmVyIjpudD02NTAwMT09R2UuY29kZXBhZ2U/QmUudG9TdHJp'@;
put 'bmcoInV0ZjgiKTpHZS5jb2RlcGFnZSYmdHlwZW9mIGNwdGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKEdlLmNvZGVwYWdlLEJlKTpCZS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6bnQ9UHQoQmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJl'@;
put 'Y29nbml6ZWQgdHlwZSAiK0dlLnR5cGUpfXJldHVybiAyMzk9PWR0WzBdJiYxODc9PWR0WzFdJiYxOTE9PWR0WzJdP250PVBpKG50LnNsaWNlKDMpKToiYmluYXJ5Ij09R2UudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZHZS5jb2RlcGFnZSYmKG50PWNwdGFibGUudXRpbHMuZGVjb2RlKEdl'@;
put 'LmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4NTkxLG50KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09bnQuc2xpY2UoMCwxOSk/TzQudG9fc2hlZXQoInN0cmluZyI9PUdlLnR5cGU/bnQ6UGkobnQpLEdlKTpfZShudCxHZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFNl'@;
put 'KEJlLEdlKXtyZXR1cm4gRWQodmUoQmUsR2UpLEdlKX0sdG9fc2hlZXQ6dmUsZnJvbV9zaGVldDpmdW5jdGlvbiBIZShCZSl7Zm9yKHZhciBkdCxHZT1bXSxudD1PaShCZVsiIXJlZiJdKSxDdD1BcnJheS5pc0FycmF5KEJlKSxjdD1udC5zLnI7Y3Q8PW50LmUucjsrK2N0KXtmb3IodmFyIGJ0'@;
put 'PVtdLEZ0PW50LnMuYztGdDw9bnQuZS5jOysrRnQpe3ZhciBrdD1kaSh7cjpjdCxjOkZ0fSk7aWYoKGR0PUN0PyhCZVtjdF18fFtdKVtGdF06QmVba3RdKSYmbnVsbCE9ZHQudil7Zm9yKHZhciBUdD0oZHQud3x8KGN1KGR0KSxkdC53KXx8IiIpLnNsaWNlKDAsMTApO1R0Lmxlbmd0aDwxMDsp'@;
put 'VHQrPSIgIjtidC5wdXNoKFR0KygwPT09RnQ/IiAiOiIiKSl9ZWxzZSBidC5wdXNoKCIgICAgICAgICAgIil9R2UucHVzaChidC5qb2luKCIiKSl9cmV0dXJuIEdlLmpvaW4oIlxuIil9fX0oKSxUbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHkoQW4sdnIscnIpe2lmKEFuKXtvbChBbixBbi5sfHww'@;
put 'KTtmb3IodmFyIFNuPXJyLkVudW18fFFyO0FuLmw8QW4ubGVuZ3RoOyl7dmFyIGdyPUFuLnJlYWRfc2hpZnQoMiksQ2k9U25bZ3JdfHxTbls2NTUzNV0senI9QW4ucmVhZF9zaGlmdCgyKSxqaT1Bbi5sK3pyLF9vPUNpLmYmJkNpLmYoQW4senIscnIpO2lmKEFuLmw9amksdnIoX28sQ2ksZ3Ip'@;
put 'KXJldHVybn19fWZ1bmN0aW9uIEwoQW4sdnIpe2lmKCFBbilyZXR1cm4gQW47dmFyIHJyPXZyfHx7fTtudWxsIT10ZSYmbnVsbD09cnIuZGVuc2UmJihyci5kZW5zZT10ZSk7dmFyIFNuPXJyLmRlbnNlP1tdOnt9LGdyPSJTaGVldDEiLENpPTAsenI9e30samk9W2dyXSxfbz1bXSxEaT17czp7'@;
put 'cjowLGM6MH0sZTp7cjowLGM6MH19LFlvPXJyLnNoZWV0Um93c3x8MDtpZigyPT1BblsyXSlyci5FbnVtPVFyLHkoQW4sZnVuY3Rpb24oaGksdGEsTW4pe3N3aXRjaChNbil7Y2FzZSAwOnJyLnZlcnM9aGksaGk+PTQwOTYmJihyci5xcHJvPSEwKTticmVhaztjYXNlIDY6RGk9aGk7YnJlYWs7'@;
put 'Y2FzZSAxNTpjYXNlIDUxOnJyLnFwcm98fChoaVsxXS52PWhpWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OjE0PT1NbiYmMTEyPT0oMTEyJmhpWzJdKSYmKDE1JmhpWzJdKT4xJiYoMTUmaGlbMl0pPDE1JiYoaGlbMV0uej1yci5kYXRlTkZ8fHcuX3RhYmxlWzE0XSxy'@;
put 'ci5jZWxsRGF0ZXMmJihoaVsxXS50PSJkIixoaVsxXS52PWh0KGhpWzFdLnYpKSk7dmFyIE1zPXJyLmRlbnNlPyhTbltoaVswXS5yXXx8W10pW2hpWzBdLmNdOlNuW2RpKGhpWzBdKV07aWYoTXMpe01zLnQ9aGlbMV0udCxNcy52PWhpWzFdLnYsbnVsbCE9aGlbMV0ueiYmKE1zLno9aGlbMV0u'@;
put 'eiksbnVsbCE9aGlbMV0uZiYmKE1zLmY9aGlbMV0uZik7YnJlYWt9cnIuZGVuc2U/KFNuW2hpWzBdLnJdfHwoU25baGlbMF0ucl09W10pLFNuW2hpWzBdLnJdW2hpWzBdLmNdPWhpWzFdKTpTbltkaShoaVswXSldPWhpWzFdfX0scnIpO2Vsc2V7aWYoMjYhPUFuWzJdJiYxNCE9QW5bMl0pdGhy'@;
put 'b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9GICIrQW5bMl0pO3JyLkVudW09dXIsMTQ9PUFuWzJdJiYocnIucXBybz0hMCxBbi5sPTApLHkoQW4sZnVuY3Rpb24oaGksdGEsTW4pe3N3aXRjaChNbil7Y2FzZSAyMjpoaVsxXS52PWhpWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpj'@;
put 'YXNlIDI0OmNhc2UgMjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2UgNDA6aWYoaGlbM10+Q2kmJihTblsiIXJlZiJdPU9vKERpKSx6cltncl09U24sU249cnIuZGVuc2U/W106e30sRGk9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxqaS5wdXNoKGdyPSJTaGVldCIrKChDaT1oaVszXSkrMSkpKSxZ'@;
put 'bz4wJiZoaVswXS5yPj1ZbylicmVhaztyci5kZW5zZT8oU25baGlbMF0ucl18fChTbltoaVswXS5yXT1bXSksU25baGlbMF0ucl1baGlbMF0uY109aGlbMV0pOlNuW2RpKGhpWzBdKV09aGlbMV0sRGkuZS5jPGhpWzBdLmMmJihEaS5lLmM9aGlbMF0uYyksRGkuZS5yPGhpWzBdLnImJihEaS5l'@;
put 'LnI9aGlbMF0ucik7YnJlYWs7Y2FzZSAyNzpoaVsxNGUzXSYmKF9vW2hpWzE0ZTNdWzBdXT1oaVsxNGUzXVsxXSl9fSxycil9aWYoU25bIiFyZWYiXT1PbyhEaSksenJbZ3JdPVNuLCFfby5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6amksU2hlZXRzOnpyfTtmb3IodmFyIGxvPXt9LEFvPVtd'@;
put 'LHhvPTA7eG88X28ubGVuZ3RoOysreG8penJbamlbeG9dXSYmKEFvLnB1c2goX29beG9dKSxsb1tfb1t4b11dPXpyW2ppW3hvXV0pO3JldHVybntTaGVldE5hbWVzOkFvLFNoZWV0czpsb319ZnVuY3Rpb24gSGUoQW4sdnIscnIpe3ZhciBTbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3Jl'@;
put 'dHVybiByci5xcHJvJiYyMDc2OCE9cnIudmVycz8oU25bMF0uYz1Bbi5yZWFkX3NoaWZ0KDEpLEFuLmwrKyxTblswXS5yPUFuLnJlYWRfc2hpZnQoMiksQW4ubCs9Mik6KFNuWzJdPUFuLnJlYWRfc2hpZnQoMSksU25bMF0uYz1Bbi5yZWFkX3NoaWZ0KDIpLFNuWzBdLnI9QW4ucmVhZF9zaGlm'@;
put 'dCgyKSksU259ZnVuY3Rpb24gQmUoQW4sdnIscnIpe3ZhciBTbj1Bbi5sK3ZyLGdyPUhlKEFuLDAscnIpO2lmKGdyWzFdLnQ9InMiLDIwNzY4PT1yci52ZXJzKXtBbi5sKys7dmFyIENpPUFuLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGdyWzFdLnY9QW4ucmVhZF9zaGlmdChDaSwidXRmOCIpLGdy'@;
put 'fXJldHVybiByci5xcHJvJiZBbi5sKyssZ3JbMV0udj1Bbi5yZWFkX3NoaWZ0KFNuLUFuLmwsImNzdHIiKSxncn1mdW5jdGlvbiBHZShBbix2cixycil7dmFyIFNuPWZyKDcrcnIubGVuZ3RoKTtTbi53cml0ZV9zaGlmdCgxLDI1NSksU24ud3JpdGVfc2hpZnQoMix2ciksU24ud3JpdGVfc2hp'@;
put 'ZnQoMixBbiksU24ud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBncj0wO2dyPFNuLmxlbmd0aDsrK2dyKXt2YXIgQ2k9cnIuY2hhckNvZGVBdChncik7U24ud3JpdGVfc2hpZnQoMSxDaT49MTI4Pzk1OkNpKX1yZXR1cm4gU24ud3JpdGVfc2hpZnQoMSwwKSxTbn1mdW5jdGlvbiBkdChBbix2'@;
put 'cixycil7dmFyIFNuPWZyKDcpO3JldHVybiBTbi53cml0ZV9zaGlmdCgxLDI1NSksU24ud3JpdGVfc2hpZnQoMix2ciksU24ud3JpdGVfc2hpZnQoMixBbiksU24ud3JpdGVfc2hpZnQoMixyciwiaSIpLFNufWZ1bmN0aW9uIGN0KEFuLHZyLHJyKXt2YXIgU249ZnIoMTMpO3JldHVybiBTbi53'@;
put 'cml0ZV9zaGlmdCgxLDI1NSksU24ud3JpdGVfc2hpZnQoMix2ciksU24ud3JpdGVfc2hpZnQoMixBbiksU24ud3JpdGVfc2hpZnQoOCxyciwiZiIpLFNufWZ1bmN0aW9uIEZ0KEFuLHZyLHJyKXt2YXIgU249MzI3NjgmdnI7cmV0dXJuIHZyPShTbj9BbjowKSsoKHZyJj0tMzI3NjkpPj04MTky'@;
put 'P3ZyLTE2Mzg0OnZyKSwoU24/IiI6IiQiKSsocnI/TnModnIpOkhzKHZyKSl9dmFyIFR0PXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0Olsi'@;
put 'TUFYQSIsNjldLDExMTpbIlQiLDFdfSxadD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8iLCJeIiwiPSIsIjw+IiwiPD0iLCI+PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIEtuKEFuKXt2YXIgdnI9W3tj'@;
put 'OjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gdnJbMF0ucj1Bbi5yZWFkX3NoaWZ0KDIpLHZyWzNdPUFuW0FuLmwrK10sdnJbMF0uYz1BbltBbi5sKytdLHZyfWZ1bmN0aW9uIHFuKEFuLHZyLHJyLFNuKXt2YXIgZ3I9ZnIoNitTbi5sZW5ndGgpO2dyLndyaXRlX3NoaWZ0KDIsQW4pLGdy'@;
put 'LndyaXRlX3NoaWZ0KDEscnIpLGdyLndyaXRlX3NoaWZ0KDEsdnIpLGdyLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgQ2k9MDtDaTxTbi5sZW5ndGg7KytDaSl7dmFyIHpyPVNuLmNoYXJDb2RlQXQoQ2kpO2dyLndyaXRlX3NoaWZ0KDEsenI+PTEyOD85NTp6cil9cmV0dXJuIGdyLndyaXRl'@;
put 'X3NoaWZ0KDEsMCksZ3J9ZnVuY3Rpb24ga24oQW4sdnIpe3ZhciBycj1LbihBbiksU249QW4ucmVhZF9zaGlmdCg0KSxncj1Bbi5yZWFkX3NoaWZ0KDQpLENpPUFuLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PUNpKXJldHVybiAwPT09U24mJjMyMjEyMjU0NzI9PT1ncj8ocnJbMV0udD0iZSIs'@;
put 'cnJbMV0udj0xNSk6MD09PVNuJiYzNDg5NjYwOTI4PT09Z3I/KHJyWzFdLnQ9ImUiLHJyWzFdLnY9NDIpOnJyWzFdLnY9MCxycjt2YXIgenI9MzI3NjgmQ2k7cmV0dXJuIENpPSgzMjc2NyZDaSktMTY0NDYscnJbMV0udj0oMS0yKnpyKSooZ3IqTWF0aC5wb3coMixDaSszMikrU24qTWF0aC5w'@;
put 'b3coMixDaSkpLHJyfWZ1bmN0aW9uIGVyKEFuLHZyLHJyLFNuKXt2YXIgZ3I9ZnIoMTQpO2lmKGdyLndyaXRlX3NoaWZ0KDIsQW4pLGdyLndyaXRlX3NoaWZ0KDEscnIpLGdyLndyaXRlX3NoaWZ0KDEsdnIpLDA9PVNuKXJldHVybiBnci53cml0ZV9zaGlmdCg0LDApLGdyLndyaXRlX3NoaWZ0'@;
put 'KDQsMCksZ3Iud3JpdGVfc2hpZnQoMiw2NTUzNSksZ3I7dmFyIENpPTAsenI9MCxfbz0wO3JldHVybiBTbjwwJiYoQ2k9MSxTbj0tU24pLHpyPTB8TWF0aC5sb2cyKFNuKSwyMTQ3NDgzNjQ4Jihfbz0oU24vPU1hdGgucG93KDIsenItMzEpKT4+PjApfHwoKyt6cixfbz0oU24vPTIpPj4+MCks'@;
put 'U24tPV9vLF9vfD0yMTQ3NDgzNjQ4LF9vPj4+PTAsU24qPU1hdGgucG93KDIsMzIpLGdyLndyaXRlX3NoaWZ0KDQsU24+Pj4wKSxnci53cml0ZV9zaGlmdCg0LF9vKSxnci53cml0ZV9zaGlmdCgyLHpyKz0xNjM4MysoQ2k/MzI3Njg6MCkpLGdyfWZ1bmN0aW9uIEJyKEFuLHZyKXt2YXIgcnI9'@;
put 'S24oQW4pLFNuPUFuLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVybiByclsxXS52PVNuLHJyfWZ1bmN0aW9uIExpKEFuLHZyKXt2YXIgcnI9ZnIoNStBbi5sZW5ndGgpO3JyLndyaXRlX3NoaWZ0KDIsMTRlMykscnIud3JpdGVfc2hpZnQoMix2cik7Zm9yKHZhciBTbj0wO1NuPEFuLmxlbmd0aDsr'@;
put 'K1NuKXt2YXIgZ3I9QW4uY2hhckNvZGVBdChTbik7cnJbcnIubCsrXT1ncj4xMjc/OTU6Z3J9cmV0dXJuIHJyW3JyLmwrK109MCxycn12YXIgUXI9ezA6e246IkJPRiIsZjpobH0sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6'@;
put 'e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiB2ZShBbil7dmFyIHZyPXtzOntjOjAscjowfSxlOntjOjAscjowfX07cmV0dXJuIHZyLnMuYz1Bbi5yZWFkX3NoaWZ0KDIpLHZyLnMucj1Bbi5yZWFkX3NoaWZ0KDIpLHZyLmUuYz1Bbi5yZWFkX3NoaWZ0KDIpLHZyLmUucj1Bbi5y'@;
put 'ZWFkX3NoaWZ0KDIpLDY1NTM1PT12ci5zLmMmJih2ci5zLmM9dnIuZS5jPXZyLnMucj12ci5lLnI9MCksdnJ9fSw3OntuOiJXSU5ET1cxIn0sODp7bjoiQ09MVzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRF'@;
put 'R0VSIixmOmZ1bmN0aW9uIG50KEFuLHZyLHJyKXt2YXIgU249SGUoQW4sMCxycik7cmV0dXJuIFNuWzFdLnY9QW4ucmVhZF9zaGlmdCgyLCJpIiksU259fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIEN0KEFuLHZyLHJyKXt2YXIgU249SGUoQW4sMCxycik7cmV0dXJuIFNuWzFdLnY9QW4u'@;
put 'cmVhZF9zaGlmdCg4LCJmIiksU259fSwxNTp7bjoiTEFCRUwiLGY6QmV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIGJ0KEFuLHZyLHJyKXt2YXIgU249QW4ubCt2cixncj1IZShBbiwwLHJyKTtpZihnclsxXS52PUFuLnJlYWRfc2hpZnQoOCwiZiIpLHJyLnFwcm8pQW4ubD1TbjtlbHNl'@;
put 'e3ZhciBDaT1Bbi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBwbihBbix2cil7b2woQW4sMCk7Zm9yKHZhciBycj1bXSxTbj0wLGdyPSIiLENpPSIiO0FuLmw8QW4ubGVuZ3RoOyl7dmFyIHpyPUFuW0FuLmwrK107c3dpdGNoKHpyKXtjYXNlIDA6cnIucHVzaChBbi5yZWFkX3NoaWZ0KDgsImYi'@;
put 'KSk7YnJlYWs7Y2FzZSAxOkNpPUZ0KHZyWzBdLmMsQW4ucmVhZF9zaGlmdCgyKSwhMCksZ3I9RnQodnJbMF0ucixBbi5yZWFkX3NoaWZ0KDIpLCExKSxyci5wdXNoKENpK2dyKTticmVhaztjYXNlIDI6dmFyIGppPUZ0KHZyWzBdLmMsQW4ucmVhZF9zaGlmdCgyKSwhMCksX289RnQodnJbMF0u'@;
put 'cixBbi5yZWFkX3NoaWZ0KDIpLCExKTtDaT1GdCh2clswXS5jLEFuLnJlYWRfc2hpZnQoMiksITApLGdyPUZ0KHZyWzBdLnIsQW4ucmVhZF9zaGlmdCgyKSwhMSkscnIucHVzaChqaStfbysiOiIrQ2krZ3IpO2JyZWFrO2Nhc2UgMzppZihBbi5sPEFuLmxlbmd0aClyZXR1cm4gdm9pZCBjb25z'@;
put 'b2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5kIik7YnJlYWs7Y2FzZSA0OnJyLnB1c2goIigiK3JyLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSA1OnJyLnB1c2goQW4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgRGk9IiI7enI9QW5bQW4ubCsrXTspRGkrPVN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoenIpO3JyLnB1c2goJyInK0RpLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UgODpyci5wdXNoKCItIityci5wb3AoKSk7YnJlYWs7Y2FzZSAyMzpyci5wdXNoKCIrIityci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpyci5wdXNoKCJOT1QoIityci5w'@;
put 'b3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIgWW89cnIucG9wKCksbG89cnIucG9wKCk7cnIucHVzaChbIkFORCIsIk9SIl1benItMjBdKyIoIitsbysiLCIrWW8rIikiKTticmVhaztkZWZhdWx0OmlmKHpyPDMyJiZadFt6cl0pWW89cnIucG9wKCksbG89cnIucG9wKCkscnIu'@;
put 'cHVzaChsbytadFt6cl0rWW8pO2Vsc2V7aWYoIVR0W3pyXSlyZXR1cm4genI8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrenIudG9TdHJpbmcoMTYpKTp6cjw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIrenIudG9TdHJpbmcoMTYpKTp6cjw9'@;
put 'MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrenIudG9TdHJpbmcoMTYpKTp6cjw9MTE1P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBmdW5jdGlvbiBvcGNvZGUgIit6ci50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bj'@;
put 'b2RlICIrenIudG9TdHJpbmcoMTYpKTtpZig2OT09KFNuPVR0W3pyXVsxXSkmJihTbj1BbltBbi5sKytdKSxTbj5yci5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4Iit6ci50b1N0cmluZygxNikrIjp8Iityci5qb2luKCJ8IikrInwi'@;
put 'KTt2YXIgQW89cnIuc2xpY2UoLVNuKTtyci5sZW5ndGgtPVNuLHJyLnB1c2goVHRbenJdWzBdKyIoIitBby5qb2luKCIsIikrIikiKX19fTE9PXJyLmxlbmd0aD92clsxXS5mPSIiK3JyWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iityci5qb2luKCJ8IikrInwi'@;
put 'KX0pKEFuLnNsaWNlKEFuLmwsQW4ubCtDaSksZ3IpLEFuLmwrPUNpfXJldHVybiBncn19LDI0OntuOiJUQUJMRSJ9LDI1OntuOiJPUkFOR0UifSwyNjp7bjoiUFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwz'@;
put 'NTp7bjoiS1JBTkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5OntuOiJTRVRVUCJ9LDQwOntuOiJNQVJHSU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6'@;
put 'e246Ik5HUkFQSCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09SVzEyIn0sNTA6e246IldJTkRPVyJ9LDUxOntuOiJTVFJJTkciLGY6QmV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoi'@;
put 'UVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBSSU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1FIn0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntu'@;
put 'OiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFDUk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LHVyPXswOntuOiJCT0YifSwx'@;
put 'OntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNBTENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQVFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6'@;
put 'e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdS'@;
put 'QVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNFTEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVuY3Rpb24gdW4oQW4sdnIpe3ZhciBycj1LbihBbik7cmV0dXJuIHJyWzFdLnQ9InMiLHJyWzFdLnY9QW4ucmVhZF9zaGlmdCh2ci00LCJjc3RyIikscnJ9'@;
put 'fSwyMzp7bjoiTlVNQkVSMTciLGY6a259LDI0OntuOiJOVU1CRVIxOCIsZjpmdW5jdGlvbiB6bihBbix2cil7dmFyIHJyPUtuKEFuKTtyclsxXS52PUFuLnJlYWRfc2hpZnQoMik7dmFyIFNuPXJyWzFdLnY+PjE7aWYoMSZyclsxXS52KXN3aXRjaCg3JlNuKXtjYXNlIDA6U249NWUzKihTbj4+'@;
put 'Myk7YnJlYWs7Y2FzZSAxOlNuPTUwMCooU24+PjMpO2JyZWFrO2Nhc2UgMjpTbj0oU24+PjMpLzIwO2JyZWFrO2Nhc2UgMzpTbj0oU24+PjMpLzIwMDticmVhaztjYXNlIDQ6U249KFNuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OlNuPShTbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpTbj0oU24+PjMp'@;
put 'LzE2O2JyZWFrO2Nhc2UgNzpTbj0oU24+PjMpLzY0fXJldHVybiByclsxXS52PVNuLHJyfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiB0cihBbix2cil7dmFyIHJyPWtuKEFuKTtyZXR1cm4gQW4ubCs9dnItMTQscnJ9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQi'@;
put 'LGY6ZnVuY3Rpb24ga2koQW4sdnIpe2Zvcih2YXIgcnI9e30sU249QW4ubCt2cjtBbi5sPFNuOyl7dmFyIGdyPUFuLnJlYWRfc2hpZnQoMik7aWYoMTRlMz09Z3Ipe2Zvcihycltncl09WzAsIiJdLHJyW2dyXVswXT1Bbi5yZWFkX3NoaWZ0KDIpO0FuW0FuLmxdOylycltncl1bMV0rPVN0cmlu'@;
put 'Zy5mcm9tQ2hhckNvZGUoQW5bQW4ubF0pLEFuLmwrKztBbi5sKyt9fXJldHVybiBycn19LDI4OntuOiJEVExBQkVMTUlTQyJ9LDI5OntuOiJEVExBQkVMQ0VMTCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0Ontu'@;
put 'OiJISURERU5TSEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJOVU1CRVIyNSIsZjpmdW5jdGlvbiBabihBbix2cil7dmFyIHJyPUtuKEFuKSxTbj1Bbi5yZWFkX3NoaWZ0KDQpO3JldHVybiByclsxXS52PVNuPj42LHJyfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOkJyfSw0MDp7'@;
put 'bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIG9pKEFuLHZyKXt2YXIgcnI9QnIoQW4pO3JldHVybiBBbi5sKz12ci0xMCxycn19LDE0Mjp7bjoiPz8ifSwxNDc6e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwx'@;
put 'NTU6e246Ij8/In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8ifSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3Njp7bjoiPz8ifSwxNzc6e246Ij8/In0sMTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/'@;
put 'In0sMjAxOntuOiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8ifSwyNTY6e246Ij8/In0sMjU5OntuOiI/PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2Ontu'@;
put 'OiI/PyJ9LDI2Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcwOntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246Ij8/In0sMzg5OntuOiI/PyJ9LDM5MDp7bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUx'@;
put 'Njp7bjoiPz8ifSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQzOntuOiI/PyJ9LDY0NDp7bjoiPz8ifSw2NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8i'@;
put 'fSw2NjA6e246Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoiPz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9LDc2ODp7bjoiPz8ifSw3NzI6e246Ij8/In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3'@;
put 'OTY6e246Ij8/In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8ifSwyNjg4OntuOiI/PyJ9LDEwOTk4OntuOiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3No'@;
put 'ZWV0X3RvX3drMTpmdW5jdGlvbiBRKEFuLHZyKXt2YXIgcnI9dnJ8fHt9O2lmKCtyci5jb2RlcGFnZT49MCYmaigrcnIuY29kZXBhZ2UpLCJzdHJpbmciPT1yci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgU249d2MoKSxncj1PaShB'@;
put 'blsiIXJlZiJdKSxDaT1BcnJheS5pc0FycmF5KEFuKSx6cj1bXTtTaShTbiwwLGZ1bmN0aW9uIGdlKEFuKXt2YXIgdnI9ZnIoMik7cmV0dXJuIHZyLndyaXRlX3NoaWZ0KDIsQW4pLHZyfSgxMDMwKSksU2koU24sNixmdW5jdGlvbiBTZShBbil7dmFyIHZyPWZyKDgpO3JldHVybiB2ci53cml0'@;
put 'ZV9zaGlmdCgyLEFuLnMuYyksdnIud3JpdGVfc2hpZnQoMixBbi5zLnIpLHZyLndyaXRlX3NoaWZ0KDIsQW4uZS5jKSx2ci53cml0ZV9zaGlmdCgyLEFuLmUuciksdnJ9KGdyKSk7Zm9yKHZhciBqaT1nci5zLnI7amk8PWdyLmUucjsrK2ppKWZvcih2YXIgX289SHMoamkpLERpPWdyLnMuYztE'@;
put 'aTw9Z3IuZS5jOysrRGkpe2ppPT09Z3Iucy5yJiYoenJbRGldPU5zKERpKSk7dmFyIGxvPUNpPyhBbltqaV18fFtdKVtEaV06QW5benJbRGldK19vXTtsbyYmInoiIT1sby50JiYoIm4iPT1sby50PygwfGxvLnYpPT1sby52JiZsby52Pj0tMzI3NjgmJmxvLnY8PTMyNzY3P1NpKFNuLDEzLGR0'@;
put 'KGppLERpLGxvLnYpKTpTaShTbiwxNCxjdChqaSxEaSxsby52KSk6U2koU24sMTUsR2UoamksRGksY3UobG8pLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gU2koU24sMSksU24uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIHJlKEFuLHZyKXt2YXIgcnI9dnJ8fHt9O2lmKCtyci5jb2RlcGFn'@;
put 'ZT49MCYmaigrcnIuY29kZXBhZ2UpLCJzdHJpbmciPT1yci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2YXIgU249d2MoKTtTaShTbiwwLGZ1bmN0aW9uIF9lKEFuKXt2YXIgdnI9ZnIoMjYpO3ZyLndyaXRlX3NoaWZ0KDIsNDA5NiksdnIu'@;
put 'd3JpdGVfc2hpZnQoMiw0KSx2ci53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgcnI9MCxTbj0wLGdyPTAsQ2k9MDtDaTxBbi5TaGVldE5hbWVzLmxlbmd0aDsrK0NpKXt2YXIgamk9QW4uU2hlZXRzW0FuLlNoZWV0TmFtZXNbQ2ldXTtpZihqaSYmamlbIiFyZWYiXSl7Kytncjt2YXIgX289V3Mo'@;
put 'amlbIiFyZWYiXSk7cnI8X28uZS5yJiYocnI9X28uZS5yKSxTbjxfby5lLmMmJihTbj1fby5lLmMpfX1yZXR1cm4gdnIud3JpdGVfc2hpZnQoMixyciksdnIud3JpdGVfc2hpZnQoMSxnciksdnIud3JpdGVfc2hpZnQoMSxTbiksdnIud3JpdGVfc2hpZnQoMiwwKSx2ci53cml0ZV9zaGlmdCgy'@;
put 'LDApLHZyLndyaXRlX3NoaWZ0KDEsMSksdnIud3JpdGVfc2hpZnQoMSwyKSx2ci53cml0ZV9zaGlmdCg0LDApLHZyLndyaXRlX3NoaWZ0KDQsMCksdnJ9KEFuKSk7Zm9yKHZhciBncj0wLENpPTA7Z3I8QW4uU2hlZXROYW1lcy5sZW5ndGg7KytncikoQW4uU2hlZXRzW0FuLlNoZWV0TmFtZXNb'@;
put 'Z3JdXXx8e30pWyIhcmVmIl0mJlNpKFNuLDI3LExpKEFuLlNoZWV0TmFtZXNbZ3JdLENpKyspKTt2YXIgenI9MDtmb3IoZ3I9MDtncjxBbi5TaGVldE5hbWVzLmxlbmd0aDsrK2dyKXt2YXIgamk9QW4uU2hlZXRzW0FuLlNoZWV0TmFtZXNbZ3JdXTtpZihqaSYmamlbIiFyZWYiXSl7Zm9yKHZh'@;
put 'ciBfbz1PaShqaVsiIXJlZiJdKSxEaT1BcnJheS5pc0FycmF5KGppKSxZbz1bXSxsbz1fby5zLnI7bG88PV9vLmUucjsrK2xvKWZvcih2YXIgQW89SHMobG8pLHhvPV9vLnMuYzt4bzw9X28uZS5jOysreG8pe2xvPT09X28ucy5yJiYoWW9beG9dPU5zKHhvKSk7dmFyIHRhPURpPyhqaVtsb118'@;
put 'fFtdKVt4b106amlbWW9beG9dK0FvXTt0YSYmInoiIT10YS50JiYoIm4iPT10YS50P1NpKFNuLDIzLGVyKGxvLHhvLHpyLHRhLnYpKTpTaShTbiwyMixxbihsbyx4byx6cixjdSh0YSkuc2xpY2UoMCwyMzkpKSkpfSsrenJ9fXJldHVybiBTaShTbiwxKSxTbi5lbmQoKX0sdG9fd29ya2Jvb2s6'@;
put 'ZnVuY3Rpb24gUChBbix2cil7c3dpdGNoKHZyLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTChEKHNlLmRlY29kZShBbikpLHZyKTtjYXNlImJpbmFyeSI6cmV0dXJuIEwoRChBbiksdnIpO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4gTChBbix2cil9dGhyb3ciVW5zdXBwb3J0'@;
put 'ZWQgdHlwZSAiK3ZyLnR5cGV9fX0oKSxEbT1mdW5jdGlvbigpe3ZhciB5PXVsKCJ0IiksUD11bCgiclByIik7ZnVuY3Rpb24gTChnZSl7dmFyIF9lPWdlLm1hdGNoKHkpO2lmKCFfZSlyZXR1cm57dDoicyIsdjoiIn07dmFyIHZlPXt0OiJzIix2OnhyKF9lWzFdKX0sU2U9Z2UubWF0Y2goUCk7'@;
put 'cmV0dXJuIFNlJiYodmUucz1mdW5jdGlvbiBKdyh5KXt2YXIgUD17fSxMPXkubWF0Y2goJHQpLFE9MCxyZT0hMTtpZihMKWZvcig7USE9TC5sZW5ndGg7KytRKXt2YXIgZ2U9bG4oTFtRXSk7c3dpdGNoKGdlWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxl'@;
put 'eHRlbmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWdlLnZhbClicmVhaztjYXNlIjxzaGFkb3c+IjpjYXNlIjxzaGFkb3cvPiI6UC5zaGFkb3c9MTticmVhaztjYXNlIjwvc2hhZG93PiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1nZS52YWwpYnJlYWs7UC5jcD1JW3BhcnNlSW50'@;
put 'KGdlLnZhbCwxMCldO2JyZWFrO2Nhc2UiPG91dGxpbmUiOmlmKCFnZS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6UC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6UC5uYW1lPWdlLnZhbDticmVhaztjYXNlIjxz'@;
put 'eiI6UC5zej1nZS52YWw7YnJlYWs7Y2FzZSI8c3RyaWtlIjppZighZ2UudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+IjpQLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighZ2UudmFsKWJyZWFrO3N3aXRjaChnZS52YWwpe2Nh'@;
put 'c2UiZG91YmxlIjpQLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6UC51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpQLnVuZGVybGluZT0zNH1jYXNlIjx1PiI6Y2FzZSI8dS8+IjpQLnVuZGVybGluZXx8KFAudW5kZXJsaW5lPTEpO2Jy'@;
put 'ZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8YiI6aWYoIjAiPT1nZS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6UC5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWdlLnZhbClicmVhaztjYXNlIjxpPiI6Y2FzZSI8aS8+IjpQLml0YWxpYz0x'@;
put 'O2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOmdlLnJnYiYmKFAuY29sb3I9e3JnYjo4PT1nZS5yZ2IubGVuZ3RoP2dlLnJnYi5zbGljZSgyLDgpOigiMDAwMDAwIitnZS5yZ2IpLnNsaWNlKC02KX0pO2JyZWFrO2Nhc2UiPGZhbWlseSI6UC5mYW1pbHk9Z2UudmFsO2JyZWFr'@;
put 'O2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUiIT0oZ2UudmFsfHwibm9uZSIpJiYoUC52YWxpZ249Z2UudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztjYXNlIjxzY2hlbWUiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6'@;
put 'cmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1nZVswXS5jaGFyQ29kZUF0KDEpJiYhcmUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgcmljaCBmb3JtYXQgIitnZVswXSl9fXJldHVybiBQfShTZVsxXSkpLHZlfXZhciBRPS88KD86XHcr'@;
put 'Oik/cj4vZyxyZT0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlvbihfZSl7cmV0dXJuIF9lLnJlcGxhY2UoUSwiIikuc3BsaXQocmUpLm1hcChMKS5maWx0ZXIoZnVuY3Rpb24odmUpe3JldHVybiB2ZS52fSl9fSgpLGoxPXsxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZS1h'@;
put 'Y2NvdW50aW5nIiwzNDoiZG91YmxlLWFjY291bnRpbmcifSxrOT1mdW5jdGlvbigpe3ZhciBQPS8oXHJcbnxcbikvZztmdW5jdGlvbiBRKHJlKXt2YXIgZ2U9W1tdLHJlLnYsW11dO3JldHVybiByZS52PyhyZS5zJiZmdW5jdGlvbiBMKHJlLGdlLF9lKXt2YXIgdmU9W107cmUudW5kZXJsaW5l'@;
put 'JiZ2ZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiKSxyZS51bmRlcmxpbmU+MSYmdmUucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IitqMVtyZS51bmRlcmxpbmVdKyI7IikscmUuc3omJnZlLnB1c2goImZvbnQtc2l6ZToiK3JlLnN6KyJwdDsiKSxyZS5vdXRsaW5lJiZ2'@;
put 'ZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxyZS5zaGFkb3cmJnZlLnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLHJlLmNvbG9yJiZyZS5jb2xvci5yZ2ImJnZlLnB1c2goImNvbG9yOiAjIitPdShyZS5jb2xvci5yZ2IpKyI7IiksZ2UucHVzaCgnPHNwYW4gc3R5bGU9IicrdmUu'@;
put 'am9pbigiIikrJyI+JykscmUuYm9sZCYmKGdlLnB1c2goIjxiPiIpLF9lLnB1c2goIjwvYj4iKSkscmUuaXRhbGljJiYoZ2UucHVzaCgiPGk+IiksX2UucHVzaCgiPC9pPiIpKSxyZS5zdHJpa2UmJihnZS5wdXNoKCI8cz4iKSxfZS5wdXNoKCI8L3M+IikpO3ZhciBTZT1yZS52YWxpZ258fCIi'@;
put 'OyJzdXBlcnNjcmlwdCI9PVNlfHwic3VwZXIiPT1TZT9TZT0ic3VwIjoic3Vic2NyaXB0Ij09U2UmJihTZT0ic3ViIiksIiIhPVNlJiYoZ2UucHVzaCgiPCIrU2UrIj4iKSxfZS5wdXNoKCI8LyIrU2UrIj4iKSksX2UucHVzaCgiPC9zcGFuPiIpfShyZS5zLGdlWzBdLGdlWzJdKSxnZVswXS5q'@;
put 'b2luKCIiKStnZVsxXS5yZXBsYWNlKFAsIjxici8+IikrZ2VbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIGdlLm1hcChRKS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gSmgoeSl7cmV0dXJuIHkubWFwKGZ1bmN0aW9uKEwpe3JldHVybiBmdW5jdGlvbiBJbSh5KXt2'@;
put 'YXIgUD0iIixMPVtdO3JldHVybiB5LnMmJih5LnMuYm9sZCYmTC5wdXNoKCI8Yi8+IikseS5zLml0YWxpYyYmTC5wdXNoKCI8aS8+IikseS5zLnN0cmlrZSYmTC5wdXNoKCI8c3RyaWtlLz4iKSx5LnMudW5kZXJsaW5lJiZMLnB1c2goJzx1IHZhbD0iJysoam1beS5zLnVuZGVybGluZV18fCJz'@;
put 'aW5nbGUiKSsnIi8+JykseS5zLmNvbG9yJiZMLnB1c2goVWQoeS5zLmNvbG9yKSkseS5zLnN6JiZMLnB1c2goJzxzeiB2YWw9IicreS5zLnN6KyciLz4nKSx5LnMubmFtZSYmTC5wdXNoKCc8ckZvbnQgdmFsPSInK3kucy5uYW1lKyciLz4nKSwoInN1cGVyIj09eS5zLnZhbGlnbnx8InN1YiI9'@;
put 'PXkucy52YWxpZ24pJiZMLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK3kucy52YWxpZ24rJ3NjcmlwdCIvPicpKSxMLmxlbmd0aCYmKFArPSI8clByPiIrTC5qb2luKCIiKSsiPC9yUHI+IiksIjxyPiIrKFArPVNyKCJ0IixIcih5LnYpLG51bGwpKSsiPC9yPiJ9KEwpfSkuam9pbigiIil9dmFy'@;
put 'IFF3PS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLEE5PS88KD86XHcrOik/clxiW14+XSo+LyxUOT0vPCg/Olx3KzopP3JQaC4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIEQ5KHksUCl7dmFyIEw9IVB8fFAuY2VsbEhUTUwsUT17fTty'@;
put 'ZXR1cm4geT8oeS5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KFEudD14cihQaSh5LnNsaWNlKHkuaW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8oPzpcdys6KT90Pi8pWzBdfHwiIikpLFEucj1QaSh5KSxMJiYoUS5oPXJvKFEudCkpKTp5Lm1hdGNoKEE5KSYmKFEucj1QaSh5KSxR'@;
put 'LnQ9eHIoUGkoKHkucmVwbGFjZShUOSwiIikubWF0Y2goUXcpfHxbXSkuam9pbigiIikucmVwbGFjZSgkdCwiIikpKSxRLlI9RG0oUS5yKSxMJiYoUS5oPWs5KFEuUikpKSxRKTp7dDoiIn19dmFyIGVDPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyx0'@;
put 'Qz0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLG5DPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO0hpLlNTVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIjt2YXIgbEQ9L15c'@;
put 'c3xccyR8W1x0XG5ccl0vO2Z1bmN0aW9uIExtKHksUCl7aWYoIVAuYm9va1NTVClyZXR1cm4iIjt2YXIgTD1bQm5dO0xbTC5sZW5ndGhdPVNyKCJzc3QiLG51bGwse3htbG5zOmlzLm1haW5bMF0sY291bnQ6eS5Db3VudCx1bmlxdWVDb3VudDp5LlVuaXF1ZX0pO2Zvcih2YXIgUT0wO1EhPXku'@;
put 'bGVuZ3RoOysrUSlpZihudWxsIT15W1FdKXt2YXIgcmU9eVtRXSxnZT0iPHNpPiI7cmUucj9nZSs9cmUucjooZ2UrPSI8dCIscmUudHx8KHJlLnQ9IiIpLHJlLnQubWF0Y2gobEQpJiYoZ2UrPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxnZSs9Ij4iK0hyKHJlLnQpKyI8L3Q+IiksTFtMLmxl'@;
put 'bmd0aF09Z2UrPSI8L3NpPiJ9cmV0dXJuIEwubGVuZ3RoPjImJihMW0wubGVuZ3RoXT0iPC9zc3Q+IixMWzFdPUxbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEwuam9pbigiIil9dmFyIG9DPWZ1bmN0aW9uIEExKHksUCxMKXt2YXIgUT0xMys0KnkudC5sZW5ndGgscmU9eS5SJiZ5LlIubGVuZ3Ro'@;
put 'fHx5LnI7eS5yJiYoeS5SPURtKHkucikpLHJlJiYoUSs9NCs0KnkuUi5sZW5ndGgpO3ZhciBnZT0hMTtpZihudWxsPT1MJiYoZ2U9ITAsTD1mcihRKSksTC53cml0ZV9zaGlmdCgxLHJlPzE6MCksbmMoeS50LEwpLHJlKXtMLndyaXRlX3NoaWZ0KDQseS5SLmxlbmd0aCk7Zm9yKHZhciBfZT0w'@;
put 'LHZlPTA7dmU8eS5SLmxlbmd0aDsrK3ZlKXt2YXIgU2U9eS5SW3ZlXTtMLndyaXRlX3NoaWZ0KDIsX2UpLF9lKz0oU2Uudnx8IiIpLmxlbmd0aDt2YXIgSGU9U2Uucz9ndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlNlLnN9LFApOjA7TC53cml0ZV9zaGlmdCgyLFAu'@;
put 'Y2VsbFhmc1tIZV0uZm9udElkKX19cmV0dXJuIGdlP0wuc2xpY2UoMCxMLmwpOkx9O2Z1bmN0aW9uIHgzKHksUCl7dmFyIEw9d2MoKTt1aShMLCJCcnRCZWdpblNzdCIsZnVuY3Rpb24gaUMoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoOCkpLFAud3JpdGVfc2hpZnQoNCx5LkNvdW50KSxQLndyaXRl'@;
put 'X3NoaWZ0KDQseS5VbmlxdWUpLFB9KHkpKTtmb3IodmFyIFE9MDtRPHkubGVuZ3RoOysrUSl1aShMLCJCcnRTU1RJdGVtIixvQyh5W1FdLFApKTtyZXR1cm4gdWkoTCwiQnJ0RW5kU3N0IiksTC5lbmQoKX1mdW5jdGlvbiB4YSh5KXtpZih0eXBlb2YgY3B0YWJsZTwidSIpcmV0dXJuIGNwdGFi'@;
put 'bGUudXRpbHMuZW5jb2RlKFIseSk7Zm9yKHZhciBQPVtdLEw9eS5zcGxpdCgiIiksUT0wO1E8TC5sZW5ndGg7KytRKVBbUV09TFtRXS5jaGFyQ29kZUF0KDApO3JldHVybiBQfWZ1bmN0aW9uIEcwKHksUCl7dmFyIEw9e307cmV0dXJuIEwuTWFqb3I9eS5yZWFkX3NoaWZ0KDIpLEwuTWlub3I9'@;
put 'eS5yZWFkX3NoaWZ0KDIpLFA+PTQmJih5LmwrPVAtNCksTH1mdW5jdGlvbiBzQyh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5sK1AtNCxRPXt9LHJlPXkucmVhZF9zaGlmdCg0KSxnZT1bXTtyZS0tID4wOylnZS5wdXNoKHt0OnkucmVhZF9zaGlmdCg0KSx2OnkucmVhZF9zaGlm'@;
put 'dCgwLCJscHA0Iil9KTtpZihRLm5hbWU9eS5yZWFkX3NoaWZ0KDAsImxwcDQiKSxRLmNvbXBzPWdlLHkubCE9TCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIit5LmwrIiAhPSAiK0wpO3JldHVybiBRfWZ1bmN0aW9uIEk5KHksUCl7dmFyIEw9eS5sK1AsUT17fTtR'@;
put 'LkZsYWdzPTYzJnkucmVhZF9zaGlmdCg0KSx5LmwrPTQsUS5BbGdJRD15LnJlYWRfc2hpZnQoNCk7dmFyIHJlPSExO3N3aXRjaChRLkFsZ0lEKXtjYXNlIDI2MTI2OmNhc2UgMjYxMjc6Y2FzZSAyNjEyODpyZT0zNj09US5GbGFnczticmVhaztjYXNlIDI2NjI1OnJlPTQ9PSg1MiZRLkZsYWdz'@;
put 'KTticmVhaztjYXNlIDA6cmU9MTY9PVEuRmxhZ3N8fDQ9PVEuRmxhZ3N8fDM2PT1RLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK1EuQWxnSUR9aWYoIXJlKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBGbGFncy9BbGdJ'@;
put 'RCBtaXNtYXRjaCIpO3JldHVybiBRLkFsZ0lESGFzaD15LnJlYWRfc2hpZnQoNCksUS5LZXlTaXplPXkucmVhZF9zaGlmdCg0KSxRLlByb3ZpZGVyVHlwZT15LnJlYWRfc2hpZnQoNCkseS5sKz04LFEuQ1NQTmFtZT15LnJlYWRfc2hpZnQoTC15Lmw+PjEsInV0ZjE2bGUiKSx5Lmw9TCxRfWZ1'@;
put 'bmN0aW9uIFJtKHksUCl7dmFyIEw9e30sUT15LmwrUDtyZXR1cm4geS5sKz00LEwuU2FsdD15LnNsaWNlKHkubCx5LmwrMTYpLHkubCs9MTYsTC5WZXJpZmllcj15LnNsaWNlKHkubCx5LmwrMTYpLHkubCs9MTYseS5yZWFkX3NoaWZ0KDQpLEwuVmVyaWZpZXJIYXNoPXkuc2xpY2UoeS5sLFEp'@;
put 'LHkubD1RLEx9ZnVuY3Rpb24gZ1ooeSl7aWYoMzYhPSg2MyZ5LnJlYWRfc2hpZnQoNCkpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbkluZm8gbWlzbWF0Y2giKTt2YXIgTD15LnJlYWRfc2hpZnQoNCk7cmV0dXJue3Q6IlN0ZCIsaDpJOSh5LEwpLHY6Um0oeSx5Lmxlbmd0aC15LmwpfX1m'@;
put 'dW5jdGlvbiBoRCgpe3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGUiKX1mdW5jdGlvbiBtWih5KXt2YXIgUD1bInNhbHRTaXplIiwiYmxvY2tTaXplIiwia2V5Qml0cyIsImhhc2hTaXplIiwiY2lwaGVyQWxnb3JpdGhtIiwi'@;
put 'Y2lwaGVyQ2hhaW5pbmciLCJoYXNoQWxnb3JpdGhtIiwic2FsdFZhbHVlIl07eS5sKz00O3ZhciBMPXkucmVhZF9zaGlmdCh5Lmxlbmd0aC15LmwsInV0ZjgiKSxRPXt9O3JldHVybiBMLnJlcGxhY2UoJHQsZnVuY3Rpb24oZ2Upe3ZhciBfZT1sbihnZSk7c3dpdGNoKGpuKF9lWzBdKSl7Y2Fz'@;
put 'ZSI8P3htbCI6Y2FzZSI8ZW5jcnlwdGlvbiI6Y2FzZSI8L2VuY3J5cHRpb24+IjpjYXNlIjwva2V5RW5jcnlwdG9ycz4iOmNhc2UiPC9rZXlFbmNyeXB0b3I+IjpicmVhaztjYXNlIjxrZXlEYXRhIjpQLmZvckVhY2goZnVuY3Rpb24odmUpe1FbdmVdPV9lW3ZlXX0pO2JyZWFrO2Nhc2UiPGRh'@;
put 'dGFJbnRlZ3JpdHkiOlEuZW5jcnlwdGVkSG1hY0tleT1fZS5lbmNyeXB0ZWRIbWFjS2V5LFEuZW5jcnlwdGVkSG1hY1ZhbHVlPV9lLmVuY3J5cHRlZEhtYWNWYWx1ZTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3JzPiI6Y2FzZSI8a2V5RW5jcnlwdG9ycyI6US5lbmNzPVtdO2JyZWFrO2Nhc2Ui'@;
put 'PGtleUVuY3J5cHRvciI6US51cmk9X2UudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6US5lbmNzLnB1c2goX2UpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgX2VbMF19fSksUX1mdW5jdGlvbiBhQyh5KXt2YXIgTCxnZSxQPTAsUT14YSh5KSxyZT1RLmxlbmd0aCsxO2ZvcigoTD1HKHJlKSlb'@;
put 'MF09US5sZW5ndGgsZ2U9MTtnZSE9cmU7KytnZSlMW2dlXT1RW2dlLTFdO2ZvcihnZT1yZS0xO2dlPj0wOy0tZ2UpUD0oKDE2Mzg0JlA/MTowKXxQPDwxJjMyNzY3KV5MW2dlXTtyZXR1cm4gNTI4MTFeUH12YXIgZkQ9ZnVuY3Rpb24oKXt2YXIgeT1bMTg3LDI1NSwyNTUsMTg2LDI1NSwyNTUs'@;
put 'MTg1LDEyOCwwLDE5MCwxNSwwLDE5MSwxNSwwXSxQPVs1Nzg0MCw3NDM5LDUyMzgwLDMzOTg0LDQzNjQsMzYwMCw2MTkwMiwxMjYwNiw2MjU4LDU3NjU3LDU0Mjg3LDM0MDQxLDEwMjUyLDQzMzcwLDIwMTYzXSxMPVs0NDc5NiwxOTkyOSwzOTg1OCwxMDA1MywyMDEwNiw0MDIxMiwxMDc2MSwz'@;
put 'MTU4NSw2MzE3MCw2NDkzMyw2MDI2Nyw1MDkzNSw0MDM5OSwxMTE5OSwxNzc2MywzNTUyNiwxNDUzLDI5MDYsNTgxMiwxMTYyNCwyMzI0OCw4ODUsMTc3MCwzNTQwLDcwODAsMTQxNjAsMjgzMjAsNTY2NDAsNTUzNjksNDExMzksMjA4MDcsNDE2MTQsMjE4MjEsNDM2NDIsMTc2MjEsMjg0ODUs'@;
put 'NTY5NzAsNDQzNDEsMTkwMTksMzgwMzgsMTQ2MDUsMjkyMTAsNjAxOTUsNTA3OTEsNDAxNzUsMTA3NTEsMjE1MDIsNDMwMDQsMjQ1MzcsMTgzODcsMzY3NzQsMzk0OSw3ODk4LDE1Nzk2LDMxNTkyLDYzMTg0LDQ3MjAxLDI0ODAzLDQ5NjA2LDM3ODA1LDE0MjAzLDI4NDA2LDU2ODEyLDE3ODI0'@;
put 'LDM1NjQ4LDE2OTcsMzM5NCw2Nzg4LDEzNTc2LDI3MTUyLDQzNjAxLDE3NTM5LDM1MDc4LDU1NywxMTE0LDIyMjgsNDQ1NiwzMDM4OCw2MDc3Niw1MTk1MywzNDI0Myw3MDc5LDE0MTU4LDI4MzE2LDE0MTI4LDI4MjU2LDU2NTEyLDQzNDI1LDE3MjUxLDM0NTAyLDc1OTcsMTMxMDUsMjYyMTAs'@;
put 'NTI0MjAsMzUyNDEsODgzLDE3NjYsMzUzMiw0MTI5LDgyNTgsMTY1MTYsMzMwMzIsNDY1Nyw5MzE0LDE4NjI4XSxyZT1mdW5jdGlvbihfZSx2ZSl7cmV0dXJuIGZ1bmN0aW9uKF9lKXtyZXR1cm4gMjU1JihfZT4+MXxfZTw8Nyl9KF9lXnZlKX07cmV0dXJuIGZ1bmN0aW9uKHZlKXtmb3IodmFy'@;
put 'IFNlPXhhKHZlKSxIZT1mdW5jdGlvbihfZSl7Zm9yKHZhciB2ZT1QW19lLmxlbmd0aC0xXSxTZT0xMDQsSGU9X2UubGVuZ3RoLTE7SGU+PTA7LS1IZSlmb3IodmFyIEJlPV9lW0hlXSxHZT0wOzchPUdlOysrR2UpNjQmQmUmJih2ZV49TFtTZV0pLEJlKj0yLC0tU2U7cmV0dXJuIHZlfShTZSks'@;
put 'QmU9U2UubGVuZ3RoLEdlPUcoMTYpLG50PTA7MTYhPW50OysrbnQpR2VbbnRdPTA7dmFyIGN0O2ZvcigxPT0oMSZCZSkmJihHZVtCZV09cmUoeVswXSxIZT4+OCksR2VbLS1CZV09cmUoU2VbU2UubGVuZ3RoLTFdLDI1NSZIZSkpO0JlPjA7KUdlWy0tQmVdPXJlKFNlW0JlXSxIZT4+OCksR2Vb'@;
put 'LS1CZV09cmUoU2VbQmVdLDI1NSZIZSk7Zm9yKEJlPTE1LGN0PTE1LVNlLmxlbmd0aDtjdD4wOylHZVtCZV09cmUoeVtjdF0sSGU+PjgpLC0tY3QsR2VbLS1CZV09cmUoU2VbQmVdLDI1NSZIZSksLS1CZSwtLWN0O3JldHVybiBHZX19KCk7dmFyIE9tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShy'@;
put 'ZSxnZSl7c3dpdGNoKGdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUChzZS5kZWNvZGUocmUpLGdlKTtjYXNlImJpbmFyeSI6cmV0dXJuIFAocmUsZ2UpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gUChyZS50b1N0cmluZygiYmluYXJ5IiksZ2UpO2Nhc2UiYXJyYXkiOnJldHVybiBQKFB0KHJl'@;
put 'KSxnZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2dlLnR5cGUpfWZ1bmN0aW9uIFAocmUsZ2Upe3ZhciB2ZT0oZ2V8fHt9KS5kZW5zZT9bXTp7fTtpZighcmUubWF0Y2goL1xcdHJvd2QvKSl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7cmV0dXJu'@;
put 'IHZlWyIhcmVmIl09T28oe3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSksdmV9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEwocmUsZ2Upe3JldHVybiBFZCh5KHJlLGdlKSxnZSl9LHRvX3NoZWV0OnksZnJvbV9zaGVldDpmdW5jdGlvbiBRKHJlKXtmb3IodmFyIHZlLGdlPVsie1xccnRm'@;
put 'MVxcYW5zaSJdLF9lPU9pKHJlWyIhcmVmIl0pLFNlPUFycmF5LmlzQXJyYXkocmUpLEhlPV9lLnMucjtIZTw9X2UuZS5yOysrSGUpe2dlLnB1c2goIlxcdHJvd2RcXHRyYXV0b2ZpdDEiKTtmb3IodmFyIEJlPV9lLnMuYztCZTw9X2UuZS5jOysrQmUpZ2UucHVzaCgiXFxjZWxseCIrKEJlKzEp'@;
put 'KTtmb3IoZ2UucHVzaCgiXFxwYXJkXFxpbnRibCIpLEJlPV9lLnMuYztCZTw9X2UuZS5jOysrQmUpe3ZhciBHZT1kaSh7cjpIZSxjOkJlfSk7KHZlPVNlPyhyZVtIZV18fFtdKVtCZV06cmVbR2VdKSYmKG51bGwhPXZlLnZ8fHZlLmYmJiF2ZS5GKSYmKGdlLnB1c2goIiAiKyh2ZS53fHwoY3Uo'@;
put 'dmUpLHZlLncpKSksZ2UucHVzaCgiXFxjZWxsIikpfWdlLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBnZS5qb2luKCIiKSsifSJ9fX0oKTtmdW5jdGlvbiBlZih5KXt2YXIgUD15LnNsaWNlKCIjIj09PXlbMF0/MTowKS5zbGljZSgwLDYpO3JldHVybltwYXJzZUludChQLnNs'@;
put 'aWNlKDAsMiksMTYpLHBhcnNlSW50KFAuc2xpY2UoMiw0KSwxNikscGFyc2VJbnQoUC5zbGljZSg0LDYpLDE2KV19ZnVuY3Rpb24gejEoeSl7Zm9yKHZhciBQPTAsTD0xOzMhPVA7KytQKUw9MjU2KkwrKHlbUF0+MjU1PzI1NTp5W1BdPDA/MDp5W1BdKTtyZXR1cm4gTC50b1N0cmluZygxNiku'@;
put 'dG9VcHBlckNhc2UoKS5zbGljZSgxKX1mdW5jdGlvbiAkMCh5LFApe2lmKG51bGw9PXkpcmV0dXJuIG51bGwhPVA7aWYobnVsbD09UClyZXR1cm4hMDtpZigxPT15LmF1dG8mJjE9PVAuYXV0bylyZXR1cm4hMTtpZighIXkuYXV0byE9ISFQLmF1dG98fG51bGw9PXkudGhlbWUhPShudWxsPT1Q'@;
put 'LnRoZW1lKSlyZXR1cm4hMDtpZihudWxsIT15LnRoZW1lKXJldHVybiB5LnRoZW1lIT1QLnRoZW1lfHx5LnRpbnQhPVAudGludDtpZihudWxsPT15LnJnYiYmbnVsbD09UC5yZ2IpcmV0dXJuITE7dmFyIEw9eS5yZ2I7Im51bWJlciI9PXR5cGVvZiBMJiYoTD1MLnRvU3RyaW5nKDE2KSksTD1M'@;
put 'LnNsaWNlKC02KTt2YXIgUT1QLnJnYjtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFEmJihRPVEudG9TdHJpbmcoMTYpKSxRPVEuc2xpY2UoLTYpLEwudG9Mb3dlckNhc2UoKSE9US50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFBtKHksUCl7cmV0dXJuIG51bGw9PXk/bnVsbCE9UDpudWxsPT1QP251'@;
put 'bGwhPXk6eS5zdHlsZSE9UC5zdHlsZXx8JDAoeS5jb2xvcixQLmNvbG9yKX1mdW5jdGlvbiBCZCh5LFApe2lmKDA9PT1QKXJldHVybiB5O3ZhciBMPWZ1bmN0aW9uIHAwKHkpe3ZhciBQPXlbMF0vMjU1LEw9eVsxXS8yNTUsUT15WzJdLzI1NSxyZT1NYXRoLm1heChQLEwsUSksZ2U9TWF0aC5t'@;
put 'aW4oUCxMLFEpLF9lPXJlLWdlO2lmKDA9PT1fZSlyZXR1cm5bMCwwLFBdO3ZhciBTZSx2ZT0wLEhlPXJlK2dlO3N3aXRjaChTZT1fZS8oSGU+MT8yLUhlOkhlKSxyZSl7Y2FzZSBQOnZlPSgoTC1RKS9fZSs2KSU2O2JyZWFrO2Nhc2UgTDp2ZT0oUS1QKS9fZSsyO2JyZWFrO2Nhc2UgUTp2ZT0o'@;
put 'UC1MKS9fZSs0fXJldHVyblt2ZS82LFNlLEhlLzJdfShlZih5KSk7cmV0dXJuIExbMl09UDwwP0xbMl0qKDErUCk6MS0oMS1MWzJdKSooMS1QKSx6MShmdW5jdGlvbiBGNCh5KXt2YXIgU2UsTD15WzFdLFE9eVsyXSxyZT0yKkwqKFE8LjU/UToxLVEpLGdlPVEtcmUvMixfZT1bZ2UsZ2UsZ2Vd'@;
put 'LHZlPTYqeVswXTtpZigwIT09TClzd2l0Y2goMHx2ZSl7Y2FzZSAwOmNhc2UgNjpTZT1yZSp2ZSxfZVswXSs9cmUsX2VbMV0rPVNlO2JyZWFrO2Nhc2UgMTpfZVswXSs9U2U9cmUqKDItdmUpLF9lWzFdKz1yZTticmVhaztjYXNlIDI6U2U9cmUqKHZlLTIpLF9lWzFdKz1yZSxfZVsyXSs9U2U7'@;
put 'YnJlYWs7Y2FzZSAzOl9lWzFdKz1TZT1yZSooNC12ZSksX2VbMl0rPXJlO2JyZWFrO2Nhc2UgNDpTZT1yZSoodmUtNCksX2VbMl0rPXJlLF9lWzBdKz1TZTticmVhaztjYXNlIDU6X2VbMl0rPVNlPXJlKig2LXZlKSxfZVswXSs9cmV9Zm9yKHZhciBIZT0wOzMhPUhlOysrSGUpX2VbSGVdPU1h'@;
put 'dGgucm91bmQoMjU1Kl9lW0hlXSk7cmV0dXJuIF9lfShMKSl9dmFyIGxDPTYscGw9bEM7ZnVuY3Rpb24geGMoeSl7cmV0dXJuIE1hdGguZmxvb3IoKHkrTWF0aC5yb3VuZCgxMjgvcGwpLzI1NikqcGwpfWZ1bmN0aW9uIHRmKHkpe3JldHVybiBNYXRoLmZsb29yKCh5LTUpL3BsKjEwMCsuNSkv'@;
put 'MTAwfWZ1bmN0aW9uIGpkKHkpe3JldHVybiBNYXRoLnJvdW5kKCh5KnBsKzUpL3BsKjI1NikvMjU2fWZ1bmN0aW9uIHB1KHkpe3kuYmVzdEZpdCYmZGVsZXRlIHkuYmVzdEZpdCx5LndpZHRoPyh5LndweD14Yyh5LndpZHRoKSx5LndjaD10Zih5LndweCkseS5NRFc9cGwpOnkud3B4Pyh5Lndj'@;
put 'aD10Zih5LndweCkseS53aWR0aD1qZCh5LndjaCkseS5NRFc9cGwpOiJudW1iZXIiPT10eXBlb2YgeS53Y2gmJih5LndpZHRoPWpkKHkud2NoKSx5LndweD14Yyh5LndpZHRoKSx5Lk1EVz1wbCkseS5jdXN0b21XaWR0aCYmZGVsZXRlIHkuY3VzdG9tV2lkdGh9dmFyIEw5PTk2LG5mPUw5O2Z1'@;
put 'bmN0aW9uIGoyKHkpe3JldHVybiA3Mip5L25mfWZ1bmN0aW9uIFUxKHkpe3JldHVybiB5Km5mLzcyfWZ1bmN0aW9uIEZtKHkpe25mPXk9e29zeDo3Mix3aW46OTYsd2luMTAwOjk2LHdpbjEyNToxMjAsd2luMTUwOjE0NH1beV18fHl8fEw5LE5tPWcwW3ldfWZ1bmN0aW9uIEkzKHkpe3kuaHB4'@;
put 'P3kuaHB0PWoyKHkuaHB4KTp5LmhwdCYmKHkuaHB4PVUxKHkuaHB0KSl9dmFyIEg0PXtOb25lOiJub25lIixTb2xpZDoic29saWQiLEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0'@;
put 'U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFnQ3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3Ry'@;
put 'aXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRHcmlkIn0sX0Q9YmUoSDQpLHoyPXtvcmFuZ2U6MTY3NTM5MjAsYmxhY2s6MCxuYXZ5OjEyOCxibHVlOjI1NSxncmVlbjozMjc2OCx0ZWFsOjMyODk2LGxpbWU6'@;
put 'NjUyODAsYXF1YTo2NTUzNSxzaWx2ZXI6MTI2MzIyNTYsbWFyb29uOjgzODg2MDgscHVycGxlOjgzODg3MzYsb2xpdmU6ODQyMTM3NixncmF5Ojg0MjE1MDQscmVkOjE2NzExNjgwLGZ1Y2hzaWE6MTY3MTE5MzUseWVsbG93OjE2Nzc2OTYwLHdoaXRlOjE2Nzc3MjE1fTtmdW5jdGlvbiBONCh5'@;
put 'LFApe2lmKHkucmVwbGFjZSgiIyIsIiIpLm1hdGNoKC9eWzAtOWEtZkEtRl17Nn0kLykpcmV0dXJuIHBhcnNlSW50KHkucmVwbGFjZSgiIyIsIiIpLDE2KTtpZih6Mlt5XSlyZXR1cm4gejJbeV07dmFyIEw9eS5tYXRjaCgvcmdiXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxz'@;
put 'KlwpLyk7aWYoTClyZXR1cm4oK0xbMV08PDE2KSsoK0xbMl08PDgpKyArTFszXTtpZihMPXkubWF0Y2goL3JnYmFcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqKFxkKikvKSlyZXR1cm4gMCE9KExbNF0mJkxbNF0ubGVuZ3RoPjAmJitMWzRdfHwwKXx8K0xbMV0+MHx8K0xb'@;
put 'Ml0+MHx8K0xbM10+MD8oK0xbMV08PDE2KSsoK0xbMl08PDgpKyArTFszXTpQPy0xOjE2Nzc3MjE1O3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBIVE1MIGNvbG9yICIreSl9dmFyIGcwPXt9O2Z1bmN0aW9uIEhtKHkpe3k9eXx8OTY7dmFyIFA9e0NhbGlicmk6W10sQXJpYWw6W10sIlNwYXJr'@;
put 'YXNzZSBSZyI6W10sXHU1YjhiXHU0ZjUzOltdLFx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZjpbXSwiQ2VudHVyeSBHb3RoaWMiOltdfTtyZXR1cm4gUC5DYWxpYnJpWzExXT03LFAuQ2FsaWJyaVsxMl09ezcyOjYsOTY6OCwxMjA6MTAsMTQ0OjEyfVt5XXx8OCxQLkNhbGlicmlbMTNd'@;
put 'PTEwLFAuQ2FsaWJyaVsxNF09MTEsUC5DYWxpYnJpWzE2XT0xMixQLkNhbGlicmlbMThdPTE0LFAuQ2FsaWJyaVsyMF09MTYsUC5cdTViOGJcdTRmNTNbMTFdPTgsUC5cdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWZbMTFdPTgsUFsiU3Bhcmthc3NlIFJnIl1bMTFdPTcsUC5BcmlhbFsx'@;
put 'MF09NyxQWyJDZW50dXJ5IEdvdGhpYyJdWzEyXT05LFB9ZzBbNzJdPUhtKDcyKSxnMFs5Nl09SG0oOTYpLGcwWzEyMF09SG0oMTIwKSxnMFsxNDRdPUhtKDE0NCk7dmFyIE5tPWcwWzk2XTtmdW5jdGlvbiBWbSh5KXtyZXR1cm4oTm1beS5uYW1lfHx5LkZvbnROYW1lXXx8W10pW3kuc3p8fHku'@;
put 'U2l6ZV19ZnVuY3Rpb24gWjEoeSl7aWYoeSl7dmFyIFA9Vm0oeSk7aWYoUClyZXR1cm4gcGw9UH1yZXR1cm4gcGw9Nn1mdW5jdGlvbiBSOSh5LFAsTCl7cmV0dXJuIHoxKGZ1bmN0aW9uIHVDKHksUCxMKXtyZXR1cm5bTWF0aC5yb3VuZChQWzBdKkwreVswXSooMS1MKSksTWF0aC5yb3VuZChQ'@;
put 'WzFdKkwreVsxXSooMS1MKSksTWF0aC5yb3VuZChQWzJdKkwreVsyXSooMS1MKSldfShlZigibnVtYmVyIj09dHlwZW9mIHkucmdiPygiMDAwMDAiK3kudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6eS5yZ2IpLGVmKCJudW1iZXIiPT10eXBlb2YgUC5yZ2I/KCIwMDAwMCIrUC50b1N0cmluZygx'@;
put 'NikpLnNsaWNlKC02KTpQLnJnYiksTCkpfWZ1bmN0aW9uIEJtKHksUCxMKXtpZihMKXN3aXRjaCgreSl7Y2FzZSA2NDp5PTY1O2JyZWFrO2Nhc2UgNjU6eT02NH12YXIgUT1QJiZQWyt5XXx8Q3JbK3ldfHxOYVsreS0yMDBdO2lmKDgxPT0reSYmKFE9Q3JbMV0pLFF8fChRPUNyWzFdKSwhUSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoImJhZCBJQ1YgaW5kZXggIit5KTtyZXR1cm4gejEoUSl9ZnVuY3Rpb24gVTIoeSxQLEwpe3ZhciBRPXt9O3JldHVybiBudWxsIT15LmluZGV4ZWQmJihRLmluZGV4PXBhcnNlSW50KHkuaW5kZXhlZCwxMCksUS5yZ2I9Qm0oUS5pbmRleCxQLkluZGV4ZWQpKSxudWxs'@;
put 'IT15LnRoZW1lJiYoUS50aGVtZT1wYXJzZUludCh5LnRoZW1lLDEwKSksbnVsbCE9eS50aW50JiYoUS50aW50PXBhcnNlRmxvYXQoeS50aW50KSksbnVsbCE9eS5yZ2ImJihRLnJnYj15LnJnYi5zbGljZSgtNikpLG51bGwhPVEudGhlbWUmJiFRLnJnYiYmTC50aGVtZUVsZW1lbnRzJiYoUS5y'@;
put 'Z2I9QmQoTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtRLnRoZW1lXS5yZ2IsUS50aW50fHwwKSxRLnJhd19yZ2I9TC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtRLnRoZW1lXS5yZ2IpLFF9ZnVuY3Rpb24gTDMoeSxQLEwsUSl7UC5Cb3JkZXJzPVtdO3ZhciByZT17fSxnZT17fSxfZT0hMTso'@;
put 'eVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgU2U9bG4odmUpO3N3aXRjaChqbihTZVswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPC9sZWZ0PiI6'@;
put 'Y2FzZSI8cmlnaHQvPiI6Y2FzZSI8L3JpZ2h0PiI6Y2FzZSI8dG9wLz4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8L2JvdHRvbT4iOmNhc2UiPGRpYWdvbmFsIjpjYXNlIjxkaWFnb25hbD4iOmNhc2UiPGRpYWdvbmFsLz4iOmNhc2UiPGhvcml6b250YWwiOmNhc2UiPGhv'@;
put 'cml6b250YWw+IjpjYXNlIjxob3Jpem9udGFsLz4iOmNhc2UiPHZlcnRpY2FsIjpjYXNlIjx2ZXJ0aWNhbD4iOmNhc2UiPHZlcnRpY2FsLz4iOmNhc2UiPHN0YXJ0IjpjYXNlIjxzdGFydD4iOmNhc2UiPHN0YXJ0Lz4iOmNhc2UiPC9zdGFydD4iOmNhc2UiPGVuZCI6Y2FzZSI8ZW5kPiI6Y2Fz'@;
put 'ZSI8ZW5kLz4iOmNhc2UiPC9lbmQ+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxib3JkZXIiOmNhc2UiPGJvcmRlcj4iOmNhc2UiPGJvcmRlci8+IjpyZT17fSxTZS5kaWFnb25h'@;
put 'bFVwJiYocmUuZGlhZ29uYWxVcD15cihTZS5kaWFnb25hbFVwKSksU2UuZGlhZ29uYWxEb3duJiYocmUuZGlhZ29uYWxEb3duPXlyKFNlLmRpYWdvbmFsRG93bikpLFAuQm9yZGVycy5wdXNoKHJlKTticmVhaztjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6Z2U9cmUubGVmdD17fSxTZS5zdHls'@;
put 'ZSYmKGdlLnN0eWxlPVNlLnN0eWxlKTticmVhaztjYXNlIjxyaWdodCI6Y2FzZSI8cmlnaHQ+IjpnZT1yZS5yaWdodD17fSxTZS5zdHlsZSYmKGdlLnN0eWxlPVNlLnN0eWxlKTticmVhaztjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmdlPXJlLnRvcD17fSxTZS5zdHlsZSYmKGdlLnN0eWxlPVNl'@;
put 'LnN0eWxlKTticmVhaztjYXNlIjxib3R0b20iOmNhc2UiPGJvdHRvbT4iOmdlPXJlLmJvdHRvbT17fSxTZS5zdHlsZSYmKGdlLnN0eWxlPVNlLnN0eWxlKTticmVhaztjYXNlIjwvZGlhZ29uYWw+IjpyZS5kaWFnb25hbD1nZSxnZT17fTticmVhaztjYXNlIjwvaG9yaXpvbnRhbD4iOnJlLmhv'@;
put 'cml6b250YWw9Z2UsZ2U9e307YnJlYWs7Y2FzZSI8L3ZlcnRpY2FsPiI6cmUudmVydGljYWw9Z2UsZ2U9e307YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Z2UuY29sb3J8fChnZS5jb2xvcj17fSksU2UuYXV0byYmKGdlLmNvbG9yLmF1dG89eXIoU2UuYXV0bykpLG51bGwhPVNl'@;
put 'LnJnYj9nZS5jb2xvci5yZ2I9U2UucmdiLnNsaWNlKC02KTpTZS5pbmRleGVkPyhnZS5jb2xvci5pbmRleD1wYXJzZUludChTZS5pbmRleGVkLDEwKSxnZS5jb2xvci5yZ2I9Qm0oZ2UuY29sb3IuaW5kZXgsUC5JbmRleGVkLCExKSk6U2UudGhlbWUmJihnZS5jb2xvci50aGVtZT1wYXJzZUlu'@;
put 'dChTZS50aGVtZSwxMCksU2UudGludCYmKGdlLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChTZS50aW50KSksU2UudGhlbWUmJkwudGhlbWVFbGVtZW50cyYmTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGdlLmNvbG9yLnJnYj1CZChMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2dlLmNvbG9y'@;
put 'LnRoZW1lXS5yZ2IsZ2UuY29sb3IudGludHx8MCkpKSwhU2UuYXV0byYmbnVsbD09U2UucmdiJiYhU2UuaW5kZXhlZCYmZGVsZXRlIGdlLmNvbG9yO2JyZWFrO2Nhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiFfZSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1NlWzBdKyIgaW4gYm9yZGVycyIpfX0pfWZ1bmN0aW9uIFIzKHksUCl7dmFyIEw9WyI8IitQXTtyZXR1cm4geSYmeS5zdHlsZT8oTC5wdXNoKCcgc3R5bGU9IicreS5zdHlsZSsnIicpLHkuY29sb3I/KEwucHVzaCgiPiIpLEwucHVzaChV'@;
put 'ZCh5LmNvbG9yLCEwKSksTC5qb2luKCIiKSsiPC8iK1ArIj4iKTpMLmpvaW4oIiIpKyIvPiIpOkxbMF0rIi8+In1mdW5jdGlvbiBPOSh5LFAsTCxRKXtQLkZpbGxzPVtdO3ZhciByZT17fSxnZT17fSxfZT0hMSx2ZT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFNl'@;
put 'KXt2YXIgSGU9bG4oU2UpO3N3aXRjaChqbihIZVswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8L2dyYWRpZW50RmlsbD4iOmNhc2UiPGJnQ29sb3IvPiI6Y2FzZSI8L2JnQ29sb3I+IjpjYXNlIjxmZ0NvbG9yLz4iOmNh'@;
put 'c2UiPC9mZ0NvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8c3RvcC8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxmaWxsPiI6Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbC8+IjpQLkZpbGxzLnB1c2gocmU9'@;
put 'e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOnJlLnN0b3BzPVtdO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbCI6cmUuc3RvcHM9W10sSGUuZGVncmVlJiYocmUuYW5nbGU9K0hlLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6SGUucGF0'@;
put 'dGVyblR5cGUmJihyZS5wYXR0ZXJuVHlwZT1IZS5wYXR0ZXJuVHlwZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6aWYoX2UpdGhyb3cgbmV3IEVycm9yKCJiYWQgc3RvcCIpO2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxiZ0NvbG9yIjpjYXNlIjxm'@;
put 'Z0NvbG9yIjp2YXIgQmU9am4oSGVbMF0pLnNsaWNlKDEpOyJjb2xvciIhPUJlJiYhcmVbQmVdJiYocmVbQmVdPXt9KTt2YXIgR2U9X2U/Z2U6cmVbQmVdO251bGwhPUhlLmluZGV4ZWQmJihHZS5pbmRleD1wYXJzZUludChIZS5pbmRleGVkLDEwKSxHZS5yZ2I9Qm0oR2UuaW5kZXgsUC5JbmRl'@;
put 'eGVkKSksbnVsbCE9SGUudGhlbWUmJihHZS50aGVtZT1wYXJzZUludChIZS50aGVtZSwxMCkpLG51bGwhPUhlLnRpbnQmJihHZS50aW50PXBhcnNlRmxvYXQoSGUudGludCkpLG51bGwhPUhlLnJnYiYmKEdlLnJnYj1IZS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1IZS5hdXRvJiZkZWxldGUgcmVb'@;
put 'QmVdLG51bGwhPUdlLnRoZW1lJiYhR2UucmdiJiZMLnRoZW1lRWxlbWVudHMmJihHZS5yZ2I9QmQoTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHZS50aGVtZV0ucmdiLEdlLnRpbnR8fDApLFEuV1RGJiYoR2UucmF3X3JnYj1MLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0dlLnRoZW1lXS5y'@;
put 'Z2IpKTticmVhaztjYXNlIjxzdG9wPiI6X2U9ITAsZ2U9e307YnJlYWs7Y2FzZSI8c3RvcCI6X2U9ITAsZ2U9e30sbnVsbCE9SGUucG9zaXRpb24mJihnZS52PXBhcnNlRmxvYXQoSGUucG9zaXRpb24pKTticmVhaztjYXNlIjwvc3RvcD4iOl9lPSExLHJlLnN0b3BzLnB1c2goZ2UpO2JyZWFr'@;
put 'O2Nhc2UiPGV4dCI6dmU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnZlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUSYmUS5XVEYmJiF2ZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0hlWzBdKyIgaW4gZmlsbHMiKX19KX1mdW5jdGlvbiB5RCh5LFAsTCxRKXtQLkZvbnRzPVtdO3ZhciBy'@;
put 'ZT17fSxnZT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXt2YXIgdmU9bG4oX2UpO3N3aXRjaChqbih2ZVswXSkpe2Nhc2UiPGZvbnRzIjpjYXNlIjxmb250cz4iOmNhc2UiPC9mb250cz4iOmJyZWFrO2Nhc2UiPGZvbnQiOmNhc2UiPGZvbnQ+IjppZigiLz4i'@;
put 'IT1fZS5zbGljZSgtMikpYnJlYWs7Y2FzZSI8L2ZvbnQ+IjpjYXNlIjxmb250Lz4iOlAuRm9udHMucHVzaChyZSkscmU9e307YnJlYWs7Y2FzZSI8bmFtZSI6dmUudmFsJiYocmUubmFtZT1QaSh2ZS52YWwpKTticmVhaztjYXNlIjxuYW1lLz4iOmNhc2UiPC9uYW1lPiI6YnJlYWs7Y2FzZSI8'@;
put 'YiI6cmUuYm9sZD12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPGIvPiI6Y2FzZSI8Yj4iOnJlLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOnJlLml0YWxpYz12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6Y2FzZSI8aT4iOnJlLml0YWxp'@;
put 'Yz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8dSI6c3dpdGNoKHZlLnZhbCl7Y2FzZSJub25lIjpyZS51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6cmUudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSJkb3VibGUiOnJlLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2luZ2xlQWNj'@;
put 'b3VudGluZyI6cmUudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6cmUudW5kZXJsaW5lPTM0fWJyZWFrO2Nhc2UiPHUvPiI6Y2FzZSI8dT4iOnJlLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8c3RyaWtlIjpyZS5zdHJpa2U9dmUudmFs'@;
put 'P3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxzdHJpa2UvPiI6cmUuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGluZSI6cmUub3V0bGluZT12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6cmUub3V0bGluZT0xO2JyZWFrO2Nhc2UiPHNoYWRvdyI6cmUuc2hhZG93'@;
put 'PXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8c2hhZG93Lz4iOnJlLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPGNvbmRlbnNlIjpyZS5jb25kZW5zZT12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPGNvbmRlbnNlLz4iOnJlLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5k'@;
put 'IjpyZS5leHRlbmQ9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6cmUuZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oiOnZlLnZhbCYmKHJlLnN6PSt2ZS52YWwpO2JyZWFrO2Nhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmJyZWFrO2Nhc2UiPHZlcnRBbGlnbiI6Im5vbmUi'@;
put 'IT0odmUudmFsfHwibm9uZSIpJiYocmUudmFsaWduPXZlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8dmVydEFsaWduLz4iOmNhc2UiPC92ZXJ0QWxpZ24+IjpicmVhaztjYXNlIjxmYW1pbHkiOnZlLnZhbCYmKHJlLmZhbWlseT1wYXJzZUludCh2ZS52YWwsMTApKTti'@;
put 'cmVhaztjYXNlIjxmYW1pbHkvPiI6Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHNjaGVtZSI6dmUudmFsJiYocmUuc2NoZW1lPXZlLnZhbCk7YnJlYWs7Y2FzZSI8c2NoZW1lLz4iOmNhc2UiPC9zY2hlbWU+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PXZlLnZhbClicmVhazt2'@;
put 'ZS5jb2RlcGFnZT1JW3BhcnNlSW50KHZlLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjpyZS5jb2xvcnx8KHJlLmNvbG9yPXt9KSx2ZS5hdXRvJiYocmUuY29sb3IuYXV0bz15cih2ZS5hdXRvKSksdmUucmdiP3JlLmNvbG9yLnJnYj12ZS5yZ2Iuc2xpY2UoLTYpOnZlLmluZGV4ZWQ/KHJl'@;
put 'LmNvbG9yLmluZGV4PXBhcnNlSW50KHZlLmluZGV4ZWQsMTApLHJlLmNvbG9yLnJnYj1CbShyZS5jb2xvci5pbmRleCxQLkluZGV4ZWQpKTp2ZS50aGVtZSYmKHJlLmNvbG9yLnRoZW1lPXBhcnNlSW50KHZlLnRoZW1lLDEwKSx2ZS50aW50JiYocmUuY29sb3IudGludD1wYXJzZUZsb2F0KHZl'@;
put 'LnRpbnQpKSx2ZS50aGVtZSYmTC50aGVtZUVsZW1lbnRzJiZMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYocmUuY29sb3IucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbcmUuY29sb3IudGhlbWVdLnJnYixyZS5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPGNvbG9yLz4i'@;
put 'OmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Z2U9ITE7YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDti'@;
put 'cmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihRJiZRLldURiYmIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrdmVbMF0rIiBpbiBmb250cyIpfX0pfXZhciBqbT17MDoibm9uZSIsMToic2luZ2xlIiwyOiJkb3VibGUiLDMzOiJzaW5nbGVBY2NvdW50'@;
put 'aW5nIiwzNDoiZG91YmxlQWNjb3VudGluZyJ9LHpkPVsibnVtRm10SWQiLCJmaWxsSWQiLCJmb250SWQiLCJib3JkZXJJZCIsInhmSWQiXSxaMj1bImFwcGx5QWxpZ25tZW50IiwiYXBwbHlCb3JkZXIiLCJhcHBseUZpbGwiLCJhcHBseUZvbnQiLCJhcHBseU51bWJlckZvcm1hdCIsImFwcGx5'@;
put 'UHJvdGVjdGlvbiIsInBpdm90QnV0dG9uIiwicXVvdGVQcmVmaXgiXSx4RD1mdW5jdGlvbigpe3ZhciB5PS88KD86XHcrOik/Zm9udChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250Pi8sUD0vPCg/Olx3KzopP251bUZtdChbXj5dKilcLz4vLEw9LzwoPzpcdys6KT9maWxsKFtePl0q'@;
put 'KT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGw+LyxyZT0vPCg/Olx3KzopP2JvcmRlcihbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXI+LztyZXR1cm4gZnVuY3Rpb24odmUsU2UsSGUsQmUpe3ZhciBkdCxDdCxHZT17fSxudD17fTtyZXR1cm4oZHQ9dmUubWF0Y2goeSkpJiYoeUQo'@;
put 'ZHQsR2UsSGUsQmUpLChHZS5Gb250c3x8W10pWzBdJiZVdChudCxHZS5Gb250c1swXSkpLChkdD12ZS5tYXRjaChQKSkmJihDdD1sbihQaShkdFswXSkpLG50Lno9Q3QuZm9ybWF0Q29kZT94cihDdC5mb3JtYXRDb2RlKTooU2UuTnVtYmVyRm10fHxbXSlbK0N0Lm51bUZtdElkXXx8IkdlbmVy'@;
put 'YWwiKSwoZHQ9dmUubWF0Y2goTCkpJiYoTzkoZHQsR2UsSGUsQmUpLChHZS5GaWxsc3x8W10pWzBdJiZVdChudCxHZS5GaWxsc1swXSkpLChkdD12ZS5tYXRjaChyZSkpJiYoTDMoZHQsR2UsSGUsQmUpLChHZS5Cb3JkZXJzfHxbXSlbMF0mJlV0KG50LEdlLkJvcmRlcnNbMF0pKSxudH19KCks'@;
put 'TVo9LzwoPzpcdys6KT9keGY+W1xTXHNdKj88XC8oPzpcdys6KT9keGY+L2csa1o9LzwoPzpcdys6KT90YWJsZVN0eWxlXGIuKj8+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlPi9nO3ZhciBabT1mdW5jdGlvbigpe3ZhciBQPS88KD86XHcrOik/bnVtRm10cyhbXj5dKik+W1xTXHNd'@;
put 'Kj88XC8oPzpcdys6KT9udW1GbXRzPi8sTD0vPCg/Olx3KzopP2NlbGxTdHlsZVhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVYZnM+LyxRPS88KD86XHcrOik/Y2VsbFN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVzPi8scmU9LzwoPzpc'@;
put 'dys6KT9jZWxsWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxYZnM+LyxnZT0vPCg/Olx3KzopP2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sX2U9LzwoPzpcdys6KT9mb250cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9mb250cz4vLHZlPS88'@;
put 'KD86XHcrOik/Ym9yZGVycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXJzPi8sU2U9LzwoPzpcdys6KT9pbmRleGVkQ29sb3JzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2luZGV4ZWRDb2xvcnM+LyxIZT0vPCg/Olx3KzopP3RhYmxlU3R5bGVzKFtePl0qKT5bXFNcc10q'@;
put 'PzxcLyg/Olx3KzopP3RhYmxlU3R5bGVzPi8sQmU9LzwoPzpcdys6KT9keGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2R4ZnM+LztyZXR1cm4gZnVuY3Rpb24obnQsZHQsQ3Qpe3ZhciBidCxjdD17fTtyZXR1cm4gbnQ/KChidD0obnQ9bnQucmVwbGFjZSgvPCEtLShbXHNcU10qPykt'@;
put 'LT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKSkubWF0Y2goU2UpKSYmZnVuY3Rpb24gUDkoeSxQLEwpe1AuSW5kZXhlZHx8KFAuSW5kZXhlZD1bXSk7dmFyIFE9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFy'@;
put 'IGdlPWxuKHJlKTtzd2l0Y2goam4oZ2VbMF0pKXtjYXNlIjxpbmRleGVkQ29sb3JzPiI6Y2FzZSI8aW5kZXhlZENvbG9ycyI6Y2FzZSI8aW5kZXhlZENvbG9ycy8+IjpjYXNlIjwvaW5kZXhlZENvbG9ycz4iOmNhc2UiPC9yZ2JDb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6'@;
put 'Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHJnYkNvbG9yIjpkZWxldGUgZ2VbMF07dmFyIF9lPXBhcnNlSW50KGdlLnJnYi5zbGljZSgtNiksMTYpO1AuSW5kZXhlZC5wdXNoKFtfZT4+MTYmMjU1LF9lPj44JjI1NSwyNTUmX2VdKTticmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2Fz'@;
put 'ZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsY3QsQ3QpLChidD1udC5tYXRjaChQKSkmJmZ1bmN0aW9uIENEKHksUCxMKXtQLk51bWJlckZtdD1b'@;
put 'XTtmb3IodmFyIFE9bHQody5fdGFibGUpLHJlPTA7cmU8US5sZW5ndGg7KytyZSlQLk51bWJlckZtdFtRW3JlXV09dy5fdGFibGVbUVtyZV1dO3ZhciBnZT15WzBdLm1hdGNoKCR0KTtpZihnZSlmb3IocmU9MDtyZTxnZS5sZW5ndGg7KytyZSl7dmFyIF9lPWxuKGdlW3JlXSk7c3dpdGNoKGpu'@;
put 'KF9lWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgdmU9eHIoUGkoX2UuZm9ybWF0Q29kZSkpLFNlPXBhcnNlSW50KF9lLm51bUZtdElkLDEw'@;
put 'KTtpZihQLk51bWJlckZtdFtTZV09dmUsU2U+MCl7aWYoU2U+MzkyKXtmb3IoU2U9MzkyO1NlPjYwJiZudWxsIT1QLk51bWJlckZtdFtTZV07LS1TZSk7UC5OdW1iZXJGbXRbU2VdPXZlfXcubG9hZCh2ZSxTZSl9YnJlYWs7ZGVmYXVsdDppZihMLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVj'@;
put 'b2duaXplZCAiK19lWzBdKyIgaW4gbnVtRm10cyIpfX19KGJ0LGN0LEN0KSwoYnQ9bnQubWF0Y2goX2UpKSYmeUQoYnQsY3QsZHQsQ3QpLChidD1udC5tYXRjaChnZSkpJiZPOShidCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKHZlKSkmJkwzKGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2goTCkp'@;
put 'JiZmdW5jdGlvbiBoQyh5LFAsTCl7UC5DZWxsU3R5bGVYZj1bXTt2YXIgUSxyZT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2YXIgX2U9bG4oZ2UpLHZlPTA7c3dpdGNoKGpuKF9lWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlWGZzIjpjYXNlIjxjZWxsU3R5bGVY'@;
put 'ZnM+IjpjYXNlIjxjZWxsU3R5bGVYZnMvPiI6Y2FzZSI8L2NlbGxTdHlsZVhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6'@;
put 'YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoUT1fZSlbMF0sdmU9MDt2ZTx6ZC5sZW5ndGg7Kyt2ZSlRW3pkW3ZlXV0mJihRW3pkW3ZlXV09cGFyc2VJbnQoUVt6ZFt2ZV1dLDEwKSk7Zm9yKHZlPTA7dmU8WjIubGVuZ3RoOysrdmUpUVtaMlt2ZV1dJiYoUVtaMlt2ZV1d'@;
put 'PXlyKFFbWjJbdmVdXSkpO2lmKFAuTnVtYmVyRm10JiZRLm51bUZtdElkPjM5Milmb3IodmU9MzkyO3ZlPjYwOy0tdmUpaWYoUC5OdW1iZXJGbXRbUS5udW1GbXRJZF09PVAuTnVtYmVyRm10W3ZlXSl7US5udW1GbXRJZD12ZTticmVha31QLkNlbGxTdHlsZVhmLnB1c2goUSk7YnJlYWs7Y2Fz'@;
put 'ZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIFNlPXt9O19lLnZlcnRpY2FsJiYoU2UudmVydGljYWw9X2UudmVydGljYWwpLF9lLmhvcml6b250YWwmJihTZS5ob3Jpem9udGFsPV9lLmhvcml6b250YWwpLG51bGwhPV9lLnRleHRSb3RhdGlvbiYmKFNlLnRleHRSb3RhdGlv'@;
put 'bj1fZS50ZXh0Um90YXRpb24pLF9lLmluZGVudCYmKFNlLmluZGVudD1fZS5pbmRlbnQpLF9lLndyYXBUZXh0JiYoU2Uud3JhcFRleHQ9X2Uud3JhcFRleHQpLF9lLnNocmlua1RvRml0JiYoU2Uuc2hyaW5rVG9GaXQ9eXIoX2Uuc2hyaW5rVG9GaXQpKSxRLmFsaWdubWVudD1TZTticmVhaztj'@;
put 'YXNlIjxwcm90ZWN0aW9uIjpRLnByb3RlY3Rpb249e30seXIoX2UuaGlkZGVuKSYmKFEucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPV9lLmxvY2tlZCYmKFEucHJvdGVjdGlvbi5lZGl0YWJsZT0heXIoX2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8ZXh0IjpyZT0hMDticmVhaztjYXNlIjwv'@;
put 'ZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIXJlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrX2VbMF0rIiBpbiBjZWxsU3R5bGVYZnMiKX19KX0oYnQsY3QsQ3QpLChidD1udC5tYXRjaChRKSkmJmZ1bmN0aW9uIFNEKHksUCxMKXtQLkNlbGxTdHlsZVhm'@;
put 'fHwoUC5DZWxsU3R5bGVYZj1bXSk7dmFyIFE9ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIGdlPWxuKHJlKTtzd2l0Y2goam4oZ2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVzIjpjYXNlIjxjZWxsU3R5bGVzPiI6Y2FzZSI8Y2VsbFN0eWxlcy8+IjpjYXNl'@;
put 'IjwvY2VsbFN0eWxlcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9jZWxsU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxjZWxsU3R5bGUiOmNhc2UiPGNlbGxTdHlsZS8+IjpkZWxldGUgZ2VbMF07dmFyIF9lPStnZS54ZklkO2lm'@;
put 'KFAuQ2VsbFN0eWxlWGZbX2VdKVAuQ2VsbFN0eWxlWGZbX2VdLnN0eWxlPVBpKGdlLm5hbWUpO2Vsc2UgaWYoIWdlLmJ1aWx0aW5JZCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK19lKTticmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4i'@;
put 'OlE9ITE7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsY3QsQ3QpLChidD1udC5tYXRjaChyZSkpJiZmdW5jdGlvbiBkQyh5LFAsTCl7UC5DZWxsWGY9W107dmFyIFEscmU9'@;
put 'ITE7KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIF9lPWxuKGdlKSx2ZT0wO3N3aXRjaChqbihfZVswXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8'@;
put 'L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShRPV9lKVswXSx2ZT0wO3ZlPHpkLmxlbmd0aDsr'@;
put 'K3ZlKVFbemRbdmVdXSYmKFFbemRbdmVdXT1wYXJzZUludChRW3pkW3ZlXV0sMTApKTtmb3IodmU9MDt2ZTxaMi5sZW5ndGg7Kyt2ZSlRW1oyW3ZlXV0mJihRW1oyW3ZlXV09eXIoUVtaMlt2ZV1dKSk7aWYoUC5OdW1iZXJGbXQmJlEubnVtRm10SWQ+MzkyKWZvcih2ZT0zOTI7dmU+NjA7LS12'@;
put 'ZSlpZihQLk51bWJlckZtdFtRLm51bUZtdElkXT09UC5OdW1iZXJGbXRbdmVdKXtRLm51bUZtdElkPXZlO2JyZWFrfVAuQ2VsbFN0eWxlWGYmJlEueGZJZCYmUC5DZWxsU3R5bGVYZltRLnhmSWRdJiZQLkNlbGxTdHlsZVhmW1EueGZJZF0uc3R5bGUmJihRLnN0eWxlPVAuQ2VsbFN0eWxlWGZb'@;
put 'US54ZklkXS5zdHlsZSksUC5DZWxsWGYucHVzaChRKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgU2U9e307X2UudmVydGljYWwmJihTZS52ZXJ0aWNhbD1fZS52ZXJ0aWNhbCksX2UuaG9yaXpvbnRhbCYmKFNlLmhvcml6b250YWw9X2UuaG9yaXpvbnRh'@;
put 'bCksbnVsbCE9X2UudGV4dFJvdGF0aW9uJiYoU2UudGV4dFJvdGF0aW9uPV9lLnRleHRSb3RhdGlvbiksX2UuaW5kZW50JiYoU2UuaW5kZW50PV9lLmluZGVudCksX2Uud3JhcFRleHQmJihTZS53cmFwVGV4dD15cihfZS53cmFwVGV4dCkpLF9lLnNocmlua1RvRml0JiYoU2Uuc2hyaW5rVG9G'@;
put 'aXQ9eXIoX2Uuc2hyaW5rVG9GaXQpKSxRLmFsaWdubWVudD1TZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpRLnByb3RlY3Rpb249e30seXIoX2UuaGlkZGVuKSYmKFEucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPV9lLmxvY2tlZCYmKFEucHJvdGVjdGlvbi5lZGl0YWJsZT0heXIoX2Uu'@;
put 'bG9ja2VkKSk7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpyZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGJiYhcmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6'@;
put 'ZWQgIitfZVswXSsiIGluIGNlbGxYZnMiKX19KX0oYnQsY3QsQ3QpLChidD1udC5tYXRjaChCZSkpJiZmdW5jdGlvbiBGOSh5LFAsTCxRKXtQLkRYRnx8KFAuRFhGPVtdKSwoeVswXS5tYXRjaChNWil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtQLkRYRi5wdXNoKHhEKHJlLFAsTCxRKSl9'@;
put 'KX0oYnQsY3QsZHQsQ3QpLChidD1udC5tYXRjaChIZSkpJiZmdW5jdGlvbiBBWih5LFAsTCxRKXtQLlRhYmxlfHwoUC5UYWJsZT1bXSksKHlbMF0ubWF0Y2goa1opfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7UC5UYWJsZS5wdXNoKGZ1bmN0aW9uIHhaKHksUCxMLFEpe3ZhciByZT0hMSxn'@;
put 'ZT17fTtyZXR1cm4oeS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXt2YXIgdmU9bG4oX2UpO3N3aXRjaChqbih2ZVswXSkpe2Nhc2UiPHRhYmxlU3R5bGU+IjpjYXNlIjx0YWJsZVN0eWxlIjpnZS5uYW1lPXZlLm5hbWUucmVwbGFjZSgvXihUYWJsZXxQaXZvdClTdHlsZS8s'@;
put 'IiIpLGdlLnJhd25hbWU9dmUubmFtZSxnZS5waXZvdD0hdmUucGl2b3R8fHlyKHZlLnBpdm90KSxnZS50YWJsZT0hdmUudGFibGV8fHlyKHZlLnRhYmxlKTticmVhaztjYXNlIjx0YWJsZVN0eWxlLz4iOmNhc2UiPC90YWJsZVN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+Ijpj'@;
put 'YXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUVsZW1lbnQiOmlmKHZlLnR5cGUmJnZlLmR4ZklkKXtpZighUC5EWEZ8fCFQLkRYRlsrdmUuZHhmSWRdKXRocm93IG5ldyBFcnJvcihfZSsiIGNhbm5vdCBmaW5kIERYRiIpO2dlW3ZlLnR5cGVdPVAuRFhGWyt2ZS5keGZJZF19'@;
put 'YnJlYWs7Y2FzZSI8ZXh0IjpyZT0hMDticmVhaztjYXNlIjwvZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZihRJiZRLldURiYmIXJlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrdmVbMF0rIiBpbiB0YWJsZVN0eWxlIil9fSksZ2V9KHJlLFAsMCxRKSl9KX0oYnQsY3QsMCxD'@;
put 'dCksKGN0LkZvbnRzfHxbXSlbMF0mJloxKGN0LkZvbnRzWzBdKSxjdCk6Y3R9fSgpLGZDPVNyKCJzdHlsZVNoZWV0IixudWxsLHt4bWxuczppcy5tYWluWzBdLCJ4bWxuczp2dCI6aXMudnR9KTtmdW5jdGlvbiBwQyh5LFApe3ZhciBRLEw9W0JuLGZDXTt5LlNTRiYmbnVsbCE9KFE9ZnVuY3Rp'@;
put 'b24gem0oeSl7dmFyIFA9WyI8bnVtRm10cz4iXTtyZXR1cm5bWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe2Zvcih2YXIgUT1MWzBdO1E8PUxbMV07KytRKW51bGwhPXlbUV0mJihQW1AubGVuZ3RoXT1TcigibnVtRm10IixudWxsLHtudW1GbXRJ'@;
put 'ZDpRLGZvcm1hdENvZGU6SHIoeVtRXSl9KSl9KSwxPT09UC5sZW5ndGg/IiI6KFBbUC5sZW5ndGhdPSI8L251bUZtdHM+IixQWzBdPVNyKCJudW1GbXRzIixudWxsLHtjb3VudDpQLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUC5qb2luKCIiKSl9KHkuU1NGKSkmJihMW0wubGVuZ3Ro'@;
put 'XT1RKSxMW0wubGVuZ3RoXT1mdW5jdGlvbiB3RCh5KXt2YXIgUD1bXTtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPVsiPGZvbnQ+Il07TC5ib2xkJiZRLnB1c2goIjxiLz4iKSxMLml0YWxpYyYmUS5wdXNoKCI8aS8+IiksTC5zdHJpa2UmJlEucHVzaCgiPHN0cmlrZS8+Iiks'@;
put 'TC5zaGFkb3cmJlEucHVzaCgiPHNoYWRvdy8+Iiksam1bK0wudW5kZXJsaW5lXSYmUS5wdXNoKCc8dSB2YWw9Iicram1bK0wudW5kZXJsaW5lXSsnIi8+JyksTC5zeiYmUS5wdXNoKCc8c3ogdmFsPSInK0wuc3orJyIvPicpLEwuY29sb3ImJlEucHVzaChVZChMLmNvbG9yLCEwKSksTC5uYW1l'@;
put 'JiZRLnB1c2goJzxuYW1lIHZhbD0iJytMLm5hbWUrJyIvPicpLEwuZmFtaWx5JiZRLnB1c2goJzxmYW1pbHkgdmFsPSInK0wuZmFtaWx5KyciLz4nKSxMLnNjaGVtZSYmUS5wdXNoKCc8c2NoZW1lIHZhbD0iJytMLnNjaGVtZSsnIi8+JyksTC52YWxpZ24mJlEucHVzaCgnPHZlcnRBbGlnbiB2'@;
put 'YWw9IicrTC52YWxpZ24rKCJzdWIiPT1MLnZhbGlnbnx8InN1cGVyIj09TC52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKSxQLnB1c2goUS5qb2luKCIiKSsiPC9mb250PiIpfSksJzxmb250cyBjb3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvZm9udHM+In0oKHkuU3R5bGVz'@;
put 'fHx7fSkuRm9udHN8fFtdKSxMW0wubGVuZ3RoXT1mdW5jdGlvbiBiRCh5KXt2YXIgUD1bXTtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPW51bGw7aWYoTC5zdG9wcyYmTC5zdG9wcy5sZW5ndGgpe3ZhciByZT17fTtMLmFuZ2xlJiYocmUuZGVncmVlPU1hdGgucm91bmQoTC5h'@;
put 'bmdsZSkpLFE9TC5zdG9wcy5tYXAoZnVuY3Rpb24oZ2Upe3JldHVybiBTcigic3RvcCIsVWQoZ2UsImNvbG9yIiwhMCksbnVsbCE9Z2Uudj97cG9zaXRpb246Z2Uudn06e30pfSksUC5wdXNoKCI8ZmlsbD4iK1NyKCJncmFkaWVudEZpbGwiLFEuam9pbigiIikscmUpKyI8L2ZpbGw+Iil9ZWxz'@;
put 'ZXtpZihMLmZnQ29sb3Ipe2lmKFE9KFF8fCIiKSsiPGZnQ29sb3IgIixMLmZnQ29sb3IudGhlbWUpUSs9J3RoZW1lPSInK0wuZmdDb2xvci50aGVtZSsnIicrKEwuZmdDb2xvci50aW50PycgdGludD0iJytMLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1MLmZnQ29s'@;
put 'b3IuaW5kZXgmJm51bGw9PUwuZmdDb2xvci5yZ2IpUSs9J2luZGV4ZWQ9IicrTC5mZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoTC5mZ0NvbG9yLmF1dG8pUSs9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09TC5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK2x0'@;
put 'KEwuZmdDb2xvcikuam9pbigifCIpKTtRKz0ncmdiPSJGRicrT3UoTC5mZ0NvbG9yLnJnYikrJyIvPid9InNvbGlkIj09TC5wYXR0ZXJuVHlwZSYmIUwuYmdDb2xvciYmKEwuYmdDb2xvcj17aW5kZXg6NjR9KX1pZihMLmJnQ29sb3IpaWYoUT0oUXx8IiIpKyI8YmdDb2xvciAiLEwuYmdDb2xv'@;
put 'ci50aGVtZSlRKz0ndGhlbWU9IicrTC5iZ0NvbG9yLnRoZW1lKyciLz4nO2Vsc2UgaWYobnVsbCE9TC5iZ0NvbG9yLmluZGV4JiZudWxsPT1MLmJnQ29sb3IucmdiKVErPSdpbmRleGVkPSInK0wuYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKEwuYmdDb2xvci5hdXRvKVErPSdhdXRvPSIx'@;
put 'Ii8+JztlbHNle2lmKG51bGw9PUwuYmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitsdChMLmJnQ29sb3IpLmpvaW4oInwiKSk7USs9J3JnYj0iRkYnK091KEwuYmdDb2xvci5yZ2IpKyciLz4nfVAucHVzaCgiPGZpbGw+IitTcigicGF0dGVybkZpbGwiLFEse3BhdHRl'@;
put 'cm5UeXBlOkwucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8ZmlsbHMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KCh5LlN0eWxlc3x8e30pLkZpbGxzfHxbXSksTFtMLmxlbmd0aF09ZnVuY3Rpb24gd1ooeSl7dmFyIFA9W107cmV0dXJuIHkuZm9y'@;
put 'RWFjaChmdW5jdGlvbihMKXt2YXIgUT1bXTtRLnB1c2goUjMoTC5sZWZ0LCJsZWZ0IikpLFEucHVzaChSMyhMLnJpZ2h0LCJyaWdodCIpKSxRLnB1c2goUjMoTC50b3AsInRvcCIpKSxRLnB1c2goUjMoTC5ib3R0b20sImJvdHRvbSIpKSxRLnB1c2goUjMoTC5kaWFnb25hbCwiZGlhZ29uYWwi'@;
put 'KSksUC5wdXNoKCI8Ym9yZGVyPiIrUS5qb2luKCIiKSsiPC9ib3JkZXI+Iil9KSwnPGJvcmRlcnMgY291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2JvcmRlcnM+In0oKHkuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLExbTC5sZW5ndGhdPWZ1bmN0aW9uIFNaKHkpe3ZhciBQ'@;
put 'PVsnPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiLz4nXTtpZih5KWZvcih2YXIgTD0xO0w8eS5sZW5ndGg7KytMKVAucHVzaChTcigieGYiLG51bGwse251bUZtdElkOnlbTF0ubnVtRm10SWR8fDAsZm9udElkOnlbTF0uZm9udElkfHwwLGZpbGxJ'@;
put 'ZDp5W0xdLmZpbGxJZHx8MCxib3JkZXJJZDp5W0xdLmJvcmRlcklkfHwwfSkpO3JldHVybic8Y2VsbFN0eWxlWGZzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9jZWxsU3R5bGVYZnM+In0oUC5jZWxsU3R5bGVYZnMpLChRPWZ1bmN0aW9uIENaKHkpe3ZhciBQPVtdO3Jl'@;
put 'dHVybiBQW1AubGVuZ3RoXT1TcigiY2VsbFhmcyIsbnVsbCkseS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPUwuYWxpZ25tZW50O2RlbGV0ZSBMLmFsaWdubWVudDt2YXIgcmU9TC5wcm90ZWN0aW9uO2RlbGV0ZSBMLnByb3RlY3Rpb247dmFyIGdlPVE/U3IoImFsaWdubWVudCIsbnVsbCxR'@;
put 'KToiIjtnZSs9cmU/U3IoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjpyZS5oaWRkZW4/MTowLGxvY2tlZDpyZS5lZGl0YWJsZT8wOjF9KToiIixQW1AubGVuZ3RoXT1TcigieGYiLGdlfHxudWxsLEwpLFEmJihMLmFsaWdubWVudD1RKSxyZSYmKEwucHJvdGVjdGlvbj1yZSl9KSxQW1AubGVu'@;
put 'Z3RoXT0iPC9jZWxsWGZzPiIsMj09PVAubGVuZ3RoPyIiOihQWzBdPVNyKCJjZWxsWGZzIixudWxsLHtjb3VudDpQLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUC5qb2luKCIiKSl9KFAuY2VsbFhmcykpJiYoTFtMLmxlbmd0aF09USksTFtMLmxlbmd0aF09ZnVuY3Rpb24gTUQoeSl7'@;
put 'dmFyIFA9Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRpbklkPSIwIi8+J107aWYoeSlmb3IodmFyIEw9MTtMPHkubGVuZ3RoOysrTClQLnB1c2goU3IoImNlbGxTdHlsZSIsbnVsbCx7bmFtZTp5W0xdLm5hbWUseGZJZDpMfSkpO3JldHVybic8Y2VsbFN0eWxlcyBj'@;
put 'b3VudD0iJytQLmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvY2VsbFN0eWxlcz4ifShQLmNlbGxTdHlsZVhmcykseS5TdHlsZXMuRFhGfHwoeS5TdHlsZXMuRFhGPVtdKTt2YXIgcmU9ZnVuY3Rpb24gVFooeSxQLEwpe3ZhciBRPVsnPHRhYmxlU3R5bGVzIGNvdW50PSInKyh5fHxbXSkubGVu'@;
put 'Z3RoKyciIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiddO3JldHVybiB5JiZ5Lmxlbmd0aD8oUVswXSs9Ij4iLHkuZm9yRWFjaChmdW5jdGlvbihyZSl7US5wdXNoKGZ1bmN0aW9uIEVaKHksUCxMKXt2'@;
put 'YXIgUT1bXTtbIndob2xlVGFibGUiLCJoZWFkZXJSb3ciLCJ0b3RhbFJvdyIsImZpcnN0Q29sdW1uIiwibGFzdENvbHVtbiIsImZpcnN0Um93U3RyaXBlIiwic2Vjb25kUm93U3RyaXBlIiwiZmlyc3RDb2x1bW5TdHJpcGUiLCJzZWNvbmRDb2x1bW5TdHJpcGUiLCJmaXJzdEhlYWRlckNlbGwi'@;
put 'LCJsYXN0SGVhZGVyQ2VsbCIsImZpcnN0VG90YWxDZWxsIiwibGFzdFRvdGFsQ2VsbCIsImZpcnN0U3VidG90YWxDb2x1bW4iLCJzZWNvbmRTdWJ0b3RhbENvbHVtbiIsInRoaXJkU3VidG90YWxDb2x1bW4iLCJmaXJzdFN1YnRvdGFsUm93Iiwic2Vjb25kU3VidG90YWxSb3ciLCJ0aGlyZFN1'@;
put 'YnRvdGFsUm93IiwiYmxhbmtSb3ciLCJmaXJzdENvbHVtblN1YmhlYWRpbmciLCJzZWNvbmRDb2x1bW5TdWJoZWFkaW5nIiwidGhpcmRDb2x1bW5TdWJoZWFkaW5nIiwiZmlyc3RSb3dTdWJoZWFkaW5nIiwic2Vjb25kUm93U3ViaGVhZGluZyIsInRoaXJkUm93U3ViaGVhZGluZyIsInBhZ2VG'@;
put 'aWVsZExhYmVscyIsInBhZ2VGaWVsZFZhbHVlcyJdLmZvckVhY2goZnVuY3Rpb24oZ2Upe2lmKHlbZ2VdKXt2YXIgX2U9Rm8oUCx5W2dlXSk7US5wdXNoKCc8dGFibGVTdHlsZUVsZW1lbnQgZHhmSWQ9IicrX2UrJyIgdHlwZT0iJytnZSsnIi8+Jyl9fSk7dmFyIHJlPSc8dGFibGVTdHlsZSBj'@;
put 'b3VudD0iJytRLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEheS5waXZvdCsnIiBuYW1lPSInK3kubmFtZSsnIic7cmV0dXJuIFEubGVuZ3RoP3JlKyI+IitRLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGU+IjpyZSsiLz4ifShyZSxQKSl9KSxRLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOlFbMF0r'@;
put 'Ii8+In0oKHkuU3R5bGVzfHx7fSkuVGFibGV8fFtdLHkuU3R5bGVzLkRYRik7cmV0dXJuIExbTC5sZW5ndGhdPWZ1bmN0aW9uIFVtKHksUCl7aWYoIXkubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIEw9Wyc8ZHhmcyBjb3VudD0iJyt5Lmxlbmd0aCsnIj4nXTtyZXR1cm4g'@;
put 'eS5mb3JFYWNoKGZ1bmN0aW9uKFEpe0wucHVzaChmdW5jdGlvbiBFRCh5LFApe3ZhciBMPXtib2xkOiJiIixpdGFsaWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sUT1bIjxkeGY+Il0scmU9W10sZ2U9W10sX2U9W10sU2U9W107cmV0dXJuIGx0KHkpLmZvckVhY2goZnVuY3Rpb24oQmUpe3N3'@;
put 'aXRjaChCZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2UidW5kZXJsaW5lIjpjYXNlImNvbG9yIjpjYXNlInZhbGlnbiI6Y2FzZSJzeiI6Y2FzZSJuYW1lIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNoYXJzZXQiOmNhc2UiZmFtaWx5IjpjYXNl'@;
put 'ImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Y2FzZSJzY2hlbWUiOnJlLnB1c2goQmUpO2JyZWFrO2Nhc2UiYmdDb2xvciI6Y2FzZSJmZ0NvbG9yIjpfZS5wdXNoKEJlKTticmVhaztjYXNlInoiOmdlLnB1c2goQmUpO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6Y2FzZSJsZWZ0IjpjYXNl'@;
put 'InJpZ2h0IjpjYXNlImRpYWdvbmFsIjpjYXNlInZlcnRpY2FsIjpjYXNlImhvcml6b250YWwiOlNlLnB1c2goQmUpO2JyZWFrO2Nhc2UicGF0dGVyblR5cGUiOmNhc2UiZGlhZ29uYWxEb3duIjpjYXNlImRpYWdvbmFsVXAiOmNhc2Uic3RvcHMiOmNhc2UiZGVncmVlIjpicmVhaztkZWZhdWx0'@;
put 'OnRocm93IlVucmVjb2duaXplZCAiK0JlKyIgaW4gRFhGIn19KSxyZS5sZW5ndGg+MCYmKFEucHVzaCgiPGZvbnQ+IikscmUuZm9yRWFjaChmdW5jdGlvbihCZSl7c3dpdGNoKEJlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRv'@;
put 'dyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRlbmQiOlEucHVzaCgiPCIrKExbQmVdfHxCZSkrJyB2YWw9IicrKHlbQmVdPyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpRLnB1c2goVWQoeVtCZV0sQmUsITApKTticmVhaztjYXNlImZhbWlseSI6Y2FzZSJuYW1lIjpjYXNlInN6'@;
put 'IjpjYXNlInNjaGVtZSI6US5wdXNoKCI8IisoTFtCZV18fEJlKSsnIHZhbD0iJyt5W0JlXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOlEucHVzaCgnPHUgdmFsPSInK2ptW3lbQmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOlEucHVzaCgnPHZlcnRBbGlnbiB2YWw9Iicr'@;
put 'eS52YWxpZ24rKCJzdWIiPT15LnZhbGlnbnx8InN1cGVyIj09eS52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrQmUrIiA6IGZvbnQgRFhGIn19KSxRLnB1c2goIjwvZm9udD4iKSksZ2UubGVuZ3RoPjAmJlEucHVzaCgnPG51bUZt'@;
put 'dCBmb3JtYXRDb2RlPSInK0hyKHkueikrJyIgbnVtRm10SWQ9IicrZnVuY3Rpb24gWTMoeSxQKXtpZigibnVtYmVyIj09dHlwZW9mIHkpcmV0dXJuIHk7dmFyIEw9UC5yZXZzc2ZbeT8/IkdlbmVyYWwiXSxRPTYwO2lmKG51bGw9PUwpZm9yKDtRPDM5MjsrK1EpaWYobnVsbD09UC5zc2ZbUV0p'@;
put 'cmV0dXJuIHcubG9hZCh5LFEpLFAuc3NmW1FdPXksUC5yZXZzc2ZbeV09USxRO3JldHVybiBMfSh5LnosUCkrJyIvPicpLF9lLmxlbmd0aD4wJiYoUS5wdXNoKCI8ZmlsbD4iKSxRLnB1c2goIjxwYXR0ZXJuRmlsbCIrKHkucGF0dGVyblR5cGU/JyBwYXR0ZXJuVHlwZT0iJyt5LnBhdHRlcm5U'@;
put 'eXBlKyciPic6Ij4iKSksX2UuZm9yRWFjaChmdW5jdGlvbihCZSl7c3dpdGNoKEJlKXtjYXNlInBhdHRlcm5UeXBlIjpicmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6US5wdXNoKFVkKHlbQmVdLEJlLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK0JlKyIg'@;
put 'OiBmaWxsIERYRiJ9fSksUS5wdXNoKCI8L3BhdHRlcm5GaWxsPiIpLFEucHVzaCgiPC9maWxsPiIpKSxTZS5sZW5ndGg+MD8oUS5wdXNoKFsiPGJvcmRlciIsbnVsbCE9eS5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIXkuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT15LmRp'@;
put 'YWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISF5LmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigiIikpLFNlLmZvckVhY2goZnVuY3Rpb24oQmUpe1EucHVzaChSMyh5W0JlXSxCZSkpfSksUS5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPXkuZGlhZ29uYWxEb3dufHxudWxsIT15LmRp'@;
put 'YWdvbmFsVXApJiZRLnB1c2goWyI8Ym9yZGVyIixudWxsIT15LmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEheS5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPXkuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIXkuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigi'@;
put 'IikpLDE9PVEubGVuZ3RoPyI8ZHhmLz4iOlEuam9pbigiIikrIjwvZHhmPiJ9KFEsUCkpfSksTC5qb2luKCIiKSsiPC9keGZzPiJ9KHkuU3R5bGVzLkRYRixQKSxMW0wubGVuZ3RoXT1yZSxMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09Ijwvc3R5bGVTaGVldD4iLExbMV09TFsxXS5yZXBsYWNl'@;
put 'KCIvPiIsIj4iKSksTC5qb2luKCIiKX1mdW5jdGlvbiBPMyh5LFAsTCl7THx8KEw9ZnIoNis0KlAubGVuZ3RoKSksTC53cml0ZV9zaGlmdCgyLHkpLG5jKFAsTCk7dmFyIFE9TC5sZW5ndGg+TC5sP0wuc2xpY2UoMCxMLmwpOkw7cmV0dXJuIG51bGw9PUwubCYmKEwubD1MLmxlbmd0aCksUX1m'@;
put 'dW5jdGlvbiBZbSh5KXtyZXR1cm57Y29sb3I6RGQoeSkscG9zOm1hKHkpfX1IaS5TVFk9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIjt2YXIgVjQ9WyJub25lIiwic29saWQiLCJtZWRpdW1HcmF5Iiwi'@;
put 'ZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlk'@;
put 'IiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il0sWTI9YmUoVjQpLFdtPVsiZ2VuZXJhbCIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImZpbGwiLCJqdXN0aWZ5IiwiY2VudGVyQ29udGludW91cyIsImRpc3RyaWJ1dGVkIl0sQjQ9WyJ0b3AiLCJjZW50ZXIiLCJib3R0b20i'@;
put 'LCJqdXN0aWZ5IiwiZGlzdHJpYnV0ZWQiXTtmdW5jdGlvbiBOOSh5LFAsTCl7THx8KEw9ZnIoMTYpKSxMLndyaXRlX3NoaWZ0KDIsUHx8MCksTC53cml0ZV9zaGlmdCgyLHkubnVtRm10SWR8fDApLEwud3JpdGVfc2hpZnQoMix5LmZvbnRJZHx8MCksTC53cml0ZV9zaGlmdCgyLHkuZmlsbElk'@;
put 'fHwwKSxMLndyaXRlX3NoaWZ0KDIseS5ib3JkZXJJZHx8MCksTC53cml0ZV9zaGlmdCgxLHkuYWxpZ25tZW50JiZ5LmFsaWdubWVudC50ZXh0Um90YXRpb258fDApLEwud3JpdGVfc2hpZnQoMSx5LmFsaWdubWVudCYmeS5hbGlnbm1lbnQuaW5kZW50fHwwKTt2YXIgUT0wLHJlPTA7aWYoeS5h'@;
put 'bGlnbm1lbnQpe2lmKHkuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBnZT1XbS5pbmRleE9mKHkuYWxpZ25tZW50Lmhvcml6b250YWwpO2dlPDAmJihnZT0wKSxRfD1nZX1pZih5LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIF9lPUI0LmluZGV4T2YoeS5hbGlnbm1lbnQudmVydGljYWwpO19l'@;
put 'PDAmJihfZT0yKSxRfD1fZTw8M315LmFsaWdubWVudC53cmFwVGV4dCYmKFF8PTY0KSx5LmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKHJlfD0xKX1yZXR1cm4gTC53cml0ZV9zaGlmdCgxLFEpLEwud3JpdGVfc2hpZnQoMSxyZSksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMSww'@;
put 'KSxMfXZhciBXMj1bIm5vbmUiLCJ0aGluIiwibWVkaXVtIiwiZGFzaGVkIiwiZG90dGVkIiwidGhpY2siLCJkb3VibGUiLCJoYWlyIiwibWVkaXVtRGFzaGVkIiwiZGFzaERvdCIsIm1lZGl1bURhc2hEb3QiLCJkYXNoRG90RG90IiwibWVkaXVtRGFzaERvdERvdCIsInNsYW50RGFzaERvdCJd'@;
put 'O2Z1bmN0aW9uIGo0KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTt5LmwrPTE7dmFyIEw9RGQoeSk7cmV0dXJue3N0eWxlOlcyW1BdLGNvbG9yOkx9fWZ1bmN0aW9uIFAzKHksUCl7cmV0dXJuIFB8fChQPWZyKDEwKSkseSYmeS5zdHlsZSYmIiIhPXkuc3R5bGUmJiJub25lIiE9eS5zdHlsZSYm'@;
put 'LTEhPT1XMi5pbmRleE9mKHkuc3R5bGUpPyhQLndyaXRlX3NoaWZ0KDEsVzIuaW5kZXhPZih5LnN0eWxlKSksUC53cml0ZV9zaGlmdCgxLDApLHkuY29sb3I/UjIoeS5jb2xvcixQKTooUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSkpOihQLndyaXRlX3NoaWZ0KDEsMCks'@;
put 'UC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCkpLFB9ZnVuY3Rpb24gdHUoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoNTIpKSxQLndyaXRlX3NoaWZ0KDQseS54ZklkKSxQLndyaXRlX3NoaWZ0KDIsMSksUC53cml0ZV9zaGlmdCgxLCt5LmJ1aWx0'@;
put 'aW5JZCksUC53cml0ZV9zaGlmdCgxLDApLEFkKHkubmFtZXx8IiIsUCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9ZnVuY3Rpb24gejQoeSxQKXshUHx8IVAudGhlbWVFbGVtZW50c3x8IVAudGhlbWVFbGVtZW50cy5jbHJTY2hlbWV8fG51bGwhPXkudGhlbWUmJih5LnJnYj1CZChQ'@;
put 'LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW3kudGhlbWVdLnJnYix5LnRpbnR8fDApKX1mdW5jdGlvbiBQRCh5LFApe3ZhciBMPXdjKCk7cmV0dXJuIHVpKEwsIkJydEJlZ2luU3R5bGVTaGVldCIpLGZ1bmN0aW9uIEJjKHksUCl7aWYoUCl7dmFyIEw9MDtbWzUsOF0sWzIzLDI2XSxbNDEsNDRd'@;
put 'LFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2Zvcih2YXIgcmU9UVswXTtyZTw9UVsxXTsrK3JlKW51bGwhPVBbcmVdJiYrK0x9KSwwIT1MJiYodWkoeSwiQnJ0QmVnaW5GbXRzIixrdShMKSksW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihR'@;
put 'KXtmb3IodmFyIHJlPVFbMF07cmU8PVFbMV07KytyZSludWxsIT1QW3JlXSYmdWkoeSwiQnJ0Rm10IixPMyhyZSxQW3JlXSkpfSksdWkoeSwiQnJ0RW5kRm10cyIpKX19KEwseS5TU0YpLGZ1bmN0aW9uIFU0KHksUCl7dmFyIEw9UC5sZW5ndGg7MCE9TCYmKHVpKHksIkJydEJlZ2luRm9udHMi'@;
put 'LGt1KEwpKSxQLmZvckVhY2goZnVuY3Rpb24oUSl7dWkoeSwiQnJ0Rm9udCIsZnVuY3Rpb24gdkMoeSxQKXtQfHwoUD1mcigxNTMpKSxQLndyaXRlX3NoaWZ0KDIsMjAqeS5zeiksZnVuY3Rpb24gWWgoeSxQKXtQfHwoUD1mcigyKSksUC53cml0ZV9zaGlmdCgxLCh5Lml0YWxpYz8yOjApfCh5'@;
put 'LnN0cmlrZT84OjApfCh5Lm91dGxpbmU/MTY6MCl8KHkuc2hhZG93PzMyOjApfCh5LmNvbmRlbnNlPzY0OjApfCh5LmV4dGVuZD8xMjg6MCkpLFAud3JpdGVfc2hpZnQoMSwwKX0oeSxQKSxQLndyaXRlX3NoaWZ0KDIseS5ib2xkPzcwMDo0MDApO3ZhciBMPTA7InN1cGVyIj09eS52YWxpZ24/'@;
put 'TD0xOiJzdWIiPT15LnZhbGlnbiYmKEw9MiksUC53cml0ZV9zaGlmdCgyLEwpLFAud3JpdGVfc2hpZnQoMSx5LnVuZGVybGluZXx8MCksUC53cml0ZV9zaGlmdCgxLHkuZmFtaWx5fHwwKSxQLndyaXRlX3NoaWZ0KDEseS5jaGFyc2V0fHwwKSxQLndyaXRlX3NoaWZ0KDEsMCksUjIoeS5jb2xv'@;
put 'cixQKTt2YXIgUT0wO3JldHVybiJtYWpvciI9PXkuc2NoZW1lJiYoUT0xKSwibWlub3IiPT15LnNjaGVtZSYmKFE9MiksUC53cml0ZV9zaGlmdCgxLFEpLG5jKHkubmFtZSxQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oUSkpfSksdWkoeSwiQnJ0RW5kRm9udHMiKSl9KEwsKHku'@;
put 'U3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiBfQyh5LFApe3ZhciBMPVAubGVuZ3RoOzAhPUwmJih1aSh5LCJCcnRCZWdpbkZpbGxzIixrdShMKSksUC5mb3JFYWNoKGZ1bmN0aW9uKFEpe3VpKHksIkJydEZpbGwiLGZ1bmN0aW9uIEFEKHksUCl7UHx8KFA9ZnIoODQpKTt2YXIgTD1Z'@;
put 'Mlt5LnBhdHRlcm5UeXBlXTtudWxsPT1MJiYoTD00MCksUC53cml0ZV9zaGlmdCg0LEw9K0wpO3ZhciBRPTA7aWYoNDAhPUwpZm9yKFIyKHkuZmdDb2xvcnx8e2luZGV4OjY0fSxQKSxSMih5LmJnQ29sb3J8fHtpbmRleDo2NX0sUCk7UTwxMjsrK1EpUC53cml0ZV9zaGlmdCg0LDApO2Vsc2V7'@;
put 'Zm9yKDtRPDQ7KytRKVAud3JpdGVfc2hpZnQoNCwwKTtmb3IoO1E8MTI7KytRKVAud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KFEpKX0pLHVpKHksIkJydEVuZEZpbGxzIikpfShMLCh5LlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rp'@;
put 'b24gYkMoeSxQKXt2YXIgTD1QLmxlbmd0aDswIT1MJiYodWkoeSwiQnJ0QmVnaW5Cb3JkZXJzIixrdShMKSksUC5mb3JFYWNoKGZ1bmN0aW9uKFEpe3VpKHksIkJydEJvcmRlciIsZnVuY3Rpb24gREQoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoNTEpKSxQLndyaXRlX3NoaWZ0KDEsMCksUDMoeS50'@;
put 'b3AsUCksUDMoeS5ib3R0b20sUCksUDMoeS5sZWZ0LFApLFAzKHkucmlnaHQsUCksUDMobnVsbCxQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oUSkpfSksdWkoeSwiQnJ0RW5kQm9yZGVycyIpKX0oTCwoeS5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gSUQoeSxQ'@;
put 'KXt2YXIgTD0xO2lmKFAmJihMPVAubGVuZ3RoKSx1aSh5LCJCcnRCZWdpbkNlbGxTdHlsZVhGcyIsa3UoTCkpLHVpKHksIkJydFhGIixOOSh7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUzNSkpLFApZm9yKHZhciBRPTE7UTxQLmxlbmd0aDsrK1EpdWkoeSwi'@;
put 'QnJ0WEYiLE45KHtudW1GbXRJZDpQW1FdLm51bUZtdElkfHwwLGZvbnRJZDpQW1FdLmZvbnRJZHx8MCxmaWxsSWQ6UFtRXS5maWxsSWR8fDAsYm9yZGVySWQ6UFtRXS5ib3JkZXJJZHx8MH0sNjU1MzUpKTt1aSh5LCJCcnRFbmRDZWxsU3R5bGVYRnMiKX0oTCxQLmNlbGxTdHlsZVhmcyksZnVu'@;
put 'Y3Rpb24geUMoeSxQKXt1aSh5LCJCcnRCZWdpbkNlbGxYRnMiLGt1KFAubGVuZ3RoKSksUC5mb3JFYWNoKGZ1bmN0aW9uKEwpe3VpKHksIkJydFhGIixOOShMLDApKX0pLHVpKHksIkJydEVuZENlbGxYRnMiKX0oTCxQLmNlbGxYZnMpLGZ1bmN0aW9uIExEKHksUCl7dmFyIEw9MTtpZihQJiYo'@;
put 'TD1QLmxlbmd0aCksdWkoeSwiQnJ0QmVnaW5TdHlsZXMiLGt1KEwpKSx1aSh5LCJCcnRTdHlsZSIsdHUoe3hmSWQ6MCxidWlsdGluSWQ6MCxuYW1lOiJOb3JtYWwifSkpLFApZm9yKHZhciBRPTE7UTxQLmxlbmd0aDsrK1EpdWkoeSwiQnJ0U3R5bGUiLHR1KHt4ZklkOlEsYnVpbHRpbklkOjAs'@;
put 'bmFtZTpQW1FdLm5hbWV9KSk7dWkoeSwiQnJ0RW5kU3R5bGVzIil9KEwsUC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIHdDKHkpe3VpKHksIkJydEJlZ2luRFhGcyIsa3UoMCkpLHVpKHksIkJydEVuZERYRnMiKX0oTCksZnVuY3Rpb24gUkQoeSl7dWkoeSwiQnJ0QmVnaW5UYWJsZVN0eWxlcyIs'@;
put 'ZnVuY3Rpb24gVjkoeSxQLEwpe3ZhciBRPWZyKDIwNTIpO3JldHVybiBRLndyaXRlX3NoaWZ0KDQseSksQWQoUCxRKSxBZChMLFEpLFEubGVuZ3RoPlEubD9RLnNsaWNlKDAsUS5sKTpRfSgwLCJUYWJsZVN0eWxlTWVkaXVtOSIsIlBpdm90U3R5bGVNZWRpdW00IikpLHVpKHksIkJydEVuZFRh'@;
put 'YmxlU3R5bGVzIil9KEwpLHVpKEwsIkJydEVuZFN0eWxlU2hlZXQiKSxMLmVuZCgpfUhpLlRIRU1FPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIjt2YXIgRkQ9WyI8L2E6bHQxPiIsIjwvYTpkazE+Iiwi'@;
put 'PC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gajkoeSxQLEwpe1AudGhl'@;
put 'bWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIFE9e307KHlbMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIGdlPWxuKHJlKTtzd2l0Y2goZ2VbMF0pe2Nhc2UiPGE6Y2xyU2NoZW1lIjpjYXNlIjwvYTpjbHJTY2hlbWU+IjpjYXNlIjwvYTpzcmdiQ2xyPiI6Y2Fz'@;
put 'ZSI8L2E6c3lzQ2xyPiI6YnJlYWs7Y2FzZSI8YTpzcmdiQ2xyIjpRLnJnYj1nZS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOlEucmdiPWdlLmxhc3RDbHI7YnJlYWs7Y2FzZSI8YTpkazE+IjpjYXNlIjwvYTpkazE+IjpjYXNlIjxhOmx0MT4iOmNhc2UiPC9hOmx0MT4iOmNhc2UiPGE6ZGsy'@;
put 'PiI6Y2FzZSI8L2E6ZGsyPiI6Y2FzZSI8YTpsdDI+IjpjYXNlIjwvYTpsdDI+IjpjYXNlIjxhOmFjY2VudDE+IjpjYXNlIjwvYTphY2NlbnQxPiI6Y2FzZSI8YTphY2NlbnQyPiI6Y2FzZSI8L2E6YWNjZW50Mj4iOmNhc2UiPGE6YWNjZW50Mz4iOmNhc2UiPC9hOmFjY2VudDM+IjpjYXNlIjxh'@;
put 'OmFjY2VudDQ+IjpjYXNlIjwvYTphY2NlbnQ0PiI6Y2FzZSI8YTphY2NlbnQ1PiI6Y2FzZSI8L2E6YWNjZW50NT4iOmNhc2UiPGE6YWNjZW50Nj4iOmNhc2UiPC9hOmFjY2VudDY+IjpjYXNlIjxhOmhsaW5rPiI6Y2FzZSI8L2E6aGxpbms+IjpjYXNlIjxhOmZvbEhsaW5rPiI6Y2FzZSI8L2E6'@;
put 'Zm9sSGxpbms+IjoiLyI9PT1nZVswXS5jaGFyQXQoMSk/KFAudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRkQuaW5kZXhPZihnZVswXSldPVEsUT17fSk6US5uYW1lPWdlWzBdLnNsaWNlKDMsZ2VbMF0ubGVuZ3RoLTEpO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJVbnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNsclNjaGVtZSIpfX0pfWZ1bmN0aW9uIHo5KCl7fWZ1bmN0aW9uIEhEKCl7fXZhciBaND0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxORD0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9u'@;
put 'dFNjaGVtZT4vLFZEPS88YTpmbXRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFNDPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gR20oeSxQKXtpZigheXx8MD09PXkubGVuZ3RoKXJldHVybiBHbShyZigp'@;
put 'KTt2YXIgTCxRPXt9O2lmKCEoTD15Lm1hdGNoKFNDKSkpdGhyb3cgbmV3IEVycm9yKCJ0aGVtZUVsZW1lbnRzIG5vdCBmb3VuZCBpbiB0aGVtZSIpO3JldHVybiBmdW5jdGlvbiBDQyh5LFAsTCl7dmFyIFE7UC50aGVtZUVsZW1lbnRzPXt9LFtbImNsclNjaGVtZSIsWjQsajldLFsiZm9udFNj'@;
put 'aGVtZSIsTkQsejldLFsiZm10U2NoZW1lIixWRCxIRF1dLmZvckVhY2goZnVuY3Rpb24ocmUpe2lmKCEoUT15Lm1hdGNoKHJlWzFdKSkpdGhyb3cgbmV3IEVycm9yKHJlWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMiKTtyZVsyXShRLFAsTCl9KX0oTFswXSxRLFApLFEucmF3PXks'@;
put 'UX1mdW5jdGlvbiByZih5LFApe2lmKFAmJlAudGhlbWVYTFNYKXJldHVybiBQLnRoZW1lWExTWDtpZih5JiYic3RyaW5nIj09dHlwZW9mIHkucmF3KXJldHVybiB5LnJhdzt2YXIgTD1bQm5dO3JldHVybiBMW0wubGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3Bl'@;
put 'bnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+JyxMW0wubGVuZ3RoXT0iPGE6dGhlbWVFbGVtZW50cz4iLExbTC5sZW5ndGhdPSc8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLExbTC5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xyIHZh'@;
put 'bD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8+PC9hOmRrMT4nLExbTC5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0id2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsTFtMLmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9hOmRr'@;
put 'Mj4nLExbTC5sZW5ndGhdPSc8YTpsdDI+PGE6c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDI+JyxMW0wubGVuZ3RoXT0nPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2VudDE+JyxMW0wubGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1'@;
put 'MDREIi8+PC9hOmFjY2VudDI+JyxMW0wubGVuZ3RoXT0nPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2VudDM+JyxMW0wubGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxMW0wubGVuZ3RoXT0nPGE6YWNj'@;
put 'ZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8+PC9hOmFjY2VudDU+JyxMW0wubGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0iRjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxMW0wubGVuZ3RoXT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz4n'@;
put 'LExbTC5sZW5ndGhdPSc8YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8+PC9hOmZvbEhsaW5rPicsTFtMLmxlbmd0aF09IjwvYTpjbHJTY2hlbWU+IixMW0wubGVuZ3RoXT0nPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsTFtMLmxlbmd0aF09IjxhOm1ham9yRm9udD4i'@;
put 'LExbTC5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPicsTFtMLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLExbTC5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRc'@;
put 'dWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTVi'@;
put 'OGJcdTRmNTMiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxMW0wubGVuZ3RoXT0n'@;
put 'PGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLExb'@;
put 'TC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9yYW4i'@;
put 'Lz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVt'@;
put 'aWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250'@;
put 'IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxMW0wu'@;
put 'bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBF'@;
put 'ZGVzc2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZh'@;
put 'Y2U9IkRva0NoYW1wYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250'@;
put 'IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIv'@;
put 'PicsTFtMLmxlbmd0aF09IjwvYTptYWpvckZvbnQ+IixMW0wubGVuZ3RoXT0iPGE6bWlub3JGb250PiIsTFtMLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+JyxMW0wubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsTFtMLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNl'@;
put 'PSIiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBc'@;
put 'dWI1MTUiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9u'@;
put 'dCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iQXJpYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsTFtMLmxlbmd0aF09JzxhOmZv'@;
put 'bnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6'@;
put 'Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxMW0wubGVuZ3RoXT0n'@;
put 'PGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jv'@;
put 'c29mdCBZaSBCYWl0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBz'@;
put 'Y3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9u'@;
put 'dCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsTFtM'@;
put 'Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1v'@;
put 'bmdvbGlhbiBCYWl0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlw'@;
put 'dD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLExbTC5sZW5ndGhdPSI8L2E6bWlub3JGb250PiIsTFtMLmxlbmd0aF09IjwvYTpmb250U2NoZW1lPiIsTFtMLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsTFtMLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4iLExb'@;
put 'TC5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpz'@;
put 'Y2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAwMCIv'@;
put 'PjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48'@;
put 'L2E6Z3M+JyxMW0wubGVuZ3RoXT0iPC9hOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4nLExbTC5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixMW0wubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLExbTC5sZW5ndGhd'@;
put 'PSI8YTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTAwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5n'@;
put 'dGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0iPC9hOmdzTHN0PiIs'@;
put 'TFtMLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjAiLz4nLExbTC5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixMW0wubGVuZ3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLExbTC5sZW5ndGhdPSI8YTpsblN0eWxlTHN0PiIsTFtMLmxlbmd0aF09JzxhOmxuIHc9Ijk1MjUi'@;
put 'IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNv'@;
put 'bGlkIi8+PC9hOmxuPicsTFtMLmxlbmd0aF09JzxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxM'@;
put 'W0wubGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLExbTC5sZW5ndGhdPSI8L2E6'@;
put 'bG5TdHlsZUxzdD4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZUxzdD4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1'@;
put 'NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsTFtMLmxl'@;
put 'bmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6'@;
put 'YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIs'@;
put 'TFtMLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLExbTC5s'@;
put 'ZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09JzxhOnNjZW5lM2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zyb250Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxhOnJv'@;
put 'dCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+PC9hOmxpZ2h0UmlnPjwvYTpzY2VuZTNkPicsTFtMLmxlbmd0aF09JzxhOnNwM2Q+PGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpzcDNkPicsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhd'@;
put 'PSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPGE6YmdGaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLExbTC5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEi'@;
put 'PicsTFtMLmxlbmd0aF09IjxhOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdz'@;
put 'IHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNj'@;
put 'aGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjIwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0iPC9hOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9'@;
put 'IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAwIiBiPSIxODAwMDAiLz48L2E6cGF0aD4nLExbTC5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixMW0wubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLExbTC5sZW5ndGhdPSI8YTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpn'@;
put 'cyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNo'@;
put 'YWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAw'@;
put 'MCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLExbTC5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixMW0wubGVuZ3RoXT0iPC9hOmJnRmlsbFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+IixMW0wubGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixMW0wubGVuZ3RoXT0iPGE6'@;
put 'b2JqZWN0RGVmYXVsdHM+IixMW0wubGVuZ3RoXT0iPGE6c3BEZWY+IixMW0wubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4'@;
put 'PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9udFJl'@;
put 'Zj48L2E6c3R5bGU+JyxMW0wubGVuZ3RoXT0iPC9hOnNwRGVmPiIsTFtMLmxlbmd0aF09IjxhOmxuRGVmPiIsTFtMLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwv'@;
put 'YTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xy'@;
put 'IHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsTFtMLmxlbmd0aF09IjwvYTpsbkRlZj4iLExbTC5sZW5ndGhdPSI8L2E6b2JqZWN0RGVmYXVsdHM+IixMW0wubGVuZ3RoXT0iPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiIsTFtMLmxlbmd0aF09IjwvYTp0aGVtZT4iLEwuam9pbigi'@;
put 'Iil9ZnVuY3Rpb24gakQoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpLTQsUT1bUF07c3dpdGNoKFApe2Nhc2UgNDpjYXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6UVsxXT1mdW5jdGlvbiBVOSh5KXt2YXIgUD17fTtz'@;
put 'd2l0Y2goUC54Y2xyVHlwZT15LnJlYWRfc2hpZnQoMiksUC5uVGludFNoYWRlPXkucmVhZF9zaGlmdCgyKSxQLnhjbHJUeXBlKXtjYXNlIDA6Y2FzZSA0OnkubCs9NDticmVhaztjYXNlIDE6UC54Y2xyVmFsdWU9ZnVuY3Rpb24gcW0oeSxQKXtyZXR1cm4geWMoeSxQKX0oeSw0KTticmVhaztj'@;
put 'YXNlIDI6UC54Y2xyVmFsdWU9dm0oeSk7YnJlYWs7Y2FzZSAzOlAueGNsclZhbHVlPWZ1bmN0aW9uIE1DKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoNCl9KHkpfXJldHVybiB5LmwrPTgsUH0oeSk7YnJlYWs7Y2FzZSA2OlFbMV09ZnVuY3Rpb24gQkQoeSxQKXtyZXR1cm4geWMoeSxQKX0oeSxM'@;
put 'KTticmVhaztjYXNlIDE0OmNhc2UgMTU6UVsxXT15LnJlYWRfc2hpZnQoMT09PUw/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIitQKyIgIitMKX1yZXR1cm4gUX1mdW5jdGlvbiBVRCh5LFApe1AuZm9yRWFjaChmdW5jdGlv'@;
put 'bihMKXtzd2l0Y2goTFswXSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDEzOnkuZm9udCYmeS5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KExbMV0ueGNsclZhbHVlKSYmKHkuZm9u'@;
put 'dC5jb2xvci5yZ2I9ejEoTFsxXS54Y2xyVmFsdWUpKX19KX1mdW5jdGlvbiBkYSh5KXtyZXR1cm4geS85MTQ0MDAqbmZ9ZnVuY3Rpb24geEMoeSxQKXt2YXIgTD17fTtpZih5LnBvcylMLng9ZGEoeS5wb3MueCksTC55PWRhKHkucG9zLnkpO2Vsc2V7aWYoIXkuZnJvbSl0aHJvdyJiYWQgYW5j'@;
put 'aG9yIHN0YXJ0IjtMLnI9eS5mcm9tLnJ8fDAsTC5jPXkuZnJvbS5jfHwwLHkuZnJvbS5jT2ZmJiYoTC54PWRhKHkuZnJvbS5jT2ZmKSkseS5mcm9tLnJPZmYmJihMLnk9ZGEoeS5mcm9tLnJPZmYpKX1pZih5LmV4dClMLnc9ZGEoeS5leHQueCksTC5oPWRhKHkuZXh0LnkpO2Vsc2V7aWYoIXku'@;
put 'dG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO0wuQz15LnRvLmMsTC5SPXkudG8ucix5LnRvLmNPZmYmJihMLlg9ZGEoeS50by5jT2ZmKSkseS50by5yT2ZmJiYoTC5ZPWRhKHkudG8uck9mZikpfXJldHVybiBMfWZ1bmN0aW9uIHNmKHksUCl7dmFyIEw9e3g6LTEseTotMSx3Oi0xLGg6LTF9O2lm'@;
put 'KHkucG9zKUwueD1kYSh5LnBvcy54KSxMLnk9ZGEoeS5wb3MueSk7ZWxzZXtpZigheS5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO0wueD1ZMShQLHkuZnJvbS5jLCJDIikrZGEoeS5mcm9tLmNPZmYpLEwueT1ZMShQLHkuZnJvbS5yLCJSIikrZGEoeS5mcm9tLnJPZmYpfWlmKHkuZXh0'@;
put 'KUwudz1kYSh5LmV4dC54KSxMLmg9ZGEoeS5leHQueSk7ZWxzZXtpZigheS50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7TC53PVkxKFAseS50by5jLCJDIikrZGEoeS50by5jT2ZmKS1MLngsTC5oPVkxKFAseS50by5yLCJSIikrZGEoeS50by5yT2ZmKS1MLnl9cmV0dXJuIEx9ZnVuY3Rpb24g'@;
put 'S20oeSxQKXt2YXIgTD17cjotMSxjOi0xLHg6LTEseTotMSxSOi0xLEM6LTEsWDotMSxZOi0xfTtzd2l0Y2goeS50eXBlKXtjYXNlInR3b0NlbGxBbmNob3IiOkwucj15LmZyb20ucixMLnk9ZGEoeS5mcm9tLnJPZmYpLEwuUj15LnRvLnIsTC5ZPWRhKHkudG8uck9mZiksTC5jPXkuZnJvbS5j'@;
put 'LEwueD1kYSh5LmZyb20uY09mZiksTC5DPXkudG8uYyxMLlg9ZGEoeS50by5jT2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOkwucj15LmZyb20ucixMLnk9ZGEoeS5mcm9tLnJPZmYpO3ZhciBRPUcyKFAsTC5yLEwueStkYSh5LmV4dC55KSk7TC5SPVFbMF0sTC5ZPVFbMV0sTC5jPXku'@;
put 'ZnJvbS5jLEwueD1kYSh5LmZyb20uY09mZik7dmFyIHJlPUptKFAsTC5jLEwueCtkYSh5LmV4dC54KSk7TC5DPXJlWzBdLEwuWD1yZVsxXTticmVhaztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgZ2U9RzIoUCwwLGRhKHkucG9zLnkpKTtMLnI9Z2VbMF0sTC55PWdlWzFdO3ZhciBfZT1HMihQ'@;
put 'LEwucixMLnkrZGEoeS5leHQueSkpO0wuUj1fZVswXSxMLlk9X2VbMV07dmFyIHZlPUcyKFAsMCxkYSh5LnBvcy54KSk7TC5jPXZlWzBdLEwueD12ZVsxXTt2YXIgU2U9RzIoUCxMLmMsTC54K2RhKHkuZXh0LngpKTtMLkM9U2VbMF0sTC5YPVNlWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFk'@;
put 'IGFuY2hvciB0eXBlICIreS50eXBlfXJldHVybiBMfWZ1bmN0aW9uIFhtKHksUCl7dmFyIEw9eS50cmltKCkuc3BsaXQoL1xzKixccyovKTtQWyIhcG9zIl09e2M6K0xbMF0seDorTFsxXSxyOitMWzJdLHk6K0xbM10sQzorTFs0XSxYOitMWzVdLFI6K0xbNl0sWTorTFs3XX19ZnVuY3Rpb24g'@;
put 'RUMoeSxQLEwpe3ZhciBRPS0xO2lmKG51bGwhPXkuUnx8bnVsbCE9eS5DKVE9MDtlbHNle2lmKG51bGw9PXkueHx8bnVsbD09eS55fHxudWxsPT15Lnd8fG51bGw9PXkuaCl0aHJvdyJjYW5ub3QgcGFyc2UgYW5jaG9yICIrSlNPTi5zdHJpbmdpZnkoeSk7UT0xKzIqISh5LmN8fHkucil9aWYo'@;
put 'USE9UCl7c3dpdGNoKFApe2Nhc2UgMDpjYXNlIDE6aWYoMyE9USlicmVhazt2YXIgcmU9Sm0oTCx5LmN8fDAseS54fHwwKTt5LmM9cmVbMF0seS54PXJlWzFdO3ZhciBnZT1HMihMLHkucnx8MCx5Lnl8fDApO3kucj1nZVswXSx5Lnk9Z2VbMV07YnJlYWs7Y2FzZSAzOmlmKDM9PVEpYnJlYWs7'@;
put 'dmFyIF9lPXkuY3x8MCx2ZT15Lnh8fDA7ZGVsZXRlIHkuYyxkZWxldGUgeS54LHkueD0oX2U/WTQoTCxfZSk6MCkrdmU7dmFyIFNlPXkucnx8MCxIZT15Lnl8fDA7ZGVsZXRlIHkucixkZWxldGUgeS55LHkueT0oU2U/RjMoTCxTZSk6MCkrSGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0'@;
put 'X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1B9c3dpdGNoKFApe2Nhc2UgMDppZigwPT1RKWJyZWFrO3ZhciBCZT1KbShMLHkuY3x8MCwoeS54fHwwKSt5LncpO2RlbGV0ZSB5LncseS5DPUJlWzBdLHkuWD1CZVsxXTt2YXIgR2U9RzIoTCx5LnJ8fDAsKHkueXx8MCkreS5oKTtkZWxldGUg'@;
put 'eS5oLHkuUj1HZVswXSx5Llk9R2VbMV07YnJlYWs7Y2FzZSAxOmNhc2UgMzppZigwIT1RKWJyZWFrO3ZhciBudD15LkN8fDAsZHQ9eS5YfHwwO2RlbGV0ZSB5LkMsZGVsZXRlIHkuWCx5Lnc9WTQoTCxudCkrZHQtKHkuYz9ZNChMLHkuYyk6MCktKHkueHx8MCk7dmFyIEN0PXkuUnx8MCxjdD15'@;
put 'Lll8fDA7ZGVsZXRlIHkuUixkZWxldGUgeS5ZLHkuaD1GMyhMLEN0KStjdC0oeS5yP0YzKEwseS5yKTowKS0oeS55fHwwKTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUH19fWZ1bmN0aW9uIGtDKHkpe3ZhciBQPVt5LmN8fDAsTWF0aC5y'@;
put 'b3VuZCh5Lnh8fDApLHkucnx8MCxNYXRoLnJvdW5kKHkueXx8MCldO3JldHVybihQPVAuY29uY2F0KHkuaCYmeS53P1tQWzBdLE1hdGgucm91bmQoUFsxXSt5LncpLFBbMl0sTWF0aC5yb3VuZChQWzNdK3kuaCldOlt5LkN8fDAsTWF0aC5yb3VuZCh5Llh8fDApLHkuUnx8MCxNYXRoLnJvdW5k'@;
put 'KHkuWXx8MCldKSkuam9pbigiLCAiKX1mdW5jdGlvbiBGMyh5LFApe2lmKCF5KXJldHVybiAwO2Zvcih2YXIgTD0wOy0tUD49MDspe3ZhciBRPSgoeVsiIXJvd3MiXXx8W10pW1BdfHx7fSkuaHB4O251bGw9PVEmJihRPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51'@;
put 'bGw9PVEmJihRPTI0KSxMKz1RfXJldHVybiBMfWZ1bmN0aW9uIFk0KHksUCl7aWYoIXkpcmV0dXJuIDA7Zm9yKHZhciBMPTA7LS1QPj0wOyl7dmFyIFE9KCh5WyIhY29scyJdfHxbXSlbUF18fHt9KS53cHg7aWYobnVsbD09USYmKFE9KCh5WyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30p'@;
put 'LndweCksbnVsbD09USl7dmFyIHJlPXt3Y2g6OC40M307cHUocmUpLHlbIiFjb2xzIl0mJih5WyIhY29scyJdW1BdPXJlKSxRPXJlLndweH1MKz1RfXJldHVybiBMfWZ1bmN0aW9uIFkxKHksUCxMKXtyZXR1cm4iQyI9PUw/WTQoeSxQKTpGMyh5LFApfWZ1bmN0aW9uIEcyKHksUCxMKXt2YXIg'@;
put 'UT1bUCxMXTtpZigheSlyZXR1cm4gUTtmb3IoOzspe3ZhciByZT0oeVsiIXJvd3MiXXx8W10pW1FbMF1dfHx7fTtpZihyZS5oaWRkZW4pKytRWzBdO2Vsc2V7dmFyIGdlPXJlLmhweDtpZihudWxsPT1nZSYmKGdlPSgoeVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9'@;
put 'PWdlJiYoZ2U9VTEoMTUpKSxRWzFdPGdlKWJyZWFrO1FbMF0rKyxRWzFdLT1nZX19cmV0dXJuIFF9ZnVuY3Rpb24gSm0oeSxQLEwpe3ZhciBRPVtQLExdO2lmKCF5KXJldHVybiBRO2Zvcig7Oyl7dmFyIHJlPSh5WyIhY29scyJdfHxbXSlbUVswXV18fHt9O2lmKHJlLmhpZGRlbnx8MD09PXJl'@;
put 'LndweCkrK1FbMF07ZWxzZXt2YXIgZ2U9cmUud3B4O2lmKG51bGw9PWdlJiYoZ2U9KCh5WyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09Z2Upe3ZhciBfZT17d2NoOjguNDN9O3B1KF9lKSx5WyIhY29scyJdJiYoeVsiIWNvbHMiXVtRWzBdXT1fZSksZ2U9X2Uud3B4'@;
put 'fWlmKFFbMV08Z2UpYnJlYWs7UVswXSsrLFFbMV0tPWdlfX1yZXR1cm4gUX1mdW5jdGlvbiBPdSh5KXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgeT95LnRvU3RyaW5nKDE2KTp5KSkuc2xpY2UoLTYpfWZ1bmN0aW9uIFVkKHksUCxMKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9m'@;
put 'IFA/ISFMOiEhUDsic3RyaW5nIiE9dHlwZW9mIFAmJihQPSJjb2xvciIpO3ZhciByZT0iPCIrUCsiICI7cmV0dXJuIHkuYXV0bz9yZSsnYXV0bz0iMSIvPic6eS5pbmRleCYmbnVsbD09eS5yZ2I/cmUrJ2luZGV4ZWQ9IicreS5pbmRleCsnIi8+JzpudWxsIT15LnRoZW1lP3JlKyd0aGVtZT0i'@;
put 'Jyt5LnRoZW1lKyciJysoeS50aW50PycgdGludD0iJyt5LnRpbnQrJyInOiIiKSsiLz4iOm51bGwhPXkucmdiP3JlKydyZ2I9IicrKFE/IkZGIjoiIikrT3UoeS5yZ2IpKyciLz4nOnJlKyIvPiJ9ZnVuY3Rpb24gSDMoeSxQKXtpZigheXx8bnVsbD09eS5yZ2IpcmV0dXJuIFA7Zm9yKHZhciBM'@;
put 'PSgiMDAwMDAwIit5LnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxRPVtMLnNsaWNlKDAsMiksTC5zbGljZSgyLDQpLEwuc2xpY2UoNCw2KV0ubWFwKGZ1bmN0aW9uKF9lKXtyZXR1cm4gcGFyc2VJbnQoX2UsMTYpfSkscmU9MDtyZTxDci5sZW5ndGg7KytyZSl7dmFyIGdlPUNyW3JlXTtp'@;
put 'ZihnZVswXT09UVswXSYmZ2VbMV09PVFbMV0mJmdlWzJdPT1RWzJdKXJldHVybiByZX1yZXR1cm4gQ3IubGVuZ3RoPDY0PyhDci5wdXNoKFtRWzBdLFFbMV0sUVsyXV0pLENyLmxlbmd0aC0xKTpQfWZ1bmN0aW9uIFcxKHkpe3ZhciBQPVsiIiwiIiwiIl07aWYoIXkpcmV0dXJuW107dmFyIEw9'@;
put 'IiIsUT15JiZ5LnM/ZnVuY3Rpb24gWkQoeSl7dmFyIFA9WyIiLCIiXTtpZigheSlyZXR1cm4gUDtpZih5LnN6JiYoUFswXSs9IiYiK3kuc3osUFsxXT0iJjEyIitQWzFdKSx5Lm5hbWUmJihQWzBdKz0nJiInK3kubmFtZSsnLFJlZ3VsYXIiJyxQWzFdPScmIi0sUmVndWxhciInK1BbMV0pLHku'@;
put 'Ym9sZCYmKFBbMF0rPSImQiIsUFsxXT0iJkIiK1BbMV0pLHkudW5kZXJsaW5lKXt2YXIgTD0yPT15LnVuZGVybGluZT8iJkUiOiImVSI7UFswXSs9TCxQWzFdPUwrUFsxXX1yZXR1cm4geS5pdGFsaWMmJihQWzBdKz0iJkkiLFBbMV09IiZJIitQWzFdKSx5LmNvbG9yJiZudWxsIT15LmNvbG9y'@;
put 'LnJnYiYmKFBbMF0rPSImSyIrT3UoeS5jb2xvci5yZ2IpLFBbMV0rPSImSzAwMDAwMCIpLHkuc3RyaWtlJiYoUFswXSs9IiZTIixQWzFdPSImUyIrUFsxXSksInN1cGVyIj09eS52YWxpZ24mJihQWzBdKz0iJlgiLFBbMV09IiZYIitQWzFdKSwic3ViIj09eS52YWxpZ24mJihQWzBdKz0iJlki'@;
put 'LFBbMV09IiZZIitQWzFdKSxQfSh5LnMpOlsiIiwiIl07cmV0dXJuInN0cmluZyI9PXR5cGVvZiB5P1t5LHkseV06bnVsbCE9eS5maXJzdHx8bnVsbCE9eS5ldmVufHxudWxsIT15Lm9kZD8obnVsbCE9eS5vZGQmJihQWzBdPVcxKHkub2RkKVswXSksdm9pZCAwPT09eS5maXJzdCYmUFswXSYm'@;
put 'KFBbMV09UFswXSksbnVsbCE9eS5maXJzdCYmKFBbMV09VzEoeS5maXJzdClbMF0pLG51bGwhPXkuZXZlbiYmKFBbMl09VzEoeS5ldmVuKVswXSksUCk6eS5sZWZ0fHx5LmNlbnRlcnx8eS5yaWdodD8oeS5sZWZ0JiYoTCs9IiZMIitXMSh5LmxlZnQpWzBdKSx5LmNlbnRlciYmKEwrPSImQyIr'@;
put 'VzEoeS5jZW50ZXIpWzBdKSx5LnJpZ2h0JiYoTCs9IiZSIitXMSh5LnJpZ2h0KVswXSksW0wsTCxMXSk6bnVsbCE9eS52P1tMPVFbMF0reS52LnJlcGxhY2UoLyYvZywiJiYiKStRWzFdLEwsTF06bnVsbCE9eS53P1tMPVFbMF0reS53K1FbMV0sTCxMXTpBcnJheS5pc0FycmF5KHkuUik/KHku'@;
put 'Ui5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtMKz1XMShyZSlbMF19KSxbTCxMLExdKTpbXX12YXIgUW09ezE6IkxldHRlciIsMzoiVGFibG9pZCIsNToiTGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoiQTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8iLDIwOiJFbnZlbG9w'@;
put 'ZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LFo5PWJlKFFtKTtIaS5DT05OPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Nvbm5lY3Rpb25zIjt2YXIgdDY9U3IoImV4dGVybmFsTGluayIsbnVsbCx7eG1sbnM6aXMu'@;
put 'bWFpblswXX0pO0hpLklNRz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsSGkuRFJBVz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25z'@;
put 'aGlwcy9kcmF3aW5nIjt2YXIgWUQ9e3Q6InRvcCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVzdDoidG9wIixkaXN0OiJ0b3AifSxMQz17Y3RyOiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIsanVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJpZ2h0Iix0aGFpRGlz'@;
put 'dDoiY2VudGVyIn07ZnVuY3Rpb24gUkMoKXt2YXIgeT1bQm5dO3JldHVybiB5LnB1c2goJzx4ZHI6d3NEciB4bWxuczp4ZHI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFz'@;
put 'Lm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIi8+JykseS5qb2luKCIiKX1mdW5jdGlvbiBPQyh5KXt2YXIgTCxQPXlbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT15WyIhZGF0YXR5cGUiXT8oKEw9UC5tYXRjaCgvXmRhdGE6LiosLykpJiYoUD1QLnNsaWNlKExbMF0u'@;
put 'bGVuZ3RoKSksc2UuZGVjb2RlKFApKTpQfUhpLlRBQkxFPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIjt2YXIgTjM9LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xzXFNdKj8pPFwvKD86'@;
put 'XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gcUQoeSxQLEwsUSl7dmFyIHJlPVsyMTYwMCwyMTYwMF0sZ2U9WyJtMCwwbDAiLHJlWzFdLHJlWzBdLHJlWzFdLHJlWzBdLCIweGUiXS5qb2luKCIsIiksX2U9W1NyKCJ4bWwiLG51bGwseyJ4bWxuczp2IjpXaS52LCJ4bWxuczpvIjpXaS5vLCJ4bWxu'@;
put 'czp4IjpXaS54LCJ4bWxuczptdiI6V2kubXZ9KS5yZXBsYWNlKC9cLz4vLCI+IiksU3IoIm86c2hhcGVsYXlvdXQiLFNyKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0In0pLHsidjpleHQiOiJlZGl0In0pXSx2ZT0xMDI0KnksU2U9THx8W107U2UubGVuZ3RoPjAmJl9lLnB1c2goU3Io'@;
put 'InY6c2hhcGV0eXBlIixbU3IoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLFNyKCJ2OnBhdGgiLG51bGwse3NoYWRvd29rOiJmIixleHRydXNpb25vazoiZiIsc3Ryb2tlb2s6ImYiLGZpbGxvazoiZiIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pLFNyKCJvOmxvY2siLG51'@;
put 'bGwseyJ2OmV4dCI6ImVkaXQiLHNoYXBldHlwZToidCJ9KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMSIsY29vcmRzaXplOnJlLmpvaW4oIiwiKSwibzpzcHQiOjIwMSxwYXRoOmdlfSkpLFNlLmZvckVhY2goZnVuY3Rpb24oQmUpeysrdmUsX2U9X2UuY29uY2F0KGZ1bmN0aW9uIEZDKHks'@;
put 'UCl7dmFyIEw9e2lkOiJfeDAwMDBfcyIrUCx0eXBlOiIjX3gwMDAwX3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT15WyIhdHlwZSJdfHwiQ2hlY2tib3giPT15WyIhdHlwZSJdfHwiTGlzdCI9PXlbIiF0eXBlIl18fCJEcm9wIj09eVsiIXR5cGUiXSkmJihM'@;
put 'LnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT15WyIhdHlwZSJdJiYoTC5maWxsZWQ9ImYiKTt2YXIgUT0iIjt5LnQmJlBDW3lbIiF0eXBlIl1dJiYoUT1QQ1t5WyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxIcih5LnQpKSk7dmFyIHJlPVtdO3JldHVybiB5Lm1hY3JvJiZyZS5wdXNoKGZzKCJ4OkZt'@;
put 'bGFNYWNybyIseS5tYWNybykpLHkubGluayYmcmUucHVzaChmcygieDpGbWxhTGluayIseS5saW5rKSkseS52YWwmJnJlLnB1c2goZnMoIlJhZGlvIj09eVsiIXR5cGUiXXx8IkNoZWNrYm94Ij09eVsiIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyh5LnZhbCkpKSx5LnJlZiYm'@;
put 'cmUucHVzaChmcygieDpGbWxhUmFuZ2UiLHkucmVmKSkseS5zZWwmJiJMaXN0Ij09eVsiIXR5cGUiXSYmcmUucHVzaChmcygieDpTZWxUeXBlIix5LnNlbCkpLHkubWluJiZyZS5wdXNoKGZzKCJ4Ok1pbiIsU3RyaW5nKHkubWluKSkpLHkubWF4JiZyZS5wdXNoKGZzKCJ4Ok1heCIsU3RyaW5n'@;
put 'KHkubWF4KSkpLHkuc3RlcCYmcmUucHVzaChmcygieDpJbmMiLFN0cmluZyh5LnN0ZXApKSkseS5wYWdlJiZyZS5wdXNoKGZzKCJ4OlBhZ2UiLFN0cmluZyh5LnBhZ2UpKSksW10uY29uY2F0KFsiPHY6c2hhcGUiK1BhKEwpKyI+Il0pLmNvbmNhdChHOVt5WyIhdHlwZSJdXXx8W10pLmNvbmNh'@;
put 'dChbUV0pLmNvbmNhdChbJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iJyt5WyIhdHlwZSJdKyciPicsZnMoIng6QW5jaG9yIixrQyh5WyIhcG9zIl0pKSxmcygieDpQcmludE9iamVjdCIsIkZhbHNlIildKS5jb25jYXQocmUpLmNvbmNhdChMWlt5WyIhdHlwZSJdXXx8W10pLmNvbmNhdChb'@;
put 'IjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXSl9KEJlLHZlKSl9KTt2YXIgSGU9UHx8W107cmV0dXJuIEhlLmxlbmd0aD4wJiZfZS5wdXNoKFNyKCJ2OnNoYXBldHlwZSIsW1NyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxTcigidjpwYXRoIixudWxsLHtncmFk'@;
put 'aWVudHNoYXBlb2s6InQiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KV0uam9pbigiIikse2lkOiJfeDAwMDBfdDIwMiIsY29vcmRzaXplOnJlLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOmdlfSkpLEhlLmZvckVhY2goZnVuY3Rpb24oQmUpeysrdmUsX2U9X2UuY29uY2F0KGZ1bmN0aW9u'@;
put 'IEs0KHksUCxMKXt2YXIgUT1zcyh5WzBdKSxyZT15WzFdLmZpbGx8fHt9O3lbMV0ucyYmKHJlPXt0eXBlOnlbMV0ucy5wYXR0ZXJuVHlwZXx8InNvbGlkIn0seVsxXS5zLmZnQ29sb3ImJihyZS5jb2xvcjI9cmUuY29sb3IxPSIjIitPdSh5WzFdLnMuZmdDb2xvci5yZ2IpKSx5WzFdLnMuYmdD'@;
put 'b2xvciYmKHJlLmNvbG9yMj0iIyIrT3UoeVsxXS5zLmJnQ29sb3IucmdiKSkpO3ZhciBnZT17Y29sb3IyOnJlLmNvbG9yMnx8IiNCRUZGODIiLHR5cGU6cmUudHlwZXx8ImdyYWRpZW50In07ImdyYWRpZW50Ij09Z2UudHlwZSYmKGdlLmFuZ2xlPSItMTgwIik7dmFyIF9lPSJncmFkaWVudCI9'@;
put 'PWdlLnR5cGU/U3IoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGllbnRVbnNjYWxlZCIsInY6ZXh0IjoidmlldyJ9KTpudWxsLHZlPVNyKCJ2OmZpbGwiLF9lLGdlKSxTZT17fTt5WzFdLnNoYWRvdyYmKHlbMV0uc2hhZG93LmNvbG9yJiYoU2UuY29sb3I9eVsxXS5zaGFkb3cuY29sb3IpLHlb'@;
put 'MV0uc2hhZG93Lm9uJiYoU2Uub249eVsxXS5zaGFkb3cub24pKSxTZS5vYnNjdXJlZD0idCI7dmFyIEhlPSEwLEJlPSEwLEdlPXlbMV1bIiFwb3MiXT9vbih5WzFdWyIhcG9zIl0pOm51bGw7cmV0dXJuIEdlJiYoQmU9bnVsbD09R2UuUiYmbnVsbD09R2UuQyYmbnVsbD09R2UuWCYmbnVsbD09'@;
put 'R2UuWSxIZT0hR2UuciYmIUdlLmMsRUMoR2UsMCxMKSksWyI8djpzaGFwZSIrUGEoe2lkOiJfeDAwMDBfcyIrUCx0eXBlOiIjX3gwMDAwX3QyMDIiLHN0eWxlOiJwb3NpdGlvbjphYnNvbHV0ZTsgbWFyZ2luLWxlZnQ6ODBwdDttYXJnaW4tdG9wOjVwdDt3aWR0aDoxMDRwdDtoZWlnaHQ6NjRw'@;
put 'dDt6LWluZGV4OjEwIisoeVsxXS5oaWRkZW4/Ijt2aXNpYmlsaXR5OmhpZGRlbiI6IiIpLGZpbGxjb2xvcjpyZS5jb2xvcjF8fCIjRUNGQUQ0IixzdHJva2Vjb2xvcjooeVsxXS5zdHJva2V8fHt9KS5jb2xvcnx8IiNlZGVhYTEifSkrIj4iLHZlLFNyKCJ2OnNoYWRvdyIsbnVsbCxTZSksU3Io'@;
put 'InY6cGF0aCIsbnVsbCx7Im86Y29ubmVjdHR5cGUiOiJub25lIn0pLCc8djp0ZXh0Ym94PjxkaXYgc3R5bGU9InRleHQtYWxpZ246bGVmdCI+PC9kaXY+PC92OnRleHRib3g+JywnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSJOb3RlIj4nLEhlPyI8eDpNb3ZlV2l0aENlbGxzLz4iOiIiLEJl'@;
put 'PyI8eDpTaXplV2l0aENlbGxzLz4iOiIiLGZzKCJ4OkFuY2hvciIsR2U/a0MoR2UpOnlbMV0ucmF3YW5jaG9yfHxbUS5jKzEsMCxRLnIrMSwwLFEuYyszLDIwLFEucis1LDIwXS5qb2luKCIsIikpLGZzKCJ4OkF1dG9GaWxsIiwiRmFsc2UiKSxmcygieDpSb3ciLFN0cmluZyhRLnIpKSxmcygi'@;
put 'eDpDb2x1bW4iLFN0cmluZyhRLmMpKSx5WzFdLmhpZGRlbj8iIjoiPHg6VmlzaWJsZS8+IiwiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdfShCZSx2ZSxRKSl9KSxfZS5wdXNoKCI8L3htbD4iKSxfZS5qb2luKCIiKX12YXIgTFo9e0J1dHRvbjpbIjx4OkF1dG9GaWxsPkZhbHNlPC94'@;
put 'OkF1dG9GaWxsPiIsIjx4OlRleHRIQWxpZ24+Q2VudGVyPC94OlRleHRIQWxpZ24+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iXSxHQm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6Tm9UaHJlZUQvPiJd'@;
put 'LExhYmVsOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+Il0sUmFkaW86WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGlu'@;
put 'ZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxDaGVja2JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRW'@;
put 'QWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLERyb3A6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OlNlbFR5cGU+U2luZ2xlPC94OlNlbFR5cGU+IiwiPHg6RHJvcFN0'@;
put 'eWxlPkNvbWJvPC94OkRyb3BTdHlsZT4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpEcm9wTGluZXM+NDwveDpEcm9wTGluZXM+Il0sTGlzdDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6TENU'@;
put 'Pk5vcm1hbDwveDpMQ1Q+IiwiPHg6VmFsPjA8L3g6VmFsPiIsIjx4Ok1pbj4wPC94Ok1pbj4iLCI8eDpNYXg+NTwveDpNYXg+IiwiPHg6SW5jPjE8L3g6SW5jPiIsIjx4OlBhZ2U+NDwveDpQYWdlPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNjcm9sbDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4'@;
put 'Okhvcml6Lz4iLCI8eDpEeD4xNTwveDpEeD4iXSxTcGluOlsiPHg6RHg+MTU8L3g6RHg+Il19LFBDPXtCdXR0b246Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Zm9udCBm'@;
put 'YWNlPSdDYWxpYnJpJyBzaXplPScyNDAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsR0JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0'@;
put 'Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsUmFkaW86Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9'@;
put 'J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nYXV0byc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLExhYmVsOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdm'@;
put 'Jz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixDaGVja2JveDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0'@;
put 'bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsc2hlZXRqczoiZGFmdXEifSxHOT17QnV0dG9uOlsn'@;
put 'PHY6ZmlsbCBjb2xvcjI9IiNmMGYwZjAgWzY3XSIgbzpkZXRlY3Rtb3VzZWNsaWNrPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxHQm94OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxEcm9wOlsnPG86bG9jayB2OmV4dD0iZWRp'@;
put 'dCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMaXN0OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTcGluOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxTY3JvbGw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0'@;
put 'IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExhYmVsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxSYWRpbzpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIv'@;
put 'PiddLENoZWNrYm94OlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sc2hlZXRqczpbXX07ZnVuY3Rpb24gbjYoeSxQLEwsUSl7dmFyIHJlPXsiIWlkIjp7fX0sZ2U9W1NyKCJ4bWwi'@;
put 'LG51bGwseyJ4bWxuczp2IjpXaS52LCJ4bWxuczpvIjpXaS5vLCJ4bWxuczp4IjpXaS54fSkucmVwbGFjZSgvXC8+LywiPiIpLFNyKCJvOnNoYXBlbGF5b3V0IixTcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSkseyJ2OmV4dCI6ImVkaXQifSksJzx2OnNoYXBldHlw'@;
put 'ZSBpZD0iX3gwMDAwX3Q3NSIgY29vcmRzaXplPSIyMTYwMCwyMTYwMCIgbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJtQDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiIHN0cm9rZWQ9ImYiPicsJzx2OnN0cm9rZSBqb2luc3R5bGU9Im1pdGVyIi8+JywiPHY6'@;
put 'Zm9ybXVsYXM+IiwnPHY6ZiBlcW49ImlmIGxpbmVEcmF3biBwaXhlbExpbmVXaWR0aCAwIi8+JywnPHY6ZiBlcW49InN1bSBAMCAxIDAiLz4nLCc8djpmIGVxbj0ic3VtIDAgMCBAMSIvPicsJzx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVs'@;
put 'V2lkdGgiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+JywnPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJzdW0gQDggMjE2'@;
put 'MDAgMCIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMTAgMjE2MDAgMCIvPicsIjwvdjpmb3JtdWxhcz4iLCc8djpwYXRoIG86ZXh0cnVzaW9ub2s9ImYiIGdyYWRpZW50c2hhcGVvaz0idCIgbzpjb25uZWN0dHlwZT0icmVjdCIv'@;
put 'PicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIGFzcGVjdHJhdGlvPSJ0Ii8+JywiPC92OnNoYXBldHlwZT4iXSxfZT0xO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7UVt2ZV0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihTZSl7UVt2ZV1b'@;
put 'U2VdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oSGUpe2lmKEFycmF5LmlzQXJyYXkoUVt2ZV1bU2VdW0hlXSkpZm9yKHZhciBCZT0wO0JlPFFbdmVdW1NlXVtIZV0ubGVuZ3RoOysrQmUpaWYoUVt2ZV1bU2VdW0hlXVtCZV0pe3ZhciBHZT1RW3ZlXVtTZV1b'@;
put 'SGVdW0JlXTtpZigicmVtb3RlIj09R2VbIiFkYXRhdHlwZSJdKXRocm93IkNhbm5vdCB1c2UgbGlua2VkIGltYWdlIGluIGhlYWRlciBvciBmb290ZXIiO2Zvcig7bW4oeSwieGwvbWVkaWEvaW1hZ2UiK19lKyIuanBnIik7KSsrX2U7eS5maWxlKCJ4bC9tZWRpYS9pbWFnZSIrX2UrIi5qcGci'@;
put 'LE9DKEdlKSx7YmluYXJ5OiEwfSksem8ocmUsLTEsIi4uL21lZGlhL2ltYWdlIitfZSsiLmpwZyIsSGkuSU1HKTt2YXIgbnQ9Il94MDAwMF9zIisoMTAyNStHZS5fY250KSxkdD0icG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjA7ei1pbmRleDoiKyhHZS5fY250'@;
put 'KzEpKyI7IjtkdCs9IndpZHRoOiIrR2VbIiFwb3MiXS53KyJweDsiLGR0Kz0iaGVpZ2h0OiIrR2VbIiFwb3MiXS5oKyJweDsiO3ZhciBDdD1IZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt2ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsib2RkIiE9PVNlJiYoQ3QrPVNlLnRvVXBwZXJDYXNl'@;
put 'KCkpLFFbdmVdW1NlXVtIZV0ubGVuZ3RoPjEmJihDdCs9QmUpLGdlLnB1c2goU3IoInY6c2hhcGUiLFsnPHY6aW1hZ2VkYXRhIG86cmVsaWQ9InJJZCcrKEdlLl9jbnQrMSkrJyIgbzp0aXRsZT0ic2hlZXRqcyIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10uam9p'@;
put 'bigiIikse2lkOkN0LCJvOnNwaWQiOm50LHR5cGU6IiNfeDAwMDBfdDc1IixzdHlsZTpkdH0pKX19KX0pfSksZ2UucHVzaCgiPC94bWw+IikseS5maWxlKCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitMKyJIRi52bWwiLGdlLmpvaW4oIiIpKSx5LmZpbGUoInhsL2RyYXdpbmdzL19yZWxzL3Zt'@;
put 'bERyYXdpbmciK0wrIkhGLnZtbC5yZWxzIixYYShyZSkpfUhpLkNNTlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29tbWVudHMiO3ZhciBOQz1TcigiY29tbWVudHMiLG51bGwse3htbG5zOmlzLm1haW5bMF19'@;
put 'KTtmdW5jdGlvbiBWQyh5KXt2YXIgUD1bQm4sTkNdLEw9W107cmV0dXJuIFAucHVzaCgiPGF1dGhvcnM+IikseS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIGdlPUhyKHJlLmEpO0wuaW5kZXhPZihnZSk+LTF8fChMLnB1c2goZ2UpLFAucHVzaCgi'@;
put 'PGF1dGhvcj4iK2dlKyI8L2F1dGhvcj4iKSl9KX0pLFAucHVzaCgiPC9hdXRob3JzPiIpLFAucHVzaCgiPGNvbW1lbnRMaXN0PiIpLHkuZm9yRWFjaChmdW5jdGlvbihRKXtRWzFdLmZvckVhY2goZnVuY3Rpb24ocmUpe1AucHVzaCgnPGNvbW1lbnQgcmVmPSInK1FbMF0rJyIgYXV0aG9ySWQ9'@;
put 'IicrTC5pbmRleE9mKEhyKHJlLmEpKSsnIj48dGV4dD4nKSxQLnB1c2gocmUuUj9KaChyZS5SKTpmcygidCIsbnVsbD09cmUudD8iIjpIcihyZS50KSkpLFAucHVzaCgiPC90ZXh0PjwvY29tbWVudD4iKX0pfSksUC5wdXNoKCI8L2NvbW1lbnRMaXN0PiIpLFAubGVuZ3RoPjImJihQW1AubGVu'@;
put 'Z3RoXT0iPC9jb21tZW50cz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX12YXIgWEQ9Q2M7ZnVuY3Rpb24gZUkoeSl7dmFyIFA9d2MoKSxMPVtdO3JldHVybiB1aShQLCJCcnRCZWdpbkNvbW1lbnRzIiksdWkoUCwiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyIpLHku'@;
put 'Zm9yRWFjaChmdW5jdGlvbihRKXtRWzFdLmZvckVhY2goZnVuY3Rpb24ocmUpe0wuaW5kZXhPZihyZS5hKT4tMXx8KEwucHVzaChyZS5hLnNsaWNlKDAsNTQpKSx1aShQLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiBKRCh5KXtyZXR1cm4gbmMoeS5zbGljZSgwLDU0KSl9KHJlLmEpKSl9'@;
put 'KX0pLHVpKFAsIkJydEVuZENvbW1lbnRBdXRob3JzIiksdWkoUCwiQnJ0QmVnaW5Db21tZW50TGlzdCIpLHkuZm9yRWFjaChmdW5jdGlvbihRKXtRWzFdLmZvckVhY2goZnVuY3Rpb24ocmUpe3JlLmlhdXRob3I9TC5pbmRleE9mKHJlLmEpO3ZhciBnZT17czpzcyhRWzBdKSxlOnNzKFFbMF0p'@;
put 'fTt1aShQLCJCcnRCZWdpbkNvbW1lbnQiLGZ1bmN0aW9uIEtEKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPWZyKDM2KSksUC53cml0ZV9zaGlmdCg0LHlbMV0uaWF1dGhvciksRDEoeVswXSxQKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCww'@;
put 'KSxQLndyaXRlX3NoaWZ0KDQsMCksUH0oW2dlLHJlXSkpLHJlLnQmJnJlLnQubGVuZ3RoPjAmJnVpKFAsIkJydENvbW1lbnRUZXh0IixmdW5jdGlvbiBhcih5LFApe3ZhciBMPSExO3JldHVybiBudWxsPT1QJiYoTD0hMCxQPWZyKDIzKzQqeS50Lmxlbmd0aCkpLFAud3JpdGVfc2hpZnQoMSwx'@;
put 'KSxuYyh5LnQsUCksUC53cml0ZV9zaGlmdCg0LDEpLGZ1bmN0aW9uIGtkKHksUCl7UHx8KFA9ZnIoNCkpLFAud3JpdGVfc2hpZnQoMix5LmljaHx8MCksUC53cml0ZV9zaGlmdCgyLHkuaWZudHx8MCl9KHtpY2g6MCxpZm50OjB9LFApLEw/UC5zbGljZSgwLFAubCk6UH0ocmUpKSx1aShQLCJC'@;
put 'cnRFbmRDb21tZW50IiksZGVsZXRlIHJlLmlhdXRob3J9KX0pLHVpKFAsIkJydEVuZENvbW1lbnRMaXN0IiksdWkoUCwiQnJ0RW5kQ29tbWVudHMiKSxQLmVuZCgpfXZhciAkMj0iYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0IixSWj1bInhsc2IiLCJ4bHNtIiwieGxhbSIs'@;
put 'ImJpZmY4IiwieGxhIl07SGkuRFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZGlhbG9nc2hlZXQiLEhpLk1TPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMv'@;
put 'eGxNYWNyb3NoZWV0Ijt2YXIgYWY9ZnVuY3Rpb24oKXt2YXIgeT0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLFA9e3I6MCxjOjB9O2Z1bmN0aW9uIEwoUSxyZSxnZSxfZSl7dmFyIHZlPSExLFNl'@;
put 'PSExOzA9PWdlLmxlbmd0aD9TZT0hMDoiWyI9PWdlLmNoYXJBdCgwKSYmKFNlPSEwLGdlPWdlLnNsaWNlKDEsLTEpKSwwPT1fZS5sZW5ndGg/dmU9ITA6IlsiPT1fZS5jaGFyQXQoMCkmJih2ZT0hMCxfZT1fZS5zbGljZSgxLC0xKSk7dmFyIEhlPWdlLmxlbmd0aD4wPzB8cGFyc2VJbnQoZ2Us'@;
put 'MTApOjAsQmU9X2UubGVuZ3RoPjA/MHxwYXJzZUludChfZSwxMCk6MDtyZXR1cm4gdmU/QmUrPVAuYzotLUJlLFNlP0hlKz1QLnI6LS1IZSxyZSsodmU/IiI6IiQiKStOcyhCZSkrKFNlPyIiOiIkIikrSHMoSGUpfXJldHVybiBmdW5jdGlvbihyZSxnZSl7cmV0dXJuIFA9Z2UscmUucmVwbGFj'@;
put 'ZSh5LEwpfX0oKSxxOT0vKF58W14uX0EtWjAtOV0pKFskXT8pKFtBLVpdezEsMn18W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdKShbJF0/KSgxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHsw'@;
put 'LDV9KSg/IVtfLlwoQS1aYS16MC05XSkvZyxLOT1mdW5jdGlvbihQLEwpe3JldHVybiBQLnJlcGxhY2UocTksZnVuY3Rpb24oUSxyZSxnZSxfZSx2ZSxTZSl7dmFyIEhlPWpoKF9lKS0oZ2U/MDpMLmMpLEJlPUIwKFNlKS0odmU/MDpMLnIpO3JldHVybiByZSsiUiIrKDA9PUJlPyIiOnZlP0Jl'@;
put 'KzE6IlsiK0JlKyJdIikrIkMiKygwPT1IZT8iIjpnZT9IZSsxOiJbIitIZSsiXSIpfSl9O2Z1bmN0aW9uIGpDKHksUCl7cmV0dXJuIHkucmVwbGFjZShxOSxmdW5jdGlvbihMLFEscmUsZ2UsX2UsdmUpe3JldHVybiBRKygiJCI9PXJlP3JlK2dlOk5zKGpoKGdlKStQLmMpKSsoIiQiPT1fZT9f'@;
put 'ZSt2ZTpIcyhCMCh2ZSkrUC5yKSl9KS5yZXBsYWNlKC8oXGQrKTooXGQrKS9nLGZ1bmN0aW9uKEwsUSxyZSl7cmV0dXJuIEhzKEIwKFEpK1AucikrIjoiK0hzKEIwKHJlKStQLnIpfSl9ZnVuY3Rpb24gbkkoeSxQLEwpe3ZhciByZT1XcyhQKS5zLGdlPXNzKEwpO3JldHVybiBqQyh5LHtyOmdl'@;
put 'LnItcmUucixjOmdlLmMtcmUuY30pfWZ1bmN0aW9uIEcxKHkpe3JldHVybiB5LnJlcGxhY2UoL194bGZuXC4vZywiIil9ZnVuY3Rpb24gQmEoeSl7eS5sKz0xfWZ1bmN0aW9uIFpkKHksUCl7dmFyIEw9eS5yZWFkX3NoaWZ0KDE9PVA/MToyKTtyZXR1cm5bMTYzODMmTCxMPj4xNCYxLEw+PjE1'@;
put 'JjFdfWZ1bmN0aW9uIEo5KHksUCxMKXt2YXIgUT0yO2lmKEwpe2lmKEwuYmlmZj49MiYmTC5iaWZmPD01KXJldHVybiBROSh5KTsxMj09TC5iaWZmJiYoUT00KX12YXIgcmU9eS5yZWFkX3NoaWZ0KFEpLGdlPXkucmVhZF9zaGlmdChRKSxfZT1aZCh5LDIpLHZlPVpkKHksMik7cmV0dXJue3M6'@;
put 'e3I6cmUsYzpfZVswXSxjUmVsOl9lWzFdLHJSZWw6X2VbMl19LGU6e3I6Z2UsYzp2ZVswXSxjUmVsOnZlWzFdLHJSZWw6dmVbMl19fX1mdW5jdGlvbiBROSh5KXt2YXIgUD1aZCh5LDIpLEw9WmQoeSwyKSxRPXkucmVhZF9zaGlmdCgxKSxyZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6'@;
put 'UFswXSxjOlEsY1JlbDpQWzFdLHJSZWw6UFsyXX0sZTp7cjpMWzBdLGM6cmUsY1JlbDpMWzFdLHJSZWw6TFsyXX19fWZ1bmN0aW9uIHJJKHksUCxMKXtpZihMJiZMLmJpZmY+PTImJkwuYmlmZjw9NSlyZXR1cm4gZnVuY3Rpb24gVlooeSl7dmFyIFA9WmQoeSwyKSxMPXkucmVhZF9zaGlmdCgx'@;
put 'KTtyZXR1cm57cjpQWzBdLGM6TCxjUmVsOlBbMV0sclJlbDpQWzJdfX0oeSk7dmFyIFE9eS5yZWFkX3NoaWZ0KEwmJjEyPT1MLmJpZmY/NDoyKSxyZT1aZCh5LDIpO3JldHVybntyOlEsYzpyZVswXSxjUmVsOnJlWzFdLHJSZWw6cmVbMl19fWZ1bmN0aW9uIGV2KHkpe3ZhciBQPXkucmVhZF9z'@;
put 'aGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm57cjpQLGM6MjU1JkwsZlF1b3RlZDohISgxNjM4NCZMKSxjUmVsOkw+PjE1LHJSZWw6TD4+MTV9fWZ1bmN0aW9uIHEyKHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiAkQyh5LFApe3ZhciBM'@;
put 'PVt5LnJlYWRfc2hpZnQoMSldO2lmKDEyPT1QKXN3aXRjaChMWzBdKXtjYXNlIDI6TFswXT00O2JyZWFrO2Nhc2UgNDpMWzBdPTE2O2JyZWFrO2Nhc2UgMDpMWzBdPTE7YnJlYWs7Y2FzZSAxOkxbMF09Mn1zd2l0Y2goTFswXSl7Y2FzZSA0OkxbMV09U28oeSwxKT8iVFJVRSI6IkZBTFNFIiwx'@;
put 'MiE9UCYmKHkubCs9Nyk7YnJlYWs7Y2FzZSAzNzpjYXNlIDE2OkxbMV09UW9beVt5LmxdXSx5LmwrPTEyPT1QPzQ6ODticmVhaztjYXNlIDA6eS5sKz04O2JyZWFrO2Nhc2UgMTpMWzFdPW1hKHkpO2JyZWFrO2Nhc2UgMjpMWzFdPVYyKHksMCx7YmlmZjpQPjAmJlA8OD8yOlB9KTticmVhaztk'@;
put 'ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIFNlckFyOiAiK0xbMF0pfXJldHVybiBMfWZ1bmN0aW9uIGl2KHksUCxMKXtmb3IodmFyIFE9eS5yZWFkX3NoaWZ0KDEyPT1MLmJpZmY/NDoyKSxyZT1bXSxnZT0wO2dlIT1ROysrZ2UpcmUucHVzaCgoMTI9PUwuYmlmZj9KYzpLaCkoeSw4KSk7'@;
put 'cmV0dXJuIHJlfWZ1bmN0aW9uIGdJKHksUCxMKXt2YXIgUT0wLHJlPTA7MTI9PUwuYmlmZj8oUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDQpKToocmU9MSt5LnJlYWRfc2hpZnQoMSksUT0xK3kucmVhZF9zaGlmdCgyKSksTC5iaWZmPj0yJiZMLmJpZmY8OCYmKC0tUSwwPT0t'@;
put 'LXJlJiYocmU9MjU2KSk7Zm9yKHZhciBnZT0wLF9lPVtdO2dlIT1RJiYoX2VbZ2VdPVtdKTsrK2dlKWZvcih2YXIgdmU9MDt2ZSE9cmU7Kyt2ZSlfZVtnZV1bdmVdPSRDKHksTC5iaWZmKTtyZXR1cm4gX2V9ZnVuY3Rpb24gZTUoeSxQLEwpe3JldHVybiB5LmwrPTIsW2V2KHkpXX1mdW5jdGlv'@;
put 'biB0NSh5KXtyZXR1cm4geS5sKz02LFtdfXZhciBvNj1lNSx2ST10NSxsdj10NSxzNj1lNTtmdW5jdGlvbiBxMCh5KXtyZXR1cm4geS5sKz0yLFtobCh5KSwxJnkucmVhZF9zaGlmdCgyKV19dmFyIGN2PWU1LHV2PXEwLF9JPXQ1LGJJPWU1LFFDPWU1LEIzPVsiRGF0YSIsIkFsbCIsIkhlYWRl'@;
put 'cnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9DdXJyZW50Il0sR3M9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBVWih5LFAsTCl7cmV0dXJuIHkubCsrLEwmJjEy'@;
put 'PT1MLmJpZmY/W3kucmVhZF9zaGlmdCg0LCJpIiksMF06W3kucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJsIixmOnljfSwzOntuOiJQdGdBZGQiLGY6QmF9LDQ6e246IlB0Z1N1YiIsZjpCYX0sNTp7bjoiUHRnTXVsIixmOkJhfSw2'@;
put 'OntuOiJQdGdEaXYiLGY6QmF9LDc6e246IlB0Z1Bvd2VyIixmOkJhfSw4OntuOiJQdGdDb25jYXQiLGY6QmF9LDk6e246IlB0Z0x0IixmOkJhfSwxMDp7bjoiUHRnTGUiLGY6QmF9LDExOntuOiJQdGdFcSIsZjpCYX0sMTI6e246IlB0Z0dlIixmOkJhfSwxMzp7bjoiUHRnR3QiLGY6QmF9LDE0'@;
put 'OntuOiJQdGdOZSIsZjpCYX0sMTU6e246IlB0Z0lzZWN0IixmOkJhfSwxNjp7bjoiUHRnVW5pb24iLGY6QmF9LDE3OntuOiJQdGdSYW5nZSIsZjpCYX0sMTg6e246IlB0Z1VwbHVzIixmOkJhfSwxOTp7bjoiUHRnVW1pbnVzIixmOkJhfSwyMDp7bjoiUHRnUGVyY2VudCIsZjpCYX0sMjE6e246'@;
put 'IlB0Z1BhcmVuIixmOkJhfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjpCYX0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBHQyh5LFAsTCl7cmV0dXJuIHkubCsrLEZkKHksMCxMKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBDSSh5LFAsTCl7cmV0dXJuIHkubCs9NSx5LmwrPTIseS5s'@;
put 'Kz0yPT1MLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBkdih5LFAsTCl7cmV0dXJuIHkubCs9Mj09TC5iaWZmPzQ6NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIEo0KHkpe3JldHVybiB5LmwrKyxRb1t5'@;
put 'LnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gUTQoeSl7cmV0dXJuIHkubCsrLDAhPT15LnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50IixmOmZ1bmN0aW9uIE1pKHkpe3JldHVybiB5LmwrKyx5LnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixm'@;
put 'OmZ1bmN0aW9uIFdDKHkpe3JldHVybiB5LmwrKyxtYSh5KX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBhSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NTtyZXR1cm4geS5sKz0yPT1MLmJpZmY/NjoxMj09TC5iaWZmPzE0OjcsW1FdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVu'@;
put 'Y3Rpb24gZkkoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubF0pPj41O3kubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KEwmJkwuYmlmZjw9Mz8xOjIpO3JldHVybltidltyZV0sX3ZbcmVdLFFdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gcEkoeSxQLEwpe3ZhciBRPXlbeS5sKytdLHJl'@;
put 'PXkucmVhZF9zaGlmdCgxKSxnZT1MJiZMLmJpZmY8PTM/Wzg4PT1RPy0xOjAseS5yZWFkX3NoaWZ0KDEpXTpmdW5jdGlvbiBZQyh5KXtyZXR1cm5beVt5LmwrMV0+PjcsMzI3NjcmeS5yZWFkX3NoaWZ0KDIpXX0oeSk7cmV0dXJuW3JlLCgwPT09Z2VbMF0/X3Y6a0kpW2dlWzFdXV19fSwzNTp7'@;
put 'bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiBxQyh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGdlPXkucmVhZF9zaGlmdCghTHx8TC5iaWZmPj04PzQ6Mik7c3dpdGNoKEwuYmlmZil7Y2FzZSAyOnkubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OnkubCs9ODticmVhaztjYXNlIDU6'@;
put 'eS5sKz0xMn1yZXR1cm5bUSwwLGdlXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gWkMoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubF0pPj41O3JldHVybiB5LmwrPTEsW1EsckkoeSwwLEwpXX19LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIGpaKHksUCxMKXtyZXR1cm5bKDk2JnlbeS5s'@;
put 'KytdKT4+NSxKOSh5LDAsTCldfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gWlooeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4geS5sKz1MJiYyPT1MLmJpZmY/Mzo0LFtRLHkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKV19fSwzOTp7bjoiUHRn'@;
put 'TWVtRXJyIixmOnljfSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6eWN9LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIHN2KHksUCxMKXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1'@;
put 'bmN0aW9uIG1JKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIHkubCs9NCxMLmJpZmY8OCYmeS5sLS0sMTI9PUwuYmlmZiYmKHkubCs9MiksW1FdfX0sNDM6e246IlB0Z0FyZWFFcnIiLGY6ZnVuY3Rpb24gaUkoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubCsrXSk+PjU7'@;
put 'cmV0dXJuIHkubCs9TCYmTC5iaWZmPjg/MTI6TC5iaWZmPDg/Njo4LFtRXX19LDQ0OntuOiJQdGdSZWZOIixmOmZ1bmN0aW9uIGRJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTt5LmwrPTE7dmFyIHJlPWZ1bmN0aW9uIHR2KHksUCxMKXt2YXIgUT1MJiZMLmJpZmY/TC5iaWZmOjg7aWYo'@;
put 'UT49MiYmUTw9NSlyZXR1cm4gZnVuY3Rpb24gQlooeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDEpLFE9KDMyNzY4JlApPj4xNSxyZT0oMTYzODQmUCk+PjE0O3JldHVybiBQJj0xNjM4MywxPT1RJiZQPj04MTkyJiYoUC09MTYzODQpLDE9PXJlJiZMPj0xMjgmJihM'@;
put 'LT0yNTYpLHtyOlAsYzpMLGNSZWw6cmUsclJlbDpRfX0oeSk7dmFyIHJlPXkucmVhZF9zaGlmdChRPj0xMj80OjIpLGdlPXkucmVhZF9zaGlmdCgyKSxfZT0oMTYzODQmZ2UpPj4xNCx2ZT0oMzI3NjgmZ2UpPj4xNTtpZihnZSY9MTYzODMsMT09dmUpZm9yKDtyZT41MjQyODc7KXJlLT0xMDQ4'@;
put 'NTc2O2lmKDE9PV9lKWZvcig7Z2U+ODE5MTspZ2UtPTE2Mzg0O3JldHVybntyOnJlLGM6Z2UsY1JlbDpfZSxyUmVsOnZlfX0oeSwwLEwpO3JldHVybltRLHJlXX19LDQ1OntuOiJQdGdBcmVhTiIsZjpmdW5jdGlvbiBzSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NSxyZT1mdW5jdGlv'@;
put 'biBOWih5LFAsTCl7aWYoTC5iaWZmPDgpcmV0dXJuIFE5KHkpO3ZhciBRPXkucmVhZF9zaGlmdCgxMj09TC5iaWZmPzQ6MikscmU9eS5yZWFkX3NoaWZ0KDEyPT1MLmJpZmY/NDoyKSxnZT1aZCh5LDIpLF9lPVpkKHksMik7cmV0dXJue3M6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpn'@;
put 'ZVsyXX0sZTp7cjpyZSxjOl9lWzBdLGNSZWw6X2VbMV0sclJlbDpfZVsyXX19fSh5LDAsTCk7cmV0dXJuW1EscmVdfX0sNDY6e246IlB0Z01lbUFyZWFOIixmOmZ1bmN0aW9uIGE2KHkpe3JldHVyblt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KDIpXX19LDQ3OntuOiJQdGdN'@;
put 'ZW1Ob01lbU4iLGY6ZnVuY3Rpb24gU0koeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoMildfX0sNTc6e246IlB0Z05hbWVYIixmOmZ1bmN0aW9uIEtDKHksUCxMKXtyZXR1cm4gNT09TC5iaWZmP2Z1bmN0aW9uIG92KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgx'@;
put 'KT4+PjUmMyxMPXkucmVhZF9zaGlmdCgyLCJpIik7eS5sKz04O3ZhciBRPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4geS5sKz0xMixbUCxMLFFdfSh5KTpbeS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoNCldfX0sNTg6e246IlB0Z1JlZjNkIixmOmZ1'@;
put 'bmN0aW9uIGhJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmxdKT4+NTt5LmwrPTE7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gTCYmNT09TC5iaWZmJiYoeS5sKz0xMiksW1EscmUsckkoeSwwLEwpXX19LDU5OntuOiJQdGdBcmVhM2QiLGY6ZnVuY3Rpb24gekMoeSxQLEwpe3ZhciBRPSg5'@;
put 'NiZ5W3kubCsrXSk+PjUscmU9eS5yZWFkX3NoaWZ0KDIsImkiKTtpZihMJiY1PT09TC5iaWZmKXkubCs9MTI7cmV0dXJuW1EscmUsSjkoeSwwLEwpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBhdih5LFAsTCl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NSxyZT15LnJlYWRfc2hp'@;
put 'ZnQoMiksZ2U9NDtpZihMKXN3aXRjaChMLmJpZmYpe2Nhc2UgNTpnZT0xNTticmVhaztjYXNlIDEyOmdlPTZ9cmV0dXJuIHkubCs9Z2UsW1EscmVdfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBvSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NSxyZT15LnJlYWRfc2hp'@;
put 'ZnQoMiksZ2U9ODtpZihMKXN3aXRjaChMLmJpZmYpe2Nhc2UgNTp5LmwrPTEyLGdlPTY7YnJlYWs7Y2FzZSAxMjpnZT0xMn1yZXR1cm4geS5sKz1nZSxbUSxyZV19fSwyNTU6e319LE1JPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2ODozNiwxMDA6'@;
put 'MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6MzQsODk6NTcs'@;
put 'MTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX07IWZ1bmN0aW9uKCl7Zm9yKHZhciB5IGluIE1JKUdzW3ldPUdzW01JW3ldXX0oKTt2YXIgdFM9ezE6e246IlB0Z0VsZkxlbCIsZjpxMH0sMjp7bjoiUHRnRWxmUnciLGY6Ykl9LDM6e246'@;
put 'IlB0Z0VsZkNvbCIsZjpvNn0sNjp7bjoiUHRnRWxmUndWIixmOlFDfSw3OntuOiJQdGdFbGZDb2xWIixmOnM2fSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpjdn0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOl9JfSwxMzp7bjoiUHRnRWxmQ29sUyIsZjp2SX0sMTU6e246IlB0Z0VsZkNvbFNW'@;
put 'IixmOmx2fSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjp1dn0sMjU6e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24geUkoeSl7eS5sKz0yO3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKSxRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFk'@;
put 'X3NoaWZ0KDIpO3JldHVybntpeHRpOlAsY29sdHlwZTozJkwscnQ6QjNbTD4+MiYzMV0saWR4OlEsYzpyZSxDOmdlfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24gd0koeSl7cmV0dXJuIHkubCs9MixbeS5yZWFkX3NoaWZ0KDQpXX19LDI1NTp7fX0sbDY9ezA6e246IlB0Z0F0dHJO'@;
put 'b29wIixmOmZ1bmN0aW9uIGVTKHkpe3JldHVybiB5LmwrPTQsWzAsMF19fSwxOntuOiJQdGdBdHRyU2VtaSIsZjpmdW5jdGlvbiBWMyh5LFAsTCl7dmFyIFE9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz1MJiYyPT1MLmJpZmY/Mzo0LFtRXX19LDI6e246IlB0Z0F0dHJJZiIsZjpmdW5j'@;
put 'dGlvbiBudih5LFAsTCl7dmFyIFE9MjU1JnlbeS5sKzFdPzE6MDtyZXR1cm4geS5sKz0yLFtRLHkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKV19fSw0OntuOiJQdGdBdHRyQ2hvb3NlIixmOmZ1bmN0aW9uIHI2KHksUCxMKXt5LmwrPTI7Zm9yKHZhciBRPXkucmVhZF9zaGlmdChMJiYy'@;
put 'PT1MLmJpZmY/MToyKSxyZT1bXSxnZT0wO2dlPD1ROysrZ2UpcmUucHVzaCh5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MikpO3JldHVybiByZX19LDg6e246IlB0Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIGxJKHksUCxMKXt2YXIgUT0yNTUmeVt5LmwrMV0/MTowO3JldHVybiB5LmwrPTIs'@;
put 'W1EseS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpXX19LDE2OntuOiJQdGdBdHRyU3VtIixmOmZ1bmN0aW9uIHpaKHksUCxMKXt5LmwrPUwmJjI9PUwuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjpmdW5jdGlvbiBVQyh5KXt2YXIgUD0xJnlbeS5sKzFdO3JldHVybiB5'@;
put 'LmwrPTQsW1AsMV19fSw2NDp7bjoiUHRnQXR0clNwYWNlIixmOmZ1bmN0aW9uIHVJKHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMikscTIoeSl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBydih5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDIpLHEyKHkpfX0sMTI4OntuOiJQ'@;
put 'dGdBdHRySWZFcnJvciIsZjpmdW5jdGlvbiBjSSh5KXt2YXIgUD0yNTUmeVt5LmwrMV0/MTowO3JldHVybiB5LmwrPTIsW1AseS5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gajMoeSxQLEwsUSxyZSl7aWYoUS5iaWZmPDgpcmV0dXJuIHljKHksUCk7Zm9yKHZhciBnZT15Lmwr'@;
put 'UCxfZT1bXSx2ZT0wO3ZlIT09TC5sZW5ndGg7Kyt2ZSlzd2l0Y2goTFt2ZV1bMF0pe2Nhc2UiUHRnQXJyYXkiOkxbdmVdWzFdPWdJKHksMCxRKSxfZS5wdXNoKExbdmVdWzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOkxbdmVdWzJdPWl2KHksMCxRKSxfZS5wdXNoKExbdmVdWzJdKTticmVh'@;
put 'aztjYXNlIlB0Z0V4cCI6USYmMTI9PVEuYmlmZiYmKExbdmVdWzFdWzFdPXkucmVhZF9zaGlmdCg0KSxfZS5wdXNoKExbdmVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOnRocm93IlVuc3Vw'@;
put 'cG9ydGVkICIrTFt2ZV1bMF19cmV0dXJuIFA9Z2UteS5sLCFyZSYmMCE9PVAmJl9lLnB1c2goeWMoeSxQKSksX2V9ZnVuY3Rpb24gbjUoeSxQLEwpe2Zvcih2YXIgcmUsZ2UsUT15LmwrUCxfZT1bXTtRIT15Lmw7KVA9US15LmwscmU9R3NbZ2U9eVt5LmxdXSwoMjQ9PT1nZXx8MjU9PT1nZSkm'@;
put 'JihyZT0oMjQ9PT1nZT90UzpsNilbeVt5LmwrMV1dKSxyZSYmcmUuZj9fZS5wdXNoKFtyZS5uLHJlLmYoeSxQLEwpXSk6eWMoeSxQKTtyZXR1cm4gX2V9ZnVuY3Rpb24gWVooeSl7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoOysrTCl7Zm9yKHZhciBRPXlbTF0scmU9W10sZ2U9MDtnZTxR'@;
put 'Lmxlbmd0aDsrK2dlKXt2YXIgX2U9UVtnZV07cmUucHVzaChfZT8yPT09X2VbMF0/JyInK19lWzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIic6X2VbMV06IiIpfVAucHVzaChyZS5qb2luKCIsIikpfXJldHVybiBQLmpvaW4oIjsiKX1sNlszM109bDZbMzJdO3ZhciBjNj17UHRnQWRkOiIrIixQ'@;
put 'dGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn0seEk9bmV3IFJlZ0V4cCgvW15cd1x1NEUwMC1cdTlGRkZcdTMwNDAtXHUz'@;
put 'MEZGXS8pO2Z1bmN0aW9uIHU2KHksUCxMKXtpZigheSlyZXR1cm4iU0gzM1RKU0VSUjAiO2lmKEwuYmlmZj44JiYoIXkuWFRJfHwheS5YVElbUF0pKXJldHVybiB5LlNoZWV0TmFtZXNbUF07aWYoIXkuWFRJKXJldHVybiJTSDMzVEpTRVJSNiI7dmFyIFE9eS5YVElbUF07aWYoTC5iaWZmPDgp'@;
put 'cmV0dXJuIFA+MWU0JiYoUC09NjU1MzYpLFA8MCYmKFA9LVApLDA9PVA/IiI6eS5YVElbUC0xXTtpZighUSlyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciByZT0iIjtpZihMLmJpZmY+OClzd2l0Y2goeVtRWzBdXVswXSl7Y2FzZSAzNTc6cmV0dXJuIHJlPS0xPT1RWzFdPyIjUkVGIjp5LlNoZWV0'@;
put 'TmFtZXNbUVsxXV0sUVsxXT09UVsyXT9yZTpyZSsiOiIreS5TaGVldE5hbWVzW1FbMl1dO2Nhc2UgMzU4OnJldHVybiBudWxsIT1MLlNJRD95LlNoZWV0TmFtZXNbTC5TSURdOiJTSDMzVEpTU0FNRSIreVtRWzBdXVswXTtkZWZhdWx0OnJldHVybiJTSDMzVEpTU1JDIit5W1FbMF1dWzBdfXN3'@;
put 'aXRjaCh5W1FbMF1dWzBdWzBdKXtjYXNlIDEwMjU6cmV0dXJuIHJlPS0xPT1RWzFdPyIjUkVGIjp5LlNoZWV0TmFtZXNbUVsxXV18fCJTSDMzVEpTRVJSMyIsUVsxXT09UVsyXT9yZTpyZSsiOiIreS5TaGVldE5hbWVzW1FbMl1dO2Nhc2UgMTQ4NDk6cmV0dXJuIHlbUVswXV0uc2xpY2UoMSku'@;
put 'bWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2UuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4geVtRWzBdXVswXVszXT8ocmU9LTE9PVFbMV0/IiNSRUYiOnlbUVswXV1bMF1bM11bUVsxXV18fCJTSDMzVEpTRVJSNCIsUVsxXT09UVsyXT9yZTpyZSsiOiIreVtRWzBdXVswXVszXVtR'@;
put 'WzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gY2YoeSxQLEwpe3JldHVybiBmdW5jdGlvbiBodih5LFApe2lmKCEoeXx8UCYmUC5iaWZmPD01JiZQLmJpZmY+PTIpKXRocm93IG5ldyBFcnJvcigiZW1wdHkgc2hlZXQgbmFtZSIpO3JldHVybi8jUkVGLy50ZXN0KHkpP3k6eEkudGVzdCh5'@;
put 'KT8iJyIreSsiJyI6eX0odTYoeSxQLEwpLEwpfWZ1bmN0aW9uIHhsKHksUCxMLFEscmUsZ2Upe3ZhciBIZSxCZSxHZSxDdCxfZT1yZSYmcmUuYmlmZnx8OCx2ZT1nZSYmbnVsbCE9UD9QOntzOntjOjAscjowfSxlOntjOjAscjowfX0sU2U9W10sbnQ9MCxkdD0wLGN0PSIiO2lmKCF5WzBdfHwh'@;
put 'eVswXVswXSlyZXR1cm4iIjtmb3IodmFyIGJ0PS0xLEZ0PSIiLGt0PTAsVHQ9eVswXS5sZW5ndGg7a3Q8VHQ7KytrdCl7dmFyIFp0PXlbMF1ba3RdO3N3aXRjaChadFswXSl7Y2FzZSJQdGdVbWludXMiOlNlLnB1c2goIi0iK1NlLnBvcCgpKTticmVhaztjYXNlIlB0Z1VwbHVzIjpTZS5wdXNo'@;
put 'KCIrIitTZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50IjpTZS5wdXNoKFNlLnBvcCgpKyIlIik7YnJlYWs7Y2FzZSJQdGdBZGQiOmNhc2UiUHRnQ29uY2F0IjpjYXNlIlB0Z0RpdiI6Y2FzZSJQdGdFcSI6Y2FzZSJQdGdHZSI6Y2FzZSJQdGdHdCI6Y2FzZSJQdGdMZSI6Y2FzZSJQdGdM'@;
put 'dCI6Y2FzZSJQdGdNdWwiOmNhc2UiUHRnTmUiOmNhc2UiUHRnUG93ZXIiOmNhc2UiUHRnU3ViIjppZihIZT1TZS5wb3AoKSxCZT1TZS5wb3AoKSxidD49MCl7c3dpdGNoKHlbMF1bYnRdWzFdWzBdKXtjYXNlIDA6RnQ9Ym4oIiAiLHlbMF1bYnRdWzFdWzFdKTticmVhaztjYXNlIDE6RnQ9Ym4o'@;
put 'IlxyIix5WzBdW2J0XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihGdD0iIixyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIit5WzBdW2J0XVsxXVswXSl9QmUrPUZ0LGJ0PS0xfVNlLnB1c2goQmUrYzZbWnRbMF1dK0hlKTticmVhaztjYXNlIlB0'@;
put 'Z0lzZWN0IjpIZT1TZS5wb3AoKSxCZT1TZS5wb3AoKSxTZS5wdXNoKEJlKyIgIitIZSk7YnJlYWs7Y2FzZSJQdGdVbmlvbiI6SGU9U2UucG9wKCksQmU9U2UucG9wKCksU2UucHVzaChCZSsiLCIrSGUpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOkhlPVNlLnBvcCgpLEJlPVNlLnBvcCgpLFNlLnB1'@;
put 'c2goQmUrIjoiK0hlKTticmVhaztjYXNlIlB0Z0F0dHJDaG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklmIjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2UiUHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6Y2FzZSJQdGdUYmwiOmNh'@;
put 'c2UiUHRnTWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpjYXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2FzZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpjYXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0Z1JlZiI6R2U9bHUoWnRb'@;
put 'MV1bMV0sdmUscmUpLFNlLnB1c2goTDIoR2UsX2UpKTticmVhaztjYXNlIlB0Z1JlZk4iOkdlPUw/bHUoWnRbMV1bMV0sTCxyZSk6WnRbMV1bMV0sU2UucHVzaChMMihHZSxfZSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOm50PVp0WzFdWzFdLEdlPWx1KFp0WzFdWzJdLHZlLHJlKSxjdD1jZihR'@;
put 'LG50LHJlKSxTZS5wdXNoKGN0KyIhIitMMihHZSxfZSkpO2JyZWFrO2Nhc2UiUHRnRnVuYyI6Y2FzZSJQdGdGdW5jVmFyIjp2YXIgS249WnRbMV1bMF0sdW49WnRbMV1bMV07S258fChLbj0wKTt2YXIgcW49MD09KEtuJj0xMjcpP1tdOlNlLnNsaWNlKC1Lbik7U2UubGVuZ3RoLT1LbiwiVXNl'@;
put 'ciI9PT11biYmKHVuPXFuLnNoaWZ0KCkpLFNlLnB1c2godW4rIigiK3FuLmpvaW4oIiwiKSsiKSIpO2JyZWFrO2Nhc2UiUHRnQm9vbCI6U2UucHVzaChadFsxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNhc2UiUHRnTnVtIjpTZS5wdXNoKFN0cmluZyhadFsxXSkpO2Jy'@;
put 'ZWFrO2Nhc2UiUHRnU3RyIjpTZS5wdXNoKCciJytadFsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIlB0Z0VyciI6U2UucHVzaChadFsxXSk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6Q3Q9aHIoWnRbMV1bMV0sTD97czpMfTp2ZSxyZSksU2UucHVzaChtaShDdCxyZSkpO2Jy'@;
put 'ZWFrO2Nhc2UiUHRnQXJlYSI6Q3Q9aHIoWnRbMV1bMV0sdmUscmUpLFNlLnB1c2gobWkoQ3QscmUpKTticmVhaztjYXNlIlB0Z0FyZWEzZCI6bnQ9WnRbMV1bMV0sQ3Q9aHIoWnRbMV1bMl0sdmUscmUpLGN0PWNmKFEsbnQscmUpLFNlLnB1c2goY3QrIiEiK21pKEN0LHJlKSk7YnJlYWs7Y2Fz'@;
put 'ZSJQdGdBdHRyU3VtIjpTZS5wdXNoKCJTVU0oIitTZS5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIHpuPShRLm5hbWVzfHxbXSlbKGR0PVp0WzFdWzJdKS0xXXx8KFFbMF18fFtdKVtkdF0sa249em4/em4uTmFtZToiU0gzM1RKU05BTUUiK1N0cmluZyhkdCk7a24gaW4gbzUm'@;
put 'Jihrbj1vNVtrbl0pLFNlLnB1c2goa24pO2JyZWFrO2Nhc2UiUHRnTmFtZVgiOnZhciB0cixlcj1adFsxXVsxXTtpZihkdD1adFsxXVsyXSwhKHJlLmJpZmY8PTUpKXt2YXIgWm49IiI7aWYoMTQ4NDk9PSgoUVtlcl18fFtdKVswXXx8W10pWzBdfHwoMTAyNT09KChRW2VyXXx8W10pWzBdfHxb'@;
put 'XSlbMF0/UVtlcl1bZHRdJiZRW2VyXVtkdF0uaXRhYj4wJiYoWm49US5TaGVldE5hbWVzW1FbZXJdW2R0XS5pdGFiLTFdKyIhIik6Wm49US5TaGVldE5hbWVzW2R0LTFdKyIhIiksUVtlcl0mJlFbZXJdW2R0XSlabis9UVtlcl1bZHRdLk5hbWU7ZWxzZSBpZihRWzBdJiZRWzBdW2R0XSlabis9'@;
put 'UVswXVtkdF0uTmFtZTtlbHNle3ZhciBvaT0odTYoUSxlcixyZSl8fCIiKS5zcGxpdCgiOzsiKTtvaVtkdC0xXT9abj1vaVtkdC0xXTpabis9IlNIMzNUSlNFUlJYIn1TZS5wdXNoKFpuKTticmVha31lcjwwJiYoZXI9LWVyKSxRW2VyXSYmKHRyPVFbZXJdW2R0XSksdHJ8fCh0cj17TmFtZToi'@;
put 'U0gzM1RKU0VSUlkifSksU2UucHVzaCh0ci5OYW1lKTticmVhaztjYXNlIlB0Z1BhcmVuIjp2YXIga2k9IigiLExpPSIpIjtpZihidD49MCl7c3dpdGNoKEZ0PSIiLHlbMF1bYnRdWzFdWzBdKXtjYXNlIDI6a2k9Ym4oIiAiLHlbMF1bYnRdWzFdWzFdKStraTticmVhaztjYXNlIDM6a2k9Ym4o'@;
put 'IlxyIix5WzBdW2J0XVsxXVsxXSkra2k7YnJlYWs7Y2FzZSA0OkxpPWJuKCIgIix5WzBdW2J0XVsxXVsxXSkrTGk7YnJlYWs7Y2FzZSA1OkxpPWJuKCJcciIseVswXVtidF1bMV1bMV0pK0xpO2JyZWFrO2RlZmF1bHQ6aWYocmUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdB'@;
put 'dHRyU3BhY2VUeXBlICIreVswXVtidF1bMV1bMF0pfWJ0PS0xfVNlLnB1c2goa2krU2UucG9wKCkrTGkpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpjYXNlIlB0Z1JlZkVycjNkIjpTZS5wdXNoKCIjUkVGISIpO2JyZWFrO2Nhc2Ui'@;
put 'UHRnRXhwIjp2YXIgdXI9e2M6TC5jLHI6TC5yfTtpZihRLnNoYXJlZGZbZGkoR2U9e2M6WnRbMV1bMV0scjpadFsxXVswXX0pXSl7dmFyIEFuPVEuc2hhcmVkZltkaShHZSldO1NlLnB1c2goeGwoQW4sdmUsdXIsUSxyZSkpfWVsc2V7dmFyIHZyPSExO2ZvcihIZT0wO0hlIT1RLmFycmF5Zi5s'@;
put 'ZW5ndGg7KytIZSlpZighKEdlLmM8KEJlPVEuYXJyYXlmW0hlXSlbMF0ucy5jfHxHZS5jPkJlWzBdLmUuY3x8R2UucjxCZVswXS5zLnJ8fEdlLnI+QmVbMF0uZS5yKSl7U2UucHVzaCh4bChCZVsxXSx2ZSx1cixRLHJlKSksdnI9ITA7YnJlYWt9dnJ8fFNlLnB1c2goWnRbMV0pfWJyZWFrO2Nh'@;
put 'c2UiUHRnQXJyYXkiOlNlLnB1c2goInsiK1laKFp0WzFdKSsifSIpO2JyZWFrO2Nhc2UiUHRnQXR0clNwYWNlIjpjYXNlIlB0Z0F0dHJTcGFjZVNlbWkiOmJ0PWt0O2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6U2UucHVzaCgiIik7YnJlYWs7Y2FzZSJQdGdMaXN0IjpTZS5wdXNoKCJUYWJsZSIr'@;
put 'WnRbMV0uaWR4KyJbIyIrWnRbMV0ucnQrIl0iKTticmVhaztjYXNlIlB0Z0VsZkNvbCI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjpjYXNlIlB0Z0VsZkNvbFYiOmNhc2UiUHRnRWxmTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWwiOmNhc2UiUHRnRWxmUmFkaWNhbExlbCI6Y2Fz'@;
put 'ZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZSdyI6Y2FzZSJQdGdFbGZSd1YiOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUxGcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRm9ybXVsYSBUb2tlbjogIitTdHJpbmcoWnQpKX1pZigzIT1yZS5iaWZm'@;
put 'JiZidD49MCYmLTE9PVsiUHRnQXR0clNwYWNlIiwiUHRnQXR0clNwYWNlU2VtaSIsIlB0Z0F0dHJHb3RvIl0uaW5kZXhPZih5WzBdW2t0XVswXSkpe3ZhciBTbj0hMDtzd2l0Y2goKFp0PXlbMF1bYnRdKVsxXVswXSl7Y2FzZSA0OlNuPSExO2Nhc2UgMDpGdD1ibigiICIsWnRbMV1bMV0pO2Jy'@;
put 'ZWFrO2Nhc2UgNTpTbj0hMTtjYXNlIDE6RnQ9Ym4oIlxyIixadFsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihGdD0iIixyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitadFsxXVswXSl9U2UucHVzaCgoU24/RnQ6IiIpK1NlLnBvcCgpKyhTbj8i'@;
put 'IjpGdCkpLGJ0PS0xfX1pZihTZS5sZW5ndGg+MSYmcmUuV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gU2VbMF19ZnVuY3Rpb24gZnYoeSxQLEwpe3ZhciBnZSxRPXkubCtQLHJlPTI9PUwuYmlmZj8xOjIsX2U9eS5yZWFkX3NoaWZ0KHJlKTtpZig2NTUz'@;
put 'NT09X2UpcmV0dXJuW1tdLHljKHksUC0yKV07dmFyIHZlPW41KHksX2UsTCk7cmV0dXJuIFAhPT1fZStyZSYmKGdlPWozKHksUC1fZS1yZSx2ZSxMKSkseS5sPVEsW3ZlLGdlXX1mdW5jdGlvbiBpNSh5LFAsTCl7dmFyIHJlLFE9eS5sK1AsZ2U9eS5yZWFkX3NoaWZ0KDIpLF9lPW41KHksZ2Us'@;
put 'TCk7cmV0dXJuIDY1NTM1PT1nZT9bW10seWMoeSxQLTIpXTooUCE9PWdlKzImJihyZT1qMyh5LFEtZ2UtMixfZSxMKSksW19lLHJlXSl9ZnVuY3Rpb24gejMoeSxQLEwpe3ZhciBRPXkubCtQLHJlPUx1KHkpOzI9PUwuYmlmZiYmKyt5Lmw7dmFyIGdlPWZ1bmN0aW9uIG5TKHkpe3ZhciBQO2lm'@;
put 'KDY1NTM1IT09WW4oeSx5LmwrNikpcmV0dXJuW21hKHkpLCJuIl07c3dpdGNoKHlbeS5sXSl7Y2FzZSAwOnJldHVybiB5LmwrPTgsWyJTdHJpbmciLCJzIl07Y2FzZSAxOnJldHVybiBQPTE9PT15W3kubCsyXSx5LmwrPTgsW1AsImIiXTtjYXNlIDI6cmV0dXJuIFA9eVt5LmwrMl0seS5sKz04'@;
put 'LFtQLCJlIl07Y2FzZSAzOnJldHVybiB5LmwrPTgsWyIiLCJzIl19cmV0dXJuW119KHkpLF9lPXkucmVhZF9zaGlmdCgxKTsyIT1MLmJpZmYmJih5LnJlYWRfc2hpZnQoMSksTC5iaWZmPj01JiZ5LnJlYWRfc2hpZnQoNCkpO3ZhciB2ZT1mdW5jdGlvbiByNSh5LFAsTCl7dmFyIGdlLFE9eS5s'@;
put 'K1AscmU9Mj09TC5iaWZmPzE6MixfZT15LnJlYWRfc2hpZnQocmUpO2lmKDY1NTM1PT1fZSlyZXR1cm5bW10seWMoeSxQLTIpXTt2YXIgdmU9bjUoeSxfZSxMKTtyZXR1cm4gUCE9PV9lK3JlJiYoZ2U9ajMoeSxQLV9lLXJlLHZlLEwpKSx5Lmw9USxbdmUsZ2VdfSh5LFEteS5sLEwpO3JldHVy'@;
put 'bntjZWxsOnJlLHZhbDpnZVswXSxmb3JtdWxhOnZlLHNoYXJlZDpfZT4+MyYxLHR0OmdlWzFdfX1mdW5jdGlvbiB1Zih5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPW41KHksUSxMKSxnZT15LnJlYWRfc2hpZnQoNCk7cmV0dXJuW3JlLGdlPjA/ajMoeSxnZSxyZSxMLCEwKTpudWxs'@;
put 'XX12YXIgclM9dWYsaDY9dWYsaVM9dWYsb1M9ZnVuY3Rpb24gZ3YoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCg0KSxyZT15LnJlYWRfc2hpZnQoNCksZ2U9bjUoeSxRLEwpO3JldHVybltnZSxyZT4wP2ozKHkscmUsZ2UsTCwhMCk6bnVsbF19LHNTPXVmLEVJPXVmO2Z1bmN0aW9uIG12KHkp'@;
put 'e2lmKCgwfHkpPT15JiZ5PE1hdGgucG93KDIsMTYpJiZ5Pj0wKXt2YXIgUD1mcigxMSk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCwzKSxQLndyaXRlX3NoaWZ0KDEsMzApLFAud3JpdGVfc2hpZnQoMix5KSxQLndyaXRlX3NoaWZ0KDQsMCksUH12YXIgTD1mcigxNyk7cmV0dXJuIEwud3JpdGVf'@;
put 'c2hpZnQoNCwxMSksTC53cml0ZV9zaGlmdCgxLDMxKSxMLndyaXRlX3NoaWZ0KDgseSksTC53cml0ZV9zaGlmdCg0LDApLEx9ZnVuY3Rpb24gYVMoeSl7dmFyIFA9ZnIoNyk7UC53cml0ZV9zaGlmdCg0LDMrMip5Lmxlbmd0aCksUC53cml0ZV9zaGlmdCgxLDIzKSxQLndyaXRlX3NoaWZ0KDIs'@;
put 'eS5sZW5ndGgpO3ZhciBMPWZyKDIqeS5sZW5ndGgpO0wud3JpdGVfc2hpZnQoMip5Lmxlbmd0aCx5LCJ1dGYxNmxlIik7dmFyIFE9ZnIoNCk7cmV0dXJuIFEud3JpdGVfc2hpZnQoNCwwKSxTKFtQLEwsUV0pfWZ1bmN0aW9uIFUzKHkpe2lmKHkubWF0Y2goL14jKERJVlwvMCF8R0VUVElOR19E'@;
put 'QVRBfE5cL0F8TkFNRVw/fE5VTEwhfE5VTSF8UkVGIXxWQUxVRSEpJC8pKXJldHVybiBmdW5jdGlvbiBHWih5KXt2YXIgUD1mcigxMCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCwyKSxQLndyaXRlX3NoaWZ0KDEsMjgpLFAud3JpdGVfc2hpZnQoMSx5KSxQLndyaXRlX3NoaWZ0KDQsMCksUH0o'@;
put 'K0thW3ldKTtpZih5Lm1hdGNoKC9eXCQ/KD86W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdfFtBLVpdezEsMn0pXCQ/KD86MTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkkLykpcmV0'@;
put 'dXJuIGZ1bmN0aW9uIHZ2KHkpe3ZhciBQPXNzKHkpLEw9ZnIoMTUpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsNyksTC53cml0ZV9zaGlmdCgxLDM2KSxMLndyaXRlX3NoaWZ0KDQsUC5yKSxMLndyaXRlX3NoaWZ0KDIsUC5jfCgiJCI9PXkuY2hhckF0KDApPzA6MSk8PDE0fCh5Lm1hdGNoKC9c'@;
put 'JFxkLyk/MDoxKTw8MTUpLEwud3JpdGVfc2hpZnQoNCwwKSxMfSh5KTtpZih5Lm1hdGNoKC9eIi4qIiQvKSlyZXR1cm4gYVMoeSk7dGhyb3ciRm9ybXVsYSB8Iit5KyJ8IG5vdCBzdXBwb3J0ZWQgZm9yIFhMU0IifXZhciBrST17MDoiQkVFUCIsMToiT1BFTiIsMjoiT1BFTi5MSU5LUyIsMzoi'@;
put 'Q0xPU0UuQUxMIiw0OiJTQVZFIiw1OiJTQVZFLkFTIiw2OiJGSUxFLkRFTEVURSIsNzoiUEFHRS5TRVRVUCIsODoiUFJJTlQiLDk6IlBSSU5URVIuU0VUVVAiLDEwOiJRVUlUIiwxMToiTkVXLldJTkRPVyIsMTI6IkFSUkFOR0UuQUxMIiwxMzoiV0lORE9XLlNJWkUiLDE0OiJXSU5ET1cuTU9W'@;
put 'RSIsMTU6IkZVTEwiLDE2OiJDTE9TRSIsMTc6IlJVTiIsMjI6IlNFVC5QUklOVC5BUkVBIiwyMzoiU0VULlBSSU5ULlRJVExFUyIsMjQ6IlNFVC5QQUdFLkJSRUFLIiwyNToiUkVNT1ZFLlBBR0UuQlJFQUsiLDI2OiJGT05UIiwyNzoiRElTUExBWSIsMjg6IlBST1RFQ1QuRE9DVU1FTlQiLDI5'@;
put 'OiJQUkVDSVNJT04iLDMwOiJBMS5SMUMxIiwzMToiQ0FMQ1VMQVRFLk5PVyIsMzI6IkNBTENVTEFUSU9OIiwzNDoiREFUQS5GSU5EIiwzNToiRVhUUkFDVCIsMzY6IkRBVEEuREVMRVRFIiwzNzoiU0VULkRBVEFCQVNFIiwzODoiU0VULkNSSVRFUklBIiwzOToiU09SVCIsNDA6IkRBVEEuU0VS'@;
put 'SUVTIiw0MToiVEFCTEUiLDQyOiJGT1JNQVQuTlVNQkVSIiw0MzoiQUxJR05NRU5UIiw0NDoiU1RZTEUiLDQ1OiJCT1JERVIiLDQ2OiJDRUxMLlBST1RFQ1RJT04iLDQ3OiJDT0xVTU4uV0lEVEgiLDQ4OiJVTkRPIiw0OToiQ1VUIiw1MDoiQ09QWSIsNTE6IlBBU1RFIiw1MjoiQ0xFQVIiLDUz'@;
put 'OiJQQVNURS5TUEVDSUFMIiw1NDoiRURJVC5ERUxFVEUiLDU1OiJJTlNFUlQiLDU2OiJGSUxMLlJJR0hUIiw1NzoiRklMTC5ET1dOIiw2MToiREVGSU5FLk5BTUUiLDYyOiJDUkVBVEUuTkFNRVMiLDYzOiJGT1JNVUxBLkdPVE8iLDY0OiJGT1JNVUxBLkZJTkQiLDY1OiJTRUxFQ1QuTEFTVC5D'@;
put 'RUxMIiw2NjoiU0hPVy5BQ1RJVkUuQ0VMTCIsNjc6IkdBTExFUlkuQVJFQSIsNjg6IkdBTExFUlkuQkFSIiw2OToiR0FMTEVSWS5DT0xVTU4iLDcwOiJHQUxMRVJZLkxJTkUiLDcxOiJHQUxMRVJZLlBJRSIsNzI6IkdBTExFUlkuU0NBVFRFUiIsNzM6IkNPTUJJTkFUSU9OIiw3NDoiUFJFRkVS'@;
put 'UkVEIiw3NToiQURELk9WRVJMQVkiLDc2OiJHUklETElORVMiLDc3OiJTRVQuUFJFRkVSUkVEIiw3ODoiQVhFUyIsNzk6IkxFR0VORCIsODA6IkFUVEFDSC5URVhUIiw4MToiQURELkFSUk9XIiw4MjoiU0VMRUNULkNIQVJUIiw4MzoiU0VMRUNULlBMT1QuQVJFQSIsODQ6IlBBVFRFUk5TIiw4'@;
put 'NToiTUFJTi5DSEFSVCIsODY6Ik9WRVJMQVkiLDg3OiJTQ0FMRSIsODg6IkZPUk1BVC5MRUdFTkQiLDg5OiJGT1JNQVQuVEVYVCIsOTA6IkVESVQuUkVQRUFUIiw5MToiUEFSU0UiLDkyOiJKVVNUSUZZIiw5MzoiSElERSIsOTQ6IlVOSElERSIsOTU6IldPUktTUEFDRSIsOTY6IkZPUk1VTEEi'@;
put 'LDk3OiJGT1JNVUxBLkZJTEwiLDk4OiJGT1JNVUxBLkFSUkFZIiw5OToiREFUQS5GSU5ELk5FWFQiLDEwMDoiREFUQS5GSU5ELlBSRVYiLDEwMToiRk9STVVMQS5GSU5ELk5FWFQiLDEwMjoiRk9STVVMQS5GSU5ELlBSRVYiLDEwMzoiQUNUSVZBVEUiLDEwNDoiQUNUSVZBVEUuTkVYVCIsMTA1'@;
put 'OiJBQ1RJVkFURS5QUkVWIiwxMDY6IlVOTE9DS0VELk5FWFQiLDEwNzoiVU5MT0NLRUQuUFJFViIsMTA4OiJDT1BZLlBJQ1RVUkUiLDEwOToiU0VMRUNUIiwxMTA6IkRFTEVURS5OQU1FIiwxMTE6IkRFTEVURS5GT1JNQVQiLDExMjoiVkxJTkUiLDExMzoiSExJTkUiLDExNDoiVlBBR0UiLDEx'@;
put 'NToiSFBBR0UiLDExNjoiVlNDUk9MTCIsMTE3OiJIU0NST0xMIiwxMTg6IkFMRVJUIiwxMTk6Ik5FVyIsMTIwOiJDQU5DRUwuQ09QWSIsMTIxOiJTSE9XLkNMSVBCT0FSRCIsMTIyOiJNRVNTQUdFIiwxMjQ6IlBBU1RFLkxJTksiLDEyNToiQVBQLkFDVElWQVRFIiwxMjY6IkRFTEVURS5BUlJP'@;
put 'VyIsMTI3OiJST1cuSEVJR0hUIiwxMjg6IkZPUk1BVC5NT1ZFIiwxMjk6IkZPUk1BVC5TSVpFIiwxMzA6IkZPUk1VTEEuUkVQTEFDRSIsMTMxOiJTRU5ELktFWVMiLDEzMjoiU0VMRUNULlNQRUNJQUwiLDEzMzoiQVBQTFkuTkFNRVMiLDEzNDoiUkVQTEFDRS5GT05UIiwxMzU6IkZSRUVaRS5Q'@;
put 'QU5FUyIsMTM2OiJTSE9XLklORk8iLDEzNzoiU1BMSVQiLDEzODoiT04uV0lORE9XIiwxMzk6Ik9OLkRBVEEiLDE0MDoiRElTQUJMRS5JTlBVVCIsMTQyOiJPVVRMSU5FIiwxNDM6IkxJU1QuTkFNRVMiLDE0NDoiRklMRS5DTE9TRSIsMTQ1OiJTQVZFLldPUktCT09LIiwxNDY6IkRBVEEuRk9S'@;
put 'TSIsMTQ3OiJDT1BZLkNIQVJUIiwxNDg6Ik9OLlRJTUUiLDE0OToiV0FJVCIsMTUwOiJGT1JNQVQuRk9OVCIsMTUxOiJGSUxMLlVQIiwxNTI6IkZJTEwuTEVGVCIsMTUzOiJERUxFVEUuT1ZFUkxBWSIsMTU1OiJTSE9SVC5NRU5VUyIsMTU5OiJTRVQuVVBEQVRFLlNUQVRVUyIsMTYxOiJDT0xP'@;
put 'Ui5QQUxFVFRFIiwxNjI6IkRFTEVURS5TVFlMRSIsMTYzOiJXSU5ET1cuUkVTVE9SRSIsMTY0OiJXSU5ET1cuTUFYSU1JWkUiLDE2NjoiQ0hBTkdFLkxJTksiLDE2NzoiQ0FMQ1VMQVRFLkRPQ1VNRU5UIiwxNjg6Ik9OLktFWSIsMTY5OiJBUFAuUkVTVE9SRSIsMTcwOiJBUFAuTU9WRSIsMTcx'@;
put 'OiJBUFAuU0laRSIsMTcyOiJBUFAuTUlOSU1JWkUiLDE3MzoiQVBQLk1BWElNSVpFIiwxNzQ6IkJSSU5HLlRPLkZST05UIiwxNzU6IlNFTkQuVE8uQkFDSyIsMTg1OiJNQUlOLkNIQVJULlRZUEUiLDE4NjoiT1ZFUkxBWS5DSEFSVC5UWVBFIiwxODc6IlNFTEVDVC5FTkQiLDE4ODoiT1BFTi5N'@;
put 'QUlMIiwxODk6IlNFTkQuTUFJTCIsMTkwOiJTVEFOREFSRC5GT05UIiwxOTE6IkNPTlNPTElEQVRFIiwxOTI6IlNPUlQuU1BFQ0lBTCIsMTkzOiJHQUxMRVJZLjNELkFSRUEiLDE5NDoiR0FMTEVSWS4zRC5DT0xVTU4iLDE5NToiR0FMTEVSWS4zRC5MSU5FIiwxOTY6IkdBTExFUlkuM0QuUElF'@;
put 'IiwxOTc6IlZJRVcuM0QiLDE5ODoiR09BTC5TRUVLIiwxOTk6IldPUktHUk9VUCIsMjAwOiJGSUxMLkdST1VQIiwyMDE6IlVQREFURS5MSU5LIiwyMDI6IlBST01PVEUiLDIwMzoiREVNT1RFIiwyMDQ6IlNIT1cuREVUQUlMIiwyMDY6IlVOR1JPVVAiLDIwNzoiT0JKRUNULlBST1BFUlRJRVMi'@;
put 'LDIwODoiU0FWRS5ORVcuT0JKRUNUIiwyMDk6IlNIQVJFIiwyMTA6IlNIQVJFLk5BTUUiLDIxMToiRFVQTElDQVRFIiwyMTI6IkFQUExZLlNUWUxFIiwyMTM6IkFTU0lHTi5UTy5PQkpFQ1QiLDIxNDoiT0JKRUNULlBST1RFQ1RJT04iLDIxNToiSElERS5PQkpFQ1QiLDIxNjoiU0VULkVYVFJB'@;
put 'Q1QiLDIxNzoiQ1JFQVRFLlBVQkxJU0hFUiIsMjE4OiJTVUJTQ1JJQkUuVE8iLDIxOToiQVRUUklCVVRFUyIsMjIwOiJTSE9XLlRPT0xCQVIiLDIyMjoiUFJJTlQuUFJFVklFVyIsMjIzOiJFRElULkNPTE9SIiwyMjQ6IlNIT1cuTEVWRUxTIiwyMjU6IkZPUk1BVC5NQUlOIiwyMjY6IkZPUk1B'@;
put 'VC5PVkVSTEFZIiwyMjc6Ik9OLlJFQ0FMQyIsMjI4OiJFRElULlNFUklFUyIsMjI5OiJERUZJTkUuU1RZTEUiLDI0MDoiTElORS5QUklOVCIsMjQzOiJFTlRFUi5EQVRBIiwyNDk6IkdBTExFUlkuUkFEQVIiLDI1MDoiTUVSR0UuU1RZTEVTIiwyNTE6IkVESVRJT04uT1BUSU9OUyIsMjUyOiJQ'@;
put 'QVNURS5QSUNUVVJFIiwyNTM6IlBBU1RFLlBJQ1RVUkUuTElOSyIsMjU0OiJTUEVMTElORyIsMjU2OiJaT09NIiwyNTk6IklOU0VSVC5PQkpFQ1QiLDI2MDoiV0lORE9XLk1JTklNSVpFIiwyNjU6IlNPVU5ELk5PVEUiLDI2NjoiU09VTkQuUExBWSIsMjY3OiJGT1JNQVQuU0hBUEUiLDI2ODoi'@;
put 'RVhURU5ELlBPTFlHT04iLDI2OToiRk9STUFULkFVVE8iLDI3MjoiR0FMTEVSWS4zRC5CQVIiLDI3MzoiR0FMTEVSWS4zRC5TVVJGQUNFIiwyNzQ6IkZJTEwuQVVUTyIsMjc2OiJDVVNUT01JWkUuVE9PTEJBUiIsMjc3OiJBREQuVE9PTCIsMjc4OiJFRElULk9CSkVDVCIsMjc5OiJPTi5ET1VC'@;
put 'TEVDTElDSyIsMjgwOiJPTi5FTlRSWSIsMjgxOiJXT1JLQk9PSy5BREQiLDI4MjoiV09SS0JPT0suTU9WRSIsMjgzOiJXT1JLQk9PSy5DT1BZIiwyODQ6IldPUktCT09LLk9QVElPTlMiLDI4NToiU0FWRS5XT1JLU1BBQ0UiLDI4ODoiQ0hBUlQuV0laQVJEIiwyODk6IkRFTEVURS5UT09MIiwy'@;
put 'OTA6Ik1PVkUuVE9PTCIsMjkxOiJXT1JLQk9PSy5TRUxFQ1QiLDI5MjoiV09SS0JPT0suQUNUSVZBVEUiLDI5MzoiQVNTSUdOLlRPLlRPT0wiLDI5NToiQ09QWS5UT09MIiwyOTY6IlJFU0VULlRPT0wiLDI5NzoiQ09OU1RSQUlOLk5VTUVSSUMiLDI5ODoiUEFTVEUuVE9PTCIsMzAyOiJXT1JL'@;
put 'Qk9PSy5ORVciLDMwNToiU0NFTkFSSU8uQ0VMTFMiLDMwNjoiU0NFTkFSSU8uREVMRVRFIiwzMDc6IlNDRU5BUklPLkFERCIsMzA4OiJTQ0VOQVJJTy5FRElUIiwzMDk6IlNDRU5BUklPLlNIT1ciLDMxMDoiU0NFTkFSSU8uU0hPVy5ORVhUIiwzMTE6IlNDRU5BUklPLlNVTU1BUlkiLDMxMjoi'@;
put 'UElWT1QuVEFCTEUuV0laQVJEIiwzMTM6IlBJVk9ULkZJRUxELlBST1BFUlRJRVMiLDMxNDoiUElWT1QuRklFTEQiLDMxNToiUElWT1QuSVRFTSIsMzE2OiJQSVZPVC5BREQuRklFTERTIiwzMTg6Ik9QVElPTlMuQ0FMQ1VMQVRJT04iLDMxOToiT1BUSU9OUy5FRElUIiwzMjA6Ik9QVElPTlMu'@;
put 'VklFVyIsMzIxOiJBRERJTi5NQU5BR0VSIiwzMjI6Ik1FTlUuRURJVE9SIiwzMjM6IkFUVEFDSC5UT09MQkFSUyIsMzI0OiJWQkFBY3RpdmF0ZSIsMzI1OiJPUFRJT05TLkNIQVJUIiwzMjg6IlZCQS5JTlNFUlQuRklMRSIsMzMwOiJWQkEuUFJPQ0VEVVJFLkRFRklOSVRJT04iLDMzNjoiUk9V'@;
put 'VElORy5TTElQIiwzMzg6IlJPVVRFLkRPQ1VNRU5UIiwzMzk6Ik1BSUwuTE9HT04iLDM0MjoiSU5TRVJULlBJQ1RVUkUiLDM0MzoiRURJVC5UT09MIiwzNDQ6IkdBTExFUlkuRE9VR0hOVVQiLDM1MDoiQ0hBUlQuVFJFTkQiLDM1MjoiUElWT1QuSVRFTS5QUk9QRVJUSUVTIiwzNTQ6IldPUktC'@;
put 'T09LLklOU0VSVCIsMzU1OiJPUFRJT05TLlRSQU5TSVRJT04iLDM1NjoiT1BUSU9OUy5HRU5FUkFMIiwzNzA6IkZJTFRFUi5BRFZBTkNFRCIsMzczOiJNQUlMLkFERC5NQUlMRVIiLDM3NDoiTUFJTC5ERUxFVEUuTUFJTEVSIiwzNzU6Ik1BSUwuUkVQTFkiLDM3NjoiTUFJTC5SRVBMWS5BTEwi'@;
put 'LDM3NzoiTUFJTC5GT1JXQVJEIiwzNzg6Ik1BSUwuTkVYVC5MRVRURVIiLDM3OToiREFUQS5MQUJFTCIsMzgwOiJJTlNFUlQuVElUTEUiLDM4MToiRk9OVC5QUk9QRVJUSUVTIiwzODI6Ik1BQ1JPLk9QVElPTlMiLDM4MzoiV09SS0JPT0suSElERSIsMzg0OiJXT1JLQk9PSy5VTkhJREUiLDM4'@;
put 'NToiV09SS0JPT0suREVMRVRFIiwzODY6IldPUktCT09LLk5BTUUiLDM4ODoiR0FMTEVSWS5DVVNUT00iLDM5MDoiQURELkNIQVJULkFVVE9GT1JNQVQiLDM5MToiREVMRVRFLkNIQVJULkFVVE9GT1JNQVQiLDM5MjoiQ0hBUlQuQURELkRBVEEiLDM5MzoiQVVUTy5PVVRMSU5FIiwzOTQ6IlRB'@;
put 'Qi5PUkRFUiIsMzk1OiJTSE9XLkRJQUxPRyIsMzk2OiJTRUxFQ1QuQUxMIiwzOTc6IlVOR1JPVVAuU0hFRVRTIiwzOTg6IlNVQlRPVEFMLkNSRUFURSIsMzk5OiJTVUJUT1RBTC5SRU1PVkUiLDQwMDoiUkVOQU1FLk9CSkVDVCIsNDEyOiJXT1JLQk9PSy5TQ1JPTEwiLDQxMzoiV09SS0JPT0su'@;
put 'TkVYVCIsNDE0OiJXT1JLQk9PSy5QUkVWIiw0MTU6IldPUktCT09LLlRBQi5TUExJVCIsNDE2OiJGVUxMLlNDUkVFTiIsNDE3OiJXT1JLQk9PSy5QUk9URUNUIiw0MjA6IlNDUk9MTEJBUi5QUk9QRVJUSUVTIiw0MjE6IlBJVk9ULlNIT1cuUEFHRVMiLDQyMjoiVEVYVC5UTy5DT0xVTU5TIiw0'@;
put 'MjM6IkZPUk1BVC5DSEFSVFRZUEUiLDQyNDoiTElOSy5GT1JNQVQiLDQyNToiVFJBQ0VSLkRJU1BMQVkiLDQzMDoiVFJBQ0VSLk5BVklHQVRFIiw0MzE6IlRSQUNFUi5DTEVBUiIsNDMyOiJUUkFDRVIuRVJST1IiLDQzMzoiUElWT1QuRklFTEQuR1JPVVAiLDQzNDoiUElWT1QuRklFTEQuVU5H'@;
put 'Uk9VUCIsNDM1OiJDSEVDS0JPWC5QUk9QRVJUSUVTIiw0MzY6IkxBQkVMLlBST1BFUlRJRVMiLDQzNzoiTElTVEJPWC5QUk9QRVJUSUVTIiw0Mzg6IkVESVRCT1guUFJPUEVSVElFUyIsNDM5OiJQSVZPVC5SRUZSRVNIIiw0NDA6IkxJTksuQ09NQk8iLDQ0MToiT1BFTi5URVhUIiw0NDI6IkhJ'@;
put 'REUuRElBTE9HIiw0NDM6IlNFVC5ESUFMT0cuRk9DVVMiLDQ0NDoiRU5BQkxFLk9CSkVDVCIsNDQ1OiJQVVNIQlVUVE9OLlBST1BFUlRJRVMiLDQ0NjoiU0VULkRJQUxPRy5ERUZBVUxUIiw0NDc6IkZJTFRFUiIsNDQ4OiJGSUxURVIuU0hPVy5BTEwiLDQ0OToiQ0xFQVIuT1VUTElORSIsNDUw'@;
put 'OiJGVU5DVElPTi5XSVpBUkQiLDQ1MToiQURELkxJU1QuSVRFTSIsNDUyOiJTRVQuTElTVC5JVEVNIiw0NTM6IlJFTU9WRS5MSVNULklURU0iLDQ1NDoiU0VMRUNULkxJU1QuSVRFTSIsNDU1OiJTRVQuQ09OVFJPTC5WQUxVRSIsNDU2OiJTQVZFLkNPUFkuQVMiLDQ1ODoiT1BUSU9OUy5MSVNU'@;
put 'Uy5BREQiLDQ1OToiT1BUSU9OUy5MSVNUUy5ERUxFVEUiLDQ2MDoiU0VSSUVTLkFYRVMiLDQ2MToiU0VSSUVTLlgiLDQ2MjoiU0VSSUVTLlkiLDQ2MzoiRVJST1JCQVIuWCIsNDY0OiJFUlJPUkJBUi5ZIiw0NjU6IkZPUk1BVC5DSEFSVCIsNDY2OiJTRVJJRVMuT1JERVIiLDQ2NzoiTUFJTC5M'@;
put 'T0dPRkYiLDQ2ODoiQ0xFQVIuUk9VVElORy5TTElQIiw0Njk6IkFQUC5BQ1RJVkFURS5NSUNST1NPRlQiLDQ3MDoiTUFJTC5FRElULk1BSUxFUiIsNDcxOiJPTi5TSEVFVCIsNDcyOiJTVEFOREFSRC5XSURUSCIsNDczOiJTQ0VOQVJJTy5NRVJHRSIsNDc0OiJTVU1NQVJZLklORk8iLDQ3NToi'@;
put 'RklORC5GSUxFIiw0NzY6IkFDVElWRS5DRUxMLkZPTlQiLDQ3NzoiRU5BQkxFLlRJUFdJWkFSRCIsNDc4OiJWQkEuTUFLRS5BRERJTiIsNDgwOiJJTlNFUlREQVRBVEFCTEUiLDQ4MToiV09SS0dST1VQLk9QVElPTlMiLDQ4MjoiTUFJTC5TRU5ELk1BSUxFUiIsNDg1OiJBVVRPQ09SUkVDVCIs'@;
put 'NDg5OiJQT1NULkRPQ1VNRU5UIiw0OTE6IlBJQ0tMSVNUIiw0OTM6IlZJRVcuU0hPVyIsNDk0OiJWSUVXLkRFRklORSIsNDk1OiJWSUVXLkRFTEVURSIsNTA5OiJTSEVFVC5CQUNLR1JPVU5EIiw1MTA6IklOU0VSVC5NQVAuT0JKRUNUIiw1MTE6Ik9QVElPTlMuTUVOT05PIiw1MTc6Ik1TT0NI'@;
put 'RUNLUyIsNTE4OiJOT1JNQUwiLDUxOToiTEFZT1VUIiw1MjA6IlJNLlBSSU5ULkFSRUEiLDUyMToiQ0xFQVIuUFJJTlQuQVJFQSIsNTIyOiJBREQuUFJJTlQuQVJFQSIsNTIzOiJNT1ZFLkJSSyIsNTQ1OiJISURFQ1VSUi5OT1RFIiw1NDY6IkhJREVBTEwuTk9URVMiLDU0NzoiREVMRVRFLk5P'@;
put 'VEUiLDU0ODoiVFJBVkVSU0UuTk9URVMiLDU0OToiQUNUSVZBVEUuTk9URVMiLDYyMDoiUFJPVEVDVC5SRVZJU0lPTlMiLDYyMToiVU5QUk9URUNULlJFVklTSU9OUyIsNjQ3OiJPUFRJT05TLk1FIiw2NTM6IldFQi5QVUJMSVNIIiw2Njc6Ik5FV1dFQlFVRVJZIiw2NzM6IlBJVk9ULlRBQkxF'@;
put 'LkNIQVJUIiw3NTM6Ik9QVElPTlMuU0FWRSIsNzU1OiJPUFRJT05TLlNQRUxMIiw4MDg6IkhJREVBTEwuSU5LQU5OT1RTIn0sX3Y9ezA6IkNPVU5UIiwxOiJJRiIsMjoiSVNOQSIsMzoiSVNFUlJPUiIsNDoiU1VNIiw1OiJBVkVSQUdFIiw2OiJNSU4iLDc6Ik1BWCIsODoiUk9XIiw5OiJDT0xV'@;
put 'TU4iLDEwOiJOQSIsMTE6Ik5QViIsMTI6IlNUREVWIiwxMzoiRE9MTEFSIiwxNDoiRklYRUQiLDE1OiJTSU4iLDE2OiJDT1MiLDE3OiJUQU4iLDE4OiJBVEFOIiwxOToiUEkiLDIwOiJTUVJUIiwyMToiRVhQIiwyMjoiTE4iLDIzOiJMT0cxMCIsMjQ6IkFCUyIsMjU6IklOVCIsMjY6IlNJR04i'@;
put 'LDI3OiJST1VORCIsMjg6IkxPT0tVUCIsMjk6IklOREVYIiwzMDoiUkVQVCIsMzE6Ik1JRCIsMzI6IkxFTiIsMzM6IlZBTFVFIiwzNDoiVFJVRSIsMzU6IkZBTFNFIiwzNjoiQU5EIiwzNzoiT1IiLDM4OiJOT1QiLDM5OiJNT0QiLDQwOiJEQ09VTlQiLDQxOiJEU1VNIiw0MjoiREFWRVJBR0Ui'@;
put 'LDQzOiJETUlOIiw0NDoiRE1BWCIsNDU6IkRTVERFViIsNDY6IlZBUiIsNDc6IkRWQVIiLDQ4OiJURVhUIiw0OToiTElORVNUIiw1MDoiVFJFTkQiLDUxOiJMT0dFU1QiLDUyOiJHUk9XVEgiLDUzOiJHT1RPIiw1NDoiSEFMVCIsNTU6IlJFVFVSTiIsNTY6IlBWIiw1NzoiRlYiLDU4OiJOUEVS'@;
put 'Iiw1OToiUE1UIiw2MDoiUkFURSIsNjE6Ik1JUlIiLDYyOiJJUlIiLDYzOiJSQU5EIiw2NDoiTUFUQ0giLDY1OiJEQVRFIiw2NjoiVElNRSIsNjc6IkRBWSIsNjg6Ik1PTlRIIiw2OToiWUVBUiIsNzA6IldFRUtEQVkiLDcxOiJIT1VSIiw3MjoiTUlOVVRFIiw3MzoiU0VDT05EIiw3NDoiTk9X'@;
put 'Iiw3NToiQVJFQVMiLDc2OiJST1dTIiw3NzoiQ09MVU1OUyIsNzg6Ik9GRlNFVCIsNzk6IkFCU1JFRiIsODA6IlJFTFJFRiIsODE6IkFSR1VNRU5UIiw4MjoiU0VBUkNIIiw4MzoiVFJBTlNQT1NFIiw4NDoiRVJST1IiLDg1OiJTVEVQIiw4NjoiVFlQRSIsODc6IkVDSE8iLDg4OiJTRVQuTkFN'@;
put 'RSIsODk6IkNBTExFUiIsOTA6IkRFUkVGIiw5MToiV0lORE9XUyIsOTI6IlNFUklFUyIsOTM6IkRPQ1VNRU5UUyIsOTQ6IkFDVElWRS5DRUxMIiw5NToiU0VMRUNUSU9OIiw5NjoiUkVTVUxUIiw5NzoiQVRBTjIiLDk4OiJBU0lOIiw5OToiQUNPUyIsMTAwOiJDSE9PU0UiLDEwMToiSExPT0tV'@;
put 'UCIsMTAyOiJWTE9PS1VQIiwxMDM6IkxJTktTIiwxMDQ6IklOUFVUIiwxMDU6IklTUkVGIiwxMDY6IkdFVC5GT1JNVUxBIiwxMDc6IkdFVC5OQU1FIiwxMDg6IlNFVC5WQUxVRSIsMTA5OiJMT0ciLDExMDoiRVhFQyIsMTExOiJDSEFSIiwxMTI6IkxPV0VSIiwxMTM6IlVQUEVSIiwxMTQ6IlBS'@;
put 'T1BFUiIsMTE1OiJMRUZUIiwxMTY6IlJJR0hUIiwxMTc6IkVYQUNUIiwxMTg6IlRSSU0iLDExOToiUkVQTEFDRSIsMTIwOiJTVUJTVElUVVRFIiwxMjE6IkNPREUiLDEyMjoiTkFNRVMiLDEyMzoiRElSRUNUT1JZIiwxMjQ6IkZJTkQiLDEyNToiQ0VMTCIsMTI2OiJJU0VSUiIsMTI3OiJJU1RF'@;
put 'WFQiLDEyODoiSVNOVU1CRVIiLDEyOToiSVNCTEFOSyIsMTMwOiJUIiwxMzE6Ik4iLDEzMjoiRk9QRU4iLDEzMzoiRkNMT1NFIiwxMzQ6IkZTSVpFIiwxMzU6IkZSRUFETE4iLDEzNjoiRlJFQUQiLDEzNzoiRldSSVRFTE4iLDEzODoiRldSSVRFIiwxMzk6IkZQT1MiLDE0MDoiREFURVZBTFVF'@;
put 'IiwxNDE6IlRJTUVWQUxVRSIsMTQyOiJTTE4iLDE0MzoiU1lEIiwxNDQ6IkREQiIsMTQ1OiJHRVQuREVGIiwxNDY6IlJFRlRFWFQiLDE0NzoiVEVYVFJFRiIsMTQ4OiJJTkRJUkVDVCIsMTQ5OiJSRUdJU1RFUiIsMTUwOiJDQUxMIiwxNTE6IkFERC5CQVIiLDE1MjoiQURELk1FTlUiLDE1Mzoi'@;
put 'QURELkNPTU1BTkQiLDE1NDoiRU5BQkxFLkNPTU1BTkQiLDE1NToiQ0hFQ0suQ09NTUFORCIsMTU2OiJSRU5BTUUuQ09NTUFORCIsMTU3OiJTSE9XLkJBUiIsMTU4OiJERUxFVEUuTUVOVSIsMTU5OiJERUxFVEUuQ09NTUFORCIsMTYwOiJHRVQuQ0hBUlQuSVRFTSIsMTYxOiJESUFMT0cuQk9Y'@;
put 'IiwxNjI6IkNMRUFOIiwxNjM6Ik1ERVRFUk0iLDE2NDoiTUlOVkVSU0UiLDE2NToiTU1VTFQiLDE2NjoiRklMRVMiLDE2NzoiSVBNVCIsMTY4OiJQUE1UIiwxNjk6IkNPVU5UQSIsMTcwOiJDQU5DRUwuS0VZIiwxNzE6IkZPUiIsMTcyOiJXSElMRSIsMTczOiJCUkVBSyIsMTc0OiJORVhUIiwx'@;
put 'NzU6IklOSVRJQVRFIiwxNzY6IlJFUVVFU1QiLDE3NzoiUE9LRSIsMTc4OiJFWEVDVVRFIiwxNzk6IlRFUk1JTkFURSIsMTgwOiJSRVNUQVJUIiwxODE6IkhFTFAiLDE4MjoiR0VULkJBUiIsMTgzOiJQUk9EVUNUIiwxODQ6IkZBQ1QiLDE4NToiR0VULkNFTEwiLDE4NjoiR0VULldPUktTUEFD'@;
put 'RSIsMTg3OiJHRVQuV0lORE9XIiwxODg6IkdFVC5ET0NVTUVOVCIsMTg5OiJEUFJPRFVDVCIsMTkwOiJJU05PTlRFWFQiLDE5MToiR0VULk5PVEUiLDE5MjoiTk9URSIsMTkzOiJTVERFVlAiLDE5NDoiVkFSUCIsMTk1OiJEU1RERVZQIiwxOTY6IkRWQVJQIiwxOTc6IlRSVU5DIiwxOTg6IklT'@;
put 'TE9HSUNBTCIsMTk5OiJEQ09VTlRBIiwyMDA6IkRFTEVURS5CQVIiLDIwMToiVU5SRUdJU1RFUiIsMjA0OiJVU0RPTExBUiIsMjA1OiJGSU5EQiIsMjA2OiJTRUFSQ0hCIiwyMDc6IlJFUExBQ0VCIiwyMDg6IkxFRlRCIiwyMDk6IlJJR0hUQiIsMjEwOiJNSURCIiwyMTE6IkxFTkIiLDIxMjoi'@;
put 'Uk9VTkRVUCIsMjEzOiJST1VORERPV04iLDIxNDoiQVNDIiwyMTU6IkRCQ1MiLDIxNjoiUkFOSyIsMjE5OiJBRERSRVNTIiwyMjA6IkRBWVMzNjAiLDIyMToiVE9EQVkiLDIyMjoiVkRCIiwyMjM6IkVMU0UiLDIyNDoiRUxTRS5JRiIsMjI1OiJFTkQuSUYiLDIyNjoiRk9SLkNFTEwiLDIyNzoi'@;
put 'TUVESUFOIiwyMjg6IlNVTVBST0RVQ1QiLDIyOToiU0lOSCIsMjMwOiJDT1NIIiwyMzE6IlRBTkgiLDIzMjoiQVNJTkgiLDIzMzoiQUNPU0giLDIzNDoiQVRBTkgiLDIzNToiREdFVCIsMjM2OiJDUkVBVEUuT0JKRUNUIiwyMzc6IlZPTEFUSUxFIiwyMzg6IkxBU1QuRVJST1IiLDIzOToiQ1VT'@;
put 'VE9NLlVORE8iLDI0MDoiQ1VTVE9NLlJFUEVBVCIsMjQxOiJGT1JNVUxBLkNPTlZFUlQiLDI0MjoiR0VULkxJTksuSU5GTyIsMjQzOiJURVhULkJPWCIsMjQ0OiJJTkZPIiwyNDU6IkdST1VQIiwyNDY6IkdFVC5PQkpFQ1QiLDI0NzoiREIiLDI0ODoiUEFVU0UiLDI1MToiUkVTVU1FIiwyNTI6'@;
put 'IkZSRVFVRU5DWSIsMjUzOiJBREQuVE9PTEJBUiIsMjU0OiJERUxFVEUuVE9PTEJBUiIsMjU1OiJVc2VyIiwyNTY6IlJFU0VULlRPT0xCQVIiLDI1NzoiRVZBTFVBVEUiLDI1ODoiR0VULlRPT0xCQVIiLDI1OToiR0VULlRPT0wiLDI2MDoiU1BFTExJTkcuQ0hFQ0siLDI2MToiRVJST1IuVFlQ'@;
put 'RSIsMjYyOiJBUFAuVElUTEUiLDI2MzoiV0lORE9XLlRJVExFIiwyNjQ6IlNBVkUuVE9PTEJBUiIsMjY1OiJFTkFCTEUuVE9PTCIsMjY2OiJQUkVTUy5UT09MIiwyNjc6IlJFR0lTVEVSLklEIiwyNjg6IkdFVC5XT1JLQk9PSyIsMjY5OiJBVkVERVYiLDI3MDoiQkVUQURJU1QiLDI3MToiR0FN'@;
put 'TUFMTiIsMjcyOiJCRVRBSU5WIiwyNzM6IkJJTk9NRElTVCIsMjc0OiJDSElESVNUIiwyNzU6IkNISUlOViIsMjc2OiJDT01CSU4iLDI3NzoiQ09ORklERU5DRSIsMjc4OiJDUklUQklOT00iLDI3OToiRVZFTiIsMjgwOiJFWFBPTkRJU1QiLDI4MToiRkRJU1QiLDI4MjoiRklOViIsMjgzOiJG'@;
put 'SVNIRVIiLDI4NDoiRklTSEVSSU5WIiwyODU6IkZMT09SIiwyODY6IkdBTU1BRElTVCIsMjg3OiJHQU1NQUlOViIsMjg4OiJDRUlMSU5HIiwyODk6IkhZUEdFT01ESVNUIiwyOTA6IkxPR05PUk1ESVNUIiwyOTE6IkxPR0lOViIsMjkyOiJORUdCSU5PTURJU1QiLDI5MzoiTk9STURJU1QiLDI5'@;
put 'NDoiTk9STVNESVNUIiwyOTU6Ik5PUk1JTlYiLDI5NjoiTk9STVNJTlYiLDI5NzoiU1RBTkRBUkRJWkUiLDI5ODoiT0REIiwyOTk6IlBFUk1VVCIsMzAwOiJQT0lTU09OIiwzMDE6IlRESVNUIiwzMDI6IldFSUJVTEwiLDMwMzoiU1VNWE1ZMiIsMzA0OiJTVU1YMk1ZMiIsMzA1OiJTVU1YMlBZ'@;
put 'MiIsMzA2OiJDSElURVNUIiwzMDc6IkNPUlJFTCIsMzA4OiJDT1ZBUiIsMzA5OiJGT1JFQ0FTVCIsMzEwOiJGVEVTVCIsMzExOiJJTlRFUkNFUFQiLDMxMjoiUEVBUlNPTiIsMzEzOiJSU1EiLDMxNDoiU1RFWVgiLDMxNToiU0xPUEUiLDMxNjoiVFRFU1QiLDMxNzoiUFJPQiIsMzE4OiJERVZT'@;
put 'USIsMzE5OiJHRU9NRUFOIiwzMjA6IkhBUk1FQU4iLDMyMToiU1VNU1EiLDMyMjoiS1VSVCIsMzIzOiJTS0VXIiwzMjQ6IlpURVNUIiwzMjU6IkxBUkdFIiwzMjY6IlNNQUxMIiwzMjc6IlFVQVJUSUxFIiwzMjg6IlBFUkNFTlRJTEUiLDMyOToiUEVSQ0VOVFJBTksiLDMzMDoiTU9ERSIsMzMx'@;
put 'OiJUUklNTUVBTiIsMzMyOiJUSU5WIiwzMzQ6Ik1PVklFLkNPTU1BTkQiLDMzNToiR0VULk1PVklFIiwzMzY6IkNPTkNBVEVOQVRFIiwzMzc6IlBPV0VSIiwzMzg6IlBJVk9ULkFERC5EQVRBIiwzMzk6IkdFVC5QSVZPVC5UQUJMRSIsMzQwOiJHRVQuUElWT1QuRklFTEQiLDM0MToiR0VULlBJ'@;
put 'Vk9ULklURU0iLDM0MjoiUkFESUFOUyIsMzQzOiJERUdSRUVTIiwzNDQ6IlNVQlRPVEFMIiwzNDU6IlNVTUlGIiwzNDY6IkNPVU5USUYiLDM0NzoiQ09VTlRCTEFOSyIsMzQ4OiJTQ0VOQVJJTy5HRVQiLDM0OToiT1BUSU9OUy5MSVNUUy5HRVQiLDM1MDoiSVNQTVQiLDM1MToiREFURURJRiIs'@;
put 'MzUyOiJEQVRFU1RSSU5HIiwzNTM6Ik5VTUJFUlNUUklORyIsMzU0OiJST01BTiIsMzU1OiJPUEVOLkRJQUxPRyIsMzU2OiJTQVZFLkRJQUxPRyIsMzU3OiJWSUVXLkdFVCIsMzU4OiJHRVRQSVZPVERBVEEiLDM1OToiSFlQRVJMSU5LIiwzNjA6IlBIT05FVElDIiwzNjE6IkFWRVJBR0VBIiwz'@;
put 'NjI6Ik1BWEEiLDM2MzoiTUlOQSIsMzY0OiJTVERFVlBBIiwzNjU6IlZBUlBBIiwzNjY6IlNUREVWQSIsMzY3OiJWQVJBIiwzNjg6IkJBSFRURVhUIiwzNjk6IlRIQUlEQVlPRldFRUsiLDM3MDoiVEhBSURJR0lUIiwzNzE6IlRIQUlNT05USE9GWUVBUiIsMzcyOiJUSEFJTlVNU09VTkQiLDM3'@;
put 'MzoiVEhBSU5VTVNUUklORyIsMzc0OiJUSEFJU1RSSU5HTEVOR1RIIiwzNzU6IklTVEhBSURJR0lUIiwzNzY6IlJPVU5EQkFIVERPV04iLDM3NzoiUk9VTkRCQUhUVVAiLDM3ODoiVEhBSVlFQVIiLDM3OToiUlREIiwzODA6IkNVQkVWQUxVRSIsMzgxOiJDVUJFTUVNQkVSIiwzODI6IkNVQkVN'@;
put 'RU1CRVJQUk9QRVJUWSIsMzgzOiJDVUJFUkFOS0VETUVNQkVSIiwzODQ6IkhFWDJCSU4iLDM4NToiSEVYMkRFQyIsMzg2OiJIRVgyT0NUIiwzODc6IkRFQzJCSU4iLDM4ODoiREVDMkhFWCIsMzg5OiJERUMyT0NUIiwzOTA6Ik9DVDJCSU4iLDM5MToiT0NUMkhFWCIsMzkyOiJPQ1QyREVDIiwz'@;
put 'OTM6IkJJTjJERUMiLDM5NDoiQklOMk9DVCIsMzk1OiJCSU4ySEVYIiwzOTY6IklNU1VCIiwzOTc6IklNRElWIiwzOTg6IklNUE9XRVIiLDM5OToiSU1BQlMiLDQwMDoiSU1TUVJUIiw0MDE6IklNTE4iLDQwMjoiSU1MT0cyIiw0MDM6IklNTE9HMTAiLDQwNDoiSU1TSU4iLDQwNToiSU1DT1Mi'@;
put 'LDQwNjoiSU1FWFAiLDQwNzoiSU1BUkdVTUVOVCIsNDA4OiJJTUNPTkpVR0FURSIsNDA5OiJJTUFHSU5BUlkiLDQxMDoiSU1SRUFMIiw0MTE6IkNPTVBMRVgiLDQxMjoiSU1TVU0iLDQxMzoiSU1QUk9EVUNUIiw0MTQ6IlNFUklFU1NVTSIsNDE1OiJGQUNURE9VQkxFIiw0MTY6IlNRUlRQSSIs'@;
put 'NDE3OiJRVU9USUVOVCIsNDE4OiJERUxUQSIsNDE5OiJHRVNURVAiLDQyMDoiSVNFVkVOIiw0MjE6IklTT0REIiw0MjI6Ik1ST1VORCIsNDIzOiJFUkYiLDQyNDoiRVJGQyIsNDI1OiJCRVNTRUxKIiw0MjY6IkJFU1NFTEsiLDQyNzoiQkVTU0VMWSIsNDI4OiJCRVNTRUxJIiw0Mjk6IlhJUlIi'@;
put 'LDQzMDoiWE5QViIsNDMxOiJQUklDRU1BVCIsNDMyOiJZSUVMRE1BVCIsNDMzOiJJTlRSQVRFIiw0MzQ6IlJFQ0VJVkVEIiw0MzU6IkRJU0MiLDQzNjoiUFJJQ0VESVNDIiw0Mzc6IllJRUxERElTQyIsNDM4OiJUQklMTEVRIiw0Mzk6IlRCSUxMUFJJQ0UiLDQ0MDoiVEJJTExZSUVMRCIsNDQx'@;
put 'OiJQUklDRSIsNDQyOiJZSUVMRCIsNDQzOiJET0xMQVJERSIsNDQ0OiJET0xMQVJGUiIsNDQ1OiJOT01JTkFMIiw0NDY6IkVGRkVDVCIsNDQ3OiJDVU1QUklOQyIsNDQ4OiJDVU1JUE1UIiw0NDk6IkVEQVRFIiw0NTA6IkVPTU9OVEgiLDQ1MToiWUVBUkZSQUMiLDQ1MjoiQ09VUERBWUJTIiw0'@;
put 'NTM6IkNPVVBEQVlTIiw0NTQ6IkNPVVBEQVlTTkMiLDQ1NToiQ09VUE5DRCIsNDU2OiJDT1VQTlVNIiw0NTc6IkNPVVBQQ0QiLDQ1ODoiRFVSQVRJT04iLDQ1OToiTURVUkFUSU9OIiw0NjA6Ik9ERExQUklDRSIsNDYxOiJPRERMWUlFTEQiLDQ2MjoiT0RERlBSSUNFIiw0NjM6Ik9EREZZSUVM'@;
put 'RCIsNDY0OiJSQU5EQkVUV0VFTiIsNDY1OiJXRUVLTlVNIiw0NjY6IkFNT1JERUdSQyIsNDY3OiJBTU9STElOQyIsNDY4OiJDT05WRVJUIiw3MjQ6IlNIRUVUSlMiLDQ2OToiQUNDUklOVCIsNDcwOiJBQ0NSSU5UTSIsNDcxOiJXT1JLREFZIiw0NzI6Ik5FVFdPUktEQVlTIiw0NzM6IkdDRCIs'@;
put 'NDc0OiJNVUxUSU5PTUlBTCIsNDc1OiJMQ00iLDQ3NjoiRlZTQ0hFRFVMRSIsNDc3OiJDVUJFS1BJTUVNQkVSIiw0Nzg6IkNVQkVTRVQiLDQ3OToiQ1VCRVNFVENPVU5UIiw0ODA6IklGRVJST1IiLDQ4MToiQ09VTlRJRlMiLDQ4MjoiU1VNSUZTIiw0ODM6IkFWRVJBR0VJRiIsNDg0OiJBVkVS'@;
put 'QUdFSUZTIn0sYnY9ezI6MSwzOjEsMTA6MCwxNToxLDE2OjEsMTc6MSwxODoxLDE5OjAsMjA6MSwyMToxLDIyOjEsMjM6MSwyNDoxLDI1OjEsMjY6MSwyNzoyLDMwOjIsMzE6MywzMjoxLDMzOjEsMzQ6MCwzNTowLDM4OjEsMzk6Miw0MDozLDQxOjMsNDI6Myw0MzozLDQ0OjMsNDU6Myw0Nzoz'@;
put 'LDQ4OjIsNTM6MSw2MTozLDYzOjAsNjU6Myw2NjozLDY3OjEsNjg6MSw2OToxLDcwOjEsNzE6MSw3MjoxLDczOjEsNzQ6MCw3NToxLDc2OjEsNzc6MSw3OToyLDgwOjIsODM6MSw4NTowLDg2OjEsODk6MCw5MDoxLDk0OjAsOTU6MCw5NzoyLDk4OjEsOTk6MSwxMDE6MywxMDI6MywxMDU6MSwx'@;
put 'MDY6MSwxMDg6MiwxMTE6MSwxMTI6MSwxMTM6MSwxMTQ6MSwxMTc6MiwxMTg6MSwxMTk6NCwxMjE6MSwxMjY6MSwxMjc6MSwxMjg6MSwxMjk6MSwxMzA6MSwxMzE6MSwxMzM6MSwxMzQ6MSwxMzU6MSwxMzY6MiwxMzc6MiwxMzg6MiwxNDA6MSwxNDE6MSwxNDI6MywxNDM6NCwxNDQ6NCwxNjE6'@;
put 'MSwxNjI6MSwxNjM6MSwxNjQ6MSwxNjU6MiwxNzI6MSwxNzU6MiwxNzY6MiwxNzc6MywxNzg6MiwxNzk6MSwxODQ6MSwxODY6MSwxODk6MywxOTA6MSwxOTU6MywxOTY6MywxOTc6MSwxOTg6MSwxOTk6MywyMDE6MSwyMDc6NCwyMTA6MywyMTE6MSwyMTI6MiwyMTM6MiwyMTQ6MSwyMTU6MSwy'@;
put 'MjU6MCwyMjk6MSwyMzA6MSwyMzE6MSwyMzI6MSwyMzM6MSwyMzQ6MSwyMzU6MywyNDQ6MSwyNDc6NCwyNTI6MiwyNTc6MSwyNjE6MSwyNzE6MSwyNzM6NCwyNzQ6MiwyNzU6MiwyNzY6MiwyNzc6MywyNzg6MywyNzk6MSwyODA6MywyODE6MywyODI6MywyODM6MSwyODQ6MSwyODU6MiwyODY6'@;
put 'NCwyODc6MywyODg6MiwyODk6NCwyOTA6MywyOTE6MywyOTI6MywyOTM6NCwyOTQ6MSwyOTU6MywyOTY6MSwyOTc6MywyOTg6MSwyOTk6MiwzMDA6MywzMDE6MywzMDI6NCwzMDM6MiwzMDQ6MiwzMDU6MiwzMDY6MiwzMDc6MiwzMDg6MiwzMDk6MywzMTA6MiwzMTE6MiwzMTI6MiwzMTM6Miwz'@;
put 'MTQ6MiwzMTU6MiwzMTY6NCwzMjU6MiwzMjY6MiwzMjc6MiwzMjg6MiwzMzE6MiwzMzI6MiwzMzc6MiwzNDI6MSwzNDM6MSwzNDY6MiwzNDc6MSwzNTA6NCwzNTE6MywzNTI6MSwzNTM6MiwzNjA6MSwzNjg6MSwzNjk6MSwzNzA6MSwzNzE6MSwzNzI6MSwzNzM6MSwzNzQ6MSwzNzU6MSwzNzY6'@;
put 'MSwzNzc6MSwzNzg6MSwzODI6MywzODU6MSwzOTI6MSwzOTM6MSwzOTY6MiwzOTc6MiwzOTg6MiwzOTk6MSw0MDA6MSw0MDE6MSw0MDI6MSw0MDM6MSw0MDQ6MSw0MDU6MSw0MDY6MSw0MDc6MSw0MDg6MSw0MDk6MSw0MTA6MSw0MTQ6NCw0MTU6MSw0MTY6MSw0MTc6Miw0MjA6MSw0MjE6MSw0'@;
put 'MjI6Miw0MjQ6MSw0MjU6Miw0MjY6Miw0Mjc6Miw0Mjg6Miw0MzA6Myw0Mzg6Myw0Mzk6Myw0NDA6Myw0NDM6Miw0NDQ6Miw0NDU6Miw0NDY6Miw0NDc6Niw0NDg6Niw0NDk6Miw0NTA6Miw0NjQ6Miw0Njg6Myw0NzY6Miw0Nzk6MSw0ODA6Miw2NTUzNTowfSxvNT17Il94bGZuLkFDT1QiOiJB'@;
put 'Q09UIiwiX3hsZm4uQUNPVEgiOiJBQ09USCIsIl94bGZuLkFHR1JFR0FURSI6IkFHR1JFR0FURSIsIl94bGZuLkFSQUJJQyI6IkFSQUJJQyIsIl94bGZuLkFWRVJBR0VJRiI6IkFWRVJBR0VJRiIsIl94bGZuLkFWRVJBR0VJRlMiOiJBVkVSQUdFSUZTIiwiX3hsZm4uQkFTRSI6IkJBU0UiLCJf'@;
put 'eGxmbi5CRVRBLkRJU1QiOiJCRVRBLkRJU1QiLCJfeGxmbi5CRVRBLklOViI6IkJFVEEuSU5WIiwiX3hsZm4uQklOT00uRElTVCI6IkJJTk9NLkRJU1QiLCJfeGxmbi5CSU5PTS5ESVNULlJBTkdFIjoiQklOT00uRElTVC5SQU5HRSIsIl94bGZuLkJJTk9NLklOViI6IkJJTk9NLklOViIsIl94'@;
put 'bGZuLkJJVEFORCI6IkJJVEFORCIsIl94bGZuLkJJVExTSElGVCI6IkJJVExTSElGVCIsIl94bGZuLkJJVE9SIjoiQklUT1IiLCJfeGxmbi5CSVRSU0hJRlQiOiJCSVRSU0hJRlQiLCJfeGxmbi5CSVRYT1IiOiJCSVRYT1IiLCJfeGxmbi5DRUlMSU5HLk1BVEgiOiJDRUlMSU5HLk1BVEgiLCJf'@;
put 'eGxmbi5DRUlMSU5HLlBSRUNJU0UiOiJDRUlMSU5HLlBSRUNJU0UiLCJfeGxmbi5DSElTUS5ESVNUIjoiQ0hJU1EuRElTVCIsIl94bGZuLkNISVNRLkRJU1QuUlQiOiJDSElTUS5ESVNULlJUIiwiX3hsZm4uQ0hJU1EuSU5WIjoiQ0hJU1EuSU5WIiwiX3hsZm4uQ0hJU1EuSU5WLlJUIjoiQ0hJ'@;
put 'U1EuSU5WLlJUIiwiX3hsZm4uQ0hJU1EuVEVTVCI6IkNISVNRLlRFU1QiLCJfeGxmbi5DT01CSU5BIjoiQ09NQklOQSIsIl94bGZuLkNPTkNBVCI6IkNPTkNBVCIsIl94bGZuLkNPTkZJREVOQ0UuTk9STSI6IkNPTkZJREVOQ0UuTk9STSIsIl94bGZuLkNPTkZJREVOQ0UuVCI6IkNPTkZJREVO'@;
put 'Q0UuVCIsIl94bGZuLkNPVCI6IkNPVCIsIl94bGZuLkNPVEgiOiJDT1RIIiwiX3hsZm4uQ09VTlRJRlMiOiJDT1VOVElGUyIsIl94bGZuLkNPVkFSSUFOQ0UuUCI6IkNPVkFSSUFOQ0UuUCIsIl94bGZuLkNPVkFSSUFOQ0UuUyI6IkNPVkFSSUFOQ0UuUyIsIl94bGZuLkNTQyI6IkNTQyIsIl94'@;
put 'bGZuLkNTQ0giOiJDU0NIIiwiX3hsZm4uREFZUyI6IkRBWVMiLCJfeGxmbi5ERUNJTUFMIjoiREVDSU1BTCIsIl94bGZuLkVDTUEuQ0VJTElORyI6IkVDTUEuQ0VJTElORyIsIl94bGZuLkVSRi5QUkVDSVNFIjoiRVJGLlBSRUNJU0UiLCJfeGxmbi5FUkZDLlBSRUNJU0UiOiJFUkZDLlBSRUNJ'@;
put 'U0UiLCJfeGxmbi5FWFBPTi5ESVNUIjoiRVhQT04uRElTVCIsIl94bGZuLkYuRElTVCI6IkYuRElTVCIsIl94bGZuLkYuRElTVC5SVCI6IkYuRElTVC5SVCIsIl94bGZuLkYuSU5WIjoiRi5JTlYiLCJfeGxmbi5GLklOVi5SVCI6IkYuSU5WLlJUIiwiX3hsZm4uRi5URVNUIjoiRi5URVNUIiwi'@;
put 'X3hsZm4uRklMVEVSWE1MIjoiRklMVEVSWE1MIiwiX3hsZm4uRkxPT1IuTUFUSCI6IkZMT09SLk1BVEgiLCJfeGxmbi5GTE9PUi5QUkVDSVNFIjoiRkxPT1IuUFJFQ0lTRSIsIl94bGZuLkZPUkVDQVNULkVUUyI6IkZPUkVDQVNULkVUUyIsIl94bGZuLkZPUkVDQVNULkVUUy5DT05GSU5UIjoi'@;
put 'Rk9SRUNBU1QuRVRTLkNPTkZJTlQiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiOiJGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuU1RBVCI6IkZPUkVDQVNULkVUUy5TVEFUIiwiX3hsZm4uRk9SRUNBU1QuTElORUFSIjoiRk9SRUNBU1QuTElO'@;
put 'RUFSIiwiX3hsZm4uRk9STVVMQVRFWFQiOiJGT1JNVUxBVEVYVCIsIl94bGZuLkdBTU1BIjoiR0FNTUEiLCJfeGxmbi5HQU1NQS5ESVNUIjoiR0FNTUEuRElTVCIsIl94bGZuLkdBTU1BLklOViI6IkdBTU1BLklOViIsIl94bGZuLkdBTU1BTE4uUFJFQ0lTRSI6IkdBTU1BTE4uUFJFQ0lTRSIs'@;
put 'Il94bGZuLkdBVVNTIjoiR0FVU1MiLCJfeGxmbi5IWVBHRU9NLkRJU1QiOiJIWVBHRU9NLkRJU1QiLCJfeGxmbi5JRkVSUk9SIjoiSUZFUlJPUiIsIl94bGZuLklGTkEiOiJJRk5BIiwiX3hsZm4uSUZTIjoiSUZTIiwiX3hsZm4uSU1DT1NIIjoiSU1DT1NIIiwiX3hsZm4uSU1DT1QiOiJJTUNP'@;
put 'VCIsIl94bGZuLklNQ1NDIjoiSU1DU0MiLCJfeGxmbi5JTUNTQ0giOiJJTUNTQ0giLCJfeGxmbi5JTVNFQyI6IklNU0VDIiwiX3hsZm4uSU1TRUNIIjoiSU1TRUNIIiwiX3hsZm4uSU1TSU5IIjoiSU1TSU5IIiwiX3hsZm4uSU1UQU4iOiJJTVRBTiIsIl94bGZuLklTRk9STVVMQSI6IklTRk9S'@;
put 'TVVMQSIsIl94bGZuLklTTy5DRUlMSU5HIjoiSVNPLkNFSUxJTkciLCJfeGxmbi5JU09XRUVLTlVNIjoiSVNPV0VFS05VTSIsIl94bGZuLkxPR05PUk0uRElTVCI6IkxPR05PUk0uRElTVCIsIl94bGZuLkxPR05PUk0uSU5WIjoiTE9HTk9STS5JTlYiLCJfeGxmbi5NQVhJRlMiOiJNQVhJRlMi'@;
put 'LCJfeGxmbi5NSU5JRlMiOiJNSU5JRlMiLCJfeGxmbi5NT0RFLk1VTFQiOiJNT0RFLk1VTFQiLCJfeGxmbi5NT0RFLlNOR0wiOiJNT0RFLlNOR0wiLCJfeGxmbi5NVU5JVCI6Ik1VTklUIiwiX3hsZm4uTkVHQklOT00uRElTVCI6Ik5FR0JJTk9NLkRJU1QiLCJfeGxmbi5ORVRXT1JLREFZUy5J'@;
put 'TlRMIjoiTkVUV09SS0RBWVMuSU5UTCIsIl94bGZuLk5JR0JJTk9NIjoiTklHQklOT00iLCJfeGxmbi5OT1JNLkRJU1QiOiJOT1JNLkRJU1QiLCJfeGxmbi5OT1JNLklOViI6Ik5PUk0uSU5WIiwiX3hsZm4uTk9STS5TLkRJU1QiOiJOT1JNLlMuRElTVCIsIl94bGZuLk5PUk0uUy5JTlYiOiJO'@;
put 'T1JNLlMuSU5WIiwiX3hsZm4uTlVNQkVSVkFMVUUiOiJOVU1CRVJWQUxVRSIsIl94bGZuLlBEVVJBVElPTiI6IlBEVVJBVElPTiIsIl94bGZuLlBFUkNFTlRJTEUuRVhDIjoiUEVSQ0VOVElMRS5FWEMiLCJfeGxmbi5QRVJDRU5USUxFLklOQyI6IlBFUkNFTlRJTEUuSU5DIiwiX3hsZm4uUEVS'@;
put 'Q0VOVFJBTksuRVhDIjoiUEVSQ0VOVFJBTksuRVhDIiwiX3hsZm4uUEVSQ0VOVFJBTksuSU5DIjoiUEVSQ0VOVFJBTksuSU5DIiwiX3hsZm4uUEVSTVVUQVRJT05BIjoiUEVSTVVUQVRJT05BIiwiX3hsZm4uUEhJIjoiUEhJIiwiX3hsZm4uUE9JU1NPTi5ESVNUIjoiUE9JU1NPTi5ESVNUIiwi'@;
put 'X3hsZm4uUVVBUlRJTEUuRVhDIjoiUVVBUlRJTEUuRVhDIiwiX3hsZm4uUVVBUlRJTEUuSU5DIjoiUVVBUlRJTEUuSU5DIiwiX3hsZm4uUVVFUllTVFJJTkciOiJRVUVSWVNUUklORyIsIl94bGZuLlJBTksuQVZHIjoiUkFOSy5BVkciLCJfeGxmbi5SQU5LLkVRIjoiUkFOSy5FUSIsIl94bGZu'@;
put 'LlJSSSI6IlJSSSIsIl94bGZuLlNFQyI6IlNFQyIsIl94bGZuLlNFQ0giOiJTRUNIIiwiX3hsZm4uU0hFRVQiOiJTSEVFVCIsIl94bGZuLlNIRUVUUyI6IlNIRUVUUyIsIl94bGZuLlNLRVcuUCI6IlNLRVcuUCIsIl94bGZuLlNUREVWLlAiOiJTVERFVi5QIiwiX3hsZm4uU1RERVYuUyI6IlNU'@;
put 'REVWLlMiLCJfeGxmbi5TVU1JRlMiOiJTVU1JRlMiLCJfeGxmbi5TV0lUQ0giOiJTV0lUQ0giLCJfeGxmbi5ULkRJU1QiOiJULkRJU1QiLCJfeGxmbi5ULkRJU1QuMlQiOiJULkRJU1QuMlQiLCJfeGxmbi5ULkRJU1QuUlQiOiJULkRJU1QuUlQiLCJfeGxmbi5ULklOViI6IlQuSU5WIiwiX3hs'@;
put 'Zm4uVC5JTlYuMlQiOiJULklOVi4yVCIsIl94bGZuLlQuVEVTVCI6IlQuVEVTVCIsIl94bGZuLlRFWFRKT0lOIjoiVEVYVEpPSU4iLCJfeGxmbi5VTklDSEFSIjoiVU5JQ0hBUiIsIl94bGZuLlVOSUNPREUiOiJVTklDT0RFIiwiX3hsZm4uVkFSLlAiOiJWQVIuUCIsIl94bGZuLlZBUi5TIjoi'@;
put 'VkFSLlMiLCJfeGxmbi5XRUJTRVJWSUNFIjoiV0VCU0VSVklDRSIsIl94bGZuLldFSUJVTEwuRElTVCI6IldFSUJVTEwuRElTVCIsIl94bGZuLldPUktEQVkuSU5UTCI6IldPUktEQVkuSU5UTCIsIl94bGZuLlhPUiI6IlhPUiIsIl94bGZuLlouVEVTVCI6IlouVEVTVCJ9O2Z1bmN0aW9uIGxT'@;
put 'KHkpe3JldHVybiJvZjoiPT15LnNsaWNlKDAsMykmJih5PXkuc2xpY2UoMykpLDYxPT15LmNoYXJDb2RlQXQoMCkmJjYxPT0oeT15LnNsaWNlKDEpKS5jaGFyQ29kZUF0KDApJiYoeT15LnNsaWNlKDEpKSwoeT0oeT0oeT15LnJlcGxhY2UoL0NPTVwuTUlDUk9TT0ZUXC4vZywiIikpLnJlcGxh'@;
put 'Y2UoL1xbKCg/OlwuW0EtWl0rWzAtOV0rKSg/OjpcLltBLVpdK1swLTldKyk/KVxdL2csZnVuY3Rpb24oUCxMKXtyZXR1cm4gTC5yZXBsYWNlKC9cLi9nLCIiKX0pKS5yZXBsYWNlKC9cWy4oI1tBLVpdKls/IV0pXF0vZywiJDEiKSkucmVwbGFjZSgvWzt+XS9nLCIsIikucmVwbGFjZSgvXHwv'@;
put 'ZywiOyIpfWZ1bmN0aW9uIGNTKHkpe3JldHVybigib2Y6PSIreS5yZXBsYWNlKHE5LCIkMVsuJDIkMyQ0JDVdIikucmVwbGFjZSgvXF06XFsvZywiOiIpKS5yZXBsYWNlKC87L2csInwiKS5yZXBsYWNlKC8sL2csIjsiKX1mdW5jdGlvbiB5dih5KXt2YXIgUD15LnNwbGl0KCI6Iik7cmV0dXJu'@;
put 'W1BbMF0uc3BsaXQoIi4iKVswXSxQWzBdLnNwbGl0KCIuIilbMV0rKFAubGVuZ3RoPjE/IjoiKyhQWzFdLnNwbGl0KCIuIilbMV18fFBbMV0uc3BsaXQoIi4iKVswXSk6IiIpXX1mdW5jdGlvbiB1Uyh5KXtyZXR1cm4geS5yZXBsYWNlKC9cLi8sIiEiKX12YXIgZjY9e30sWjM9e307SGkuV1M9'@;
put 'WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL29mZmljZURvY3VtZW50L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0Il07dmFyIEswPXR5cGVvZiBN'@;
put 'YXA8InUiO2Z1bmN0aW9uIHd2KHksUCxMLFEpe3ZhciByZT0wLGdlPXkubGVuZ3RoO2lmKFEpe2lmKEswP1EuaGFzKFApOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChRLFApKWZvcih2YXIgX2U9SzA/US5nZXQoUCk6UVtQXTtyZTxfZS5sZW5ndGg7KytyZSlpZih5W19l'@;
put 'W3JlXV0udD09PVAmJigheVtfZVtyZV1dLnImJiFMfHx5W19lW3JlXV0ucj09TCkpcmV0dXJuIHkuQ291bnQrKyxfZVtyZV19ZWxzZSBmb3IoO3JlPGdlOysrcmUpaWYoeVtyZV0udD09PVAmJigheVtyZV0uciYmIUx8fHlbcmVdLnI9PUwpKXJldHVybiB5LkNvdW50KysscmU7cmV0dXJuIHlb'@;
put 'Z2VdPXt0OlAscjpMfSx5LkNvdW50KysseS5VbmlxdWUrKyxRJiYoSzA/KFEuaGFzKFApfHxRLnNldChQLFtdKSxRLmdldChQKS5wdXNoKGdlKSk6KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChRLFApfHwoUVtQXT1bXSksUVtQXS5wdXNoKGdlKSkpLGdlfWZ1bmN0aW9u'@;
put 'IFlkKHksUCl7dmFyIEw9e21pbjp5KzEsbWF4OnkrMX0sUT1wbDtpZighUClyZXR1cm4gUDt2YXIgcmU9LTE7cmV0dXJuIFAuYXV0byYmKEwuYmVzdEZpdD0xLFAuYmVzdHdpZHRoJiYocmU9UC5iZXN0d2lkdGgpLGRlbGV0ZSBQLmJlc3R3aWR0aCksbnVsbCE9UC53cHg/cmU9dGYoUC53cHgp'@;
put 'Om51bGwhPVAud2NoP3JlPVAud2NoOm51bGwhPVAud2lkdGgmJihMLmN1c3RvbVdpZHRoPTEpLHJlPi0xPyhMLndpZHRoPWpkKHJlKSxMLmN1c3RvbVdpZHRoPTEpOm51bGwhPVAud2lkdGgmJihMLndpZHRoPVAud2lkdGgpLFAuaGlkZGVuJiYoTC5oaWRkZW49ITApLEwuYmVzdEZpdCYmZGVs'@;
put 'ZXRlIEwuY3VzdG9tV2lkdGgscGw9USxudWxsIT1QLmxldmVsJiYoTC5vdXRsaW5lTGV2ZWw9TC5sZXZlbD1QLmxldmVsKSxudWxsIT1QLnN0eWxlJiYoTC5zdHlsZT1QLnN0eWxlKSxMfWZ1bmN0aW9uIE5pKHksUCxMKXt2YXIgUT1Xcyh5WyIhcmVmIl0pLHJlPTAsZ2U9eVsiIW1lcmdlcyJd'@;
put 'fHxbXSxfZT1BcnJheS5pc0FycmF5KHkpO2U6Zm9yKHZhciB2ZT0wO3ZlPD1RLmUucjsrK3ZlKXtmb3IodmFyIFNlPTA7U2U8Z2UubGVuZ3RoOysrU2UpaWYoZ2VbU2VdLnMucjw9dmUmJnZlPD1nZVtTZV0uZS5yJiZnZVtTZV0ucy5jPD1MJiZMPD1nZVtTZV0uZS5jKWNvbnRpbnVlIGU7dmFy'@;
put 'IEhlPV9lPyh5W3ZlXXx8W10pW0xdOnlbZGkoe3I6dmUsYzpMfSldO2lmKEhlKXt2YXIgQmU9MTtpZihIZS5zJiYoQmU9Vm0oSGUucykvTm0uQ2FsaWJyaVsxMl18fDEpLEhlLncpcmU9TWF0aC5tYXgocmUsSGUudy5sZW5ndGgqQmUpO2Vsc2Ugc3dpdGNoKEhlLnQpe2Nhc2UiYiI6Y2FzZSJl'@;
put 'IjpyZT1NYXRoLm1heChyZSw1KkJlKTticmVhaztjYXNlInMiOnJlPU1hdGgubWF4KHJlLEhlLnYubGVuZ3RoKkJlKjEuMnwwKTticmVhaztjYXNlIm4iOnJtKEhlLEhlLnYpLHJlPU1hdGgubWF4KHJlLFN0cmluZyhIZS53fHxIZS52KS5sZW5ndGgqQmUpO2JyZWFrO2Nhc2UiZCI6cmU9TWF0'@;
put 'aC5tYXgocmUsOCpCZSl9fX1yZTwxJiYocmU9MSksUC5iZXN0d2lkdGg9cmV9ZnVuY3Rpb24gZGYoeSxQKXtpZih5KXt2YXIgTD1bLjcsLjcsLjc1LC43NSwuMywuM107InhsbWwiPT1QJiYoTD1bMSwxLDEsMSwuNSwuNV0pLG51bGw9PXkubGVmdCYmKHkubGVmdD1MWzBdKSxudWxsPT15LnJp'@;
put 'Z2h0JiYoeS5yaWdodD1MWzFdKSxudWxsPT15LnRvcCYmKHkudG9wPUxbMl0pLG51bGw9PXkuYm90dG9tJiYoeS5ib3R0b209TFszXSksbnVsbD09eS5oZWFkZXImJih5LmhlYWRlcj1MWzRdKSxudWxsPT15LmZvb3RlciYmKHkuZm9vdGVyPUxbNV0pfX1mdW5jdGlvbiBGbyh5LFApe2Zvcih2'@;
put 'YXIgTD1sdChQKSxRPTA7UTx5Lmxlbmd0aDsrK1Epe3ZhciByZT0hMCxnZT15W1FdO2lmKGdlJiZMLmxlbmd0aD09bHQoZ2UpLmxlbmd0aCYmKEwuZm9yRWFjaChmdW5jdGlvbihfZSl7aWYocmUpe2lmKG51bGw9PT1QW19lXSE9KG51bGw9PT1nZVtfZV0pKXJldHVybiB2b2lkKHJlPSExKTtp'@;
put 'Zigib2JqZWN0Ij09dHlwZW9mIFBbX2VdKWlmKFsiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmluZGV4T2YoX2UpPi0xKXtpZigkMChQW19lXSxnZVtfZV0pKXJldHVybiB2b2lkKHJlPSExKX1lbHNle2lmKCEoWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5pbmRleE9mKF9l'@;
put 'KT4tMSkpcmV0dXJuIHZvaWQocmU9ITEpO2lmKFBtKFBbX2VdLGdlW19lXSkpcmV0dXJuIHZvaWQocmU9ITEpfWlmKFBbX2VdIT1nZVtfZV0pcmV0dXJuIHZvaWQocmU9ITEpfX0pLHJlKSlyZXR1cm4gUX1yZXR1cm4geVt5Lmxlbmd0aF09b24oUCkseS5sZW5ndGgtMX1mdW5jdGlvbiBndSh5'@;
put 'LFAsTCxRKXt2YXIgcmU9US5yZXZzc2ZbbnVsbCE9TC56P0wuejoiR2VuZXJhbCJdLGdlPTYwLF9lPXkubGVuZ3RoO2lmKG51bGw9PXJlJiZRLnNzZilmb3IoO2dlPDM5MjsrK2dlKWlmKG51bGw9PVEuc3NmW2dlXSl7dy5sb2FkKEwueixnZSksUS5zc2ZbZ2VdPUwueixRLnJldnNzZltMLnpd'@;
put 'PXJlPWdlO2JyZWFrfXZhciB2ZT0wLFNlPTAsSGU9MCxCZT0wO2lmKFEuY2VsbFN0eWxlcyl7aWYoTC5zKXtpZihRLkZvbnRzKXtMLnMuY29sb3J8fChMLnMuY29sb3I9e3RoZW1lOjEscmdiOiIwMDAwMDAifSk7Zm9yKHZhciBHZT0oTC5zLmJvbGQ/MTowKXwoTC5zLml0YWxpYz8yOjApfChM'@;
put 'LnMuc3RyaWtlPzQ6MCl8KEwucy5zaGFkb3c/ODowKTt2ZTxRLkZvbnRzLmxlbmd0aDsrK3ZlKXt2YXIgbnQ9US5Gb250c1t2ZV07aWYobnVsbD09bnQuZm9udGhhc2gmJihudC5mb250aGFzaD0obnQuYm9sZD8xOjApfChudC5pdGFsaWM/MjowKXwobnQuc3RyaWtlPzQ6MCl8KG50LnNoYWRv'@;
put 'dz84OjApKSwhKEdlIT1udC5mb250aGFzaHx8ISFMLnMuY29sb3IhPSEhbnQuY29sb3J8fEwucy52YWxpZ24hPW50LnZhbGlnbnx8KEwucy5zenx8bnQuc3opJiYoTC5zLnN6fHwxMikhPShudC5zenx8MTIpfHxMLnMubmFtZSYmTC5zLm5hbWUhPW50Lm5hbWV8fChMLnMudW5kZXJsaW5lfHww'@;
put 'KSE9KG50LnVuZGVybGluZXx8MCl8fEwucy5jb2xvciYmJDAoTC5zLmNvbG9yLG50LmNvbG9yKSkpYnJlYWt9dmU9PVEuRm9udHMubGVuZ3RoJiYoUS5Gb250cy5wdXNoKHtzejpMLnMuc3p8fDEyLGNvbG9yOkwucy5jb2xvcnx8e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOkwucy5uYW1l'@;
put 'fHwiQ2FsaWJyaSIsZmFtaWx5Okwucy5mYW1pbHl8fDIsc2NoZW1lOkwucy5zY2hlbWUsYm9sZDpMLnMuYm9sZCxpdGFsaWM6TC5zLml0YWxpYyxzdHJpa2U6TC5zLnN0cmlrZSxzaGFkb3c6TC5zLnNoYWRvdyx2YWxpZ246TC5zLnZhbGlnbix1bmRlcmxpbmU6TC5zLnVuZGVybGluZX0pLDE9'@;
put 'PVEuRm9udHMubGVuZ3RoJiZaMShRLkZvbnRzWzBdKSl9aWYoUS5GaWxscyl7Zm9yKDtTZTxRLkZpbGxzLmxlbmd0aDsrK1NlKXt2YXIgZHQ9US5GaWxsc1tTZV07aWYoISFMLnMuc3RvcHM9PSEhZHQuc3RvcHMpe2lmKEwucy5zdG9wcyl7aWYoTC5zLmFuZ2xlIT1kdC5hbmdsZSljb250aW51'@;
put 'ZTt2YXIgQ3Q9ITA7aWYoTC5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3QsVHQpeyQwKGt0LGR0LnN0b3BzW1R0XSkmJihDdD0hMSksa3QudiE9ZHQuc3RvcHNbVHRdLnYmJihDdD0hMSl9KSwhQ3QpY29udGludWV9ZWxzZXtpZihudWxsPT1MLnMucGF0dGVyblR5cGUmJkwucy5mZ0NvbG9y'@;
put 'JiYoTC5zLnBhdHRlcm5UeXBlPSJzb2xpZCIpLG51bGw9PUwucy5wYXR0ZXJuVHlwZSlicmVhaztpZihMLnMucGF0dGVyblR5cGUhPWR0LnBhdHRlcm5UeXBlfHwkMChMLnMuZmdDb2xvcixkdC5mZ0NvbG9yKXx8JDAoTC5zLmJnQ29sb3IsZHQuYmdDb2xvcikpY29udGludWV9YnJlYWt9fWlm'@;
put 'KFNlPT1RLkZpbGxzLmxlbmd0aCl7dmFyIGN0PXt9O0wucy5zdG9wcz8obnVsbCE9TC5zLmFuZ2xlJiYoY3QuYW5nbGU9TC5zLmFuZ2xlKSxjdC5zdG9wcz1bXSxMLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihrdCl7Y3Quc3RvcHMucHVzaChvbihrdCkpfSkpOmN0PXtwYXR0ZXJuVHlwZTpM'@;
put 'LnMucGF0dGVyblR5cGUsZmdDb2xvcjpMLnMuZmdDb2xvcixiZ0NvbG9yOkwucy5iZ0NvbG9yfSxRLkZpbGxzLnB1c2goY3QpfX1pZihRLkJvcmRlcnMpe2Zvcig7SGU8US5Cb3JkZXJzLmxlbmd0aDsrK0hlKXt2YXIgYnQ9US5Cb3JkZXJzW0hlXSxGdD0idG9wIjtpZihMLnNbRnRdKXtpZigh'@;
put 'YnRbRnRdfHxMLnNbRnRdLnN0eWxlIT1idFtGdF0uc3R5bGV8fCQwKEwuc1tGdF0uY29sb3IsYnRbRnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0Z0XSljb250aW51ZTtpZihMLnNbRnQ9ImJvdHRvbSJdKXtpZighYnRbRnRdfHxMLnNbRnRdLnN0eWxlIT1idFtGdF0uc3R5'@;
put 'bGV8fCQwKEwuc1tGdF0uY29sb3IsYnRbRnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0Z0XSljb250aW51ZTtpZihMLnNbRnQ9ImxlZnQiXSl7aWYoIWJ0W0Z0XXx8TC5zW0Z0XS5zdHlsZSE9YnRbRnRdLnN0eWxlfHwkMChMLnNbRnRdLmNvbG9yLGJ0W0Z0XS5jb2xvcikp'@;
put 'Y29udGludWV9ZWxzZSBpZihudWxsIT1idFtGdF0pY29udGludWU7aWYoTC5zW0Z0PSJyaWdodCJdKXtpZighYnRbRnRdfHxMLnNbRnRdLnN0eWxlIT1idFtGdF0uc3R5bGV8fCQwKEwuc1tGdF0uY29sb3IsYnRbRnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0Z0XSljb250'@;
put 'aW51ZTticmVha31IZT09US5Cb3JkZXJzLmxlbmd0aCYmUS5Cb3JkZXJzLnB1c2goe3RvcDpMLnMudG9wJiZvbihMLnMudG9wKXx8dm9pZCAwLGJvdHRvbTpMLnMuYm90dG9tJiZvbihMLnMuYm90dG9tKXx8dm9pZCAwLGxlZnQ6TC5zLmxlZnQmJm9uKEwucy5sZWZ0KXx8dm9pZCAwLHJpZ2h0'@;
put 'Okwucy5yaWdodCYmb24oTC5zLnJpZ2h0KXx8dm9pZCAwfSl9aWYoUCYmTC5zLnN0eWxlJiYiTm9ybWFsIiE9PUwucy5zdHlsZSl7Zm9yKEJlPTE7QmU8UC5sZW5ndGgmJlBbQmVdLm5hbWUhPUwucy5zdHlsZTsrK0JlKTtCZT09UC5sZW5ndGgmJlAucHVzaCh7bmFtZTpMLnMuc3R5bGUsbnVt'@;
put 'Rm10SWQ6cmUsZm9udElkOnZlLGZpbGxJZDpTZSxib3JkZXJJZDpIZX0pfX1mb3IoZ2U9MDtnZSE9X2U7KytnZSlpZih5W2dlXS5udW1GbXRJZD09cmUmJnlbZ2VdLmZvbnRJZD09dmUmJnlbZ2VdLmZpbGxJZD09U2UmJnlbZ2VdLmJvcmRlcklkPT1IZSYmeVtnZV0ueGZJZD09QmUpe2lmKEwu'@;
put 'cyYmTC5zLmFsaWdubWVudCl7aWYoIXlbZ2VdLmFsaWdubWVudCljb250aW51ZTtpZihMLnMuYWxpZ25tZW50Lmhvcml6b250YWwhPXlbZ2VdLmFsaWdubWVudC5ob3Jpem9udGFsfHxMLnMuYWxpZ25tZW50LnZlcnRpY2FsIT15W2dlXS5hbGlnbm1lbnQudmVydGljYWx8fEwucy5hbGlnbm1l'@;
put 'bnQud3JhcFRleHQhPXlbZ2VdLmFsaWdubWVudC53cmFwVGV4dHx8TC5zLmFsaWdubWVudC5zaHJpbmtUb0ZpdCE9eVtnZV0uYWxpZ25tZW50LnNocmlua1RvRml0fHxMLnMuYWxpZ25tZW50LnRleHRSb3RhdGlvbiE9eVtnZV0uYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8TC5zLmFsaWdubWVu'@;
put 'dC5pbmRlbnQhPXlbZ2VdLmFsaWdubWVudC5pbmRlbnQpY29udGludWV9ZWxzZSBpZih5W2dlXS5hbGlnbm1lbnQpY29udGludWU7aWYoTC5zKXtpZighIUwucy5oaWRkZW49PSgheVtnZV0ucHJvdGVjdGlvbnx8IXlbZ2VdLnByb3RlY3Rpb24uaGlkZGVuKXx8ISFMLnMuZWRpdGFibGU9PSgh'@;
put 'eVtnZV0ucHJvdGVjdGlvbnx8IXlbZ2VdLnByb3RlY3Rpb24uZWRpdGFibGUpKWNvbnRpbnVlfWVsc2UgaWYoeVtnZV0ucHJvdGVjdGlvbiljb250aW51ZTtyZXR1cm4gZ2V9fWVsc2UgZm9yKGdlPTA7Z2UhPV9lOysrZ2UpaWYoeVtnZV0ubnVtRm10SWQ9PT1yZSlyZXR1cm4gZ2U7cmV0dXJu'@;
put 'IHlbX2VdPXtudW1GbXRJZDpyZSxmb250SWQ6dmUsZmlsbElkOlNlLGJvcmRlcklkOkhlLHhmSWQ6QmUsYXBwbHlOdW1iZXJGb3JtYXQ6MX0sdmU+MCYmKHlbX2VdLmFwcGx5Rm9udD0xKSxTZT4wJiYoeVtfZV0uYXBwbHlGaWxsPTEpLEhlPjAmJih5W19lXS5hcHBseUJvcmRlcj0xKSwhUCYm'@;
put 'TC5zJiZMLnMuc3R5bGUmJiJOb3JtYWwiIT1MLnMuc3R5bGUmJih5W19lXS5zdHlsZT1MLnMuc3R5bGUpLEwucyYmTC5zLmFsaWdubWVudCYmKHlbX2VdLmFsaWdubWVudD17fSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIndyYXBUZXh0Iiwic2hyaW5rVG9GaXQiLCJpbmRlbnQiLCJ0ZXh0'@;
put 'Um90YXRpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtudWxsIT1MLnMuYWxpZ25tZW50W2t0XSYmKHlbX2VdLmFsaWdubWVudFtrdF09TC5zLmFsaWdubWVudFtrdF0pfSkpLEwucyYmTC5zLmhpZGRlbiYmKHlbX2VdLnByb3RlY3Rpb258fCh5W19lXS5wcm90ZWN0aW9uPXt9KSx5W19lXS5w'@;
put 'cm90ZWN0aW9uLmhpZGRlbj0hMCksTC5zJiZMLnMuZWRpdGFibGUmJih5W19lXS5wcm90ZWN0aW9ufHwoeVtfZV0ucHJvdGVjdGlvbj17fSkseVtfZV0ucHJvdGVjdGlvbi5lZGl0YWJsZT0hMCksX2V9ZnVuY3Rpb24gcDYoeSxQLEwsUSxyZSxnZSxfZSx2ZSl7ImQiPT09eS50JiYic3RyaW5n'@;
put 'Ij09dHlwZW9mIHkudiYmKHkudj1IdCh5LnYpKTt0cnl7Z2UuY2VsbE5GJiYoeS56PXcuX3RhYmxlW1BdKX1jYXRjaChIZSl7aWYoZ2UuV1RGKXRocm93IEhlfWlmKCghZ2V8fCExIT09Z2UuY2VsbFRleHQpJiYieiIhPXkudCl0cnl7aWYobnVsbD09dy5fdGFibGVbUF0mJncubG9hZChkZVtQ'@;
put 'XXx8IkdlbmVyYWwiLFApLCJlIj09PXkudCl5Lnc9eS53fHxRb1t5LnZdO2Vsc2UgaWYoMD09PVApaWYoIm4iPT09eS50KXkudz0oMHx5LnYpPT09eS52P3cuX2dlbmVyYWxfaW50KHkudik6dy5fZ2VuZXJhbF9udW0oeS52KTtlbHNlIGlmKCJkIj09PXkudCl7dmFyIFNlPVVlKHkudik7eS53'@;
put 'PSgwfFNlKT09PVNlP3cuX2dlbmVyYWxfaW50KFNlKTp3Ll9nZW5lcmFsX251bShTZSl9ZWxzZXtpZih2b2lkIDA9PT15LnYpcmV0dXJuIiI7eS53PXcuX2dlbmVyYWwoeS52LFozKX1lbHNlIHkudz13LmZvcm1hdChQLCJkIj09PXkudD9VZSh5LnYpOnkudixaMyl9Y2F0Y2goSGUpe2lmKGdl'@;
put 'LldURil0aHJvdyBIZX1pZihnZS5jZWxsU3R5bGVzJiZ2ZSl7aWYoeS5zPXt9LG51bGwhPUwmJnZlLkZpbGxzKXRyeXtVdCh5LnMsdmUuRmlsbHNbTF0pfWNhdGNoKEhlKXtpZihnZS5XVEYpdGhyb3cgSGV9aWYobnVsbCE9USYmdmUuRm9udHMpdHJ5e1V0KHkucyx2ZS5Gb250c1tRXSl9Y2F0'@;
put 'Y2goSGUpe2lmKGdlLldURil0aHJvdyBIZX1pZihudWxsIT1yZSYmdmUuQm9yZGVycyl0cnl7VXQoeS5zLHZlLkJvcmRlcnNbcmVdKX1jYXRjaChIZSl7aWYoZ2UuV1RGKXRocm93IEhlfX19ZnVuY3Rpb24gczUoeSxQLEwpe2lmKHkmJnlbIiFyZWYiXSl7dmFyIFE9T2koeVsiIXJlZiJdKTtp'@;
put 'ZihRLmUuYzxRLnMuY3x8US5lLnI8US5zLnIpdGhyb3cgbmV3IEVycm9yKCJCYWQgcmFuZ2UgKCIrTCsiKTogIit5WyIhcmVmIl0pfX12YXIgQ3Y9LzwoPzpcdzopP21lcmdlQ2VsbCByZWY9IltBLVowLTk6XSsiXHMqW1wvXT8+L2csYTU9LzwoPzpcdys6KT9zaGVldERhdGFbXj5dKj4oW1xz'@;
put 'XFNdKik8XC8oPzpcdys6KT9zaGVldERhdGE+LyxkUz0vPCg/Olx3Oik/aHlwZXJsaW5rIFtePl0qPi9nbSwkWj0vIihcdyo6XHcqKSIvLFN2PS88KD86XHc6KT9jb2xcYltePl0qW1wvXT8+L2csaGY9LzwoPzpcdzopP2NvbnRyb2xcYltePl0qW1wvXT8+L2csZzY9LzwoPzpcdzopP2F1dG9G'@;
put 'aWx0ZXJbXj5dKihbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2F1dG9GaWx0ZXIpPi9nLE12PS88KD86XHc6KT9wYWdlTWFyZ2luc1tePl0qXC8+L2cseHY9LzwoPzpcdzopP3NoZWV0UHJcYig/OltePmEtel1bXj5dKik/XC8+LyxUST0vPCg/Olx3Oik/c2hlZXRQcm90ZWN0aW9uXGIoPzpb'@;
put 'Xj5hLXpdW14+XSopP1wvPi8sREk9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+LyxJST0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdzKT4vLGhTPS88KD86XHcr'@;
put 'Oik/ZGF0YVZhbGlkYXRpb25zW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/ZGF0YVZhbGlkYXRpb25zKT4vLG02PS88KD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nXGJbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRp'@;
put 'bmcpPi9nLGZmPS88KD86XHc6KT9zaGVldEZvcm1hdFByW14+XSpcLz4vLEV2PS88KD86XHcrOik/dGFibGVQYXJ0cy4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGFibGVQYXJ0cz4vLFczPS88KD86XHc6KT9wYWdlU2V0dXBbXj5dKlwvPi8sV2Q9LzwoPzpcdzopP3Jvd0JyZWFrc1tePl0q'@;
put 'KD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9yb3dCcmVha3MpPi8sZlM9LzwoPzpcdzopP2NvbEJyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9jb2xCcmVha3MpPi8scVo9LzwoPzpcdzopP2hlYWRlckZvb3RlcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86'@;
put 'XHc6KT9oZWFkZXJGb290ZXIpPi8sTEk9LzwoPzpcdzopP3ByaW50T3B0aW9uc1xiW14+XC9dKlwvPi87dmFyIHBTPS88KD86XHc6KT90YWJsZVBhcnRcYlteXC8+XSpbXC9dPz4vZztmdW5jdGlvbiB2Nih5LFAsTCxRKXt2YXIgcmU9bG4oeSk7TC5TaGVldHNbUV18fChMLlNoZWV0c1tRXT17'@;
put 'fSkscmUuY29kZU5hbWUmJihMLlNoZWV0c1tRXS5Db2RlTmFtZT1yZS5jb2RlTmFtZSl9dmFyIF82PS88KD86XHc6KT90YWJDb2xvcltePl0qW1wvXT8+LyxtUz0vPCg/Olx3Oik/cGFnZVNldFVwUHJbXj5dKltcL10/Pi8sdlM9LzwoPzpcdzopP291dGxpbmVQcltePl0qW1wvXT8+LyxDZT17'@;
put 'ZGlzcGxheWVkOiJhc0Rpc3BsYXllZCIsZW5kOiJhdEVuZCIsbm9uZToibm9uZSJ9LGt2PWJlKENlKSxSST17ZGlzcGxheWVkOiJkaXNwbGF5ZWQiLG5vbmU6ImJsYW5rIixkYXNoOiJkYXNoIiwibi9hIjoiTkEifSxiUz1iZShSSSksQ1M9LzwoPzpcdzopP2Jya1tePl0qXC8+L2csQXY9WyJv'@;
put 'YmplY3RzIiwic2NlbmFyaW9zIiwic2VsZWN0TG9ja2VkQ2VsbHMiLCJzZWxlY3RVbmxvY2tlZENlbGxzIl0sVHY9WyJmb3JtYXRDb2x1bW5zIiwiZm9ybWF0Um93cyIsImZvcm1hdENlbGxzIiwiaW5zZXJ0Q29sdW1ucyIsImluc2VydFJvd3MiLCJpbnNlcnRIeXBlcmxpbmtzIiwiZGVsZXRl'@;
put 'Q29sdW1ucyIsImRlbGV0ZVJvd3MiLCJzb3J0IiwiYXV0b0ZpbHRlciIsInBpdm90VGFibGVzIl07ZnVuY3Rpb24geFMoeSl7dmFyIFA9e307cmV0dXJuWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3lbTF0mJihQ'@;
put 'W0xdPXBhcnNlRmxvYXQoeVtMXSkpfSksUH12YXIgeTY9e0N1c3RvbToiY3VzdG9tIixEYXRlOiJkYXRlIixUaW1lOiJ0aW1lIixMZW5ndGg6InRleHRMZW5ndGgiLExpc3Q6Imxpc3QiLERlY2ltYWw6ImRlY2ltYWwiLFdob2xlOiJ3aG9sZSIsQW55OiJub25lIn0sa1M9YmUoeTYpLCQzPXtJ'@;
put 'TjoiYmV0d2VlbiIsT1Q6Im5vdEJldHdlZW4iLEVROiJlcXVhbCIsTkU6Im5vdEVxdWFsIixHVDoiZ3JlYXRlclRoYW4iLExUOiJsZXNzVGhhbiIsR0U6ImdyZWF0ZXJUaGFuT3JFcXVhbCIsTEU6Imxlc3NUaGFuT3JFcXVhbCJ9LEFTPWJlKCQzKTtmdW5jdGlvbiBUUyh5LFAsTCl7dmFyIFE9'@;
put 'W10scmU9e30sZ2U9IiIsX2U9ITEsdmU9MCxTZT0wO3JldHVybiB5LnJlcGxhY2UoJHQsZnVuY3Rpb24oSGUsQmUpe3ZhciBHZT1sbihIZSk7c3dpdGNoKGpuKEdlWzBdKSl7Y2FzZSI8ZGF0YVZhbGlkYXRpb25zIjpjYXNlIjxkYXRhVmFsaWRhdGlvbnM+IjpjYXNlIjwvZGF0YVZhbGlkYXRp'@;
put 'b25zPiI6YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24iOnJlPXt0OmtTW0dlLnR5cGV8fCJub25lIl0scmVmOihnZT1HZS5zcXJlZik/Z2UuaW5kZXhPZigiICIpPi0xP2dlOk9pKGdlKToiIn0sR2Uub3BlcmF0b3ImJihyZS5vcD1BU1tHZS5vcGVyYXRvcl0pLHJlLmJsYW5rPSEhR2UuYWxs'@;
put 'b3dCbGFuayYmeXIoR2UuYWxsb3dCbGFuayksKCFHZS5zaG93SW5wdXRNZXNzYWdlfHwheXIoR2Uuc2hvd0lucHV0TWVzc2FnZSkpJiYocmUuaW5wdXQ9ITEpLEdlLnByb21wdFRpdGxlJiYoKHJlLmlucHV0fHwocmUuaW5wdXQ9e30pKS50aXRsZT14cihHZS5wcm9tcHRUaXRsZSkpLEdlLnBy'@;
put 'b21wdCYmKChyZS5pbnB1dHx8KHJlLmlucHV0PXt9KSkubWVzc2FnZT14cihHZS5wcm9tcHQpKSwoIUdlLnNob3dFcnJvck1lc3NhZ2V8fCF5cihHZS5zaG93RXJyb3JNZXNzYWdlKSkmJihyZS5lcnJvcj0hMSksR2UuZXJyb3JUaXRsZSYmKChyZS5lcnJvcnx8KHJlLmVycm9yPXt9KSkudGl0'@;
put 'bGU9eHIoR2UuZXJyb3JUaXRsZSkpLEdlLmVycm9yJiYoKHJlLmVycm9yfHwocmUuZXJyb3I9e30pKS5tZXNzYWdlPXhyKEdlLmVycm9yKSkscmUuZXJyb3I/cmUuZXJyb3Iuc3R5bGU9R2UuZXJyb3JTdHlsZXx8InN0b3AiOkdlLmVycm9yU3R5bGUmJihyZS5lcnJvcj17c3R5bGU6R2UuZXJy'@;
put 'b3JTdHlsZX0pLHJlLnQmJlEucHVzaChyZSk7YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24vPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9uPiI6YnJlYWs7Y2FzZSI8c3FyZWY+IjpTZT1CZStIZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6Z2U9eS5zbGljZShTZSxCZSkscmUucmVmPWdl'@;
put 'P2dlLmluZGV4T2YoIiAiKT4tMT9nZTpPaShnZSk6IiI7YnJlYWs7Y2FzZSI8Zj4iOmNhc2UiPGZvcm11bGExIjpjYXNlIjxmb3JtdWxhMT4iOmNhc2UiPGZvcm11bGEyIjpjYXNlIjxmb3JtdWxhMj4iOnZlPUJlK0hlLmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYTE+IjpjYXNlIjwvZm9y'@;
put 'bXVsYTI+IjppZihMKWJyZWFrO2Nhc2UiPC9mPiI6dmFyIG50PXhyKFBpKHkuc2xpY2UodmUsQmUpKSk7c3dpdGNoKHJlLnQpe2Nhc2UiTGlzdCI6aWYocmUubHx8cmUuZilicmVhaztpZigzND09bnQuY2hhckNvZGVBdCgwKSl7cmUubD1udC5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2JyZWFr'@;
put 'fWNhc2UiQ3VzdG9tIjpudWxsPT1yZS5mJiYocmUuZj1udCk7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIlRpbWUiOmNhc2UiV2hvbGUiOnJlLm9wfHwocmUub3A9IklOIiksbnVsbD09cmUudj9yZS52PWlzTmFOKCtudCk/bnQ6K250OihyZS5taW49'@;
put 'cmUudixyZS5tYXg9aXNOYU4oK250KT9udDorbnQsZGVsZXRlIHJlLnYpfWJyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoUCYmUC5X'@;
put 'VEYmJiFfZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0dlWzBdKyIgaW4gZGF0YSB2YWxpZGF0aW9uIil9cmV0dXJuIEhlfSksUX12YXIgUnY9e0lOOiJjb250YWluc1RleHQiLE9UOiJub3RDb250YWluc1RleHQiLFNUOiJiZWdpbnNXaXRoIixORDoiZW5kc1dpdGgifSxEUz1i'@;
put 'ZShSdiksSVM9e0xNOiJsYXN0TW9udGgiLExTOiJsYXN0N0RheXMiLExXOiJsYXN0V2VlayIsTk06Im5leHRNb250aCIsTlc6Im5leHRXZWVrIixUTToidGhpc01vbnRoIixUVzoidGhpc1dlZWsiLFREOiJ0b2RheSIsVE86InRvbW9ycm93IixZUzoieWVzdGVyZGF5In0sVkk9YmUoSVMpO2Z1'@;
put 'bmN0aW9uIHc2KHkpe3ZhciBQPXt9O3JldHVybiBudWxsIT15LnZhbCYmKGlzTmFOKCt5LnZhbCk/UC5mPXkudmFsOlAudj0reS52YWwpLFAudD15LnR5cGUsUH1mdW5jdGlvbiBwZih5KXtyZXR1cm4gU3IoImNmdm8iLG51bGwse3R5cGU6eS50LHZhbDpudWxsIT15LnY/eS52OkhyKHkuZil9'@;
put 'KX1mdW5jdGlvbiBDNih5LFAsTCxRKXt2YXIgcmU9dzYoeSk7cmV0dXJuIHJlLmNvbG9yPVUyKFAsTCxRKSxyZX1mdW5jdGlvbiBMUyh5LFAsTCxRLHJlKXt2YXIgZ2U9KHkubWF0Y2goL3NxcmVmPSIoW1x3OiQgXSopIi8pfHxbXSlbMV07cmV0dXJuIGZ1bmN0aW9uIEJJKHksUCxMLFEscmUs'@;
put 'Z2Upe3ZhciBfZT0hMSx2ZT1bXSxTZT17ZjpbXX0sSGU9MCxCZT0wLEdlPXtjZnZvczpbXSxjb2xvcnM6W119LG50PXt9LGR0PS0xLEN0PTAsY3Q9IiI7cmV0dXJuIHkucmVwbGFjZSgkdCxmdW5jdGlvbihidCxGdCl7dmFyIGt0PWxuKGJ0KTtzd2l0Y2goam4oa3RbMF0pKXtjYXNlIjxjb25k'@;
put 'aXRpb25hbEZvcm1hdHRpbmciOmNhc2UiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+IjpicmVhaztjYXNlIjxjZlJ1bGUiOmNhc2UiPGNmUnVsZT4iOmlmKEJlPUZ0LG50PWt0LFNlPXtyZWY6UCxmOltdfSwhYnQubWF0Y2goL1wvPi8pKWJyZWFrO2Nhc2UiPC9jZlJ1bGU+Ijpzd2l0Y2gobnQu'@;
put 'ZHhmSWQmJnJlJiZyZS5EWEYmJihTZS5zPXJlLkRYRlsrbnQuZHhmSWRdKSxudC50eXBlKXtjYXNlImR1cGxpY2F0ZVZhbHVlcyI6U2UudD0iZHVwIjticmVhaztjYXNlInVuaXF1ZVZhbHVlcyI6U2UudD0idW5pcXVlIjticmVhaztjYXNlImNvbnRhaW5zQmxhbmtzIjpTZS50PSJibGFuayIs'@;
put 'U2Uudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjpTZS50PSJibGFuayIsU2Uudj0hMTticmVhaztjYXNlImNvbnRhaW5zRXJyb3JzIjpTZS50PSJlcnJvciIsU2Uudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjpTZS50PSJlcnJvciIsU2Uudj0hMTticmVhaztj'@;
put 'YXNlImNlbGxJcyI6c3dpdGNoKG50Lm9wZXJhdG9yKXtjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWlucyI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihTZS50PSJ0ZXh0IixTZS5vcD1EU1tudC5vcGVyYXRvcl0sbnVsbD09bnQudGV4dCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkNGIFRleHQgUnVsZSAiK1NlLm9wKyIgbWlzc2luZyB0ZXh0Iik7U2Uudj1udC50ZXh0LFNlLmY9U2UuZlswXSxudWxsPT1TZS5mJiZkZWxldGUgU2UuZjticmVhaztkZWZhdWx0OlNlLnQ9InZhbCIsU2Uub3A9QVNbbnQub3BlcmF0b3JdLDE9PVNlLmYubGVuZ3RoP2lzTmFOKCtTZS5m'@;
put 'WzBdKT9TZS5mPVNlLmZbMF06KFNlLnY9K1NlLmZbMF0sZGVsZXRlIFNlLmYpOihTZS5taW49aXNOYU4oK1NlLmZbMF0pP1NlLmZbMF06K1NlLmZbMF0sU2UubWF4PWlzTmFOKCtTZS5mWzFdKT9TZS5mWzFdOitTZS5mWzFdLGRlbGV0ZSBTZS5mKX1icmVhaztjYXNlImV4cHJlc3Npb24iOlNl'@;
put 'LnQ9ImZvcm11bGEiLFNlLmY9U2UuZlswXTticmVhaztjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWluc1RleHQiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoU2UudD0idGV4dCIsU2Uub3A9RFNbbnQudHlwZV0sbnVsbD09bnQudGV4dCYmU2UuZi5sZW5ndGg8'@;
put 'Mil0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVsZSAiK1NlLm9wKyIgbWlzc2luZyB0ZXh0Iik7U2Uudj1udWxsIT1udC50ZXh0P250LnRleHQ6U2UuZlsxXS5tYXRjaCgvIi4qIi8pP1NlLmZbMV0uc2xpY2UoMSwtMSk6U2UuZlsxXSxTZS5mPVNlLmZbMF0sbnVsbD09U2UuZiYmZGVsZXRl'@;
put 'IFNlLmY7YnJlYWs7Y2FzZSJjb2xvclNjYWxlIjppZihTZS50PSJzY2FsZSIsIVNlLmNvbG9yU2NhbGUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNvbG9yU2NhbGUiKTtTZS5jbWluPUM2KChHZT1TZS5jb2xvclNjYWxlKS5jZnZvc1swXSxHZS5jb2xvcnNbMF0scmUsUSksMz09R2UuY2Z2'@;
put 'b3MubGVuZ3RoJiYoU2UuY21pZD1DNihHZS5jZnZvc1sxXSxHZS5jb2xvcnNbMV0scmUsUSkpLFNlLmNtYXg9QzYoR2UuY2Z2b3NbR2UuY2Z2b3MubGVuZ3RoLTFdLEdlLmNvbG9yc1tHZS5jZnZvcy5sZW5ndGgtMV0scmUsUSk7YnJlYWs7Y2FzZSJkYXRhQmFyIjppZihTZS50PSJiYXIiLCFT'@;
put 'ZS5kYXRhQmFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBkYXRhQmFyIik7KEdlPVNlLmRhdGFCYXIpLmNvbG9yc1swXSYmKFNlLmNvbG9yPVUyKEdlLmNvbG9yc1swXSxyZSxRKSksU2UuY21pbj13NihHZS5jZnZvc1swXSksU2UuY21heD13NihHZS5jZnZvc1sxXSk7YnJlYWs7Y2FzZSJp'@;
put 'Y29uU2V0IjppZihTZS50PSJpY29uIiwhU2UuaWNvblNldCl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgaWNvblNldCIpO1NlLnRocmVzaD0oR2U9U2UuaWNvblNldCkuY2Z2b3MubWFwKGZ1bmN0aW9uKFR0KXtyZXR1cm4gdzYoVHQpfSksU2Uudj1HZS50YWcmJkdlLnRhZy5pY29uU2V0fHwi'@;
put 'M1RyYWZmaWNMaWdodHMxIixTZS5yZXY9eXIoR2UudGFnLnJldmVyc2V8fCJmYWxzZSIpLFNlLnBjdD15cihHZS50YWcucGVyY2VudHx8InRydWUiKSxTZS5oaWRkZW49IXlyKEdlLnRhZy5zaG93VmFsdWV8fCJ0cnVlIik7YnJlYWs7Y2FzZSJ0aW1lUGVyaW9kIjpTZS50PSJkYXRlIixTZS5v'@;
put 'cD1WSVtudC50aW1lUGVyaW9kXTticmVhaztjYXNlImFib3ZlQXZlcmFnZSI6U2UudD0iYXZnIixTZS5vcD0iMCI9PW50LmFib3ZlQXZlcmFnZT8iTCI6IkciLFNlLm9wKz1udC5zdGREZXY/bnQuc3RkRGV2OnlyKG50LmVxdWFsQXZlcmFnZXx8IjAiKT8iRSI6IlQiO2JyZWFrO2Nhc2UidG9w'@;
put 'MTAiOlNlLnQ9InJhbmsiLFNlLm9wPSh5cihudC5ib3R0b218fCIwIik/IkIiOiJUIikrKHlyKG50LnBlcmNlbnR8fCIwIik/IlAiOiJWIiksU2Uudj0rbnQucmFuazticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkIENGIFR5cGUgIitudC50eXBlfWlmKGRlbGV0ZSBTZS5jb2xvclNj'@;
put 'YWxlLGRlbGV0ZSBTZS5kYXRhQmFyLGRlbGV0ZSBTZS5pY29uU2V0LCFTZS50KXRocm93IGNvbnNvbGUubG9nKHkuc2xpY2UoQmUsRnQrYnQubGVuZ3RoKSksImJhZCBDRiBydWxlIjtudWxsIT1TZS5mJiYhU2UuZi5sZW5ndGgmJmRlbGV0ZSBTZS5mLFNlLmRlbHx8dmUucHVzaChTZSk7YnJl'@;
put 'YWs7Y2FzZSI8Zm9ybXVsYSI6Y2FzZSI8Zm9ybXVsYT4iOkhlPUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYT4iOlNlLmYucHVzaCh4cih5LnNsaWNlKEhlLEZ0KSkpO2JyZWFrO2Nhc2UiPGYiOmNhc2UiPGY+IjpIZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Y+IjpTZS5m'@;
put 'LnB1c2goeHIoeS5zbGljZShIZSxGdCkpKTticmVhaztjYXNlIjxzcXJlZj4iOkN0PUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpjdD15LnNsaWNlKEN0LEZ0KSxQPWN0P2N0LmluZGV4T2YoIiAiKT4tMT9jdDpPaShjdCk6IiIsU2UucmVmPVAsdmUuZm9yRWFjaChmdW5jdGlv'@;
put 'bihUdCl7VHQucmVmPVB9KTticmVhaztjYXNlIjxjb2xvclNjYWxlIjpjYXNlIjxjb2xvclNjYWxlPiI6Y2FzZSI8ZGF0YUJhciI6Y2FzZSI8ZGF0YUJhcj4iOmNhc2UiPGljb25TZXQiOmNhc2UiPGljb25TZXQ+IjpHZT17Y2Z2b3M6W10sY29sb3JzOltdLHRhZzprdH0sSGU9RnQrYnQubGVu'@;
put 'Z3RoO2JyZWFrO2Nhc2UiPC9jb2xvclNjYWxlPiI6U2UuY29sb3JTY2FsZT1HZTticmVhaztjYXNlIjwvZGF0YUJhcj4iOlNlLmRhdGFCYXI9R2U7YnJlYWs7Y2FzZSI8L2ljb25TZXQ+IjpTZS5pY29uU2V0PUdlO2JyZWFrO2Nhc2UiPGNmdm8iOmNhc2UiPGNmdm8vPiI6R2UuY2Z2b3MucHVz'@;
put 'aChrdCk7YnJlYWs7Y2FzZSI8L2Nmdm8+IjpicmVhaztjYXNlIjxjb2xvciI6R2UuY29sb3JzLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8'@;
put 'L2V4dD4iOl9lPSExO2JyZWFrO2Nhc2UiPG5lZ2F0aXZlRmlsbENvbG9yIjpjYXNlIjxheGlzQ29sb3IiOmNhc2UiPGJvcmRlckNvbG9yIjpjYXNlIjxuZWdhdGl2ZUJvcmRlckNvbG9yIjpjYXNlIjxjZkljb24iOlNlLmRlbD0hMDticmVhaztjYXNlIjxkeGY+IjpfZT0hMCxkdD1GdDticmVh'@;
put 'aztjYXNlIjwvZHhmPiI6X2U9ITEsU2Uucz14RCh5LnNsaWNlKGR0LEZ0K2J0Lmxlbmd0aCkscmUsUSxMKTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGKXtpZihnZSlicmVhaztpZighX2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitrdFswXSsiIGluIGNvbmRmbXQiKX19cmV0'@;
put 'dXJuIGJ0fSksdmV9KHksZ2UsUCxMLFEscmUpfXZhciB6ST0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+L2c7ZnVuY3Rpb24gYzUoeSxQKXt2YXIgTD0wLFE9MCxyZT0wLGdlPTA7aWYoIVB8fCFQLkNlbGxYZilyZXR1cm4gbnVsbDt2YXIgX2U9UC5DZWxsWGZbeV07'@;
put 'bnVsbCE9X2UmJihudWxsIT1fZS5udW1GbXRJZCYmKEw9X2UubnVtRm10SWQpLG51bGwhPV9lLmZpbGxJZCYmKFE9X2UuZmlsbElkKSxudWxsIT1fZS5mb250SWQmJihyZT1fZS5mb250SWQpLG51bGwhPV9lLmJvcmRlcklkJiYoZ2U9X2UuYm9yZGVySWQpKTt2YXIgdmU9e3Q6InoifTt0cnl7'@;
put 'cDYodmUsTCxRLHJlLGdlLHtXVEY6MSxjZWxsU3R5bGVzOiEwfSwwLFApfWNhdGNoe31yZXR1cm4gdmUuc31mdW5jdGlvbiBVSSh5LFAsTCxRKXtpZih2b2lkIDA9PT15LnYmJnZvaWQgMD09PXkuZiYmbnVsbD09eS5zJiYheS5jfHwieiI9PT15LnQmJiF5LmMmJiFRLnNoZWV0U3R1YnMpcmV0'@;
put 'dXJuIiI7dmFyIHJlPSIiLGdlPXkudCxfZT15LnY7aWYoInoiIT09eS50KXN3aXRjaCh5LnQpe2Nhc2UiYiI6cmU9eS52PyIxIjoiMCI7YnJlYWs7Y2FzZSJuIjpyZT0iIit5LnY7YnJlYWs7Y2FzZSJlIjpyZT1Rb1t5LnZdO2JyZWFrO2Nhc2UiZCI6USYmUS5jZWxsRGF0ZXM/cmU9SHQoeS52'@;
put 'LC0xKS50b0lTT1N0cmluZygpOigoeT1vbih5KSkudD0ibiIscmU9IiIrKHkudj1VZShIdCh5LnYpKSkpLHR5cGVvZiB5Lno+InUiJiYoeS56PXcuX3RhYmxlWzE0XSk7YnJlYWs7ZGVmYXVsdDpyZT15LnZ9dmFyIHZlPSJ6Ij09eS50PyIiOmZzKCJ2IixIcihyZSkpLFNlPXtyOlB9LEhlPVE/'@;
put 'Z3UoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZzLHksUSk6MDtzd2l0Y2goMCE9PUhlJiYoU2Uucz1IZSkseS50KXtjYXNlIm4iOmNhc2UieiI6YnJlYWs7Y2FzZSJkIjpTZS50PSJkIjticmVhaztjYXNlImIiOlNlLnQ9ImIiO2JyZWFrO2Nhc2UiZSI6U2UudD0iZSI7YnJlYWs7ZGVmYXVsdDpp'@;
put 'ZihudWxsPT15LnYpe2RlbGV0ZSB5LnQ7YnJlYWt9aWYoUSYmUS5ib29rU1NUKXt2ZT1mcygidiIsIiIrd3YoUS5TdHJpbmdzLHkudix5LlI/eS5yPUpoKHkuUik6bnVsbCxRLnJldlN0cmluZ3MpKSxTZS50PSJzIjticmVha31BcnJheS5pc0FycmF5KHkuUik/KHZlPSI8aXM+IitKaCh5LlIp'@;
put 'KyI8L2lzPiIsU2UudD0iaW5saW5lU3RyIik6U2UudD0ic3RyIn1pZih5LnQhPWdlJiYoeS50PWdlLHkudj1fZSkseS5mKXt2YXIgQmU9eS5GJiZ5LkYuc2xpY2UoMCxQLmxlbmd0aCk9PVA/e3Q6ImFycmF5IixyZWY6eS5GfTpudWxsO3ZlPVNyKCJmIixIcih5LmYpLEJlKSsobnVsbCE9eS52'@;
put 'P3ZlOiIiKX1yZXR1cm4geS5sJiZMWyIhbGlua3MiXS5wdXNoKFtQLHkubF0pLHkuYyYmTFsiIWNvbW1lbnRzIl0ucHVzaChbUCx5LmNdKSxTcigiYyIsdmUsU2UpfXZhciBaST1mdW5jdGlvbigpe3ZhciB5PS88KD86XHcrOik/Y1sgXC8+XS8sUD0vPFwvKD86XHcrOik/cm93Pi8sTD0vcj1b'@;
put 'IiddKFteIiddKilbIiddLyxRPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8scmU9L3JlZj1bIiddKFteIiddKilbIiddLyxnZT11bCgidiIpLF9lPXVsKCJmIik7cmV0dXJuIGZ1bmN0aW9uKFNlLEhlLEJlLEdlLG50LGR0LEN0KXtmb3IodmFyIHVuLHFuLGVyLHRy'@;
put 'LFFyLGN0PTAsYnQ9IiIsRnQ9W10sa3Q9W10sVHQ9MCxadD0wLHBuPTAsS249IiIsem49MCxrbj0wLFpuPTAsQnI9MCxvaT0wLGtpPTAsTGk9QXJyYXkuaXNBcnJheShDdC5DZWxsWGYpLHVyPVtdLEFuPVtdLHZyPUFycmF5LmlzQXJyYXkoQmUpLHJyPVtdLFNuPXt9LGdyPSExLENpPVNlLnNw'@;
put 'bGl0KFApLHpyPSEhR2Uuc2hlZXRTdHVicyxqaT0hIUdlLmNlbGxIVE1MLF9vPSEoITE9PT1HZS5jZWxsVGV4dCYmIUdlLmNlbGxORiYmIUdlLmNlbGxTdHlsZXMpLERpPTAsWW89Q2kubGVuZ3RoO0RpIT1ZbzsrK0RpKXt2YXIgbG89KGJ0PUNpW0RpXS50cmltKCkpLmxlbmd0aDtpZigwIT09'@;
put 'bG8pe3ZhciBBbz0wO2U6Zm9yKGN0PTA7Y3Q8bG87KytjdClzd2l0Y2goYnRbY3RdKXtjYXNlIj4iOmlmKCIvIiE9YnRbY3QtMV0peysrY3Q7YnJlYWsgZX1HZS5jZWxsU3R5bGVzJiZudWxsIT0ocW49bG4oYnQuc2xpY2UoQW8sY3QpLCEwKSkuciYmcGFyc2VJbnQocW4uciwxMCkmJih6bj1w'@;
put 'YXJzZUludChxbi5yLDEwKSxTbj17fSxncj0hMSxxbi5odCYmKGdyPSEwLFNuLmhwdD1wYXJzZUZsb2F0KHFuLmh0KSxTbi5ocHg9VTEoU24uaHB0KSkscW4uZHlEZXNjZW50JiYoZ3I9ITAsU24uZHlEZXNjZW50PXFuLmR5RGVzY2VudCksIjEiPT1xbi5oaWRkZW4mJihncj0hMCxTbi5oaWRk'@;
put 'ZW49ITApLG51bGwhPXFuLm91dGxpbmVMZXZlbCYmKGdyPSEwLFNuLmxldmVsPStxbi5vdXRsaW5lTGV2ZWwpLHFuLnMmJkN0JiZDdC5DZWxsWGYmJihncj0hMCxTbi5zPWM1KHFuLnMsQ3QpKSxnciYmKHJyW3puLTFdPVNuKSk7YnJlYWs7Y2FzZSI8IjpBbz1jdH1pZihBbz49Y3QpYnJlYWs7'@;
put 'aWYoem49bnVsbCE9KHFuPWxuKGJ0LnNsaWNlKEFvLGN0KSwhMCkpLnI/cGFyc2VJbnQocW4uciwxMCk6em4rMSxrbj0tMSwhKEdlLnNoZWV0Um93cyYmR2Uuc2hlZXRSb3dzPHpuKSl7R2Uubm9kaW18fChudC5zLnI+em4tMSYmKG50LnMucj16bi0xKSxudC5lLnI8em4tMSYmKG50LmUucj16'@;
put 'bi0xKSk7dmFyIHhvPXt0OiJyb3ciLHJvdzpbXSxSOnpuLTEsaWR4OkhlfTtHZS5jZWxsU3R5bGVzJiYoU249e30sZ3I9ITEscW4uaHQmJihncj0hMCxTbi5ocHQ9cGFyc2VGbG9hdChxbi5odCksU24uaHB4PVUxKFNuLmhwdCkpLHFuLmR5RGVzY2VudCYmKGdyPSEwLFNuLmR5RGVzY2VudD1x'@;
put 'bi5keURlc2NlbnQpLCIxIj09cW4uaGlkZGVuJiYoZ3I9ITAsU24uaGlkZGVuPSEwKSxudWxsIT1xbi5vdXRsaW5lTGV2ZWwmJihncj0hMCxTbi5sZXZlbD0rcW4ub3V0bGluZUxldmVsKSxxbi5zJiYoZ3I9ITAsU24ucz1jNShxbi5zLEN0KSksZ3ImJihHZS5jYWxsYmFjaz94by5wcm9wcz1T'@;
put 'bjpyclt6bi0xXT1TbikpLEZ0PWJ0LnNsaWNlKGN0KS5zcGxpdCh5KTtmb3IodmFyIGhpPTA7aGkhPUZ0Lmxlbmd0aCYmIjwiPT1GdFtoaV0udHJpbSgpLmNoYXJBdCgwKTsrK2hpKTtmb3IoRnQ9RnQuc2xpY2UoaGkpLGN0PTA7Y3QhPUZ0Lmxlbmd0aDsrK2N0KWlmKDAhPT0oYnQ9RnRbY3Rd'@;
put 'LnRyaW0oKSkubGVuZ3RoKXtpZihrdD1idC5tYXRjaChMKSxUdD1jdCxadD0wLHBuPTAsYnQ9IjxjICIrKCI8Ij09YnQuc2xpY2UoMCwxKT8iPiI6IiIpK2J0LG51bGwhPWt0JiYyPT09a3QubGVuZ3RoKXtmb3IoVHQ9MCxLbj1rdFsxXSxadD0wO1p0IT1Lbi5sZW5ndGgmJiEoKHBuPUtuLmNo'@;
put 'YXJDb2RlQXQoWnQpLTY0KTwxfHxwbj4yNik7KytadClUdD0yNipUdCtwbjtrbj0tLVR0fWVsc2UrK2tuO2ZvcihadD0wO1p0IT1idC5sZW5ndGgmJjYyIT09YnQuY2hhckNvZGVBdChadCk7KytadCk7aWYoKytadCwocW49bG4oYnQuc2xpY2UoMCxadCksITApKS5yfHwocW4ucj1kaSh7cjp6'@;
put 'bi0xLGM6a259KSksdW49e3Q6IiJ9LG51bGwhPShrdD0oS249YnQuc2xpY2UoWnQpKS5tYXRjaChnZSkpJiYiIiE9PWt0WzFdJiYodW4udj14cihrdFsxXSkpLEdlLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oa3Q9S24ubWF0Y2goX2UpKSYmIiIhPT1rdFsxXSl7aWYodW4uZj14cihQaShrdFsx'@;
put 'XSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxHZS54bGZufHwodW4uZj1HMSh1bi5mKSksa3RbMF0uaW5kZXhPZigndD0iYXJyYXkiJyk+LTEpdW4uRj0oS24ubWF0Y2gocmUpfHxbXSlbMV0sdW4uRi5pbmRleE9mKCI6Iik+LTEmJnVyLnB1c2goW09pKHVuLkYpLHVuLkZdKTtlbHNlIGlmKGt0'@;
put 'WzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7dHI9bG4oa3RbMF0pO3ZhciB0YT14cihQaShrdFsxXSkpO0dlLnhsZm58fCh0YT1HMSh0YSkpLEFuW3BhcnNlSW50KHRyLnNpLDEwKV09W3RyLHRhLHFuLnJdfX1lbHNlKGt0PUtuLm1hdGNoKC88ZltePl0qXC8+LykpJiZBblsodHI9bG4o'@;
put 'a3RbMF0pKS5zaV0mJih1bi5mPW5JKEFuW3RyLnNpXVsxXSxBblt0ci5zaV1bMl0scW4ucikpO3ZhciBNbj1zcyhxbi5yKTtmb3IoWnQ9MDtadDx1ci5sZW5ndGg7KytadClNbi5yPj11cltadF1bMF0ucy5yJiZNbi5yPD11cltadF1bMF0uZS5yJiZNbi5jPj11cltadF1bMF0ucy5jJiZNbi5j'@;
put 'PD11cltadF1bMF0uZS5jJiYodW4uRj11cltadF1bMV0pfWlmKG51bGw9PXFuLnQmJnZvaWQgMD09PXVuLnYpaWYodW4uZnx8dW4uRil1bi52PTAsdW4udD0ibiI7ZWxzZXtpZighenIpY29udGludWU7dW4udD0ieiJ9ZWxzZSB1bi50PXFuLnR8fCJuIjtzd2l0Y2gobnQucy5jPmtuJiYobnQu'@;
put 'cy5jPWtuKSxudC5lLmM8a24mJihudC5lLmM9a24pLHVuLnQpe2Nhc2UibiI6aWYoIiI9PXVuLnZ8fG51bGw9PXVuLnYpe2lmKCF6ciljb250aW51ZTt1bi50PSJ6In1lbHNlIHVuLnY9cGFyc2VGbG9hdCh1bi52KTticmVhaztjYXNlInMiOmlmKHR5cGVvZiB1bi52PiJ1Iil7aWYoIXpyKWNv'@;
put 'bnRpbnVlO3VuLnQ9InoifWVsc2UgZXI9ZjZbcGFyc2VJbnQodW4udiwxMCldLHVuLnY9ZXIudCx1bi5yPWVyLnIsZXIuUiYmKHVuLlI9ZXIuUiksamkmJih1bi5oPWVyLmgpO2JyZWFrO2Nhc2Uic3RyIjp1bi50PSJzIix1bi52PW51bGwhPXVuLnY/UGkodW4udik6IiIsamkmJih1bi5oPXJv'@;
put 'KHVuLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6a3Q9S24ubWF0Y2goUSksdW4udD0icyIsbnVsbCE9a3QmJihlcj1EOShrdFsxXSkpPyh1bi52PWVyLnQsZXIuUiYmKHVuLlI9ZXIuUiksamkmJih1bi5oPWVyLmgpKTp1bi52PSIiO2JyZWFrO2Nhc2UiYiI6dW4udj15cih1bi52KTticmVh'@;
put 'aztjYXNlImQiOkdlLmNlbGxEYXRlcz91bi52PUh0KHVuLnYsMSk6KHVuLnY9VWUoSHQodW4udiwxKSksdW4udD0ibiIpO2JyZWFrO2Nhc2UiZSI6ITEhPT1HZS5jZWxsVGV4dCYmKHVuLnc9dW4udiksdW4udj1LYVt1bi52XX1pZihfbyl7Wm49QnI9b2k9a2k9MCxRcj1udWxsLExpJiZ2b2lk'@;
put 'IDAhPT1xbi5zJiZudWxsIT0oUXI9Q3QuQ2VsbFhmW3FuLnNdKSYmKG51bGwhPVFyLm51bUZtdElkJiYoWm49UXIubnVtRm10SWQpLEdlLmNlbGxTdHlsZXMmJihudWxsIT1Rci5maWxsSWQmJihCcj1Rci5maWxsSWQpLG51bGwhPVFyLmZvbnRJZCYmKG9pPVFyLmZvbnRJZCksbnVsbCE9UXIu'@;
put 'Ym9yZGVySWQmJihraT1Rci5ib3JkZXJJZCkpKTt0cnl7cDYodW4sWm4sQnIsb2ksa2ksR2UsMCxDdCl9Y2F0Y2h7fUdlLmNlbGxTdHlsZXMmJnVuLnMmJihRciYmUXIuYWxpZ25tZW50JiYodW4ucy5hbGlnbm1lbnQ9b24oUXIuYWxpZ25tZW50KSksUXImJlFyLnByb3RlY3Rpb24mJihudWxs'@;
put 'IT1Rci5wcm90ZWN0aW9uLmhpZGRlbiYmKHVuLnMuaGlkZGVuPVFyLnByb3RlY3Rpb24uaGlkZGVuKSxudWxsIT1Rci5wcm90ZWN0aW9uLmVkaXRhYmxlJiYodW4ucy5lZGl0YWJsZT1Rci5wcm90ZWN0aW9uLmVkaXRhYmxlKSksUXImJlFyLnN0eWxlJiYodW4ucy5zdHlsZT1Rci5zdHlsZSkp'@;
put 'LEdlLmNlbGxEYXRlcyYmTGkmJiJuIj09dW4udCYmdy5pc19kYXRlKHcuX3RhYmxlW1puXSkmJih1bi50PSJkIix1bi52PWh0KHVuLnYpKX12YXIgTXM7R2Uubm9kaW0mJihNcz1zcyhxbi5yKSxudC5zLnI+TXMuciYmKG50LnMucj1Ncy5yKSxudC5lLnI8TXMuciYmKG50LmUucj1Ncy5yKSks'@;
put 'R2UuY2FsbGJhY2s/KE1zPXNzKHFuLnIpLHhvLnJvd1tNcy5jXT11bik6dnI/KEJlWyhNcz1zcyhxbi5yKSkucl18fChCZVtNcy5yXT1bXSksQmVbTXMucl1bTXMuY109dW4pOkJlW3FuLnJdPXVufUdlLmNhbGxiYWNrJiZHZS5jYWxsYmFjayh4byl9fX16ciYmIUdlLmNhbGxiYWNrJiZjNSgw'@;
put 'LEN0KSxyci5sZW5ndGg+MCYmKEJlWyIhcm93cyJdPXJyKX19KCksUlM9U3IoIndvcmtzaGVldCIsbnVsbCx7eG1sbnM6aXMubWFpblswXSwieG1sbnM6ciI6aXMuciwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkv'@;
put 'OS9hYyIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiLCJtYzpJZ25vcmFibGUiOiJ4MTRhYyJ9KTtmdW5jdGlvbiBXSSh5LFAsTCxRKXt2YXIgX2UscmU9W0JuLFJTXSx2ZT0iIixTZT1MLlNoZWV0c1tMLlNo'@;
put 'ZWV0TmFtZXNbeV1dO251bGw9PVNlJiYoU2U9e30pO3ZhciBIZT1TZVsiIXJlZiJdfHwiQTEiLEJlPU9pKEhlKTtpZihCZS5lLmM+MTYzODN8fEJlLmUucj4xMDQ4NTc1KXtpZihQLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrSGUrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQx'@;
put 'MDQ4NTc2Iik7QmUuZS5jPU1hdGgubWluKEJlLmUuYywxNjM4MyksQmUuZS5yPU1hdGgubWluKEJlLmUuYywxMDQ4NTc1KSxIZT1PbyhCZSl9UXx8KFE9e30pLFNlWyIhY29tbWVudHMiXT1bXTt2YXIgR2U9W10sbnQ9U2VbIiFwcmludCJdO2lmKGZ1bmN0aW9uIFpvKHksUCxMLFEscmUpe3Zh'@;
put 'ciBnZT0hMSxfZT17fSx2ZT1udWxsO2lmKCJ4bHN4IiE9PVEuYm9va1R5cGUmJlAudmJhcmF3KXt2YXIgU2U9UC5TaGVldE5hbWVzW0xdO3RyeXtQLldvcmtib29rJiYoU2U9UC5Xb3JrYm9vay5TaGVldHNbTF0uQ29kZU5hbWV8fFNlKX1jYXRjaHt9Z2U9ITAsX2UuY29kZU5hbWU9SHIoU2Up'@;
put 'fXkmJnlbIiFjb25kZm10Il0mJihfZS5lbmFibGVGb3JtYXRDb25kaXRpb25zQ2FsY3VsYXRpb249IjEiKSx5JiZ5WyIhdGFiY29sb3IiXSYmKHZlPSh2ZXx8IiIpKyc8dGFiQ29sb3IgcmdiPSJGRicrT3UoeVsiIXRhYmNvbG9yIl0ucmdiKSsnIi8+Jyk7dmFyIEhlPSExLEJlPXt9O2lmKCgo'@;
put 'KHl8fHt9KVsiIXByaW50Il18fHt9KS5wcm9wc3x8e30pLmZpdCYmKEhlPSEwLEJlLmZpdFRvUGFnZT0xKSxIZSYmKHZlPSh2ZXx8IiIpK1NyKCJwYWdlU2V0VXBQciIsbnVsbCxCZSkpLHkmJnlbIiFvdXRsaW5lIl0pe3ZhciBHZT17c3VtbWFyeUJlbG93OjEsc3VtbWFyeVJpZ2h0OjF9O3lb'@;
put 'IiFvdXRsaW5lIl0uYWJvdmUmJihHZS5zdW1tYXJ5QmVsb3c9MCkseVsiIW91dGxpbmUiXS5sZWZ0JiYoR2Uuc3VtbWFyeVJpZ2h0PTApLHZlPSh2ZXx8IiIpK1NyKCJvdXRsaW5lUHIiLG51bGwsR2UpfSFnZSYmIXZlfHwocmVbcmUubGVuZ3RoXT1Tcigic2hlZXRQciIsdmUsX2UpKX0oU2Us'@;
put 'TCx5LFAscmUpLHJlW3JlLmxlbmd0aF09U3IoImRpbWVuc2lvbiIsbnVsbCx7cmVmOkhlfSkscmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBPdih5LFAsTCxRKXt2YXIgcmU9e3dvcmtib29rVmlld0lkOiIwIn07aWYoKCgoUXx8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKS5sZW5ndGgpe3Zh'@;
put 'ciBnZT1RLldvcmtib29rLlZpZXdzLF9lPWdlW0xdfHxnZVswXTtyZS5yaWdodFRvTGVmdD1fZS5SVEw/IjEiOiIwIixfZS56b29tJiYocmUuem9vbVNjYWxlPV9lLnpvb20pLG51bGwhPV9lLmdyaWQmJihyZS5zaG93R3JpZExpbmVzPV9lLmdyaWQpLF9lLnZpZXcmJihyZS52aWV3PV9lLnZp'@;
put 'ZXcpfW51bGwhPXlbIiFncmlkbGluZXMiXSYmKHJlLnNob3dHcmlkTGluZXM9ISF5WyIhZ3JpZGxpbmVzIl0pO3ZhciB2ZT0iIixTZT17cjowLGM6MH07aWYoeVsiIXNlbCJdKXtpZighKFNlPXlbIiFzZWwiXS5jZWxsKSl7aWYoIXlbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11'@;
put 'c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7U2U9V3MoeVsiIXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnN9InN0cmluZyI9PXR5cGVvZiBTZSYmKFNlPXNzKFNlKSl9dmFyIEJlPXlbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIHlbIiFmcmVlemUi'@;
put 'XT9zcyh5WyIhZnJlZXplIl0pOnlbIiFmcmVlemUiXTp7YzowLHI6MH07aWYoeVsiIWZyZWV6ZSJdKXt2YXIgR2U9ZGkoQmUpLG50PXtzdGF0ZToiZnJvemVuIix4U3BsaXQ6QmUuYyx5U3BsaXQ6QmUucix0b3BMZWZ0Q2VsbDpHZX07eVsiIXNlbCJdJiYobnQuYWN0aXZlUGFuZT0oU2Uucj49'@;
put 'QmUuciYmQmUucj4wPyJib3R0b20iOiJ0b3AiKSsoU2UuYz49QmUuYyYmQmUuYz4wPyJSaWdodCI6IkxlZnQiKSksdmU9U3IoInBhbmUiLG51bGwsbnQpfWlmKHlbIiFzZWwiXSl7dmFyIGR0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgU2U/U2U6ZGkoU2UpfTtkdC5zcXJlZj15WyIh'@;
put 'c2VsIl0ucmFuZ2U/eVsiIXNlbCJdLnJhbmdlOmR0LmFjdGl2ZUNlbGwrIjoiK2R0LmFjdGl2ZUNlbGwsdmUrPVNyKCJzZWxlY3Rpb24iLG51bGwsZHQpLHlbIiFmcmVlemUiXSYmKEJlLmM+MCYmKGR0LnBhbmU9InRvcFJpZ2h0Iix2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkpLEJlLnI+'@;
put 'MCYmKGR0LnBhbmU9ImJvdHRvbUxlZnQiLHZlKz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSksQmUuYz4wJiZCZS5yPjAmJihkdC5wYW5lPSJib3R0b21SaWdodCIsdmUrPVNyKCJzZWxlY3Rpb24iLG51bGwsZHQpKSl9cmV0dXJuIFNyKCJzaGVldFZpZXdzIixTcigic2hlZXRWaWV3Iix2ZXx8'@;
put 'bnVsbCxyZSkse30pfShTZSwwLHksTCksUC5zaGVldEZvcm1hdCl7dmFyIGR0PXtkZWZhdWx0Um93SGVpZ2h0OlAuc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6UC5zaGVldEZvcm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPVAuc2hlZXRGb3Jt'@;
put 'YXQub3V0bGluZUxldmVsUm93JiYoZHQub3V0bGluZUxldmVsUm93PVAuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxyZVtyZS5sZW5ndGhdPVNyKCJzaGVldEZvcm1hdFByIixudWxsLGR0KX1lbHNlIGlmKFNlWyIhc2hlZXRGb3JtYXQiXSl7dmFyIEN0PXt9LGN0PSExO1NlWyIhc2hl'@;
put 'ZXRGb3JtYXQiXS5yb3cmJihTZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdD8oY3Q9ITAsQ3QuZGVmYXVsdFJvd0hlaWdodD1TZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdCxDdC5jdXN0b21IZWlnaHQ9MSk6U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KGN0PSEwLEN0LmRlZmF1bHRSb3dI'@;
put 'ZWlnaHQ9ajIoU2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHgpLEN0LmN1c3RvbUhlaWdodD0xKTooMD09PVNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0fHwwPT09U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fFNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKGN0PSEwLEN0LmRl'@;
put 'ZmF1bHRSb3dIZWlnaHQ9Q3QuZGVmYXVsdFJvd0hlaWdodHx8MTYsQ3QuY3VzdG9tSGVpZ2h0PTEsQ3QuemVyb0hlaWdodD0xKSxTZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50JiYoQ3RbIngxNGFjOmR5RGVzY2VudCJdPVNlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSxTZVsiIXNo'@;
put 'ZWV0Rm9ybWF0Il0uY29sJiYoU2VbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2h8fHB1KFNlWyIhc2hlZXRGb3JtYXQiXS5jb2wpLEN0LmRlZmF1bHRDb2xXaWR0aD1TZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L3BsfHwwLGN0PSEwKSxudWxsPT1DdC5kZWZhdWx0Um93SGVpZ2h0JiYoQ3Qu'@;
put 'ZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09Q3QuZGVmYXVsdENvbFdpZHRoJiYoQ3QuZGVmYXVsdENvbFdpZHRoPTEwKSxDdC5vdXRsaW5lTGV2ZWxSb3c9Q3Qub3V0bGluZUxldmVsUm93fHw3LGN0JiYocmVbcmUubGVuZ3RoXT1Tcigic2hlZXRGb3JtYXRQciIsbnVsbCxDdCkpfW51bGwh'@;
put 'PVNlWyIhY29scyJdJiZTZVsiIWNvbHMiXS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gRHYoeSxQLEwpe2Zvcih2YXIgcmUsUT1bIjxjb2xzPiJdLGdlPTA7Z2UhPVAubGVuZ3RoOysrZ2UpaWYocmU9UFtnZV0pe2lmKHJlLmF1dG8mJk5pKHkscmUsZ2UpLHJlLnN8fHJlLnop'@;
put 'e3ZhciBfZT17dDoieiJ9O251bGwhPXJlLnMmJihfZS5zPXJlLnMpLG51bGwhPXJlLnomJihfZS56PXJlLnopLHJlLnN0eWxlPWd1KEwuY2VsbFhmcyxMLmNlbGxTdHlsZVhmcyxfZSxMKX1RW1EubGVuZ3RoXT1TcigiY29sIixudWxsLFlkKGdlLHJlKSl9cmV0dXJuIFFbUS5sZW5ndGhdPSI8'@;
put 'L2NvbHM+IixRLmpvaW4oIiIpfShTZSxTZVsiIWNvbHMiXSxQKSkscmVbX2U9cmUubGVuZ3RoXT0iPHNoZWV0RGF0YS8+IixTZVsiIWxpbmtzIl09W10sbnVsbCE9U2VbIiFyZWYiXSYmKHZlPWZ1bmN0aW9uIFlJKHksUCxMLFEpe3ZhciBTZSxidCxyZT1bXSxnZT1bXSxfZT1PaSh5WyIhcmVm'@;
put 'Il0pLHZlPSIiLEhlPSIiLEJlPVtdLEdlPTAsbnQ9MCxkdD15WyIhcm93cyJdLEN0PUFycmF5LmlzQXJyYXkoeSksY3Q9e3I6SGV9LEZ0PS0xO2ZvcihudD1fZS5zLmM7bnQ8PV9lLmUuYzsrK250KUJlW250XT1OcyhudCk7Zm9yKEdlPV9lLnMucjtHZTw9X2UuZS5yOysrR2Upe2ZvcihnZT1b'@;
put 'XSxIZT1IcyhHZSksbnQ9X2Uucy5jO250PD1fZS5lLmM7KytudCl7U2U9QmVbbnRdK0hlO3ZhciBrdD1DdD8oeVtHZV18fFtdKVtudF06eVtTZV07dm9pZCAwIT09a3QmJm51bGwhPSh2ZT1VSShrdCxTZSx5LFApKSYmZ2UucHVzaCh2ZSl9KGdlLmxlbmd0aD4wfHxkdCYmZHRbR2VdKSYmKGN0'@;
put 'PXtyOkhlfSxkdCYmZHRbR2VdJiYoKGJ0PWR0W0dlXSkuaGlkZGVuJiYoY3QuaGlkZGVuPTEpLEZ0PS0xLGJ0LmhweD9GdD1qMihidC5ocHgpOmJ0LmhwdCYmKEZ0PWJ0LmhwdCksRnQ+LTEmJihjdC5odD1GdCxjdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihjdC5vdXRsaW5lTGV2ZWw9'@;
put 'YnQubGV2ZWwpLGJ0LmR5RGVzY2VudCYmKGN0WyJ4MTRhYzpkeURlc2NlbnQiXT1idC5keURlc2NlbnQpLGJ0LnMmJihjdC5zPWd1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoieiIsczpidC5zfSxQKSxjdC5jdXN0b21Gb3JtYXQ9MSkpLHJlW3JlLmxlbmd0aF09U3IoInJvdyIsZ2Uu'@;
put 'am9pbigiIiksY3QpKX1pZihkdClmb3IoO0dlPGR0Lmxlbmd0aDsrK0dlKWR0JiZkdFtHZV0mJihjdD17cjpHZSsxfSwoYnQ9ZHRbR2VdKS5oaWRkZW4mJihjdC5oaWRkZW49MSksRnQ9LTEsYnQuaHB4P0Z0PWoyKGJ0LmhweCk6YnQuaHB0JiYoRnQ9YnQuaHB0KSxGdD4tMSYmKGN0Lmh0PUZ0'@;
put 'LGN0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGN0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCkscmVbcmUubGVuZ3RoXT1Tcigicm93IiwiIixjdCkpO3JldHVybiByZS5qb2luKCIiKX0oU2UsUCksdmUubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPXZlKSkscmUubGVuZ3RoPl9lKzEmJihy'@;
put 'ZVtyZS5sZW5ndGhdPSI8L3NoZWV0RGF0YT4iLHJlW19lXT1yZVtfZV0ucmVwbGFjZSgiLz4iLCI+IikpLFNlWyIhcHJvdGVjdCJdJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBFYSh5KXt2YXIgUD17c2hlZXQ6MX07cmV0dXJuIEF2LmZvckVhY2goZnVuY3Rpb24oTCl7bnVsbCE9eVtMXSYm'@;
put 'eVtMXSYmKFBbTF09IjEiKX0pLFR2LmZvckVhY2goZnVuY3Rpb24oTCl7bnVsbCE9eVtMXSYmIXlbTF0mJihQW0xdPSIwIil9KSx5LnBhc3N3b3JkP1AucGFzc3dvcmQ9YUMoeS5wYXNzd29yZCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6eS5lbmNyeXB0aW9uJiYoUC5hbGdvcml0aG1O'@;
put 'YW1lPXkuZW5jcnlwdGlvbi5hbGdvLFAuaGFzaFZhbHVlPXkuZW5jcnlwdGlvbi5oYXNoLFAuc2FsdFZhbHVlPXkuZW5jcnlwdGlvbi5zYWx0LFAuc3BpbkNvdW50PXkuZW5jcnlwdGlvbi5zcGluKSxTcigic2hlZXRQcm90ZWN0aW9uIixudWxsLFApfShTZVsiIXByb3RlY3QiXSkpLG51bGwh'@;
put 'PVNlWyIhYXV0b2ZpbHRlciJdJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBFUyh5LFAsTCxRKXt2YXIgcmU9InN0cmluZyI9PXR5cGVvZiB5LnJlZj95LnJlZjpPbyh5LnJlZik7TC5Xb3JrYm9va3x8KEwuV29ya2Jvb2s9e1NoZWV0czpbXX0pLEwuV29ya2Jvb2suTmFtZXN8fChMLldvcmti'@;
put 'b29rLk5hbWVzPVtdKTt2YXIgZ2U9TC5Xb3JrYm9vay5OYW1lcyxfZT1XcyhyZSk7X2Uucy5yPT1fZS5lLnImJihfZS5lLnI9V3MoUFsiIXJlZiJdKS5lLnIscmU9T28oX2UpKTtmb3IodmFyIHZlPTA7dmU8Z2UubGVuZ3RoOysrdmUpe3ZhciBTZT1nZVt2ZV07aWYoIl94bG5tLl9GaWx0ZXJE'@;
put 'YXRhYmFzZSI9PVNlLk5hbWUmJlNlLlNoZWV0PT1RKXtTZS5SZWY9IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK3JlO2JyZWFrfX1yZXR1cm4gdmU9PWdlLmxlbmd0aCYmZ2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpRLFJlZjoiJyIrTC5TaGVldE5hbWVzW1Fd'@;
put 'KyInISIrcmV9KSxTcigiYXV0b0ZpbHRlciIsbnVsbCx7cmVmOnJlfSl9KFNlWyIhYXV0b2ZpbHRlciJdLFNlLEwseSkpLG51bGwhPVNlWyIhbWVyZ2VzIl0mJlNlWyIhbWVyZ2VzIl0ubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEpaKHkpe2lmKDA9PT15Lmxlbmd0aClyZXR1'@;
put 'cm4iIjtmb3IodmFyIFA9JzxtZXJnZUNlbGxzIGNvdW50PSInK3kubGVuZ3RoKyciPicsTD0wO0whPXkubGVuZ3RoOysrTClQKz0nPG1lcmdlQ2VsbCByZWY9IicrT28oeVtMXSkrJyIvPic7cmV0dXJuIFArIjwvbWVyZ2VDZWxscz4ifShTZVsiIW1lcmdlcyJdKSksU2VbIiFjb25kZm10Il0m'@;
put 'JihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIGpJKHksUCl7cmV0dXJuIHkubWFwKGZ1bmN0aW9uKEwsUSl7cmV0dXJuIGZ1bmN0aW9uIFB1KHksUCxMKXt2YXIgUT15LnM/Rm8oTC5EWEYseS5zKTotMSxyZT0ic3RyaW5nIj09dHlwZW9mIHkucmVmP3kucmVmOk9vKHkucmVmKSxfZT1PaShyZS5y'@;
put 'ZXBsYWNlKC9ccy4qJC8sIiIpKS5zO19lLnI8MCYmKF9lLnI9MCksX2UuYzwwJiYoX2UuYz0wKTt2YXIgdmU9IiIsU2U9e3ByaW9yaXR5OlArMX07c3dpdGNoKFE+LTEmJihTZS5keGZJZD1RKSx5LnQpe2Nhc2UidW5pcXVlIjpTZS50eXBlPSJ1bmlxdWVWYWx1ZXMiO2JyZWFrO2Nhc2UiZHVw'@;
put 'IjpTZS50eXBlPSJkdXBsaWNhdGVWYWx1ZXMiO2JyZWFrO2Nhc2UiYmxhbmsiOlNlLnR5cGU9KHkudj8iYyI6Im5vdEMiKSsib250YWluc0JsYW5rcyIsdmU9Ijxmb3JtdWxhPkxFTihUUklNKCIrZGkoX2UpKyIpKSIrKHkudj8iPSI6IiZndDsiKSsiMDwvZm9ybXVsYT4iO2JyZWFrO2Nhc2Ui'@;
put 'ZXJyb3IiOlNlLnR5cGU9KHkudj8iYyI6Im5vdEMiKSsib250YWluc0Vycm9ycyI7YnJlYWs7Y2FzZSJmb3JtdWxhIjpTZS50eXBlPSJleHByZXNzaW9uIix2ZT1TcigiZm9ybXVsYSIsSHIoeS5mKSx7fSk7YnJlYWs7Y2FzZSJkYXRlIjpTZS50eXBlPSJ0aW1lUGVyaW9kIixTZS50aW1lUGVy'@;
put 'aW9kPUlTW3kub3BdO2JyZWFrO2Nhc2UidGV4dCI6c3dpdGNoKFNlLnR5cGU9U2Uub3BlcmF0b3I9UnZbeS5vcF0sU2UudGV4dD15LnYseS5vcCl7Y2FzZSJJTiI6dmU9Jzxmb3JtdWxhPk5PVChJU0VSUk9SKFNFQVJDSCgiJytIcih5LnYpKyciLCcrZGkoX2UpKyIpKSk8L2Zvcm11bGE+Ijti'@;
put 'cmVhaztjYXNlIk9UIjp2ZT0nPGZvcm11bGE+SVNFUlJPUihTRUFSQ0goIicrSHIoeS52KSsnIiwnK2RpKF9lKSsiKSk8L2Zvcm11bGE+IjticmVhaztjYXNlIlNUIjp2ZT0iPGZvcm11bGE+TEVGVCgiK2RpKF9lKSsnLExFTigiJytIcih5LnYpKyciKSk9IicrSHIoeS52KSsnIjwvZm9ybXVs'@;
put 'YT4nO2JyZWFrO2Nhc2UiTkQiOnZlPSI8Zm9ybXVsYT5SSUdIVCgiK2RpKF9lKSsnLExFTigiJytIcih5LnYpKyciKSk9IicrSHIoeS52KSsnIjwvZm9ybXVsYT4nfWJyZWFrO2Nhc2UidmFsIjpTZS50eXBlPSJjZWxsSXMiLFNlLm9wZXJhdG9yPSQzW3kub3BdLHZlPW51bGwhPXkubWluP1Ny'@;
put 'KCJmb3JtdWxhIixIcihTdHJpbmcoeS5taW4pKSx7fSkrU3IoImZvcm11bGEiLEhyKFN0cmluZyh5Lm1heCkpLHt9KTpTcigiZm9ybXVsYSIsSHIobnVsbCE9eS52P1N0cmluZygic3RyaW5nIj09dHlwZW9mIHkudj8nIicreS52LnJlcGxhY2UoLyIvZywnIiInKSsnIic6eS52KTp5LmYpLHt9'@;
put 'KTticmVhaztjYXNlImF2ZyI6c3dpdGNoKFNlLnR5cGU9ImFib3ZlQXZlcmFnZSIsU2UuYWJvdmVBdmVyYWdlPSJMIj09eS5vcC5jaGFyQXQoMCk/IjAiOiIxIix5Lm9wLmNoYXJBdCgxKSl7Y2FzZSJUIjpTZS5lcXVhbEF2ZXJhZ2U9IjAiO2JyZWFrO2Nhc2UiRSI6U2UuZXF1YWxBdmVyYWdl'@;
put 'PSIxIjticmVhaztkZWZhdWx0OlNlLnN0ZERldj15Lm9wLmNoYXJBdCgxKX1icmVhaztjYXNlInJhbmsiOlNlLnR5cGU9InRvcDEwIixTZS5ib3R0b209IkIiPT15Lm9wLmNoYXJBdCgwKT8iMSI6IjAiLFNlLnBlcmNlbnQ9IlAiPT15Lm9wLmNoYXJBdCgxKT8iMSI6IjAiLFNlLnJhbms9eS52'@;
put 'O2JyZWFrO2Nhc2UiaWNvbiI6U2UudHlwZT0iaWNvblNldCI7dmFyIEhlPXtpY29uU2V0OnkudixwZXJjZW50OnkucGN0PyJ0cnVlIjoiZmFsc2UifTt5LnJldiYmKEhlLnJldmVyc2U9InRydWUiKSx5LmhpZGRlbiYmKEhlLnNob3dWYWx1ZT0iZmFsc2UiKSx2ZT1TcigiaWNvblNldCIseS50'@;
put 'aHJlc2gubWFwKHBmKS5qb2luKCIiKSxIZSk7YnJlYWs7Y2FzZSJzY2FsZSI6U2UudHlwZT0iY29sb3JTY2FsZSIsdmUrPXBmKHkuY21pbikseS5jbWlkJiYodmUrPXBmKHkuY21pZCkpLHZlKz1wZih5LmNtYXgpLHZlKz1VZCh5LmNtaW4uY29sb3IpLHkuY21pZCYmKHZlKz1VZCh5LmNtaWQu'@;
put 'Y29sb3IpKSx2ZT1TcigiY29sb3JTY2FsZSIsdmUrPVVkKHkuY21heC5jb2xvcikse30pO2JyZWFrO2Nhc2UiYmFyIjpTZS50eXBlPSJkYXRhQmFyIix2ZSs9cGYoeS5jbWluKSx2ZSs9cGYoeS5jbWF4KSx2ZT1TcigiZGF0YUJhciIsdmUrPVVkKHkuY29sb3IpLHt9KTticmVhaztkZWZhdWx0'@;
put 'OnRocm93IGNvbnNvbGUubG9nKHkpLCJDRiBtaXNzaW5nIHR5cGUgIit5LnR9cmV0dXJuJzxjb25kaXRpb25hbEZvcm1hdHRpbmcgc3FyZWY9IicrcmUrJyI+JytTcigiY2ZSdWxlIiwiIj09dmU/bnVsbDp2ZSxTZSkrIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiJ9KEwsUSxQKX0pLmpvaW4o'@;
put 'IiIpfShTZVsiIWNvbmRmbXQiXSxQKSksU2VbIiF2YWxpZGF0aW9ucyJdJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBOSSh5KXtpZigheXx8MD09eS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVtdLEw9MCxRPTA7UTx5Lmxlbmd0aDsrK1Epe3ZhciByZT15W1FdLGdlPXk2W3JlLnRdO2lm'@;
put 'KHJlLnJlZiYmKCJzdHJpbmciIT10eXBlb2YgcmUucmVmfHwtMSE9cmUucmVmLmluZGV4T2YoIiAiKXx8KHJlLnJlZj1PaShyZS5yZWYpLHJlLnJlZi5zJiYhKHJlLnJlZi5zLmM8MCkpKSl7KytMO3ZhciBfZT17dHlwZTpnZSxhbGxvd0JsYW5rOisoMCE9cmUuYmxhbmspLHNob3dJbnB1dE1l'@;
put 'c3NhZ2U6KygwIT1yZS5pbnB1dCksc2hvd0Vycm9yTWVzc2FnZTorKDAhPXJlLmVycm9yKSxzcXJlZjoic3RyaW5nIj09dHlwZW9mIHJlLnJlZj9yZS5yZWY6T28ocmUucmVmKX07aWYocmUuaW5wdXQmJihyZS5pbnB1dC50aXRsZSYmKF9lLnByb21wdFRpdGxlPXFpKHJlLmlucHV0LnRpdGxl'@;
put 'KSkscmUuaW5wdXQubWVzc2FnZSYmKF9lLnByb21wdD1xaShyZS5pbnB1dC5tZXNzYWdlKSkpLHJlLmVycm9yJiYocmUuZXJyb3IudGl0bGUmJihfZS5lcnJvclRpdGxlPXFpKHJlLmVycm9yLnRpdGxlKSkscmUuZXJyb3IubWVzc2FnZSYmKF9lLmVycm9yPXFpKHJlLmVycm9yLm1lc3NhZ2Up'@;
put 'KSxyZS5lcnJvci5zdHlsZSYmKF9lLmVycm9yU3R5bGU9cmUuZXJyb3Iuc3R5bGUpKSwhZ2UpdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIityZS50KTt2YXIgdmU9IiI7c3dpdGNoKHJlLnQpe2Nhc2UiQW55IjpicmVhaztjYXNlIkxpc3QiOmNh'@;
put 'c2UiQ3VzdG9tIjppZihyZS5sKXtpZihyZS5sLmpvaW4oIiwiKS5sZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4gMjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3VwIHRhYmxlIik7dmU9Jzxmb3JtdWxhMT4iJytIcihyZS5s'@;
put 'LmpvaW4oIiwiKSkrJyI8L2Zvcm11bGExPid9ZWxzZSB2ZT0iPGZvcm11bGExPiIrSHIocmUuZikrIjwvZm9ybXVsYTE+IjticmVhaztjYXNlIkRhdGUiOmNhc2UiVGltZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYoISQzW3JlLm9wXSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK3JlLm9wKyIgZm9yICIrcmUudCk7aWYoX2Uub3BlcmF0b3I9JDNbcmUub3BdLG51bGwhPXJlLnYpdmU9Ijxmb3JtdWxhMT4iK0hyKFN0cmluZyhyZS52IGluc3RhbmNlb2YgRGF0ZT9VZShyZS52KTpyZS52KSkrIjwvZm9ybXVsYTE+Ijtl'@;
put 'bHNle2lmKG51bGw9PXJlLm1pbnx8bnVsbD09cmUubWF4KXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrcmUudCk7dmU9Ijxmb3JtdWxhMT4iK0hyKFN0cmluZyhyZS5taW4gaW5zdGFuY2VvZiBEYXRl'@;
put 'P1VlKHJlLm1pbik6cmUubWluKSkrIjwvZm9ybXVsYTE+PGZvcm11bGEyPiIrSHIoU3RyaW5nKHJlLm1heCBpbnN0YW5jZW9mIERhdGU/VWUocmUubWF4KTpyZS5tYXgpKSsiPC9mb3JtdWxhMj4ifX1QLnB1c2goU3IoImRhdGFWYWxpZGF0aW9uIix2ZXx8bnVsbCxfZSkpfX1yZXR1cm4gTD4w'@;
put 'Pyc8ZGF0YVZhbGlkYXRpb25zIGNvdW50PSInK0wrJyI+JytQLmpvaW4oIiIpKyI8L2RhdGFWYWxpZGF0aW9ucz4iOiIifShTZVsiIXZhbGlkYXRpb25zIl0pKTt2YXIgRnQsYnQ9LTEsa3Q9LTE7aWYoU2VbIiFsaW5rcyJdLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT0iPGh5cGVybGlua3M+'@;
put 'IixTZVsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbih1bil7dW5bMV0uVGFyZ2V0JiYoRnQ9e3JlZjp1blswXX0sIiMiIT11blsxXS5UYXJnZXQuY2hhckF0KDApJiYoa3Q9em8oUSwtMSxIcih1blsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSxIaS5ITElOSyksRnRbInI6aWQiXT0i'@;
put 'cklkIitrdCksKGJ0PXVuWzFdLlRhcmdldC5pbmRleE9mKCIjIikpPi0xJiYoRnQubG9jYXRpb249SHIodW5bMV0uVGFyZ2V0LnNsaWNlKGJ0KzEpKSksdW5bMV0uVG9vbHRpcCYmKEZ0LnRvb2x0aXA9SHIodW5bMV0uVG9vbHRpcCkpLHJlW3JlLmxlbmd0aF09U3IoImh5cGVybGluayIsbnVs'@;
put 'bCxGdCkpfSkscmVbcmUubGVuZ3RoXT0iPC9oeXBlcmxpbmtzPiIpLGRlbGV0ZSBTZVsiIWxpbmtzIl0sbnQpe3ZhciBUdD1mdW5jdGlvbiB3Uyh5KXtpZih5LnByb3BzKXt2YXIgUD17fSxMPXkucHJvcHM7cmV0dXJuIEwuZ3JpZGxpbmVzJiYoUC5ncmlkTGluZXM9UC5ncmlkTGluZXNTZXQ9'@;
put 'MSksTC5oZWFkaW5ncyYmKFAuaGVhZGluZ3M9MSksTC5jZW50ZXJYJiYoUC5ob3Jpem9udGFsQ2VudGVyZWQ9MSksTC5jZW50ZXJZJiYoUC52ZXJ0aWNhbENlbnRlcmVkPTEpLFNyKCJwcmludE9wdGlvbnMiLG51bGwsUCl9cmV0dXJuIiJ9KG50KTtUdC5sZW5ndGgmJihyZVtyZS5sZW5ndGhd'@;
put 'PVR0KX1pZigobnVsbCE9U2VbIiFtYXJnaW5zIl18fG50JiZudC5tYXJnaW5zKSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gYjYoeSl7cmV0dXJuIGRmKHkpLFNyKCJwYWdlTWFyZ2lucyIsbnVsbCx5KX0oU2VbIiFtYXJnaW5zIl18fG50Lm1hcmdpbnMpKSxudCl7dmFyIFp0PWZ1bmN0aW9u'@;
put 'IE9JKHkpe2lmKHkucHJvcHMpe3ZhciBQPXt9LEw9eS5wcm9wcztpZihMLm9yaWVudGF0aW9uJiYoUC5vcmllbnRhdGlvbj1MLm9yaWVudGF0aW9uKSxMLnNjYWxlJiYoUC5zY2FsZT1MLnNjYWxlKSxMLmZpdCYmKG51bGwhPUwuZml0LmhlaWdodCYmKFAuZml0VG9IZWlnaHQ9TC5maXQuaGVp'@;
put 'Z2h0KSxudWxsIT1MLmZpdC53aWR0aCYmKFAuZml0VG9XaWR0aD1MLmZpdC53aWR0aCkpLEwuZHBpJiYoUC5ob3Jpem9udGFsRHBpPVAudmVydGljYWxEcGk9TC5kcGkpLG51bGwhPUwuZmlyc3QmJihQLmZpcnN0UGFnZU51bWJlcj1MLmZpcnN0LFAudXNlRmlyc3RQYWdlTnVtYmVyPTEpLEwu'@;
put 'YncmJihQLmJsYWNrQW5kV2hpdGU9MSksTC5kcmFmdCYmKFAuZHJhZnQ9MSksTC5jb21tZW50cyYmKFAuY2VsbENvbW1lbnRzPUNlW0wuY29tbWVudHNdfHwibm9uZSIpLEwuZXJyb3JzJiYoUC5lcnJvcnM9UklbTC5lcnJvcnNdfHwibm9uZSIpLEwucGFwZXIpc3dpdGNoKHR5cGVvZiBMLnBh'@;
put 'cGVyKXtjYXNlIm51bWJlciI6UC5wYXBlclNpemU9TC5wYXBlcjticmVhaztjYXNlInN0cmluZyI6WjlbTC5wYXBlcl0/UC5wYXBlclNpemU9WjlbTC5wYXBlcl06K0wucGFwZXImJihQLnBhcGVyU2l6ZT0rTC5wYXBlcik7YnJlYWs7Y2FzZSJvYmplY3QiOmlmKCFMLnBhcGVyLmhlaWdodHx8'@;
put 'IUwucGFwZXIud2lkdGgpdGhyb3ciQ3VzdG9tIFBhcGVyIFNpemUgbXVzdCBpbmNsdWRlIHdpZHRoIGFuZCBoZWlnaHQhIjtQLnBhcGVySGVpZ2h0PUwucGFwZXIuaGVpZ2h0LFAucGFwZXJXaWR0aD1MLnBhcGVyLndpZHRofXJldHVyblsxLCEwLCJ0cnVlIiwib3ZlciJdLmluZGV4T2YoTC5v'@;
put 'cmRlcik+LTEmJihQLnBhZ2VPcmRlcj0ib3ZlclRoZW5Eb3duIiksU3IoInBhZ2VTZXR1cCIsbnVsbCxQKX1yZXR1cm4iIn0obnQpO1p0Lmxlbmd0aCYmKHJlW3JlLmxlbmd0aF09WnQpLFp0PWZ1bmN0aW9uIEx2KHkpe3ZhciBQPVtdLEw9IiIsUT0iIixyZT0iIixnZT0iIixfZT0iIix2ZT0i'@;
put 'IixTZT0iIixIZT1XMSh5LmhlYWRlcik7SGUubGVuZ3RoJiYoUT1IZVswXSx2ZT1IZVsxXSxnZT1IZVsyXSk7dmFyIEJlPVcxKHkuZm9vdGVyKTtyZXR1cm4gQmUubGVuZ3RoJiYocmU9QmVbMF0sU2U9QmVbMV0sX2U9QmVbMl0pLFEmJlAucHVzaCgiPG9kZEhlYWRlcj4iK0hyKFEpKyI8L29k'@;
put 'ZEhlYWRlcj4iKSxyZSYmUC5wdXNoKCI8b2RkRm9vdGVyPiIrSHIocmUpKyI8L29kZEZvb3Rlcj4iKSwoX2UhPXJlfHxnZSE9USkmJihMKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxQLnB1c2goIjxldmVuSGVhZGVyPiIrSHIoZ2UpKyI8L2V2ZW5IZWFkZXI+IiksUC5wdXNoKCI8ZXZlbkZv'@;
put 'b3Rlcj4iK0hyKF9lKSsiPC9ldmVuRm9vdGVyPiIpKSwoU2UhPXJlfHx2ZSE9USkmJihMKz0nIGRpZmZlcmVudEZpcnN0PSIxIicsUC5wdXNoKCI8Zmlyc3RIZWFkZXI+IitIcih2ZSkrIjwvZmlyc3RIZWFkZXI+IiksUC5wdXNoKCI8Zmlyc3RGb290ZXI+IitIcihTZSkrIjwvZmlyc3RGb290'@;
put 'ZXI+IikpLFAubGVuZ3RoPyI8aGVhZGVyRm9vdGVyIitMKyI+IitQLmpvaW4oIiIpKyI8L2hlYWRlckZvb3Rlcj4iOiIifShudCksWnQubGVuZ3RoJiYocmVbcmUubGVuZ3RoXT1adCl9aWYoKG51bGwhPVNlWyIhcm93QnJlYWtzIl18fG50JiZudC5yb3dCcmVha3MpJiYocmVbcmUubGVuZ3Ro'@;
put 'XT1mdW5jdGlvbiBGSSh5KXtpZigwPT15Lmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFA9Wyc8cm93QnJlYWtzIGNvdW50PSInK3kubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicreS5sZW5ndGgrJyI+J10sTD0wO0w8eS5sZW5ndGg7KytMKVAucHVzaCgnPGJyayBpZD0iJyt5W0xdLlIr'@;
put 'JyIgbWFuPSIxIi8+Jyk7cmV0dXJuIFAuam9pbigiIikrIjwvcm93QnJlYWtzPiJ9KFNlWyIhcm93QnJlYWtzIl18fG50LnJvd0JyZWFrcykpLChudWxsIT1TZVsiIWNvbEJyZWFrcyJdfHxudCYmbnQuY29sQnJlYWtzKSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gUVooeSl7aWYoMD09eS5s'@;
put 'ZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBQPVsnPGNvbEJyZWFrcyBjb3VudD0iJyt5Lmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK3kubGVuZ3RoKyciPiddLEw9MDtMPHkubGVuZ3RoOysrTClQLnB1c2goJzxicmsgaWQ9IicreVtMXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBQLmpv'@;
put 'aW4oIiIpKyI8L2NvbEJyZWFrcz4ifShTZVsiIWNvbEJyZWFrcyJdfHxudC5jb2xCcmVha3MpKSwoIVB8fFAuaWdub3JlRUN8fG51bGw9PVAuaWdub3JlRUMpJiYocmVbcmUubGVuZ3RoXT1mcygiaWdub3JlZEVycm9ycyIsU3IoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNU'@;
put 'ZXh0OjEsc3FyZWY6SGV9KSkpLFNlWyIhY2hhcnRzIl0mJkdlLnB1c2guYXBwbHkoR2UsU2VbIiFjaGFydHMiXSksU2VbIiFpbWFnZXMiXSYmR2UucHVzaC5hcHBseShHZSxTZVsiIWltYWdlcyJdKSxTZVsiIXNoYXBlcyJdJiZHZS5wdXNoLmFwcGx5KEdlLFNlWyIhc2hhcGVzIl0pLEdlLmxl'@;
put 'bmd0aD4wJiYoa3Q9em8oUSwtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKHkrMSkrIi54bWwiLEhpLkRSQVcpLHJlW3JlLmxlbmd0aF09U3IoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitrdH0pLFNlWyIhZHJhd2luZyJdPUdlKSwoU2VbIiFjb21tZW50cyJdLmxlbmd0aD4wfHwoU2Vb'@;
put 'IiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjApJiYoa3Q9em8oUSwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKHkrMSkrIi52bWwiLEhpLlZNTCkscmVbcmUubGVuZ3RoXT1TcigibGVnYWN5RHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksU2VbIiFsZWdhY3kiXT1rdCksU2Vb'@;
put 'IiFwcmludCJdJiZTZVsiIXByaW50Il0uaW1hZ2VzKXt2YXIgcG49U2VbIiFwcmludCJdLmltYWdlcyxLbj0wO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbih1bil7cG5bdW5dJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24ocW4pe3BuW3VuXVtx'@;
put 'bl0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbih6bil7aWYoQXJyYXkuaXNBcnJheShwblt1bl1bcW5dW3puXSkpZm9yKHZhciBrbj0wO2tuPHBuW3VuXVtxbl1bem5dLmxlbmd0aDsrK2tuKXBuW3VuXVtxbl1bem5dW2tuXSYmKHBuW3VuXVtxbl1bem5dW2tu'@;
put 'XS5fY250PUtuKyspfSl9KX0pLEtuPjAmJihrdD16byhRLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoeSsxKSsiSEYudm1sIixIaS5WTUwpLHJlW3JlLmxlbmd0aF09U3IoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksU2VbIiFsZWdhY3lIRiJdPWt0KX1y'@;
put 'ZXR1cm4oU2VbIiF0YWJsZXMiXXx8W10pLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT0nPHRhYmxlUGFydHMgY291bnQ9IicrU2VbIiF0YWJsZXMiXS5sZW5ndGgrJyI+JyxTZVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24odW4scW4pe2t0PXpvKFEsLTEsIi4uL3RhYmxlcy90YWJsZSIr'@;
put 'KHkrMSkrIl8iK3FuKyIueG1sIixIaS5UQUJMRSkscmVbcmUubGVuZ3RoXT0nPHRhYmxlUGFydCByOmlkPSJySWQnK2t0KyciLz4nfSkscmVbcmUubGVuZ3RoXT0iPC90YWJsZVBhcnRzPiIpLHJlLmxlbmd0aD4xJiYocmVbcmUubGVuZ3RoXT0iPC93b3Jrc2hlZXQ+IixyZVsxXT1yZVsxXS5y'@;
put 'ZXBsYWNlKCIvPiIsIj4iKSkscmUuam9pbigiIil9ZnVuY3Rpb24gJEkoeSxQLEwsUSl7dmFyIHJlPWZ1bmN0aW9uIFB2KHksUCxMKXt2YXIgUT1mcigxNDUpLHJlPShMWyIhcm93cyJdfHxbXSlbeV18fHt9O1Eud3JpdGVfc2hpZnQoNCx5KSxRLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGdlPTMy'@;
put 'MDtyZS5ocHg/Z2U9MjAqajIocmUuaHB4KTpyZS5ocHQmJihnZT0yMCpyZS5ocHQpLFEud3JpdGVfc2hpZnQoMixnZSksUS53cml0ZV9zaGlmdCgxLDApO3ZhciBfZT0wO3JlLmxldmVsJiYoX2V8PXJlLmxldmVsKSxyZS5oaWRkZW4mJihfZXw9MTYpLChyZS5ocHh8fHJlLmhwdCkmJihfZXw9'@;
put 'MzIpLFEud3JpdGVfc2hpZnQoMSxfZSksUS53cml0ZV9zaGlmdCgxLDApO3ZhciB2ZT0wLFNlPVEubDtRLmwrPTQ7Zm9yKHZhciBIZT17cjp5LGM6MH0sQmU9MDtCZTwxNjsrK0JlKWlmKCEoUC5zLmM+QmUrMTw8MTB8fFAuZS5jPEJlPDwxMCkpe2Zvcih2YXIgR2U9LTEsbnQ9LTEsZHQ9QmU8'@;
put 'PDEwO2R0PEJlKzE8PDEwOysrZHQpSGUuYz1kdCwoQXJyYXkuaXNBcnJheShMKT8oTFtIZS5yXXx8W10pW0hlLmNdOkxbZGkoSGUpXSkmJihHZTwwJiYoR2U9ZHQpLG50PWR0KTtHZTwwfHwoKyt2ZSxRLndyaXRlX3NoaWZ0KDQsR2UpLFEud3JpdGVfc2hpZnQoNCxudCkpfXZhciBjdD1RLmw7'@;
put 'cmV0dXJuIFEubD1TZSxRLndyaXRlX3NoaWZ0KDQsdmUpLFEubD1jdCxRLmxlbmd0aD5RLmw/US5zbGljZSgwLFEubCk6UX0oUSxMLFApOyhyZS5sZW5ndGg+MTd8fChQWyIhcm93cyJdfHxbXSlbUV0pJiZ1aSh5LCJCcnRSb3dIZHIiLHJlKX12YXIgcUk9SmMsS0k9RDE7ZnVuY3Rpb24galMo'@;
put 'eSl7cmV0dXJuW2EwKHkpLG1hKHkpLCJuIl19dmFyIGxMPUpjLFlTPUQxLHFTPVsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0sZW89WyJBbnkiLCJXaG9sZSIsIkRlY2ltYWwiLCJMaXN0IiwiRGF0ZSIsIlRpbWUiLCJMZW5ndGgiLCJDdXN0b20iXSxC'@;
put 'dj1bIklOIiwiT1QiLCJFUSIsIk5FIiwiR1QiLCJMVCIsIkdFIiwiTEUiXTtmdW5jdGlvbiB3TCh5KXt2YXIgUD1mcig0KSxMPVtQXSxRPWVvLmluZGV4T2YoeS50KTtpZihRPDApdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIit5LnQpO3ZhciBn'@;
put 'ZT1Cdi5pbmRleE9mKHkub3ApO3N3aXRjaChRKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNzpnZT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PWdlKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIreS5vcCsiIGZvciAiK3kudCl9UC53cml0ZV9zaGlmdCgxLDB8USksUC53'@;
put 'cml0ZV9zaGlmdCgxLDEpLFAud3JpdGVfc2hpZnQoMSwxMnxnZTw8NCksUC53cml0ZV9zaGlmdCgxLDApLEwucHVzaChmdW5jdGlvbiBaaCh5KXt2YXIgUD15LnNwbGl0KC9ccyosXHMqLyksTD1mcig0KTtMLndyaXRlX3NoaWZ0KDQsUC5sZW5ndGgpO3ZhciBRPVtMXTtyZXR1cm4gUC5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKHJlKXtRLnB1c2goRDEoT2kocmUpKSl9KSxTKFEpfSgic3RyaW5nIj09dHlwZW9mIHkucmVmP3kucmVmOk9vKHkucmVmKSkpO3ZhciBfZT1mcigxNik7X2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRl'@;
put 'X3NoaWZ0KDQsNDI5NDk2NzI5NSksX2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxMLnB1c2goX2UpO3ZhciB2ZT1mcig4KTt2ZS53cml0ZV9zaGlmdCg0LDApLHZlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFNlPTE7c3dpdGNoKHkudCl7Y2FzZSJBbnkiOkwucHVzaCh2ZSksTC5wdXNoKHZl'@;
put 'KTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZihudWxsIT15LnZ8fG51bGwhPXkuZilMLnB1c2goIm51bWJlciI9PXR5cGVvZiB5LnY/bXYoeS52KTpVMyhudWxsPT15LnY/eS5mOnkudikpO2Vsc2V7aWYobnVsbD09eS5taW58fG51bGw9PXkubWF4KXRo'@;
put 'cm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIreS50O0wucHVzaCgibnVtYmVyIj09dHlwZW9mIHkubWluP212KHkubWluKTpVMyh5Lm1pbikpLEwucHVzaCgibnVtYmVyIj09dHlwZW9mIHkubWF4P212KHkubWF4'@;
put 'KTpVMyh5Lm1heCkpLFNlPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT15Lmwpe0wucHVzaChhUyh5Lmwuam9pbigiLCIpKSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9eS5mKXtMLnB1c2goVTMoeS5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9u'@;
put 'OiBgZmAiKygiTGlzdCI9PXkudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQgZm9yIFR5cGUgIit5LnQ7ZGVmYXVsdDp0aHJvdyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIit5LnR9cmV0dXJuIDE9PVNlJiZMLnB1c2godmUpLFMoTCl9ZnVuY3Rpb24gU0wo'@;
put 'eSxQLEwsUSxyZSxnZSxfZSl7aWYodm9pZCAwPT09UC52JiZudWxsPT1QLnN8fCJ6Ij09PVAudCYmIXJlLnNoZWV0U3R1YnMpcmV0dXJuITE7dmFyIHZlPSIiO3N3aXRjaChQLnQpe2Nhc2UiYiI6dmU9UC52PyIxIjoiMCI7YnJlYWs7Y2FzZSJkIjooUD1vbihQKSkuej1QLnp8fHcuX3RhYmxl'@;
put 'WzE0XSxQLnY9VWUoSHQoUC52KSksUC50PSJuIjticmVhaztjYXNlIm4iOmNhc2UiZSI6dmU9IiIrUC52O2JyZWFrO2RlZmF1bHQ6dmU9UC52fXZhciBTZT17cjpMLGM6UX07c3dpdGNoKFNlLnM9Z3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMsUCxyZSksUC5sJiZnZVsiIWxpbmtzIl0u'@;
put 'cHVzaChbZGkoU2UpLFAubF0pLFAuYyYmZ2VbIiFjb21tZW50cyJdLnB1c2goW2RpKFNlKSxQLmNdKSxQLnQpe2Nhc2UicyI6Y2FzZSJzdHIiOmlmKHJlLmJvb2tTU1Qpe2lmKHZlPXd2KHJlLlN0cmluZ3MsUC52LFAuUj9QLnI9SmgoUC5SKTpudWxsLHJlLnJldlN0cmluZ3MpLFAuUilmb3Io'@;
put 'dmFyIEhlPTA7SGU8UC5SLmxlbmd0aDsrK0hlKVAuUltIZV0ucyYmZ3UocmUuY2VsbFhmcyxyZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlAuUltIZV0uc30scmUpO1NlLnQ9InMiLFNlLnY9dmUsX2U/dWkoeSwiQnJ0U2hvcnRJc3N0IixmdW5jdGlvbiB0TCh5LFAsTCl7cmV0dXJuIG51'@;
put 'bGw9PUwmJihMPWZyKDgpKSxLYyhQLEwpLEwud3JpdGVfc2hpZnQoNCxQLnYpLEx9KDAsU2UpKTp1aSh5LCJCcnRDZWxsSXNzdCIsZnVuY3Rpb24gTnYoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcigxMikpLEZpKFAsTCksTC53cml0ZV9zaGlmdCg0LFAudiksTH0oMCxTZSkpfWVsc2Ug'@;
put 'U2UudD0ic3RyIixfZT91aSh5LCJCcnRTaG9ydFN0IixmdW5jdGlvbiByWSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDgrNCp5LnYubGVuZ3RoKSksS2MoUCxMKSxuYyh5LnYsTCksTC5sZW5ndGg+TC5sP0wuc2xpY2UoMCxMLmwpOkx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsU3QiLGZ1'@;
put 'bmN0aW9uIHU1KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoMTIrNCp5LnYubGVuZ3RoKSksRmkoUCxMKSxuYyh5LnYsTCksTC5sZW5ndGg+TC5sP0wuc2xpY2UoMCxMLmwpOkx9KFAsU2UpKTtyZXR1cm4hMDtjYXNlIm4iOnJldHVybiBQLnY9PSgwfFAudikmJlAudj4tMWUzJiZQLnY8'@;
put 'MWUzP19lP3VpKHksIkJydFNob3J0UmsiLGZ1bmN0aW9uIG9MKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoOCkpLEtjKFAsTCksU3MoeS52LEwpLEx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsUmsiLGZ1bmN0aW9uIG5ZKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoMTIpKSxGaShQ'@;
put 'LEwpLFNzKHkudixMKSxMfShQLFNlKSk6X2U/dWkoeSwiQnJ0U2hvcnRSZWFsIixmdW5jdGlvbiByTCh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDEyKSksS2MoUCxMKSxGYyh5LnYsTCksTH0oUCxTZSkpOnVpKHksIkJydENlbGxSZWFsIixmdW5jdGlvbiBWdih5LFAsTCl7cmV0dXJu'@;
put 'IG51bGw9PUwmJihMPWZyKDE2KSksRmkoUCxMKSxGYyh5LnYsTCksTH0oUCxTZSkpLCEwO2Nhc2UiYiI6cmV0dXJuIFNlLnQ9ImIiLF9lP3VpKHksIkJydFNob3J0Qm9vbCIsZnVuY3Rpb24gSHYoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig1KSksS2MoUCxMKSxMLndyaXRlX3NoaWZ0'@;
put 'KDEseS52PzE6MCksTH0oUCxTZSkpOnVpKHksIkJydENlbGxCb29sIixmdW5jdGlvbiBGUyh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDkpKSxGaShQLEwpLEwud3JpdGVfc2hpZnQoMSx5LnY/MTowKSxMfShQLFNlKSksITA7Y2FzZSJlIjpyZXR1cm4gU2UudD0iZSIsX2U/dWkoeSwi'@;
put 'QnJ0U2hvcnRFcnJvciIsZnVuY3Rpb24gVlMoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4KSksS2MoUCxMKSxMLndyaXRlX3NoaWZ0KDEseS52KSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgxLDApLEx9KFAsU2UpKTp1aSh5LCJCcnRDZWxsRXJyb3IiLGZ1bmN0aW9u'@;
put 'IEhTKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoOSkpLEZpKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudiksTH0oUCxTZSkpLCEwfXJldHVybiBfZT91aSh5LCJCcnRTaG9ydEJsYW5rIixmdW5jdGlvbiBlTCh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDQpKSxLYyhQLEwpfSgw'@;
put 'LFNlKSk6dWkoeSwiQnJ0Q2VsbEJsYW5rIixmdW5jdGlvbiBRSSh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDgpKSxGaShQLEwpfSgwLFNlKSksITB9ZnVuY3Rpb24gQUwoeSxQLEwsUSl7dmFyIHJlPXdjKCksZ2U9TC5TaGVldE5hbWVzW3ldLF9lPUwuU2hlZXRzW2dlXXx8e30sdmU9'@;
put 'Z2U7dHJ5e0wmJkwuV29ya2Jvb2smJih2ZT1MLldvcmtib29rLlNoZWV0c1t5XS5Db2RlTmFtZXx8dmUpfWNhdGNoe312YXIgU2U9T2koX2VbIiFyZWYiXXx8IkExIik7aWYoU2UuZS5jPjE2MzgzfHxTZS5lLnI+MTA0ODU3NSl7aWYoUC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhf'@;
put 'ZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtTZS5lLmM9TWF0aC5taW4oU2UuZS5jLDE2MzgzKSxTZS5lLnI9TWF0aC5taW4oU2UuZS5jLDEwNDg1NzUpfXJldHVybiBfZVsiIWxpbmtzIl09W10sX2VbIiFjb21tZW50cyJdPVtdLHVpKHJl'@;
put 'LCJCcnRCZWdpblNoZWV0IiksKEwudmJhcmF3fHxfZVsiIW91dGxpbmUiXSkmJnVpKHJlLCJCcnRXc1Byb3AiLGZ1bmN0aW9uICQxKHksUCxMKXtudWxsPT1MJiYoTD1mcig4NCs0KnkubGVuZ3RoKSk7dmFyIFE9MTkyO1AmJihQLmFib3ZlJiYoUSY9LTY1KSxQLmxlZnQmJihRJj0tMTI5KSks'@;
put 'TC53cml0ZV9zaGlmdCgxLFEpO2Zvcih2YXIgcmU9MTtyZTwzOysrcmUpTC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSMih7YXV0bzoxfSxMKSxMLndyaXRlX3NoaWZ0KC00LC0xKSxMLndyaXRlX3NoaWZ0KC00LC0xKSxzbSh5LEwpLEwuc2xpY2UoMCxMLmwpfSh2ZSxfZVsiIW91dGxpbmUi'@;
put 'XSkpLHVpKHJlLCJCcnRXc0RpbSIsS0koU2UpKSxmdW5jdGlvbiBlTSh5LFAsTCl7dWkoeSwiQnJ0QmVnaW5Xc1ZpZXdzIiksdWkoeSwiQnJ0QmVnaW5Xc1ZpZXciLGZ1bmN0aW9uIG1MKHksUCxMKXtudWxsPT1MJiYoTD1mcigzMCkpO3ZhciBRPTkyNDtyZXR1cm4oKChQfHx7fSkuVmlld3N8'@;
put 'fFtdKVswXXx8e30pLlJUTCYmKFF8PTMyKSxobih5WyIhZ3JpZGxpbmVzIl0pJiYoUSY9LTUpLGhuKCgoKFB8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuZ3JpZCkmJihRJj0tNSksTC53cml0ZV9zaGlmdCgyLFEpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0'@;
put 'ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwxMDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoNCww'@;
put 'KSxMfShQLEwpKSxQWyIhZnJlZXplIl0mJnVpKHksIkJydFBhbmUiLGZ1bmN0aW9uICRTKHkpe3ZhciBQPXNzKHlbIiFmcmVlemUiXSksTD1mcigyOSk7cmV0dXJuIEwud3JpdGVfc2hpZnQoOCxQLmMsImYiKSxMLndyaXRlX3NoaWZ0KDgsUC5yLCJmIiksTC53cml0ZV9zaGlmdCg0LFAuciks'@;
put 'TC53cml0ZV9zaGlmdCg0LFAuYyksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMSwzKSxMfShQKSksUFsiIXNlbCJdJiZ1aSh5LCJCcnRTZWwiLGZ1bmN0aW9uIGRMKHksUCl7dmFyIEw9ZnIoMzYpLFE9eS5jZWxsO2lmKCFRKXtpZigheS5yYW5nZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'Ik11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7UT1kaShXcyh5LnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciByZT0ic3RyaW5nIj09dHlwZW9mIFE/c3MoUSk6UTtpZihQKXt2YXIgZ2U9InN0cmluZyI9PXR5cGVvZiBQP3NzKFApOlA7TC53cml0ZV9z'@;
put 'aGlmdCg0LHJlLnI+PWdlLnImJnJlLmM+PWdlLmM/MDpyZS5yPj1nZS5yJiZyZS5jPGdlLmM/MjpyZS5yPGdlLnImJnJlLmM+PWdlLmM/MTozKX1lbHNlIEwud3JpdGVfc2hpZnQoNCwzKTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LHJlLnIpLEwud3JpdGVfc2hpZnQoNCxyZS5jKSxMLndyaXRl'@;
put 'X3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDEpLEwud3JpdGVfc2hpZnQoNCxyZS5yKSxMLndyaXRlX3NoaWZ0KDQscmUuciksTC53cml0ZV9zaGlmdCg0LHJlLmMpLEwud3JpdGVfc2hpZnQoNCxyZS5jKSxMfShQWyIhc2VsIl0sUFsiIWZyZWV6ZSJdKSksdWkoeSwiQnJ0RW5kV3NWaWV3'@;
put 'IiksdWkoeSwiQnJ0RW5kV3NWaWV3cyIpfShyZSxfZSxMLldvcmtib29rKSxmdW5jdGlvbiBYUyh5LFApeyFQfHwhUFsiIWNvbHMiXXx8KHVpKHksIkJydEJlZ2luQ29sSW5mb3MiKSxQWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oTCxRKXtMJiZ1aSh5LCJCcnRDb2xJbmZvIixmdW5jdGlv'@;
put 'biBpWSh5LFAsTCl7bnVsbD09TCYmKEw9ZnIoMTgpKTt2YXIgUT1ZZCh5LFApO0wud3JpdGVfc2hpZnQoLTQseSksTC53cml0ZV9zaGlmdCgtNCx5KSxMLndyaXRlX3NoaWZ0KDQsMjU2KihRLndpZHRofHwxMCkpLEwud3JpdGVfc2hpZnQoNCwwKTt2YXIgcmU9MDtyZXR1cm4gUC5oaWRkZW4m'@;
put 'JihyZXw9MSksIm51bWJlciI9PXR5cGVvZiBRLndpZHRoJiYocmV8PTIpLFAubGV2ZWwmJihyZXw9UC5sZXZlbDw8OCksTC53cml0ZV9zaGlmdCgyLHJlKSxMfShRLEwpKX0pLHVpKHksIkJydEVuZENvbEluZm9zIikpfShyZSxfZSksZnVuY3Rpb24gTUwoeSxQLEwsUSl7dmFyIHJlPU9pKFBb'@;
put 'IiFyZWYiXXx8IkExIiksX2U9IiIsdmU9W107dWkoeSwiQnJ0QmVnaW5TaGVldERhdGEiKTt2YXIgU2U9QXJyYXkuaXNBcnJheShQKSxIZT1yZS5lLnI7UFsiIXJvd3MiXSYmKEhlPU1hdGgubWF4KHJlLmUucixQWyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBCZT1yZS5zLnI7QmU8PUhl'@;
put 'OysrQmUpe19lPUhzKEJlKSwkSSh5LFAscmUsQmUpO3ZhciBHZT0hMTtpZihCZTw9cmUuZS5yKWZvcih2YXIgbnQ9cmUucy5jO250PD1yZS5lLmM7KytudCl7QmU9PT1yZS5zLnImJih2ZVtudF09TnMobnQpKTt2YXIgZHQ9U2U/KFBbQmVdfHxbXSlbbnRdOlBbdmVbbnRdK19lXTtHZT0hIWR0'@;
put 'JiZTTCh5LGR0LEJlLG50LFEsUCxHZSl9fXVpKHksIkJydEVuZFNoZWV0RGF0YSIpfShyZSxfZSwwLFApLGZ1bmN0aW9uIGs2KHksUCl7UFsiIXByb3RlY3QiXSYmdWkoeSwiQnJ0U2hlZXRQcm90ZWN0aW9uIixmdW5jdGlvbiBfTCh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcig2NikpLFAu'@;
put 'd3JpdGVfc2hpZnQoMix5LnBhc3N3b3JkP2FDKHkucGFzc3dvcmQpOjApLFAud3JpdGVfc2hpZnQoNCwxKSxbWyJvYmplY3RzIiwhMV0sWyJzY2VuYXJpb3MiLCExXSxbImZvcm1hdENlbGxzIiwhMF0sWyJmb3JtYXRDb2x1bW5zIiwhMF0sWyJmb3JtYXRSb3dzIiwhMF0sWyJpbnNlcnRDb2x1'@;
put 'bW5zIiwhMF0sWyJpbnNlcnRSb3dzIiwhMF0sWyJpbnNlcnRIeXBlcmxpbmtzIiwhMF0sWyJkZWxldGVDb2x1bW5zIiwhMF0sWyJkZWxldGVSb3dzIiwhMF0sWyJzZWxlY3RMb2NrZWRDZWxscyIsITFdLFsic29ydCIsITBdLFsiYXV0b0ZpbHRlciIsITBdLFsicGl2b3RUYWJsZXMiLCEwXSxb'@;
put 'InNlbGVjdFVubG9ja2VkQ2VsbHMiLCExXV0uZm9yRWFjaChmdW5jdGlvbihMKXtQLndyaXRlX3NoaWZ0KDQsTFsxXT9udWxsPT15W0xbMF1dfHx5W0xbMF1dPzA6MTpudWxsIT15W0xbMF1dJiZ5W0xbMF1dPzA6MSl9KSxQfShQWyIhcHJvdGVjdCJdKSl9KHJlLF9lKSxmdW5jdGlvbiBRUyh5'@;
put 'LFAsTCxRKXtpZihQWyIhYXV0b2ZpbHRlciJdKXt2YXIgcmU9UFsiIWF1dG9maWx0ZXIiXSxnZT0ic3RyaW5nIj09dHlwZW9mIHJlLnJlZj9yZS5yZWY6T28ocmUucmVmKTtMLldvcmtib29rfHwoTC5Xb3JrYm9vaz17U2hlZXRzOltdfSksTC5Xb3JrYm9vay5OYW1lc3x8KEwuV29ya2Jvb2su'@;
put 'TmFtZXM9W10pO3ZhciBfZT1MLldvcmtib29rLk5hbWVzLHZlPVdzKGdlKTt2ZS5zLnI9PXZlLmUuciYmKHZlLmUucj1XcyhQWyIhcmVmIl0pLmUucixnZT1Pbyh2ZSkpO2Zvcih2YXIgU2U9MDtTZTxfZS5sZW5ndGg7KytTZSl7dmFyIEhlPV9lW1NlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFi'@;
put 'YXNlIj09SGUuTmFtZSYmSGUuU2hlZXQ9PVEpe0hlLlJlZj0iJyIrTC5TaGVldE5hbWVzW1FdKyInISIrZ2U7YnJlYWt9fVNlPT1fZS5sZW5ndGgmJl9lLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6USxSZWY6IiciK0wuU2hlZXROYW1lc1tRXSsiJyEiK2dlfSks'@;
put 'dWkoeSwiQnJ0QmVnaW5BRmlsdGVyIixEMShPaShnZSkpKSx1aSh5LCJCcnRFbmRBRmlsdGVyIil9fShyZSxfZSxMLHkpLGZ1bmN0aW9uIHhMKHksUCl7IVB8fCFQWyIhbWVyZ2VzIl18fCh1aSh5LCJCcnRCZWdpbk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIFdTKHksUCl7cmV0dXJuIG51bGw9PVAm'@;
put 'JihQPWZyKDQpKSxQLndyaXRlX3NoaWZ0KDQseSksUH0oUFsiIW1lcmdlcyJdLmxlbmd0aCkpLFBbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3VpKHksIkJydE1lcmdlQ2VsbCIsWVMoTCkpfSksdWkoeSwiQnJ0RW5kTWVyZ2VDZWxscyIpKX0ocmUsX2UpLGZ1bmN0aW9uIGtMKHks'@;
put 'UCl7aWYoUCl7dWkoeSwiQnJ0QmVnaW5EVmFscyIsZnVuY3Rpb24gS1MoeSxQKXtudWxsPT1QJiYoUD1mcigxOCkpLFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIEw9MCxRPTA7UTx5Lmxl'@;
put 'bmd0aDsrK1EpKCh5W1FdfHx7fSkucmVmfHx7fSkucyYmeVtRXS5yZWYucy5jPDB8fCsrTDtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LEwpLFB9KFApKTtmb3IodmFyIEw9MDtMPFAubGVuZ3RoOysrTCkoKFBbTF18fHt9KS5yZWZ8fHt9KS5zJiZQW0xdLnJlZi5zLmM8MHx8dWkoeSwiQnJ0RFZh'@;
put 'bCIsd0woUFtMXSkpO3VpKHksIkJydEVuZERWYWxzIil9fShyZSxfZVsiIXZhbGlkYXRpb25zIl0pLGZ1bmN0aW9uIEVMKHksUCxMKXtQWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKFFbMV0uVGFyZ2V0KXt2YXIgcmU9em8oTCwtMSxRWzFdLlRhcmdldC5yZXBsYWNlKC8jLiok'@;
put 'LywiIiksSGkuSExJTkspO3VpKHksIkJydEhMaW5rIixmdW5jdGlvbiBjTCh5LFApe3ZhciBMPWZyKDUwKzQqKHlbMV0uVGFyZ2V0Lmxlbmd0aCsoeVsxXS5Ub29sdGlwfHwiIikubGVuZ3RoKSk7RDEoe3M6c3MoeVswXSksZTpzcyh5WzBdKX0sTCksUGMoInJJZCIrUCxMKTt2YXIgUT15WzFd'@;
put 'LlRhcmdldC5pbmRleE9mKCIjIik7cmV0dXJuIG5jKCgtMT09UT8iIjp5WzFdLlRhcmdldC5zbGljZShRKzEpKXx8IiIsTCksbmMoeVsxXS5Ub29sdGlwfHwiIixMKSxuYygiIixMKSxMLnNsaWNlKDAsTC5sKX0oUSxyZSkpfX0pLGRlbGV0ZSBQWyIhbGlua3MiXX0ocmUsX2UsUSksX2VbIiFt'@;
put 'YXJnaW5zIl0mJnVpKHJlLCJCcnRNYXJnaW5zIixmdW5jdGlvbiBwTCh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcig0OCkpLGRmKHkpLHFTLmZvckVhY2goZnVuY3Rpb24oTCl7RmMoeVtMXSxQKX0pLFB9KF9lWyIhbWFyZ2lucyJdKSksKCFQfHxQLmlnbm9yZUVDfHxudWxsPT1QLmlnbm9y'@;
put 'ZUVDKSYmZnVuY3Rpb24gSlMoeSxQKXshUHx8IVBbIiFyZWYiXXx8KHVpKHksIkJydEJlZ2luQ2VsbElnbm9yZUVDcyIpLHVpKHksIkJydENlbGxJZ25vcmVFQyIsZnVuY3Rpb24gdkwoeSl7dmFyIFA9ZnIoMjQpO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsNCksUC53cml0ZV9zaGlmdCg0LDEp'@;
put 'LEQxKHksUCksUH0oT2koUFsiIXJlZiJdKSkpLHVpKHksIkJydEVuZENlbGxJZ25vcmVFQ3MiKSl9KHJlLF9lKSxmdW5jdGlvbiBvWSh5LFAsTCxRKXtpZihQWyIhY29tbWVudHMiXS5sZW5ndGg+MCl7dmFyIHJlPXpvKFEsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhMKzEpKyIudm1s'@;
put 'IixIaS5WTUwpO3VpKHksIkJydExlZ2FjeURyYXdpbmciLFBjKCJySWQiK3JlKSksUFsiIWxlZ2FjeSJdPXJlfX0ocmUsX2UseSxRKSx1aShyZSwiQnJ0RW5kU2hlZXQiKSxyZS5lbmQoKX1mdW5jdGlvbiBBNih5KXt2YXIgUSxQPVtdLEw9eS5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyh5Lm1h'@;
put 'dGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBfZT1nZS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO19lJiYoUFsrX2VbMV1dPUw/K19lWzJdOl9lWzJdKX0pO3Zh'@;
put 'ciByZT14cigoeS5tYXRjaCgvPGM6Zm9ybWF0Q29kZT4oW1xzXFNdKj8pPFwvYzpmb3JtYXRDb2RlPi8pfHxbIiIsIkdlbmVyYWwiXSlbMV0pO3JldHVybih5Lm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtRPWdlLnJlcGxhY2UoLzwuKj8+'@;
put 'L2csIiIpfSksW1AscmUsUV19SGkuQ0hBUlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLEhpLkNIQVJURVg9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25z'@;
put 'aGlwcy9jaGFydEV4Ijt2YXIgZjU9LzwoPzpcdys6KT9jaGFydD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y2hhcnQ+LyxqYz0vPCg/Olx3KzopP3Bsb3RBcmVhPihbXHNcU10qPyk8XC8oPzpcdys6KT9wbG90QXJlYT4vLGdmPS88KD86XHcrOik/bGVnZW5kPihbXHNcU10qPyk8XC8oPzpcdys6'@;
put 'KT9sZWdlbmQ+LyxUNj0vPCg/Olx3KzopP3RpdGxlPihbXHNcU10qPyk8XC8oPzpcdys6KT90aXRsZT4vO2Z1bmN0aW9uIG0wKHksUCxMLFEscmUsZ2UsX2UsdmUpe3ZhciBTZT1nZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIXkpcmV0dXJuIGdlO19lJiZfZS5BbmNob3ImJihTZVsiIXBvcyJd'@;
put 'PXNmKF9lLkFuY2hvcix2ZSksU2VbIiFwb3NUeXBlIl09X2UuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksU2VbIiFhYnNwb3MiXT1zZihfZS5BbmNob3IsdmUpLFNlWyIhcmVscG9zIl09S20oX2UuQW5jaG9yLHZlKSksU2VbIiFwbG90Il09W107dmFyIEhlPSIiLEJlPSIiLEdl'@;
put 'PXkubWF0Y2goZjUpO0dlPyhIZT15LnNsaWNlKDAsR2UuaW5kZXgpLEJlPXkuc2xpY2UoR2UuaW5kZXgrR2VbMF0ubGVuZ3RoKSk6SGU9QmU9eTt2YXIgbnQ9W10sZHQ9SGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fHkubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fEJlLm1hdGNoKC88YzpsYW5nLio/'@;
put 'Pi8pO3JldHVybiBkdCYmKFNlWyIhbGFuZyJdPShsbihkdFswXSl8fHt9KS52YWx8fCJlbi1VUyIpLEdlJiYoKG50PUdlWzFdLm1hdGNoKFQ2KSkmJmZ1bmN0aW9uIHExKHksUCl7dmFyIEw9IiI7eS5tYXRjaCgvPGM6cmljaD4vKSYmeS5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+'@;
put 'L2csZnVuY3Rpb24oUSxyZSl7TCs9cmV9KSxQWyIhdGl0bGUiXT1MfHwiQ2hhcnQgVGl0bGUifShudFsxXSxTZSksZnVuY3Rpb24gSzMoeSxQKXtpZih5KXt2YXIgTD0wLFE9MCxyZT0iQSIsZ2U9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07eS5yZXBsYWNlKFRyLGZ1bmN0aW9uKF9l'@;
put 'LHZlKXt2YXIgU2U9e3Q6dmUsYzpMLHc6MCxzZXI6W119LEhlPVtdLEJlPShfZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxHZT1CZT9fZS5zbGljZSgwLEJlKTpfZTsic2NhdHRlciI9PXZlJiYoSGU9X2UubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9tKSkmJmxuKEhl'@;
put 'WzBdKSwiYmFyIj09dmUmJihIZT1fZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKFNlLmJhckRpcj0iYmFyIj09bG4oSGVbMF0pLnZhbD8iaCI6InYiKSwoSGU9R2UubWF0Y2goLzxjOmdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKFNlLmdyb3VwaW5nPWxuKEhlWzBdKS52'@;
put 'YWx8fCJzdGFuZGFyZCIpLChfZS5tYXRjaChxMyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXt2YXIgQ3Q9W10sY3Q9e30sYnQ9W107aWYoZHQubWF0Y2goLzxjOnR4Pi8pKXt2YXIgRnQ9QTYoKGR0Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFdfHwiIil8fFtd'@;
put 'O0Z0WzBdJiZGdFswXVswXSYmKGN0Lm5hbWU9RnRbMF1bMF0pLEZ0WzJdJiYoY3QubmFtZXJlZj1GdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXt2YXIgWnQsVHQ9ZHQubWF0Y2gobmV3IFJlZ0V4cCgiPGM6IitrdCsi'@;
put 'PltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7VHQmJigoVHRbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocG4pe1p0PXBuLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksKFR0WzBdLm1hdGNoKC88YzooPzpcdyopQ2FjaGU+W1xzXFNd'@;
put 'Kj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwbil7dmFyIEtuPUE2KHBuKTtnZS5zLnI9Z2Uucy5jPTAsZ2UuZS5jPUwscmU9TnMoTCksS25bMF0uZm9yRWFjaChmdW5jdGlvbih1bixxbil7UFtyZStIcyhxbildPXt0OiJudW1iZXIiPT10eXBlb2YgdW4/'@;
put 'Im4iOiJzIix2OnVuLHo6S25bMV19LFE9cW59KSxnZS5lLnI8USYmKGdlLmUucj1RKSwrK0wsU2UudysrLEN0LnB1c2goa3QpLChLblsyXXx8WnQpJiZidC5wdXNoKEtuWzJdfHxadCksInZhbCI9PWt0JiYoY3Quej1LblsxXXx8IkdlbmVyYWwiKX0pKX0pLChIZT1fZS5tYXRjaCgvPGM6c21v'@;
put 'b3RoKFteXC8+XSopXC8+L20pKSYmKGN0LnNtb290aD1udWxsPT1sbihIZVswXSkudmFsfHx5cihsbihIZVswXSkudmFsKSksY3QuY29scz1DdCxjdC5yYW5nZXM9YnQsU2Uuc2VyLnB1c2goY3QpfSksImRvdWdobnV0Ij09dmUmJihIZT1fZS5tYXRjaCgvPGM6aG9sZVNpemUoW15cLz5dKilc'@;
put 'Lz4vbSkpJiYoU2UuaG9sZT0obG4oSGVbMF0pLnZhbHx8MTApLzEwMCksUFsiIXBsb3QiXS5wdXNoKFNlKX0pLEw+MCYmKFBbIiFyZWYiXT1PbyhnZSkpfX0oKEdlWzFdLm1hdGNoKGpjKXx8W10pWzFdLFNlKSxudWxsIT0obnQ9R2VbMV0ubWF0Y2goZ2YpKSYmZnVuY3Rpb24gVEwoeSxQKXt2'@;
put 'YXIgTDtQWyIhbGVnZW5kIl09e3BvczoiciJ9LChMPXkubWF0Y2goLzxjOmxlZ2VuZFBvcyhbXlwvPl0qKVwvPi9tKSkmJihQWyIhbGVnZW5kIl0ucG9zPWxuKExbMF0pLnZhbHx8InIiKX0obnRbMF0sU2UpKSxTZX12YXIgVHI9LzxjOigoPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRl'@;
put 'cnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT8pQ2hhcnRbXj5dKj4oW1xzXFNdKj8pPFwvYzooPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT9DaGFydD4vZ20scTM9'@;
put 'LzxjOnNlcj4oW1xzXFNdKj8pPFwvYzpzZXI+L2dtO0hpLkNTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiO3ZhciBYMz1TcigiY2hhcnRzaGVldCIsbnVsbCx7eG1sbnM6aXMubWFpblswXSwi'@;
put 'eG1sbnM6ciI6aXMucn0pO2Z1bmN0aW9uIFEzKHksUCxMLFEpe3ZhciByZT1bQm4sWDNdO3JldHVybiByZS5wdXNoKCI8c2hlZXRQci8+IikscmUucHVzaCgnPHNoZWV0Vmlld3M+PHNoZWV0VmlldyB6b29tU2NhbGU9IjEwMCIgd29ya2Jvb2tWaWV3SWQ9IjAiIHpvb21Ub0ZpdD0iMSIvPjwv'@;
put 'c2hlZXRWaWV3cz4nKSxyZVtyZS5sZW5ndGhdPVNyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksem8oUSwtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKHkrMSkrIi54bWwiLEhpLkRSQVcpLHJlLmxlbmd0aD4yJiYocmVbcmUubGVuZ3RoXT0iPC9jaGFydHNoZWV0PiIscmVbMV09'@;
put 'cmVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLHJlLmpvaW4oIiIpfWZ1bmN0aW9uIG5wKCl7dmFyIHk9d2MoKTtyZXR1cm4gdWkoeSwiQnJ0QmVnaW5TaGVldCIpLHVpKHksIkJydEVuZFNoZWV0IikseS5lbmQoKX12YXIgSzI9W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRv'@;
put 'Q29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsiZGF0ZTE5MDQiLCExLCJib29sIl0sWyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRl'@;
put 'clByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEsImJvb2wiXSxbInJlZnJlc2hBbGxDb25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExp'@;
put 'bmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVjdHMiLCJhbGwiXSxbInNob3dQaXZvdENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3Mi'@;
put 'LCJ1c2VyU2V0Il1dLHRNPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0sWyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJtaW5pbWl6ZWQiLCExLCJib29sIl0sWyJzaG93SG9yaXpvbnRhbFNjcm9sbCIsITAsImJvb2wiXSxbInNob3dT'@;
put 'aGVldFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3JvbGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1dLG5NPVtdLHJNPVtbImNhbGNDb21wbGV0ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIsImF1dG8iXSxbImNhbGNP'@;
put 'blNhdmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUiXSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRlIiwiZmFsc2UiXSxbIml0ZXJhdGVDb3VudCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRhIiwiMC4wMDEiXSxbInJl'@;
put 'Zk1vZGUiLCJBMSJdXTtmdW5jdGlvbiBqdih5LFApe2Zvcih2YXIgTD0wO0whPXkubGVuZ3RoOysrTClmb3IodmFyIFE9eVtMXSxyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXt2YXIgZ2U9UFtyZV07aWYobnVsbD09UVtnZVswXV0pUVtnZVswXV09Z2VbMV07ZWxzZSBzd2l0Y2goZ2VbMl0pe2Nh'@;
put 'c2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBRW2dlWzBdXSYmKFFbZ2VbMF1dPXlyKFFbZ2VbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10eXBlb2YgUVtnZVswXV0mJihRW2dlWzBdXT1wYXJzZUludChRW2dlWzBdXSwxMCkpfX19ZnVuY3Rpb24genYoeSxQKXtmb3IodmFyIEw9'@;
put 'MDtMIT1QLmxlbmd0aDsrK0wpe3ZhciBRPVBbTF07aWYobnVsbD09eVtRWzBdXSl5W1FbMF1dPVFbMV07ZWxzZSBzd2l0Y2goUVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIHlbUVswXV0mJih5W1FbMF1dPXlyKHlbUVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5'@;
put 'cGVvZiB5W1FbMF1dJiYoeVtRWzBdXT1wYXJzZUludCh5W1FbMF1dLDEwKSl9fX1mdW5jdGlvbiBVdih5KXt6dih5LldCUHJvcHMsSzIpLHp2KHkuQ2FsY1ByLHJNKSxqdih5LldCVmlldyx0TSksanYoeS5TaGVldHMsbk0pLFozLmRhdGUxOTA0PXlyKHkuV0JQcm9wcy5kYXRlMTkwNCl9dmFy'@;
put 'IG9NPSJdWyo/L1xcIi5zcGxpdCgiIik7ZnVuY3Rpb24gWnYoeSxQKXtpZih5Lmxlbmd0aD4zMSl7aWYoUClyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgTD0hMDtyZXR1cm4gb00uZm9yRWFjaChmdW5jdGlvbihRKXtp'@;
put 'ZigtMSE9eS5pbmRleE9mKFEpKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtMPSExfX0pLEx9dmFyIHNZPS88XHcrOndvcmtib29rLyxsWT1Tcigid29ya2Jvb2siLG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5z'@;
put 'OnIiOmlzLnJ9KTtmdW5jdGlvbiBSTCh5LFApe3ZhciBMPVB8fHt9LFE9W0JuXTtRW1EubGVuZ3RoXT1sWTt2YXIgcmU9eS5Xb3JrYm9vayYmKHkuV29ya2Jvb2suTmFtZXN8fFtdKS5sZW5ndGg+MDt5Lldvcmtib29rJiZ5Lldvcmtib29rLk1vZGlmeSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9u'@;
put 'IElMKHkpe3ZhciBQPXt9O3JldHVybiB5Lndhcm4mJihQLnJlYWRPbmx5UmVjb21tZW5kZWQ9MSksUC51c2VyTmFtZT15LnVzZXJ8fCJTaGVldCBKUyIseS5lbmNyeXB0aW9uJiYoeS5lbmNyeXB0aW9uLmFsZ28mJihQLmFsZ29yaXRobU5hbWU9eS5lbmNyeXB0aW9uLmFsZ28pLHkuZW5jcnlw'@;
put 'dGlvbi5oYXNoJiYoUC5oYXNoVmFsdWU9eS5lbmNyeXB0aW9uLmhhc2gpLHkuZW5jcnlwdGlvbi5zYWx0JiYoUC5zYWx0VmFsdWU9eS5lbmNyeXB0aW9uLnNhbHQpLHkuZW5jcnlwdGlvbi5zcGluJiYoUC5zcGluQ291bnQ9eS5lbmNyeXB0aW9uLnNwaW4pKSxTcigiZmlsZVNoYXJpbmciLG51'@;
put 'bGwsUCl9KHkuV29ya2Jvb2suTW9kaWZ5KSk7dmFyIGdlPXtjb2RlTmFtZToiVGhpc1dvcmtib29rIn07eS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5XQlByb3BzJiYoSzIuZm9yRWFjaChmdW5jdGlvbihIZSl7bnVsbCE9eS5Xb3JrYm9vay5XQlByb3BzW0hlWzBdXSYmeS5Xb3JrYm9vay5XQlBy'@;
put 'b3BzW0hlWzBdXSE9SGVbMV0mJihnZVtIZVswXV09eS5Xb3JrYm9vay5XQlByb3BzW0hlWzBdXSl9KSx5Lldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUmJihnZS5jb2RlTmFtZT15Lldvcmtib29rLldCUHJvcHMuQ29kZU5hbWUsZGVsZXRlIGdlLkNvZGVOYW1lKSksUVtRLmxlbmd0aF09U3Io'@;
put 'Indvcmtib29rUHIiLG51bGwsZ2UpLHkuV29ya2Jvb2smJnkuV29ya2Jvb2suUHJvdGVjdGlvbiYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIExMKHkpe3ZhciBQPXt9O3JldHVybiB5LmxvY2tTdHJ1Y3R1cmUmJihQLmxvY2tTdHJ1Y3R1cmU9MSkseS5sb2NrV2luZG93cyYmKFAubG9ja1dpbmRv'@;
put 'd3M9MSkseS5lbmNyeXB0aW9uJiYoeS5lbmNyeXB0aW9uLmFsZ28mJihQLndvcmtib29rQWxnb3JpdGhtTmFtZT15LmVuY3J5cHRpb24uYWxnbykseS5lbmNyeXB0aW9uLmhhc2gmJihQLndvcmtib29rSGFzaFZhbHVlPXkuZW5jcnlwdGlvbi5oYXNoKSx5LmVuY3J5cHRpb24uc2FsdCYmKFAu'@;
put 'd29ya2Jvb2tTYWx0VmFsdWU9eS5lbmNyeXB0aW9uLnNhbHQpLHkuZW5jcnlwdGlvbi5zcGluJiYoUC53b3JrYm9va1NwaW5Db3VudD15LmVuY3J5cHRpb24uc3BpbikpLFNyKCJ3b3JrYm9va1Byb3RlY3Rpb24iLG51bGwsUCl9KHkuV29ya2Jvb2suUHJvdGVjdGlvbikpO3ZhciBfZT15Lldv'@;
put 'cmtib29rJiZ5Lldvcmtib29rLlNoZWV0c3x8W10sdmU9MDtpZihfZSYmX2VbMF0mJl9lWzBdLkhpZGRlbil7Zm9yKFFbUS5sZW5ndGhdPSI8Ym9va1ZpZXdzPiIsdmU9MDt2ZSE9eS5TaGVldE5hbWVzLmxlbmd0aCYmX2VbdmVdJiZfZVt2ZV0uSGlkZGVuOysrdmUpO3ZlPT15LlNoZWV0TmFt'@;
put 'ZXMubGVuZ3RoJiYodmU9MCksUVtRLmxlbmd0aF09Jzx3b3JrYm9va1ZpZXcgZmlyc3RTaGVldD0iJyt2ZSsnIiBhY3RpdmVUYWI9IicrdmUrJyIvPicsUVtRLmxlbmd0aF09IjwvYm9va1ZpZXdzPiJ9Zm9yKFFbUS5sZW5ndGhdPSI8c2hlZXRzPiIsdmU9MDt2ZSE9eS5TaGVldE5hbWVzLmxl'@;
put 'bmd0aDsrK3ZlKXt2YXIgU2U9e25hbWU6SHIoeS5TaGVldE5hbWVzW3ZlXS5zbGljZSgwLDMxKSl9O2lmKFNlLnNoZWV0SWQ9IiIrKHZlKzEpLFNlWyJyOmlkIl09InJJZCIrKHZlKzEpLF9lW3ZlXSlzd2l0Y2goX2VbdmVdLkhpZGRlbil7Y2FzZSAxOlNlLnN0YXRlPSJoaWRkZW4iO2JyZWFr'@;
put 'O2Nhc2UgMjpTZS5zdGF0ZT0idmVyeUhpZGRlbiJ9UVtRLmxlbmd0aF09U3IoInNoZWV0IixudWxsLFNlKX1yZXR1cm4gUVtRLmxlbmd0aF09Ijwvc2hlZXRzPiIseS5FeHRlcm5hbFdCJiZ5LkV4dGVybmFsV0IubGVuZ3RoJiYoUVtRLmxlbmd0aF09IjxleHRlcm5hbFJlZmVyZW5jZXM+Iiwo'@;
put 'eS5FeHRlcm5hbFdCfHxbXSkuZm9yRWFjaChmdW5jdGlvbihIZSxCZSl7dmFyIEdlPXpvKEwud2JyZWxzLC0xLCJleHRlcm5hbExpbmtzL2V4dGVybmFsTGluayIrKEJlKzEpKyIueG1sIixIaS5YTElOSyk7UVtRLmxlbmd0aF09JzxleHRlcm5hbFJlZmVyZW5jZSByOmlkPSJySWQnK0dlKyci'@;
put 'Lz4nfSksUVtRLmxlbmd0aF09IjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiIpLHJlJiYoUVtRLmxlbmd0aF09IjxkZWZpbmVkTmFtZXM+Iix5Lldvcmtib29rJiZ5Lldvcmtib29rLk5hbWVzJiZ5Lldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oSGUpe3ZhciBCZT17bmFtZTpIZS5OYW1l'@;
put 'fTtIZS5Db21tZW50JiYoQmUuY29tbWVudD1IZS5Db21tZW50KSxudWxsIT1IZS5TaGVldCYmKEJlLmxvY2FsU2hlZXRJZD0iIitIZS5TaGVldCksSGUuSGlkZGVuJiYoQmUuaGlkZGVuPSIxIiksSGUuUmVmJiYoUVtRLmxlbmd0aF09U3IoImRlZmluZWROYW1lIixIcihIZS5SZWYpLEJlKSl9'@;
put 'KSxRW1EubGVuZ3RoXT0iPC9kZWZpbmVkTmFtZXM+IiksTCYmTC5waXZvdHMmJkwucGl2b3RzLmxlbmd0aD4wJiYoUS5wdXNoKCI8cGl2b3RDYWNoZXM+IiksTC5waXZvdHMuZm9yRWFjaChmdW5jdGlvbihIZSxCZSl7US5wdXNoKCc8cGl2b3RDYWNoZSBjYWNoZUlkPSInKyhCZSsxKSsnIiBy'@;
put 'OmlkPSJySWQnK0hlWzJdKyciLz4nKX0pLFEucHVzaCgiPC9waXZvdENhY2hlcz4iKSksUS5sZW5ndGg+MiYmKFFbUS5sZW5ndGhdPSI8L3dvcmtib29rPiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE9MKHksUCl7cmV0dXJuIFB8fChQPWZyKDEy'@;
put 'NykpLFAud3JpdGVfc2hpZnQoNCx5LkhpZGRlbiksUC53cml0ZV9zaGlmdCg0LHkuaVRhYklEKSxQYyh5LnN0clJlbElELFApLG5jKHkubmFtZS5zbGljZSgwLDMxKSxQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH1mdW5jdGlvbiBXdih5LFApe3ZhciBMPXt9O3JldHVybiB5LnJl'@;
put 'YWRfc2hpZnQoNCksTC5BcmNoSUQ9eS5yZWFkX3NoaWZ0KDQpLHkubCs9UC04LEx9ZnVuY3Rpb24gSEwoeSxQKXt2YXIgTD13YygpO3JldHVybiB1aShMLCJCcnRCZWdpbkJvb2siKSx1aShMLCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rpb24gc00oeSxQKXtQfHwoUD1mcigxMjcpKTtmb3IodmFy'@;
put 'IEw9MDs0IT1MOysrTClQLndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIG5jKCJTaGVldEpTIixQKSxuYyhNLnZlcnNpb24sUCksbmMoTS52ZXJzaW9uLFApLG5jKCI3MjYyIixQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oKSksdWkoTCwiQnJ0V2JQcm9wIixmdW5jdGlvbiBGTCh5'@;
put 'LFApe1B8fChQPWZyKDcyKSk7dmFyIEw9MDtyZXR1cm4geSYmeS5maWx0ZXJQcml2YWN5JiYoTHw9OCksUC53cml0ZV9zaGlmdCg0LEwpLFAud3JpdGVfc2hpZnQoNCwwKSxzbSh5JiZ5LkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIixQKSxQLnNsaWNlKDAsUC5sKX0oeS5Xb3JrYm9vayYmeS5X'@;
put 'b3JrYm9vay5XQlByb3BzfHxudWxsKSksZnVuY3Rpb24gYU0oeSxQKXtpZihQLldvcmtib29rJiZQLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBMPVAuV29ya2Jvb2suU2hlZXRzLFE9MCxyZT0tMSxnZT0tMTtRPEwubGVuZ3RoOysrUSkhTFtRXXx8IUxbUV0uSGlkZGVuJiYtMT09cmU/cmU9'@;
put 'UToxPT1MW1FdLkhpZGRlbiYmLTE9PWdlJiYoZ2U9USk7Z2U+cmV8fCh1aSh5LCJCcnRCZWdpbkJvb2tWaWV3cyIpLHVpKHksIkJydEJvb2tWaWV3IixmdW5jdGlvbiBnNSh5LFApe3JldHVybiBQfHwoUD1mcigyOSkpLFAud3JpdGVfc2hpZnQoLTQsMCksUC53cml0ZV9zaGlmdCgtNCw0NjAp'@;
put 'LFAud3JpdGVfc2hpZnQoNCwyODgwMCksUC53cml0ZV9zaGlmdCg0LDE3NjAwKSxQLndyaXRlX3NoaWZ0KDQsNTAwKSxQLndyaXRlX3NoaWZ0KDQseSksUC53cml0ZV9zaGlmdCg0LHkpLFAud3JpdGVfc2hpZnQoMSwxMjApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfShyZSkpLHVp'@;
put 'KHksIkJydEVuZEJvb2tWaWV3cyIpKX19KEwseSksZnVuY3Rpb24gRDYoeSxQKXt1aSh5LCJCcnRCZWdpbkJ1bmRsZVNocyIpO2Zvcih2YXIgTD0wO0whPVAuU2hlZXROYW1lcy5sZW5ndGg7KytMKXVpKHksIkJydEJ1bmRsZVNoIixPTCh7SGlkZGVuOlAuV29ya2Jvb2smJlAuV29ya2Jvb2su'@;
put 'U2hlZXRzJiZQLldvcmtib29rLlNoZWV0c1tMXSYmUC5Xb3JrYm9vay5TaGVldHNbTF0uSGlkZGVufHwwLGlUYWJJRDpMKzEsc3RyUmVsSUQ6InJJZCIrKEwrMSksbmFtZTpQLlNoZWV0TmFtZXNbTF19KSk7dWkoeSwiQnJ0RW5kQnVuZGxlU2hzIil9KEwseSksdWkoTCwiQnJ0RW5kQm9vayIp'@;
put 'LEwuZW5kKCl9ZnVuY3Rpb24gWkwoeSxQLEwsUSxyZSl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP0FMOldJKSh5LEwsUSxyZSl9ZnVuY3Rpb24gbE0oeSxQLEwsUSxyZSl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP25wOlEzKSh5LEwsUSxyZSl9ZnVuY3Rpb24gV0woeSxQLEwp'@;
put 'e3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT94MzpMbSkoeSxMKX1mdW5jdGlvbiBKZSh5LFAsTCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP2VJOlZDKSh5LEwpfXZhciBLdj0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpKS9nLFh2PS8oW1x3'@;
put 'Ol0rKT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gbXUoeSxQKXt2YXIgTD15LnNwbGl0KC9ccysvKSxRPVtdO2lmKFB8fChRWzBdPUxbMF0pLDE9PT1MLmxlbmd0aClyZXR1cm4gUTt2YXIgZ2UsX2UsU2UscmU9eS5tYXRjaChLdik7aWYocmUp'@;
put 'Zm9yKFNlPTA7U2UhPXJlLmxlbmd0aDsrK1NlKS0xPT09KF9lPShnZT1yZVtTZV0ubWF0Y2goWHYpKVsxXS5pbmRleE9mKCI6IikpP1FbZ2VbMV1dPWdlWzJdLnNsaWNlKDEsZ2VbMl0ubGVuZ3RoLTEpOlFbInhtbG5zOiI9PT1nZVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrZ2VbMV0uc2xpY2Uo'@;
put 'Nik6Z2VbMV0uc2xpY2UoX2UrMSldPWdlWzJdLnNsaWNlKDEsZ2VbMl0ubGVuZ3RoLTEpO3JldHVybiBRfWZ1bmN0aW9uIGNNKHkpe3ZhciBMPXt9O2lmKDE9PT15LnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIEw7dmFyIHJlLGdlLHZlLFE9eS5tYXRjaChLdik7aWYoUSlmb3IodmU9MDt2'@;
put 'ZSE9US5sZW5ndGg7Kyt2ZSktMT09PShnZT0ocmU9UVt2ZV0ubWF0Y2goWHYpKVsxXS5pbmRleE9mKCI6IikpP0xbcmVbMV1dPXJlWzJdLnNsaWNlKDEscmVbMl0ubGVuZ3RoLTEpOkxbInhtbG5zOiI9PT1yZVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrcmVbMV0uc2xpY2UoNik6cmVbMV0uc2xp'@;
put 'Y2UoZ2UrMSldPXJlWzJdLnNsaWNlKDEscmVbMl0ubGVuZ3RoLTEpO3JldHVybiBMfWZ1bmN0aW9uIEdMKHkpe3ZhciBQPXt9O2lmKHkuRGVmYXVsdFJvd0hlaWdodCl7dmFyIEw9e2hweDo0KnBhcnNlSW50KHkuRGVmYXVsdFJvd0hlaWdodCkvM307STMoTCksUC5yb3c9TH1pZih5LkRlZmF1'@;
put 'bHRDb2xXaWR0aCl7dmFyIFE9e3dweDo0KnBhcnNlSW50KHkuRGVmYXVsdENvbFdpZHRoKS8zfTtwdShRKSxQLmNvbD1RfXJldHVybiBQfWZ1bmN0aW9uIFJlKHksUCxMLFEpe3ZhciByZT1RO3N3aXRjaCgoTFswXS5tYXRjaCgvZHQ6ZHQ9IihbXHcuXSspIi8pfHxbIiIsIiJdKVsxXSl7Y2Fz'@;
put 'ZSJib29sZWFuIjpyZT15cihRKTticmVhaztjYXNlImkyIjpjYXNlImludCI6cmU9cGFyc2VJbnQoUSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6cmU9cGFyc2VGbG9hdChRKTticmVhaztjYXNlImRhdGUiOmNhc2UiZGF0ZVRpbWUudHoiOnJlPUh0KFEpO2JyZWFrO2Nhc2UiaTgi'@;
put 'OmNhc2Uic3RyaW5nIjpjYXNlImZpeGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoiK0xbMF0pfXlbeHIoUCldPXJlfXZhciB1TT17MDoiTm9uZSIsMToiU2luZ2xlIiwyOiJEb3VibGUiLDMzOiJTaW5n'@;
put 'bGVBY2NvdW50aW5nIiwzNDoiRG91YmxlQWNjb3VudGluZyJ9LG1lPUFlKHVNKTtmdW5jdGlvbiB5ZSh5LFAsTCxRKXtpZihRLmNlbGxTdHlsZXMpe2lmKEw9TC5yZXBsYWNlKC9ccysvZywiICIpLFAuSW50ZXJpb3Ipe3ZhciByZT1QLkludGVyaW9yO3JlLlBhdHRlcm4mJihyZS5wYXR0ZXJu'@;
put 'VHlwZT1INFtyZS5QYXR0ZXJuXXx8cmUuUGF0dGVybikscmUuQ29sb3ImJnJlLkNvbG9yLm1hdGNoKC8jWzAtOUEtRmEtZl0qLykmJihyZS5mZ0NvbG9yPXtyZ2I6cmUuQ29sb3Iuc2xpY2UoMSl9KX0hZnVuY3Rpb24gZE0oeSl7eS5Cb3JkZXJzJiYoeS5Cb3JkZXJzLmZvckVhY2goZnVuY3Rp'@;
put 'b24oUCl7dmFyIEw9UC5Qb3NpdGlvbi50b0xvd2VyQ2FzZSgpO3lbTF09e3N0eWxlOnF0KFAuTGluZVN0eWxlLCtQLldlaWdodCksY29sb3I6e3JnYjooUC5Db2xvcnx8IiMwMDAwMDAiKS5zbGljZSgxKX19fSksZGVsZXRlIHkuQm9yZGVycyl9KFApO3ZhciBfZSxnZT1MLm1hdGNoKC88KD86'@;
put 'XHcrOik/Rm9udFxzW14+XSo+Lyk7Z2UmJih5cigoX2U9bG4oZ2VbMF0pKS5Cb2xkKSYmKFAuQm9sZD0hMCkseXIoX2UuSXRhbGljKSYmKFAuSXRhbGljPSEwKSx5cihfZS5TdHJpa2VUaHJvdWdoKSYmKFAuU3RyaWtlPSEwKSxfZS5TaXplJiYoUC5TaXplPStfZS5TaXplKSxQLkZvbnROYW1l'@;
put 'PV9lLkZvbnROYW1lP19lLkZvbnROYW1lOiJBcmlhbCIsX2UuVW5kZXJsaW5lJiYoUC5VbmRlcmxpbmU9bWVbX2UuVW5kZXJsaW5lXSksX2UuQ29sb3ImJihQLlJHQj1fZS5Db2xvci5zbGljZSgtNikpKSxQLkFsaWdubWVudCYmKFAuYWxpZ25tZW50PXt9LFAuQWxpZ25tZW50LlZlcnRpY2Fs'@;
put 'JiYoUC5hbGlnbm1lbnQudmVydGljYWw9UC5BbGlnbm1lbnQuVmVydGljYWwudG9Mb3dlckNhc2UoKSksUC5BbGlnbm1lbnQuSG9yaXpvbnRhbCYmKFAuYWxpZ25tZW50Lmhvcml6b250YWw9UC5BbGlnbm1lbnQuSG9yaXpvbnRhbC50b0xvd2VyQ2FzZSgpKSx5cihQLkFsaWdubWVudC5XcmFw'@;
put 'VGV4dHx8IjAiKT9QLmFsaWdubWVudC53cmFwVGV4dD0hMDpudWxsPT1QLkFsaWdubWVudC5XcmFwVGV4dCYmZGVsZXRlIFAuYWxpZ25tZW50LndyYXBUZXh0LHlyKFAuQWxpZ25tZW50LlNocmlua1RvRml0fHwiMCIpJiYoUC5hbGlnbm1lbnQuc2hyaW5rVG9GaXQ9ITApLCtQLkFsaWdubWVu'@;
put 'dC5JbmRlbnQmJihQLmFsaWdubWVudC5pbmRlbnQ9K1AuQWxpZ25tZW50LkluZGVudHx8MCksK1AuQWxpZ25tZW50LlJvdGF0ZSYmKFAuYWxpZ25tZW50LnRleHRSb3RhdGlvbj0rUC5BbGlnbm1lbnQuUm90YXRlfHwwKSl9eVtQLklEXT1QLCgiRGVmYXVsdCI9PVAuSUR8fCJOb3JtYWwiPT1Q'@;
put 'Lk5hbWUpJiZaMShQKX1mdW5jdGlvbiBxdCh5LFApe3N3aXRjaCh5KXtjYXNlIk5vbmUiOnJldHVybiJub25lIjtjYXNlIkRhc2giOnJldHVybiJkYXNoZWQiO2Nhc2UiRG90IjpyZXR1cm4iZG90dGVkIjtjYXNlIkRhc2hEb3QiOnJldHVybiJkYXNoRG90IjtjYXNlIkRhc2hEb3REb3QiOnJl'@;
put 'dHVybiJkYXNoRG90RG90IjtjYXNlIlNsYW50RGFzaERvdCI6cmV0dXJuInNsYW50RGFzaERvdCI7Y2FzZSJEb3VibGUiOnJldHVybiJkb3VibGUiO2Nhc2UiQ29udGludW91cyI6c3dpdGNoKCtQfHwwKXtjYXNlIDA6cmV0dXJuImhhaXIiO2Nhc2UgMTpyZXR1cm4idGhpbiI7Y2FzZSAyOnJl'@;
put 'dHVybiJtZWRpdW0iO2Nhc2UgMzpyZXR1cm4idGhpY2sifXJldHVybiJ0aGluIn1yZXR1cm4geX1mdW5jdGlvbiBoTSh5LFAsTCxRLHJlLGdlLF9lLHZlLFNlLEhlKXt2YXIgQmU9IkdlbmVyYWwiLEdlPVEuU3R5bGVJRCxudD17fTtIZT1IZXx8e307dmFyIGR0PVtdLEN0PTA7Zm9yKHZvaWQg'@;
put 'MD09PUdlJiZ2ZSYmKEdlPXZlLlN0eWxlSUQpLHZvaWQgMD09PUdlJiZfZSYmKEdlPV9lLlN0eWxlSUQpO3ZvaWQgMCE9PWdlW0dlXTspe3ZhciBjdD1nZVtHZV07aWYoIkdlbmVyYWwiPT1CZSYmY3QubmYmJihCZT1nZVtHZV0ubmYpLGN0LkludGVyaW9yJiZkdC5wdXNoKGdlW0dlXS5JbnRl'@;
put 'cmlvciksY3QuYWxpZ25tZW50JiYobnQuYWxpZ25tZW50fHwobnQuYWxpZ25tZW50PW9uKGN0LmFsaWdubWVudCkpKSxudWxsPT1udC5ib2xkJiZjdC5Cb2xkJiYobnQuYm9sZD0hMCksbnVsbD09bnQuaXRhbGljJiZjdC5JdGFsaWMmJihudC5pdGFsaWM9ITApLG51bGw9PW50LnN0cmlrZSYm'@;
put 'Y3QuU3RyaWtlJiYobnQuc3RyaWtlPSEwKSxudWxsPT1udC5zeiYmY3QuU2l6ZSYmKG50LnN6PWN0LlNpemUpLG51bGw9PW50Lm5hbWUmJmN0LkZvbnROYW1lJiYobnQubmFtZT1jdC5Gb250TmFtZSksbnVsbD09bnQudW5kZXJsaW5lJiZjdC5VbmRlcmxpbmUmJihudC51bmRlcmxpbmU9Y3Qu'@;
put 'VW5kZXJsaW5lKSxudWxsPT1udC5jb2xvciYmY3QuUkdCJiYobnQuY29sb3I9e3JnYjpjdC5SR0J9KSxbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oVHQpe251bGw9PW50W1R0XSYmY3RbVHRdJiYobnRbVHRdPW9uKGN0W1R0XSkpfSksIkRlZmF1bHQi'@;
put 'PT1HZSlicmVhaztHZT1jdC5QYXJlbnR8fCJEZWZhdWx0In1udC5uYW1lfHwobnQubmFtZT1nZS5EZWZhdWx0JiZnZS5EZWZhdWx0LkZvbnROYW1lfHwiQXJpYWwiKSxudC5zenx8KG50LnN6PWdlLkRlZmF1bHQmJmdlLkRlZmF1bHQuU2l6ZXx8MTIpO3ZhciBidD0iIjtpZih5fHxRLkZvcm11'@;
put 'bGF8fCJTdHJpbmciPT1MLlR5cGV8fCJOdW1iZXIiPT1MLlR5cGUpc3dpdGNoKEwuVHlwZSl7Y2FzZSJCb29sZWFuIjpRLnQ9ImIiLFEudj15cih5KTticmVhaztjYXNlIlN0cmluZyI6US50PSJzIixidD1HaSh4cih5KSksUS52PXkuaW5kZXhPZigiPCIpPi0xP3hyKFB8fHkpLnJlcGxhY2Uo'@;
put 'LzxbXl0qPz4vZywiIik6YnQseS5pbmRleE9mKCI8Iik+LTEmJihRLlI9RnUuaHRtbF90b19ycyh4cih5KSkpO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9eS5zbGljZSgtMSkmJih5Kz0iWiIpLFEudj0oSHQoeSktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxRLnYh'@;
put 'PVEudj9RLnY9eHIoeSk6US52PDYwJiYoUS52PVEudi0xKSwoIUJlfHwiR2VuZXJhbCI9PUJlKSYmKEJlPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PVEudiYmKFEudj0reSksUS50fHwoUS50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6US50PSJlIixRLnY9S2FbeV0sITEh'@;
put 'PT1IZS5jZWxsVGV4dCYmKFEudz15KTticmVhaztkZWZhdWx0OiIiPT15JiYiIj09UD9RLnQ9InoiOihRLnQ9InMiLGJ0PUdpKHhyKHkpKSxRLnY9eS5pbmRleE9mKCI8Iik+LTE/eHIoUHx8eSkucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCx5LmluZGV4T2YoIjwiKT4tMSYmKFEuUj1GdS5o'@;
put 'dG1sX3RvX3JzKHhyKHkpKSkpfWVsc2UgUS50PSJ6IixkZWxldGUgUS52O2lmKGZ1bmN0aW9uIEp2KHksUCxMKXtpZigieiIhPT15LnQpe2lmKCFMfHwhMSE9PUwuY2VsbFRleHQpdHJ5e3kudz0iZSI9PT15LnQ/eS53fHxRb1t5LnZdOiJHZW5lcmFsIj09PVA/Im4iPT09eS50PygwfHkudik9'@;
put 'PT15LnY/dy5fZ2VuZXJhbF9pbnQoeS52KTp3Ll9nZW5lcmFsX251bSh5LnYpOncuX2dlbmVyYWwoeS52KTpmdW5jdGlvbiAkaSh5LFApe3ZhciBMPW5lW3ldfHx4cih5KTtyZXR1cm4iR2VuZXJhbCI9PT1MP3cuX2dlbmVyYWwoUCk6dy5mb3JtYXQoTCxQKX0oUHx8IkdlbmVyYWwiLHkudil9'@;
put 'Y2F0Y2goZ2Upe2lmKEwuV1RGKXRocm93IGdlfXRyeXt2YXIgUT1uZVtQXXx8UHx8IkdlbmVyYWwiO2lmKEwuY2VsbE5GJiYoeS56PVEpLEwuY2VsbERhdGVzJiYibiI9PXkudCYmdy5pc19kYXRlKFEpKXt2YXIgcmU9dy5wYXJzZV9kYXRlX2NvZGUoeS52KTtyZSYmKHkudD0iZCIseS52PW5l'@;
put 'dyBEYXRlKHJlLnkscmUubS0xLHJlLmQscmUuSCxyZS5NLHJlLlMscmUudSkpfX1jYXRjaChnZSl7aWYoTC5XVEYpdGhyb3cgZ2V9fX0oUSxCZSxIZSksITEhPT1IZS5jZWxsRm9ybXVsYSlpZihRLkZvcm11bGEpe3ZhciBGdD14cihRLkZvcm11bGEpOzYxPT1GdC5jaGFyQ29kZUF0KDApJiYo'@;
put 'RnQ9RnQuc2xpY2UoMSkpLFEuZj1hZihGdCxyZSksZGVsZXRlIFEuRm9ybXVsYSwiUkMiPT1RLkFycmF5UmFuZ2U/US5GPWFmKCJSQzpSQyIscmUpOlEuQXJyYXlSYW5nZSYmKFEuRj1hZihRLkFycmF5UmFuZ2UscmUpLFNlLnB1c2goW09pKFEuRiksUS5GXSkpfWVsc2UgZm9yKEN0PTA7Q3Q8'@;
put 'U2UubGVuZ3RoOysrQ3QpcmUucj49U2VbQ3RdWzBdLnMuciYmcmUucjw9U2VbQ3RdWzBdLmUuciYmcmUuYz49U2VbQ3RdWzBdLnMuYyYmcmUuYzw9U2VbQ3RdWzBdLmUuYyYmKFEuRj1TZVtDdF1bMV0pO2lmKEhlLmNlbGxTdHlsZXMmJihkdC5mb3JFYWNoKGZ1bmN0aW9uKFR0KXshbnQucGF0'@;
put 'dGVyblR5cGUmJlR0LnBhdHRlcm5UeXBlJiYobnQucGF0dGVyblR5cGU9VHQucGF0dGVyblR5cGUpLCFudC5mZ0NvbG9yJiZUdC5mZ0NvbG9yJiYobnQuZmdDb2xvcj1UdC5mZ0NvbG9yKX0pLFEucz1udCksdm9pZCAwIT09US5TdHlsZUlEJiYoUS5peGZlPVEuU3R5bGVJRCksUS5SJiZRLnMp'@;
put 'e3ZhciBrdD1vbihRLnMpO2RlbGV0ZSBrdC5ib2xkLGRlbGV0ZSBrdC5pdGFsaWMsZGVsZXRlIGt0LnVuZGVybGluZSxkZWxldGUga3Quc3RyaWtlLFEuUi5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtUdC5zPVV0KG9uKGt0KSxUdC5zKX0pfX1mdW5jdGlvbiAkTCh5KXt5LnQ9eS52fHwiIix5LnQ9'@;
put 'eS50LnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLHkudj15Lnc9eS5peGZlPXZvaWQgMH1mdW5jdGlvbiBRdih5KXtpZihoZSYmQnVmZmVyLmlzQnVmZmVyKHkpKXJldHVybiB5LnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiB5KXJldHVybiB5'@;
put 'O2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmeSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIFBpKE4oQyh5KSkpO3Rocm93IG5ldyBFcnJvcigiQmFkIGlucHV0IGZvcm1hdDogZXhwZWN0ZWQgQnVmZmVyIG9yIHN0cmluZyIpfXZhciBWcj0vPChcLz8pKFteXHM/PjwhXC86XSo6fCko'@;
put 'W15ccz88PjpcL1xbXSspKD86W1xzPzo8XC9dW14+XSopPz4vZ207ZnVuY3Rpb24ganIoeSxQKXt2YXIgTD1QfHx7fSxRPVUoUXYoeSkpOygiYmluYXJ5Ij09TC50eXBlfHwiYXJyYXkiPT1MLnR5cGV8fCJiYXNlNjQiPT1MLnR5cGUpJiYoUT10eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51'@;
put 'dGlscy5kZWNvZGUoNjUwMDEsQihRKSk6UGkoUSkpO3ZhciByZT1RLnNsaWNlKDAsMTAyNCkudG9Mb3dlckNhc2UoKSxnZT0hMTtpZigoMTAyMyZyZS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmcmUuaW5kZXhPZigiLCIpLDEwMjMmcmUuaW5kZXhPZigiOyIpKSl7dmFyIF9lPW9uKEwp'@;
put 'O3JldHVybiBfZS50eXBlPSJzdHJpbmciLEIxLnRvX3dvcmtib29rKFEsX2UpfWlmKC0xPT1yZS5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKG51KXtyZS5pbmRleE9mKCI8Iitu'@;
put 'dSk+PTAmJihnZT0hMCl9KSxnZSlyZXR1cm4gRnUudG9fd29ya2Jvb2soUSxMKTt2YXIgdmUsSGUsU2U9W107bnVsbCE9dGUmJm51bGw9PUwuZGVuc2UmJihMLmRlbnNlPXRlKTt2YXIgdXIsQmU9e30sR2U9W10sbnQ9TC5kZW5zZT9bXTp7fSxkdD0iIixDdD17fSxjdD17fSxidD17fSxGdD1t'@;
put 'dSgnPERhdGEgc3M6VHlwZT0iU3RyaW5nIj4nKSxrdD0wLFR0PTAsWnQ9MCxwbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxLbj17fSx1bj17fSxxbj0iIix6bj0wLGtuPVtdLGVyPXt9LHRyPXt9LFpuPTAsQnI9W10sb2k9e30sa2k9W10sTGk9e30sUXI9W10sQW49ITEsdnI9W10s'@;
put 'cnI9W10sU249e30sZ3I9MCxDaT0wLHpyPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9fSxqaT17fTtWci5sYXN0SW5kZXg9MCxRPVEucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgX289IiI7dmU9VnIuZXhlYyhRKTspc3dpdGNoKHZlWzNdPShfbz12'@;
put 'ZVszXSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJkYXRhIjppZigiZGF0YSI9PV9vKXtpZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXZlWzBdLmNoYXJBdCh2ZVswXS5s'@;
put 'ZW5ndGgtMikmJlNlLnB1c2goW3ZlWzNdLCEwXSk7YnJlYWt9aWYoU2VbU2UubGVuZ3RoLTFdWzFdKWJyZWFrOyIvIj09PXZlWzFdP2hNKFEuc2xpY2Uoa3QsdmUuaW5kZXgpLHFuLEZ0LCJjb21tZW50Ij09U2VbU2UubGVuZ3RoLTFdWzBdP0xpOmN0LHtjOlR0LHI6WnR9LEtuLFFyW1R0XSxi'@;
put 'dCx2cixMKToocW49IiIsRnQ9bXUodmVbMF0pLGt0PXZlLmluZGV4K3ZlWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjppZigiLyI9PT12ZVsxXXx8Ii8+Ij09PXZlWzBdLnNsaWNlKC0yKSl7aWYoIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSl7aWYoKGN0PWNNKHZlWzBdKSkuSW5kZXgmJihU'@;
put 'dD0rY3QuSW5kZXgtMSksVHQ8cG4ucy5jJiYocG4ucy5jPVR0KSxUdD5wbi5lLmMmJihwbi5lLmM9VHQpLGtpPVtdLCFMLnNoZWV0U3R1YnMpeysrVHQ7YnJlYWt9aE0oIiIsIiIse30sImNvbW1lbnQiPT1TZVtTZS5sZW5ndGgtMV1bMF0/TGk6Y3Qse2M6VHQscjpadH0sS24sUXJbVHRdLGJ0'@;
put 'LHZyLEwpfWlmKGtpLmxlbmd0aD4wJiYoY3QuYz1raSksKCFMLnNoZWV0Um93c3x8TC5zaGVldFJvd3M+WnQpJiYodm9pZCAwIT09Y3Qudnx8TC5zaGVldFN0dWJzKSYmKEwuZGVuc2U/KG50W1p0XXx8KG50W1p0XT1bXSksbnRbWnRdW1R0XT1jdCk6bnRbTnMoVHQpK0hzKFp0KV09Y3QpLGN0'@;
put 'LkhSZWYmJihjdC5sPXtUYXJnZXQ6eHIoY3QuSFJlZil9LGN0LkhSZWZTY3JlZW5UaXAmJihjdC5sLlRvb2x0aXA9Y3QuSFJlZlNjcmVlblRpcCksZGVsZXRlIGN0LkhSZWYsZGVsZXRlIGN0LkhSZWZTY3JlZW5UaXApLChjdC5NZXJnZUFjcm9zc3x8Y3QuTWVyZ2VEb3duKSYmKGdyPVR0Kygw'@;
put 'fHBhcnNlSW50KGN0Lk1lcmdlQWNyb3NzLDEwKSksQ2k9WnQrKDB8cGFyc2VJbnQoY3QuTWVyZ2VEb3duLDEwKSksKGdyPlR0fHxDaT5adCkmJmtuLnB1c2goe3M6e2M6VHQscjpadH0sZTp7YzpncixyOkNpfX0pKSxMLnNoZWV0U3R1YnMpaWYoY3QuTWVyZ2VBY3Jvc3N8fGN0Lk1lcmdlRG93'@;
put 'bil7Zm9yKHZhciBEaT1UdDtEaTw9Z3I7KytEaSlmb3IodmFyIFlvPVp0O1lvPD1DaTsrK1lvKShEaT5UdHx8WW8+WnQpJiYoTC5kZW5zZT8obnRbWW9dfHwobnRbWW9dPVtdKSxudFtZb11bRGldPXt0OiJ6In0pOm50W05zKERpKStIcyhZbyldPXt0OiJ6In0pO1R0PWdyKzF9ZWxzZSsrVHQ7'@;
put 'ZWxzZSBjdC5NZXJnZUFjcm9zcz9UdD1ncisxOisrVHR9ZWxzZShjdD1jTSh2ZVswXSkpLkluZGV4JiYoVHQ9K2N0LkluZGV4LTEpLFR0PHBuLnMuYyYmKHBuLnMuYz1UdCksVHQ+cG4uZS5jJiYocG4uZS5jPVR0KSwiLz4iPT09dmVbMF0uc2xpY2UoLTIpJiYrK1R0LGtpPVtdO2JyZWFrO2Nh'@;
put 'c2Uicm93IjoiLyI9PT12ZVsxXXx8Ii8+Ij09PXZlWzBdLnNsaWNlKC0yKT8oWnQ8cG4ucy5yJiYocG4ucy5yPVp0KSxadD5wbi5lLnImJihwbi5lLnI9WnQpLCIvPiI9PT12ZVswXS5zbGljZSgtMikmJihidD1tdSh2ZVswXSkpLkluZGV4JiYoWnQ9K2J0LkluZGV4LTEpLFR0PTAsKytadCk6'@;
put 'KChidD1tdSh2ZVswXSkpLkluZGV4JiYoWnQ9K2J0LkluZGV4LTEpLFNuPXt9LCgiMCI9PWJ0LkF1dG9GaXRIZWlnaHR8fGJ0LkhlaWdodCkmJihTbi5ocHQ9cGFyc2VGbG9hdChidC5IZWlnaHQpLFNuLmhweD1VMShTbi5ocHQpLHJyW1p0XT1TbiksIjEiPT1idC5IaWRkZW4mJihTbi5oaWRk'@;
put 'ZW49ITAscnJbWnRdPVNuKSk7YnJlYWs7Y2FzZSJ3b3Jrc2hlZXQiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKTtHZS5wdXNoKGR0KSxwbi5zLnI8PXBuLmUuciYmcG4ucy5jPD1w'@;
put 'bi5lLmMmJihudFsiIXJlZiJdPU9vKHBuKSxMLnNoZWV0Um93cyYmTC5zaGVldFJvd3M8PXBuLmUuciYmKG50WyIhZnVsbHJlZiJdPW50WyIhcmVmIl0scG4uZS5yPUwuc2hlZXRSb3dzLTEsbnRbIiFyZWYiXT1PbyhwbikpKSxrbi5sZW5ndGgmJihudFsiIW1lcmdlcyJdPWtuKSxRci5sZW5n'@;
put 'dGg+MCYmKG50WyIhY29scyJdPVFyKSxyci5sZW5ndGg+MCYmKG50WyIhcm93cyJdPXJyKSxDdCYmKG50WyIhc2hlZXRGb3JtYXQiXT1HTChDdCkpLEJlW2R0XT1udH1lbHNlIHBuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LFp0PVR0PTAsU2UucHVzaChbdmVbM10sITFdKSxIZT1t'@;
put 'dSh2ZVswXSksZHQ9eHIoSGUuTmFtZSksbnQ9TC5kZW5zZT9bXTp7fSxrbj1bXSx2cj1bXSxycj1bXSx6ci5TaGVldHMucHVzaChqaT17bmFtZTpkdCxIaWRkZW46MH0pO2JyZWFrO2Nhc2UidGFibGUiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cg'@;
put 'bmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNle2lmKCIvPiI9PXZlWzBdLnNsaWNlKC0yKSlicmVhaztDdD1tdSh2ZVswXSksU2UucHVzaChbdmVbM10sITFdKSxRcj1bXSxBbj0hMX1icmVhaztjYXNlInN0eWxlIjoiLyI9PT12ZVsxXT95ZShLbix1bixxbixMKToo'@;
put 'dW49bXUodmVbMF0pLHFuPSIiKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6dW4ubmY9eHIobXUodmVbMF0pLkZvcm1hdHx8IkdlbmVyYWwiKSxuZVt1bi5uZl0mJih1bi5uZj1uZVt1bi5uZl0pO2Zvcih2YXIgbG89MDszOTIhPWxvJiZ3Ll90YWJsZVtsb10hPXVuLm5mOysrbG8pO2lmKDM5'@;
put 'Mj09bG8pZm9yKGxvPTU3OzM5MiE9bG87KytsbylpZihudWxsPT13Ll90YWJsZVtsb10pe3cubG9hZCh1bi5uZixsbyk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1TZVtTZS5sZW5ndGgtMV1bMF18fCIvIj09PXZlWzFdKWJyZWFrO2lmKCh1cj1tdSh2ZVswXSkpLkhp'@;
put 'ZGRlbiYmKHVyLmhpZGRlbj0hMCxkZWxldGUgdXIuSGlkZGVuKSx1ci5XaWR0aD91ci53cHg9NCpwYXJzZUludCh1ci5XaWR0aCwxMCkvMzordXIuQXV0b0ZpdFdpZHRoJiYodXIuYXV0bz0xKSwhQW4mJnVyLndweD4xMCl7QW49ITAscGw9bEM7Zm9yKHZhciBBbz0wO0FvPFFyLmxlbmd0aDsr'@;
put 'K0FvKVFyW0FvXSYmcHUoUXJbQW9dKX1BbiYmcHUodXIpLFFyW3VyLkluZGV4LTF8fFFyLmxlbmd0aF09dXI7Zm9yKHZhciB4bz0wO3hvPCt1ci5TcGFuOysreG8pUXJbUXIubGVuZ3RoXT1vbih1cik7YnJlYWs7Y2FzZSJuYW1lZHJhbmdlIjppZigiLyI9PT12ZVsxXSlicmVhazt6ci5OYW1l'@;
put 'c3x8KHpyLk5hbWVzPVtdKTt2YXIgaGk9bG4odmVbMF0pLHRhPXtOYW1lOmhpLk5hbWUsUmVmOmFmKGhpLlJlZmVyc1RvLnNsaWNlKDEpLHtyOjAsYzowfSl9O3pyLlNoZWV0cy5sZW5ndGg+MCYmKHRhLlNoZWV0PXpyLlNoZWV0cy5sZW5ndGgtMSksenIuTmFtZXMucHVzaCh0YSk7YnJlYWs7'@;
put 'Y2FzZSJuYW1lZGNlbGwiOmNhc2UiYiI6Y2FzZSJpIjpjYXNlInUiOmNhc2UicyI6Y2FzZSJlbSI6Y2FzZSJoMiI6Y2FzZSJoMyI6Y2FzZSJzdWIiOmNhc2Uic3VwIjpjYXNlInNwYW4iOmNhc2UicHJvdGVjdGlvbiI6Y2FzZSJwYXJhZ3JhcGhzIjpjYXNlIm5hbWUiOmJyZWFrO2Nhc2UiYWxp'@;
put 'Z25tZW50IjppZighTC5jZWxsU3R5bGVzfHwiLyI9PT12ZVsxXSlicmVhazt1bi5BbGlnbm1lbnQ9bXUodmVbMF0pO2JyZWFrO2Nhc2UiYm9yZGVycyI6Ii8iIT09dmVbMV0mJih1bi5Cb3JkZXJzPVtdKTticmVhaztjYXNlImJvcmRlciI6aWYoIi8iPT09dmVbMV0pYnJlYWs7dW4uQm9yZGVy'@;
put 'c3x8KHVuLkJvcmRlcnM9W10pLHVuLkJvcmRlcnMucHVzaChtdSh2ZVswXSkpO2JyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSl7cW4rPXZlWzBdO2JyZWFrfSIvIj09PXZlWzFdP3FuKz1RLnNsaWNlKHpuLHZlLmluZGV4K3ZlWzBdLmxlbmd0aCk6em49dmUuaW5k'@;
put 'ZXg7YnJlYWs7Y2FzZSJpbnRlcmlvciI6aWYoIUwuY2VsbFN0eWxlc3x8Ii8iPT09dmVbMV0pYnJlYWs7dW4uSW50ZXJpb3I9bXUodmVbMF0pO2JyZWFrO2Nhc2UiYXV0aG9yIjpjYXNlInRpdGxlIjpjYXNlImRlc2NyaXB0aW9uIjpjYXNlImNyZWF0ZWQiOmNhc2Uia2V5d29yZHMiOmNhc2Ui'@;
put 'c3ViamVjdCI6Y2FzZSJjYXRlZ29yeSI6Y2FzZSJjb21wYW55IjpjYXNlImxhc3RhdXRob3IiOmNhc2UibGFzdHNhdmVkIjpjYXNlImxhc3RwcmludGVkIjpjYXNlInZlcnNpb24iOmNhc2UicmV2aXNpb24iOmNhc2UidG90YWx0aW1lIjpjYXNlImh5cGVybGlua2Jhc2UiOmNhc2UibWFuYWdl'@;
put 'ciI6Y2FzZSJjb250ZW50c3RhdHVzIjpjYXNlImlkZW50aWZpZXIiOmNhc2UibGFuZ3VhZ2UiOmNhc2UiYXBwbmFtZSI6aWYoIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT12ZVsxXT9SZChlcixfbyxRLnNsaWNlKFpuLHZlLmluZGV4KSk6Wm49dmUuaW5kZXgrdmVbMF0ubGVu'@;
put 'Z3RoO2JyZWFrO2Nhc2Uic3R5bGVzIjpjYXNlIndvcmtib29rIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSBTZS5wdXNoKFt2ZVszXSwhMV0pO2JyZWFrO2Nhc2UiY29t'@;
put 'bWVudCI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpOyRMKExpKSxraS5wdXNoKExpKX1lbHNlIFNlLnB1c2goW3ZlWzNdLCExXSksTGk9e2E6KEhlPW11KHZlWzBdKSkuQXV0aG9y'@;
put 'fTticmVhaztjYXNlImF1dG9maWx0ZXIiOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIGlmKCIvIiE9PXZlWzBdLmNoYXJBdCh2ZVswXS5sZW5ndGgtMikpe3ZhciBNbj1t'@;
put 'dSh2ZVswXSk7bnRbIiFhdXRvZmlsdGVyIl09e3JlZjphZihNbi5SYW5nZSkucmVwbGFjZSgvXCQvZywiIil9LFNlLnB1c2goW3ZlWzNdLCEwXSl9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6aWYobnRbIiF2YWxpZGF0aW9ucyJdfHwobnRbIiF2YWxpZGF0aW9ucyJdPVtdKSwiLyI9PT12'@;
put 'ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXZlWzBdLmNoYXJBdCh2ZVswXS5sZW5ndGgtMikmJlNlLnB1c2goW3ZlWzNdLCEwXSksb2k9e307YnJlYWs7Y2FzZSJwaXhlbHNwZXJp'@;
put 'bmNoIjppZigiLyI9PT12ZVsxXSl7dmFyIE1zPStRLnNsaWNlKGt0LHZlLmluZGV4KTsoNzI9PU1zfHw5Nj09TXMpJiZGbShNcyl9ZWxzZSBrdD12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJj'@;
put 'dXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2Fz'@;
put 'ZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3JrYm9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5w'@;
put 'b3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFt2ZVszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09U2UubGVuZ3RoJiYiZG9jdW1lbnQiPT12'@;
put 'ZVszXXx8MD09U2UubGVuZ3RoJiYidW9mIj09dmVbM10pcmV0dXJuIGFfKFEsTCk7dmFyIHlzPSEwO3N3aXRjaChTZVtTZS5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6c3dpdGNoKHZlWzNdKXtjYXNlImFsbG93cG5nIjpjYXNlInJlbW92ZXBlcnNvbmFsaW5m'@;
put 'b3JtYXRpb24iOmNhc2UiZG93bmxvYWRjb21wb25lbnRzIjpjYXNlImxvY2F0aW9ub2Zjb21wb25lbnRzIjpjYXNlImNvbG9ycyI6Y2FzZSJjb2xvciI6Y2FzZSJpbmRleCI6Y2FzZSJyZ2IiOmNhc2UidGFyZ2V0c2NyZWVuc2l6ZSI6Y2FzZSJyZWFkb25seXJlY29tbWVuZGVkIjpicmVhaztk'@;
put 'ZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6c3dpdGNoKHZlWzNdKXtjYXNlInRvb2xiYXIiOmNhc2UiaGlkZW9mZmljZWxvZ28iOmNhc2Uic3ByZWFkc2hlZXRhdXRvZml0IjpjYXNlImxhYmVsIjpjYXNlImNhcHRpb24iOmNhc2UibWF4aGVpZ2h0IjpjYXNlIm1h'@;
put 'eHdpZHRoIjpjYXNlIm5leHRzaGVldG51bWJlciI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImV4Y2Vsd29ya2Jvb2siOnN3aXRjaCh2ZVszXSl7Y2FzZSJkYXRlMTkwNCI6enIuV0JQcm9wcy5kYXRlMTkwND0hMDticmVhaztjYXNlIndpbmRvd2hlaWdodCI6Y2FzZSJ3aW5kb3d3'@;
put 'aWR0aCI6Y2FzZSJ3aW5kb3d0b3B4IjpjYXNlIndpbmRvd3RvcHkiOmNhc2UidGFicmF0aW8iOmNhc2UicHJvdGVjdHN0cnVjdHVyZSI6Y2FzZSJwcm90ZWN0d2luZG93IjpjYXNlInByb3RlY3R3aW5kb3dzIjpjYXNlImFjdGl2ZXNoZWV0IjpjYXNlImRpc3BsYXlpbmtub3RlcyI6Y2FzZSJm'@;
put 'aXJzdHZpc2libGVzaGVldCI6Y2FzZSJzdXBib29rIjpjYXNlInNoZWV0bmFtZSI6Y2FzZSJzaGVldGluZGV4IjpjYXNlInNoZWV0aW5kZXhmaXJzdCI6Y2FzZSJzaGVldGluZGV4bGFzdCI6Y2FzZSJkbGwiOmNhc2UiYWNjZXB0bGFiZWxzaW5mb3JtdWxhcyI6Y2FzZSJkb25vdHNhdmVsaW5r'@;
put 'dmFsdWVzIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJtYXhpdGVyYXRpb25zIjpjYXNlIm1heGNoYW5nZSI6Y2FzZSJwYXRoIjpjYXNlInhjdCI6Y2FzZSJjb3VudCI6Y2FzZSJzZWxlY3RlZHNoZWV0cyI6Y2FzZSJjYWxjdWxhdGlvbiI6Y2FzZSJ1bmNhbGNlZCI6Y2FzZSJzdGFydHVwcHJvbXB0'@;
put 'IjpjYXNlImNybiI6Y2FzZSJleHRlcm5uYW1lIjpjYXNlImZvcm11bGEiOmNhc2UiY29sZmlyc3QiOmNhc2UiY29sbGFzdCI6Y2FzZSJ3YW50YWR2aXNlIjpjYXNlImJvb2xlYW4iOmNhc2UiZXJyb3IiOmNhc2UidGV4dCI6Y2FzZSJvbGUiOmNhc2Uibm9hdXRvcmVjb3ZlciI6Y2FzZSJwdWJs'@;
put 'aXNob2JqZWN0cyI6Y2FzZSJkb25vdGNhbGN1bGF0ZWJlZm9yZXNhdmUiOmNhc2UibnVtYmVyIjpjYXNlInJlZm1vZGVyMWMxIjpjYXNlImVtYmVkc2F2ZXNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlIndvcmtib29rb3B0aW9ucyI6c3dpdGNoKHZlWzNdKXtjYXNl'@;
put 'Im93Y3ZlcnNpb24iOmNhc2UiaGVpZ2h0IjpjYXNlIndpZHRoIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2Uid29ya3NoZWV0b3B0aW9ucyI6c3dpdGNoKHZlWzNdKXtjYXNlInZpc2libGUiOmlmKCIvPiIhPT12ZVswXS5zbGljZSgtMikpaWYoIi8iPT09dmVbMV0pc3dpdGNoKFEu'@;
put 'c2xpY2UoWm4sdmUuaW5kZXgpKXtjYXNlIlNoZWV0SGlkZGVuIjpqaS5IaWRkZW49MTticmVhaztjYXNlIlNoZWV0VmVyeUhpZGRlbiI6amkuSGlkZGVuPTJ9ZWxzZSBabj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJoZWFkZXIiOm50WyIhbWFyZ2lucyJdfHxkZihudFsiIW1h'@;
put 'cmdpbnMiXT17fSwieGxtbCIpLG50WyIhbWFyZ2lucyJdLmhlYWRlcj1sbih2ZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UiZm9vdGVyIjpudFsiIW1hcmdpbnMiXXx8ZGYobnRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxudFsiIW1hcmdpbnMiXS5mb290ZXI9bG4odmVbMF0pLk1hcmdpbjticmVh'@;
put 'aztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgRWw9bG4odmVbMF0pO250WyIhbWFyZ2lucyJdfHxkZihudFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLEVsLlRvcCYmKG50WyIhbWFyZ2lucyJdLnRvcD1FbC5Ub3ApLEVsLkxlZnQmJihudFsiIW1hcmdpbnMiXS5sZWZ0PUVsLkxlZnQpLEVsLlJpZ2h0'@;
put 'JiYobnRbIiFtYXJnaW5zIl0ucmlnaHQ9RWwuUmlnaHQpLEVsLkJvdHRvbSYmKG50WyIhbWFyZ2lucyJdLmJvdHRvbT1FbC5Cb3R0b20pO2JyZWFrO2Nhc2UiZGlzcGxheXJpZ2h0dG9sZWZ0Ijp6ci5WaWV3c3x8KHpyLlZpZXdzPVtdKSx6ci5WaWV3c1swXXx8KHpyLlZpZXdzWzBdPXt9KSx6'@;
put 'ci5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2FzZSJmcm96ZW5ub3NwbGl0IjpjYXNlImFjdGl2ZXJvdyI6Y2FzZSJhY3RpdmVjb2wiOmNhc2UidG9wcm93Ym90dG9tcGFuZSI6Y2FzZSJsZWZ0Y29sdW1ucmlnaHRwYW5lIjpjYXNlInVuc3luY2VkIjpjYXNlInBy'@;
put 'aW50IjpjYXNlInByaW50ZXJyb3JzIjpjYXNlInBhbmVzIjpjYXNlInNjYWxlIjpjYXNlInBhbmUiOmNhc2UibnVtYmVyIjpjYXNlImxheW91dCI6Y2FzZSJwYWdlc2V0dXAiOmNhc2Uic2VsZWN0ZWQiOmNhc2UicHJvdGVjdG9iamVjdHMiOmNhc2UiZW5hYmxlc2VsZWN0aW9uIjpjYXNlInBy'@;
put 'b3RlY3RzY2VuYXJpb3MiOmNhc2UidmFsaWRwcmludGVyaW5mbyI6Y2FzZSJob3Jpem9udGFscmVzb2x1dGlvbiI6Y2FzZSJ2ZXJ0aWNhbHJlc29sdXRpb24iOmNhc2UibnVtYmVyb2Zjb3BpZXMiOmNhc2UiYWN0aXZlcGFuZSI6Y2FzZSJ0b3Byb3d2aXNpYmxlIjpjYXNlImxlZnRjb2x1bW52'@;
put 'aXNpYmxlIjpjYXNlImZpdHRvcGFnZSI6Y2FzZSJyYW5nZXNlbGVjdGlvbiI6Y2FzZSJwYXBlcnNpemVpbmRleCI6Y2FzZSJwYWdlbGF5b3V0em9vbSI6Y2FzZSJwYWdlYnJlYWt6b29tIjpjYXNlImZpbHRlcm9uIjpjYXNlImZpdHdpZHRoIjpjYXNlImZpdGhlaWdodCI6Y2FzZSJjb21tZW50'@;
put 'c2xheW91dCI6Y2FzZSJ6b29tIjpjYXNlImxlZnR0b3JpZ2h0IjpjYXNlImdyaWRsaW5lcyI6Y2FzZSJhbGxvd3NvcnQiOmNhc2UiYWxsb3dmaWx0ZXIiOmNhc2UiYWxsb3dpbnNlcnRyb3dzIjpjYXNlImFsbG93ZGVsZXRlcm93cyI6Y2FzZSJhbGxvd2luc2VydGNvbHMiOmNhc2UiYWxsb3dk'@;
put 'ZWxldGVjb2xzIjpjYXNlImFsbG93aW5zZXJ0aHlwZXJsaW5rcyI6Y2FzZSJhbGxvd2Zvcm1hdGNlbGxzIjpjYXNlImFsbG93c2l6ZWNvbHMiOmNhc2UiYWxsb3dzaXplcm93cyI6Y2FzZSJ0YWJjb2xvcmluZGV4IjpjYXNlImRvbm90ZGlzcGxheWhlYWRpbmdzIjpjYXNlInNob3dwYWdlbGF5'@;
put 'b3V0em9vbSI6Y2FzZSJibGFja2FuZHdoaXRlIjpjYXNlImRvbm90ZGlzcGxheXplcm9zIjpjYXNlImRpc3BsYXlwYWdlYnJlYWsiOmNhc2Uicm93Y29saGVhZGluZ3MiOmNhc2UiZG9ub3RkaXNwbGF5b3V0bGluZSI6Y2FzZSJub29yaWVudGF0aW9uIjpjYXNlImFsbG93dXNlcGl2b3R0YWJs'@;
put 'ZXMiOmNhc2UiemVyb2hlaWdodCI6Y2FzZSJ2aWV3YWJsZXJhbmdlIjpjYXNlInNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0Y29udGVudHMiOmJyZWFrO2Nhc2Uic3BsaXRob3Jpem9udGFsIjpjYXNlInNwbGl0dmVydGljYWwiOmlmKCIvPiIhPT12ZVswXS5zbGljZSgtMikpaWYoIi8iPT12ZVsx'@;
put 'XSl7bnRbIiFmcmVlemUiXXx8KG50WyIhZnJlZXplIl09IkExIik7dmFyIHNsPXNzKG50WyIhZnJlZXplIl0pOyJzcGxpdGhvcml6b250YWwiPT12ZVszXT9zbC5yPStRLnNsaWNlKFpuLHZlLmluZGV4KTpzbC5jPStRLnNsaWNlKFpuLHZlLmluZGV4KSxudFsiIWZyZWV6ZSJdPWRpKHNsKX1l'@;
put 'bHNlIFpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6bnRbIiFncmlkbGluZXMiXT0hMTticmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6bnRbIiFvdXRsaW5lIl18fChudFsiIW91dGxpbmUiXT17fSksbnRbIiFvdXRs'@;
put 'aW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOm50WyIhb3V0bGluZSJdfHwobnRbIiFvdXRsaW5lIl09e30pLG50WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInBpdm90dGFibGUiOmNhc2UicGl2'@;
put 'b3RjYWNoZSI6c3dpdGNoKHZlWzNdKXtjYXNlImltbWVkaWF0ZWl0ZW1zb25kcm9wIjpjYXNlInNob3dwYWdlbXVsdGlwbGVpdGVtbGFiZWwiOmNhc2UiY29tcGFjdHJvd2luZGVudCI6Y2FzZSJsb2NhdGlvbiI6Y2FzZSJwaXZvdGZpZWxkIjpjYXNlIm9yaWVudGF0aW9uIjpjYXNlImxheW91'@;
put 'dGZvcm0iOmNhc2UibGF5b3V0c3VidG90YWxsb2NhdGlvbiI6Y2FzZSJsYXlvdXRjb21wYWN0cm93IjpjYXNlInBvc2l0aW9uIjpjYXNlInBpdm90aXRlbSI6Y2FzZSJkYXRhdHlwZSI6Y2FzZSJkYXRhZmllbGQiOmNhc2Uic291cmNlbmFtZSI6Y2FzZSJwYXJlbnRmaWVsZCI6Y2FzZSJwdGxp'@;
put 'bmVpdGVtcyI6Y2FzZSJwdGxpbmVpdGVtIjpjYXNlImNvdW50b2ZzYW1laXRlbXMiOmNhc2UiaXRlbSI6Y2FzZSJpdGVtdHlwZSI6Y2FzZSJwdHNvdXJjZSI6Y2FzZSJjYWNoZWluZGV4IjpjYXNlImNvbnNvbGlkYXRpb25yZWZlcmVuY2UiOmNhc2UiZmlsZW5hbWUiOmNhc2UicmVmZXJlbmNl'@;
put 'IjpjYXNlIm5vY29sdW1uZ3JhbmQiOmNhc2Uibm9yb3dncmFuZCI6Y2FzZSJibGFua2xpbmVhZnRlcml0ZW1zIjpjYXNlImhpZGRlbiI6Y2FzZSJzdWJ0b3RhbCI6Y2FzZSJiYXNlZmllbGQiOmNhc2UibWFwY2hpbGRpdGVtcyI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJyZWZyZXNob25maWxlb3Bl'@;
put 'biI6Y2FzZSJwcmludHNldHRpdGxlcyI6Y2FzZSJtZXJnZWxhYmVscyI6Y2FzZSJkZWZhdWx0dmVyc2lvbiI6Y2FzZSJyZWZyZXNobmFtZSI6Y2FzZSJyZWZyZXNoZGF0ZSI6Y2FzZSJyZWZyZXNoZGF0ZWNvcHkiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpjYXNlInZlcnNpb25sYXN0dXBk'@;
put 'YXRlIjpjYXNlInZlcnNpb251cGRhdGVhYmxlbWluIjpjYXNlInZlcnNpb25yZWZyZXNoYWJsZW1pbiI6Y2FzZSJjYWxjdWxhdGlvbiI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlInBhZ2VicmVha3MiOnN3aXRjaCh2ZVszXSl7Y2FzZSJjb2xicmVha3MiOmNhc2UiY29sYnJlYWsi'@;
put 'OmNhc2Uicm93YnJlYWtzIjpjYXNlInJvd2JyZWFrIjpjYXNlImNvbHN0YXJ0IjpjYXNlImNvbGVuZCI6Y2FzZSJyb3dlbmQiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjpzd2l0Y2godmVbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6Y2FzZSJhdXRvZmls'@;
put 'dGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKHZlWzNdKXtjYXNlImlkIjpjYXNlImF1dG9mb3JtYXRmb250IjpjYXNlImF1dG9mb3JtYXRwYXR0ZXJuIjpj'@;
put 'YXNlInF1ZXJ5c291cmNlIjpjYXNlInF1ZXJ5dHlwZSI6Y2FzZSJlbmFibGVyZWRpcmVjdGlvbnMiOmNhc2UicmVmcmVzaGVkaW54bDkiOmNhc2UidXJsc3RyaW5nIjpjYXNlImh0bWx0YWJsZXMiOmNhc2UiY29ubmVjdGlvbiI6Y2FzZSJjb21tYW5kdGV4dCI6Y2FzZSJyZWZyZXNoaW5mbyI6'@;
put 'Y2FzZSJub3RpdGxlcyI6Y2FzZSJuZXh0aWQiOmNhc2UiY29sdW1uaW5mbyI6Y2FzZSJvdmVyd3JpdGVjZWxscyI6Y2FzZSJkb25vdHByb21wdGZvcmZpbGUiOmNhc2UidGV4dHdpemFyZHNldHRpbmdzIjpjYXNlInNvdXJjZSI6Y2FzZSJudW1iZXIiOmNhc2UiZGVjaW1hbCI6Y2FzZSJ0aG91'@;
put 'c2FuZHNlcGFyYXRvciI6Y2FzZSJ0cmFpbGluZ21pbnVzbnVtYmVycyI6Y2FzZSJmb3JtYXRzZXR0aW5ncyI6Y2FzZSJmaWVsZHR5cGUiOmNhc2UiZGVsaW1pdGVycyI6Y2FzZSJ0YWIiOmNhc2UiY29tbWEiOmNhc2UiYXV0b2Zvcm1hdG5hbWUiOmNhc2UidmVyc2lvbmxhc3RlZGl0IjpjYXNl'@;
put 'InZlcnNpb25sYXN0cmVmcmVzaCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjpzd2l0Y2godmVbM10pe2Nhc2UicmFuZ2UiOm9pLnJlZj12ZTticmVhaztjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRp'@;
put 'bmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhp'@;
put 'ZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25h'@;
put 'bGZvcm1hdHRpbmciOnN3aXRjaCh2ZVszXSl7Y2FzZSJyYW5nZSI6Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJl'@;
put 'cnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6'@;
put 'Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlIm1hcGluZm8iOmNhc2Uic2NoZW1hIjpjYXNlImRhdGEiOnN3aXRjaCh2ZVszXSl7Y2FzZSJtYXAiOmNhc2UiZW50cnkiOmNhc2UicmFuZ2UiOmNhc2UieHBhdGgiOmNh'@;
put 'c2UiZmllbGQiOmNhc2UieHNkdHlwZSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJhZ2dyZWdhdGUiOmNhc2UiZWxlbWVudHR5cGUiOmNhc2UiYXR0cmlidXRldHlwZSI6Y2FzZSJzY2hlbWEiOmNhc2UiZWxlbWVudCI6Y2FzZSJjb21wbGV4dHlwZSI6Y2FzZSJkYXRhdHlwZSI6Y2FzZSJhbGwiOmNh'@;
put 'c2UiYXR0cmlidXRlIjpjYXNlImV4dGVuZHMiOmNhc2Uicm93IjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2Uic21hcnR0YWdzIjpicmVhaztkZWZhdWx0OnlzPSExfWlmKHlzfHx2ZVszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZighU2VbU2UubGVuZ3RoLTFdWzFdKXRocm93'@;
put 'IlVucmVjb2duaXplZCB0YWc6ICIrdmVbM10rInwiK1NlLmpvaW4oInwiKTtpZigiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIj09PVNlW1NlLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT12ZVsxXT9SZSh0cixfbyxCcixRLnNsaWNlKFpuLHZl'@;
put 'LmluZGV4KSk6KEJyPXZlLFpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aCk7YnJlYWt9aWYoTC5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIit2ZVszXSsifCIrU2Uuam9pbigifCIpfXZhciBnbD17fTtyZXR1cm4hTC5ib29rU2hlZXRzJiYhTC5ib29rUHJvcHMmJihnbC5TaGVldHM9QmUp'@;
put 'LGdsLlNoZWV0TmFtZXM9R2UsZ2wuV29ya2Jvb2s9enIsZ2wuU1NGPXcuZ2V0X3RhYmxlKCksZ2wuUHJvcHM9ZXIsZ2wuQ3VzdHByb3BzPXRyLGdsLlNoZWV0cyYmZ2wuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG51KXt2YXIgdGw9Z2wuU2hlZXRzW251XTt0bFsiIW1lcmdlcyJdJiZ0'@;
put 'bFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oS3QpeyJzdHJpbmciPT10eXBlb2YgS3QmJihLdD1NLnV0aWxzLmRlY29kZV9yYW5nZShLdCkpO3ZhciBnbj1NLnV0aWxzLmVuY29kZV9jZWxsKEt0LnMpLExuPUFycmF5LmlzQXJyYXkodGwpPyh0bFtLdC5zLnJdfHxbXSlbS3Qucy5jXTp0'@;
put 'bFtnbl07TG4mJkxuLnMmJihudWxsIT1Mbi5zLnRvcCYmcW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlKHRsLEt0LHt0b3A6TG4ucy50b3B9KSxudWxsIT1Mbi5zLmJvdHRvbSYmcW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlKHRsLEt0LHtib3R0b206TG4ucy5ib3R0b219KSxudWxsIT1Mbi5zLmxl'@;
put 'ZnQmJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7bGVmdDpMbi5zLmxlZnR9KSxudWxsIT1Mbi5zLnJpZ2h0JiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse3JpZ2h0OkxuLnMucmlnaHR9KSl9KX0pLGdsfWZ1bmN0aW9uIGphKHksUCl7c3dpdGNoKFA2KFA9UHx8e30p'@;
put 'LFAudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4ganIoc2UuZGVjb2RlKHkpLFApO2Nhc2UiYmluYXJ5IjpjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZXR1cm4ganIoeSxQKTtjYXNlImFycmF5IjpyZXR1cm4ganIoTih5KSxQKX19ZnVuY3Rpb24gVm4oeSl7cmV0dXJuIFNy'@;
put 'KCJOYW1lZFJhbmdlIixudWxsLHsic3M6TmFtZSI6eS5OYW1lLCJzczpSZWZlcnNUbyI6Ij0iK0s5KHkuUmVmLHtyOjAsYzowfSl9KX1mdW5jdGlvbiBnTSh5LFAsTCxRLHJlLGdlLF9lKXtpZigheXx8bnVsbD09eS52JiZudWxsPT15LmYmJiFRLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIHZl'@;
put 'PXt9O2lmKHkuZiYmKHZlWyJzczpGb3JtdWxhIl09Ij0iK0hyKEs5KHkuZixfZSkpKSx5LkYmJnkuRi5zbGljZSgwLFAubGVuZ3RoKT09UCl7dmFyIFNlPXNzKHkuRi5zbGljZShQLmxlbmd0aCsxKSk7dmVbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKFNlLnI9PV9lLnI/IiI6IlsiKyhTZS5y'@;
put 'LV9lLnIpKyJdIikrIkMiKyhTZS5jPT1fZS5jPyIiOiJbIisoU2UuYy1fZS5jKSsiXSIpfWlmKHkubCYmeS5sLlRhcmdldCYmKHZlWyJzczpIUmVmIl09SHIoeS5sLlRhcmdldCkseS5sLlRvb2x0aXAmJih2ZVsieDpIUmVmU2NyZWVuVGlwIl09SHIoeS5sLlRvb2x0aXApKSksTFsiIW1lcmdl'@;
put 'cyJdKWZvcih2YXIgSGU9TFsiIW1lcmdlcyJdLEJlPTA7QmUhPUhlLmxlbmd0aDsrK0JlKUhlW0JlXS5zLmMhPV9lLmN8fEhlW0JlXS5zLnIhPV9lLnJ8fChIZVtCZV0uZS5jPkhlW0JlXS5zLmMmJih2ZVsic3M6TWVyZ2VBY3Jvc3MiXT1IZVtCZV0uZS5jLUhlW0JlXS5zLmMpLEhlW0JlXS5l'@;
put 'LnI+SGVbQmVdLnMuciYmKHZlWyJzczpNZXJnZURvd24iXT1IZVtCZV0uZS5yLUhlW0JlXS5zLnIpKTt2YXIgR2U9IiIsbnQ9IiI7c3dpdGNoKHkudCl7Y2FzZSJ6IjppZighUS5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6R2U9Ik51bWJlciIsbnQ9U3RyaW5nKHkudik7YnJl'@;
put 'YWs7Y2FzZSJiIjpHZT0iQm9vbGVhbiIsbnQ9eS52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpHZT0iRXJyb3IiLG50PVFvW3kudl07YnJlYWs7Y2FzZSJkIjpHZT0iRGF0ZVRpbWUiLG50PW5ldyBEYXRlKHkudikudG9JU09TdHJpbmcoKSxudWxsPT15LnomJih5Lno9eS56fHx3Ll90YWJsZVsx'@;
put 'NF0pO2JyZWFrO2Nhc2UicyI6R2U9IlN0cmluZyIsbnQ9aW8oeS52fHwiIil9dmFyIGR0PWd1KFEuY2VsbFhmcyxudWxsLHksUSk7dmVbInNzOlN0eWxlSUQiXT0icyIrKDIxK2R0KSx2ZVsic3M6SW5kZXgiXT1fZS5jKzE7dmFyIEN0PW51bGwhPXkudj9udDoiIixjdD0ieiI9PXkudD8iIjp5'@;
put 'LlI/ZnVuY3Rpb24gWEwoeSl7cmV0dXJuJzxzczpEYXRhIHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicreS5tYXAoZnVuY3Rpb24oTCl7dmFyIFE9aW8oTC52KTtyZXR1cm4gTC5zJiYoTC5zLmJvbGQmJihRPSI8Qj4iK1ErIjwvQj4i'@;
put 'KSxMLnMuaXRhbGljJiYoUT0iPEk+IitRKyI8L0k+IiksTC5zLnN0cmlrZSYmKFE9IjxTPiIrUSsiPC9TPiIpLEwucy51bmRlcmxpbmUmJihRPSI8VT4iK1ErIjwvVT4iKSwic3VwZXIiPT1MLnMudmFsaWduJiYoUT0iPFN1cD4iK1ErIjwvU3VwPiIpLCJzdWIiPT1MLnMudmFsaWduJiYoUT0i'@;
put 'PFN1Yj4iK1ErIjwvU3ViPiIpLChMLnMubmFtZXx8TC5zLnN6fHxMLnMuY29sb3ImJm51bGwhPUwucy5jb2xvci5yZ2IpJiYoUT1bIjxGb250IixMLnMubmFtZT8nIGh0bWw6RmFjZT0iJytMLnMubmFtZSsnIic6IiIsTC5zLnN6PycgaHRtbDpTaXplPSInK0wucy5zeisnIic6IiIsTC5zLmNv'@;
put 'bG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIEwucy5jb2xvci5yZ2I/TC5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6TC5zLmNvbG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLFEsIjwvRm9udD4iXS5qb2luKCIiKSkpLFF9KS5qb2luKCIiKSsi'@;
put 'PC9EYXRhPiJ9KHkuUik6JzxEYXRhIHNzOlR5cGU9IicrR2UrJyI+JytDdCsiPC9EYXRhPiI7cmV0dXJuKHkuY3x8W10pLmxlbmd0aD4wJiYoY3QrPWZ1bmN0aW9uIGVfKHkpe3JldHVybiB5Lm1hcChmdW5jdGlvbihQKXt2YXIgUT1Tcigic3M6RGF0YSIsaG8oUC50fHwiIikse3htbG5zOiJo'@;
put 'dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiBTcigiQ29tbWVudCIsUSx7InNzOkF1dGhvciI6UC5hfSl9KS5qb2luKCIiKX0oeS5jKSksU3IoIkNlbGwiLGN0LHZlKX1mdW5jdGlvbiBtTSh5LFApe3ZhciBMPSc8Um93IHNzOkluZGV4PSInKyh5KzEpKyciJztyZXR1'@;
put 'cm4gUCYmKFAuaHB4JiYhUC5ocHQmJihQLmhwdD1qMihQLmhweCkpLFAuaHB0JiYoTCs9JyBzczpBdXRvRml0SGVpZ2h0PSIwIiBzczpIZWlnaHQ9IicrUC5ocHQrJyInKSxQLmhpZGRlbiYmKEwrPScgc3M6SGlkZGVuPSIxIicpKSxMKyI+In1mdW5jdGlvbiBWZSh5LFAsTCl7dmFyIFE9W10s'@;
put 'Z2U9TC5TaGVldHNbTC5TaGVldE5hbWVzW3ldXSxfZT1nZT9mdW5jdGlvbiBwTSh5LFAsTCxRKXtpZigheXx8ISgoUXx8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciByZT1RLldvcmtib29rLk5hbWVzLGdlPVtdLF9lPTA7X2U8cmUubGVuZ3RoOysrX2Upe3ZhciB2'@;
put 'ZT1yZVtfZV07dmUuU2hlZXQ9PUwmJih2ZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxnZS5wdXNoKFZuKHZlKSkpfXJldHVybiBnZS5qb2luKCIiKX0oZ2UsMCx5LEwpOiIiO3JldHVybiBfZS5sZW5ndGg+MCYmUS5wdXNoKCI8TmFtZXM+IitfZSsiPC9OYW1lcz4iKSxfZT1nZT9mdW5jdGlv'@;
put 'biB2TSh5LFAsTCxRKXtpZigheVsiIXJlZiJdKXJldHVybiIiO3ZhciByZT1PaSh5WyIhcmVmIl0pLGdlPXlbIiFtZXJnZXMiXXx8W10sX2U9MCx2ZT1bXTt5WyIhY29scyJdJiZ5WyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oYnQsRnQpe3B1KGJ0KTt2YXIga3Q9ISFidC53aWR0aCxUdD1Z'@;
put 'ZChGdCxidCksWnQ9eyJzczpJbmRleCI6RnQrMX07a3QmJihadFsic3M6V2lkdGgiXT14YyhUdC53aWR0aCkpLGJ0LmhpZGRlbiYmKFp0WyJzczpIaWRkZW4iXT0iMSIpLHZlLnB1c2goU3IoIkNvbHVtbiIsbnVsbCxadCkpfSk7Zm9yKHZhciBTZT1BcnJheS5pc0FycmF5KHkpLEhlPXJlLnMu'@;
put 'cjtIZTw9cmUuZS5yOysrSGUpe2Zvcih2YXIgQmU9W21NKEhlLCh5WyIhcm93cyJdfHxbXSlbSGVdKV0sR2U9cmUucy5jO0dlPD1yZS5lLmM7KytHZSl7dmFyIG50PSExO2ZvcihfZT0wO19lIT1nZS5sZW5ndGg7KytfZSlpZighKGdlW19lXS5zLmM+R2V8fGdlW19lXS5zLnI+SGV8fGdlW19l'@;
put 'XS5lLmM8R2V8fGdlW19lXS5lLnI8SGUpKXsoZ2VbX2VdLnMuYyE9R2V8fGdlW19lXS5zLnIhPUhlKSYmKG50PSEwKTticmVha31pZighbnQpe3ZhciBkdD17cjpIZSxjOkdlfSxDdD1kaShkdCk7QmUucHVzaChnTShTZT8oeVtIZV18fFtdKVtHZV06eVtDdF0sQ3QseSxQLDAsMCxkdCkpfX1C'@;
put 'ZS5wdXNoKCI8L1Jvdz4iKSxCZS5sZW5ndGg+MiYmdmUucHVzaChCZS5qb2luKCIiKSl9cmV0dXJuIHZlLmpvaW4oIiIpfShnZSxQKToiIixfZS5sZW5ndGg+MCYmUS5wdXNoKCI8VGFibGU+IitfZSsiPC9UYWJsZT4iKSxRLnB1c2goZnVuY3Rpb24geHQoeSxQLEwsUSl7aWYoIXkpcmV0dXJu'@;
put 'IiI7dmFyIHJlPVtdO2lmKHlbIiFtYXJnaW5zIl0mJihyZS5wdXNoKCI8UGFnZVNldHVwPiIpLHlbIiFtYXJnaW5zIl0uaGVhZGVyJiZyZS5wdXNoKFNyKCJIZWFkZXIiLG51bGwseyJ4Ok1hcmdpbiI6eVsiIW1hcmdpbnMiXS5oZWFkZXJ9KSkseVsiIW1hcmdpbnMiXS5mb290ZXImJnJlLnB1'@;
put 'c2goU3IoIkZvb3RlciIsbnVsbCx7Ing6TWFyZ2luIjp5WyIhbWFyZ2lucyJdLmZvb3Rlcn0pKSxyZS5wdXNoKFNyKCJQYWdlTWFyZ2lucyIsbnVsbCx7Ing6Qm90dG9tIjp5WyIhbWFyZ2lucyJdLmJvdHRvbXx8IjAuNzUiLCJ4OkxlZnQiOnlbIiFtYXJnaW5zIl0ubGVmdHx8IjAuNyIsIng6'@;
put 'UmlnaHQiOnlbIiFtYXJnaW5zIl0ucmlnaHR8fCIwLjciLCJ4OlRvcCI6eVsiIW1hcmdpbnMiXS50b3B8fCIwLjc1In0pKSxyZS5wdXNoKCI8L1BhZ2VTZXR1cD4iKSksUSYmUS5Xb3JrYm9vayYmUS5Xb3JrYm9vay5TaGVldHMmJlEuV29ya2Jvb2suU2hlZXRzW0xdKWlmKFEuV29ya2Jvb2su'@;
put 'U2hlZXRzW0xdLkhpZGRlbilyZS5wdXNoKFNyKCJWaXNpYmxlIiwxPT1RLldvcmtib29rLlNoZWV0c1tMXS5IaWRkZW4/IlNoZWV0SGlkZGVuIjoiU2hlZXRWZXJ5SGlkZGVuIix7fSkpO2Vsc2V7Zm9yKHZhciBnZT0wO2dlPEwmJighUS5Xb3JrYm9vay5TaGVldHNbZ2VdfHxRLldvcmtib29r'@;
put 'LlNoZWV0c1tnZV0uSGlkZGVuKTsrK2dlKTtnZT09TCYmcmUucHVzaCgiPFNlbGVjdGVkLz4iKX1pZigoKCgoUXx8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmcmUucHVzaCgiPERpc3BsYXlSaWdodFRvTGVmdC8+IiksaG4oeVsiIWdyaWRsaW5lcyJdKSYmcmUu'@;
put 'cHVzaCgiPERvTm90RGlzcGxheUdyaWRsaW5lcy8+IikseVsiIWZyZWV6ZSJdKXtyZS5wdXNoKCI8RnJlZXplUGFuZXMvPiIpLHJlLnB1c2goIjxGcm96ZW5Ob1NwbGl0Lz4iKTt2YXIgX2U9c3MoeVsiIWZyZWV6ZSJdKTtfZS5yPjAmJihyZS5wdXNoKGZzKCJTcGxpdEhvcml6b250YWwiLCIi'@;
put 'K19lLnIpKSxyZS5wdXNoKGZzKCJUb3BSb3dCb3R0b21QYW5lIiwiIitfZS5yKSkpLF9lLmM+MCYmKHJlLnB1c2goZnMoIlNwbGl0VmVydGljYWwiLCIiK19lLmMpKSxyZS5wdXNoKGZzKCJMZWZ0Q29sdW1uUmlnaHRQYW5lIiwiIitfZS5jKSkpfXJldHVybiB5WyIhcHJvdGVjdCJdJiYocmUu'@;
put 'cHVzaChmcygiUHJvdGVjdENvbnRlbnRzIiwiVHJ1ZSIpKSx5WyIhcHJvdGVjdCJdLm9iamVjdHMmJnJlLnB1c2goZnMoIlByb3RlY3RPYmplY3RzIiwiVHJ1ZSIpKSx5WyIhcHJvdGVjdCJdLnNjZW5hcmlvcyYmcmUucHVzaChmcygiUHJvdGVjdFNjZW5hcmlvcyIsIlRydWUiKSksbnVsbD09'@;
put 'eVsiIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxsc3x8eVsiIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxscz9udWxsIT15WyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJiF5WyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJnJlLnB1c2goZnMoIkVuYWJsZVNlbGVj'@;
put 'dGlvbiIsIlVubG9ja2VkQ2VsbHMiKSk6cmUucHVzaChmcygiRW5hYmxlU2VsZWN0aW9uIiwiTm9TZWxlY3Rpb24iKSksW1siZm9ybWF0Q2VsbHMiLCJBbGxvd0Zvcm1hdENlbGxzIl0sWyJmb3JtYXRDb2x1bW5zIiwiQWxsb3dTaXplQ29scyJdLFsiZm9ybWF0Um93cyIsIkFsbG93U2l6ZVJv'@;
put 'd3MiXSxbImluc2VydENvbHVtbnMiLCJBbGxvd0luc2VydENvbHMiXSxbImluc2VydFJvd3MiLCJBbGxvd0luc2VydFJvd3MiXSxbImluc2VydEh5cGVybGlua3MiLCJBbGxvd0luc2VydEh5cGVybGlua3MiXSxbImRlbGV0ZUNvbHVtbnMiLCJBbGxvd0RlbGV0ZUNvbHMiXSxbImRlbGV0ZVJv'@;
put 'd3MiLCJBbGxvd0RlbGV0ZVJvd3MiXSxbInNvcnQiLCJBbGxvd1NvcnQiXSxbImF1dG9GaWx0ZXIiLCJBbGxvd0ZpbHRlciJdLFsicGl2b3RUYWJsZXMiLCJBbGxvd1VzZVBpdm90VGFibGVzIl1dLmZvckVhY2goZnVuY3Rpb24odmUpe3lbIiFwcm90ZWN0Il1bdmVbMF1dJiZyZS5wdXNoKCI8'@;
put 'Iit2ZVsxXSsiLz4iKX0pKSwwPT1yZS5sZW5ndGg/IiI6U3IoIldvcmtzaGVldE9wdGlvbnMiLHJlLmpvaW4oIiIpLHt4bWxuczpXaS54fSl9KGdlLDAseSxMKSksUS5qb2luKCIiKX1mdW5jdGlvbiBKTCh5LFApe1B8fChQPXt9KSx5LlNTRnx8KHkuU1NGPXcuZ2V0X3RhYmxlKCkpLHkuU1NG'@;
put 'JiYoSih3KSx3LmxvYWRfdGFibGUoeS5TU0YpLFAucmV2c3NmPUFlKHkuU1NGKSxQLnJldnNzZlt5LlNTRls2NTUzNV1dPTAsUC5zc2Y9eS5TU0YseS5TdHlsZXM9e0ZvbnRzOlAuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWls'@;
put 'eToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6UC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6UC5Cb3JkZXJzPVt7fV19LFAuY2VsbFhmcz1bXSxQLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxndShQLmNlbGxYZnMs'@;
put 'bnVsbCx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkpO3ZhciBMPVtdO0wucHVzaChmdW5jdGlvbiBmTSh5LFApe3ZhciBMPVtdO3JldHVybiB5LlByb3BzJiZMLnB1c2goZnVuY3Rpb24gcmMoeSxQKXt2YXIgTD1bXTtyZXR1cm4gbHQoRjIpLm1hcChmdW5jdGlvbihRKXtmb3IodmFyIHJlPTA7'@;
put 'cmU8T2wubGVuZ3RoOysrcmUpaWYoT2xbcmVdWzFdPT1RKXJldHVybiBPbFtyZV07Zm9yKHJlPTA7cmU8UjEubGVuZ3RoOysrcmUpaWYoUjFbcmVdWzFdPT1RKXJldHVybiBSMVtyZV07dGhyb3cgUX0pLmZvckVhY2goZnVuY3Rpb24oUSl7aWYobnVsbCE9eVtRWzFdXSl7dmFyIHJlPVAmJlAu'@;
put 'UHJvcHMmJm51bGwhPVAuUHJvcHNbUVsxXV0/UC5Qcm9wc1tRWzFdXTp5W1FbMV1dOyJkYXRlIj09PVFbMl0mJihyZT1uZXcgRGF0ZShyZSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCJaIikpLCJudW1iZXIiPT10eXBlb2YgcmU/cmU9U3RyaW5nKHJlKTohMD09PXJlfHwhMT09'@;
put 'PXJlP3JlPXJlPyIxIjoiMCI6cmUgaW5zdGFuY2VvZiBEYXRlJiYocmU9bmV3IERhdGUocmUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLEwucHVzaChmcyhGMltRWzFdXXx8UVsxXSxyZSkpfX0pLFNyKCJEb2N1bWVudFByb3BlcnRpZXMiLEwuam9pbigiIikse3htbG5z'@;
put 'OldpLm99KX0oeS5Qcm9wcyxQKSkseS5DdXN0cHJvcHMmJkwucHVzaChmdW5jdGlvbiBUdyh5LFApe3ZhciBMPVsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiXSxRPSJDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMiLHJlPVtdO3JldHVybiB5JiZsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtp'@;
put 'ZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxnZSkpe2Zvcih2YXIgX2U9MDtfZTxPbC5sZW5ndGg7KytfZSlpZihnZT09T2xbX2VdWzFdKXJldHVybjtmb3IoX2U9MDtfZTxSMS5sZW5ndGg7KytfZSlpZihnZT09UjFbX2VdWzFdKXJldHVybjtmb3IoX2U9MDtfZTxM'@;
put 'Lmxlbmd0aDsrK19lKWlmKGdlPT1MW19lXSlyZXR1cm47dmFyIHZlPXlbZ2VdLFNlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgdmU/KFNlPSJmbG9hdCIsdmU9U3RyaW5nKHZlKSk6ITA9PT12ZXx8ITE9PT12ZT8oU2U9ImJvb2xlYW4iLHZlPXZlPyIxIjoiMCIpOnZlPVN0cmluZyh2ZSks'@;
put 'cmUucHVzaChTcihKaShnZSksdmUseyJkdDpkdCI6U2V9KSl9fSksUCYmbHQoUCkuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsZ2UpJiYoIXl8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxnZSkp'@;
put 'KXt2YXIgX2U9UFtnZV0sdmU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBfZT8odmU9ImZsb2F0IixfZT1TdHJpbmcoX2UpKTohMD09PV9lfHwhMT09PV9lPyh2ZT0iYm9vbGVhbiIsX2U9X2U/IjEiOiIwIik6X2UgaW5zdGFuY2VvZiBEYXRlPyh2ZT0iZGF0ZVRpbWUudHoiLF9lPV9lLnRv'@;
put 'SVNPU3RyaW5nKCkpOl9lPVN0cmluZyhfZSkscmUucHVzaChTcihKaShnZSksX2UseyJkdDpkdCI6dmV9KSl9fSksIjwiK1ErJyB4bWxucz0iJytXaS5vKyciPicrcmUuam9pbigiIikrIjwvIitRKyI+In0oeS5Qcm9wcyx5LkN1c3Rwcm9wcykpLEwuam9pbigiIil9KHksUCkpLEwucHVzaCgi'@;
put 'IiksTC5wdXNoKCIiKSxMLnB1c2goIiIpO2Zvcih2YXIgUT0wO1E8eS5TaGVldE5hbWVzLmxlbmd0aDsrK1EpTC5wdXNoKFNyKCJXb3Jrc2hlZXQiLFZlKFEsUCx5KSx7InNzOk5hbWUiOkhyKHkuU2hlZXROYW1lc1tRXSl9KSk7cmV0dXJuIExbMl09ZnVuY3Rpb24gS0woeSxQKXt2YXIgUT1b'@;
put 'Wyc8U3R5bGUgc3M6SUQ9IkRlZmF1bHQiIHNzOk5hbWU9Ik5vcm1hbCI+JywnPEFsaWdubWVudCBzczpWZXJ0aWNhbD0iQm90dG9tIi8+JywiPEJvcmRlcnMvPiIsJzxGb250IHNzOkZvbnROYW1lPSJDYWxpYnJpIiB4OkZhbWlseT0iU3dpc3MiIHNzOlNpemU9IjEyIiBzczpDb2xvcj0iIzAw'@;
put 'MDAwMCIvPicsIjxJbnRlcmlvci8+IiwiPE51bWJlckZvcm1hdC8+IiwiPFByb3RlY3Rpb24vPiIsIjwvU3R5bGU+Il0uam9pbigiIildO3JldHVybiBQLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihyZSxnZSl7dmFyIF9lPVtdO2lmKHJlLmFsaWdubWVudCl7dmFyIHZlPXt9O3JlLmFsaWdu'@;
put 'bWVudC5zaHJpbmtUb0ZpdCYmKHZlWyJzczpTaHJpbmtUb0ZpdCJdPSIxIikscmUuYWxpZ25tZW50LndyYXBUZXh0JiYodmVbInNzOldyYXBUZXh0Il09IjEiKSxyZS5hbGlnbm1lbnQudmVydGljYWwmJih2ZVsic3M6VmVydGljYWwiXT13dChyZS5hbGlnbm1lbnQudmVydGljYWwpKSxyZS5h'@;
put 'bGlnbm1lbnQuaG9yaXpvbnRhbCYmKHZlWyJzczpIb3Jpem9udGFsIl09d3QocmUuYWxpZ25tZW50Lmhvcml6b250YWwpKSxyZS5hbGlnbm1lbnQuaW5kZW50JiYodmVbInNzOkluZGVudCJdPXJlLmFsaWdubWVudC5pbmRlbnQpLHJlLmFsaWdubWVudC50ZXh0Um90YXRpb24mJih2ZVsic3M6'@;
put 'Um90YXRlIl09cmUuYWxpZ25tZW50LnRleHRSb3RhdGlvbiksX2UucHVzaChTcigiQWxpZ25tZW50IixudWxsLHZlKSl9ZTppZihudWxsIT1yZS5mb250SWQpe3ZhciBTZT1QLkZvbnRzW3JlLmZvbnRJZF07aWYoIVNlKWJyZWFrIGU7dmFyIEhlPXsic3M6Rm9udE5hbWUiOiJDYWxpYnJpIiwi'@;
put 'c3M6U2l6ZSI6IjEyIn0sQmU9ITE7U2UuYm9sZCYmKEJlPSEwLEhlWyJzczpCb2xkIl09IjEiKSxTZS5pdGFsaWMmJihCZT0hMCxIZVsic3M6SXRhbGljIl09IjEiKSxTZS5zdHJpa2UmJihCZT0hMCxIZVsic3M6U3RyaWtlVGhyb3VnaCJdPSIxIiksbnVsbCE9U2UudW5kZXJsaW5lJiYoQmU9'@;
put 'ITAsSGVbInNzOlVuZGVybGluZSJdPXVNW1NlLnVuZGVybGluZV18fChTZS51bmRlcmxpbmU/IlNpbmdsZSI6Ik5vbmUiKSksbnVsbCE9U2Uuc3omJihCZT0hMCxIZVsic3M6U2l6ZSJdPVNlLnN6KSxudWxsIT1TZS5uYW1lJiYoQmU9ITAsSGVbInNzOkZvbnROYW1lIl09U2UubmFtZSksU2Uu'@;
put 'Y29sb3ImJm51bGwhPVNlLmNvbG9yLnJnYiYmKEJlPSEwLEhlWyJzczpDb2xvciJdPSIjIisoIm51bWJlciI9PXR5cGVvZiBTZS5jb2xvci5yZ2I/IjAwMDAwMCIrU2UuY29sb3IucmdiLnRvU3RyaW5nKDE2KTpTZS5jb2xvci5yZ2IpLnNsaWNlKC02KSksWyJzdWIiLCJzdXBlciJdLmluZGV4'@;
put 'T2YoU2UudmFsaWduKT4tMSYmKEhlWyJzczpWZXJ0aWNhbEFsaWduIl09d3QoU2UudmFsaWduKSsic2NyaXB0IiksQmUmJl9lLnB1c2goU3IoIkZvbnQiLG51bGwsSGUpKX1lOmlmKHJlLmZpbGxJZD4wKXt2YXIgR2U9UC5GaWxsc1tyZS5maWxsSWRdO2lmKCFHZXx8IUdlLmZnQ29sb3J8fG51'@;
put 'bGw9PUdlLmZnQ29sb3IucmdiKWJyZWFrIGU7X2UucHVzaChTcigiSW50ZXJpb3IiLG51bGwseyJzczpQYXR0ZXJuIjpfRFtHZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgR2UuZmdDb2xvci5yZ2I/IjAwIitHZS5mZ0NvbG9yLnJnYi50'@;
put 'b1N0cmluZygxNik6R2UuZmdDb2xvci5yZ2IpLnNsaWNlKC02KX0pKX1fZS5wdXNoKFNyKCJOdW1iZXJGb3JtYXQiLG51bGwseyJzczpGb3JtYXQiOkhyKHcuX3RhYmxlW3JlLm51bUZtdElkXSl9KSk7dmFyIG50PXsic3M6SUQiOiJzIisoMjErZ2UpfTtyZS5zdHlsZSYmKG50WyJzczpOYW1l'@;
put 'Il09cmUuc3R5bGUpLFEucHVzaChTcigiU3R5bGUiLF9lLmpvaW4oIiIpLG50KSl9KSxTcigiU3R5bGVzIixRLmpvaW4oIiIpKX0oMCxQKSxMWzNdPWZ1bmN0aW9uIHY1KHkpe2lmKCEoKHl8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgUD15Lldvcmtib29rLk5h'@;
put 'bWVzLEw9W10sUT0wO1E8UC5sZW5ndGg7KytRKXt2YXIgcmU9UFtRXTtudWxsPT1yZS5TaGVldCYmKHJlLk5hbWUubWF0Y2goL15feGxmblwuLyl8fEwucHVzaChWbihyZSkpKX1yZXR1cm4gU3IoIk5hbWVzIixMLmpvaW4oIiIpKX0oeSksQm4rU3IoIldvcmtib29rIixMLmpvaW4oIiIpLHt4'@;
put 'bWxuczpXaS5zcywieG1sbnM6byI6V2kubywieG1sbnM6eCI6V2kueCwieG1sbnM6c3MiOldpLnNzLCJ4bWxuczpkdCI6V2kuZHQsInhtbG5zOmh0bWwiOldpLmh0bWx9KX1mdW5jdGlvbiBrcih5LFAsTCxRKXt2YXIgcmU9TCxnZT1bXSxfZT1QLnNsaWNlKFAubCxQLmwrcmUpO2lmKFEmJlEu'@;
put 'ZW5jJiZRLmVuYy5pbnNpdHUmJl9lLmxlbmd0aD4wKXN3aXRjaCh5Lm4pe2Nhc2UiQk9GIjpjYXNlIkZpbGVQYXNzIjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNlIlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJFT0YiOlEuZW5jLmluc2l0'@;
put 'dSh1ZSh7bGVuZ3RoOl9lLmxlbmd0aH0pLCJza2lwIik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6US5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6NH0pLCJza2lwIiksX2U9QnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oX2Uuc2xpY2UoMCw0KSksQnVmZmVyLmZyb20oUS5lbmMuaW5zaXR1KF9l'@;
put 'LnNsaWNlKDQpKSldKTticmVhaztkZWZhdWx0Ol9lPVEuZW5jLmluc2l0dShfZSl9QXJyYXkuaXNBcnJheShQKSYmIUFycmF5LmlzQXJyYXkoX2UpJiYoX2U9QXJyYXkuZnJvbShfZSkpLGdlLnB1c2goX2UpLFAubCs9cmU7Zm9yKHZhciB2ZT1YMFtZbihQLFAubCldLFNlPTA7bnVsbCE9dmUm'@;
put 'JiJDb250aW51ZSI9PT12ZS5uLnNsaWNlKDAsOCk7KXJlPVluKFAsUC5sKzIpLFNlPVAubCs0LFEmJlEuZW5jJiZRLmVuYy5pbnNpdHUmJlEuZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOjR9KSwic2tpcCIpLCJDb250aW51ZUZydCI9PXZlLm4/U2UrPTQ6IkNvbnRpbnVlRnJ0Ij09dmUubi5zbGlj'@;
put 'ZSgwLDExKSYmKFNlKz0xMixRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZRLmVuYy5pbnNpdHUodWUoe2xlbmd0aDo4fSksInNraXAiKSksX2U9UC5zbGljZShTZSxQLmwrNCtyZSksUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmX2UubGVuZ3RoPjAmJihfZT1RLmVuYy5pbnNpdHUoX2UpKSxnZS5w'@;
put 'dXNoKF9lKSxQLmwrPTQrcmUsdmU9WDBbWW4oUCxQLmwpXTt2YXIgSGU9UyhnZSk7b2woSGUsMCk7dmFyIEJlPTA7SGUubGVucz1bXTtmb3IodmFyIEdlPTA7R2U8Z2UubGVuZ3RoOysrR2UpSGUubGVucy5wdXNoKEJlKSxCZSs9Z2VbR2VdLmxlbmd0aDtpZihIZS5sZW5ndGg8TCl0aHJvdyJY'@;
put 'TFMgUmVjb3JkICIrKHkmJnkubnx8Ij8/IikrIiBUcnVuY2F0ZWQ6ICIrSGUubGVuZ3RoKyIgPCAiK0w7cmV0dXJuIHkuZihIZSxIZS5sZW5ndGgsUSl9ZnVuY3Rpb24gRWMoeSxQLEwpe2lmKCJ6IiE9PXkudCYmeS5YRil7dmFyIFE9MDt0cnl7UT15Lnp8fHkuWEYubnVtRm10SWR8fDAsUC5j'@;
put 'ZWxsTkYmJih5Lno9dy5fdGFibGVbUV0pfWNhdGNoKGdlKXtpZihQLldURil0aHJvdyBnZX1pZighUHx8ITEhPT1QLmNlbGxUZXh0KXRyeXt5Lnc9ImUiPT09eS50P3kud3x8UW9beS52XTowPT09UXx8IkdlbmVyYWwiPT1RPyJuIj09PXkudD8oMHx5LnYpPT09eS52P3cuX2dlbmVyYWxfaW50'@;
put 'KHkudik6dy5fZ2VuZXJhbF9udW0oeS52KTp3Ll9nZW5lcmFsKHkudik6dy5mb3JtYXQoUSx5LnYse2RhdGUxOTA0OiEhTCxkYXRlTkY6UCYmUC5kYXRlTkZ9KX1jYXRjaChnZSl7aWYoUC5XVEYpdGhyb3cgZ2V9aWYoUC5jZWxsRGF0ZXMmJlEmJiJuIj09eS50JiZ3LmlzX2RhdGUody5fdGFi'@;
put 'bGVbUV18fFN0cmluZyhRKSkpe3ZhciByZT13LnBhcnNlX2RhdGVfY29kZSh5LnYpO3JlJiYoeS50PSJkIix5LnY9bmV3IERhdGUocmUueSxyZS5tLTEscmUuZCxyZS5ILHJlLk0scmUuUyxyZS51KSl9fX1mdW5jdGlvbiBYMih5LFAsTCl7cmV0dXJue3Y6eSxpeGZlOlAsdDpMfX12YXIgX009'@;
put 'ZnVuY3Rpb24oeSxQLEwpe1BbIiFvYmplY3RzIl09eX0scnA9e1NJOiJlMDg1OWZmMmY5NGY2ODEwYWI5MTA4MDAyYjI3YjNkOSIsRFNJOiIwMmQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSIsVURJOiIwNWQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSJ9O2Z1bmN0aW9uIF81'@;
put 'KHksUCl7dmFyIEwsUSxyZSxnZTtpZihQfHwoUD17fSksUDYoUCksVigpLFAuY29kZXBhZ2UmJmsoUC5jb2RlcGFnZSkseS5GdWxsUGF0aHMpe2lmKGplLmZpbmQoeSwiL2VuY3J5cHRpb24iKSl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7TD1qZS5maW5k'@;
put 'KHksIiFDb21wT2JqIiksUT1qZS5maW5kKHksIi9Xb3JrYm9vayIpfHxqZS5maW5kKHksIi9Cb29rIil9ZWxzZXtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6eT1EKHNlLmRlY29kZSh5KSk7YnJlYWs7Y2FzZSJiaW5hcnkiOnk9RCh5KTticmVhaztjYXNlImJ1ZmZlciI6YnJlYWs7Y2Fz'@;
put 'ZSJhcnJheSI6QXJyYXkuaXNBcnJheSh5KXx8KHk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeSkpfW9sKHksMCksUT17Y29udGVudDp5fX1pZihMJiZmdW5jdGlvbiBUaSh5KXt2YXIgUD17fSxMPXkuY29udGVudDtpZihMLmw9MjgsUC5BbnNpVXNlclR5cGU9TC5yZWFkX3NoaWZ0KDAs'@;
put 'Imxwc3RyLWFuc2kiKSxQLkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gZzQoeSl7cmV0dXJuIHA0KHksMSl9KEwpLEwubGVuZ3RoLUwubDw9NClyZXR1cm4gUDt2YXIgUT1MLnJlYWRfc2hpZnQoNCk7aWYoMD09UXx8UT40MHx8KEwubC09NCxQLlJlc2VydmVkMT1MLnJlYWRfc2hpZnQo'@;
put 'MCwibHBzdHItYW5zaSIpLEwubGVuZ3RoLUwubDw9NCl8fDE5MDc1MDU2NTIhPT0oUT1MLnJlYWRfc2hpZnQoNCkpfHwoUC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIEo3KHkpe3JldHVybiBwNCh5LDIpfShMKSwwPT0oUT1MLnJlYWRfc2hpZnQoNCkpfHxRPjQwKSlyZXR1cm4g'@;
put 'UDtMLmwtPTQsUC5SZXNlcnZlZDI9TC5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShMKSxQLmJvb2tQcm9wcyYmIVAuYm9va1NoZWV0cylyZT17fTtlbHNle3ZhciBfZT1oZT8iYnVmZmVyIjoiYXJyYXkiO2lmKFEmJlEuY29udGVudClyZT1mdW5jdGlvbiBiTSh5LFApe3ZhciBMPXtvcHRzOnt9'@;
put 'fSxRPXt9O251bGwhPXRlJiZudWxsPT1QLmRlbnNlJiYoUC5kZW5zZT10ZSk7dmFyIEdlLGR0LGN0LGJ0LFR0LFp0LHJlPVAuZGVuc2U/W106e30sZ2U9e30sX2U9e30sdmU9bnVsbCxTZT1bXSxIZT0iIixCZT17fSxudD0iIixGdD17fSxrdD1bXSxwbj1bXSxLbj1bXSx1bj17U2hlZXRzOltd'@;
put 'LFdCUHJvcHM6e2RhdGUxOTA0OiExfSxWaWV3czpbe31dfSxxbj17fSx6bj17Rm9udHM6W119LGtuPWZ1bmN0aW9uKEpyKXtyZXR1cm4gSnI8OD9DcltKcl06SnI8NjQmJktuW0pyLThdfHxDcltKcl19LGVyPWZ1bmN0aW9uKEpyLHdzKXt2YXIgbWwsdnM9SnIuWEYuZGF0YTt2cyYmKHZzLnBh'@;
put 'dHRlcm5UeXBlfHxudWxsIT12cy5pY3ZGb3JlKSYmd3MmJndzLmNlbGxTdHlsZXMmJihKci5zPXt9LEpyLnMucGF0dGVyblR5cGU9dnMucGF0dGVyblR5cGUsSnIuWEYuZm9udCYmVXQoSnIucyxKci5YRi5mb250KSx2cy5mV3JhcCYmKChKci5zLmFsaWdubWVudHx8KEpyLnMuYWxpZ25tZW50'@;
put 'PXt9KSkud3JhcFRleHQ9ITApLHZzLmZTaHJpbmtUb0ZpdCYmKChKci5zLmFsaWdubWVudHx8KEpyLnMuYWxpZ25tZW50PXt9KSkuc2hyaW5rVG9GaXQ9ITApLHZzLmhhbGlnbiYmKChKci5zLmFsaWdubWVudHx8KEpyLnMuYWxpZ25tZW50PXt9KSkuaG9yaXpvbnRhbD12cy5oYWxpZ24pLHZz'@;
put 'LnZhbGlnbiYmKChKci5zLmFsaWdubWVudHx8KEpyLnMuYWxpZ25tZW50PXt9KSkudmVydGljYWw9dnMudmFsaWduKSx2cy5jSW5kZW50JiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS5pbmRlbnQ9dnMuY0luZGVudCksNjQhPXZzLmljdkZvcmUmJjY1IT12cy5pY3ZC'@;
put 'YWNrJiYoKG1sPXoxKGtuKHZzLmljdkZvcmUpKSkmJihKci5zLmZnQ29sb3I9e3JnYjptbH0pLChtbD16MShrbih2cy5pY3ZCYWNrKSkpJiYoSnIucy5iZ0NvbG9yPXtyZ2I6bWx9KSksWyJMZWZ0IiwiUmlnaHQiLCJUb3AiLCJCb3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKGpsKXt2c1siZGci'@;
put 'K2psXSYmKEpyLnNbamwudG9Mb3dlckNhc2UoKV09e3N0eWxlOlcyW3ZzWyJkZyIramxdXSxjb2xvcjp7cmdiOnoxKGtuKHZzWyJpY3YiK2psXSkpfX0pfSkpfSx0cj1mdW5jdGlvbihKcix3cyx2cyl7aWYoIShDaT4xfHx2cy5zaGVldFJvd3MmJkpyLnI+PXZzLnNoZWV0Um93cykpe2lmKHZz'@;
put 'LmNlbGxTdHlsZXMmJndzLlhGJiZ3cy5YRi5kYXRhJiZlcih3cyx2cyksZGVsZXRlIHdzLml4ZmUsZGVsZXRlIHdzLlhGLEdlPUpyLG50PWRpKEpyKSwoIV9lfHwhX2Uuc3x8IV9lLmUpJiYoX2U9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSksSnIucjxfZS5zLnImJihfZS5zLnI9SnIuciks'@;
put 'SnIuYzxfZS5zLmMmJihfZS5zLmM9SnIuYyksSnIucisxPl9lLmUuciYmKF9lLmUucj1Kci5yKzEpLEpyLmMrMT5fZS5lLmMmJihfZS5lLmM9SnIuYysxKSx2cy5jZWxsRm9ybXVsYSYmd3MuZilmb3IodmFyIG1sPTA7bWw8a3QubGVuZ3RoOysrbWwpaWYoIShrdFttbF1bMF0ucy5jPkpyLmN8'@;
put 'fGt0W21sXVswXS5zLnI+SnIucnx8a3RbbWxdWzBdLmUuYzxKci5jfHxrdFttbF1bMF0uZS5yPEpyLnIpKXt3cy5GPU9vKGt0W21sXVswXSksKGt0W21sXVswXS5zLmMhPUpyLmN8fGt0W21sXVswXS5zLnIhPUpyLnIpJiZkZWxldGUgd3MuZix3cy5mJiYod3MuZj0iIit4bChrdFttbF1bMV0s'@;
put 'X2UsSnIsU24sWm4pKTticmVha312cy5kZW5zZT8ocmVbSnIucl18fChyZVtKci5yXT1bXSkscmVbSnIucl1bSnIuY109d3MpOnJlW250XT13c319LFpuPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjpGdCxhcnJheWY6a3QscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgs'@;
put 'Y29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhUCYmISFQLmNlbGxTdHlsZXMsV1RGOiEhUCYmISFQLnd0Zn07Wm4ucGFzc3dvcmQ9UC5wYXNzd29yZD9QLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBvaSxCcj1udWxsLGtpPVtdLExpPVtdLFFyPVtdLHVyPVtdLHJy'@;
put 'PSExLFNuPVtdO1NuLlNoZWV0TmFtZXM9Wm4uc25hbWVzLFNuLnNoYXJlZGY9Wm4uc2hhcmVkZixTbi5hcnJheWY9Wm4uYXJyYXlmLFNuLm5hbWVzPVtdLFNuLlhUST1bXTt2YXIgRGksZ3I9IiIsQ2k9MCx6cj0wLGppPVtdLF9vPVtdO1puLmNvZGVwYWdlPTEyMDAsaigxMjAwKTtmb3IodmFy'@;
put 'IFlvPSExO3kubDx5Lmxlbmd0aC0xOyl7dmFyIGxvPXkubCxBbz15LnJlYWRfc2hpZnQoMik7aWYoWm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZShbMCwwXSksImhlYWRlci0wIiksMD09PUFvJiYiRU9GIj09PWdyKWJyZWFrO3ZhciB4bz15Lmw9PT15Lmxlbmd0'@;
put 'aD8wOnkucmVhZF9zaGlmdCgyKTtabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDBdKSwibGVuZ3RoLTAiKTt2YXIgaGk9WDBbQW9dO2lmKGhpJiZoaS5mKXtpZihQLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT1nciYmIkJvdW5kU2hlZXQ4IiE9PWhp'@;
put 'Lm4pYnJlYWs7aWYoZ3I9aGkubiwyPT09aGkucnx8MTI9PWhpLnIpe3ZhciB0YT15LnJlYWRfc2hpZnQoMik7aWYoeG8tPTIsWm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZShbMCwwXSkpLCFabi5lbmMmJnRhIT09QW8mJigoMjU1JnRhKTw8OHx0YT4+OCkhPT1B'@;
put 'byl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK3RhKyIhPSIrQW8pOzEyPT1oaS5yJiYoeS5sKz0xMCx4by09MTAsWm4mJlpuLmVuYyYmWm4uZW5jLmluc2l0dSYmWm4uZW5jLmluc2l0dSh1ZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIE1uPWtyKGhpLHkseG8sWm4pLE1z'@;
put 'PWhpLm47aWYoMD09Q2kmJiJCT0YiIT1Ncyljb250aW51ZTtzd2l0Y2goTXMpe2Nhc2UiRGF0ZTE5MDQiOkwub3B0cy5EYXRlMTkwND11bi5XQlByb3BzLmRhdGUxOTA0PU1uO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjpMLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UiRmlsZVBh'@;
put 'c3MiOmlmKFpuLmVuY3x8KHkubD0wLENpPTApLFpuLmVuYz1NbiwhUC5wYXNzd29yZCYmbnVsbD09TW4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PU1uLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBzY2hlbWUg'@;
put 'dW5zdXBwb3J0ZWQiKTtpZighTW4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIldyaXRlQWNjZXNzIjpabi5sYXN0dXNlcj1NbjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNlIkJvb2tCb29sIjpjYXNl'@;
put 'IlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2FsY2VkIjpjYXNlIkV4dFNTVCI6Y2FzZSJCb29rRXh0IjpjYXNlIlJpY2hUZXh0U3RyZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6YnJlYWs7Y2FzZSJDb2Rl'@;
put 'UGFnZSI6dmFyIHlzPU51bWJlcihNbik7c3dpdGNoKHlzKXtjYXNlIDIxMDEwOnlzPTEyMDA7YnJlYWs7Y2FzZSAzMjc2ODp5cz0xZTQ7YnJlYWs7Y2FzZSAzMjc2OTp5cz0xMjUyfWooWm4uY29kZXBhZ2U9eXMpLFlvPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6Wm4ucnJ0YWJpZD1NbjticmVh'@;
put 'aztjYXNlIldpblByb3RlY3QiOlpuLndpbmxvY2tlZD1NbjticmVhaztjYXNlIlJlZnJlc2hBbGwiOmNhc2UiQ2FsY0NvdW50IjpjYXNlIkNhbGNEZWx0YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNTYXZlUmVjYWxjIjpMLm9w'@;
put 'dHNbTXNdPU1uO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOlpuLkNhbGNSZWZNb2RlPU1uO2JyZWFrO2Nhc2UiRm9yY2VGdWxsQ2FsY3VsYXRpb24iOkwub3B0cy5GdWxsQ2FsYz1NbjticmVhaztjYXNlIldzQm9vbCI6TW4uZkRpYWxvZyYmKHJlWyIhdHlwZSJdPSJkaWFsb2ciKSxNbi5mQmVs'@;
put 'b3d8fCgocmVbIiFvdXRsaW5lIl18fChyZVsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSxNbi5mUmlnaHR8fCgocmVbIiFvdXRsaW5lIl18fChyZVsiIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2JyZWFrO2Nhc2UiWEYiOk1uLmZvbnQ9em4uRm9udHNbTW4uaWZudDw0P01uLmlmbnQ6TW4u'@;
put 'aWZudC0xXSxwbi5wdXNoKE1uKTticmVhaztjYXNlIlN1cEJvb2siOlNuLnB1c2goW01uXSksU25bU24ubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIkV4dGVybk5hbWUiOlNuW1NuLmxlbmd0aC0xXS5wdXNoKE1uKTticmVhaztjYXNlIkxibCI6RGk9e05hbWU6TW4uTmFtZSxSZWY6eGwo'@;
put 'TW4ucmdjZSxfZSxudWxsLFNuLFpuKX0sTW4uaXRhYj4wJiYoRGkuU2hlZXQ9TW4uaXRhYi0xKSxTbi5uYW1lcy5wdXNoKERpKSxTblswXXx8KFNuWzBdPVtdLFNuWzBdLlhUST1bXSksU25bU24ubGVuZ3RoLTFdLnB1c2goTW4pLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1Nbi5OYW1lJiZN'@;
put 'bi5pdGFiPjAmJk1uLnJnY2UmJk1uLnJnY2VbMF0mJk1uLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1Nbi5yZ2NlWzBdWzBdWzBdJiYoX29bTW4uaXRhYi0xXT17cmVmOk9vKE1uLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSJFeHRlcm5Db3VudCI6Wm4uRXh0ZXJuQ291bnQ9TW47'@;
put 'YnJlYWs7Y2FzZSJFeHRlcm5TaGVldCI6MD09U24ubGVuZ3RoJiYoU25bMF09W10sU25bMF0uWFRJPVtdKSxTbltTbi5sZW5ndGgtMV0uWFRJPVNuW1NuLmxlbmd0aC0xXS5YVEkuY29uY2F0KE1uKSxTbi5YVEk9U24uWFRJLmNvbmNhdChNbik7YnJlYWs7Y2FzZSJOYW1lQ210IjppZihabi5i'@;
put 'aWZmPDgpYnJlYWs7bnVsbCE9RGkmJihEaS5Db21tZW50PU1uWzFdKTticmVhaztjYXNlIlByb3RlY3QiOnJlWyIhcHJvdGVjdCJdPU1uO2JyZWFrO2Nhc2UiUGFzc3dvcmQiOjAhPT1NbiYmWm4uV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjogIitNbik7YnJlYWs7Y2Fz'@;
put 'ZSJCb3VuZFNoZWV0OCI6Z2VbTW4ucG9zXT1Nbixabi5zbmFtZXMucHVzaChNbi5uYW1lKTticmVhaztjYXNlIkVPRiI6aWYocmVbIiFncmlkbGluZXMiXT0hQnJ8fEJyLmdyaWQsQnI9bnVsbCwtLUNpKWJyZWFrO2lmKF9lLmUpe2lmKF9lLmUucj4wJiZfZS5lLmM+MCl7aWYoX2UuZS5yLS0s'@;
put 'X2UuZS5jLS0scmVbIiFyZWYiXT1PbyhfZSksUC5zaGVldFJvd3MmJlAuc2hlZXRSb3dzPD1fZS5lLnIpe3ZhciBFbD1fZS5lLnI7X2UuZS5yPVAuc2hlZXRSb3dzLTEscmVbIiFmdWxscmVmIl09cmVbIiFyZWYiXSxyZVsiIXJlZiJdPU9vKF9lKSxfZS5lLnI9RWx9X2UuZS5yKyssX2UuZS5j'@;
put 'Kyt9a2kubGVuZ3RoPjAmJihyZVsiIW1lcmdlcyJdPWtpKSxMaS5sZW5ndGg+MCYmX00oTGkscmUsem4pLFFyLmxlbmd0aD4wJiYocmVbIiFjb2xzIl09UXIpLHVyLmxlbmd0aD4wJiYocmVbIiFyb3dzIl09dXIpLHVuLlNoZWV0cy5wdXNoKHFuKX0iIj09PUhlP0JlPXJlOlFbSGVdPXJlLHJl'@;
put 'PVAuZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1abi5iaWZmJiYoWm4uYmlmZj17OToyLDUyMTozLDEwMzM6NH1bQW9dfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoyLDc6Mn1bTW4uQklGRlZlcl18fDgpLFpuLmJpZmZndWVzcz0wPT1Nbi5CSUZGVmVy'@;
put 'LDA9PU1uLkJJRkZWZXImJjQwOTY9PU1uLmR0JiYoWm4uYmlmZj01LFlvPSEwLGooWm4uY29kZXBhZ2U9Mjg1OTEpKSw4PT1abi5iaWZmJiYwPT1Nbi5CSUZGVmVyJiYxNj09TW4uZHQmJihabi5iaWZmPTIpLENpKyspYnJlYWs7aWYocmU9UC5kZW5zZT9bXTp7fSxabi5iaWZmPDgmJiFZbyYm'@;
put 'KFlvPSEwLGooWm4uY29kZXBhZ2U9UC5jb2RlcGFnZXx8MTI1MikpLFpuLmJpZmY8NXx8MD09TW4uQklGRlZlciYmNDA5Nj09TW4uZHQpeyIiPT09SGUmJihIZT0iU2hlZXQxIiksX2U9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgc2w9e3Bvczp5LmwteG8sbmFtZTpIZX07Z2Vbc2wu'@;
put 'cG9zXT1zbCxabi5zbmFtZXMucHVzaChIZSl9ZWxzZSBIZT0oZ2VbbG9dfHx7bmFtZToiIn0pLm5hbWU7MzI9PU1uLmR0JiYocmVbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PU1uLmR0JiYocmVbIiF0eXBlIl09Im1hY3JvIiksa2k9W10sTGk9W10sWm4uYXJyYXlmPWt0PVtdLFFyPVtdLHVyPVtd'@;
put 'LHJyPSExLHFuPXtIaWRkZW46KGdlW2xvXXx8e2hzOjB9KS5ocyxuYW1lOkhlfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09cmVbIiF0eXBlIl0mJihQLmRlbnNlPyhyZVtNbi5yXXx8W10pW01uLmNdOnJlW2RpKHtjOk1uLmMscjpN'@;
put 'bi5yfSldKSYmKytNbi5jLFR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV18fHt9LHY6TW4udmFsLHQ6Im4ifSx6cj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIkJvb2xF'@;
put 'cnIiOlR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV0sdjpNbi52YWwsdDpNbi50fSx6cj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIlJLIjpUdD17aXhmZTpNbi5peGZl'@;
put 'LFhGOnBuW01uLml4ZmVdLHY6TW4ucmtudW0sdDoibiJ9LHpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApO2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgZ2w9TW4uYztnbDw9TW4uQzsrK2dsKXt2'@;
put 'YXIgbnU9TW4ucmtyZWNbZ2wtTW4uY11bMF07VHQ9e2l4ZmU6bnUsWEY6cG5bbnVdLHY6TW4ucmtyZWNbZ2wtTW4uY11bMV0sdDoibiJ9LHpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6Z2wscjpNbi5yfSxUdCxQKX1icmVhaztj'@;
put 'YXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1Nbi52YWwpe3ZlPU1uO2JyZWFrfWlmKChUdD1YMihNbi52YWwsTW4uY2VsbC5peGZlLE1uLnR0KSkuWEY9cG5bVHQuaXhmZV0sUC5jZWxsRm9ybXVsYSl7dmFyIHRsPU1uLmZvcm11bGE7aWYodGwmJnRsWzBdJiZ0bFswXVswXSYmIlB0Z0V4cCI9'@;
put 'PXRsWzBdWzBdWzBdKXt2YXIgS3Q9dGxbMF1bMF1bMV1bMF0sZ249dGxbMF1bMF1bMV1bMV0sTG49ZGkoe3I6S3QsYzpnbn0pO0Z0W0xuXT9UdC5mPSIiK3hsKE1uLmZvcm11bGEsX2UsTW4uY2VsbCxTbixabik6VHQuRj0oKFAuZGVuc2U/KHJlW0t0XXx8W10pW2duXTpyZVtMbl0pfHx7fSku'@;
put 'Rn1lbHNlIFR0LmY9IiIreGwoTW4uZm9ybXVsYSxfZSxNbi5jZWxsLFNuLFpuKX16cj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKE1uLmNlbGwsVHQsUCksdmU9TW47YnJlYWs7Y2FzZSJTdHJpbmciOmlmKCF2ZSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhIik7dmUudmFsPU1uLChUdD1YMihNbix2ZS5jZWxsLml4ZmUsInMiKSkuWEY9cG5bVHQuaXhmZV0sUC5jZWxsRm9ybXVsYSYmKFR0LmY9IiIreGwodmUuZm9ybXVsYSxfZSx2ZS5jZWxsLFNuLFpuKSksenI+MCYmKFR0Lno9amlbVHQu'@;
put 'aXhmZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih2ZS5jZWxsLFR0LFApLHZlPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6a3QucHVzaChNbik7dmFyIFdyPWRpKE1uWzBdLnMpO2lmKGR0PVAuZGVuc2U/KHJlW01uWzBdLnMucl18fFtdKVtNblswXS5zLmNdOnJlW1dyXSxQ'@;
put 'LmNlbGxGb3JtdWxhJiZkdCl7aWYoIXZlfHwhV3J8fCFkdClicmVhaztkdC5mPSIiK3hsKE1uWzFdLF9lLE1uWzBdLFNuLFpuKSxkdC5GPU9vKE1uWzBdKX1icmVhaztjYXNlIlNockZtbGEiOmlmKCFQLmNlbGxGb3JtdWxhKWJyZWFrO2lmKG50KXtpZighdmUpYnJlYWs7RnRbZGkodmUuY2Vs'@;
put 'bCldPU1uWzBdLCgoZHQ9UC5kZW5zZT8ocmVbdmUuY2VsbC5yXXx8W10pW3ZlLmNlbGwuY106cmVbZGkodmUuY2VsbCldKXx8e30pLmY9IiIreGwoTW5bMF0sX2UsR2UsU24sWm4pfWJyZWFrO2Nhc2UiTGFiZWxTc3QiOlR0PVgyKFNlW01uLmlzc3RdLnQsTW4uaXhmZSwicyIpLFNlW01uLmlz'@;
put 'c3RdLmgmJihUdC5oPVNlW01uLmlzc3RdLmgpLFR0LlhGPXBuW1R0Lml4ZmVdLHpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSxFYyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApLFNlW01uLmlzc3RdLlImJihUdC5SPVNlW01uLmlzc3RdLlIubWFw'@;
put 'KGZ1bmN0aW9uKHppKXt2YXIgSnI9b24oemkpO3JldHVybiB6aS5zPT16bi5Gb250c1swXSYmKEpyLnM9VHQucyksSnJ9KSk7YnJlYWs7Y2FzZSJCbGFuayI6UC5zaGVldFN0dWJzJiYoVHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXSx0OiJ6In0senI+MCYmKFR0Lno9amlbVHQuaXhm'@;
put 'ZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCkpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlmKFAuc2hlZXRTdHVicylmb3IodmFyIFhuPU1uLmM7WG48PU1uLkM7KytYbil7dmFyIGVpPU1uLml4ZmVbWG4tTW4uY107VHQ9e2l4ZmU6ZWks'@;
put 'WEY6cG5bZWldLHQ6InoifSx6cj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSksRWMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOlhuLHI6TW4ucn0sVHQsUCl9YnJlYWs7Y2FzZSJSU3RyaW5nIjpjYXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooVHQ9WDIoTW4udmFsLE1uLml4ZmUs'@;
put 'InMiKSkuWEY9cG5bVHQuaXhmZV0senI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLEVjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJEaW1lbnNpb25zIjoxPT09Q2kmJihfZT1Nbik7YnJlYWs7Y2FzZSJTU1QiOihTZT1Nbiku'@;
put 'Zm9yRWFjaChmdW5jdGlvbih6aSl7emkuX1I/KHppLl9SWzBdJiZ6aS5fUlswXS5pZHg+MCYmemkuX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSksemkuUj16aS5fUi5tYXAoZnVuY3Rpb24oSnIsd3Mpe3JldHVybnt0OiJzIix2OnppLnQuc2xpY2UoSnIuaWR4LCh6aS5fUlt3cysxXXx8e30p'@;
put 'LmlkeCksczp6bi5Gb250c1tKci5pZm50PDQ/SnIuaWZudDpKci5pZm50LTFdfX0pLFAuY2VsbEhUTUwmJih6aS5oPWs5KHppLlIpKSk6UC5jZWxsSFRNTCYmKHppLmg9cm8oemkudCkpLGRlbGV0ZSB6aS5fUn0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1abi5iaWZmKXtqaVt6cisrXT1N'@;
put 'blsxXTtmb3IodmFyIGlyPTA7aXI8enIrMTYzJiZ3Ll90YWJsZVtpcl0hPU1uWzFdOysraXIpO2lyPj0xNjMmJncubG9hZChNblsxXSx6cisxNjMpfWVsc2Ugdy5sb2FkKE1uWzFdLE1uWzBdKTticmVhaztjYXNlIkJJRkYyRk9STUFUIjpqaVt6cisrXT1Nbjtmb3IodmFyIHJpPTA7cmk8enIr'@;
put 'MTYzJiZ3Ll90YWJsZVtyaV0hPU1uOysrcmkpO3JpPj0xNjMmJncubG9hZChNbix6cisxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6a2k9a2kuY29uY2F0KE1uKTticmVhaztjYXNlIk9iaiI6TGlbTW4uY21vWzBdXT1abi5sYXN0b2JqPU1uO2JyZWFrO2Nhc2UiVHhPIjpabi5sYXN0b2Jq'@;
put 'LlR4Tz1NbjticmVhaztjYXNlIkltRGF0YSI6Wm4ubGFzdG9iai5JbURhdGE9TW47YnJlYWs7Y2FzZSJITGluayI6Zm9yKGJ0PU1uWzBdLnMucjtidDw9TW5bMF0uZS5yOysrYnQpZm9yKGN0PU1uWzBdLnMuYztjdDw9TW5bMF0uZS5jOysrY3QpKGR0PVAuZGVuc2U/KHJlW2J0XXx8W10pW2N0'@;
put 'XTpyZVtkaSh7YzpjdCxyOmJ0fSldKSYmKGR0Lmw9TW5bMV0pO2JyZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3IoYnQ9TW5bMF0ucy5yO2J0PD1NblswXS5lLnI7KytidClmb3IoY3Q9TW5bMF0ucy5jO2N0PD1NblswXS5lLmM7KytjdCkoZHQ9UC5kZW5zZT8ocmVbYnRdfHxbXSlbY3RdOnJl'@;
put 'W2RpKHtjOmN0LHI6YnR9KV0pJiZkdC5sJiYoZHQubC5Ub29sdGlwPU1uWzFdKTticmVhaztjYXNlIk5vdGUiOmlmKFpuLmJpZmY8PTUmJlpuLmJpZmY+PTIpYnJlYWs7ZHQ9UC5kZW5zZT8ocmVbTW5bMF0ucl18fFtdKVtNblswXS5jXTpyZVtkaShNblswXSldO3ZhciBtbz1MaVtNblsyXV07'@;
put 'ZHR8fChQLmRlbnNlPyhyZVtNblswXS5yXXx8KHJlW01uWzBdLnJdPVtdKSxkdD1yZVtNblswXS5yXVtNblswXS5jXT17dDoieiJ9KTpkdD1yZVtkaShNblswXSldPXt0OiJ6In0sX2UuZS5yPU1hdGgubWF4KF9lLmUucixNblswXS5yKSxfZS5zLnI9TWF0aC5taW4oX2Uucy5yLE1uWzBdLnIp'@;
put 'LF9lLmUuYz1NYXRoLm1heChfZS5lLmMsTW5bMF0uYyksX2Uucy5jPU1hdGgubWluKF9lLnMuYyxNblswXS5jKSksZHQuY3x8KGR0LmM9W10pLGR0LmMucHVzaCh7YTpNblsxXSx0Om1vLlR4Ty50fSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goaGkubil7Y2FzZSJDbHJ0Q2xpZW50IjpjYXNlIkhl'@;
put 'YWRlciI6Y2FzZSJGb290ZXIiOmNhc2UiSENlbnRlciI6Y2FzZSJWQ2VudGVyIjpjYXNlIlBscyI6Y2FzZSJHQ1ciOmNhc2UiTEhSZWNvcmQiOmNhc2UiREJDZWxsIjpjYXNlIkVudEV4VTIiOmNhc2UiU3hWaWV3IjpjYXNlIlN4dmQiOmNhc2UiU1hWSSI6Y2FzZSJTWFZERXgiOmNhc2UiU3hJ'@;
put 'dmQiOmNhc2UiU1hTdHJpbmciOmNhc2UiU3luYyI6Y2FzZSJBZGRpbiI6Y2FzZSJTWERJIjpjYXNlIlNYTEkiOmNhc2UiU1hFeCI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJGZWF0IjpjYXNlIkZlYXRIZHIiOmNhc2UiRmVhdEhkcjExIjpjYXNlIkZlYXR1cmUxMSI6Y2FzZSJGZWF0dXJlMTIiOmNh'@;
put 'c2UiTGlzdDEyIjpjYXNlIlJlY2FsY0lkIjpjYXNlIkR4R0NvbCI6Y2FzZSJGYmkiOmNhc2UiRmJpMiI6Y2FzZSJHZWxGcmFtZSI6Y2FzZSJYRkNSQyI6Y2FzZSJTdHlsZSI6Y2FzZSJTdHlsZUV4dCI6Y2FzZSJTY2VuYXJpb1Byb3RlY3QiOmNhc2UiT2JqUHJvdGVjdCI6Y2FzZSJDb25kRm10'@;
put 'MTIiOmNhc2UiVGFibGUiOmNhc2UiVGFibGVTdHlsZXMiOmNhc2UiVGFibGVTdHlsZSI6Y2FzZSJUYWJsZVN0eWxlRWxlbWVudCI6Y2FzZSJTWFN0cmVhbUlEIjpjYXNlIlNYVlMiOmNhc2UiRENvblJlZiI6Y2FzZSJTWEFkZGwiOmNhc2UiRENvbkJpbiI6Y2FzZSJEQ29uTmFtZSI6Y2FzZSJT'@;
put 'WFBJIjpjYXNlIlN4Rm9ybWF0IjpjYXNlIlN4U2VsZWN0IjpjYXNlIlN4UnVsZSI6Y2FzZSJTeEZpbHQiOmNhc2UiU3hJdG0iOmNhc2UiU3hEWEYiOmNhc2UiU2Nlbk1hbiI6Y2FzZSJEQ29uIjpjYXNlIkNlbGxXYXRjaCI6Y2FzZSJQcmludFJvd0NvbCI6Y2FzZSJQcmludEdyaWQiOmNhc2Ui'@;
put 'UHJpbnRTaXplIjpjYXNlIlhDVCI6Y2FzZSJDUk4iOmNhc2UiU2NsIjpjYXNlIlNoZWV0RXh0IjpjYXNlIlNoZWV0RXh0T3B0aW9uYWwiOmNhc2UiT2JOb01hY3JvcyI6Y2FzZSJPYlByb2oiOmNhc2UiR1VJRFR5cGVMaWIiOmNhc2UiV09wdCI6Y2FzZSJQaG9uZXRpY0luZm8iOmNhc2UiT2xl'@;
put 'T2JqZWN0U2l6ZSI6Y2FzZSJEWEYiOmNhc2UiRFhGTiI6Y2FzZSJEWEZOMTIiOmNhc2UiRFhGTjEyTGlzdCI6Y2FzZSJEWEZOMTJOb0NCIjpjYXNlIkR2IjpjYXNlIkRWYWwiOmNhc2UiQlJBSSI6Y2FzZSJTZXJpZXMiOmNhc2UiU2VyaWVzVGV4dCI6Y2FzZSJEQ29ubiI6Y2FzZSJEYk9yUGFy'@;
put 'YW1RcnkiOmNhc2UiREJRdWVyeUV4dCI6Y2FzZSJPbGVEYkNvbm4iOmNhc2UiRXh0U3RyaW5nIjpjYXNlIklGbXRSZWNvcmQiOmNhc2UiQ29uZEZtdCI6Y2FzZSJDRiI6Y2FzZSJDRjEyIjpjYXNlIkNGRXgiOmNhc2UiRXhjZWw5RmlsZSI6Y2FzZSJVbml0cyI6Y2FzZSJJbnRlcmZhY2VIZHIi'@;
put 'OmNhc2UiTW1zIjpjYXNlIkludGVyZmFjZUVuZCI6Y2FzZSJEU0YiOmNhc2UiQnVpbHRJbkZuR3JvdXBDb3VudCI6Y2FzZSJXaW5kb3cxIjpjYXNlIkhpZGVPYmoiOmNhc2UiR3JpZFNldCI6Y2FzZSJHdXRzIjpjYXNlIlVzZXJCVmlldyI6Y2FzZSJVc2VyU1ZpZXdCZWdpbiI6Y2FzZSJVc2Vy'@;
put 'U1ZpZXdFbmQiOmNhc2UiRGVmQ29sV2lkdGgiOmNhc2UiRGVmYXVsdFJvd0hlaWdodCI6YnJlYWs7Y2FzZSJYRkV4dCI6VUQocG5bTW4uaXhmZV0sTW4uZXh0KTticmVhaztjYXNlIkNvbEluZm8iOmlmKCFabi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7TW4uZT49TW4uczspUXJbTW4uZS0tXT17'@;
put 'd2lkdGg6TW4udy8yNTYsbGV2ZWw6TW4ubGV2ZWx8fDAsaGlkZGVuOiEhKDEmTW4uZmxhZ3MpfSxycnx8KHJyPSEwKSxwdShRcltNbi5lKzFdKTticmVhaztjYXNlIlJvdyI6dmFyIGlpPXt9O251bGwhPU1uLmxldmVsJiYodXJbTW4ucl09aWksaWkubGV2ZWw9TW4ubGV2ZWwpLE1uLmhpZGRl'@;
put 'biYmKHVyW01uLnJdPWlpLGlpLmhpZGRlbj0hMCksTW4uaHB0JiYodXJbTW4ucl09aWksaWkuaHB0PU1uLmhwdCxpaS5ocHg9VTEoTW4uaHB0KSksTW4uaXhmZSYmKHVyW01uLnJdPWlpLGVyKFR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV18fHt9LHY6MCx0OiJuIn0sUCksaWkucz1U'@;
put 'dC5zKTticmVhaztjYXNlIkxlZnRNYXJnaW4iOmNhc2UiUmlnaHRNYXJnaW4iOmNhc2UiVG9wTWFyZ2luIjpjYXNlIkJvdHRvbU1hcmdpbiI6cmVbIiFtYXJnaW5zIl18fGRmKHJlWyIhbWFyZ2lucyJdPXt9KSxyZVsiIW1hcmdpbnMiXVtNcy5zbGljZSgwLC02KS50b0xvd2VyQ2FzZSgpXT1N'@;
put 'bjticmVhaztjYXNlIlNlbGVjdGlvbiI6cmVbIiFzZWwiXT1NbjticmVhaztjYXNlIlNldHVwIjpyZVsiIW1hcmdpbnMiXXx8ZGYocmVbIiFtYXJnaW5zIl09e30pLHJlWyIhbWFyZ2lucyJdLmhlYWRlcj1Nbi5oZWFkZXIscmVbIiFtYXJnaW5zIl0uZm9vdGVyPU1uLmZvb3RlcjticmVhaztj'@;
put 'YXNlIldpbmRvdzIiOk1uLlJUTCYmKHVuLlZpZXdzWzBdLlJUTD0hMCksQnI9TW47YnJlYWs7Y2FzZSJDb3VudHJ5IjpadD1NbjticmVhaztjYXNlIkZvbnQiOk1uLmljdiYma24oTW4uaWN2KSYmKE1uLmNvbG9yPXtyZ2I6ejEoa24oTW4uaWN2KSl9KSxkZWxldGUgTW4uaWN2LDA9PXpuLkZv'@;
put 'bnRzLmxlbmd0aCYmWjEoTW4pLHpuLkZvbnRzLnB1c2goTW4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6S249TW47YnJlYWs7Y2FzZSJUaGVtZSI6b2k9TW47YnJlYWs7Y2FzZSJDb2RlTmFtZSI6SGU/cW4uQ29kZU5hbWU9TW58fHFuLm5hbWU6dW4uV0JQcm9wcy5Db2RlTmFtZT1Nbnx8IlRoaXNX'@;
put 'b3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooQnJ8fHt9KS5mcm96ZW4mJihyZVsiIWZyZWV6ZSJdPWRpKHtyOk1uLnl8fDAsYzpNbi54fHwwfSkpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKGhpLm4pe2Nhc2UiRGF0IjpjYXNlIkJlZ2luIjpjYXNlIkVuZCI6Y2FzZSJTdGFydEJsb2NrIjpjYXNl'@;
put 'IkVuZEJsb2NrIjpjYXNlIkZyYW1lIjpjYXNlIkFyZWEiOmNhc2UiQXhpcyI6Y2FzZSJBeGlzTGluZSI6Y2FzZSJUaWNrIjpjYXNlIkF4ZXNVc2VkIjpjYXNlIkNydExheW91dDEyIjpjYXNlIkNydExheW91dDEyQSI6Y2FzZSJDcnRMaW5rIjpjYXNlIkNydExpbmUiOmNhc2UiQ3J0TWxGcnQi'@;
put 'OmNhc2UiQ3J0TWxGcnRDb250aW51ZSI6Y2FzZSJMaW5lRm9ybWF0IjpjYXNlIkFyZWFGb3JtYXQiOmNhc2UiQ2hhcnQiOmNhc2UiQ2hhcnQzZCI6Y2FzZSJDaGFydDNEQmFyU2hhcGUiOmNhc2UiQ2hhcnRGb3JtYXQiOmNhc2UiQ2hhcnRGcnRJbmZvIjpjYXNlIlBsb3RBcmVhIjpjYXNlIlBs'@;
put 'b3RHcm93dGgiOmNhc2UiU2VyaWVzTGlzdCI6Y2FzZSJTZXJQYXJlbnQiOmNhc2UiU2VyQXV4VHJlbmQiOmNhc2UiRGF0YUZvcm1hdCI6Y2FzZSJTZXJUb0NydCI6Y2FzZSJGb250WCI6Y2FzZSJDYXRTZXJSYW5nZSI6Y2FzZSJBeGNFeHQiOmNhc2UiU2VyRm10IjpjYXNlIlNodFByb3BzIjpj'@;
put 'YXNlIkRlZmF1bHRUZXh0IjpjYXNlIlRleHQiOmNhc2UiQ2F0TGFiIjpjYXNlIkRhdGFMYWJFeHRDb250ZW50cyI6Y2FzZSJMZWdlbmQiOmNhc2UiTGVnZW5kRXhjZXB0aW9uIjpjYXNlIlBpZSI6Y2FzZSJTY2F0dGVyIjpjYXNlIlBpZUZvcm1hdCI6Y2FzZSJNYXJrZXJGb3JtYXQiOmNhc2Ui'@;
put 'U3RhcnRPYmplY3QiOmNhc2UiRW5kT2JqZWN0IjpjYXNlIkFsUnVucyI6Y2FzZSJPYmplY3RMaW5rIjpjYXNlIlNJSW5kZXgiOmNhc2UiQXR0YWNoZWRMYWJlbCI6Y2FzZSJZTXVsdCI6Y2FzZSJMaW5lIjpjYXNlIkJhciI6Y2FzZSJTdXJmIjpjYXNlIkF4aXNQYXJlbnQiOmNhc2UiUG9zIjpj'@;
put 'YXNlIlZhbHVlUmFuZ2UiOmNhc2UiU1hWaWV3RXg5IjpjYXNlIlNYVmlld0xpbmsiOmNhc2UiUGl2b3RDaGFydEJpdHMiOmNhc2UiU0Jhc2VSZWYiOmNhc2UiVGV4dFByb3BzU3RyZWFtIjpjYXNlIkxuRXh0IjpjYXNlIk1rckV4dCI6Y2FzZSJDcnRDb29wdCI6Y2FzZSJRc2kiOmNhc2UiUXNp'@;
put 'ZiI6Y2FzZSJRc2lyIjpjYXNlIlFzaVNYVGFnIjpjYXNlIlR4dFFyeSI6Y2FzZSJGaWx0ZXJNb2RlIjpjYXNlIkF1dG9GaWx0ZXIiOmNhc2UiQXV0b0ZpbHRlckluZm8iOmNhc2UiQXV0b0ZpbHRlcjEyIjpjYXNlIkRyb3BEb3duT2JqSWRzIjpjYXNlIlNvcnQiOmNhc2UiU29ydERhdGEiOmNh'@;
put 'c2UiU2hhcGVQcm9wc1N0cmVhbSI6Y2FzZSJNc29EcmF3aW5nIjpjYXNlIk1zb0RyYXdpbmdHcm91cCI6Y2FzZSJNc29EcmF3aW5nU2VsZWN0aW9uIjpjYXNlIldlYlB1YiI6Y2FzZSJBdXRvV2ViUHViIjpjYXNlIkhlYWRlckZvb3RlciI6Y2FzZSJIRlBpY3R1cmUiOmNhc2UiUExWIjpjYXNl'@;
put 'Ikhvcml6b250YWxQYWdlQnJlYWtzIjpjYXNlIlZlcnRpY2FsUGFnZUJyZWFrcyI6Y2FzZSJCYWNrdXAiOmNhc2UiQ29tcHJlc3NQaWN0dXJlcyI6Y2FzZSJDb21wYXQxMiI6Y2FzZSJDb250aW51ZSI6Y2FzZSJDb250aW51ZUZydDEyIjpjYXNlIkZydEZvbnRMaXN0IjpjYXNlIkZydFdyYXBw'@;
put 'ZXIiOmJyZWFrO2RlZmF1bHQ6c3dpdGNoKGhpLm4pe2Nhc2UiVGFiSWRDb25mIjpjYXNlIlJhZGFyIjpjYXNlIlJhZGFyQXJlYSI6Y2FzZSJEcm9wQmFyIjpjYXNlIkludGwiOmNhc2UiQ29vcmRMaXN0IjpjYXNlIlNlckF1eEVyckJhciI6Y2FzZSJCSUZGMkZPTlRDTFIiOmNhc2UiQklGRjJG'@;
put 'TVRDTlQiOmNhc2UiQklGRjJGT05UWFRSQSI6Y2FzZSJCSUZGMlhGIjpjYXNlIkJJRkYzWEYiOmNhc2UiQklGRjRYRiI6Y2FzZSJCSUZGMlhGSU5ERVgiOmNhc2UiQklGRjRGTVRDTlQiOmNhc2UiQklGRjJST1ciOmNhc2UiQklGRjJXSU5ET1cyIjpjYXNlIlNDRU5BUklPIjpjYXNlIkRDb25C'@;
put 'aW4iOmNhc2UiUGljRiI6Y2FzZSJEYXRhTGFiRXh0IjpjYXNlIkxlbCI6Y2FzZSJCb3BQb3AiOmNhc2UiQm9wUG9wQ3VzdG9tIjpjYXNlIlJlYWxUaW1lRGF0YSI6Y2FzZSJOYW1lIjpjYXNlIkxITkdyYXBoIjpjYXNlIkZuR3JvdXBOYW1lIjpjYXNlIkFkZE1lbnUiOmNhc2UiTFByIjpjYXNl'@;
put 'Ikxpc3RPYmoiOmNhc2UiTGlzdEZpZWxkIjpjYXNlIlJSU29ydCI6Y2FzZSJCaWdOYW1lIjpjYXNlIlRvb2xiYXJIZHIiOmNhc2UiVG9vbGJhckVuZCI6Y2FzZSJEREVPYmpOYW1lIjpjYXNlIkZSVEFyY2hJZCQiOmJyZWFrO2RlZmF1bHQ6aWYoUC5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIFJl'@;
put 'Y29yZCAiK2hpLm59fX19fWVsc2UgeS5sKz14byxabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6eG99KSl9cmV0dXJuIEwuU2hlZXROYW1lcz1sdChnZSkuc29ydChmdW5jdGlvbih6aSxKcil7cmV0dXJuIE51bWJlcih6aSktTnVtYmVyKEpyKX0p'@;
put 'Lm1hcChmdW5jdGlvbih6aSl7cmV0dXJuIGdlW3ppXS5uYW1lfSksUC5ib29rU2hlZXRzfHwoTC5TaGVldHM9USksIUwuU2hlZXROYW1lcy5sZW5ndGgmJkJlWyIhcmVmIl0/KEwuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxMLlNoZWV0cyYmKEwuU2hlZXRzLlNoZWV0MT1CZSkpOkwuUHJl'@;
put 'YW1ibGU9QmUsTC5TaGVldHMmJl9vLmZvckVhY2goZnVuY3Rpb24oemksSnIpe0wuU2hlZXRzW0wuU2hlZXROYW1lc1tKcl1dWyIhYXV0b2ZpbHRlciJdPXppfSksTC5TdHJpbmdzPVNlLEwuU1NGPXcuZ2V0X3RhYmxlKCksWm4uZW5jJiYoTC5FbmNyeXB0aW9uPVpuLmVuYyksb2kmJihMLlRo'@;
put 'ZW1lcz1vaSksTC5NZXRhZGF0YT17fSx2b2lkIDAhPT1adCYmKEwuTWV0YWRhdGEuQ291bnRyeT1adCksU24ubmFtZXMubGVuZ3RoPjAmJih1bi5OYW1lcz1Tbi5uYW1lcyksTC5Xb3JrYm9vaz11bixMfShRLmNvbnRlbnQsUCk7ZWxzZSBpZigoZ2U9amUuZmluZCh5LCJQZXJmZWN0T2ZmaWNl'@;
put 'X01BSU4iKSkmJmdlLmNvbnRlbnQpcmU9VG0udG9fd29ya2Jvb2soZ2UuY29udGVudCwoUC50eXBlPV9lLFApKTtlbHNle2lmKCEoZ2U9amUuZmluZCh5LCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFnZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgV29ya2Jvb2sgc3Ry'@;
put 'ZWFtIik7cmU9VG0udG9fd29ya2Jvb2soZ2UuY29udGVudCwoUC50eXBlPV9lLFApKX1QLmJvb2tWQkEmJnkuRnVsbFBhdGhzJiZqZS5maW5kKHksIi9fVkJBX1BST0pFQ1RfQ1VSL1ZCQS9kaXIiKSYmKHJlLnZiYXJhdz1mdW5jdGlvbiBYNCh5KXt2YXIgUD1qZS51dGlscy5jZmJfbmV3KHty'@;
put 'b290OiJSIn0pO3JldHVybiB5LkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKEwsUSl7aWYoIi8iIT09TC5zbGljZSgtMSkmJkwubWF0Y2goL19WQkFfUFJPSkVDVF9DVVIvKSl7dmFyIHJlPUwucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAw'@;
put 'MDAqLywiIik7amUudXRpbHMuY2ZiX2FkZChQLHJlLHkuRmlsZUluZGV4W1FdLmNvbnRlbnQpfX0pLGplLndyaXRlKFApfSh5KSl9dmFyIHZlPXt9O3JldHVybiB5LkZ1bGxQYXRocyYmZnVuY3Rpb24geU0oeSxQLEwpe3ZhciBRPWplLmZpbmQoeSwiIURvY3VtZW50U3VtbWFyeUluZm9ybWF0'@;
put 'aW9uIik7aWYoUSYmUS5zaXplPjApdHJ5e3ZhciByZT11OShRLF80LHJwLkRTSSk7Zm9yKHZhciBnZSBpbiByZSlQW2dlXT1yZVtnZV19Y2F0Y2goSGUpe2lmKEwuV1RGKXRocm93IEhlfXZhciBfZT1qZS5maW5kKHksIiFTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihfZSYmX2Uuc2l6ZT4wKXRy'@;
put 'eXt2YXIgdmU9dTkoX2Usd3IscnAuU0kpO2Zvcih2YXIgU2UgaW4gdmUpbnVsbD09UFtTZV0mJihQW1NlXT12ZVtTZV0pfWNhdGNoKEhlKXtpZihMLldURil0aHJvdyBIZX1QLkhlYWRpbmdQYWlycyYmUC5UaXRsZXNPZlBhcnRzJiYodTAoUC5IZWFkaW5nUGFpcnMsUC5UaXRsZXNPZlBhcnRz'@;
put 'LFAsTCksZGVsZXRlIFAuSGVhZGluZ1BhaXJzLGRlbGV0ZSBQLlRpdGxlc09mUGFydHMpfSh5LHZlLFApLHJlLlByb3BzPXJlLkN1c3Rwcm9wcz12ZSxQLmJvb2tGaWxlcyYmKHJlLmNmYj15KSxyZX12YXIgbWY9ezA6e246IkJydFJvd0hkciIsZjpmdW5jdGlvbiBHSSh5LFApe3ZhciBMPXt9'@;
put 'LFE9eS5sK1A7TC5yPXkucmVhZF9zaGlmdCg0KSx5LmwrPTQ7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTt5LmwrPTE7dmFyIGdlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4geS5sPVEsNyZnZSYmKEwubGV2ZWw9NyZnZSksMTYmZ2UmJihMLmhpZGRlbj0hMCksMzImZ2UmJihMLmhwdD1yZS8yMCks'@;
put 'TH19LDE6e246IkJydENlbGxCbGFuayIsZjpmdW5jdGlvbiBGdih5KXtyZXR1cm5bdXUoeSldfX0sMjp7bjoiQnJ0Q2VsbFJrIixmOmZ1bmN0aW9uIGlMKHkpe3JldHVyblt1dSh5KSxYYyh5KSwibiJdfX0sMzp7bjoiQnJ0Q2VsbEVycm9yIixmOmZ1bmN0aW9uIHRZKHkpe3JldHVyblt1dSh5'@;
put 'KSx5LnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e246IkJydENlbGxCb29sIixmOmZ1bmN0aW9uIFBTKHkpe3JldHVyblt1dSh5KSx5LnJlYWRfc2hpZnQoMSksImIiXX19LDU6e246IkJydENlbGxSZWFsIixmOmZ1bmN0aW9uIG5MKHkpe3JldHVyblt1dSh5KSxtYSh5KSwibiJdfX0sNjp7bjoi'@;
put 'QnJ0Q2VsbFN0IixmOmZ1bmN0aW9uIE02KHkpe3JldHVyblt1dSh5KSxDYyh5KSwic3RyIl19fSw3OntuOiJCcnRDZWxsSXNzdCIsZjpmdW5jdGlvbiBCUyh5KXtyZXR1cm5bdXUoeSkseS5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4OntuOiJCcnRGbWxhU3RyaW5nIixmOmZ1bmN0aW9uIGFMKHks'@;
put 'UCxMKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5yPUxbIiFyb3ciXTt2YXIgX2U9W3JlLENjKHkpLCJzdHIiXTtpZihMLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15LmwsTCk7X2VbM109eGwodmUsbnVsbCxyZSxMLnN1cGJvb2tzLEwpfWVsc2UgeS5sPVE7cmV0dXJuIF9l'@;
put 'fX0sOTp7bjoiQnJ0Rm1sYU51bSIsZjpmdW5jdGlvbiBaUyh5LFAsTCl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1MWyIhcm93Il07dmFyIF9lPVtyZSxtYSh5KSwibiJdO2lmKEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJl'@;
put 'LEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSwxMDp7bjoiQnJ0Rm1sYUJvb2wiLGY6ZnVuY3Rpb24gc0woeSxQLEwpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9TFsiIXJvdyJdO3ZhciBfZT1bcmUseS5yZWFkX3NoaWZ0KDEpLCJiIl07aWYoTC5jZWxsRm9ybXVsYSl7'@;
put 'eS5sKz0yO3ZhciB2ZT1oNih5LFEteS5sLEwpO19lWzNdPXhsKHZlLG51bGwscmUsTC5zdXBib29rcyxMKX1lbHNlIHkubD1RO3JldHVybiBfZX19LDExOntuOiJCcnRGbWxhRXJyb3IiLGY6ZnVuY3Rpb24gVVMoeSxQLEwpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9TFsiIXJvdyJdO3Zh'@;
put 'ciBfZT1bcmUseS5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoTC5jZWxsRm9ybXVsYSl7eS5sKz0yO3ZhciB2ZT1oNih5LFEteS5sLEwpO19lWzNdPXhsKHZlLG51bGwscmUsTC5zdXBib29rcyxMKX1lbHNlIHkubD1RO3JldHVybiBfZX19LDEyOntuOiJCcnRTaG9ydEJsYW5rIixmOmZ1bmN0aW9u'@;
put 'IE9TKHkpe3JldHVyblthMCh5KV19fSwxMzp7bjoiQnJ0U2hvcnRSayIsZjpmdW5jdGlvbiB6Uyh5KXtyZXR1cm5bYTAoeSksWGMoeSksIm4iXX19LDE0OntuOiJCcnRTaG9ydEVycm9yIixmOmZ1bmN0aW9uIE5TKHkpe3JldHVyblthMCh5KSx5LnJlYWRfc2hpZnQoMSksImUiXX19LDE1Ontu'@;
put 'OiJCcnRTaG9ydEJvb2wiLGY6ZnVuY3Rpb24gUzYoeSl7cmV0dXJuW2EwKHkpLHkucmVhZF9zaGlmdCgxKSwiYiJdfX0sMTY6e246IkJydFNob3J0UmVhbCIsZjpqU30sMTc6e246IkJydFNob3J0U3QiLGY6ZnVuY3Rpb24geDYoeSl7cmV0dXJuW2EwKHkpLENjKHkpLCJzdHIiXX19LDE4Ontu'@;
put 'OiJCcnRTaG9ydElzc3QiLGY6ZnVuY3Rpb24gR2QoeSl7cmV0dXJuW2EwKHkpLHkucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e246IkJydFNTVEl0ZW0iLGY6Y2F9LDIwOntuOiJCcnRQQ0RJTWlzc2luZyJ9LDIxOntuOiJCcnRQQ0RJTnVtYmVyIn0sMjI6e246IkJydFBDRElCb29sZWFuIn0s'@;
put 'MjM6e246IkJydFBDRElFcnJvciJ9LDI0OntuOiJCcnRQQ0RJU3RyaW5nIn0sMjU6e246IkJydFBDRElEYXRldGltZSJ9LDI2OntuOiJCcnRQQ0RJSW5kZXgifSwyNzp7bjoiQnJ0UENESUFNaXNzaW5nIn0sMjg6e246IkJydFBDRElBTnVtYmVyIn0sMjk6e246IkJydFBDRElBQm9vbGVhbiJ9'@;
put 'LDMwOntuOiJCcnRQQ0RJQUVycm9yIn0sMzE6e246IkJydFBDRElBU3RyaW5nIn0sMzI6e246IkJydFBDRElBRGF0ZXRpbWUifSwzMzp7bjoiQnJ0UENSUmVjb3JkIn0sMzQ6e246IkJydFBDUlJlY29yZER0In0sMzU6e246IkJydEZSVEJlZ2luIn0sMzY6e246IkJydEZSVEVuZCJ9LDM3Ontu'@;
put 'OiJCcnRBQ0JlZ2luIn0sMzg6e246IkJydEFDRW5kIn0sMzk6e246IkJydE5hbWUiLGY6ZnVuY3Rpb24gcDUoeSxQLEwpe3ZhciBRPXkubCtQO3kubCs9NCx5LmwrPTE7dmFyIHJlPXkucmVhZF9zaGlmdCg0KSxnZT1kdSh5KSxfZT1zUyh5LDAsTCksdmU9QXUoeSk7eS5sPVE7dmFyIFNlPXtO'@;
put 'YW1lOmdlLFB0ZzpfZX07cmV0dXJuIHJlPDI2ODQzNTQ1NSYmKFNlLlNoZWV0PXJlKSx2ZSYmKFNlLkNvbW1lbnQ9dmUpLFNlfX0sNDA6e246IkJydEluZGV4Um93QmxvY2sifSw0Mjp7bjoiQnJ0SW5kZXhCbG9jayJ9LDQzOntuOiJCcnRGb250IixmOmZ1bmN0aW9uIG1DKHksUCxMKXt2YXIg'@;
put 'UT17fTtRLnN6PXkucmVhZF9zaGlmdCgyKS8yMDt2YXIgcmU9ZjQoeSk7c3dpdGNoKHJlLmZCb2xkJiYoUS5ib2xkPTEpLHJlLmZJdGFsaWMmJihRLml0YWxpYz0xKSxyZS5mVW5kZXJsaW5lJiYoUS51bmRlcmxpbmU9MSkscmUuZkNvbmRlbnNlJiYoUS5jb25kZW5zZT0xKSxyZS5mRXh0ZW5k'@;
put 'JiYoUS5leHRlbmQ9MSkscmUuZlNoYWRvdyYmKFEuc2hhZG93PTEpLHJlLmZPdXRsaW5lJiYoUS5vdXRsaW5lPTEpLHJlLmZTdHJpa2VvdXQmJihRLnN0cmlrZT0xKSw3MDA9PT15LnJlYWRfc2hpZnQoMikmJihRLmJvbGQ9MSkseS5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6US52YWxpZ249InN1'@;
put 'cGVyIjticmVhaztjYXNlIDI6US52YWxpZ249InN1YiJ9dmFyIF9lPXkucmVhZF9zaGlmdCgxKTswIT1fZSYmKFEudW5kZXJsaW5lPV9lKTt2YXIgdmU9eS5yZWFkX3NoaWZ0KDEpO3ZlPjAmJihRLmZhbWlseT12ZSk7dmFyIFNlPXkucmVhZF9zaGlmdCgxKTtzd2l0Y2goU2U+MCYmKFEuY2hh'@;
put 'cnNldD1TZSkseS5sKyssUS5jb2xvcj1EZCh5KSx5LnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTpRLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjpRLnNjaGVtZT0ibWlub3IifXJldHVybiBRLm5hbWU9Q2MoeSksUX19LDQ0OntuOiJCcnRGbXQiLGY6ZnVuY3Rpb24gZ0MoeSxQKXtyZXR1cm5b'@;
put 'eS5yZWFkX3NoaWZ0KDIpLENjKHkpXX19LDQ1OntuOiJCcnRGaWxsIixmOmZ1bmN0aW9uIGtEKHksUCl7dmFyIEw9eS5sK1AsUT17fSxyZT15LnJlYWRfc2hpZnQoNCk7aWYoNDAhPXJlKXtRLnBhdHRlcm5UeXBlPVY0W3JlXTt2YXIgZ2U9RGQoeSk7NjQhPWdlLmluZGV4JiYoUS5mZ0NvbG9y'@;
put 'PWdlKTt2YXIgX2U9RGQoeSk7NjUhPV9lLmluZGV4JiYoUS5iZ0NvbG9yPV9lKX1lbHNle3kubCs9MTYseS5yZWFkX3NoaWZ0KDQpLG1hKHkpLG1hKHkpLG1hKHkpLG1hKHkpLG1hKHkpO2Zvcih2YXIgdmU9eS5yZWFkX3NoaWZ0KDQpLFNlPVtdLEhlPTA7SGU8dmU7KytIZSlTZS5wdXNoKFlt'@;
put 'KHkpKX1yZXR1cm4geS5sPUwsUX19LDQ2OntuOiJCcnRCb3JkZXIiLGY6ZnVuY3Rpb24gVEQoeSl7dmFyIFA9e307eS5yZWFkX3NoaWZ0KDEpO3ZhciBMPWo0KHkpOyJub25lIiE9TC5zdHlsZSYmKFAudG9wPUwpO3ZhciBRPWo0KHkpOyJub25lIiE9US5zdHlsZSYmKFAuYm90dG9tPVEpO3Zh'@;
put 'ciByZT1qNCh5KTsibm9uZSIhPXJlLnN0eWxlJiYoUC5sZWZ0PXJlKTt2YXIgZ2U9ajQoeSk7Im5vbmUiIT1nZS5zdHlsZSYmKFAucmlnaHQ9Z2UpO3ZhciBfZT1qNCh5KTtyZXR1cm4ibm9uZSIhPV9lLnN0eWxlJiYoUC5kaWFnPV9lKSxQfX0sNDc6e246IkJydFhGIixmOmZ1bmN0aW9uIEg5'@;
put 'KHksUCl7dmFyIEw9eS5sK1AsUT17fSxyZT15LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFkX3NoaWZ0KDIpLF9lPXkucmVhZF9zaGlmdCgyKSx2ZT15LnJlYWRfc2hpZnQoMiksU2U9eS5yZWFkX3NoaWZ0KDIpLEhlPXkucmVhZF9zaGlmdCgxKTt5LnJlYWRfc2hpZnQoMSk7dmFyIEJlPXkucmVh'@;
put 'ZF9zaGlmdCgyKSxHZT15LnJlYWRfc2hpZnQoMSk7eS5sPUwsUS54ZklkPXJlLFEubnVtRm10SWQ9Z2UsUS5mb250SWQ9X2UsUS5maWxsSWQ9dmUsUS5ib3JkZXJJZD1TZSwxJkdlJiYwIT1RLm51bUZtdElkJiYoUS5hcHBseU51bWJlckZvcm1hdD0hMCksUS5hbGlnbm1lbnQ9e30sSGU+MCYm'@;
put 'KFEuYWxpZ25tZW50LnRleHRSb3RhdGlvbj1IZSk7dmFyIG50PSExO3JldHVybiA3JkJlJiYobnQ9ITAsUS5hbGlnbm1lbnQuaG9yaXpvbnRhbD1XbVs3JkJlXSksUS5hbGlnbm1lbnQudmVydGljYWw9QjRbQmU+Pj4zJjddLFEuYWxpZ25tZW50LnZlcnRpY2FsJiYobnQ9ITApLEJlPj4+NiYx'@;
put 'JiYoUS5hbGlnbm1lbnQud3JhcFRleHQ9ITApLEJlPj4+OCYxJiYoUS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQ9ITApLG50fHxkZWxldGUgUS5hbGlnbm1lbnQsNCZHZSYmbnQmJihRLmFwcGx5QWxpZ25tZW50PSEwKSxRfX0sNDg6e246IkJydFN0eWxlIn0sNDk6e246IkJydENlbGxNZXRhIn0s'@;
put 'NTA6e246IkJydFZhbHVlTWV0YSJ9LDUxOntuOiJCcnRNZGIifSw1Mjp7bjoiQnJ0QmVnaW5GbWQifSw1Mzp7bjoiQnJ0RW5kRm1kIn0sNTQ6e246IkJydEJlZ2luTWR4In0sNTU6e246IkJydEVuZE1keCJ9LDU2OntuOiJCcnRCZWdpbk1keFR1cGxlIn0sNTc6e246IkJydEVuZE1keFR1cGxl'@;
put 'In0sNTg6e246IkJydE1keE1icklzdHIifSw1OTp7bjoiQnJ0U3RyIn0sNjA6e246IkJydENvbEluZm8iLGY6VmR9LDYyOntuOiJCcnRDZWxsUlN0cmluZyJ9LDYzOntuOiJCcnRDYWxjQ2hhaW5JdGVtJCIsZjpmdW5jdGlvbiBXNCh5KXt2YXIgUD17fTtQLmk9eS5yZWFkX3NoaWZ0KDQpO3Zh'@;
put 'ciBMPXt9O0wucj15LnJlYWRfc2hpZnQoNCksTC5jPXkucmVhZF9zaGlmdCg0KSxQLnI9ZGkoTCk7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiAyJlEmJihQLmw9IjEiKSw4JlEmJihQLmE9IjEiKSxQfX0sNjQ6e246IkJydERWYWwiLGY6ZnVuY3Rpb24gRTYoeSxQLEwpe3ZhciBRPXku'@;
put 'bCtQLHJlPXkucmVhZF9zaGlmdCg0KSxnZT1sMCh5KSxfZT1BdSh5KSx2ZT1BdSh5KSxTZT1BdSh5KSxIZT1BdSh5KSxCZT1pUyh5LFAsTCksR2U9eS5sPFE/aVMoeSxQLEwpOm51bGwsbnQ9MTUmcmUsZHQ9e3Q6ZW9bbnRdLHNxcmZ4OmdlLHM6W19lLHZlLFNlLEhlXX07cmV0dXJuIEJlJiYo'@;
put 'ZHQuZjE9QmUpLEdlJiYoZHQuZjI9R2UpLDA9PW50fHwzPT1udHx8Nz09bnR8fChkdC5vcD1CdltyZT4+MjAmMTVdKSxkdH19LDY1OntuOiJCcnRTeHZjZWxsTnVtIn0sNjY6e246IkJydFN4dmNlbGxTdHIifSw2Nzp7bjoiQnJ0U3h2Y2VsbEJvb2wifSw2ODp7bjoiQnJ0U3h2Y2VsbEVyciJ9'@;
put 'LDY5OntuOiJCcnRTeHZjZWxsRGF0ZSJ9LDcwOntuOiJCcnRTeHZjZWxsTmlsIn0sMTI4OntuOiJCcnRGaWxlVmVyc2lvbiJ9LDEyOTp7bjoiQnJ0QmVnaW5TaGVldCJ9LDEzMDp7bjoiQnJ0RW5kU2hlZXQifSwxMzE6e246IkJydEJlZ2luQm9vayIsZjp5YyxwOjB9LDEzMjp7bjoiQnJ0RW5k'@;
put 'Qm9vayJ9LDEzMzp7bjoiQnJ0QmVnaW5Xc1ZpZXdzIn0sMTM0OntuOiJCcnRFbmRXc1ZpZXdzIn0sMTM1OntuOiJCcnRCZWdpbkJvb2tWaWV3cyJ9LDEzNjp7bjoiQnJ0RW5kQm9va1ZpZXdzIn0sMTM3OntuOiJCcnRCZWdpbldzVmlldyIsZjpmdW5jdGlvbiBnTCh5KXt2YXIgUD15LnJlYWRf'@;
put 'c2hpZnQoMik7cmV0dXJuIHkubCs9Mjgse1JUTDozMiZQLGdyaWQ6ISEoNCZQKX19fSwxMzg6e246IkJydEVuZFdzVmlldyJ9LDEzOTp7bjoiQnJ0QmVnaW5Dc1ZpZXdzIn0sMTQwOntuOiJCcnRFbmRDc1ZpZXdzIn0sMTQxOntuOiJCcnRCZWdpbkNzVmlldyJ9LDE0Mjp7bjoiQnJ0RW5kQ3NW'@;
put 'aWV3In0sMTQzOntuOiJCcnRCZWdpbkJ1bmRsZVNocyJ9LDE0NDp7bjoiQnJ0RW5kQnVuZGxlU2hzIn0sMTQ1OntuOiJCcnRCZWdpblNoZWV0RGF0YSJ9LDE0Njp7bjoiQnJ0RW5kU2hlZXREYXRhIn0sMTQ3OntuOiJCcnRXc1Byb3AiLGY6ZnVuY3Rpb24gSkkoeSxQKXt2YXIgTD17fSxRPXlb'@;
put 'eS5sXTtyZXR1cm4rK3kubCxMLmFib3ZlPSEoNjQmUSksTC5sZWZ0PSEoMTI4JlEpLHkubCs9MTgsTC5uYW1lPXpoKHksUC0xOSksTH19LDE0ODp7bjoiQnJ0V3NEaW0iLGY6cUkscDoxNn0sMTUxOntuOiJCcnRQYW5lIixmOmZ1bmN0aW9uIEdTKHksUCl7dmFyIEw9eS5sK1A7bWEoeSksbWEo'@;
put 'eSk7dmFyIFE9eS5yZWFkX3NoaWZ0KDQsImkiKSxyZT15LnJlYWRfc2hpZnQoNCwiaSIpO2lmKHkucmVhZF9zaGlmdCg0KSx5LnJlYWRfc2hpZnQoMSksTCE9eS5sKXRocm93IG5ldyBFcnJvcigiQmFkIEJydFBhbmU6ICIrTCsiICE9ICIreS5sKTtyZXR1cm5bZGkoe3I6USxjOnJlfSldfX0s'@;
put 'MTUyOntuOiJCcnRTZWwiLGY6ZnVuY3Rpb24gdUwoeSxQKXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLHtjZWxsOmRpKHtyOnkucmVhZF9zaGlmdCg0KSxjOnkucmVhZF9zaGlmdCg0KX0pfX19LDE1Mzp7bjoiQnJ0V2JQcm9wIixmOmZ1bmN0aW9uIFBMKHksUCl7dmFyIEw9e30sUT15LnJlYWRf'@;
put 'c2hpZnQoNCk7TC5kZWZhdWx0VGhlbWVWZXJzaW9uPXkucmVhZF9zaGlmdCg0KTt2YXIgcmU9UD44P0NjKHkpOiIiO3JldHVybiByZS5sZW5ndGg+MCYmKEwuQ29kZU5hbWU9cmUpLEwuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmUSksTC5iYWNrdXBGaWxlPSEhKDY0JlEpLEwuY2hl'@;
put 'Y2tDb21wYXRpYmlsaXR5PSEhKDQwOTYmUSksTC5kYXRlMTkwND0hISgxJlEpLEwuZmlsdGVyUHJpdmFjeT0hISg4JlEpLEwuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmUSksTC5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZRKSxMLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JlEpLEwucmVmcmVz'@;
put 'aEFsbENvbm5lY3Rpb25zPSEhKDI2MjE0NCZRKSxMLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JlEpLEwuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZRKSxMLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJlEpLEwuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMi'@;
put 'LCJub25lIl1bUT4+MTMmM10sTC5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZRKSxMLnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bUT4+OCYzXSxMfX0sMTU0OntuOiJCcnRXYkZhY3RvaWQifSwxNTU6e246IkJydEZpbGVSZWNvdmVyIn0sMTU2OntuOiJC'@;
put 'cnRCdW5kbGVTaCIsZjpmdW5jdGlvbiBjWSh5LFApe3ZhciBMPXt9O3JldHVybiBMLkhpZGRlbj15LnJlYWRfc2hpZnQoNCksTC5pVGFiSUQ9eS5yZWFkX3NoaWZ0KDQpLEwuc3RyUmVsSUQ9VDEoeSxQLTgpLEwubmFtZT1DYyh5KSxMfX0sMTU3OntuOiJCcnRDYWxjUHJvcCJ9LDE1ODp7bjoi'@;
put 'QnJ0Qm9va1ZpZXcifSwxNTk6e246IkJydEJlZ2luU3N0IixmOmZ1bmN0aW9uIFFoKHkpe3JldHVyblt5LnJlYWRfc2hpZnQoNCkseS5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7bjoiQnJ0RW5kU3N0In0sMTYxOntuOiJCcnRCZWdpbkFGaWx0ZXIiLGY6SmN9LDE2Mjp7bjoiQnJ0RW5kQUZpbHRl'@;
put 'ciJ9LDE2Mzp7bjoiQnJ0QmVnaW5GaWx0ZXJDb2x1bW4ifSwxNjQ6e246IkJydEVuZEZpbHRlckNvbHVtbiJ9LDE2NTp7bjoiQnJ0QmVnaW5GaWx0ZXJzIn0sMTY2OntuOiJCcnRFbmRGaWx0ZXJzIn0sMTY3OntuOiJCcnRGaWx0ZXIifSwxNjg6e246IkJydENvbG9yRmlsdGVyIn0sMTY5Ontu'@;
put 'OiJCcnRJY29uRmlsdGVyIn0sMTcwOntuOiJCcnRUb3AxMEZpbHRlciJ9LDE3MTp7bjoiQnJ0RHluYW1pY0ZpbHRlciJ9LDE3Mjp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzIn0sMTczOntuOiJCcnRFbmRDdXN0b21GaWx0ZXJzIn0sMTc0OntuOiJCcnRDdXN0b21GaWx0ZXIifSwxNzU6e246'@;
put 'IkJydEFGaWx0ZXJEYXRlR3JvdXBJdGVtIn0sMTc2OntuOiJCcnRNZXJnZUNlbGwiLGY6bEx9LDE3Nzp7bjoiQnJ0QmVnaW5NZXJnZUNlbGxzIn0sMTc4OntuOiJCcnRFbmRNZXJnZUNlbGxzIn0sMTc5OntuOiJCcnRCZWdpblBpdm90Q2FjaGVEZWYifSwxODA6e246IkJydEVuZFBpdm90Q2Fj'@;
put 'aGVEZWYifSwxODE6e246IkJydEJlZ2luUENERmllbGRzIn0sMTgyOntuOiJCcnRFbmRQQ0RGaWVsZHMifSwxODM6e246IkJydEJlZ2luUENERmllbGQifSwxODQ6e246IkJydEVuZFBDREZpZWxkIn0sMTg1OntuOiJCcnRCZWdpblBDRFNvdXJjZSJ9LDE4Njp7bjoiQnJ0RW5kUENEU291cmNl'@;
put 'In0sMTg3OntuOiJCcnRCZWdpblBDRFNSYW5nZSJ9LDE4ODp7bjoiQnJ0RW5kUENEU1JhbmdlIn0sMTg5OntuOiJCcnRCZWdpblBDREZBdGJsIn0sMTkwOntuOiJCcnRFbmRQQ0RGQXRibCJ9LDE5MTp7bjoiQnJ0QmVnaW5QQ0RJUnVuIn0sMTkyOntuOiJCcnRFbmRQQ0RJUnVuIn0sMTkzOntu'@;
put 'OiJCcnRCZWdpblBpdm90Q2FjaGVSZWNvcmRzIn0sMTk0OntuOiJCcnRFbmRQaXZvdENhY2hlUmVjb3JkcyJ9LDE5NTp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaGllcyJ9LDE5Njp7bjoiQnJ0RW5kUENESGllcmFyY2hpZXMifSwxOTc6e246IkJydEJlZ2luUENESGllcmFyY2h5In0sMTk4Ontu'@;
put 'OiJCcnRFbmRQQ0RIaWVyYXJjaHkifSwxOTk6e246IkJydEJlZ2luUENESEZpZWxkc1VzYWdlIn0sMjAwOntuOiJCcnRFbmRQQ0RIRmllbGRzVXNhZ2UifSwyMDE6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbiJ9LDIwMjp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbiJ9LDIwMzp7bjoiQnJ0QmVn'@;
put 'aW5FQ0RiUHJvcHMifSwyMDQ6e246IkJydEVuZEVDRGJQcm9wcyJ9LDIwNTp7bjoiQnJ0QmVnaW5FQ09sYXBQcm9wcyJ9LDIwNjp7bjoiQnJ0RW5kRUNPbGFwUHJvcHMifSwyMDc6e246IkJydEJlZ2luUENEU0NvbnNvbCJ9LDIwODp7bjoiQnJ0RW5kUENEU0NvbnNvbCJ9LDIwOTp7bjoiQnJ0'@;
put 'QmVnaW5QQ0RTQ1BhZ2VzIn0sMjEwOntuOiJCcnRFbmRQQ0RTQ1BhZ2VzIn0sMjExOntuOiJCcnRCZWdpblBDRFNDUGFnZSJ9LDIxMjp7bjoiQnJ0RW5kUENEU0NQYWdlIn0sMjEzOntuOiJCcnRCZWdpblBDRFNDUEl0ZW0ifSwyMTQ6e246IkJydEVuZFBDRFNDUEl0ZW0ifSwyMTU6e246IkJy'@;
put 'dEJlZ2luUENEU0NTZXRzIn0sMjE2OntuOiJCcnRFbmRQQ0RTQ1NldHMifSwyMTc6e246IkJydEJlZ2luUENEU0NTZXQifSwyMTg6e246IkJydEVuZFBDRFNDU2V0In0sMjE5OntuOiJCcnRCZWdpblBDREZHcm91cCJ9LDIyMDp7bjoiQnJ0RW5kUENERkdyb3VwIn0sMjIxOntuOiJCcnRCZWdp'@;
put 'blBDREZHSXRlbXMifSwyMjI6e246IkJydEVuZFBDREZHSXRlbXMifSwyMjM6e246IkJydEJlZ2luUENERkdSYW5nZSJ9LDIyNDp7bjoiQnJ0RW5kUENERkdSYW5nZSJ9LDIyNTp7bjoiQnJ0QmVnaW5QQ0RGR0Rpc2NyZXRlIn0sMjI2OntuOiJCcnRFbmRQQ0RGR0Rpc2NyZXRlIn0sMjI3Ontu'@;
put 'OiJCcnRCZWdpblBDRFNEVHVwbGVDYWNoZSJ9LDIyODp7bjoiQnJ0RW5kUENEU0RUdXBsZUNhY2hlIn0sMjI5OntuOiJCcnRCZWdpblBDRFNEVENFbnRyaWVzIn0sMjMwOntuOiJCcnRFbmRQQ0RTRFRDRW50cmllcyJ9LDIzMTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnMifSwyMzI6e246'@;
put 'IkJydEVuZFBDRFNEVENFTWVtYmVycyJ9LDIzMzp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlciJ9LDIzNDp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXIifSwyMzU6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJpZXMifSwyMzY6e246IkJydEVuZFBDRFNEVENRdWVyaWVzIn0sMjM3OntuOiJCcnRC'@;
put 'ZWdpblBDRFNEVENRdWVyeSJ9LDIzODp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJ5In0sMjM5OntuOiJCcnRCZWdpblBDRFNEVENTZXRzIn0sMjQwOntuOiJCcnRFbmRQQ0RTRFRDU2V0cyJ9LDI0MTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0In0sMjQyOntuOiJCcnRFbmRQQ0RTRFRDU2V0In0sMjQz'@;
put 'OntuOiJCcnRCZWdpblBDRENhbGNJdGVtcyJ9LDI0NDp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW1zIn0sMjQ1OntuOiJCcnRCZWdpblBDRENhbGNJdGVtIn0sMjQ2OntuOiJCcnRFbmRQQ0RDYWxjSXRlbSJ9LDI0Nzp7bjoiQnJ0QmVnaW5QUnVsZSJ9LDI0ODp7bjoiQnJ0RW5kUFJ1bGUifSwyNDk6'@;
put 'e246IkJydEJlZ2luUFJGaWx0ZXJzIn0sMjUwOntuOiJCcnRFbmRQUkZpbHRlcnMifSwyNTE6e246IkJydEJlZ2luUFJGaWx0ZXIifSwyNTI6e246IkJydEVuZFBSRmlsdGVyIn0sMjUzOntuOiJCcnRCZWdpblBOYW1lcyJ9LDI1NDp7bjoiQnJ0RW5kUE5hbWVzIn0sMjU1OntuOiJCcnRCZWdp'@;
put 'blBOYW1lIn0sMjU2OntuOiJCcnRFbmRQTmFtZSJ9LDI1Nzp7bjoiQnJ0QmVnaW5QTlBhaXJzIn0sMjU4OntuOiJCcnRFbmRQTlBhaXJzIn0sMjU5OntuOiJCcnRCZWdpblBOUGFpciJ9LDI2MDp7bjoiQnJ0RW5kUE5QYWlyIn0sMjYxOntuOiJCcnRCZWdpbkVDV2ViUHJvcHMifSwyNjI6e246'@;
put 'IkJydEVuZEVDV2ViUHJvcHMifSwyNjM6e246IkJydEJlZ2luRWNXcFRhYmxlcyJ9LDI2NDp7bjoiQnJ0RW5kRUNXUFRhYmxlcyJ9LDI2NTp7bjoiQnJ0QmVnaW5FQ1BhcmFtcyJ9LDI2Njp7bjoiQnJ0RW5kRUNQYXJhbXMifSwyNjc6e246IkJydEJlZ2luRUNQYXJhbSJ9LDI2ODp7bjoiQnJ0'@;
put 'RW5kRUNQYXJhbSJ9LDI2OTp7bjoiQnJ0QmVnaW5QQ0RLUElzIn0sMjcwOntuOiJCcnRFbmRQQ0RLUElzIn0sMjcxOntuOiJCcnRCZWdpblBDREtQSSJ9LDI3Mjp7bjoiQnJ0RW5kUENES1BJIn0sMjczOntuOiJCcnRCZWdpbkRpbXMifSwyNzQ6e246IkJydEVuZERpbXMifSwyNzU6e246IkJy'@;
put 'dEJlZ2luRGltIn0sMjc2OntuOiJCcnRFbmREaW0ifSwyNzc6e246IkJydEluZGV4UGFydEVuZCJ9LDI3ODp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0In0sMjc5OntuOiJCcnRFbmRTdHlsZVNoZWV0In0sMjgwOntuOiJCcnRCZWdpblNYVmlldyJ9LDI4MTp7bjoiQnJ0RW5kU1hWSSJ9LDI4Mjp7'@;
put 'bjoiQnJ0QmVnaW5TWFZJIn0sMjgzOntuOiJCcnRCZWdpblNYVklzIn0sMjg0OntuOiJCcnRFbmRTWFZJcyJ9LDI4NTp7bjoiQnJ0QmVnaW5TWFZEIn0sMjg2OntuOiJCcnRFbmRTWFZEIn0sMjg3OntuOiJCcnRCZWdpblNYVkRzIn0sMjg4OntuOiJCcnRFbmRTWFZEcyJ9LDI4OTp7bjoiQnJ0'@;
put 'QmVnaW5TWFBJIn0sMjkwOntuOiJCcnRFbmRTWFBJIn0sMjkxOntuOiJCcnRCZWdpblNYUElzIn0sMjkyOntuOiJCcnRFbmRTWFBJcyJ9LDI5Mzp7bjoiQnJ0QmVnaW5TWERJIn0sMjk0OntuOiJCcnRFbmRTWERJIn0sMjk1OntuOiJCcnRCZWdpblNYRElzIn0sMjk2OntuOiJCcnRFbmRTWERJ'@;
put 'cyJ9LDI5Nzp7bjoiQnJ0QmVnaW5TWExJIn0sMjk4OntuOiJCcnRFbmRTWExJIn0sMjk5OntuOiJCcnRCZWdpblNYTElSd3MifSwzMDA6e246IkJydEVuZFNYTElSd3MifSwzMDE6e246IkJydEJlZ2luU1hMSUNvbHMifSwzMDI6e246IkJydEVuZFNYTElDb2xzIn0sMzAzOntuOiJCcnRCZWdp'@;
put 'blNYRm9ybWF0In0sMzA0OntuOiJCcnRFbmRTWEZvcm1hdCJ9LDMwNTp7bjoiQnJ0QmVnaW5TWEZvcm1hdHMifSwzMDY6e246IkJydEVuZFN4Rm9ybWF0cyJ9LDMwNzp7bjoiQnJ0QmVnaW5TeFNlbGVjdCJ9LDMwODp7bjoiQnJ0RW5kU3hTZWxlY3QifSwzMDk6e246IkJydEJlZ2luSVNYVkRS'@;
put 'd3MifSwzMTA6e246IkJydEVuZElTWFZEUndzIn0sMzExOntuOiJCcnRCZWdpbklTWFZEQ29scyJ9LDMxMjp7bjoiQnJ0RW5kSVNYVkRDb2xzIn0sMzEzOntuOiJCcnRFbmRTWExvY2F0aW9uIn0sMzE0OntuOiJCcnRCZWdpblNYTG9jYXRpb24ifSwzMTU6e246IkJydEVuZFNYVmlldyJ9LDMx'@;
put 'Njp7bjoiQnJ0QmVnaW5TWFRIcyJ9LDMxNzp7bjoiQnJ0RW5kU1hUSHMifSwzMTg6e246IkJydEJlZ2luU1hUSCJ9LDMxOTp7bjoiQnJ0RW5kU1hUSCJ9LDMyMDp7bjoiQnJ0QmVnaW5JU1hUSFJ3cyJ9LDMyMTp7bjoiQnJ0RW5kSVNYVEhSd3MifSwzMjI6e246IkJydEJlZ2luSVNYVEhDb2xz'@;
put 'In0sMzIzOntuOiJCcnRFbmRJU1hUSENvbHMifSwzMjQ6e246IkJydEJlZ2luU1hURE1QUyJ9LDMyNTp7bjoiQnJ0RW5kU1hURE1QcyJ9LDMyNjp7bjoiQnJ0QmVnaW5TWFRETVAifSwzMjc6e246IkJydEVuZFNYVERNUCJ9LDMyODp7bjoiQnJ0QmVnaW5TWFRISXRlbXMifSwzMjk6e246IkJy'@;
put 'dEVuZFNYVEhJdGVtcyJ9LDMzMDp7bjoiQnJ0QmVnaW5TWFRISXRlbSJ9LDMzMTp7bjoiQnJ0RW5kU1hUSEl0ZW0ifSwzMzI6e246IkJydEJlZ2luTWV0YWRhdGEifSwzMzM6e246IkJydEVuZE1ldGFkYXRhIn0sMzM0OntuOiJCcnRCZWdpbkVzbWR0aW5mbyJ9LDMzNTp7bjoiQnJ0TWR0aW5m'@;
put 'byJ9LDMzNjp7bjoiQnJ0RW5kRXNtZHRpbmZvIn0sMzM3OntuOiJCcnRCZWdpbkVzbWRiIn0sMzM4OntuOiJCcnRFbmRFc21kYiJ9LDMzOTp7bjoiQnJ0QmVnaW5Fc2ZtZCJ9LDM0MDp7bjoiQnJ0RW5kRXNmbWQifSwzNDE6e246IkJydEJlZ2luU2luZ2xlQ2VsbHMifSwzNDI6e246IkJydEVu'@;
put 'ZFNpbmdsZUNlbGxzIn0sMzQzOntuOiJCcnRCZWdpbkxpc3QifSwzNDQ6e246IkJydEVuZExpc3QifSwzNDU6e246IkJydEJlZ2luTGlzdENvbHMifSwzNDY6e246IkJydEVuZExpc3RDb2xzIn0sMzQ3OntuOiJCcnRCZWdpbkxpc3RDb2wifSwzNDg6e246IkJydEVuZExpc3RDb2wifSwzNDk6'@;
put 'e246IkJydEJlZ2luTGlzdFhtbENQciJ9LDM1MDp7bjoiQnJ0RW5kTGlzdFhtbENQciJ9LDM1MTp7bjoiQnJ0TGlzdENDRm1sYSJ9LDM1Mjp7bjoiQnJ0TGlzdFRyRm1sYSJ9LDM1Mzp7bjoiQnJ0QmVnaW5FeHRlcm5hbHMifSwzNTQ6e246IkJydEVuZEV4dGVybmFscyJ9LDM1NTp7bjoiQnJ0'@;
put 'U3VwQm9va1NyYyIsZjpUMX0sMzU3OntuOiJCcnRTdXBTZWxmIn0sMzU4OntuOiJCcnRTdXBTYW1lIn0sMzU5OntuOiJCcnRTdXBUYWJzIn0sMzYwOntuOiJCcnRCZWdpblN1cEJvb2sifSwzNjE6e246IkJydFBsYWNlaG9sZGVyTmFtZSJ9LDM2Mjp7bjoiQnJ0RXh0ZXJuU2hlZXQiLGY6U219'@;
put 'LDM2Mzp7bjoiQnJ0RXh0ZXJuVGFibGVTdGFydCJ9LDM2NDp7bjoiQnJ0RXh0ZXJuVGFibGVFbmQifSwzNjY6e246IkJydEV4dGVyblJvd0hkciJ9LDM2Nzp7bjoiQnJ0RXh0ZXJuQ2VsbEJsYW5rIn0sMzY4OntuOiJCcnRFeHRlcm5DZWxsUmVhbCJ9LDM2OTp7bjoiQnJ0RXh0ZXJuQ2VsbEJv'@;
put 'b2wifSwzNzA6e246IkJydEV4dGVybkNlbGxFcnJvciJ9LDM3MTp7bjoiQnJ0RXh0ZXJuQ2VsbFN0cmluZyJ9LDM3Mjp7bjoiQnJ0QmVnaW5Fc21keCJ9LDM3Mzp7bjoiQnJ0RW5kRXNtZHgifSwzNzQ6e246IkJydEJlZ2luTWR4U2V0In0sMzc1OntuOiJCcnRFbmRNZHhTZXQifSwzNzY6e246'@;
put 'IkJydEJlZ2luTWR4TWJyUHJvcCJ9LDM3Nzp7bjoiQnJ0RW5kTWR4TWJyUHJvcCJ9LDM3ODp7bjoiQnJ0QmVnaW5NZHhLUEkifSwzNzk6e246IkJydEVuZE1keEtQSSJ9LDM4MDp7bjoiQnJ0QmVnaW5Fc3N0ciJ9LDM4MTp7bjoiQnJ0RW5kRXNzdHIifSwzODI6e246IkJydEJlZ2luUFJGSXRl'@;
put 'bSJ9LDM4Mzp7bjoiQnJ0RW5kUFJGSXRlbSJ9LDM4NDp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSURzIn0sMzg1OntuOiJCcnRFbmRQaXZvdENhY2hlSURzIn0sMzg2OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRCJ9LDM4Nzp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEIn0sMzg4OntuOiJCcnRCZWdp'@;
put 'bklTWFZJcyJ9LDM4OTp7bjoiQnJ0RW5kSVNYVklzIn0sMzkwOntuOiJCcnRCZWdpbkNvbEluZm9zIn0sMzkxOntuOiJCcnRFbmRDb2xJbmZvcyJ9LDM5Mjp7bjoiQnJ0QmVnaW5Sd0JyayJ9LDM5Mzp7bjoiQnJ0RW5kUndCcmsifSwzOTQ6e246IkJydEJlZ2luQ29sQnJrIn0sMzk1OntuOiJC'@;
put 'cnRFbmRDb2xCcmsifSwzOTY6e246IkJydEJyayJ9LDM5Nzp7bjoiQnJ0VXNlckJvb2tWaWV3In0sMzk4OntuOiJCcnRJbmZvIn0sMzk5OntuOiJCcnRDVXNyIn0sNDAwOntuOiJCcnRVc3IifSw0MDE6e246IkJydEJlZ2luVXNlcnMifSw0MDM6e246IkJydEVPRiJ9LDQwNDp7bjoiQnJ0VUNS'@;
put 'In0sNDA1OntuOiJCcnRSUkluc0RlbCJ9LDQwNjp7bjoiQnJ0UlJFbmRJbnNEZWwifSw0MDc6e246IkJydFJSTW92ZSJ9LDQwODp7bjoiQnJ0UlJFbmRNb3ZlIn0sNDA5OntuOiJCcnRSUkNoZ0NlbGwifSw0MTA6e246IkJydFJSRW5kQ2hnQ2VsbCJ9LDQxMTp7bjoiQnJ0UlJIZWFkZXIifSw0'@;
put 'MTI6e246IkJydFJSVXNlclZpZXcifSw0MTM6e246IkJydFJSUmVuU2hlZXQifSw0MTQ6e246IkJydFJSSW5zZXJ0U2gifSw0MTU6e246IkJydFJSRGVmTmFtZSJ9LDQxNjp7bjoiQnJ0UlJOb3RlIn0sNDE3OntuOiJCcnRSUkNvbmZsaWN0In0sNDE4OntuOiJCcnRSUlRRU0lGIn0sNDE5Ontu'@;
put 'OiJCcnRSUkZvcm1hdCJ9LDQyMDp7bjoiQnJ0UlJFbmRGb3JtYXQifSw0MjE6e246IkJydFJSQXV0b0ZtdCJ9LDQyMjp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3cyJ9LDQyMzp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3In0sNDI0OntuOiJCcnRFbmRVc2VyU2hWaWV3In0sNDI1OntuOiJCcnRFbmRV'@;
put 'c2VyU2hWaWV3cyJ9LDQyNjp7bjoiQnJ0QXJyRm1sYSIsZjpmdW5jdGlvbiBoNSh5LFAsTCl7dmFyIFE9eS5sK1AscmU9VGQoeSksZ2U9eS5yZWFkX3NoaWZ0KDEpLF9lPVtyZV07aWYoX2VbMl09Z2UsTC5jZWxsRm9ybXVsYSl7dmFyIHZlPXJTKHksUS15LmwsTCk7X2VbMV09dmV9ZWxzZSB5'@;
put 'Lmw9UTtyZXR1cm4gX2V9fSw0Mjc6e246IkJydFNockZtbGEiLGY6ZnVuY3Rpb24gaEwoeSxQLEwpe3ZhciBRPXkubCtQLGdlPVtKYyh5LDE2KV07aWYoTC5jZWxsRm9ybXVsYSl7dmFyIF9lPUVJKHksUS15LmwsTCk7Z2VbMV09X2UseS5sPVF9ZWxzZSB5Lmw9UTtyZXR1cm4gZ2V9fSw0Mjg6'@;
put 'e246IkJydFRhYmxlIn0sNDI5OntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb25zIn0sNDMwOntuOiJCcnRFbmRFeHRDb25uZWN0aW9ucyJ9LDQzMTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtcyJ9LDQzMjp7bjoiQnJ0RW5kUENEQ2FsY01lbXMifSw0MzM6e246IkJydEJlZ2luUENEQ2FsY01lbSJ9'@;
put 'LDQzNDp7bjoiQnJ0RW5kUENEQ2FsY01lbSJ9LDQzNTp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVscyJ9LDQzNjp7bjoiQnJ0RW5kUENESEdMZXZlbHMifSw0Mzc6e246IkJydEJlZ2luUENESEdMZXZlbCJ9LDQzODp7bjoiQnJ0RW5kUENESEdMZXZlbCJ9LDQzOTp7bjoiQnJ0QmVnaW5QQ0RIR0xH'@;
put 'cm91cHMifSw0NDA6e246IkJydEVuZFBDREhHTEdyb3VwcyJ9LDQ0MTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cCJ9LDQ0Mjp7bjoiQnJ0RW5kUENESEdMR3JvdXAifSw0NDM6e246IkJydEJlZ2luUENESEdMR01lbWJlcnMifSw0NDQ6e246IkJydEVuZFBDREhHTEdNZW1iZXJzIn0sNDQ1Ontu'@;
put 'OiJCcnRCZWdpblBDREhHTEdNZW1iZXIifSw0NDY6e246IkJydEVuZFBDREhHTEdNZW1iZXIifSw0NDc6e246IkJydEJlZ2luUVNJIn0sNDQ4OntuOiJCcnRFbmRRU0kifSw0NDk6e246IkJydEJlZ2luUVNJUiJ9LDQ1MDp7bjoiQnJ0RW5kUVNJUiJ9LDQ1MTp7bjoiQnJ0QmVnaW5EZWxldGVk'@;
put 'TmFtZXMifSw0NTI6e246IkJydEVuZERlbGV0ZWROYW1lcyJ9LDQ1Mzp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZSJ9LDQ1NDp7bjoiQnJ0RW5kRGVsZXRlZE5hbWUifSw0NTU6e246IkJydEJlZ2luUVNJRnMifSw0NTY6e246IkJydEVuZFFTSUZzIn0sNDU3OntuOiJCcnRCZWdpblFTSUYifSw0'@;
put 'NTg6e246IkJydEVuZFFTSUYifSw0NTk6e246IkJydEJlZ2luQXV0b1NvcnRTY29wZSJ9LDQ2MDp7bjoiQnJ0RW5kQXV0b1NvcnRTY29wZSJ9LDQ2MTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjI6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mzp7'@;
put 'bjoiQnJ0QmVnaW5DRlJ1bGUifSw0NjQ6e246IkJydEVuZENGUnVsZSJ9LDQ2NTp7bjoiQnJ0QmVnaW5JY29uU2V0In0sNDY2OntuOiJCcnRFbmRJY29uU2V0In0sNDY3OntuOiJCcnRCZWdpbkRhdGFiYXIifSw0Njg6e246IkJydEVuZERhdGFiYXIifSw0Njk6e246IkJydEJlZ2luQ29sb3JT'@;
put 'Y2FsZSJ9LDQ3MDp7bjoiQnJ0RW5kQ29sb3JTY2FsZSJ9LDQ3MTp7bjoiQnJ0Q0ZWTyJ9LDQ3Mjp7bjoiQnJ0RXh0ZXJuVmFsdWVNZXRhIn0sNDczOntuOiJCcnRCZWdpbkNvbG9yUGFsZXR0ZSJ9LDQ3NDp7bjoiQnJ0RW5kQ29sb3JQYWxldHRlIn0sNDc1OntuOiJCcnRJbmRleGVkQ29sb3Ii'@;
put 'fSw0NzY6e246IkJydE1hcmdpbnMiLGY6ZnVuY3Rpb24gZkwoeSl7dmFyIFA9e307cmV0dXJuIHFTLmZvckVhY2goZnVuY3Rpb24oTCl7UFtMXT1tYSh5KX0pLFB9fSw0Nzc6e246IkJydFByaW50T3B0aW9ucyJ9LDQ3ODp7bjoiQnJ0UGFnZVNldHVwIn0sNDc5OntuOiJCcnRCZWdpbkhlYWRl'@;
put 'ckZvb3RlciJ9LDQ4MDp7bjoiQnJ0RW5kSGVhZGVyRm9vdGVyIn0sNDgxOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0In0sNDgyOntuOiJCcnRFbmRTWENydEZvcm1hdCJ9LDQ4Mzp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdHMifSw0ODQ6e246IkJydEVuZFNYQ3J0Rm9ybWF0cyJ9LDQ4NTp7bjoi'@;
put 'QnJ0V3NGbXRJbmZvIixmOmZ1bmN0aW9uIFhJKHkpe3ZhciBQPXt9LEw9e30sUT17fSxyZT15LnJlYWRfc2hpZnQoNCksZ2U9eS5yZWFkX3NoaWZ0KDIpO1Eud2NoPXJlPD02NTUzNj9yZS8yNTY6Z2U7dmFyIF9lPXkucmVhZF9zaGlmdCgyKTtMLmhwdD1fZS8yMDt2YXIgdmU9eS5yZWFkX3No'@;
put 'aWZ0KDIpO3JldHVybiAyJnZlJiYoTC5oaWRkZW49ITApLDQmdmUmJihQLnRvcHRoaWNrPSEwKSw4JnZlJiYoUC5ib3R0aGljaz0hMCksUC5yb3dvdXRsaW5lPXkucmVhZF9zaGlmdCgxKSxQLmNvbG91dGxpbmU9eS5yZWFkX3NoaWZ0KDEpLEkzKEwpLFAucm93PUwscHUoUSksUC5jb2w9USxQ'@;
put 'fX0sNDg2OntuOiJCcnRCZWdpbk1ncyJ9LDQ4Nzp7bjoiQnJ0RW5kTUdzIn0sNDg4OntuOiJCcnRCZWdpbk1HTWFwcyJ9LDQ4OTp7bjoiQnJ0RW5kTUdNYXBzIn0sNDkwOntuOiJCcnRCZWdpbk1HIn0sNDkxOntuOiJCcnRFbmRNRyJ9LDQ5Mjp7bjoiQnJ0QmVnaW5NYXAifSw0OTM6e246IkJy'@;
put 'dEVuZE1hcCJ9LDQ5NDp7bjoiQnJ0SExpbmsiLGY6ZnVuY3Rpb24gZDUoeSxQKXt2YXIgTD15LmwrUCxRPUpjKHksMTYpLHJlPUF1KHkpLGdlPUNjKHkpLF9lPUNjKHkpLHZlPUNjKHkpO3kubD1MO3ZhciBTZT17cmZ4OlEscmVsSWQ6cmUsbG9jOmdlLGRpc3BsYXk6dmV9O3JldHVybiBfZSYm'@;
put 'KFNlLlRvb2x0aXA9X2UpLFNlfX0sNDk1OntuOiJCcnRCZWdpbkRDb24ifSw0OTY6e246IkJydEVuZERDb24ifSw0OTc6e246IkJydEJlZ2luRFJlZnMifSw0OTg6e246IkJydEVuZERSZWZzIn0sNDk5OntuOiJCcnREUmVmIn0sNTAwOntuOiJCcnRCZWdpblNjZW5NYW4ifSw1MDE6e246IkJy'@;
put 'dEVuZFNjZW5NYW4ifSw1MDI6e246IkJydEJlZ2luU2N0In0sNTAzOntuOiJCcnRFbmRTY3QifSw1MDQ6e246IkJydFNsYyJ9LDUwNTp7bjoiQnJ0QmVnaW5EWEZzIn0sNTA2OntuOiJCcnRFbmREWEZzIn0sNTA3OntuOiJCcnREWEYifSw1MDg6e246IkJydEJlZ2luVGFibGVTdHlsZXMifSw1'@;
put 'MDk6e246IkJydEVuZFRhYmxlU3R5bGVzIn0sNTEwOntuOiJCcnRCZWdpblRhYmxlU3R5bGUifSw1MTE6e246IkJydEVuZFRhYmxlU3R5bGUifSw1MTI6e246IkJydFRhYmxlU3R5bGVFbGVtZW50In0sNTEzOntuOiJCcnRUYWJsZVN0eWxlQ2xpZW50In0sNTE0OntuOiJCcnRCZWdpblZvbERl'@;
put 'cHMifSw1MTU6e246IkJydEVuZFZvbERlcHMifSw1MTY6e246IkJydEJlZ2luVm9sVHlwZSJ9LDUxNzp7bjoiQnJ0RW5kVm9sVHlwZSJ9LDUxODp7bjoiQnJ0QmVnaW5Wb2xNYWluIn0sNTE5OntuOiJCcnRFbmRWb2xNYWluIn0sNTIwOntuOiJCcnRCZWdpblZvbFRvcGljIn0sNTIxOntuOiJC'@;
put 'cnRFbmRWb2xUb3BpYyJ9LDUyMjp7bjoiQnJ0Vm9sU3VidG9waWMifSw1MjM6e246IkJydFZvbFJlZiJ9LDUyNDp7bjoiQnJ0Vm9sTnVtIn0sNTI1OntuOiJCcnRWb2xFcnIifSw1MjY6e246IkJydFZvbFN0ciJ9LDUyNzp7bjoiQnJ0Vm9sQm9vbCJ9LDUyODp7bjoiQnJ0QmVnaW5DYWxjQ2hh'@;
put 'aW4kIn0sNTI5OntuOiJCcnRFbmRDYWxjQ2hhaW4kIn0sNTMwOntuOiJCcnRCZWdpblNvcnRTdGF0ZSJ9LDUzMTp7bjoiQnJ0RW5kU29ydFN0YXRlIn0sNTMyOntuOiJCcnRCZWdpblNvcnRDb25kIn0sNTMzOntuOiJCcnRFbmRTb3J0Q29uZCJ9LDUzNDp7bjoiQnJ0Qm9va1Byb3RlY3Rpb24i'@;
put 'fSw1MzU6e246IkJydFNoZWV0UHJvdGVjdGlvbiJ9LDUzNjp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uIn0sNTM3OntuOiJCcnRQaG9uZXRpY0luZm8ifSw1Mzg6e246IkJydEJlZ2luRUNUeHRXaXoifSw1Mzk6e246IkJydEVuZEVDVHh0V2l6In0sNTQwOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZv'@;
put 'THN0In0sNTQxOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdCJ9LDU0Mjp7bjoiQnJ0QmVnaW5FQ1R3RmxkSW5mbyJ9LDU0ODp7bjoiQnJ0RmlsZVNoYXJpbmcifSw1NDk6e246IkJydE9sZVNpemUifSw1NTA6e246IkJydERyYXdpbmciLGY6VDF9LDU1MTp7bjoiQnJ0TGVnYWN5RHJhd2luZyJ9'@;
put 'LDU1Mjp7bjoiQnJ0TGVnYWN5RHJhd2luZ0hGIn0sNTUzOntuOiJCcnRXZWJPcHQifSw1NTQ6e246IkJydEJlZ2luV2ViUHViSXRlbXMifSw1NTU6e246IkJydEVuZFdlYlB1Ykl0ZW1zIn0sNTU2OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW0ifSw1NTc6e246IkJydEVuZFdlYlB1Ykl0ZW0ifSw1'@;
put 'NTg6e246IkJydEJlZ2luU1hDb25kRm10In0sNTU5OntuOiJCcnRFbmRTWENvbmRGbXQifSw1NjA6e246IkJydEJlZ2luU1hDb25kRm10cyJ9LDU2MTp7bjoiQnJ0RW5kU1hDb25kRm10cyJ9LDU2Mjp7bjoiQnJ0QmtIaW0ifSw1NjQ6e246IkJydENvbG9yIn0sNTY1OntuOiJCcnRCZWdpbklu'@;
put 'ZGV4ZWRDb2xvcnMifSw1NjY6e246IkJydEVuZEluZGV4ZWRDb2xvcnMifSw1Njk6e246IkJydEJlZ2luTVJVQ29sb3JzIn0sNTcwOntuOiJCcnRFbmRNUlVDb2xvcnMifSw1NzI6e246IkJydE1SVUNvbG9yIn0sNTczOntuOiJCcnRCZWdpbkRWYWxzIn0sNTc0OntuOiJCcnRFbmREVmFscyJ9'@;
put 'LDU3Nzp7bjoiQnJ0U3VwTmFtZVN0YXJ0In0sNTc4OntuOiJCcnRTdXBOYW1lVmFsdWVTdGFydCJ9LDU3OTp7bjoiQnJ0U3VwTmFtZVZhbHVlRW5kIn0sNTgwOntuOiJCcnRTdXBOYW1lTnVtIn0sNTgxOntuOiJCcnRTdXBOYW1lRXJyIn0sNTgyOntuOiJCcnRTdXBOYW1lU3QifSw1ODM6e246'@;
put 'IkJydFN1cE5hbWVOaWwifSw1ODQ6e246IkJydFN1cE5hbWVCb29sIn0sNTg1OntuOiJCcnRTdXBOYW1lRm1sYSJ9LDU4Njp7bjoiQnJ0U3VwTmFtZUJpdHMifSw1ODc6e246IkJydFN1cE5hbWVFbmQifSw1ODg6e246IkJydEVuZFN1cEJvb2sifSw1ODk6e246IkJydENlbGxTbWFydFRhZ1By'@;
put 'b3BlcnR5In0sNTkwOntuOiJCcnRCZWdpbkNlbGxTbWFydFRhZyJ9LDU5MTp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFnIn0sNTkyOntuOiJCcnRCZWdpbkNlbGxTbWFydFRhZ3MifSw1OTM6e246IkJydEVuZENlbGxTbWFydFRhZ3MifSw1OTQ6e246IkJydEJlZ2luU21hcnRUYWdzIn0sNTk1Ontu'@;
put 'OiJCcnRFbmRTbWFydFRhZ3MifSw1OTY6e246IkJydFNtYXJ0VGFnVHlwZSJ9LDU5Nzp7bjoiQnJ0QmVnaW5TbWFydFRhZ1R5cGVzIn0sNTk4OntuOiJCcnRFbmRTbWFydFRhZ1R5cGVzIn0sNTk5OntuOiJCcnRCZWdpblNYRmlsdGVycyJ9LDYwMDp7bjoiQnJ0RW5kU1hGaWx0ZXJzIn0sNjAx'@;
put 'OntuOiJCcnRCZWdpblNYRklMVEVSIn0sNjAyOntuOiJCcnRFbmRTWEZpbHRlciJ9LDYwMzp7bjoiQnJ0QmVnaW5GaWxscyJ9LDYwNDp7bjoiQnJ0RW5kRmlsbHMifSw2MDU6e246IkJydEJlZ2luQ2VsbFdhdGNoZXMifSw2MDY6e246IkJydEVuZENlbGxXYXRjaGVzIn0sNjA3OntuOiJCcnRD'@;
put 'ZWxsV2F0Y2gifSw2MDg6e246IkJydEJlZ2luQ1JFcnJzIn0sNjA5OntuOiJCcnRFbmRDUkVycnMifSw2MTA6e246IkJydENyYXNoUmVjRXJyIn0sNjExOntuOiJCcnRCZWdpbkZvbnRzIn0sNjEyOntuOiJCcnRFbmRGb250cyJ9LDYxMzp7bjoiQnJ0QmVnaW5Cb3JkZXJzIn0sNjE0OntuOiJC'@;
put 'cnRFbmRCb3JkZXJzIn0sNjE1OntuOiJCcnRCZWdpbkZtdHMifSw2MTY6e246IkJydEVuZEZtdHMifSw2MTc6e246IkJydEJlZ2luQ2VsbFhGcyJ9LDYxODp7bjoiQnJ0RW5kQ2VsbFhGcyJ9LDYxOTp7bjoiQnJ0QmVnaW5TdHlsZXMifSw2MjA6e246IkJydEVuZFN0eWxlcyJ9LDYyNTp7bjoi'@;
put 'QnJ0QmlnTmFtZSJ9LDYyNjp7bjoiQnJ0QmVnaW5DZWxsU3R5bGVYRnMifSw2Mjc6e246IkJydEVuZENlbGxTdHlsZVhGcyJ9LDYyODp7bjoiQnJ0QmVnaW5Db21tZW50cyJ9LDYyOTp7bjoiQnJ0RW5kQ29tbWVudHMifSw2MzA6e246IkJydEJlZ2luQ29tbWVudEF1dGhvcnMifSw2MzE6e246'@;
put 'IkJydEVuZENvbW1lbnRBdXRob3JzIn0sNjMyOntuOiJCcnRDb21tZW50QXV0aG9yIixmOlhEfSw2MzM6e246IkJydEJlZ2luQ29tbWVudExpc3QifSw2MzQ6e246IkJydEVuZENvbW1lbnRMaXN0In0sNjM1OntuOiJCcnRCZWdpbkNvbW1lbnQiLGY6ZnVuY3Rpb24gQkMoeSl7dmFyIFA9e307'@;
put 'UC5pYXV0aG9yPXkucmVhZF9zaGlmdCg0KTt2YXIgTD1KYyh5LDE2KTtyZXR1cm4gUC5yZng9TC5zLFAucmVmPWRpKEwucykseS5sKz0xNixQfX0sNjM2OntuOiJCcnRFbmRDb21tZW50In0sNjM3OntuOiJCcnRDb21tZW50VGV4dCIsZjpYN30sNjM4OntuOiJCcnRCZWdpbk9sZU9iamVjdHMi'@;
put 'fSw2Mzk6e246IkJydE9sZU9iamVjdCJ9LDY0MDp7bjoiQnJ0RW5kT2xlT2JqZWN0cyJ9LDY0MTp7bjoiQnJ0QmVnaW5TeHJ1bGVzIn0sNjQyOntuOiJCcnRFbmRTeFJ1bGVzIn0sNjQzOntuOiJCcnRCZWdpbkFjdGl2ZVhDb250cm9scyJ9LDY0NDp7bjoiQnJ0QWN0aXZlWCJ9LDY0NTp7bjoi'@;
put 'QnJ0RW5kQWN0aXZlWENvbnRyb2xzIn0sNjQ2OntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyc1NvcnRCeSJ9LDY0ODp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIn0sNjQ5OntuOiJCcnRDZWxsSWdub3JlRUMifSw2NTA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MifSw2NTE6e246IkJydENz'@;
put 'UHJvcCIsZjpmdW5jdGlvbiBlcCh5LFApe3JldHVybiB5LmwrPTEwLHtuYW1lOkNjKHkpfX19LDY1Mjp7bjoiQnJ0Q3NQYWdlU2V0dXAifSw2NTM6e246IkJydEJlZ2luVXNlckNzVmlld3MifSw2NTQ6e246IkJydEVuZFVzZXJDc1ZpZXdzIn0sNjU1OntuOiJCcnRCZWdpblVzZXJDc1ZpZXci'@;
put 'fSw2NTY6e246IkJydEVuZFVzZXJDc1ZpZXcifSw2NTc6e246IkJydEJlZ2luUGNkU0ZDSUVudHJpZXMifSw2NTg6e246IkJydEVuZFBDRFNGQ0lFbnRyaWVzIn0sNjU5OntuOiJCcnRQQ0RTRkNJRW50cnkifSw2NjA6e246IkJydEJlZ2luTGlzdFBhcnRzIn0sNjYxOntuOiJCcnRMaXN0UGFy'@;
put 'dCJ9LDY2Mjp7bjoiQnJ0RW5kTGlzdFBhcnRzIn0sNjYzOntuOiJCcnRTaGVldENhbGNQcm9wIn0sNjY0OntuOiJCcnRCZWdpbkZuR3JvdXAifSw2NjU6e246IkJydEZuR3JvdXAifSw2NjY6e246IkJydEVuZEZuR3JvdXAifSw2Njc6e246IkJydFN1cEFkZGluIn0sNjY4OntuOiJCcnRTWFRE'@;
put 'TVBPcmRlciJ9LDY2OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uIn0sNjcxOntuOiJCcnRCZWdpbldzU29ydE1hcCJ9LDY3Mjp7bjoiQnJ0RW5kV3NTb3J0TWFwIn0sNjczOntuOiJCcnRCZWdpblJSU29ydCJ9LDY3NDp7bjoiQnJ0RW5kUlJTb3J0In0sNjc1OntuOiJCcnRSUlNvcnRJdGVtIn0sNjc2'@;
put 'OntuOiJCcnRGaWxlU2hhcmluZ0lzbyJ9LDY3Nzp7bjoiQnJ0Qm9va1Byb3RlY3Rpb25Jc28ifSw2Nzg6e246IkJydFNoZWV0UHJvdGVjdGlvbklzbyJ9LDY3OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uSXNvIn0sNjgwOntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28ifSw2ODE6e246IkJydERWYWxM'@;
put 'aXN0In0sMTAyNDp7bjoiQnJ0UndEZXNjZW50In0sMTAyNTp7bjoiQnJ0S25vd25Gb250cyJ9LDEwMjY6e246IkJydEJlZ2luU1hUdXBsZVNldCJ9LDEwMjc6e246IkJydEVuZFNYVHVwbGVTZXQifSwxMDI4OntuOiJCcnRCZWdpblNYVHVwbGVTZXRIZWFkZXIifSwxMDI5OntuOiJCcnRFbmRT'@;
put 'WFR1cGxlU2V0SGVhZGVyIn0sMTAzMDp7bjoiQnJ0U1hUdXBsZVNldEhlYWRlckl0ZW0ifSwxMDMxOntuOiJCcnRCZWdpblNYVHVwbGVTZXREYXRhIn0sMTAzMjp7bjoiQnJ0RW5kU1hUdXBsZVNldERhdGEifSwxMDMzOntuOiJCcnRCZWdpblNYVHVwbGVTZXRSb3cifSwxMDM0OntuOiJCcnRF'@;
put 'bmRTWFR1cGxlU2V0Um93In0sMTAzNTp7bjoiQnJ0U1hUdXBsZVNldFJvd0l0ZW0ifSwxMDM2OntuOiJCcnROYW1lRXh0In0sMTAzNzp7bjoiQnJ0UENESDE0In0sMTAzODp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtMTQifSwxMDM5OntuOiJCcnRFbmRQQ0RDYWxjTWVtMTQifSwxMDQwOntuOiJC'@;
put 'cnRTWFRIMTQifSwxMDQxOntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwIn0sMTA0Mjp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXAifSwxMDQzOntuOiJCcnRTcGFya2xpbmUifSwxMDQ0OntuOiJCcnRTWERJMTQifSwxMDQ1OntuOiJCcnRXc0ZtdEluZm9FeDE0In0sMTA0Njp7bjoiQnJ0QmVn'@;
put 'aW5Db25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDc6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0ODp7bjoiQnJ0QmVnaW5DRlJ1bGUxNCJ9LDEwNDk6e246IkJydEVuZENGUnVsZTE0In0sMTA1MDp7bjoiQnJ0Q0ZWTzE0In0sMTA1MTp7bjoiQnJ0QmVnaW5EYXRh'@;
put 'YmFyMTQifSwxMDUyOntuOiJCcnRCZWdpbkljb25TZXQxNCJ9LDEwNTM6e246IkJydERWYWwxNCIsZjpmdW5jdGlvbiBiTCh5LFAsTCl7dmFyIFE9ZnVuY3Rpb24gR3QoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCg0KSxyZT17fTtyZXR1cm4gMSZRJiYocmUucmVmcz1mdW5jdGlvbiBVbih5'@;
put 'KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W107UC0tID4wOylMLnB1c2goSXIoeSkpO3JldHVybiBMfSh5KSksMiZRJiYocmUuc3FyZWZzPWZ1bmN0aW9uIHlvKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXTtQLS0gPjA7KUwucHVzaChlcyh5KSk7cmV0dXJuIEx9KHkp'@;
put 'KSw0JlEmJihyZS5mb3JtdWxhcz1mdW5jdGlvbiB6cyh5LFAsTCl7Zm9yKHZhciBRPXkucmVhZF9zaGlmdCg0KSxyZT1bXTtRLS0gPjA7KXJlLnB1c2gob2MoeSwwLEwpKTtyZXR1cm4gcmV9KHksMCxMKSksOCZRJiYocmUucmVsSUQ9ZnVuY3Rpb24gaW0oeSl7dmFyIFA9eS5yZWFkX3NoaWZ0'@;
put 'KDIpO3JldHVybiAwPT09UD8iIjp5LnJlYWRfc2hpZnQoUCwidXRmMTZsZSIpfSh5KSkscmV9KHksMCxMKSxyZT15LnJlYWRfc2hpZnQoNCksZ2U9QXUoeSksX2U9QXUoeSksdmU9QXUoeSksU2U9QXUoeSksSGU9KFEuZm9ybXVsYXN8fFtdKVswXSxCZT0oUS5mb3JtdWxhc3x8W10pWzFdLEdl'@;
put 'PTE1JnJlLG50PXt0OmVvW0dlXSxzcXJmeDpRLnNxcmVmc1swXSxzOltnZSxfZSx2ZSxTZV19O3JldHVybiBIZSYmKG50LmYxPUhlKSxCZSYmKG50LmYyPUJlKSwwPT1HZXx8Mz09R2V8fDc9PUdlfHwobnQub3A9QnZbcmU+PjIwJjE1XSksbnR9fSwxMDU0OntuOiJCcnRCZWdpbkRWYWxzMTQi'@;
put 'fSwxMDU1OntuOiJCcnRDb2xvcjE0In0sMTA1Njp7bjoiQnJ0QmVnaW5TcGFya2xpbmVzIn0sMTA1Nzp7bjoiQnJ0RW5kU3BhcmtsaW5lcyJ9LDEwNTg6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXBzIn0sMTA1OTp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXBzIn0sMTA2MTp7bjoiQnJ0U1hW'@;
put 'RDE0In0sMTA2Mjp7bjoiQnJ0QmVnaW5TWFZpZXcxNCJ9LDEwNjM6e246IkJydEVuZFNYVmlldzE0In0sMTA2NDp7bjoiQnJ0QmVnaW5TWFZpZXcxNiJ9LDEwNjU6e246IkJydEVuZFNYVmlldzE2In0sMTA2Njp7bjoiQnJ0QmVnaW5QQ0QxNCJ9LDEwNjc6e246IkJydEVuZFBDRDE0In0sMTA2'@;
put 'ODp7bjoiQnJ0QmVnaW5FeHRDb25uMTQifSwxMDY5OntuOiJCcnRFbmRFeHRDb25uMTQifSwxMDcwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSURzIn0sMTA3MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRHMifSwxMDcyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSUQifSwxMDczOntuOiJCcnRF'@;
put 'bmRTbGljZXJDYWNoZUlEIn0sMTA3NTp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZSJ9LDEwNzY6e246IkJydEVuZFNsaWNlckNhY2hlIn0sMTA3Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZURlZiJ9LDEwNzg6e246IkJydEVuZFNsaWNlckNhY2hlRGVmIn0sMTA3OTp7bjoiQnJ0QmVnaW5TbGlj'@;
put 'ZXJzRXgifSwxMDgwOntuOiJCcnRFbmRTbGljZXJzRXgifSwxMDgxOntuOiJCcnRCZWdpblNsaWNlckV4In0sMTA4Mjp7bjoiQnJ0RW5kU2xpY2VyRXgifSwxMDgzOntuOiJCcnRCZWdpblNsaWNlciJ9LDEwODQ6e246IkJydEVuZFNsaWNlciJ9LDEwODU6e246IkJydFNsaWNlckNhY2hlUGl2'@;
put 'b3RUYWJsZXMifSwxMDg2OntuOiJCcnRCZWdpblNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg3OntuOiJCcnRFbmRTbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4ODp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDg5OntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsc0RhdGEi'@;
put 'fSwxMDkwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDkzOntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5NDp7bjoi'@;
put 'QnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk1OntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk2OntuOiJCcnRTbGljZXJDYWNoZU9sYXBJdGVtIn0sMTA5Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMDk4OntuOiJCcnRTbGljZXJDYWNoZVNl'@;
put 'bGVjdGlvbiJ9LDEwOTk6e246IkJydEVuZFNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDExMDA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAxOntuOiJCcnRFbmRTbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDI6e246IkJydFNsaWNlckNhY2hlTmF0aXZlSXRlbSJ9LDExMDM6e246'@;
put 'IkJydFJhbmdlUHJvdGVjdGlvbjE0In0sMTEwNDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTQifSwxMTA1OntuOiJCcnRDZWxsSWdub3JlRUMxNCJ9LDExMTE6e246IkJydExpc3QxNCJ9LDExMTI6e246IkJydENGSWNvbiJ9LDExMTM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RD'@;
put 'YWNoZUlEcyJ9LDExMTQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE1OntuOiJCcnRCZWdpblNsaWNlcnMifSwxMTE2OntuOiJCcnRFbmRTbGljZXJzIn0sMTExNzp7bjoiQnJ0V2JQcm9wMTQifSwxMTE4OntuOiJCcnRCZWdpblNYRWRpdCJ9LDExMTk6e246IkJy'@;
put 'dEVuZFNYRWRpdCJ9LDExMjA6e246IkJydEJlZ2luU1hFZGl0cyJ9LDExMjE6e246IkJydEVuZFNYRWRpdHMifSwxMTIyOntuOiJCcnRCZWdpblNYQ2hhbmdlIn0sMTEyMzp7bjoiQnJ0RW5kU1hDaGFuZ2UifSwxMTI0OntuOiJCcnRCZWdpblNYQ2hhbmdlcyJ9LDExMjU6e246IkJydEVuZFNY'@;
put 'Q2hhbmdlcyJ9LDExMjY6e246IkJydFNYVHVwbGVJdGVtcyJ9LDExMjg6e246IkJydEJlZ2luU2xpY2VyU3R5bGUifSwxMTI5OntuOiJCcnRFbmRTbGljZXJTdHlsZSJ9LDExMzA6e246IkJydFNsaWNlclN0eWxlRWxlbWVudCJ9LDExMzE6e246IkJydEJlZ2luU3R5bGVTaGVldEV4dDE0In0s'@;
put 'MTEzMjp7bjoiQnJ0RW5kU3R5bGVTaGVldEV4dDE0In0sMTEzMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM1OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM2'@;
put 'OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtRXh0In0sMTEzODp7bjoiQnJ0RW5kUENEQ2FsY01lbUV4dCJ9LDExMzk6e246IkJydEJlZ2luUENEQ2FsY01lbXNFeHQifSwxMTQwOntuOiJCcnRFbmRQQ0RDYWxjTWVtc0V4dCJ9'@;
put 'LDExNDE6e246IkJydFBDREZpZWxkMTQifSwxMTQyOntuOiJCcnRCZWdpblNsaWNlclN0eWxlcyJ9LDExNDM6e246IkJydEVuZFNsaWNlclN0eWxlcyJ9LDExNDQ6e246IkJydEJlZ2luU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDU6e246IkJydEVuZFNsaWNlclN0eWxlRWxlbWVudHMifSwx'@;
put 'MTQ2OntuOiJCcnRDRlJ1bGVFeHQifSwxMTQ3OntuOiJCcnRCZWdpblNYQ29uZEZtdDE0In0sMTE0ODp7bjoiQnJ0RW5kU1hDb25kRm10MTQifSwxMTQ5OntuOiJCcnRCZWdpblNYQ29uZEZtdHMxNCJ9LDExNTA6e246IkJydEVuZFNYQ29uZEZtdHMxNCJ9LDExNTI6e246IkJydEJlZ2luU29y'@;
put 'dENvbmQxNCJ9LDExNTM6e246IkJydEVuZFNvcnRDb25kMTQifSwxMTU0OntuOiJCcnRFbmREVmFsczE0In0sMTE1NTp7bjoiQnJ0RW5kSWNvblNldDE0In0sMTE1Njp7bjoiQnJ0RW5kRGF0YWJhcjE0In0sMTE1Nzp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlMTQifSwxMTU4OntuOiJCcnRFbmRD'@;
put 'b2xvclNjYWxlMTQifSwxMTU5OntuOiJCcnRCZWdpblN4cnVsZXMxNCJ9LDExNjA6e246IkJydEVuZFN4cnVsZXMxNCJ9LDExNjE6e246IkJydEJlZ2luUFJ1bGUxNCJ9LDExNjI6e246IkJydEVuZFBSdWxlMTQifSwxMTYzOntuOiJCcnRCZWdpblBSRmlsdGVyczE0In0sMTE2NDp7bjoiQnJ0'@;
put 'RW5kUFJGaWx0ZXJzMTQifSwxMTY1OntuOiJCcnRCZWdpblBSRmlsdGVyMTQifSwxMTY2OntuOiJCcnRFbmRQUkZpbHRlcjE0In0sMTE2Nzp7bjoiQnJ0QmVnaW5QUkZJdGVtMTQifSwxMTY4OntuOiJCcnRFbmRQUkZJdGVtMTQifSwxMTY5OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MxNCJ9'@;
put 'LDExNzA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MxNCJ9LDExNzE6e246IkJydER4ZjE0In0sMTE3Mjp7bjoiQnJ0QmVnaW5EeEYxNHMifSwxMTczOntuOiJCcnRFbmREeGYxNHMifSwxMTc3OntuOiJCcnRGaWx0ZXIxNCJ9LDExNzg6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVyczE0In0sMTE4'@;
put 'MDp7bjoiQnJ0Q3VzdG9tRmlsdGVyMTQifSwxMTgxOntuOiJCcnRJY29uRmlsdGVyMTQifSwxMTgyOntuOiJCcnRQaXZvdENhY2hlQ29ubmVjdGlvbk5hbWUifSwyMDQ4OntuOiJCcnRCZWdpbkRlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDQ5OntuOiJCcnRFbmREZWNvdXBsZWRQaXZvdENh'@;
put 'Y2hlSURzIn0sMjA1MDp7bjoiQnJ0RGVjb3VwbGVkUGl2b3RDYWNoZUlEIn0sMjA1MTp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlUmVmcyJ9LDIwNTI6e246IkJydEVuZFBpdm90VGFibGVSZWZzIn0sMjA1Mzp7bjoiQnJ0UGl2b3RUYWJsZVJlZiJ9LDIwNTQ6e246IkJydFNsaWNlckNhY2hlQm9v'@;
put 'a1Bpdm90VGFibGVzIn0sMjA1NTp7bjoiQnJ0QmVnaW5TeHZjZWxscyJ9LDIwNTY6e246IkJydEVuZFN4dmNlbGxzIn0sMjA1Nzp7bjoiQnJ0QmVnaW5TeFJvdyJ9LDIwNTg6e246IkJydEVuZFN4Um93In0sMjA2MDp7bjoiQnJ0UGNkQ2FsY01lbTE1In0sMjA2Nzp7bjoiQnJ0UXNpMTUifSwy'@;
put 'MDY4OntuOiJCcnRCZWdpbldlYkV4dGVuc2lvbnMifSwyMDY5OntuOiJCcnRFbmRXZWJFeHRlbnNpb25zIn0sMjA3MDp7bjoiQnJ0V2ViRXh0ZW5zaW9uIn0sMjA3MTp7bjoiQnJ0QWJzUGF0aDE1In0sMjA3Mjp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzM6e246IkJy'@;
put 'dEVuZFBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3NTp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEcyJ9LDIwNzY6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRCJ9LDIwNzc6e246IkJydEJlZ2luVGFibGVTbGljZXJDYWNoZSJ9LDIwNzg6e246IkJydEVuZFRhYmxlU2xpY2VyQ2FjaGUifSwy'@;
put 'MDc5OntuOiJCcnRTeEZpbHRlcjE1In0sMjA4MDp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODE6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4Mjp7bjoiQnJ0VGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRCJ9LDIwODM6e246IkJy'@;
put 'dEJlZ2luVGltZWxpbmVDYWNoZUlEcyJ9LDIwODQ6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRHMifSwyMDg1OntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRCJ9LDIwODY6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRCJ9LDIwODc6e246IkJydEJlZ2luVGltZWxpbmVzRXgifSwyMDg4Ontu'@;
put 'OiJCcnRFbmRUaW1lbGluZXNFeCJ9LDIwODk6e246IkJydEJlZ2luVGltZWxpbmVFeCJ9LDIwOTA6e246IkJydEVuZFRpbWVsaW5lRXgifSwyMDkxOntuOiJCcnRXb3JrQm9va1ByMTUifSwyMDkyOntuOiJCcnRQQ0RIMTUifSwyMDkzOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGUifSwyMDk0'@;
put 'OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlIn0sMjA5NTp7bjoiQnJ0VGltZWxpbmVTdHlsZUVsZW1lbnQifSwyMDk2OntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5Nzp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk4OntuOiJCcnRCZWdpblRp'@;
put 'bWVsaW5lU3R5bGVzIn0sMjA5OTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXMifSwyMTAwOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDE6e246IkJydEVuZFRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDI6e246IkJydER4ZjE1In0sMjEwMzp7bjoiQnJ0QmVnaW5E'@;
put 'eGZzMTUifSwyMTA0OntuOiJicnRFbmREeGZzMTUifSwyMTA1OntuOiJCcnRTbGljZXJDYWNoZUhpZGVJdGVtc1dpdGhOb0RhdGEifSwyMTA2OntuOiJCcnRCZWdpbkl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDc6e246IkJydEVuZEl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDg6e246IkJydEl0ZW1Vbmlx'@;
put 'dWVOYW1lIn0sMjEwOTp7bjoiQnJ0QmVnaW5FeHRDb25uMTUifSwyMTEwOntuOiJCcnRFbmRFeHRDb25uMTUifSwyMTExOntuOiJCcnRCZWdpbk9sZWRiUHIxNSJ9LDIxMTI6e246IkJydEVuZE9sZWRiUHIxNSJ9LDIxMTM6e246IkJydEJlZ2luRGF0YUZlZWRQcjE1In0sMjExNDp7bjoiQnJ0'@;
put 'RW5kRGF0YUZlZWRQcjE1In0sMjExNTp7bjoiQnJ0VGV4dFByMTUifSwyMTE2OntuOiJCcnRSYW5nZVByMTUifSwyMTE3OntuOiJCcnREYkNvbW1hbmQxNSJ9LDIxMTg6e246IkJydEJlZ2luRGJUYWJsZXMxNSJ9LDIxMTk6e246IkJydEVuZERiVGFibGVzMTUifSwyMTIwOntuOiJCcnREYlRh'@;
put 'YmxlMTUifSwyMTIxOntuOiJCcnRCZWdpbkRhdGFNb2RlbCJ9LDIxMjI6e246IkJydEVuZERhdGFNb2RlbCJ9LDIxMjM6e246IkJydEJlZ2luTW9kZWxUYWJsZXMifSwyMTI0OntuOiJCcnRFbmRNb2RlbFRhYmxlcyJ9LDIxMjU6e246IkJydE1vZGVsVGFibGUifSwyMTI2OntuOiJCcnRCZWdp'@;
put 'bk1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjc6e246IkJydEVuZE1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjg6e246IkJydE1vZGVsUmVsYXRpb25zaGlwIn0sMjEyOTp7bjoiQnJ0QmVnaW5FQ1R4dFdpejE1In0sMjEzMDp7bjoiQnJ0RW5kRUNUeHRXaXoxNSJ9LDIxMzE6e246IkJydEJlZ2lu'@;
put 'RUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzI6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0MTUifSwyMTMzOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvMTUifSwyMTM0OntuOiJCcnRGaWVsZExpc3RBY3RpdmVJdGVtIn0sMjEzNTp7bjoiQnJ0UGl2b3RDYWNoZUlkVmVyc2lvbiJ9LDIxMzY6e246IkJy'@;
put 'dFNYREkxNSJ9LDIxMzc6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzODp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzOTp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZyJ9LDIxNDA6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MTp7bjoi'@;
put 'QnJ0TW9kZWxUaW1lR3JvdXBpbmdDYWxjQ29sIn0sMzA3Mjp7bjoiQnJ0VWlkIn0sMzA3Mzp7bjoiQnJ0UmV2aXNpb25QdHIifSw1MDk1OntuOiJCcnRCZWdpbkNhbGNGZWF0dXJlcyJ9LDUwOTY6e246IkJydEVuZENhbGNGZWF0dXJlcyJ9LDUwOTc6e246IkJydENhbGNGZWF0dXJlIn0sNjU1'@;
put 'MzU6e246IiJ9fSxiNT1QZShtZiwibiIpO2I1LkJydEZSVEFyY2hJRCQ9MTY7dmFyIFgwPXs2OntuOiJGb3JtdWxhIixmOnozfSwxMDp7bjoiRU9GIixmOlBkfSwxMjp7bjoiQ2FsY0NvdW50IixmOmhsfSwxMzp7bjoiQ2FsY01vZGUiLGY6aGx9LDE0OntuOiJDYWxjUHJlY2lzaW9uIixmOlNv'@;
put 'fSwxNTp7bjoiQ2FsY1JlZk1vZGUiLGY6U299LDE2OntuOiJDYWxjRGVsdGEiLGY6bWF9LDE3OntuOiJDYWxjSXRlciIsZjpTb30sMTg6e246IlByb3RlY3QiLGY6U299LDE5OntuOiJQYXNzd29yZCIsZjpobH0sMjA6e246IkhlYWRlciIsZjpWMX0sMjE6e246IkZvb3RlciIsZjpWMX0sMjM6'@;
put 'e246IkV4dGVyblNoZWV0IixmOlNtfSwyNDp7bjoiTGJsIixmOlZ3fSwyNTp7bjoiV2luUHJvdGVjdCIsZjpTb30sMjY6e246IlZlcnRpY2FsUGFnZUJyZWFrcyJ9LDI3OntuOiJIb3Jpem9udGFsUGFnZUJyZWFrcyJ9LDI4OntuOiJOb3RlIixmOmZ1bmN0aW9uIFV3KHksUCxMKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24gUzkoeSxQLEwpe2lmKCEoTC5iaWZmPDgpKXt2YXIgUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPXkucmVhZF9zaGlmdCgyKSxfZT15LnJlYWRfc2hpZnQoMiksdmU9VjIoeSwwLEwpO3JldHVybiBMLmJpZmY8OCYmeS5yZWFkX3NoaWZ0KDEpLFt7cjpR'@;
put 'LGM6cmV9LHZlLF9lLGdlXX19KHksMCxMKX19LDI5OntuOiJTZWxlY3Rpb24iLGY6ZnVuY3Rpb24gUzMoeSxQLEwpe3JldHVybiBMJiZMLmJpZmY8NT8oeS5sKz1QLHtjZWxsOntyOjAsYzowfX0pOih5LnJlYWRfc2hpZnQoMSkse2NlbGw6ZGkoe3I6eS5yZWFkX3NoaWZ0KDIpLGM6eS5yZWFk'@;
put 'X3NoaWZ0KDIpfSl9KX19LDM0OntuOiJEYXRlMTkwNCIsZjpTb30sMzU6e246IkV4dGVybk5hbWUiLGY6eTl9LDM4OntuOiJMZWZ0TWFyZ2luIixmOm1hfSwzOTp7bjoiUmlnaHRNYXJnaW4iLGY6bWF9LDQwOntuOiJUb3BNYXJnaW4iLGY6bWF9LDQxOntuOiJCb3R0b21NYXJnaW4iLGY6bWF9'@;
put 'LDQyOntuOiJQcmludFJvd0NvbCIsZjpTb30sNDM6e246IlByaW50R3JpZCIsZjpTb30sNDc6e246IkZpbGVQYXNzIixmOmZ1bmN0aW9uIE5sKHksUCxMKXtpZihMLmVuYylyZXR1cm4gTC5lbmM7dmFyIFE9e1R5cGU6TC5iaWZmPj04P3kucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gUS5UeXBl'@;
put 'P2Z1bmN0aW9uIGdEKHksUCxMLFEpe3ZhciByZT1RfHx7fTtpZihyZS5JbmZvPXkucmVhZF9zaGlmdCgyKSx5LmwtPTIsMT09PXJlLkluZm8pe2lmKHJlLkRhdGE9ZnVuY3Rpb24gX1ooeSl7dmFyIFA9e30sTD1QLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1HMCh5LDQpO2lmKDEhPUwuTWFqb3J8'@;
put 'fDEhPUwuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK0wuTWFqb3IrIiA6ICIrTC5NaW5vcjtyZXR1cm4gUC5TYWx0PXkucmVhZF9zaGlmdCgxNiksUC5FbmNyeXB0ZWRWZXJpZmllcj15LnJlYWRfc2hpZnQoMTYpLFAuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPXkucmVh'@;
put 'ZF9zaGlmdCgxNiksUH0oeSksTC5wYXNzd29yZCYmdHlwZW9mIE82PCJ1Iil7dmFyIGdlPU82KEwucGFzc3dvcmQscmUuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLF9lPXVlKHJlLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrcmUuRGF0YS5FbmNyeXB0ZWRWZXJpZmllckhhc2gsImhleCIpLHZlPXhk'@;
put 'LnJjNCh1ZShnZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpLF9lKTtRLnZhbGlkPXhkLm1kNSh2ZS5zbGljZSgwLDE2KSk9PUJ1ZmZlci5mcm9tKHZlLnNsaWNlKDE2KSkudG9TdHJpbmcoImhleCIpLHJlLkRhdGEuS2V5PWdlLFEuaW5zaXR1PWZ1bmN0aW9uIG9yKHksUCl7dmFyIEw9bmV3'@;
put 'IEFycmF5KDI1NiksUT0wLHJlPTAsZ2U9MCxfZT0wO2Z1bmN0aW9uIHZlKG50KXtmb3IoUT0wLHJlPTAsZ2U9MCxfZT0wLHJlPTA7MjU2IT1yZTsrK3JlKUxbcmVdPXJlO2ZvcihnZT0wLHJlPTA7MjU2IT1yZTsrK3JlKXt0cnl7Z2U9Z2UrTFtyZV0rbnRbcmUlbnQubGVuZ3RoXS5jaGFyQ29k'@;
put 'ZUF0KDApJjI1NX1jYXRjaChkdCl7dGhyb3cgY29uc29sZS5sb2cocmUsbnRbcmUlbnQubGVuZ3RoXSksZHR9X2U9TFtyZV0sTFtyZV09TFtnZV0sTFtnZV09X2V9cmU9Z2U9MH1mdW5jdGlvbiBTZShudCl7dmFyIGR0PUcobnQubGVuZ3RoKTtmb3IoUT0wO1EhPW50Lmxlbmd0aDsrK1EpX2U9'@;
put 'TFtyZT1yZSsxJjI1NV0sTFtyZV09TFtnZT0oZ2UrTFtyZV0pJTI1Nl0sTFtnZV09X2UsZHRbUV09bnRbUV1eTFtMW3JlXStMW2dlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShkdCl9dmFyIEhlPXkuS2V5LEJlPTA7dmUodWUoSGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEdl'@;
put 'PTA7cmV0dXJuIGZ1bmN0aW9uKG50KXtpZihHZStudC5sZW5ndGg8MTAyNClyZXR1cm4gR2UrPW50Lmxlbmd0aCxTZShudCk7dmFyIGN0PTAsYnQ9dWUobnQuc2xpY2UoY3QsY3QrKEN0PTEwMjQtR2UpKSk7Y3QrPUN0LEdlPTA7dmFyIEZ0PVNlKGJ0KTtmb3IoY3Q9PW50Lmxlbmd0aCYmKCsr'@;
put 'QmUsSGU9TzYoUCx5LlNhbHQsUjYoQmUpKSx2ZSh1ZShIZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7Y3Q8bnQubGVuZ3RoOyl7KytCZSxIZT1PNihQLHkuU2FsdCxSNihCZSkpLHZlKEJ1ZmZlci5mcm9tKEhlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBDdD1NYXRoLm1p'@;
put 'bigxMDI0LG50Lmxlbmd0aC1jdCk7YnQ9dWUobnQuc2xpY2UoY3QsY3QrQ3QpKSxjdCs9Q3QsR2U9Q3QsRnQ9QnVmZmVyLmNvbmNhdChbRnQsU2UoYnQpXSl9cmV0dXJuIEZ0fX0ocmUuRGF0YSxMLnBhc3N3b3JkKX19ZWxzZSBpZihyZS5EYXRhPWZ1bmN0aW9uIHZaKHksUCl7dmFyIEw9e30s'@;
put 'UT1MLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1HMCh5LDQpO2lmKFAtPTQsMiE9US5NaW5vcil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtaW5vciB2ZXJzaW9uIGNvZGU6ICIrUS5NaW5vcik7aWYoUS5NYWpvcj40fHxRLk1ham9yPDIpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6'@;
put 'ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAiK1EuTWFqb3IpO0wuRmxhZ3M9eS5yZWFkX3NoaWZ0KDQpLFAtPTQ7dmFyIHJlPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gUC09NCxMLkVuY3J5cHRpb25IZWFkZXI9STkoeSxyZSksTC5FbmNyeXB0aW9uVmVyaWZpZXI9Um0oeSxQLT1yZSksTH0oeSxQ'@;
put 'KSxyZS5EYXRhJiZyZS5EYXRhLkVuY3J5cHRpb25IZWFkZXImJjI2NjI1PT09cmUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLkFsZ0lEJiZMLnBhc3N3b3JkJiZ0eXBlb2YgcHI8InUiKXt2YXIgU2U9cHIoTC5wYXNzd29yZCxyZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5n'@;
put 'KCJoZXgiKSwiMDAwMDAwMDAiKSxIZT1yZS5EYXRhLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7NT09SGV8fEhlPFNlLmxlbmd0aCYmKFNlPVNlLnNsaWNlKDAsSGUpKTt2YXIgQmU9dWUocmUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXIudG9TdHJpbmcoImhleCIpK3Jl'@;
put 'LkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLEdlPXhkLnJjNChTZS50b1N0cmluZygiYmluYXJ5IiksQmUpO1EudmFsaWQ9ZWwoR2Uuc2xpY2UoMCxIZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PUdlLnNsaWNlKEhlKS50b1N0'@;
put 'cmluZygiaGV4IikscmUuRGF0YS5LZXk9U2UsUS52YWxpZCYmKFEuaW5zaXR1PWZ1bmN0aW9uIHpjKHksUCl7dmFyIEw9bmV3IEFycmF5KDI1NiksUT0wLHJlPTAsZ2U9MCxfZT0wLHZlPXkuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+MztmdW5jdGlvbiBTZShkdCl7Zm9yKGR0PUJ1ZmZl'@;
put 'ci5mcm9tKGR0LnNsaWNlKDAsdmUpKSxRPTAscmU9MCxnZT0wLF9lPTAscmU9MDsyNTYhPXJlOysrcmUpTFtyZV09cmU7Zm9yKGdlPTAscmU9MDsyNTYhPXJlOysrcmUpe3ZhciBDdD1kdFtyZSVkdC5sZW5ndGhdO2dlPWdlK0xbcmVdKygic3RyaW5nIj09dHlwZW9mIEN0P0N0LmNoYXJDb2Rl'@;
put 'QXQoMCk6Q3QpJjI1NSxfZT1MW3JlXSxMW3JlXT1MW2dlXSxMW2dlXT1fZX1yZT1nZT0wfWZ1bmN0aW9uIEhlKGR0KXt2YXIgQ3Q9RyhkdC5sZW5ndGgpO2ZvcihRPTA7USE9ZHQubGVuZ3RoOysrUSlfZT1MW3JlPXJlKzEmMjU1XSxMW3JlXT1MW2dlPShnZStMW3JlXSklMjU2XSxMW2dlXT1f'@;
put 'ZSxDdFtRXT1kdFtRXV5MW0xbcmVdK0xbZ2VdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKEN0KX12YXIgQmU9eS5LZXksR2U9MDtTZSh1ZShCZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgbnQ9MDtyZXR1cm4gZnVuY3Rpb24oZHQpe2lmKG50K2R0Lmxlbmd0aDwxMDI0KXJldHVy'@;
put 'biBudCs9ZHQubGVuZ3RoLEhlKGR0KTt2YXIgY3Q9MTAyNC1udCxidD0wLEZ0PUJ1ZmZlci5mcm9tKGR0LnNsaWNlKGJ0LGJ0K2N0KSk7YnQrPWN0LG50PTA7dmFyIGt0PUhlKEZ0KTtmb3IoYnQ9PWR0Lmxlbmd0aCYmKCsrR2UsQmU9cHIoUCx5LkVuY3J5cHRpb25WZXJpZmllci5TYWx0LFI2'@;
put 'KEdlKSksU2UoQnVmZmVyLmZyb20oQmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2J0PGR0Lmxlbmd0aDspKytHZSxCZT1wcihQLHkuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsUjYoR2UpKSxTZShCdWZmZXIuZnJvbShCZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSxjdD1NYXRo'@;
put 'Lm1pbigxMDI0LGR0Lmxlbmd0aC1idCksRnQ9QnVmZmVyLmZyb20oZHQuc2xpY2UoYnQsYnQrY3QpKSxidCs9Y3QsY3Q8MTAyNCYmKG50PWN0KSxrdD1CdWZmZXIuY29uY2F0KFtrdCxIZShGdCldKTtyZXR1cm4ga3R9fShyZS5EYXRhLEwucGFzc3dvcmQpKX1yZXR1cm4gcmV9KHksUC0yLEws'@;
put 'USk6ZnVuY3Rpb24gcEQoeSxQLEwsUSl7dmFyIHJlPXtrZXk6aGwoeSksdmVyaWZpY2F0aW9uQnl0ZXM6aGwoeSl9O0wucGFzc3dvcmQmJihyZS52ZXJpZmllcj1hQyhMLnBhc3N3b3JkKSksUS52YWxpZD1yZS52ZXJpZmljYXRpb25CeXRlcz09PXJlLnZlcmlmaWVyLFEudmFsaWQmJihRLmlu'@;
put 'c2l0dT1mdW5jdGlvbih5LFApe3ZhciBMPVB8fDAsUT1mRCh5KTtyZXR1cm4gZnVuY3Rpb24ocmUpe3ZhciBnZT1mdW5jdGlvbih5LFAsTCxRLHJlKXt2YXIgZ2UsX2U7Zm9yKHJlfHwocmU9UCksUXx8KFE9ZkQoIiIpKSxnZT0wO2dlIT1QLmxlbmd0aDsrK2dlKV9lPTI1NSYoKF9lPVBbZ2Vd'@;
put 'KT4+NXxfZTw8MykscmVbZ2VdPV9lXj1RW0xdLEw9TCsxJjE1O3JldHVybltyZSxMLFFdfSgwLHJlLEwsUSk7cmV0dXJuIEw9Z2VbMV0sZ2VbMF19fShMLnBhc3N3b3JkLDApKX0oeSwwLEwsUSksUX19LDQ5OntuOiJGb250IixmOmZ1bmN0aW9uIFB3KHksUCxMKXt2YXIgUT17c3o6eS5yZWFk'@;
put 'X3NoaWZ0KDIpLzIwfSxyZT1mNCh5KTtyZS5mQm9sZCYmKFEuYm9sZD0xKSxyZS5mSXRhbGljJiYoUS5pdGFsaWM9MSkscmUuZlVuZGVybGluZSYmKFEudW5kZXJsaW5lPTEpLHJlLmZDb25kZW5zZSYmKFEuY29uZGVuc2U9MSkscmUuZkV4dGVuZCYmKFEuZXh0ZW5kPTEpLHJlLmZTaGFkb3cm'@;
put 'JihRLnNoYWRvdz0xKSxyZS5mT3V0bGluZSYmKFEub3V0bGluZT0xKSxyZS5mU3RyaWtlb3V0JiYoUS5zdHJpa2U9MSk7dmFyIGdlPUwmJkwuYmlmZnx8ODtpZigyIT1nZSYmKFEuaWN2PXkucmVhZF9zaGlmdCgyKSwzIT1nZSYmNCE9Z2UpKXtzd2l0Y2goNzAwPT09eS5yZWFkX3NoaWZ0KDIp'@;
put 'JiYoUS5ib2xkPTEpLHkucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOlEudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOlEudmFsaWduPSJzdWIifXZhciB2ZT15LnJlYWRfc2hpZnQoMSk7MCE9dmUmJihRLnVuZGVybGluZT12ZSk7dmFyIFNlPXkucmVhZF9zaGlmdCgxKTtTZT4wJiYoUS5mYW1p'@;
put 'bHk9U2UpO3ZhciBIZT15LnJlYWRfc2hpZnQoMSk7SGU+MCYmKFEuY2hhcnNldD1IZSkseS5sKz0xfXJldHVybiBRLm5hbWU9RmQoeSwwLEwpLFF9fSw1MTp7bjoiUHJpbnRTaXplIixmOmhsfSw2MDp7bjoiQ29udGludWUifSw2MTp7bjoiV2luZG93MSIsZjpmdW5jdGlvbiBQbyh5KXtyZXR1'@;
put 'cm57UG9zOlt5LnJlYWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDIpXSxEaW06W3kucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoMildLEZsYWdzOnkucmVhZF9zaGlmdCgyKSxDdXJUYWI6eS5yZWFkX3NoaWZ0KDIpLEZpcnN0VGFiOnkucmVhZF9zaGlmdCgyKSxTZWxlY3RlZDp5LnJlYWRf'@;
put 'c2hpZnQoMiksVGFiUmF0aW86eS5yZWFkX3NoaWZ0KDIpfX19LDY0OntuOiJCYWNrdXAiLGY6U299LDY1OntuOiJQYW5lIixmOmZ1bmN0aW9uIGpUKHksUCxMKXtpZihMJiZMLmJpZmY8NSlyZXR1cm57fTt2YXIgUT17fTtyZXR1cm4gUS54PXkucmVhZF9zaGlmdCgyKSxRLnk9eS5yZWFkX3No'@;
put 'aWZ0KDIpLFEucndUb3A9eS5yZWFkX3NoaWZ0KDIpLFEuY29sTGVmdD15LnJlYWRfc2hpZnQoMiksUS5wbm5BY2N0PXkucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSksUX19LDY2OntuOiJDb2RlUGFnZSIsZjpobH0sNzc6e246IlBscyIsZjp5Y30sODA6e246IkRDb24ifSw4MTp7bjoi'@;
put 'RENvblJlZiJ9LDgyOntuOiJEQ29uTmFtZSJ9LDg1OntuOiJEZWZDb2xXaWR0aCIsZjpobH0sODk6e246IlhDVCJ9LDkwOntuOiJDUk4ifSw5MTp7bjoiRmlsZVNoYXJpbmcifSw5Mjp7bjoiV3JpdGVBY2Nlc3MiLGY6ZnVuY3Rpb24geW0oeSxQLEwpe2lmKEwuZW5jKXJldHVybiB5LmwrPVAs'@;
put 'IiI7dmFyIFE9eS5sLHJlPVYyKHksMCxMKTtyZXR1cm4geS5yZWFkX3NoaWZ0KFArUS15LmwpLHJlfX0sOTM6e246Ik9iaiIsZjpmdW5jdGlvbiBXdyh5LFAsTCl7aWYoTCYmTC5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIFhUKHksUCxMKXt5LmwrPTQ7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpLHJl'@;
put 'PXkucmVhZF9zaGlmdCgyKSxnZT15LnJlYWRfc2hpZnQoMik7eS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz02O3ZhciBfZT1bXTtyZXR1cm4gX2UucHVzaCgoTW1bUV18fHljKSh5LFAtPTM2LEwpKSx7Y21vOltyZSxR'@;
put 'LGdlXSxmdDpfZX19KHksUCxMKTt2YXIgUT1UNCh5KSxyZT1mdW5jdGlvbiBaMCh5LFAsTCl7Zm9yKHZhciBRPXkubCtQLHJlPVtdO3kubDxROyl7dmFyIGdlPXkucmVhZF9zaGlmdCgyKTt5LmwtPTI7dHJ5e3JlW2dlXT1ibVtnZV0oeSxRLXkubCl9Y2F0Y2h7cmV0dXJuIHkubD1RLHJlfX1y'@;
put 'ZXR1cm4geS5sIT1RJiYoeS5sPVEpLHJlfSh5LFAtMjIpO3JldHVybntjbW86USxmdDpyZX19fSw5NDp7bjoiVW5jYWxjZWQifSw5NTp7bjoiQ2FsY1NhdmVSZWNhbGMiLGY6U299LDk2OntuOiJUZW1wbGF0ZSJ9LDk3OntuOiJJbnRsIn0sOTk6e246Ik9ialByb3RlY3QiLGY6U299LDEyNTp7'@;
put 'bjoiQ29sSW5mbyIsZjpWZH0sMTI4OntuOiJHdXRzIixmOmZ1bmN0aW9uIGNaKHkpe3kubCs9NDt2YXIgUD1beS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCgyKV07aWYoMCE9PVBbMF0mJlBbMF0tLSwwIT09UFsxXSYmUFsxXS0tLFBbMF0+N3x8UFsxXT43KXRocm93IG5ldyBFcnJvcigi'@;
put 'QmFkIEd1dHRlcnM6ICIrUC5qb2luKCJ8IikpO3JldHVybiBQfX0sMTI5OntuOiJXc0Jvb2wiLGY6ZnVuY3Rpb24gX2EoeSxQLEwpe3ZhciBRPUwmJjg9PUwuYmlmZnx8Mj09UD95LnJlYWRfc2hpZnQoMik6KHkubCs9UCwwKTtyZXR1cm57ZkRpYWxvZzoxNiZRLGZCZWxvdzo2NCZRLGZSaWdo'@;
put 'dDoxMjgmUX19fSwxMzA6e246IkdyaWRTZXQiLGY6aGx9LDEzMTp7bjoiSENlbnRlciIsZjpTb30sMTMyOntuOiJWQ2VudGVyIixmOlNvfSwxMzM6e246IkJvdW5kU2hlZXQ4IixmOmZ1bmN0aW9uIEk0KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9MyZ5LnJlYWRfc2hpZnQoMSks'@;
put 'Z2U9eS5yZWFkX3NoaWZ0KDEpO3N3aXRjaChnZSl7Y2FzZSAwOmdlPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTpnZT0iTWFjcm9zaGVldCI7YnJlYWs7Y2FzZSAyOmdlPSJDaGFydHNoZWV0IjticmVhaztjYXNlIDY6Z2U9IlZCQU1vZHVsZSJ9dmFyIF9lPUZkKHksMCxMKTtyZXR1cm4gMD09'@;
put 'PV9lLmxlbmd0aCYmKF9lPSJTaGVldDEiKSx7cG9zOlEsaHM6cmUsZHQ6Z2UsbmFtZTpfZX19fSwxMzQ6e246IldyaXRlUHJvdGVjdCJ9LDE0MDp7bjoiQ291bnRyeSIsZjpmdW5jdGlvbiBlRCh5KXt2YXIgTCxQPVswLDBdO3JldHVybiBMPXkucmVhZF9zaGlmdCgyKSxQWzBdPWxtW0xdfHxM'@;
put 'LEw9eS5yZWFkX3NoaWZ0KDIpLFBbMV09bG1bTF18fEwsUH19LDE0MTp7bjoiSGlkZU9iaiIsZjpobH0sMTQ0OntuOiJTb3J0In0sMTQ2OntuOiJQYWxldHRlIixmOmZ1bmN0aW9uIEd3KHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoMiksTD1bXTtQLS0gPjA7KUwucHVzaChoOSh5KSk7cmV0'@;
put 'dXJuIEx9fSwxNTE6e246IlN5bmMifSwxNTI6e246IkxQciJ9LDE1Mzp7bjoiRHhHQ29sIn0sMTU0OntuOiJGbkdyb3VwTmFtZSJ9LDE1NTp7bjoiRmlsdGVyTW9kZSJ9LDE1Njp7bjoiQnVpbHRJbkZuR3JvdXBDb3VudCIsZjpobH0sMTU3OntuOiJBdXRvRmlsdGVySW5mbyJ9LDE1ODp7bjoi'@;
put 'QXV0b0ZpbHRlciJ9LDE2MDp7bjoiU2NsIixmOkt3fSwxNjE6e246IlNldHVwIixmOmZ1bmN0aW9uIEVtKHksUCl7dmFyIEw9e307cmV0dXJuIFA8MzJ8fCh5LmwrPTE2LEwuaGVhZGVyPW1hKHkpLEwuZm9vdGVyPW1hKHkpLHkubCs9MiksTH19LDE3NDp7bjoiU2Nlbk1hbiJ9LDE3NTp7bjoi'@;
put 'U0NFTkFSSU8ifSwxNzY6e246IlN4VmlldyJ9LDE3Nzp7bjoiU3h2ZCJ9LDE3ODp7bjoiU1hWSSJ9LDE4MDp7bjoiU3hJdmQifSwxODE6e246IlNYTEkifSwxODI6e246IlNYUEkifSwxODQ6e246IkRvY1JvdXRlIn0sMTg1OntuOiJSZWNpcE5hbWUifSwxODk6e246Ik11bFJrIixmOmZ1bmN0'@;
put 'aW9uIEZ3KHksUCl7Zm9yKHZhciBMPXkubCtQLTIsUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIpLGdlPVtdO3kubDxMOylnZS5wdXNoKGc5KHkpKTtpZih5LmwhPT1MKXRocm93IG5ldyBFcnJvcigiTXVsUksgcmVhZCBlcnJvciIpO3ZhciBfZT15LnJlYWRfc2hpZnQoMik7'@;
put 'aWYoZ2UubGVuZ3RoIT1fZS1yZSsxKXRocm93IG5ldyBFcnJvcigiTXVsUksgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6USxjOnJlLEM6X2UscmtyZWM6Z2V9fX0sMTkwOntuOiJNdWxCbGFuayIsZjpmdW5jdGlvbiBMNCh5LFApe2Zvcih2YXIgTD15LmwrUC0yLFE9eS5yZWFkX3NoaWZ0'@;
put 'KDIpLHJlPXkucmVhZF9zaGlmdCgyKSxnZT1bXTt5Lmw8TDspZ2UucHVzaCh5LnJlYWRfc2hpZnQoMikpO2lmKHkubCE9PUwpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIF9lPXkucmVhZF9zaGlmdCgyKTtpZihnZS5sZW5ndGghPV9lLXJlKzEpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpRLGM6cmUsQzpfZSxpeGZlOmdlfX19LDE5Mzp7bjoiTW1zIixmOlBkfSwxOTc6e246IlNYREkifSwxOTg6e246IlNYREIifSwxOTk6e246IlNYRkRCIn0sMjAwOntuOiJTWERCQiJ9LDIwMTp7bjoiU1hOdW0ifSwy'@;
put 'MDI6e246IlN4Qm9vbCIsZjpTb30sMjAzOntuOiJTeEVyciJ9LDIwNDp7bjoiU1hJbnQifSwyMDU6e246IlNYU3RyaW5nIn0sMjA2OntuOiJTWER0ciJ9LDIwNzp7bjoiU3hOaWwifSwyMDg6e246IlNYVGJsIn0sMjA5OntuOiJTWFRCUkdJSVRNIn0sMjEwOntuOiJTeFRicGcifSwyMTE6e246'@;
put 'Ik9iUHJvaiJ9LDIxMzp7bjoiU1hTdHJlYW1JRCJ9LDIxNTp7bjoiREJDZWxsIn0sMjE2OntuOiJTWFJuZyJ9LDIxNzp7bjoiU3hJc3hvcGVyIn0sMjE4OntuOiJCb29rQm9vbCIsZjpobH0sMjIwOntuOiJEYk9yUGFyYW1RcnkifSwyMjE6e246IlNjZW5hcmlvUHJvdGVjdCIsZjpTb30sMjIy'@;
put 'OntuOiJPbGVPYmplY3RTaXplIn0sMjI0OntuOiJYRiIsZjpmdW5jdGlvbiBiOSh5LFAsTCl7dmFyIFE9e307cmV0dXJuIFEuaWZudD15LnJlYWRfc2hpZnQoMiksUS5udW1GbXRJZD15LnJlYWRfc2hpZnQoMiksUS5mbGFncz15LnJlYWRfc2hpZnQoMiksUS5mU3R5bGU9US5mbGFncz4+MiYx'@;
put 'LFEuZGF0YT1mdW5jdGlvbiBOMSh5LFAsTCxRKXt2YXIgcmU9e30sZ2U9eS5yZWFkX3NoaWZ0KDQpLF9lPXkucmVhZF9zaGlmdCg0KSx2ZT15LnJlYWRfc2hpZnQoNCksU2U9eS5yZWFkX3NoaWZ0KDIpO2lmKHJlLnBhdHRlcm5UeXBlPXZpW3ZlPj4yNl0sIVEuY2VsbFN0eWxlcylyZXR1cm4g'@;
put 'cmU7dmFyIEhlPTcmZ2U7c3dpdGNoKEhlKXtjYXNlIDE6cmUuaGFsaWduPSJsZWZ0IjticmVhaztjYXNlIDI6cmUuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzpyZS5oYWxpZ249InJpZ2h0In1zd2l0Y2gocmUuZldyYXA9Z2U+PjMmMSxIZT1nZT4+NCY3KXtjYXNlIDA6cmUudmFsaWdu'@;
put 'PSJ0b3AiO2JyZWFrO2Nhc2UgMTpyZS52YWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAyOnJlLnZhbGlnbj0iYm90dG9tIn1yZXR1cm4gcmUuZkp1c3RMYXN0PWdlPj43JjEscmUudHJvdD1nZT4+OCYyNTUscmUuY0luZGVudD1nZT4+MTYmMTUscmUuZlNocmlua1RvRml0PWdlPj4yMCYxLHJl'@;
put 'LmlSZWFkT3JkZXI9Z2U+PjIyJjIscmUuZkF0ck51bT1nZT4+MjYmMSxyZS5mQXRyRm50PWdlPj4yNyYxLHJlLmZBdHJBbGM9Z2U+PjI4JjEscmUuZkF0ckJkcj1nZT4+MjkmMSxyZS5mQXRyUGF0PWdlPj4zMCYxLHJlLmZBdHJQcm90PWdlPj4zMSYxLHJlLmRnTGVmdD0xNSZfZSxyZS5kZ1Jp'@;
put 'Z2h0PV9lPj40JjE1LHJlLmRnVG9wPV9lPj44JjE1LHJlLmRnQm90dG9tPV9lPj4xMiYxNSxyZS5pY3ZMZWZ0PV9lPj4xNiYxMjcscmUuaWN2UmlnaHQ9X2U+PjIzJjEyNyxyZS5ncmJpdERpYWc9X2U+PjMwJjMscmUuaWN2VG9wPTEyNyZ2ZSxyZS5pY3ZCb3R0b209dmU+PjcmMTI3LHJlLmlj'@;
put 'dkRpYWc9dmU+PjE0JjEyNyxyZS5kZ0RpYWc9dmU+PjIxJjE1LHJlLmljdkZvcmU9MTI3JlNlLHJlLmljdkJhY2s9U2U+PjcmMTI3LHJlLmZzeEJ1dHRvbj1TZT4+MTQmMSxyZX0oeSwwLDAsTCksUX19LDIyNTp7bjoiSW50ZXJmYWNlSGRyIixmOmZ1bmN0aW9uIGgwKHksUCl7cmV0dXJuIDA9'@;
put 'PT1QfHx5LnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7bjoiSW50ZXJmYWNlRW5kIixmOlBkfSwyMjc6e246IlNYVlMifSwyMjk6e246Ik1lcmdlQ2VsbHMiLGY6ZnVuY3Rpb24gWncoeSxQKXtmb3IodmFyIEw9W10sUT15LnJlYWRfc2hpZnQoMik7US0tOylMLnB1c2goS2goeSkpO3JldHVy'@;
put 'biBMfX0sMjMzOntuOiJCa0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2OntuOiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4UnVsZSJ9LDI0MTp7bjoiU1hFeCJ9LDI0Mjp7bjoiU3hG'@;
put 'aWx0In0sMjQ0OntuOiJTeERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7bjoiU1NUIixmOmZ1bmN0aW9uIEhsKHksUCl7Zm9yKHZh'@;
put 'ciBMPXkubCtQLFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXkucmVhZF9zaGlmdCg0KSxnZT1bXSxfZT0wO19lIT1yZSYmeS5sPEw7KytfZSlnZS5wdXNoKGdtKHkpKTtyZXR1cm4gZ2UuQ291bnQ9USxnZS5VbmlxdWU9cmUsZ2V9fSwyNTM6e246IkxhYmVsU3N0IixmOmZ1bmN0aW9uIFVUKHkpe3Zh'@;
put 'ciBQPUx1KHkpO3JldHVybiBQLmlzc3Q9eS5yZWFkX3NoaWZ0KDQpLFB9fSwyNTU6e246IkV4dFNTVCIsZjpmdW5jdGlvbiBrZSh5LFApe3ZhciBMPXt9O3JldHVybiBMLmRzc3Q9eS5yZWFkX3NoaWZ0KDIpLHkubCs9UC0yLEx9fSwyNTY6e246IlNYVkRFeCJ9LDI1OTp7bjoiU1hGb3JtdWxh'@;
put 'In0sMjkwOntuOiJTWERCRXgifSwzMTE6e246IlJSREluc0RlbCJ9LDMxMjp7bjoiUlJESGVhZCJ9LDMxNTp7bjoiUlJEQ2hnQ2VsbCJ9LDMxNzp7bjoiUlJUYWJJZCIsZjpIMX0sMzE4OntuOiJSUkRSZW5TaGVldCJ9LDMxOTp7bjoiUlJTb3J0In0sMzIwOntuOiJSUkRNb3ZlIn0sMzMwOntu'@;
put 'OiJSUkZvcm1hdCJ9LDMzMTp7bjoiUlJBdXRvRm10In0sMzMzOntuOiJSUkluc2VydFNoIn0sMzM0OntuOiJSUkRNb3ZlQmVnaW4ifSwzMzU6e246IlJSRE1vdmVFbmQifSwzMzY6e246IlJSREluc0RlbEJlZ2luIn0sMzM3OntuOiJSUkRJbnNEZWxFbmQifSwzMzg6e246IlJSRENvbmZsaWN0'@;
put 'In0sMzM5OntuOiJSUkREZWZOYW1lIn0sMzQwOntuOiJSUkRSc3RFdHhwIn0sMzUxOntuOiJMUm5nIn0sMzUyOntuOiJVc2VzRUxGcyIsZjpTb30sMzUzOntuOiJEU0YiLGY6UGR9LDQwMTp7bjoiQ1VzciJ9LDQwMjp7bjoiQ2JVc3IifSw0MDM6e246IlVzckluZm8ifSw0MDQ6e246IlVzckV4'@;
put 'Y2wifSw0MDU6e246IkZpbGVMb2NrIn0sNDA2OntuOiJSUkRJbmZvIn0sNDA3OntuOiJCQ1VzcnMifSw0MDg6e246IlVzckNoayJ9LDQyNTp7bjoiVXNlckJWaWV3In0sNDI2OntuOiJVc2VyU1ZpZXdCZWdpbiJ9LDQyNzp7bjoiVXNlclNWaWV3RW5kIn0sNDI4OntuOiJSUkRVc2VyVmlldyJ9'@;
put 'LDQyOTp7bjoiUXNpIn0sNDMwOntuOiJTdXBCb29rIixmOmZ1bmN0aW9uIHFUKHksUCxMKXt2YXIgUT15LmwrUCxyZT15LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFkX3NoaWZ0KDIpO2lmKEwuc2JjY2g9Z2UsMTAyNT09Z2V8fDE0ODQ5PT1nZSlyZXR1cm5bZ2UscmVdO2lmKGdlPDF8fGdlPjI1'@;
put 'NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK2dlKTtmb3IodmFyIF9lPUhkKHksZ2UpLHZlPVtdO1E+eS5sOyl2ZS5wdXNoKE4yKHkpKTtyZXR1cm5bZ2UscmUsX2UsdmVdfX0sNDMxOntuOiJQcm90NFJldiIsZjpTb30sNDMyOntuOiJDb25kRm10In0sNDMz'@;
put 'OntuOiJDRiJ9LDQzNDp7bjoiRFZhbCJ9LDQzNzp7bjoiRENvbkJpbiJ9LDQzODp7bjoiVHhPIixmOmZ1bmN0aW9uIEpUKHksUCxMKXt2YXIgUT15LmwscmU9IiIsZ2U9LTE7dHJ5e3kubCs9NCwtMT09WzAsNSw3LDExLDEyLDE0XS5pbmRleE9mKChMLmxhc3RvYmp8fHtjbW86WzAsMF19KS5j'@;
put 'bW9bMV0pP3kubCs9NjpmdW5jdGlvbiBEdSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7eS5sKys7dmFyIEw9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mn0oeSk7dmFyIFNlPXkucmVhZF9zaGlmdCgyKTt5LnJlYWRfc2hpZnQoMiksZ2U9eS5yZWFkX3NoaWZ0KDIpO3ZhciBCZT15LnJlYWRfc2hp'@;
put 'ZnQoMik7eS5sKz1CZTtmb3IodmFyIEdlPTE7R2U8eS5sZW5zLmxlbmd0aC0xOysrR2Upe2lmKHkubC1RIT15LmxlbnNbR2VdKXRocm93IG5ldyBFcnJvcigiVHhPOiBiYWQgY29udGludWUgcmVjb3JkIik7dmFyIG50PXlbeS5sXTtpZigocmUrPUhkKHkseS5sZW5zW0dlKzFdLXkubGVuc1tH'@;
put 'ZV0tMSkpLmxlbmd0aD49KG50P1NlOjIqU2UpKWJyZWFrfWlmKHJlLmxlbmd0aCE9PVNlJiZyZS5sZW5ndGghPT0yKlNlKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitTZSsiICE9ICIrcmUubGVuZ3RoKTtyZXR1cm4geS5sPVErUCx7dDpyZSxpZm50OmdlfX1jYXRjaHtyZXR1cm4geS5s'@;
put 'PVErUCx7dDpyZSxpZm50OmdlfX19fSw0Mzk6e246IlJlZnJlc2hBbGwiLGY6U299LDQ0MDp7bjoiSExpbmsiLGY6ZnVuY3Rpb24gZXUoeSxQKXt2YXIgTD1LaCh5KTt5LmwrPTE2O3ZhciBRPWZ1bmN0aW9uIEl1KHksUCl7dmFyIEw9eS5sK1AsUT15LnJlYWRfc2hpZnQoNCk7aWYoMiE9PVEp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIitRKTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9Mjt2YXIgZ2UsX2UsdmUsU2UsQmUsR2UsSGU9IiI7MTYmcmUmJihnZT1BNCh5KSksMTI4JnJlJiYoX2U9QTQoeSkpLDI1Nz09KDI1NyZyZSkmJih2ZT1B'@;
put 'NCh5KSksMT09KDI1NyZyZSkmJihTZT1mdW5jdGlvbiB2Myh5LFApe3ZhciBMPXkucmVhZF9zaGlmdCgxNik7c3dpdGNoKEwpe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBtMyh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCksTD15LmwsUT0h'@;
put 'MTtQPjI0JiYoeS5sKz1QLTI0LCI3OTU4ODFmNDNiMWQ3ZjQ4YWYyYzgyNWRjNDg1Mjc2MyI9PT15LnJlYWRfc2hpZnQoMTYpJiYoUT0hMCkseS5sPUwpO3ZhciByZT15LnJlYWRfc2hpZnQoKFE/UC0yNDpQKT4+MSwidXRmMTZsZSIpLnJlcGxhY2UodiwiIik7cmV0dXJuIFEmJih5LmwrPTI0'@;
put 'KSxyZX0oeSk7Y2FzZSIwMzAzMDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIGZsKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoMiksTD0iIjtQLS0gPjA7KUwrPSIuLi8iO3ZhciBRPXkucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIik7aWYoeS5sKz0yLDU3'@;
put 'MDA1IT15LnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09eS5yZWFkX3NoaWZ0KDQpKXJldHVybiBMK1EucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBnZT15LnJlYWRfc2hpZnQoNCk7aWYoMyE9eS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBF'@;
put 'cnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIEwreS5yZWFkX3NoaWZ0KGdlPj4xLCJ1dGYxNmxlIikucmVwbGFjZSh2LCIiKX0oeSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIitMKX19KHkpKSw4JnJlJiYoSGU9QTQoeSkpLDMyJnJlJiYoQmU9'@;
put 'eS5yZWFkX3NoaWZ0KDE2KSksNjQmcmUmJihHZT1TYyh5KSkseS5sPUw7dmFyIG50PV9lfHx2ZXx8U2V8fCIiO250JiZIZSYmKG50Kz0iIyIrSGUpLG50fHwobnQ9IiMiK0hlKSwyJnJlJiYiLyI9PW50LmNoYXJBdCgwKSYmIi8iIT1udC5jaGFyQXQoMSkmJihudD0iZmlsZTovLyIrbnQpO3Zh'@;
put 'ciBkdD17VGFyZ2V0Om50fTtyZXR1cm4gQmUmJihkdC5ndWlkPUJlKSxHZSYmKGR0LnRpbWU9R2UpLGdlJiYoZHQuVG9vbHRpcD1nZSksZHR9KHksUC0yNCk7cmV0dXJuW0wsUV19fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6TjJ9LDQ0Mzp7bjoiU1hGREJUeXBlIn0sNDQ0'@;
put 'OntuOiJQcm90NFJldlBhc3MiLGY6aGx9LDQ0NTp7bjoiT2JOb01hY3JvcyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6UGR9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gZjAoeSl7cmV0dXJuIHkucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoNCl9LHI6Mn0s'@;
put 'NDUwOntuOiJFbnRFeFUyIixmOlBkfSw1MTI6e246IkRpbWVuc2lvbnMiLGY6QnR9LDUxMzp7bjoiQmxhbmsiLGY6cXd9LDUxNTp7bjoiTnVtYmVyIixmOmZ1bmN0aW9uIE53KHksUCxMKXtMLmJpZmZndWVzcyYmMj09TC5iaWZmJiYoTC5iaWZmPTUpO3ZhciBRPUx1KHkpLHJlPW1hKHkpO3Jl'@;
put 'dHVybiBRLnZhbD1yZSxRfX0sNTE2OntuOiJMYWJlbCIsZjpmdW5jdGlvbiBZVCh5LFAsTCl7TC5iaWZmZ3Vlc3MmJjI9PUwuYmlmZiYmKEwuYmlmZj01KTt2YXIgcmU9THUoeSk7Mj09TC5iaWZmJiZ5LmwrKzt2YXIgZ2U9TjIoeSwwLEwpO3JldHVybiByZS52YWw9Z2UscmV9fSw1MTc6e246'@;
put 'IkJvb2xFcnIiLGY6VmN9LDUxOTp7bjoiU3RyaW5nIixmOmlEfSw1MjA6e246IlJvdyIsZjpmdW5jdGlvbiAkZSh5KXt2YXIgUD17fTtQLnI9eS5yZWFkX3NoaWZ0KDIpLFAuYz15LnJlYWRfc2hpZnQoMiksUC5jbnQ9eS5yZWFkX3NoaWZ0KDIpLVAuYzt2YXIgTD15LnJlYWRfc2hpZnQoMik7'@;
put 'eS5sKz00O3ZhciBRPXkucmVhZF9zaGlmdCgxKTt5LmwrPTE7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gUC5peGZlPTQwOTUmcmUsNyZRJiYoUC5sZXZlbD03JlEpLDMyJlEmJihQLmhpZGRlbj0hMCksNjQmUSYmKFAuaHB0PUwvMjApLFB9fSw1MjM6e246IkluZGV4In0sNTQ1Ontu'@;
put 'OiJBcnJheSIsZjpqd30sNTQ5OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOlcwfSw1NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cyIixmOmZ1bmN0aW9uIGxaKHksUCxMKXtpZihMJiZMLmJpZmY+PTImJkwuYmlmZjw1KXJldHVybnt9O3ZhciBRPXkucmVhZF9zaGlmdCgyKTtyZXR1cm57'@;
put 'UlRMOjY0JlEsZ3JpZDohISgyJlEpLGZyb3plbjohISg4JlEpfX19LDYzODp7bjoiUksiLGY6ZnVuY3Rpb24gTWMoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpLFE9ZzkoeSk7cmV0dXJue3I6UCxjOkwsaXhmZTpRWzBdLHJrbnVtOlFbMV19fX0sNjU5OntuOiJT'@;
put 'dHlsZSIsZjpmdW5jdGlvbiAkVCh5LFAsTCl7cmV0dXJuIHkubCs9UCx7fX19LDEwNDg6e246IkJpZ05hbWUifSwxMDU0OntuOiJGb3JtYXQiLGY6ZnVuY3Rpb24gR1QoeSxQLEwpe3JldHVyblt5LnJlYWRfc2hpZnQoMiksVjIoeSwwLEwpXX19LDEwODQ6e246IkNvbnRpbnVlQmlnTmFtZSJ9'@;
put 'LDEyMTI6e246IlNockZtbGEiLGY6ZnVuY3Rpb24gQzkoeSxQLEwpe3ZhciBRPV9tKHkpO3kubCsrO3ZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuW2k1KHksUC09OCxMKSxyZSxRXX19LDIwNDg6e246IkhMaW5rVG9vbHRpcCIsZjpmdW5jdGlvbiBRYSh5LFApe3kucmVhZF9zaGlmdCgy'@;
put 'KTt2YXIgTD1LaCh5KSxRPXkucmVhZF9zaGlmdCgoUC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW0wsUT1RLnJlcGxhY2UodiwiIildfX0sMjA0OTp7bjoiV2ViUHViIn0sMjA1MDp7bjoiUXNpU1hUYWcifSwyMDUxOntuOiJEQlF1ZXJ5RXh0In0sMjA1Mjp7bjoiRXh0U3RyaW5nIn0sMjA1'@;
put 'Mzp7bjoiVHh0UXJ5In0sMjA1NDp7bjoiUXNpciJ9LDIwNTU6e246IlFzaWYifSwyMDU2OntuOiJSUkRUUVNJRiJ9LDIwNTc6e246IkJPRiIsZjpSdX0sMjA1ODp7bjoiT2xlRGJDb25uIn0sMjA1OTp7bjoiV09wdCJ9LDIwNjA6e246IlNYVmlld0V4In0sMjA2MTp7bjoiU1hUSCJ9LDIwNjI6'@;
put 'e246IlNYUElFeCJ9LDIwNjM6e246IlNYVkRURXgifSwyMDY0OntuOiJTWFZpZXdFeDkifSwyMDY2OntuOiJDb250aW51ZUZydCJ9LDIwNjc6e246IlJlYWxUaW1lRGF0YSJ9LDIxMjg6e246IkNoYXJ0RnJ0SW5mbyJ9LDIxMjk6e246IkZydFdyYXBwZXIifSwyMTMwOntuOiJTdGFydEJsb2Nr'@;
put 'In0sMjEzMTp7bjoiRW5kQmxvY2sifSwyMTMyOntuOiJTdGFydE9iamVjdCJ9LDIxMzM6e246IkVuZE9iamVjdCJ9LDIxMzQ6e246IkNhdExhYiJ9LDIxMzU6e246IllNdWx0In0sMjEzNjp7bjoiU1hWaWV3TGluayJ9LDIxMzc6e246IlBpdm90Q2hhcnRCaXRzIn0sMjEzODp7bjoiRnJ0Rm9u'@;
put 'dExpc3QifSwyMTQ2OntuOiJTaGVldEV4dCJ9LDIxNDc6e246IkJvb2tFeHQiLHI6MTJ9LDIxNDg6e246IlNYQWRkbCJ9LDIxNDk6e246IkNyRXJyIn0sMjE1MDp7bjoiSEZQaWN0dXJlIn0sMjE1MTp7bjoiRmVhdEhkciIsZjpQZH0sMjE1Mjp7bjoiRmVhdCJ9LDIxNTQ6e246IkRhdGFMYWJF'@;
put 'eHQifSwyMTU1OntuOiJEYXRhTGFiRXh0Q29udGVudHMifSwyMTU2OntuOiJDZWxsV2F0Y2gifSwyMTYxOntuOiJGZWF0SGRyMTEifSwyMTYyOntuOiJGZWF0dXJlMTEifSwyMTY0OntuOiJEcm9wRG93bk9iaklkcyJ9LDIxNjU6e246IkNvbnRpbnVlRnJ0MTEifSwyMTY2OntuOiJEQ29ubiJ9'@;
put 'LDIxNjc6e246Ikxpc3QxMiJ9LDIxNjg6e246IkZlYXR1cmUxMiJ9LDIxNjk6e246IkNvbmRGbXQxMiJ9LDIxNzA6e246IkNGMTIifSwyMTcxOntuOiJDRkV4In0sMjE3Mjp7bjoiWEZDUkMiLGY6ZnVuY3Rpb24geG0oeSl7eS5sKz0yO3ZhciBQPXtjeGZzOjAsY3JjOjB9O3JldHVybiBQLmN4'@;
put 'ZnM9eS5yZWFkX3NoaWZ0KDIpLFAuY3JjPXkucmVhZF9zaGlmdCg0KSxQfSxyOjEyfSwyMTczOntuOiJYRkV4dCIsZjpmdW5jdGlvbiB6RCh5LFApe3kubCs9Mjt2YXIgUT15LnJlYWRfc2hpZnQoMik7eS5sKz0yO2Zvcih2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpLGdlPVtdO3JlLS0gPjA7KWdl'@;
put 'LnB1c2goakQoeSkpO3JldHVybntpeGZlOlEsZXh0OmdlfX0scjoxMn0sMjE3NDp7bjoiQXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9'@;
put 'LDIxODQ6e246Ik1EWFByb3AifSwyMTg1OntuOiJNRFhLUEkifSwyMTg2OntuOiJNREIifSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjpTbyxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIx'@;
put 'OTI6e246IlRhYmxlU3R5bGVFbGVtZW50In0sMjE5NDp7bjoiU3R5bGVFeHQifSwyMTk1OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gQncoeSxQLEwpe2lmKCEoTC5iaWZmPDgpKXt2YXIgUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIp'@;
put 'O3JldHVybltIZCh5LFEsTCksSGQoeSxyZSxMKV19eS5sKz1QfSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1bmN0aW9uICRtKHksUCxMKXt2YXIgUT15LmwrUDtpZigxMjQyMjYhPT15LnJlYWRfc2hpZnQoNCkpe2lmKCFMLmNlbGxTdHlsZXMpcmV0dXJu'@;
put 'IHZvaWQoeS5sPVEpO3ZhciBfZSxnZT15LnNsaWNlKHkubCk7eS5sPVE7dHJ5e19lPXhuKGdlLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59dmFyIHZlPVF0KF9lLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYodmUpcmV0dXJuIEdtKHZlLEwpfX0scjoxMn0sMjE5OTp7bjoi'@;
put 'R1VJRFR5cGVMaWIifSwyMjAwOntuOiJGbkdycDEyIn0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5jdGlvbiB6dyh5KXtyZXR1cm5bMCE9PXkucmVhZF9zaGlmdCg0KSwwIT09eS5yZWFkX3NoaWZ0KDQpLHkucmVhZF9zaGlmdCg0KV19LHI6MTJ9'@;
put 'LDIyMDM6e246IkNvbXByZXNzUGljdHVyZXMiLGY6UGR9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIwNjp7bjoiQ3J0TWxGcnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoiRm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVu'@;
put 'Y3Rpb24gTHQoeSl7dmFyIFA9ZnVuY3Rpb24gZjkoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTgse3R5cGU6UCxmbGFnczpMfX0oeSk7aWYoMjIxMSE9UC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIr'@;
put 'UC50eXBlKTtyZXR1cm4gMCE9PXkucmVhZF9zaGlmdCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNTdHJlYW0ifSwyMjE0OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEyQSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7'@;
put 'bjoiQ2hhcnQifSw0MDk5OntuOiJTZXJpZXMifSw0MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1hcmtlckZvcm1hdCJ9LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQifSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0s'@;
put 'NDEwOTp7bjoiU2VyaWVzVGV4dCJ9LDQxMTY6e246IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9LDQxMTk6e246IkJhciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntuOiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9'@;
put 'LDQxMjQ6e246IkNydExpbmUifSw0MTI1OntuOiJBeGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJDYXRTZXJSYW5nZSJ9LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQxMzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7'@;
put 'bjoiVGV4dCJ9LDQxMzQ6e246IkZvbnRYIixmOmhsfSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdpbiJ9LDQxNDg6e246IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQzZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3Ontu'@;
put 'OiJEcm9wQmFyIn0sNDE1ODp7bjoiUmFkYXIifSw0MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVudCJ9LDQxNjM6e246IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1bmN0aW9uIEFtKHksUCxMKXt2YXIgUT17YXJl'@;
put 'YTohMX07aWYoNSE9TC5iaWZmKXJldHVybiB5LmwrPVAsUTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiB5LmwrPTMsMTYmcmUmJihRLmFyZWE9ITApLFF9fSw0MTY1OntuOiJTZXJUb0NydCJ9LDQxNjY6e246IkF4ZXNVc2VkIn0sNDE2ODp7bjoiU0Jhc2VSZWYifSw0MTcwOntuOiJT'@;
put 'ZXJQYXJlbnQifSw0MTcxOntuOiJTZXJBdXhUcmVuZCJ9LDQxNzQ6e246IklGbXRSZWNvcmQifSw0MTc1OntuOiJQb3MifSw0MTc2OntuOiJBbFJ1bnMifSw0MTc3OntuOiJCUkFJIn0sNDE4Nzp7bjoiU2VyQXV4RXJyQmFyIn0sNDE4ODp7bjoiQ2xydENsaWVudCIsZjpmdW5jdGlvbiBuRCh5'@;
put 'KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9W107UC0tID4wOylMLnB1c2goaDkoeSkpO3JldHVybiBMfX0sNDE4OTp7bjoiU2VyRm10In0sNDE5MTp7bjoiQ2hhcnQzREJhclNoYXBlIn0sNDE5Mjp7bjoiRmJpIn0sNDE5Mzp7bjoiQm9wUG9wIn0sNDE5NDp7bjoiQXhjRXh0In0sNDE5'@;
put 'NTp7bjoiRGF0In0sNDE5Njp7bjoiUGxvdEdyb3d0aCJ9LDQxOTc6e246IlNJSW5kZXgifSw0MTk4OntuOiJHZWxGcmFtZSJ9LDQxOTk6e246IkJvcFBvcEN1c3RvbSJ9LDQyMDA6e246IkZiaTIifSwwOntuOiJEaW1lbnNpb25zIixmOkJ0fSwxOntuOiJCSUZGMkJMQU5LIn0sMjp7bjoiQklG'@;
put 'RjJJTlQiLGY6ZnVuY3Rpb24gc0QoeSl7dmFyIFA9THUoeSk7Kyt5Lmw7dmFyIEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBQLnQ9Im4iLFAudmFsPUwsUH19LDM6e246IkJJRkYyTlVNIixmOmZ1bmN0aW9uIHg5KHkpe3ZhciBQPUx1KHkpOysreS5sO3ZhciBMPW1hKHkpO3JldHVybiBQLnQ9'@;
put 'Im4iLFAudmFsPUwsUH19LDQ6e246IkJJRkYyU1RSIixmOmZ1bmN0aW9uIHVaKHksUCxMKXtMLmJpZmZndWVzcyYmNT09TC5iaWZmJiYoTC5iaWZmPTIpO3ZhciBRPUx1KHkpOysreS5sO3ZhciByZT1WMih5LDAsTCk7cmV0dXJuIFEudD0ic3RyIixRLnZhbD1yZSxRfX0sNTp7bjoiQm9vbEVy'@;
put 'ciIsZjpWY30sNzp7bjoiU3RyaW5nIixmOmZ1bmN0aW9uIGhaKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PVA/KHkubCsrLCIiKTp5LnJlYWRfc2hpZnQoUCwic2Jjcy1jb250Iil9fSw4OntuOiJCSUZGMlJPVyJ9LDk6e246IkJPRiIsZjpSdX0sMTE6e246IkluZGV4In0s'@;
put 'MjI6e246IkV4dGVybkNvdW50IixmOmhsfSwzMDp7bjoiQklGRjJGT1JNQVQiLGY6VHN9LDMxOntuOiJCSUZGMkZNVENOVCJ9LDMyOntuOiJCSUZGMkNPTElORk8ifSwzMzp7bjoiQXJyYXkiLGY6and9LDM2OntuOiJDT0xXSURUSCJ9LDM3OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOlcwfSw1'@;
put 'MDp7bjoiQklGRjJGT05UWFRSQSIsZjpmdW5jdGlvbiBmWih5LFApe3kubCs9Nix5LmwrPTIseS5sKz0xLHkubCs9Myx5LmwrPTEseS5sKz1QLTEzfX0sNjI6e246IkJJRkYyV0lORE9XMiJ9LDUyOntuOiJEREVPYmpOYW1lIn0sNjc6e246IkJJRkYyWEYifSw2ODp7bjoiQklGRjJYRklOREVY'@;
put 'IixmOmhsfSw2OTp7bjoiQklGRjJGT05UQ0xSIn0sODY6e246IkJJRkY0Rk1UQ05UIn0sMTI2OntuOiJSSyJ9LDEyNzp7bjoiSW1EYXRhIixmOmZ1bmN0aW9uIG9EKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKSxMPXkucmVhZF9zaGlmdCgyKSxRPXkucmVhZF9zaGlmdCg0KSxyZT17Zm10OlAs'@;
put 'ZW52OkwsbGVuOlEsZGF0YTp5LnNsaWNlKHkubCx5LmwrUSl9O3JldHVybiB5LmwrPVEscmV9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6e246IlB1YiJ9LDE0NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhOR3JhcGgifSwxNTA6e246IlNvdW5k'@;
put 'In0sMTY5OntuOiJDb29yZExpc3QifSwxNzE6e246IkdDVyJ9LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJhckVuZCJ9LDE5NDp7bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0cmluZyIsZjpmdW5jdGlvbiBYdyh5'@;
put 'LFAsTCl7dmFyIFE9eS5sK1AscmU9THUoeSksZ2U9eS5yZWFkX3NoaWZ0KDIpLF9lPUhkKHksZ2UsTCk7cmV0dXJuIHkubD1RLHJlLnQ9InN0ciIscmUudmFsPV9lLHJlfX0sMjIzOntuOiJVRERlc2MifSwyMzQ6e246IlRhYklkQ29uZiJ9LDM1NDp7bjoiWEw1TW9kaWZ5In0sNDIxOntuOiJG'@;
put 'aWxlU2hhcmluZzIifSw1MTg6e246IkZvcm11bGEiLGY6ejN9LDUyMTp7bjoiQk9GIixmOlJ1fSw1MzY6e246IkxibCIsZjpWd30sNTQ3OntuOiJFeHRlcm5OYW1lIixmOnk5fSw1NjE6e246IkZvbnQifSw1Nzk6e246IkJJRkYzWEYifSwxMDMwOntuOiJGb3JtdWxhIixmOnozfSwxMDMzOntu'@;
put 'OiJCT0YiLGY6UnV9LDEwOTE6e246IkJJRkY0WEYifSwyMTU3OntuOiJGZWF0SW5mbyJ9LDIxNjM6e246IkZlYXRJbmZvMTEifSwyMTc3OntuOiJTWEFkZGwxMiJ9LDIyNDA6e246IkF1dG9XZWJQdWIifSwyMjQxOntuOiJMaXN0T2JqIn0sMjI0Mjp7bjoiTGlzdEZpZWxkIn0sMjI0Mzp7bjoi'@;
put 'TGlzdERWIn0sMjI0NDp7bjoiTGlzdENvbmRGbXQifSwyMjQ1OntuOiJMaXN0Q0YifSwyMjQ2OntuOiJGTVFyeSJ9LDIyNDc6e246IkZNU1FyeSJ9LDIyNDg6e246IlBMViJ9LDIyNDk6e246IkxuRXh0In0sMjI1MDp7bjoiTWtyRXh0In0sMjI1MTp7bjoiQ3J0Q29vcHQifSwyMjYyOntuOiJG'@;
put 'UlRBcmNoSWQkIixyOjEyfSwyOTI4Mjp7fX0sU009UGUoWDAsIm4iKTtmdW5jdGlvbiBTaSh5LFAsTCxRKXt2YXIgcmU9K1B8fCtTTVtQXTtpZighaXNOYU4ocmUpKXt2YXIgZ2U9UXx8KEx8fFtdKS5sZW5ndGh8fDAsX2U9eS5uZXh0KDQpO19lLndyaXRlX3NoaWZ0KDIscmUpLF9lLndyaXRl'@;
put 'X3NoaWZ0KDIsZ2UpLGdlPjAmJk5oKEwpJiZ5LnB1c2goTCl9fWZ1bmN0aW9uIEowKHksUCxMKXtyZXR1cm4geXx8KHk9ZnIoNykpLHkud3JpdGVfc2hpZnQoMixQKSx5LndyaXRlX3NoaWZ0KDIsTCkseS53cml0ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hpZnQoMSwwKSx5fWZ1bmN0aW9uIHJf'@;
put 'KHksUCxMLFEpe2lmKG51bGwhPVAudilzd2l0Y2goUC50KXtjYXNlImQiOmNhc2UibiI6dmFyIHJlPSJkIj09UC50P1VlKEh0KFAudikpOlAudjtyZXR1cm4gdm9pZChyZT09KDB8cmUpJiZyZT49MCYmcmU8NjU1MzY/U2koeSwyLGZ1bmN0aW9uIGFEKHksUCxMKXt2YXIgUT1mcig5KTtyZXR1'@;
put 'cm4gSjAoUSx5LFApLFEud3JpdGVfc2hpZnQoMixMKSxRfShMLFEscmUpKTpTaSh5LDMsZnVuY3Rpb24gZFooeSxQLEwpe3ZhciBRPWZyKDE1KTtyZXR1cm4gSjAoUSx5LFApLFEud3JpdGVfc2hpZnQoOCxMLCJmIiksUX0oTCxRLHJlKSkpO2Nhc2UiYiI6Y2FzZSJlIjpyZXR1cm4gdm9pZCBT'@;
put 'aSh5LDUsZnVuY3Rpb24gbl8oeSxQLEwsUSl7dmFyIHJlPWZyKDkpO3JldHVybiBKMChyZSx5LFApLGQ5KEwsUXx8ImIiLHJlKSxyZX0oTCxRLFAudixQLnQpKTtjYXNlInMiOmNhc2Uic3RyIjpyZXR1cm4gdm9pZCBTaSh5LDQsZnVuY3Rpb24gUUwoeSxQLEwpe3ZhciBRPWZyKDgrMipMLmxl'@;
put 'bmd0aCk7cmV0dXJuIEowKFEseSxQKSxRLndyaXRlX3NoaWZ0KDEsTC5sZW5ndGgpLFEud3JpdGVfc2hpZnQoTC5sZW5ndGgsTCwic2JjcyIpLFEubDxRLmxlbmd0aD9RLnNsaWNlKDAsUS5sKTpRfShMLFEsKFAudnx8IiIpLnNsaWNlKDAsMjU1KSkpfVNpKHksMSxKMChudWxsLEwsUSkpfWZ1'@;
put 'bmN0aW9uIHJSKHksUCxMLFEscmUpe3ZhciBnZT0xNitndShyZS5jZWxsWGZzLHJlLmNlbGxTdHlsZVhmcyxQLHJlKTtpZihudWxsIT1QLnZ8fFAuYmYpaWYoUC5iZilTaSh5LCJGb3JtdWxhIixmdW5jdGlvbiBXWih5LFAsTCxRLHJlKXt2YXIgZ2U9ejAoUCxMLHJlKSxfZT1mdW5jdGlvbiBw'@;
put 'dih5KXtpZihudWxsPT15KXt2YXIgUD1mcig4KTtyZXR1cm4gUC53cml0ZV9zaGlmdCgxLDMpLFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoMiw2NTUzNSksUH1yZXR1cm4gRmMoIm51bWJlciI9PXR5cGVvZiB5'@;
put 'P3k6MCl9KHkudiksdmU9ZnIoNik7dmUud3JpdGVfc2hpZnQoMiwzMyksdmUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIEhlPWZyKHkuYmYubGVuZ3RoKSxCZT0wO0JlPHkuYmYubGVuZ3RoOysrQmUpSGVbQmVdPXkuYmZbQmVdO3JldHVybiBTKFtnZSxfZSx2ZSxIZV0pfShQLEwsUSwwLGdl'@;
put 'KSk7ZWxzZSBzd2l0Y2goUC50KXtjYXNlImQiOmNhc2UibiI6U2koeSwiTnVtYmVyIixmdW5jdGlvbiBDMyh5LFAsTCxRKXt2YXIgcmU9ZnIoMTQpO3JldHVybiB6MCh5LFAsUSxyZSksRmMoTCxyZSkscmV9KEwsUSwiZCI9PVAudD9VZShIdChQLnYpKTpQLnYsZ2UpKTticmVhaztjYXNlImIi'@;
put 'OmNhc2UiZSI6U2koeSw1MTcsZnVuY3Rpb24gTmQoeSxQLEwsUSxyZSxnZSl7dmFyIF9lPWZyKDgpO3JldHVybiB6MCh5LFAsUSxfZSksZDkoTCxnZSxfZSksX2V9KEwsUSxQLnYsZ2UsMCxQLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjppZihyZS5ib29rU1NUKXt2YXIgdmU9d3YocmUu'@;
put 'U3RyaW5ncyxQLnYsUC5SP1Aucj1KaChQLlIpOm51bGwscmUucmV2U3RyaW5ncyk7aWYoUC5SKWZvcih2YXIgU2U9MDtTZTxQLlIubGVuZ3RoOysrU2UpUC5SW1NlXS5zJiZndShyZS5jZWxsWGZzLHJlLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6UC5SW1NlXS5zfSxyZSk7U2koeSwiTGFi'@;
put 'ZWxTc3QiLGZ1bmN0aW9uIFpUKHksUCxMLFEpe3ZhciByZT1mcigxMCk7cmV0dXJuIHowKHksUCxRLHJlKSxyZS53cml0ZV9zaGlmdCg0LEwpLHJlfShMLFEsdmUsZ2UpKX1lbHNlIFNpKHksIkxhYmVsIixmdW5jdGlvbiBXVCh5LFAsTCxRLHJlKXt2YXIgZ2U9IXJlfHw4PT1yZS5iaWZmLF9l'@;
put 'PWZyKCtnZSs4KygxK2dlKSpMLmxlbmd0aCk7cmV0dXJuIHowKHksUCxRLF9lKSxfZS53cml0ZV9zaGlmdCgyLEwubGVuZ3RoKSxnZSYmX2Uud3JpdGVfc2hpZnQoMSwxKSxfZS53cml0ZV9zaGlmdCgoMStnZSkqTC5sZW5ndGgsTCxnZT8idXRmMTZsZSI6InNiY3MiKSxfZX0oTCxRLChQLnZ8'@;
put 'fCIiKS5zbGljZSgwLDI1NSksZ2UscmUpKTticmVhaztkZWZhdWx0OlNpKHksIkJsYW5rIix6MChMLFEsZ2UpKX1lbHNlIFNpKHksIkJsYW5rIix6MChMLFEsZ2UpKX1mdW5jdGlvbiBpUih5LFAsTCl7dmFyIEJlLFE9d2MoKSxyZT1MLlNoZWV0TmFtZXNbeV0sZ2U9TC5TaGVldHNbcmVdfHx7'@;
put 'fSxfZT0oTHx8e30pLldvcmtib29rfHx7fSx2ZT0oX2UuU2hlZXRzfHxbXSlbeV18fHt9LFNlPUFycmF5LmlzQXJyYXkoZ2UpLEhlPTg9PVAuYmlmZixHZT0iIixudD1bXSxkdD1PaShnZVsiIXJlZiJdfHwiQTEiKSxDdD1IZT82NTUzNjoxNjM4NDtpZihkdC5lLmM+MjU1fHxkdC5lLnI+PUN0'@;
put 'KXtpZihQLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKGdlWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO2R0LmUuYz1NYXRoLm1pbihkdC5lLmMsMjU1KSxkdC5lLnI9TWF0aC5taW4oZHQuZS5jLEN0LTEpfVNpKFEsMjA1NyxENCgwLDE2'@;
put 'LFApKSxTaShRLCJDYWxjTW9kZSIsZnUoMSkpLFNpKFEsIkNhbGNDb3VudCIsZnUoMTAwKSksU2koUSwiQ2FsY1JlZk1vZGUiLFBsKCEwKSksU2koUSwiQ2FsY0l0ZXIiLFBsKCExKSksU2koUSwiQ2FsY0RlbHRhIixGYyguMDAxKSksU2koUSwiQ2FsY1NhdmVSZWNhbGMiLFBsKCEwKSksU2ko'@;
put 'USwiUHJpbnRSb3dDb2wiLFBsKCExKSksU2koUSwiUHJpbnRHcmlkIixQbCghMSkpLFNpKFEsIkdyaWRTZXQiLGZ1KDEpKSxTaShRLCJHdXRzIixmdW5jdGlvbiBIdyh5KXt2YXIgUD1mcig4KTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoMix5WzBdP3lbMF0rMTow'@;
put 'KSxQLndyaXRlX3NoaWZ0KDIseVsxXT95WzFdKzE6MCksUH0oWzAsMF0pKSxTaShRLCJIQ2VudGVyIixQbCghMSkpLFNpKFEsIlZDZW50ZXIiLFBsKCExKSk7dmFyIGN0PWdlWyIhcHJpbnQiXSYmZ2VbIiFwcmludCJdLm1hcmdpbnN8fGdlWyIhbWFyZ2lucyJdO2N0JiYobnVsbCE9Y3QubGVm'@;
put 'dCYmU2koUSwiTGVmdE1hcmdpbiIsRmMoY3QubGVmdCkpLG51bGwhPWN0LnJpZ2h0JiZTaShRLCJSaWdodE1hcmdpbiIsRmMoY3QucmlnaHQpKSxudWxsIT1jdC50b3AmJlNpKFEsIlRvcE1hcmdpbiIsRmMoY3QudG9wKSksbnVsbCE9Y3QuYm90dG9tJiZTaShRLCJCb3R0b21NYXJnaW4iLEZj'@;
put 'KGN0LmJvdHRvbSkpLChudWxsIT1jdC5oZWFkZXJ8fG51bGwhPWN0LmZvb3RlcikmJlNpKFEsIlNldHVwIixmdW5jdGlvbiBrbSh5LFApe3ZhciBMPWZyKDM0KSxRPSExLHJlPTcwO3JldHVybiJsYW5kc2NhcGUiPT0oUC5wcm9wc3x8e30pLm9yaWVudGF0aW9uJiYoUT0hMCxyZSY9LTY3KSxR'@;
put 'JiYocmUmPS01KSxMLndyaXRlX3NoaWZ0KDIsMSksTC53cml0ZV9zaGlmdCgyLDEwMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgxLHJlKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgyLDYw'@;
put 'MCksTC53cml0ZV9zaGlmdCgyLDYwMCksRmMobnVsbD09eS5oZWFkZXI/LjU6eS5oZWFkZXIsTCksRmMobnVsbD09eS5mb290ZXI/LjU6eS5mb290ZXIsTCksTC53cml0ZV9zaGlmdCgyLDEpLEx9KGN0LGdlWyIhcHJpbnQiXXx8e30pKSksSGUmJmZ1bmN0aW9uIHhNKHksUCxMKXtpZihQKXt2'@;
put 'YXIgUT0wO1AuZm9yRWFjaChmdW5jdGlvbihyZSxnZSl7KytRPD0yNTYmJnJlJiYocmUuYXV0byYmTmkoTCxyZSxnZSksU2koeSwiQ29sSW5mbyIsZnVuY3Rpb24gckQoeSxQKXt2YXIgTD1mcigxMik7TC53cml0ZV9zaGlmdCgyLFApLEwud3JpdGVfc2hpZnQoMixQKSxMLndyaXRlX3NoaWZ0'@;
put 'KDIsMjU2Knkud2lkdGgpLEwud3JpdGVfc2hpZnQoMiwwKTt2YXIgUT0wO3JldHVybiB5LmhpZGRlbiYmKFF8PTEpLEwud3JpdGVfc2hpZnQoMSxRKSxMLndyaXRlX3NoaWZ0KDEsUT15LmxldmVsfHwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTH0oWWQoZ2UscmUpLGdlKSkpfSl9fShRLGdlWyIh'@;
put 'Y29scyJdLGdlKSxTaShRLCJEaW1lbnNpb25zIixmdW5jdGlvbiBqdCh5LFApe3ZhciBMPTghPVAuYmlmZiYmUC5iaWZmPzI6NCxRPWZyKDIqTCs2KTtyZXR1cm4gUS53cml0ZV9zaGlmdChMLHkucy5yKSxRLndyaXRlX3NoaWZ0KEwseS5lLnIrMSksUS53cml0ZV9zaGlmdCgyLHkucy5jKSxR'@;
put 'LndyaXRlX3NoaWZ0KDIseS5lLmMrMSksUS53cml0ZV9zaGlmdCgyLDApLFF9KGR0LFApKSxIZSYmKGdlWyIhbGlua3MiXT1bXSksZ2VbIiFyb3dzIl0mJkhlJiZnZVsiIXJvd3MiXS5mb3JFYWNoKGZ1bmN0aW9uKFp0LHBuKXtmb3IodmFyIEtuPUhzKHBuKSx1bj0yNTYscW49MCx6bj1adC5z'@;
put 'PzE2K2d1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6WnQuc30sUCk6MCxrbj1kdC5zLmM7a248PWR0LmUuYzsrK2tuKShTZT8oZ2VbcG5dfHxbXSlba25dOmdlW250W2tuXStLbl0pJiYoa248dW4mJih1bj1rbiksa24+cW4mJihxbj1rbikpO3FuPHVuJiYodW49cW49'@;
put 'MCksU2koUSwiUm93IixmdW5jdGlvbiBtdCh5LFAsTCl7dmFyIFE9ZnIoMTYpO1Eud3JpdGVfc2hpZnQoMixQKSxRLndyaXRlX3NoaWZ0KDIsTFswXSksUS53cml0ZV9zaGlmdCgyLExbMV0rMSksUS53cml0ZV9zaGlmdCgyLDIwKnkuaHB0fHwyMCpqMih5LmhweCl8fDMzMCksUS53cml0ZV9z'@;
put 'aGlmdCg0LDApO3ZhciByZT0wO3JldHVybiByZXw9MHx5LmxldmVsLHkuaGlkZGVuJiYocmV8PTMyKSxyZXw9NjQsTFsyXSYmKHJlfD0xMjgpLFEud3JpdGVfc2hpZnQoMSxyZSksUS53cml0ZV9zaGlmdCgxLDEpLFEud3JpdGVfc2hpZnQoMixMWzJdfHwwKSxRfShadCxwbixbdW4scW4sem5d'@;
put 'KSl9KTtmb3IodmFyIGJ0PWR0LnMucjtidDw9ZHQuZS5yOysrYnQpe0dlPUhzKGJ0KTtmb3IodmFyIEZ0PWR0LnMuYztGdDw9ZHQuZS5jOysrRnQpe2J0PT09ZHQucy5yJiYobnRbRnRdPU5zKEZ0KSksQmU9bnRbRnRdK0dlO3ZhciBrdD1TZT8oZ2VbYnRdfHxbXSlbRnRdOmdlW0JlXTtrdCYm'@;
put 'KHJSKFEsa3QsYnQsRnQsUCksSGUmJmt0LmwmJmdlWyIhbGlua3MiXS5wdXNoKFtCZSxrdC5sXSkpfX12YXIgVHQ9dmUuQ29kZU5hbWV8fHZlLm5hbWV8fHJlO3JldHVybihIZXx8NT09UC5iaWZmJiZnZVsiIWZyZWV6ZSJdKSYmU2koUSwiV2luZG93MiIsZnVuY3Rpb24gQlQoeSxQLEwsUSl7'@;
put 'dmFyIHJlPVEmJlEuYmlmZnx8OCxnZT1mcig4PT1yZT8xODoxMCksX2U9MTcxODtyZXR1cm4gTD4wJiYoX2UmPS01MTMpLGhuKFBbIiFncmlkbGluZXMiXSkmJihfZSY9LTMpLFBbIiFmcmVlemUiXSYmKF9lfD04KSx5JiZ5LlJUTCYmKF9lfD02NCksNT09cmUmJihfZT00NDYpLGdlLndyaXRl'@;
put 'X3NoaWZ0KDIsX2UpLDg9PXJlPyhnZS53cml0ZV9zaGlmdCg0LDApLGdlLndyaXRlX3NoaWZ0KDQsNjQpLGdlLndyaXRlX3NoaWZ0KDQsMCksZ2Uud3JpdGVfc2hpZnQoNCwwKSk6KGdlLndyaXRlX3NoaWZ0KDQsMCksZ2Uud3JpdGVfc2hpZnQoNCwwKSksZ2V9KChfZS5WaWV3c3x8W10pWzBd'@;
put 'LGdlLHkpKSwoSGV8fDU9PVAuYmlmZikmJmdlWyIhZnJlZXplIl0mJlNpKFEsIlBhbmUiLGZ1bmN0aW9uIHpUKHkpeyJzdHJpbmciPT10eXBlb2YgeSYmKHk9c3MoeSkpO3ZhciBQPWZyKDEwKTtyZXR1cm4gUC53cml0ZV9zaGlmdCgyLHkuYyksUC53cml0ZV9zaGlmdCgyLHkuciksUC53cml0'@;
put 'ZV9zaGlmdCgyLHkuciksUC53cml0ZV9zaGlmdCgyLHkuYyksUC53cml0ZV9zaGlmdCgxLDMpLFAud3JpdGVfc2hpZnQoMSwwKSxQfShnZVsiIWZyZWV6ZSJdKSksSGUmJmdlWyIhc2VsIl0mJlNpKFEsIlNlbGVjdGlvbiIsZnVuY3Rpb24gUjQoeSxQKXt2YXIgTD1mcigxNSksUT15LmNlbGw7'@;
put 'aWYoIVEpe2lmKCF5LnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtRPWRpKFdzKHkucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIHJlPSJzdHJpbmciPT10eXBlb2YgUT9zcyhRKTpRO2lmKFApe3ZhciBnZT0i'@;
put 'c3RyaW5nIj09dHlwZW9mIFA/c3MoUCk6UDtMLndyaXRlX3NoaWZ0KDEscmUucj49Z2UuciYmcmUuYz49Z2UuYz8wOnJlLnI+PWdlLnImJnJlLmM8Z2UuYz8yOnJlLnI8Z2UuciYmcmUuYz49Z2UuYz8xOjMpfWVsc2UgTC53cml0ZV9zaGlmdCgxLDMpO3JldHVybiBMLndyaXRlX3NoaWZ0KDIs'@;
put 'cmUuciksTC53cml0ZV9zaGlmdCgyLHJlLmMpLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMSksZnVuY3Rpb24gbTkoeSxQKXtQfHwoUD1mcig2KSksUC53cml0ZV9zaGlmdCgyLHkucz95LnMucjp5LnIpLFAud3JpdGVfc2hpZnQoMix5LmU/eS5lLnI6eS5yKSxQLndyaXRl'@;
put 'X3NoaWZ0KDEseS5zP3kucy5jOnkuYyksUC53cml0ZV9zaGlmdCgxLHkuZT95LmUuYzp5LmMpfSh7czpyZSxlOnJlfSxMKSxMfShnZVsiIXNlbCJdLGdlWyIhZnJlZXplIl0pKSxIZSYmKGdlWyIhbWVyZ2VzIl18fFtdKS5sZW5ndGgmJlNpKFEsIk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIFl3KHkp'@;
put 'e3ZhciBQPWZyKDIrOCp5Lmxlbmd0aCk7UC53cml0ZV9zaGlmdCgyLHkubGVuZ3RoKTtmb3IodmFyIEw9MDtMPHkubGVuZ3RoOysrTClVMCh5W0xdLFApO3JldHVybiBQfShnZVsiIW1lcmdlcyJdKSksSGUmJmZ1bmN0aW9uIFZsKHksUCl7Zm9yKHZhciBMPTA7TDxQWyIhbGlua3MiXS5sZW5n'@;
put 'dGg7KytMKXt2YXIgUT1QWyIhbGlua3MiXVtMXTtTaSh5LCJITGluayIsWGgoUSkpLFFbMV0uVG9vbHRpcCYmU2koeSwiSExpbmtUb29sdGlwIixRVChRKSl9ZGVsZXRlIFBbIiFsaW5rcyJdfShRLGdlKSxTaShRLCJDb2RlTmFtZSIsbW0oVHQpKSxIZSYmZnVuY3Rpb24gTU0oeSxQKXt2YXIg'@;
put 'TD1mcigxOSk7TC53cml0ZV9zaGlmdCg0LDIxNTEpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCgyLDMpLEwud3JpdGVfc2hpZnQoMSwxKSxMLndyaXRlX3NoaWZ0KDQsMCksU2koeSwiRmVhdEhkciIsTCksKEw9ZnIoMzkpKS53cml0ZV9zaGlm'@;
put 'dCg0LDIxNTIpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCgyLDMpLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCgyLDEpLEwud3JpdGVfc2hpZnQoNCw0KSxMLndyaXRlX3NoaWZ0KDIsMCksVTAo'@;
put 'T2koUFsiIXJlZiJdfHwiQTEiKSxMKSxMLndyaXRlX3NoaWZ0KDQsNCksU2koeSwiRmVhdCIsTCl9KFEsZ2UpLFNpKFEsIkVPRiIpLFEuZW5kKCl9ZnVuY3Rpb24gRU0oeSxQLEwpe3ZhciBRPXdjKCkscmU9KHl8fHt9KS5Xb3JrYm9va3x8e30sZ2U9cmUuU2hlZXRzfHxbXSxfZT1yZS5XQlBy'@;
put 'b3BzfHx7fSx2ZT04PT1MLmJpZmYsU2U9NT09TC5iaWZmO1NpKFEsMjA1NyxENCgwLDUsTCkpLCJ4bGEiPT1MLmJvb2tUeXBlJiZTaShRLCJBZGRpbiIpLFNpKFEsIkludGVyZmFjZUhkciIsdmU/ZnUoMTIwMCk6bnVsbCksU2koUSwiTW1zIixmdW5jdGlvbiBMdyh5LFApe1B8fChQPWZyKHkp'@;
put 'KTtmb3IodmFyIEw9MDtMPHk7KytMKVAud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUH0oMikpLFNlJiZTaShRLCJUb29sYmFySGRyIiksU2UmJlNpKFEsIlRvb2xiYXJFbmQiKSxTaShRLCJJbnRlcmZhY2VFbmQiKSxTaShRLCJXcml0ZUFjY2VzcyIsZnVuY3Rpb24gd20oeSxQKXt2YXIgTD0h'@;
put 'UHx8OD09UC5iaWZmLFE9ZnIoTD8xMTI6NTQpO2ZvcihRLndyaXRlX3NoaWZ0KDg9PVAuYmlmZj8yOjEsNyksTCYmUS53cml0ZV9zaGlmdCgxLDApLFEud3JpdGVfc2hpZnQoNCw4NTkwMDcwNTkpLFEud3JpdGVfc2hpZnQoNCw1NDU4NTQ4fChMPzA6NTM2ODcwOTEyKSk7US5sPFEubGVuZ3Ro'@;
put 'OylRLndyaXRlX3NoaWZ0KDEsTD8wOjMyKTtyZXR1cm4gUX0oMCxMKSksU2koUSwiQ29kZVBhZ2UiLGZ1KHZlPzEyMDA6MTI1MikpLHZlJiZTaShRLCJEU0YiLGZ1KDApKSx2ZSYmU2koUSwiRXhjZWw5RmlsZSIpLFNpKFEsIlJSVGFiSWQiLGZ1bmN0aW9uIE05KHkpe2Zvcih2YXIgUD1mcigy'@;
put 'KnkpLEw9MDtMPHk7KytMKVAud3JpdGVfc2hpZnQoMixMKzEpO3JldHVybiBQfSh5LlNoZWV0TmFtZXMubGVuZ3RoKSksdmUmJnkudmJhcmF3JiZTaShRLCJPYlByb2oiKSx2ZSYmeS52YmFyYXcmJlNpKFEsIkNvZGVOYW1lIixtbShfZS5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIpKSxTaShR'@;
put 'LCJCdWlsdEluRm5Hcm91cENvdW50IixmdSgxNykpLFNpKFEsIldpblByb3RlY3QiLFBsKCExKSksU2koUSwiUHJvdGVjdCIsUGwoITEpKSxTaShRLCJQYXNzd29yZCIsZnUoMCkpLHZlJiZTaShRLCJQcm90NFJldiIsUGwoITEpKSx2ZSYmU2koUSwiUHJvdDRSZXZQYXNzIixmdSgwKSksU2ko'@;
put 'USwiV2luZG93MSIsZnVuY3Rpb24gT3coKXt2YXIgeT1mcigxOCk7cmV0dXJuIHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDI5MjgwKSx5LndyaXRlX3NoaWZ0KDIsMTc2MDApLHkud3JpdGVfc2hpZnQoMiw1NikseS53cml0ZV9zaGlmdCgy'@;
put 'LDApLHkud3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMSkseS53cml0ZV9zaGlmdCgyLDUwMCkseX0oKSksU2koUSwiQmFja3VwIixQbCghMSkpLFNpKFEsIkhpZGVPYmoiLGZ1KDApKSxTaShRLCJEYXRlMTkwNCIsUGwoInRydWUiPT1mdW5jdGlvbiBpTSh5KXtyZXR1cm4geS5X'@;
put 'b3JrYm9vayYmeS5Xb3JrYm9vay5XQlByb3BzJiZ5cih5Lldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpPyJ0cnVlIjoiZmFsc2UifSh5KSkpLFNpKFEsIkNhbGNQcmVjaXNpb24iLFBsKCEwKSksdmUmJlNpKFEsIlJlZnJlc2hBbGwiLFBsKCExKSksU2koUSwiQm9va0Jvb2wiLGZ1KDApKSxD'@;
put 'cj13NChbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzVdKSxmdW5jdGlvbiBlUih5LFAsTCl7KCgoUHx8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxb'@;
put 'e3N6OjEyLGNvbG9yOnt0aGVtZToxfSxuYW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihRKXtTaSh5LCJGb250IixmdW5jdGlvbiB3Myh5LFApe3ZhciBMPXkubmFtZXx8IkFyaWFsIixRPVAmJjU9PVAuYmlmZixnZT1mcihRPzE1K0wubGVu'@;
put 'Z3RoOjE2KzIqTC5sZW5ndGgpO2dlLndyaXRlX3NoaWZ0KDIsMjAqKHkuc3p8fDEyKSk7dmFyIF9lPTA7cmV0dXJuIHkuYm9sZCYmKF9lfD0xKSx5Lml0YWxpYyYmKF9lfD0yKSx5LnN0cmlrZSYmKF9lfD04KSx5LnNoYWRvdyYmKF9lfD0zMiksZ2Uud3JpdGVfc2hpZnQoMSxfZSksZ2Uud3Jp'@;
put 'dGVfc2hpZnQoMSwwKSxnZS53cml0ZV9zaGlmdCgyLHkuY29sb3I/SDMoeS5jb2xvciw2NCk6NjQpLGdlLndyaXRlX3NoaWZ0KDIseS5ib2xkPzcwMDo0MDApLGdlLndyaXRlX3NoaWZ0KDIsInN1cGVyIj09eS52YWxpZ24/MToic3ViIj09eS52YWxpZ24/MjowKSxnZS53cml0ZV9zaGlmdCgx'@;
put 'LHkudW5kZXJsaW5lfHwwKSxnZS53cml0ZV9zaGlmdCgxLGdlLmZhbWlseXx8MCksZ2Uud3JpdGVfc2hpZnQoMSxnZS5jaGFyc2V0fHwwKSxnZS53cml0ZV9zaGlmdCgxLDApLGdlLndyaXRlX3NoaWZ0KDEsTC5sZW5ndGgpLFF8fGdlLndyaXRlX3NoaWZ0KDEsMSksZ2Uud3JpdGVfc2hpZnQo'@;
put 'KFE/MToyKSpMLmxlbmd0aCxMLFE/InNiY3MiOiJ1dGYxNmxlIiksZ2V9KFEsTCkpfSl9KFEseSxMKSxmdW5jdGlvbiB0Uih5LFAsTCl7UCYmW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihRKXtmb3IodmFyIHJlPVFbMF07cmU8PVFbMV07KytyZSlu'@;
put 'dWxsIT1QW3JlXSYmU2koeSwiRm9ybWF0IixYcihyZSxQW3JlXSxMKSl9KX0oUSx5LlNTRixMKSxmdW5jdGlvbiBuUih5LFApe2Zvcih2YXIgTD0wO0w8MTY7KytMKVNpKHksIlhGIixDbSh7bnVtRm10SWQ6MCxzdHlsZTohMH0sMCxQKSk7UC5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oUSl7'@;
put 'U2koeSwiWEYiLENtKFEsMCxQKSl9KX0oUSxMKSxTaShRLCJQYWxldHRlIixmdW5jdGlvbiAkdyh5KXt2YXIgUD1mcigyMjYpO1Aud3JpdGVfc2hpZnQoMiw1Nik7Zm9yKHZhciBMPTA7TDw1NjsrK0wpe3ZhciBRPXlbTCs4XXx8aDNbTCs4XTtQLndyaXRlX3NoaWZ0KDEsUVswXSksUC53cml0'@;
put 'ZV9zaGlmdCgxLFFbMV0pLFAud3JpdGVfc2hpZnQoMSxRWzJdKSxQLndyaXRlX3NoaWZ0KDEsMCl9cmV0dXJuIFB9KENyKSksQ3I9b24oaDMpLHZlJiZTaShRLCJVc2VzRUxGcyIsUGwoITEpKTt2YXIgQmU9US5lbmQoKSxHZT13YygpO3ZlJiZTaShHZSwiQ291bnRyeSIsZnVuY3Rpb24gdEQo'@;
put 'eSl7cmV0dXJuIHl8fCh5PWZyKDQpKSx5LndyaXRlX3NoaWZ0KDIsMSkseS53cml0ZV9zaGlmdCgyLDEpLHl9KCkpLHZlJiZMLlN0cmluZ3MmJmZ1bmN0aW9uIHRfKHksUCxMLFEpe3ZhciByZT1RfHwoTHx8W10pLmxlbmd0aHx8MDtpZihyZTw9ODIyNClyZXR1cm4gU2koeSxQLEwscmUpO3Zh'@;
put 'ciBnZT0rUHx8K1NNW1BdO2lmKCFpc05hTihnZSkpe2Zvcih2YXIgX2U9TC5wYXJ0c3x8W10sdmU9MCxTZT0wLEhlPTA7SGUrKF9lW3ZlXXx8ODIyNCk8PTgyMjQ7KUhlKz1fZVt2ZV18fDgyMjQsdmUrKzt2YXIgQmU9eS5uZXh0KDQpO2ZvcihCZS53cml0ZV9zaGlmdCgyLGdlKSxCZS53cml0'@;
put 'ZV9zaGlmdCgyLEhlKSx5LnB1c2goTC5zbGljZShTZSxTZStIZSkpLFNlKz1IZTtTZTxyZTspe2ZvcigoQmU9eS5uZXh0KDQpKS53cml0ZV9zaGlmdCgyLDYwKSxIZT0wO0hlKyhfZVt2ZV18fDgyMjQpPD04MjI0OylIZSs9X2VbdmVdfHw4MjI0LHZlKys7QmUud3JpdGVfc2hpZnQoMixIZSks'@;
put 'eS5wdXNoKEwuc2xpY2UoU2UsU2UrSGUpKSxTZSs9SGV9fX0oR2UsIlNTVCIsZnVuY3Rpb24gYnMoeSxQKXt2YXIgTD1mcig4KTtMLndyaXRlX3NoaWZ0KDQseS5Db3VudCksTC53cml0ZV9zaGlmdCg0LHkuVW5pcXVlKTtmb3IodmFyIFE9W10scmU9MDtyZTx5Lmxlbmd0aDsrK3JlKVFbcmVd'@;
put 'PWowKHlbcmVdLFApO3ZhciBnZT1TKFtMXS5jb25jYXQoUSkpO3JldHVybiBnZS5wYXJ0cz1bTC5sZW5ndGhdLmNvbmNhdChRLm1hcChmdW5jdGlvbihfZSl7cmV0dXJuIF9lLmxlbmd0aH0pKSxnZX0oTC5TdHJpbmdzLEwpKSxTaShHZSwiRU9GIik7dmFyIG50PUdlLmVuZCgpLGR0PXdjKCks'@;
put 'Q3Q9MCxjdD0wO2ZvcihjdD0wO2N0PHkuU2hlZXROYW1lcy5sZW5ndGg7KytjdClDdCs9KHZlPzEyOjExKSsodmU/MjoxKSp5LlNoZWV0TmFtZXNbY3RdLmxlbmd0aDt2YXIgYnQ9QmUubGVuZ3RoK0N0K250Lmxlbmd0aDtmb3IoY3Q9MDtjdDx5LlNoZWV0TmFtZXMubGVuZ3RoOysrY3QpU2ko'@;
put 'ZHQsIkJvdW5kU2hlZXQ4IixZMCh7cG9zOmJ0LGhzOihnZVtjdF18fHt9KS5IaWRkZW58fDAsZHQ6MCxuYW1lOnkuU2hlZXROYW1lc1tjdF19LEwpKSxidCs9UFtjdF0ubGVuZ3RoO3ZhciBrdD1kdC5lbmQoKTtpZihDdCE9a3QubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQlM4ICIrQ3QrIiAh'@;
put 'PSAiK2t0Lmxlbmd0aCk7dmFyIFR0PVtdO3JldHVybiBCZS5sZW5ndGgmJlR0LnB1c2goQmUpLGt0Lmxlbmd0aCYmVHQucHVzaChrdCksbnQubGVuZ3RoJiZUdC5wdXNoKG50KSxTYShbVHRdKX1mdW5jdGlvbiBpXyh5LFApe3ZhciBMPVB8fHt9O3N3aXRjaChMLmJpZmZ8fDIpe2Nhc2UgODpj'@;
put 'YXNlIDU6cmV0dXJuIGZ1bmN0aW9uIG9SKHksUCl7dmFyIEw9UHx8e30sUT1bXTtGbShQJiZQLlBQSXx8OTYpLHkmJiF5LlNTRiYmKHkuU1NGPXcuZ2V0X3RhYmxlKCkpLHkmJnkuU1NGJiYoSih3KSx3LmxvYWRfdGFibGUoeS5TU0YpLEwucmV2c3NmPUFlKHkuU1NGKSxMLnJldnNzZlt5LlNT'@;
put 'Rls2NTUzNV1dPTAsTC5zc2Y9eS5TU0YpLHkuU3R5bGVzPXtGb250czpMLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOkwuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtw'@;
put 'YXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOkwuQm9yZGVycz1be31dLERYRjpMLkRYRj15LlN0eWxlcyYmeS5TdHlsZXMuRFhGfHxbXX0sWjEoTC5Gb250c1swXSksTC5TdHJpbmdzPVtdLEwuU3RyaW5ncy5Db3VudD0wLEwuU3RyaW5ncy5VbmlxdWU9MCxLMD9MLnJldlN0cmluZ3M9'@;
put 'bmV3IE1hcDooTC5yZXZTdHJpbmdzPXt9LEwucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIEwucmV2U3RyaW5ncy5mb28pLGhfKEwpLEwuY2VsbFhmcz1bXSxMLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxndShMLmNlbGxYZnMsTC5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2Vu'@;
put 'ZXJhbDowfX0pLHkuUHJvcHN8fCh5LlByb3BzPXt9KTtmb3IodmFyIHJlPTA7cmU8eS5TaGVldE5hbWVzLmxlbmd0aDsrK3JlKVFbUS5sZW5ndGhdPWlSKHJlLEwseSk7cmV0dXJuIFEudW5zaGlmdChFTSh5LFEsTCkpLFNhKFtRXSl9KHksUCk7Y2FzZSA0OmNhc2UgMzpjYXNlIDI6cmV0dXJu'@;
put 'IGZ1bmN0aW9uIGhZKHksUCl7dmFyIEw9UHx8e307bnVsbCE9dGUmJm51bGw9PUwuZGVuc2UmJihMLmRlbnNlPXRlKTtmb3IodmFyIFE9d2MoKSxyZT0wLGdlPTA7Z2U8eS5TaGVldE5hbWVzLmxlbmd0aDsrK2dlKXkuU2hlZXROYW1lc1tnZV09PUwuc2hlZXQmJihyZT1nZSk7aWYoMD09cmUm'@;
put 'Jkwuc2hlZXQmJnkuU2hlZXROYW1lc1swXSE9TC5zaGVldCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitMLnNoZWV0KTtyZXR1cm4gU2koUSw0PT1MLmJpZmY/MTAzMzozPT1MLmJpZmY/NTIxOjksRDQoMCwxNixMKSksZnVuY3Rpb24gZFkoeSxQLEwsUSl7dmFyIF9lLHJl'@;
put 'PUFycmF5LmlzQXJyYXkoUCksZ2U9T2koUFsiIXJlZiJdfHwiQTEiKSx2ZT0iIixTZT1bXTtpZihnZS5lLmM+MjU1fHxnZS5lLnI+MTYzODMpe2lmKFEuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoUFsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYz'@;
put 'ODQiKTtnZS5lLmM9TWF0aC5taW4oZ2UuZS5jLDI1NSksZ2UuZS5yPU1hdGgubWluKGdlLmUuYywxNjM4MyksX2U9T28oZ2UpfWZvcih2YXIgSGU9Z2Uucy5yO0hlPD1nZS5lLnI7KytIZSl7dmU9SHMoSGUpO2Zvcih2YXIgQmU9Z2Uucy5jO0JlPD1nZS5lLmM7KytCZSl7SGU9PT1nZS5zLnIm'@;
put 'JihTZVtCZV09TnMoQmUpKSxfZT1TZVtCZV0rdmU7dmFyIEdlPXJlPyhQW0hlXXx8W10pW0JlXTpQW19lXTtHZSYmcl8oeSxHZSxIZSxCZSl9fX0oUSx5LlNoZWV0c1t5LlNoZWV0TmFtZXNbcmVdXSwwLEwpLFNpKFEsMTApLFEuZW5kKCl9KHksUCl9dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlk'@;
put 'IHR5cGUgIitMLmJvb2tUeXBlKyIgZm9yIEJJRkYiKX12YXIgRnU9ZnVuY3Rpb24oKXt2YXIgeT17Y2VudGVyQ29udGludW91czoiY2VudGVyIixqdXN0aWZ5OiJsZWZ0In07ZnVuY3Rpb24gTChHZSxudCl7dmFyIGR0PW50fHx7fTtudWxsIT10ZSYmbnVsbD09ZHQuZGVuc2UmJihkdC5kZW5z'@;
put 'ZT10ZSk7dmFyIEN0PWR0LmRlbnNlP1tdOnt9LGN0PShHZT1HZS5yZXBsYWNlKC88IS0tLio/LS0+L2csIiIpKS5tYXRjaCgvPHRhYmxlL2kpO2lmKCFjdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBidD1HZS5tYXRjaCgvPFwv'@;
put 'dGFibGUvaSksRnQ9Y3QuaW5kZXgsa3Q9YnQmJmJ0LmluZGV4fHxHZS5sZW5ndGgsVHQ9ZnVuY3Rpb24gZnQoeSxQLEwpe2lmKEhufHwic3RyaW5nIj09dHlwZW9mIFApcmV0dXJuIHkuc3BsaXQoUCk7Zm9yKHZhciBRPXkuc3BsaXQoUCkscmU9W1FbMF1dLGdlPTE7Z2U8US5sZW5ndGg7Kytn'@;
put 'ZSlyZS5wdXNoKEwpLHJlLnB1c2goUVtnZV0pO3JldHVybiByZX0oR2Uuc2xpY2UoRnQsa3QpLC8oOj88dHJbXj5dKj4pL2ksIjx0cj4iKSxadD0tMSxwbj0wLEtuPTAsdW49MCxxbj17czp7cjoxZTcsYzoxZTd9LGU6e3I6MCxjOjB9fSx6bj1bXTtmb3IoRnQ9MDtGdDxUdC5sZW5ndGg7KytG'@;
put 'dCl7dmFyIGtuPVR0W0Z0XS50cmltKCksZXI9a24uc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpO2lmKCI8dHIiIT1lcil7aWYoIjx0ZCI9PWVyfHwiPHRoIj09ZXIpe3ZhciB0cj1rbi5zcGxpdCgvPFwvdFtkaF0+L2kpO2ZvcihrdD0wO2t0PHRyLmxlbmd0aDsrK2t0KXt2YXIgWm49dHJba3Rd'@;
put 'LnRyaW0oKTtpZihabi5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIEJyPVpuLG9pPTA7IjwiPT1Cci5jaGFyQXQoMCkmJihvaT1Cci5pbmRleE9mKCI+IikpPi0xOylCcj1Cci5zbGljZShvaSsxKTtmb3IodmFyIGtpPTA7a2k8em4ubGVuZ3RoOysra2kpe3ZhciBMaT16bltraV07TGkucy5j'@;
put 'PT1wbiYmTGkucy5yPFp0JiZadDw9TGkuZS5yJiYocG49TGkuZS5jKzEsa2k9LTEpfXZhciBRcj1sbihabi5zbGljZSgwLFpuLmluZGV4T2YoIj4iKSkpO3VuPVFyLmNvbHNwYW4/K1FyLmNvbHNwYW46MSwoKEtuPStRci5yb3dzcGFuKT4xfHx1bj4xKSYmem4ucHVzaCh7czp7cjpadCxjOnBu'@;
put 'fSxlOntyOlp0KyhLbnx8MSktMSxjOnBuK3VuLTF9fSk7dmFyIHVyPVFyLnR8fFFyWyJkYXRhLXQiXXx8IiI7aWYoIUJyLmxlbmd0aCl7cG4rPXVuO2NvbnRpbnVlfWlmKEJyPU9jKEJyKSxxbi5zLnI+WnQmJihxbi5zLnI9WnQpLHFuLmUucjxadCYmKHFuLmUucj1adCkscW4ucy5jPnBuJiYo'@;
put 'cW4ucy5jPXBuKSxxbi5lLmM8cG4mJihxbi5lLmM9cG4pLEJyLmxlbmd0aCl7dmFyIEFuPXt0OiJzIix2OkJyfTtkdC5yYXd8fCFCci50cmltKCkubGVuZ3RofHwicyI9PXVyfHwoQW49JG4oQnIsZHQpKSxkdC5kZW5zZT8oQ3RbWnRdfHwoQ3RbWnRdPVtdKSxDdFtadF1bcG5dPUFuKTpDdFtk'@;
put 'aSh7cjpadCxjOnBufSldPUFuLHBuKz11bn19fX19ZWxzZXtpZigrK1p0LGR0LnNoZWV0Um93cyYmZHQuc2hlZXRSb3dzPD1adCl7LS1adDticmVha31wbj0wfX1yZXR1cm4gQ3RbIiFyZWYiXT1Pbyhxbiksem4ubGVuZ3RoJiYoQ3RbIiFtZXJnZXMiXT16biksQ3R9ZnVuY3Rpb24gcmUoR2Us'@;
put 'bnQsZHQsQ3QsY3QsYnQpe3ZhciBUdCxGdD1HZVsiIW1lcmdlcyJdfHxbXSxrdD1bXSxadD17c3R5bGU6W119LHBuPSExO2Z1bmN0aW9uIEtuKERpLFlvLGxvKXt2YXIgQW89IiIseG89MDtpZihUdFtEaV0pc3dpdGNoKFR0W0RpXS5zdHlsZSl7Y2FzZSJ0aGluIjpjYXNlImhhaXIiOkFvPSJz'@;
put 'b2xpZCIseG89MTticmVhaztjYXNlIm1lZGl1bSI6QW89InNvbGlkIix4bz0yO2JyZWFrO2Nhc2UidGhpY2siOkFvPSJzb2xpZCIseG89MzticmVhaztjYXNlImRvdWJsZSI6QW89ImRvdWJsZSIseG89MzticmVhaztjYXNlImRvdHRlZCI6Y2FzZSJkYXNoRG90RG90IjpBbz0iZG90dGVkIix4'@;
put 'bz0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaERvdERvdCI6QW89ImRvdHRlZCIseG89MjticmVhaztjYXNlImRhc2hlZCI6Y2FzZSJkYXNoRG90IjpjYXNlInNsYW50RGFzaERvdCI6QW89ImRhc2hlZCIseG89MTticmVhaztjYXNlIm1lZGl1bURhc2hlZCI6Y2FzZSJtZWRpdW1EYXNoRG90IjpB'@;
put 'bz0iZGFzaGVkIix4bz0yfWU6aWYoMD09eG8pe3N3aXRjaChEaSl7Y2FzZSJ0b3AiOi0tWW87YnJlYWs7Y2FzZSJsZWZ0IjotLWxvO2JyZWFrO2Nhc2UiYm90dG9tIjorK1lvO2JyZWFrO2Nhc2UicmlnaHQiOisrbG99dmFyIGhpPVlvPj0wJiZsbz49MD9DdC5kZW5zZT8oR2VbWW9dfHxbXSlb'@;
put 'bG9dOkdlW2RpKHtyOllvLGM6bG99KV06bnVsbDtpZihoaSl7aWYoaGkucyYmaGkuc1t7dG9wOiJib3R0b20iLGJvdHRvbToidG9wIixsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQifVtEaV1dKWJyZWFrIGU7aGkucyYmaGkucy5mZ0NvbG9yJiYoeG89MSl9VHQuZmdDb2xvciYmKHhvPTEpLCFo'@;
put 'aSYmcG4mJjA9PXhvJiYoeG89MSl9MCE9eG8mJnhvJiYoWnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrRGkrIi1zdHlsZToiKyhBb3x8InRyYW5zcGFyZW50IikpLFp0LnN0eWxlLnB1c2goImJvcmRlci0iK0RpKyItd2lkdGg6Iit4bysicHgiKSwiIj09QW8/WnQuc3R5bGUucHVzaCgiYm9yZGVy'@;
put 'LSIrRGkrIi1jb2xvcjogdHJhbnNwYXJlbnQiKTpUdFtEaV0uY29sb3ImJlR0W0RpXS5jb2xvci5yZ2ImJlp0LnN0eWxlLnB1c2goImJvcmRlci0iK0RpKyItY29sb3I6IyIrT3UoVHRbRGldLmNvbG9yLnJnYikpKX1mb3IodmFyIHVuPW50LnMuYzt1bjw9bnQuZS5jOysrdW4pe2Zvcih2YXIg'@;
put 'cW49MCx6bj0wLGtuPTA7a248RnQubGVuZ3RoOysra24paWYoIShGdFtrbl0ucy5yPmR0fHxGdFtrbl0ucy5jPnVufHxGdFtrbl0uZS5yPGR0fHxGdFtrbl0uZS5jPHVuKSl7aWYoRnRba25dLnMucjxkdHx8RnRba25dLnMuYzx1bil7cW49LTE7YnJlYWt9cW49RnRba25dLmUuci1GdFtrbl0u'@;
put 'cy5yKzEsem49RnRba25dLmUuYy1GdFtrbl0ucy5jKzE7YnJlYWt9aWYoIShxbjwwKSl7dmFyIGVyPWRpKHtyOmR0LGM6dW59KSx0cj1DdC5kZW5zZT8oR2VbZHRdfHxbXSlbdW5dOkdlW2VyXTt0cj9wbj0hMToocG49ITAsdHI9e3Q6InoiLHM6e319KTt2YXIgWm49InoiPT10ci50PyIiOnRy'@;
put 'Lmh8fHJvKHRyLnd8fChjdSh0ciksdHIudyl8fCIiKTtpZihadD17c3R5bGU6W119LFR0PXRyLnMpe3ZhciBCcj0xO2lmKCgic3VwZXIiPT1UdC52YWxpZ258fCJzdWIiPT1UdC52YWxpZ24pJiYoQnI9LjgzLFpuPVNyKCJzcGFuIixabix7c3R5bGU6InZlcnRpY2FsLWFsaWduOiAiK1R0LnZh'@;
put 'bGlnbn0pKSxadC5zdHlsZS5wdXNoKCJmb250LXdlaWdodDoiKyhUdC5ib2xkPzcwMDo0MDApKSxUdC5pdGFsaWMmJlp0LnN0eWxlLnB1c2goImZvbnQtc3R5bGU6IGl0YWxpYyIpLChUdC51bmRlcmxpbmV8fFR0LnN0cmlrZSkmJlp0LnN0eWxlLnB1c2goInRleHQtZGVjb3JhdGlvbjoiKyhU'@;
put 'dC51bmRlcmxpbmU/IiB1bmRlcmxpbmUiOiIiKSsoVHQuc3RyaWtlPyIgbGluZS10aHJvdWdoIjoiIikpLFR0LmNvbG9yJiZUdC5jb2xvci5yZ2ImJlp0LnN0eWxlLnB1c2goImNvbG9yOiAjIitPdShUdC5jb2xvci5yZ2IpKSxUdC5uYW1lJiZadC5zdHlsZS5wdXNoKCJmb250LWZhbWlseToi'@;
put 'K1R0Lm5hbWUrIiwgc2Fucy1zZXJpZiIpLFR0LnN6JiZadC5zdHlsZS5wdXNoKCJmb250LXNpemU6IitUdC5zeipCcisicHQiKSxudWxsIT09VHQucGF0dGVyblR5cGUmJlR0LmZnQ29sb3ImJlR0LmZnQ29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitPdShU'@;
put 'dC5mZ0NvbG9yLnJnYikpLFsidG9wIiwibGVmdCJdLmZvckVhY2goZnVuY3Rpb24oRGkpe0tuKERpLGR0LHVuKX0pLHFuPjF8fHpuPjEpe3ZhciBvaT1kaSh7cjpkdCtxbi0xLGM6dW4rem4tMX0pLGtpPUN0LmRlbnNlPyhHZVtkdCtxbi0xXXx8W10pW3VuK3puLTFdOkdlW29pXSxRcj1UdDtU'@;
put 'dD1raSYma2kuc3x8VHQsWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oRGkpe0tuKERpLGR0LHVuKX0pLFR0PVFyfWVsc2VbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihEaSl7S24oRGksZHQsdW4pfSk7aWYoVHQuYWxpZ25tZW50KXtpZihUdC5hbGlnbm1l'@;
put 'bnQuaG9yaXpvbnRhbD9adC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiAiKyh5W1R0LmFsaWdubWVudC5ob3Jpem9udGFsXXx8VHQuYWxpZ25tZW50Lmhvcml6b250YWwpKToibiI9PXRyLnQmJlp0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0IiksVHQuYWxpZ25tZW50LnZlcnRpY2Fs'@;
put 'KXt2YXIgdXI9VHQuYWxpZ25tZW50LnZlcnRpY2FsO1p0LnN0eWxlLnB1c2goInZlcnRpY2FsLWFsaWduOiAiKygiY2VudGVyIj09dXI/Im1pZGRsZSI6dXIpKX1pZihUdC5hbGlnbm1lbnQud3JhcFRleHQpWnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIik7ZWxzZXt2YXIg'@;
put 'QW49Q3QuZGVuc2U/KEdlW2R0XXx8W10pW3VuKzFdOkdlW2RpKHtyOmR0LGM6dW4rMX0pXTtBbiYmInoiIT1Bbi50JiZadC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKX19ZWxzZSJuIj09dHIudCYmWnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKTt2YXIgdnI9'@;
put 'KChHZVsiIWNvbHMiXXx8W10pW3VuXXx8e30pLndweDtudWxsPT12ciYmKHZyPSgoR2VbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KX12YXIgcnI9MDtpZih6bjw9MSYmcW48PTEmJihycj0oKEdlWyIhY29scyJdfHxbXSlbdW5dfHx7fSkud3B4KSYmWnQuc3R5bGUucHVzaCgi'@;
put 'd2lkdGg6ICIrcnIrInB4IiksR2VbIiFjb25kZm10Il0mJmdlKHRyLGR0LHVuLEdlWyIhY29uZGZtdCJdLFp0LnN0eWxlLEdlKSwwPT1adC5zdHlsZS5sZW5ndGg/ZGVsZXRlIFp0LnN0eWxlOlp0LnN0eWxlPVp0LnN0eWxlLmpvaW4oIjsiKSxDdC5jc3Mpe3ZhciBTbj1jdC5pbmRleE9mKFp0'@;
put 'LnN0eWxlKTstMT09U24mJihjdC5wdXNoKFp0LnN0eWxlKSxTbj1jdC5sZW5ndGgtMSksZGVsZXRlIFp0LnN0eWxlLFp0LmNsYXNzPSJzanMiKyhidHx8IiIpKyItIitTbn1xbj4xJiYoWnQucm93c3Bhbj1xbiksem4+MSYmKFp0LmNvbHNwYW49em4pLEN0LmVkaXRhYmxlP1puPSc8c3BhbiBj'@;
put 'b250ZW50ZWRpdGFibGU9InRydWUiPicrWm4rIjwvc3Bhbj4iOnRyJiYoWnRbImRhdGEtdCJdPXRyJiZ0ci50fHwieiIsbnVsbCE9dHIudiYmKFp0WyJkYXRhLXYiXT10ci52KSxudWxsIT10ci56JiYoWnRbImRhdGEteiJdPXRyLnopKSxadC5pZD0oQ3QuaWR8fCJzanMiKSsiLSIrZXIsa3Qu'@;
put 'cHVzaChTcigidGQiLFpuLFp0KSl9fXZhciBDaSxncj17c3R5bGU6W119OyhDaT1HZVsiIXNoZWV0Rm9ybWF0Il0pJiZDaS5yb3cmJihJMyhDaS5yb3cpLENpLnJvdy5ocHgmJihnci5zdHlsZS5wdXNoKFsiaGVpZ2h0IixDaS5yb3cuaHB4KyJweCJdKSxnci5oZWlnaHQ9TWF0aC5yb3VuZChD'@;
put 'aS5yb3cuaHB4KSkpO3ZhciB6cj1HZVsiIXJvd3MiXTtpZih6ciYmenJbZHRdKXt2YXIgamk9enJbZHRdO2ppLmhweCYmKGdyLnN0eWxlLnB1c2goWyJoZWlnaHQiLCtqaS5ocHgrInB4Il0pLGdyLmhlaWdodD1NYXRoLnJvdW5kKGppLmhweCkpLGppLmhpZGRlbiYmZ3Iuc3R5bGUucHVzaChb'@;
put 'ImRpc3BsYXkiLCJub25lIl0pfXZhciBfbz1bXTtyZXR1cm4gZ3Iuc3R5bGU9Z3Iuc3R5bGUucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbihEaSl7cmV0dXJuIShfby5pbmRleE9mKERpWzBdKT4tMXx8KF9vLnB1c2goRGlbMF0pLDApKX0pLm1hcChmdW5jdGlvbihEaSl7cmV0dXJuIERpWzBd'@;
put 'KyI6IitEaVsxXX0pLDA9PWdyLnN0eWxlLmxlbmd0aD9kZWxldGUgZ3Iuc3R5bGU6Z3Iuc3R5bGU9Z3Iuc3R5bGUuam9pbigiOyIpLFNyKCJ0ciIsa3Quam9pbigiIiksZ3IpfWZ1bmN0aW9uIGdlKEdlLG50LGR0LEN0LGN0LGJ0KXtDdC5mb3JFYWNoKGZ1bmN0aW9uKEZ0KXtpZihGdC5fcmVm'@;
put 'fHwoRnQuX3JlZj0ic3RyaW5nIj09dHlwZW9mIEZ0LnJlZj9XcyhGdC5yZWYpOkZ0LnJlZiksIShGdC5fcmVmLnMuYz5kdHx8RnQuX3JlZi5lLmM8ZHR8fEZ0Ll9yZWYucy5yPm50fHxGdC5fcmVmLmUucjxudHx8InNjYWxlIiE9PUZ0LnQpKXtpZigibiIhPUdlLnQpcmV0dXJuO3ZhciBrdDtp'@;
put 'ZihudWxsPT1GdC5fbWluKXtGdC5fdmFsdWVzPVtdO2Zvcih2YXIgVHQ9RnQuX3JlZi5zLnI7VHQ8PUZ0Ll9yZWYuZS5yOysrVHQpZm9yKHZhciBadD1GdC5fcmVmLnMuYztadDw9RnQuX3JlZi5lLmM7KytadCl7dmFyIHBuPUFycmF5LmlzQXJyYXkoYnQpPyhidFtUdF18fFtdKVtadF06YnRb'@;
put 'ZGkoe3I6VHQsYzpadH0pXTtwbiYmIm4iPT1wbi50JiZGdC5fdmFsdWVzLnB1c2gocG4udil9aWYoRnQuX3ZhbHVlcy5zb3J0KGZ1bmN0aW9uKEtuLHVuKXtyZXR1cm4gS24tdW59KSxGdC5fbWluPUZ0Ll92YWx1ZXNbMF0sRnQuX21heD1GdC5fdmFsdWVzLnNsaWNlKC0xKVswXSxGdC5fYmFu'@;
put 'ZD1GdC5fbWF4LUZ0Ll9taW4sRnQuY21pZCl7c3dpdGNoKEZ0LmNtaWQudCl7Y2FzZSJudW0iOkZ0Ll9taWQ9RnQuY21pZC52O2JyZWFrO2Nhc2UicGVyY2VudCI6RnQuX21pZD1GdC5jbWlkLnYvMTAwKkZ0Ll9iYW5kK0Z0Ll9taW47YnJlYWs7Y2FzZSJwZXJjZW50aWxlIjpGdC5fbWlkPWZ1'@;
put 'bmN0aW9uIGZuKHksUCl7aWYoMD09UClyZXR1cm4geVswXTtpZigxMDA9PVApcmV0dXJuIHlbeS5sZW5ndGgtMV07dmFyIFE9UC8xMDAqKHkubGVuZ3RoLTEpLHJlPVEtTWF0aC5mbG9vcihRKTtyZXR1cm4gcmUqeVtNYXRoLmNlaWwoUSldKygxLXJlKSp5W01hdGguZmxvb3IoUSldfShGdC5f'@;
put 'dmFsdWVzLEZ0LmNtaWQudil9RnQuX2JhbmRoPUZ0Ll9tYXgtRnQuX21pZCxGdC5fYmFuZGw9RnQuX21pZC1GdC5fbWlufX0oa3Q9RnQuY21pZD9HZS52Pj1GdC5fbWlkP1I5KEZ0LmNtaWQuY29sb3IsRnQuY21heC5jb2xvciwoR2Uudi1GdC5fbWlkKS9GdC5fYmFuZGgpOlI5KEZ0LmNtaW4u'@;
put 'Y29sb3IsRnQuY21pZC5jb2xvciwoR2Uudi1GdC5fbWluKS9GdC5fYmFuZGwpOlI5KEZ0LmNtaW4uY29sb3IsRnQuY21heC5jb2xvciwoR2Uudi1GdC5fbWluKS9GdC5fYmFuZCkpJiZjdC5wdXNoKCJiYWNrZ3JvdW5kLWNvbG9yOiAjIitrdCl9fSl9ZnVuY3Rpb24gX2UoR2UsbnQpe3ZhciBk'@;
put 'dD17c3BhbjpudHx8MSxzdHlsZToiIn0sQ3Q9W107cmV0dXJuIEdlJiZHZS53cHgmJihkdC53aWR0aD1NYXRoLnJvdW5kKDQqR2Uud3B4LzMpLEN0LnB1c2goIndpZHRoOiIrKEdlLndweHx8MCkrInB4IikpLEN0Lmxlbmd0aD4wJiYoZHQuc3R5bGU9Q3Quam9pbigiOyIpKSxTcigiY29sIixu'@;
put 'dWxsLGR0KX1mdW5jdGlvbiB2ZShHZSxudCxkdCl7dmFyIEN0PXtib3JkZXI6MCxjZWxscGFkZGluZzowLGNlbGxzcGFjaW5nOjAsc3R5bGU6WyJib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiLCJ0YWJsZS1sYXlvdXQ6Zml4ZWQiXS5qb2luKCI7Iil9O2R0JiZkdC5pZCYmKEN0LmlkPWR0Lmlk'@;
put 'KTt2YXIgY3Q9R2VbIiFjb2xzIl0sYnQ9R2VbIiFzaGVldEZvcm1hdCJdO2lmKEdlJiZjdCl7Zm9yKHZhciBGdD0wLFR0PW50LnMuYztUdDw9bnQuZS5jOysrVHQpe3ZhciBadD1jdFtUdF07RnQrPVp0JiZadC53cHg/WnQud3B4OmJ0JiZidC5jb2wmJmJ0LmNvbC53cHg/YnQuY29sLndweDo1'@;
put 'M31DdC5zdHlsZSs9Ijt3aWR0aDoiK0Z0KyJweCJ9dmFyIEtuLHBuPVsiPHRhYmxlIitQYShDdCkrIj4iXTtpZihwbi5wdXNoKCI8c3R5bGU+dGQgeyBwYWRkaW5nLXRvcDogMXB4OyBwYWRkaW5nLXJpZ2h0OjFweDsgcGFkZGluZy1sZWZ0OjFweDsgdGV4dC1hbGlnbjpnZW5lcmFsOyB2ZXJ0'@;
put 'aWNhbC1hbGlnbjpib3R0b207IGJvcmRlcjoxcHggc29saWQ7IGJvcmRlci1jb2xvcjoiKyhkdCYmZHQuZ3JpZGNvbG9yP2R0LmdyaWRjb2xvcjpobihHZVsiIWdyaWRsaW5lcyJdKT8idHJhbnNwYXJlbnQiOiJibGFjayIpKyI7IHdoaXRlLXNwYWNlOm5vd3JhcDsgdGV4dC1vdmVyZmxvdzpl'@;
put 'bGxpcHNpc308L3N0eWxlPiIpLHBuLnB1c2goJzxjb2xncm91cCBzcGFuPSInKyhudC5lLmMtbnQucy5jKzEpKyciPicpLGN0KXtmb3IodmFyIHVuPW50LnMuYzt1bjxNYXRoLm1pbihjdC5sZW5ndGgsbnQuZS5jKzEpOysrdW4pIShLbj1jdFt1bl0pJiZidCYmYnQuY29sJiYoS249YnQuY29s'@;
put 'KSxLbnx8KEtuPXt3cHg6NTN9KSxwbi5wdXNoKF9lKEtuLDEpKTtudC5lLmMtbnQucy5jKzE+Y3QubGVuZ3RoJiYoS249bnVsbCxidCYmYnQuY29sJiYoS249YnQuY29sKSxLbnx8KEtuPXt3cHg6NTN9KSxwbi5wdXNoKF9lKEtuLG50LmUuYy1udC5zLmMrMS1jdC5sZW5ndGgpKSl9ZWxzZSBL'@;
put 'bj1udWxsLGJ0JiZidC5jb2wmJihLbj1idC5jb2wpLEtufHwoS249e3dweDo1M30pLHBuLnB1c2goX2UoS24sbnQuZS5jLW50LnMuYysxKSk7cmV0dXJuIHBuLnB1c2goIjwvY29sZ3JvdXA+IikscG4uam9pbigiIil9dmFyIFNlPSc8aHRtbD48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIv'@;
put 'Pjx0aXRsZT5TaGVldEpTIFRhYmxlIEV4cG9ydDwvdGl0bGU+PC9oZWFkPjxib2R5PicsSGU9IjwvYm9keT48L2h0bWw+IjtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShHZSxudCl7cmV0dXJuIEVkKEwoR2UsbnQpLG50KX0sdG9fc2hlZXQ6TCxfcm93OnJlLEJFR0lOOlNlLEVORDpI'@;
put 'ZSxfcHJlYW1ibGU6dmUsaHRtbF90b19yczpmdW5jdGlvbiBQKEdlKXt2YXIgbnQ9W10sZHQ9e30sQ3Q9MDtyZXR1cm4gR2UucmVwbGFjZSgvPChcLz8pKFteXHM/PiFcLzpdKjp8KShbXlxzPz46XC9dKylbXj5dKj4vZ20sZnVuY3Rpb24oY3QsYnQsRnQsa3QsVHQpe3ZhciBwbj1qbihsbihj'@;
put 'dClbMF0pLnJlcGxhY2UoL1s8XC8+XS9nLCIiKSxLbj1HZS5zbGljZShDdCxUdCkucmVwbGFjZSgvXHMvZywiICIpO3N3aXRjaChLbi5sZW5ndGg+MCYmKG50LnB1c2goe3Q6InMiLHY6S24sczpkdH0pLGR0PW9uKGR0KSkscG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJiIjoiLyIhPWJ0P2R0LmJv'@;
put 'bGQ9ITA6ZGVsZXRlIGR0LmJvbGQ7YnJlYWs7Y2FzZSJpIjoiLyIhPWJ0P2R0Lml0YWxpYz0hMDpkZWxldGUgZHQuaXRhbGljO2JyZWFrO2Nhc2UidSI6Ii8iIT1idD9kdC51bmRlcmxpbmU9MTpkZWxldGUgZHQudW5kZXJsaW5lO2JyZWFrO2Nhc2UicyI6Ii8iIT1idD9kdC5zdHJpa2U9ITA6'@;
put 'ZGVsZXRlIGR0LnN0cmlrZX1yZXR1cm4gQ3Q9VHQrY3QubGVuZ3RoLGN0fSksbnR9LGZyb21fc2hlZXQ6ZnVuY3Rpb24gQmUoR2UsbnQpe3ZhciBkdD1udHx8e30sY3Q9bnVsbCE9ZHQuZm9vdGVyP2R0LmZvb3RlcjpIZSxidD1bbnVsbCE9ZHQuaGVhZGVyP2R0LmhlYWRlcjpTZSwiIl0sRnQ9'@;
put 'W10sa3Q9KG5ldyBEYXRlKS52YWx1ZU9mKCk7R2V8fChHZT17fSksR2VbIiFyZWYiXXx8KEdlWyIhcmVmIl09IkExOkExIik7dmFyIFR0PVdzKEdlWyIhcmVmIl0pO2lmKGR0LmRlbnNlPUFycmF5LmlzQXJyYXkoR2UpLGR0LnNraXBlbmQpe3ZhciBadD1UdC5lLnI7ZTpmb3IoO1p0Pj1UdC5z'@;
put 'LnI7LS1adClmb3IodmFyIHBuPVR0LmUuYztwbj49VHQucy5jOy0tcG4paWYobnVsbCE9KChkdC5kZW5zZT8oR2VbWnRdfHxbXSlbcG5dOkdlW2RpKHtyOlp0LGM6cG59KV0pfHx7fSkudilicmVhayBlO1R0LmUucj1adDt2YXIgS249VHQuZS5jO2U6Zm9yKDtLbj49VHQucy5jOy0tS24pZm9y'@;
put 'KHZhciB1bj1UdC5lLnI7dW4+PVR0LnMucjstLXVuKWlmKG51bGwhPSgoZHQuZGVuc2U/KEdlW3VuXXx8W10pW0tuXTpHZVtkaSh7cjp1bixjOktufSldKXx8e30pLnYpYnJlYWsgZTtUdC5lLmM9S259YnQucHVzaCh2ZShHZSxUdCxkdCkpO2Zvcih2YXIgcW49VHQucy5yO3FuPD1UdC5lLnI7'@;
put 'KytxbilidC5wdXNoKHJlKEdlLFR0LHFuLGR0LEZ0LGt0KSk7cmV0dXJuIGJ0LnB1c2goIjwvdGFibGU+IitjdCksZHQuY3NzJiYoYnRbMV09IjxzdHlsZT5cbiIrRnQubWFwKGZ1bmN0aW9uKHpuLGtuKXtyZXR1cm4iLnNqcyIra3QrIi0iK2tuKyIgeyIrem4rIn0ifSkuam9pbigiXG4iKSsi'@;
put 'PC9zdHlsZT4iKSxidC5qb2luKCIiKX19fSgpO2Z1bmN0aW9uIHZmKHksUCxMKXt2YXIgUT17fTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZT4idSIpcmV0dXJuIFE7dmFyIHJlPWdldENvbXB1dGVkU3R5bGUoeSk7aWYoKDcwMD09cmVbImZvbnQtd2VpZ2h0Il18fCJib2xkIj09cmVbImZv'@;
put 'bnQtd2VpZ2h0Il0pJiYoUS5ib2xkPSEwKSwocmVbImZvbnQtc3R5bGUiXXx8IiIpLm1hdGNoKC9pdGFsaWMvKSYmKFEuaXRhbGljPSEwKSwocmVbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL3VuZGVybGluZS8pJiYoUS51bmRlcmxpbmU9MSksKHJlWyJ0ZXh0LWRlY29yYXRpb24i'@;
put 'XXx8IiIpLm1hdGNoKC9saW5lLXRocm91Z2gvKSYmKFEuc3RyaWtlPTEpLHBhcnNlSW50KHJlWyJmb250LXNpemUiXSkmJihRLnN6PXBhcnNlRmxvYXQocmVbImZvbnQtc2l6ZSJdKSoocmVbImZvbnQtc2l6ZSJdLm1hdGNoKC9weC8pPzMvNDoxKSkscmVbImZvbnQtZmFtaWx5Il0mJihRLm5h'@;
put 'bWU9cmVbImZvbnQtZmFtaWx5Il0uc3BsaXQoIiwiKVswXS5yZXBsYWNlKC9ccyoiXHMqL2csIiIpKSxyZS5jb2xvcil7dmFyIGdlPU40KHJlLmNvbG9yLnRvTG93ZXJDYXNlKCksITApO2dlPj0wJiYoUS5jb2xvcj17cmdiOmdlfSl9c3dpdGNoKHJlWyJ0ZXh0LXRyYW5zZm9ybSJdJiYoUS50'@;
put 'ZXh0X3RyYW5zZm9ybT1yZVsidGV4dC10cmFuc2Zvcm0iXS50b0xvd2VyQ2FzZSgpKSwibm9uZSIhPShyZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKFEuc2hhZG93PSEwKSxyZVsidGV4dC1hbGlnbiJdKXtjYXNlImNlbnRlciI6US5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImNlbnRlciJ9'@;
put 'O2JyZWFrO2Nhc2UicmlnaHQiOlEuYWxpZ25tZW50PXtob3Jpem9udGFsOiJyaWdodCJ9O2JyZWFrO2Nhc2UibGVmdCI6US5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImxlZnQifTticmVhaztjYXNlImp1c3RpZnkiOlEuYWxpZ25tZW50PXtob3Jpem9udGFsOiJqdXN0aWZ5In19c3dpdGNoKHJl'@;
put 'WyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlInRvcCI6Y2FzZSJtaWRkbGUiOmNhc2UiYm90dG9tIjpRLmFsaWdubWVudHx8KFEuYWxpZ25tZW50PXt9KSxRLmFsaWdubWVudC52ZXJ0aWNhbD1yZVsidmVydGljYWwtYWxpZ24iXSwibWlkZGxlIj09US5hbGlnbm1lbnQudmVydGljYWwmJihRLmFs'@;
put 'aWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIik7YnJlYWs7Y2FzZSJzdWIiOmNhc2Uic3VwZXIiOlEudmFsaWduPXJlWyJ2ZXJ0aWNhbC1hbGlnbiJdLFEuc3omJihRLnN6Lz0uODMpfXZhciBfZT1QJiZnZXRDb21wdXRlZFN0eWxlKFApO3JldHVybiBfZSYmTCYmUCYmWyJsZWZ0IiwicmlnaHQi'@;
put 'LCJ0b3AiLCJib3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgU2U9dmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdmUuc2xpY2UoMSksSGU9X2VbImJvcmRlci0iK3ZlKyItc3R5bGUiXTtpZigoIm5vbmUiPT1IZXx8IUhlKSYmKEhlPV9lWyJib3JkZXIiK1NlKyJTdHlsZSJdKSwi'@;
put 'bm9uZSIhPUhlJiZIZSl7dmFyIEJlPXBhcnNlSW50KF9lWyJib3JkZXItIit2ZSsiLXdpZHRoIl18fF9lWyJib3JkZXIiK1NlKyJXaWR0aCJdLDEwKSxHZT0idGhpbiI7aWYoQmU+MCl7c3dpdGNoKEhlKXtjYXNlImRvdWJsZSI6R2U9ImRvdWJsZSI7YnJlYWs7Y2FzZSJkYXNoZWQiOkdlPUJl'@;
put 'Pj0yPyJtZWRpdW1EYXNoZWQiOiJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpHZT1CZT49Mj8ibWVkaXVtRGFzaERvdERvdCI6ImRvdHRlZCI7YnJlYWs7Y2FzZSJzb2xpZCI6R2U9QmU+PTM/InRoaWNrIjpCZT49Mj8ibWVkaXVtIjoidGhpbiJ9aWYoUVt2ZV09e3N0eWxlOkdlfSxfZVsi'@;
put 'Ym9yZGVyLSIrdmUrIi1jb2xvciJdfHxfZVsiYm9yZGVyIitTZSsiQ29sb3IiXSl7dmFyIG50PU40KChfZVsiYm9yZGVyLSIrdmUrIi1jb2xvciJdfHxfZVsiYm9yZGVyIitTZSsiQ29sb3IiXSkudG9Mb3dlckNhc2UoKSwhMCk7bnQ+PTAmJihRW3ZlXS5jb2xvcj17cmdiOm50fSl9fX19KSxR'@;
put 'fWZ1bmN0aW9uIG9fKHksUCxMKXt2YXIgUT15LmNoaWxkTm9kZXM7aWYoMT09eS5ub2RlVHlwZSlzd2l0Y2goeS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UicCI6UC5sZW5ndGg+MCYmUC5wdXNoKHt0OiJ0Iix2OiJcbiIsczpMfSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnJldHVybiBmdW5j'@;
put 'dGlvbiBhUih5LFAsTCl7UC5wdXNoKHt0OiJ0Iix2OnkuY2hpbGRyZW5beS5zZWxlY3RlZEluZGV4XS5pbm5lclRleHQsczpMfSl9KHksUCxMKX1pZihRLmxlbmd0aD4wKXt2YXIgcmU9dmYoeSxudWxsLCExKTtMJiYoTC51bmRlcmxpbmUmJihyZS51bmRlcmxpbmU9TC51bmRlcmxpbmUpLEwu'@;
put 'c3RyaWtlJiYocmUuc3RyaWtlPUwuc3RyaWtlKSk7Zm9yKHZhciBnZT0wO2dlPFEubGVuZ3RoOysrZ2Upe3RyeXtpZihRW2dlXS5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpY29udGludWV9Y2F0Y2h7fW9fKFFbZ2VdLFAscmUpfWRlbGV0ZSByZS50ZXh0X3RyYW5zZm9ybX1lbHNlIGlm'@;
put 'KDM9PXkubm9kZVR5cGUpe3ZhciBfZT17dDoidCIsdjp5Lm5vZGVWYWx1ZS5yZXBsYWNlKC9eW1xuIF0rLywiICIpLnJlcGxhY2UoL1tcbiBdKyQvLCIgIiksczpMfTtzd2l0Y2goTC50ZXh0X3RyYW5zZm9ybSl7Y2FzZSJ1cHBlcmNhc2UiOl9lLnY9X2Uudi50b1VwcGVyQ2FzZSgpO2JyZWFr'@;
put 'O2Nhc2UibG93ZXJjYXNlIjpfZS52PV9lLnYudG9Mb3dlckNhc2UoKX0oUC5sZW5ndGg+MHx8X2UudiYmIiAiIT1fZS52KSYmUC5wdXNoKF9lKX1lbHNlIDE9PXkubm9kZVR5cGUmJiJiciI9PT15LnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmUC5wdXNoKHt0OiJ0Iix2OiJcbiIsczpMfSl9ZnVu'@;
put 'Y3Rpb24gc18oeSxQLEwsUSxyZSl7dmFyIF9lLGdlPXkuaW5uZXJIVE1MO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Iilzd2l0Y2goX2U9Z2V0Q29tcHV0ZWRTdHlsZSh5KSwoX2VbIndoaXRlLXNwYWNlIl18fCIiKS5tYXRjaCgvcHJlLykmJihnZT1nZS5yZXBsYWNlKC9cbi9nLCI8'@;
put 'YnIvPiIpKSwoX2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2FzZSI6Z2U9Z2UudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6Z2U9Z2UudG9Mb3dlckNhc2UoKX12YXIgdmU9ZnVuY3Rpb24gc1IoeSxQLEwsUSl7dmFyIHJlPXt0'@;
put 'OiJzIix2OlB9LGdlPSIiO2lmKHkpe0w9eS5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpfHx5LmdldEF0dHJpYnV0ZSgidCIpO3ZhciBfZT15LmdldEF0dHJpYnV0ZSgiZGF0YS12Iil8fHkuZ2V0QXR0cmlidXRlKCJ2Iik7aWYobnVsbCE9KGdlPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXoiKXx8eS5n'@;
put 'ZXRBdHRyaWJ1dGUoInoiKSkmJihyZS56PWdlKSxudWxsIT1MJiZudWxsIT1fZSlyZXR1cm4gcmUudD1MLHJlLnY9X2UscmV9cmV0dXJuIG51bGwhPVAmJigwPT1QLmxlbmd0aD9yZS50PUx8fCJ6IjpRLnJhd3x8IVAudHJpbSgpLmxlbmd0aHx8InMiPT1MfHwocmU9JG4oUCxRKSkpLGdlJiYo'@;
put 'cmUuej1nZSkscmV9KHksT2MoZ2UpLEwscmUpO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1IiYmKHZlLnM9dmYoeSxQLHJlLmJvcmRlcnMpLGRlbGV0ZSB2ZS5zLnRleHRfdHJhbnNmb3JtLHkuY2hpbGROb2Rlcy5sZW5ndGg+MXx8MT09eS5jaGlsZE5vZGVzLmxlbmd0aCYmMyE9eS5j'@;
put 'aGlsZE5vZGVzWzBdLm5vZGVUeXBlKSlzd2l0Y2gob18oeSx2ZS5SPVtdLG51bGwpLHZlLlImJnZlLlJbdmUuUi5sZW5ndGgtMV0mJiJcbiI9PXZlLlJbdmUuUi5sZW5ndGgtMV0udiYmdmUuUi5sZW5ndGgtLSwoX2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNl'@;
put 'InVwcGVyY2FzZSI6dmUuUi5mb3JFYWNoKGZ1bmN0aW9uKG50KXtudC52PW50LnYudG9VcHBlckNhc2UoKX0pO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjp2ZS5SLmZvckVhY2goZnVuY3Rpb24obnQpe250LnY9bnQudi50b0xvd2VyQ2FzZSgpfSl9aWYoInMiPT12ZS50KXt2YXIgU2U9dmUudi5t'@;
put 'YXRjaCgvXG4vKTshU2UmJnZlLlImJnZlLlIuZm9yRWFjaChmdW5jdGlvbihudCl7InN0cmluZyI9PXR5cGVvZiBudC52JiZudC52Lm1hdGNoKC9cbi8pJiYoU2U9ITApfSksInMiPT12ZS50JiZTZSYmKHZlLnN8fCh2ZS5zPXt9KSx2ZS5zLmFsaWdubWVudHx8KHZlLnMuYWxpZ25tZW50PXt9'@;
put 'KSx2ZS5zLmFsaWdubWVudC53cmFwVGV4dD0hMCl9aWYoUCl7dmFyIEhlPSIiLEJlPVAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkEiKTtpZihCZSYmQmUubGVuZ3RoKWZvcih2YXIgR2U9MDtHZTxCZS5sZW5ndGgmJighQmVbR2VdLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfHwiIyI9PShIZT1CZVtH'@;
put 'ZV0uZ2V0QXR0cmlidXRlKCJocmVmIikpLmNoYXJBdCgwKSk7KytHZSk7SGUmJiIjIiE9SGUuY2hhckF0KDApJiYodmUubD17VGFyZ2V0OkhlfSl9cmV0dXJuIHZlfWZ1bmN0aW9uIEFNKHksUCxMKXt2YXIgcmUsUT1QLnJvd3M7aWYoIVEpe2lmKEwmJm51bGwhPUwub3JpZ2luKXRocm93IlVu'@;
put 'c3VwcG9ydGVkIG9yaWdpbiB3aGVuICIrUC50YWdOYW1lKyIgaXMgbm90IGEgVEFCTEUiO3JldHVybiBmdW5jdGlvbiBrTSh5LFAsTCl7TD1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEx8fHt9KSk7dmFyIGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07eVsiIW1lcmdlcyJdfHwoeVsi'@;
put 'IW1lcmdlcyJdPVtdKTtmb3IodmFyIHZlLF9lPVAuY2hpbGRyZW4sU2U9MCxIZT0wO0hlPF9lLmxlbmd0aDsrK0hlKXt2YXIgbnQsQmU9X2VbSGVdLEdlPSIiO3RyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/bnQ9Z2V0Q29tcHV0ZWRTdHlsZTpCZS5vd25lckRvY3VtZW50LmRlZmF1'@;
put 'bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgQmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYobnQ9QmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9aWYoIW50fHwibm9uZSIhPW50KEJlKS5kaXNwbGF5KXN3'@;
put 'aXRjaChCZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpe2Nhc2UiVEFCTEUiOlNlPS0xLHlbIiFyZWYiXSYmKEwub3JpZ2luPS0xKSxBTSh5LEJlLEwpO2JyZWFrO2Nhc2UiQlIiOmNhc2UiSFIiOlNlPS0xLHlbIiFyZWYiXT8oKysoZ2U9V3MoeVsiIXJlZiJdKSkuZS5yLHlbIiFyZWYiXT1Pbyhn'@;
put 'ZSkpOnlbIiFyZWYiXT0iQTE6QTEiO2JyZWFrO2Nhc2UiRElWIjpjYXNlIlAiOmNhc2UiSDEiOmNhc2UiSDIiOmNhc2UiSDMiOmNhc2UiSDQiOmNhc2UiSDUiOmNhc2UiSDYiOlNlPS0xLHZlPXNfKEJlLG51bGwsIiIsMCxMKSx5WyIhcmVmIl0/KEwub3JpZ2luPS0xLHMwKHksW1t2ZV1dLEwp'@;
put 'KTooeVsiIXJlZiJdPSJBMSIsQXJyYXkuaXNBcnJheSh5KT8oeVswXXx8KHlbMF09W10pLHlbMF1bMF09dmUpOnkuQTE9dmUpLHlbIiFyb3dzIl18fCh5WyIhcm93cyJdPVtdKSxudCYmKGdlPVdzKHlbIiFyZWYiXSksKEdlPW50KEJlKS5oZWlnaHQpJiYiYXV0byIhPUdlJiYoeVsiIXJvd3Mi'@;
put 'XVtnZS5lLnJdPXtocHQ6cGFyc2VJbnQoR2UsMTApfSkpO2JyZWFrO2Nhc2UiU1BBTiI6Y2FzZSJBIjpjYXNlIkIiOmNhc2UiRU0iOmNhc2UiSSI6Y2FzZSJGT05UIjpjYXNlIlMiOmNhc2UiU1VCIjpjYXNlIlNVUCI6Y2FzZSJVIjp2ZT1zXyhCZSxudWxsLCIiLDAsTCkseVsiIXJlZiJdfHwo'@;
put 'eVsiIXJlZiJdPSJBMTpBMSIpLHMwKHksW1t2ZV1dLHtvcmlnaW46ZGkoe3I6KFNlPDA/MTowKSsoZ2U9V3MoeVsiIXJlZiJdKSkuZS5yLGM6KytTZX0pfSk7YnJlYWs7Y2FzZSJETCI6Y2FzZSJVTCI6Y2FzZSJPTCI6U2U9LTEsY29uc29sZS5lcnJvcigiSFRNTCBDb252ZXJzaW9uIGRvZXMg'@;
put 'bm90IHN1cHBvcnQgbGlzdCBlbGVtZW50ICIrQmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKTticmVhaztkZWZhdWx0OlNlPS0xLGNvbnNvbGUuZXJyb3IoIlNraXBwaW5nICIrQmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKX19cmV0dXJuIHl9KHksUCxMKX10cnl7dHlwZW9mIGdldENvbXB1dGVk'@;
put 'U3R5bGU8InUiP3JlPWdldENvbXB1dGVkU3R5bGU6UC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgUC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihyZT1QLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0'@;
put 'ZWRTdHlsZSl9Y2F0Y2h7fXZhciBnZT1MfHx7fTtudWxsIT10ZSYmKGdlLmRlbnNlPXRlKTt2YXIgX2U9MCx2ZT0wO2lmKG51bGwhPWdlLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIGdlLm9yaWdpbilfZT1nZS5vcmlnaW47ZWxzZXt2YXIgU2U9InN0cmluZyI9PXR5cGVvZiBnZS5vcmln'@;
put 'aW4/c3MoZ2Uub3JpZ2luKTpnZS5vcmlnaW47X2U9U2Uucix2ZT1TZS5jfXZhciBIZT1NYXRoLm1pbihnZS5zaGVldFJvd3N8fDFlNyxRLmxlbmd0aCksQmU9e3M6e3I6MCxjOjB9LGU6e3I6X2UsYzp2ZX19O2lmKHlbIiFyZWYiXSl7dmFyIEdlPVdzKHlbIiFyZWYiXSk7QmUucy5yPU1hdGgu'@;
put 'bWluKEJlLnMucixHZS5zLnIpLEJlLnMuYz1NYXRoLm1pbihCZS5zLmMsR2Uucy5jKSxCZS5lLnI9TWF0aC5tYXgoQmUuZS5yLEdlLmUuciksQmUuZS5jPU1hdGgubWF4KEJlLmUuYyxHZS5lLmMpLC0xPT1fZSYmKEJlLmUucj1fZT1HZS5lLnIrMSl9dmFyIG50PVtdLGR0PTAsQ3Q9eVsiIXJv'@;
put 'd3MiXXx8KHlbIiFyb3dzIl09W10pLGN0PTAsYnQ9MCxGdD0wLGt0PTAsVHQ9MCxadD0wO2Zvcih5WyIhY29scyJdfHwoeVsiIWNvbHMiXT1bXSk7Y3Q8US5sZW5ndGgmJmJ0PEhlOysrY3Qpe2Zvcih2YXIgcG49UVtjdF0sS249cG4ucGFyZW50RWxlbWVudDsiVEFCTEUiIT1Lbi50YWdOYW1l'@;
put 'LnRvVXBwZXJDYXNlKCk7KUtuPUtuLnBhcmVudEVsZW1lbnQ7aWYoS249PVApe2U6aWYodHlwZW9mIHJlPCJ1Iil7dmFyIHVuPXJlKHBuKTtpZihudWxsPT11bilicmVhayBlO2lmKHVuLnN0eWxlfHwodW4uc3R5bGU9e30pLGdlLmRpc3BsYXkmJiJub25lIj09KHVuLmRpc3BsYXl8fHVuLnN0'@;
put 'eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25lIj09KHVuLmRpc3BsYXl8fHVuLnN0eWxlLmRpc3BsYXkpJiYoKEN0W2J0XXx8KEN0W2J0XT17fSkpLmhpZGRlbj0hMCl9dmFyIHFuPXBuLmNlbGxzO2ZvcihGdD1rdD0wO0Z0PHFuLmxlbmd0aDsrK0Z0KXt2YXIgem49cW5bRnRdLGtuPW51bGw7'@;
put 'aWYoISh0eXBlb2YgcmU8InUiJiYobnVsbD09a24mJihrbj1yZSh6bikpLGtuLnN0eWxlfHwoa24uc3R5bGU9e30pLGdlLmRpc3BsYXkmJm51bGwhPWtuJiYibm9uZSI9PShrbi5kaXNwbGF5fHxrbi5zdHlsZS5kaXNwbGF5KSkpKXtmb3IoWnQ9K3puLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIp'@;
put 'fHwxLGR0PTA7ZHQ8bnQubGVuZ3RoOysrZHQpe3ZhciBlcj1udFtkdF07ZXIucy5jPT1rdCt2ZSYmZXIucy5yPGJ0K19lJiZidCtfZTw9ZXIuZS5yJiYoa3Q9ZXIuZS5jKzEtdmUsZHQ9LTEpfSgoVHQ9K3puLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpfHwxKT4xfHxadD4xKSYmbnQucHVzaCh7'@;
put 'czp7cjpidCtfZSxjOmt0K3ZlfSxlOntyOmJ0K19lKyhUdHx8MSktMSxjOmt0K3ZlKyhadHx8MSktMX19KTt2YXIgdHI9em4uZ2V0QXR0cmlidXRlKCJ0Iil8fCIiLFpuPXpuLmdldEF0dHJpYnV0ZSgiYmdjb2xvciIpO2U6aWYodHlwZW9mIHJlPCJ1Iil7aWYobnVsbD09a24mJihrbj1yZSh6'@;
put 'bikpLG51bGw9PWtuKWJyZWFrIGU7aWYoa24uc3R5bGV8fChrbi5zdHlsZT17fSksMT09WnQmJmtuLndpZHRoJiYoeVsiIWNvbHMiXVtrdCt2ZV09eVsiIWNvbHMiXVtrdCt2ZV18fHt9LGtuLndpZHRoLm1hdGNoKC9weC8pP3lbIiFjb2xzIl1ba3QrdmVdLndweD1NYXRoLm1heChwYXJzZUlu'@;
put 'dChrbi53aWR0aCwxMCkrNSx5WyIhY29scyJdW2t0K3ZlXS53cHh8fDApOmtuLndpZHRoLm1hdGNoKC9wdC8pJiYoeVsiIWNvbHMiXVtrdCt2ZV0ud3B4PU1hdGgubWF4KDQqcGFyc2VJbnQoa24ud2lkdGgsMTApLzMrNSx5WyIhY29scyJdW2t0K3ZlXS53cHh8fDApKSksVHQ8PTEpe0N0W2J0'@;
put 'K19lXXx8KEN0W2J0K19lXT17fSk7dmFyIEJyPWtuLmhlaWdodDsoQnI9QnIubWF0Y2goL3B0Lyk/VTEocGFyc2VJbnQoQnIsMTApKTpwYXJzZUludChCciwxMCkpPihDdFtidCtfZV0uaHB4fHxVMShDdFtidCtfZV0uaHB0KXx8MCkmJihkZWxldGUgQ3RbYnQrX2VdLmhwdCxDdFtidCtfZV0u'@;
put 'aHB4PUJyKX19dmFyIG9pPXpuO2lmKHpuLmZpcnN0RWxlbWVudENoaWxkJiYxPT16bi5jaGlsZHJlbi5sZW5ndGgmJiJzcGFuIj09em4uZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBraT0wLExpPXpuLmNoaWxkTm9kZXMsUXI9MDtRcjxMaS5sZW5n'@;
put 'dGg7KytRcikzPT1MaVtRcl0ubm9kZVR5cGUmJisra2k7MD09a2kmJih6bj16bi5maXJzdEVsZW1lbnRDaGlsZCl9dmFyIHVyPXNfKHpuLG9pLHRyLDAsZ2UpO2lmKGtuKXt2YXIgQW49cmUoem4pO2lmKEFuJiYhQW4uc3R5bGUmJihBbi5zdHlsZT17fSksKEFuJiZBblsiYmFja2dyb3VuZC1j'@;
put 'b2xvciJdfHxrblsiYmFja2dyb3VuZC1jb2xvciJdKSYmKHVyLnN8fCh1ci5zPXt9KSwhdXIucy5mZ0NvbG9yKSl0cnl7dmFyIHZyPUFuJiZBblsiYmFja2dyb3VuZC1jb2xvciJdfHxrblsiYmFja2dyb3VuZC1jb2xvciJdO3ZyLm1hdGNoKC9yZ2JhWyhdXHMqMC4qWyldL2kpJiYodnI9a25b'@;
put 'ImJhY2tncm91bmQtY29sb3IiXSk7dmFyIHJyPU40KHZyLnRvTG93ZXJDYXNlKCksITApO3JyPj0wJiYodXIucy5mZ0NvbG9yPXtyZ2I6cnJ9KX1jYXRjaHt9c3dpdGNoKGtuWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlIm1pZGRsZSI6Y2FzZSJiYXNlbGluZSI6dXIuc3x8KHVyLnM9e30pLHVy'@;
put 'LnMuYWxpZ25tZW50fHwodXIucy5hbGlnbm1lbnQ9e30pLHVyLnMuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIifX1pZihabiYmKHVyLnN8fCh1ci5zPXt9KSwhdXIucy5mZ0NvbG9yKSl0cnl7dmFyIFNuPU40KFpuLnRvTG93ZXJDYXNlKCksITApO1NuPj0wJiYodXIucy5mZ0NvbG9yPXty'@;
put 'Z2I6U259KX1jYXRjaHt9aWYoZ2UuZGVuc2U/KHlbYnQrX2VdfHwoeVtidCtfZV09W10pLHlbYnQrX2VdW2t0K3ZlXT11cik6eVtkaSh7YzprdCt2ZSxyOmJ0K19lfSldPXVyLFR0PjF8fFp0PjEpZm9yKHZhciBncj1idDtncjxidCtUdDsrK2dyKWZvcih2YXIgQ2k9a3Q7Q2k8a3QrWnQ7KytD'@;
put 'aSlidD09Z3ImJmt0PT1DaXx8KGdlLmRlbnNlPyh5W2dyK19lXXx8KHlbZ3IrX2VdPVtdKSx5W2dyK19lXVtDaSt2ZV09e3Q6InoiLHM6b24odXIuc3x8e30pfSk6eVtkaSh7YzpDaSt2ZSxyOmdyK19lfSldPXt0OiJ6IixzOm9uKHVyLnN8fHt9KX0pO0JlLmUuYzxrdCt2ZSYmKEJlLmUuYz1r'@;
put 'dCt2ZSksa3QrPVp0fX0rK2J0fX1pZihudC5sZW5ndGgmJih5WyIhbWVyZ2VzIl09KHlbIiFtZXJnZXMiXXx8W10pLmNvbmNhdChudCkpLEJlLmUucj1NYXRoLm1heChCZS5lLnIsYnQtMStfZSkseVsiIXJlZiJdPU9vKEJlKSxidD49SGUmJih5WyIhZnVsbHJlZiJdPU9vKChCZS5lLnI9US5s'@;
put 'ZW5ndGgtY3QrYnQtMStfZSxCZSkpKSxnZS5ib3JkZXJzKWZvcihidD1CZS5zLnI7YnQ8PUJlLmUucjsrK2J0KWZvcihrdD1CZS5zLmM7a3Q8PUJlLmUuYzsrK2t0KWlmKCFnZS5kZW5zZSl7dmFyIHpyPXlbZGkoe3I6YnQsYzprdH0pXTtpZighenJ8fCF6ci5zKWNvbnRpbnVlO2lmKGJ0PjAp'@;
put 'e3ZhciBqaT15W2RpKHtyOmJ0LTEsYzprdH0pXTtqaSYmamkucyYmamkucy5ib3R0b20mJmRlbGV0ZSB6ci5zLnRvcH1pZihrdD4wKXt2YXIgX289eVtkaSh7cjpidCxjOmt0LTF9KV07X28mJl9vLnMmJl9vLnMuYm90dG9tJiZkZWxldGUgenIucy5sZWZ0fX1yZXR1cm4geX1mdW5jdGlvbiBI'@;
put 'dSh5LFApe3JldHVybiBBTSgoUHx8e30pLmRlbnNlP1tdOnt9LHksUCl9dmFyIFEwPWZ1bmN0aW9uKCl7dmFyIHk9ZnVuY3Rpb24oUSxyZSxnZSl7dmFyIF9lPVEucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9n'@;
put 'LCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKEJlLEdlKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoR2UsMTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wv'@;
put 'Pi9nLCJcbiIpLHZlPXhyKF9lLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLFNlPVtdLEhlPTA7cmV0dXJuIF9lLnJlcGxhY2UoLyg8dGV4dDpzcGFuLio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKEJlLEdlLG50LGR0KXtkdCE9SGUmJlNlLnB1c2goe3Q6InMiLHY6eHIoX2Uu'@;
put 'c2xpY2UoSGUsZHQpKX0pO3ZhciBDdD17dDoicyIsdjp4cihudCl9LGN0PWxuKEdlKVsic3R5bGUtbmFtZSJdO3JldHVybiBjdCYmZ2VbY3RdJiYoQ3Qucz1vbihnZVtjdF0pKSxTZS5wdXNoKEN0KSxIZT1kdCtCZS5sZW5ndGgsIiJ9KSxIZTxfZS5sZW5ndGgmJlNlLnB1c2goe3Q6InMiLHY6'@;
put 'eHIoX2Uuc2xpY2UoSGUpKX0pLFt2ZSxTZV19LFA9e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJzOlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9m'@;
put 'LXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LEw9ZnVuY3Rpb24oUSxyZSl7dmFyIGdlPWxuKFEuc2xpY2UoMCxRLmluZGV4T2YoIj4iKSkpLF9lPVEuc2xpY2UoUS5pbmRleE9mKCI+IikrMSksdmU9e25hbWU6'@;
put 'Z2UubmFtZSxmYW1pbHk6Z2UuZmFtaWx5fTtbWyJwYXJlbnQiLCJwYXJlbnQtc3R5bGUtbmFtZSJdLFsiZGF0YW5hbWUiLCJkYXRhLXN0eWxlLW5hbWUiXSxbIm1wbmFtZSIsIm1hc3Rlci1wYWdlLW5hbWUiXV0uZm9yRWFjaChmdW5jdGlvbihIZSl7Z2VbSGVbMV1dJiYodmVbSGVbMF1dPWdl'@;
put 'W0hlWzFdXSl9KTt2YXIgU2U9e307X2UucmVwbGFjZSgkdCxmdW5jdGlvbihIZSl7dmFyIEJlPWxuKEhlKTtpZigiPHN0eWxlOnRleHQtcHJvcGVydGllcyI9PT1CZVswXSl7aWYoQmVbImZvbnQtd2VpZ2h0Il0mJihTZS5ib2xkPSsoImJvbGQiPT1CZVsiZm9udC13ZWlnaHQiXXx8IjcwMCI9'@;
put 'PUJlWyJmb250LXdlaWdodCJdKSksKCJpdGFsaWMiPT1CZVsiZm9udC1zdHlsZSJdfHwib2JsaXF1ZSI9PUJlWyJmb250LXN0eWxlIl0pJiYoU2UuaXRhbGljPTEpLCJub25lIiE9KEJlWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSIpP1NlLnVuZGVybGluZT0iZG91YmxlIj09QmVb'@;
put 'InRleHQtdW5kZXJsaW5lLXR5cGUiXT8yOjE6KEJlWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSI9PUJlWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0pJiYoU2UudW5kZXJsaW5lPTApLChCZVsiZm9udC1zaXplIl18fCIiKS5tYXRjaCgvcHQkLykmJihTZS5zej0rQmVbImZvbnQtc2l6'@;
put 'ZSJdLnJlcGxhY2UoInB0IiwiIikpLCJub25lIiE9KEJlWyJ0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdfHwibm9uZSIpJiYoU2Uuc3RyaWtlPTEpLEJlWyJmb250LW5hbWUiXSYmKFNlLm5hbWU9QmVbImZvbnQtbmFtZSJdKSxCZS5jb2xvcil7dmFyIEdlPU40KEJlLmNvbG9yLCEwKTtHZT49'@;
put 'MCYmKFNlLmNvbG9yPUdlKX1zd2l0Y2goQmVbInRleHQtcG9zaXRpb24iXSl7Y2FzZSJzdXBlciI6U2UudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSJzdWIiOlNlLnZhbGlnbj0ic3ViIjticmVhaztkZWZhdWx0OihCZVsidGV4dC1wb3NpdGlvbiJdfHwiIikubWF0Y2goLyUvKSYmKFNlLnZh'@;
put 'bGlnbj0iLSI9PUJlWyJ0ZXh0LXBvc2l0aW9uIl0uY2hhckF0KDApPyJzdWIiOiJzdXBlciIpfSJub25lIiE9KEJlWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoU2Uuc2hhZG93PTEpfXJldHVybiIifSkscmVbZ2UubmFtZV09U2V9O3JldHVybiBmdW5jdGlvbihyZSxnZSl7dmFyIF9lPWdl'@;
put 'fHx7fTtudWxsIT10ZSYmbnVsbD09X2UuZGVuc2UmJihfZS5kZW5zZT10ZSk7dmFyIEhlLEJlLEN0LGN0LFR0LFp0LHZlPVF2KHJlKSxTZT1bXSxHZT17bmFtZToiIn0sbnQ9IiIsZHQ9MCxidD17fSxGdD1bXSxrdD1fZS5kZW5zZT9bXTp7fSxwbj17dmFsdWU6IiJ9LEtuPSIiLHVuPTAsem49'@;
put 'W10sa249LTEsZXI9LTEsdHI9e3M6e3I6MWU2LGM6MWU3fSxlOntyOjAsYzowfX0sWm49MCxCcj17fSxvaT1bXSxraT17fSxMaT0wLFFyPTAsdXI9W10sQW49MSx2cj0xLHJyPVtdLFNuPXtOYW1lczpbXX0sZ3I9e30sQ2k9WyIiLCIiXSx6cj1bXSxqaT17fSxfbz17fSxEaT0wLFlvPSIiLGxv'@;
put 'PTAsQW89ITEseG89ITEsaGk9MDtmb3IoVnIubGFzdEluZGV4PTAsdmU9dmUucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtUdD1Wci5leGVjKHZlKTspc3dpdGNoKFR0WzNdPVR0WzNdLnJlcGxhY2Uo'@;
put 'L18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOiIvIj09PVR0WzFdPyhrdFsiIXJlZiJdPXRyLmUuYz49dHIucy5jJiZ0ci5lLnI+PXRyLnMucj9Pbyh0cik6IkExOkExIixfZS5zaGVldFJvd3M+MCYmX2Uuc2hlZXRSb3dzPD10ci5lLnImJihrdFsiIWZ1'@;
put 'bGxyZWYiXT1rdFsiIXJlZiJdLHRyLmUucj1fZS5zaGVldFJvd3MtMSxrdFsiIXJlZiJdPU9vKHRyKSksb2kubGVuZ3RoJiYoa3RbIiFtZXJnZXMiXT1vaSksdXIubGVuZ3RoJiYoa3RbIiFyb3dzIl09dXIpLEN0Lm5hbWU9Q3QuXHU1NDBkXHU3OWYwfHxDdC5uYW1lLHR5cGVvZiBKU09OPCJ1'@;
put 'IiYmSlNPTi5zdHJpbmdpZnkoQ3QpLEZ0LnB1c2goQ3QubmFtZSksYnRbQ3QubmFtZV09a3QseG89ITEpOiIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJihDdD1sbihUdFswXSwhMSksa249ZXI9LTEsdHIucy5yPXRyLnMuYz0xZTcsdHIuZS5yPXRyLmUuYz0wLGt0PV9lLmRl'@;
put 'bnNlP1tdOnt9LG9pPVtdLHVyPVtdLHhvPSEwKTticmVhaztjYXNlInRhYmxlLXJvdy1ncm91cCI6Ii8iPT09VHRbMV0/LS1abjorK1puO2JyZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09VHRbMV0pe2tuKz1BbixBbj0xO2JyZWFrfWlmKChjdD1sbihUdFswXSwh'@;
put 'MSkpLlx1ODg0Y1x1NTNmNz9rbj1jdC5cdTg4NGNcdTUzZjctMTotMT09a24mJihrbj0wKSwoQW49K2N0WyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3IoaGk9MDtoaTxBbjsrK2hpKVpuPjAmJih1cltrbitoaV09e2xldmVsOlpufSk7ZXI9LTE7YnJlYWs7Y2FzZSJjb3ZlcmVk'@;
put 'LXRhYmxlLWNlbGwiOiIvIiE9PVR0WzFdJiYrK2VyLF9lLnNoZWV0U3R1YnMmJihfZS5kZW5zZT8oa3Rba25dfHwoa3Rba25dPVtdKSxrdFtrbl1bZXJdPXt0OiJ6In0pOmt0W2RpKHtyOmtuLGM6ZXJ9KV09e3Q6InoifSksS249IiIsem49W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNl'@;
put 'Ilx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSkrK2VyLHBuPWxuKFR0WzBdLCExKSx2cj1wYXJzZUludChwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxadD17dDoieiIsdjpudWxsfSxwbi5mb3JtdWxhJiYwIT1fZS5jZWxs'@;
put 'Rm9ybXVsYSYmKFp0LmY9bFMoeHIocG4uZm9ybXVsYSkpKSwic3RyaW5nIj09KHBuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8cG5bInZhbHVlLXR5cGUiXSkmJihadC50PSJzIixadC52PXhyKHBuWyJzdHJpbmctdmFsdWUiXXx8IiIpLF9lLmRlbnNlPyhrdFtrbl18fChrdFtrbl09W10p'@;
put 'LGt0W2tuXVtlcl09WnQpOmt0W2RpKHtyOmtuLGM6ZXJ9KV09WnQpLGVyKz12ci0xO2Vsc2UgaWYoIi8iIT09VHRbMV0pe3ZyPTE7dmFyIHRhPUFuP2tuK0FuLTE6a247aWYoKytlcj50ci5lLmMmJih0ci5lLmM9ZXIpLGVyPHRyLnMuYyYmKHRyLnMuYz1lciksa248dHIucy5yJiYodHIucy5y'@;
put 'PWtuKSx0YT50ci5lLnImJih0ci5lLnI9dGEpLHpyPVtdLGppPXt9LFp0PXt0Oihwbj1sbihUdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8cG5bInZhbHVlLXR5cGUiXSx2Om51bGx9LF9lLmNlbGxGb3JtdWxhKWlmKHBuLmZvcm11bGEmJihwbi5mb3JtdWxhPXhyKHBuLmZv'@;
put 'cm11bGEpKSxwblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSYmcG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJihMaT1wYXJzZUludChwblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsUXI9cGFyc2VJbnQocG5bIm51bWJlci1tYXRyaXgtY29s'@;
put 'dW1ucy1zcGFubmVkIl0sMTApfHwwLFp0LkY9T28oa2k9e3M6e3I6a24sYzplcn0sZTp7cjprbitMaS0xLGM6ZXIrUXItMX19KSxyci5wdXNoKFtraSxadC5GXSkpLHBuLmZvcm11bGEpWnQuZj1sUyhwbi5mb3JtdWxhKTtlbHNlIGZvcihoaT0wO2hpPHJyLmxlbmd0aDsrK2hpKWtuPj1yclto'@;
put 'aV1bMF0ucy5yJiZrbjw9cnJbaGldWzBdLmUuciYmZXI+PXJyW2hpXVswXS5zLmMmJmVyPD1ycltoaV1bMF0uZS5jJiYoWnQuRj1ycltoaV1bMV0pO3N3aXRjaCgocG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8cG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihMaT1wYXJzZUludChw'@;
put 'blsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxRcj1wYXJzZUludChwblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxvaS5wdXNoKGtpPXtzOntyOmtuLGM6ZXJ9LGU6e3I6a24rTGktMSxjOmVyK1FyLTF9fSkpLHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYo'@;
put 'dnI9cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0sMTApKSxadC50KXtjYXNlImJvb2xlYW4iOlp0LnQ9ImIiLFp0LnY9eXIocG5bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpadC50PSJuIixa'@;
put 'dC52PXBhcnNlRmxvYXQocG4udmFsdWUpO2JyZWFrO2Nhc2UiZGF0ZSI6WnQudD0iZCIsWnQudj1IdChwblsiZGF0ZS12YWx1ZSJdKSxfZS5jZWxsRGF0ZXN8fChadC50PSJuIixadC52PVVlKFp0LnYpKSxadC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6WnQudD0ibiIsWnQudj1vdChw'@;
put 'blsidGltZS12YWx1ZSJdKS84NjQwMCxfZS5jZWxsRGF0ZXMmJihadC50PSJkIixadC52PWh0KFp0LnYpKSxadC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOlp0LnQ9Im4iLFp0LnY9cGFyc2VGbG9hdChwbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6'@;
put 'aWYoInN0cmluZyIhPT1adC50JiYidGV4dCIhPT1adC50JiZadC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK1p0LnQpO1p0LnQ9InMiLG51bGwhPXBuWyJzdHJpbmctdmFsdWUiXSYmKEtuPXhyKHBuWyJzdHJpbmctdmFsdWUiXSksem49W10pfX1lbHNle2lm'@;
put 'KEFvPSExLCJzIj09PVp0LnQmJihadC52PUtufHwiIix6bi5sZW5ndGgmJihadC5SPXpuKSxBbz0wPT11biksZ3IuVGFyZ2V0JiYoWnQubD1nciksenIubGVuZ3RoPjAmJihadC5jPXpyLHpyPVtdKSxLbiYmITEhPT1fZS5jZWxsVGV4dCYmKFp0Lnc9S24pLEFvJiYoWnQudD0ieiIsZGVsZXRl'@;
put 'IFp0LnYpLF9lLmNlbGxIVE1MJiYoWnQuaD1adC5SP2s5KFp0LlIpOnJvKCIiK1p0LnYpKSwoIUFvfHxfZS5zaGVldFN0dWJzKSYmIShfZS5zaGVldFJvd3MmJl9lLnNoZWV0Um93czw9a24pKWZvcih2YXIgTW49MDtNbjxBbjsrK01uKXtpZih2cj1wYXJzZUludChwblsibnVtYmVyLWNvbHVt'@;
put 'bnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxfZS5kZW5zZSlmb3Ioa3Rba24rTW5dfHwoa3Rba24rTW5dPVtdKSxrdFtrbitNbl1bZXJdPTA9PU1uP1p0Om9uKFp0KTstLXZyPjA7KWt0W2tuK01uXVtlcit2cl09b24oWnQpO2Vsc2UgZm9yKGt0W2RpKHtyOmtuK01uLGM6ZXJ9KV09WnQ7LS12cj4w'@;
put 'OylrdFtkaSh7cjprbitNbixjOmVyK3ZyfSldPW9uKFp0KTt0ci5lLmM8PWVyJiYodHIuZS5jPWVyKX1lcis9KHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLHZyPTAsWnQ9e30sS249IiIsem49W119Z3I9e307YnJlYWs7Y2FzZSJkb2N1bWVu'@;
put 'dCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rl'@;
put 'ci1zdHlsZXMiOmlmKCIvIj09PVR0WzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0hlfWVsc2UiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFtUdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8i'@;
put 'PT09VHRbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrSGU7amkudD1Lbix6bi5sZW5ndGgmJihqaS5SPXpuKSxqaS5hPVlvLHpyLnB1c2goamkpfWVsc2UiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFtUdFszXSwh'@;
put 'MV0pO1lvPSIiLGxvPTAsS249IiIsdW49MCx6bj1bXTticmVhaztjYXNlImNyZWF0b3IiOiIvIj09PVR0WzFdP1lvPXZlLnNsaWNlKGxvLFR0LmluZGV4KTpsbz1UdC5pbmRleCtUdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJzZXR0'@;
put 'aW5ncyI6Y2FzZSJjb25maWctaXRlbS1zZXQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVudHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1hZ2Ui'@;
put 'OmNhc2UiZGF0YS1waWxvdC10YWJsZXMiOmNhc2UibGlzdC1zdHlsZSI6Y2FzZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1saXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PVR0WzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAi'@;
put 'K0hlfWVsc2UiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiZTZS5wdXNoKFtUdFszXSwhMV0pO0tuPSIiLHVuPTAsem49W107YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2NyaXB0'@;
put 'IjpjYXNlImxpYnJhcmllcyI6Y2FzZSJhdXRvbWF0aWMtc3R5bGVzIjpjYXNlImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNhc2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRhYmxl'@;
put 'LWNvbHVtbi1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXJvdy1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJmcmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNhc2Ui'@;
put 'dGV4dC1wcm9wZXJ0aWVzIjpjYXNlImVtYmVkZGVkLXRleHQiOmNhc2UiYm9keSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNhc2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUtY29s'@;
put 'dW1uLWdyb3VwIjpjYXNlInRhYmxlLWhlYWRlci1jb2x1bW5zIjpjYXNlInRhYmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdyYXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1yYW5n'@;
put 'ZSI6Y2FzZSJsYWJlbC1yYW5nZXMiOmNhc2UibmFtZWQtZXhwcmVzc2lvbiI6Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1ncm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNlInRp'@;
put 'dGxlIjpjYXNlIlx1NjgwN1x1OTg5OCI6Y2FzZSJkZXNjIjpjYXNlImJpbmFyeS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2VuYXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVscC1t'@;
put 'ZXNzYWdlIjpjYXNlImVycm9yLW1lc3NhZ2UiOmNhc2UiZGF0YWJhc2UtcmFuZ2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpjYXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2ZWwt'@;
put 'c3R5bGUtbnVtYmVyIjpjYXNlImxpc3QtbGV2ZWwtcHJvcGVydGllcyI6Y2FzZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXItZW1h'@;
put 'aWwiOmNhc2Uic2VuZGVyLXBob25lLXByaXZhdGUiOmNhc2Uic2VuZGVyLWZheCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXItcGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJzZW5k'@;
put 'ZXItY291bnRyeSI6Y2FzZSJzZW5kZXItc3RhdGUtb3ItcHJvdmluY2UiOmNhc2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxzIjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1saXN0'@;
put 'ZW5lciI6Y2FzZSJpbml0aWFsLWNyZWF0b3IiOmNhc2UiY3JlYXRpb24tZGF0ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1jeWNs'@;
put 'ZXMiOmNhc2UiY29uZmlnLWl0ZW0iOmNhc2UicGFnZS1udW1iZXIiOmNhc2UicGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFuZ2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxvdC10'@;
put 'YWJsZSI6Y2FzZSJzb3VyY2UtY2VsbC1yYW5nZSI6Y2FzZSJzb3VyY2Utc2VydmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRhdGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBpbG90'@;
put 'LW1lbWJlcnMiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXIiOmNhc2UiZGF0YS1waWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1zb3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRhLXBp'@;
put 'bG90LWdyb3VwcyI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpjYXNl'@;
put 'InByb3BlcnRpZXMiOmNhc2UicHJvcGVydHkiOmNhc2UidGFibGUtcHJvdGVjdGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpjYXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUiOmNh'@;
put 'c2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjppZigiLyI9PT1UdFsxXSl7aWYoQnJbR2UubmFtZV09bnQsKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZX1lbHNlIi8iIT09VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmKG50PSIiLEdlPWxu'@;
put 'KFR0WzBdLCExKSxTZS5wdXNoKFtUdFszXSwhMF0pKTticmVhaztjYXNlInN0eWxlIjoiLz4iPT09VHRbMF0uc2xpY2UoLTIpP0woVHRbMF0sX28pOiIvIj09VHRbMV0/TCh2ZS5zbGljZShEaSxUdC5pbmRleCtUdFswXS5sZW5ndGgpLF9vKTpEaT1UdC5pbmRleDticmVhaztjYXNlIm51bWJl'@;
put 'ciI6Y2FzZSJkYXkiOmNhc2UibW9udGgiOmNhc2UieWVhciI6Y2FzZSJlcmEiOmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFyIjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goU2VbU2UubGVu'@;
put 'Z3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6QmU9bG4oVHRbMF0sITEpLG50Kz1QW1R0WzNdXVsibG9uZyI9PT1CZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PVR0WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1UdFsxXSlzd2l0'@;
put 'Y2goU2VbU2UubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOm50Kz12ZS5zbGljZShkdCxUdC5pbmRleCl9ZWxzZSBkdD1UdC5pbmRleCtUdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Q2k9eXYoKEJl'@;
put 'PWxuKFR0WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgTXM9e05hbWU6QmUubmFtZSxSZWY6Q2lbMF0rIiEiK0NpWzFdfTt4byYmKE1zLlNoZWV0PUZ0Lmxlbmd0aCksU24uTmFtZXMucHVzaChNcyk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6aWYo'@;
put 'WyJtYXN0ZXItc3R5bGVzIl0uaW5kZXhPZihTZVtTZS5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PVR0WzFdfHxwbiYmcG5bInN0cmluZy12YWx1ZSJdKWxuKFR0WzBdLCExKSx1bj1UdC5pbmRleCtUdFswXS5sZW5ndGg7ZWxzZXt2YXIgeXM9eSh2ZS5zbGljZSh1bixUdC5pbmRl'@;
put 'eCksMCxfbyk7S249KEtuLmxlbmd0aD4wP0tuKyJcbiI6IiIpK3lzWzBdLHpuPXlzWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlmKCIvIj09PVR0WzFdKWJyZWFrO3RyeXtidFsoQ2k9eXYobG4oVHRbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRl'@;
put 'ciJdPXtyZWY6Q2lbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PVR0WzFdKXtpZighKGdyPWxuKFR0WzBdLCExKSkuaHJlZilicmVhaztnci5UYXJnZXQ9eHIoZ3IuaHJlZiksZGVsZXRlIGdyLmhyZWYsIiMiPT1nci5UYXJnZXQuY2hhckF0KDApJiZnci5UYXJnZXQuaW5kZXhP'@;
put 'ZigiLiIpPi0xPyhDaT15dihnci5UYXJnZXQuc2xpY2UoMSkpLGdyLlRhcmdldD0iIyIrQ2lbMF0rIiEiK0NpWzFdKTpnci5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJihnci5UYXJnZXQ9Z3IuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChUdFsyXSl7Y2FzZSJk'@;
put 'YzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYo'@;
put 'X2UuV1RGKXRocm93IG5ldyBFcnJvcihUdCl9fXZhciBFbD17U2hlZXRzOmJ0LFNoZWV0TmFtZXM6RnQsV29ya2Jvb2s6U259O3JldHVybiBfZS5ib29rU2hlZXRzJiZkZWxldGUgRWwuU2hlZXRzLEVsfX0oKTtmdW5jdGlvbiBhXyh5LFApe3JldHVybiBRMCh5LFApfXZhciBLMT1mdW5jdGlv'@;
put 'bigpe3ZhciB5PVsiICA8b2ZmaWNlOm1hc3Rlci1zdHlsZXM+IiwnICAgIDxzdHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxl'@;
put 'OmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAgPHN0eWxlOmZvb3Rlci8+IiwnICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiksUD0i'@;
put 'PG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitQYSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxu'@;
put 'czpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVu'@;
put 'dDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9y'@;
put 'Zy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxu'@;
put 'czpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIreSsiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQm4rUH19KCksdjA9ZnVuY3Rpb24oKXt2'@;
put 'YXIgeT1mdW5jdGlvbih2ZSxTZSl7cmV0dXJuIEhyKHZlKS5yZXBsYWNlKC8gICsvZyxmdW5jdGlvbihIZSl7cmV0dXJuJzx0ZXh0OnMgdGV4dDpjPSInK0hlLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyxTZT8iPHRleHQ6bGluZS1i'@;
put 'cmVhay8+IjoiPC90ZXh0OnA+PHRleHQ6cD4iKS5yZXBsYWNlKC9eIC8sIjx0ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9LFA9ZnVuY3Rpb24odmUpe3JldHVybiB2ZS5tYXAoZnVuY3Rpb24oU2Upe3ZhciBIZT0iIjtyZXR1cm4gbnVsbCE9U2Uub2RzJiYoSGUrPScgdGV4'@;
put 'dDpzdHlsZS1uYW1lPSJUJytTZS5vZHMrJyInKSxTZS52PyI8dGV4dDpzcGFuIitIZSsiPiIreShTZS52LCEwKSsiPC90ZXh0OnNwYW4+IjoiIn0pLmpvaW4oIiIpfSxMPSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIscmU9ZnVuY3Rpb24odmUsU2UsSGUpe3ZhciBCZT1bXTtC'@;
put 'ZS5wdXNoKCcgICAgICA8dGFibGU6dGFibGUgdGFibGU6bmFtZT0iJytIcihTZS5TaGVldE5hbWVzW0hlXSkrJyIgdGFibGU6c3R5bGUtbmFtZT0idGExIj5cbicpO3ZhciBHZT0wLG50PTAsZHQ9V3ModmVbIiFyZWYiXXx8IkExIiksQ3Q9dmVbIiFtZXJnZXMiXXx8W10sY3Q9MCxidD1BcnJh'@;
put 'eS5pc0FycmF5KHZlKTtpZih2ZVsiIWNvbHMiXSlmb3IobnQ9MDtudDw9ZHQuZS5jOysrbnQpQmUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtY29sdW1uIisodmVbIiFjb2xzIl1bbnRdPycgdGFibGU6c3R5bGUtbmFtZT0iY28nK3ZlWyIhY29scyJdW250XS5vZHMrJyInOiIiKSsiPjwv'@;
put 'dGFibGU6dGFibGUtY29sdW1uPlxuIik7dmFyIGt0PXZlWyIhcm93cyJdfHxbXTtmb3IoR2U9MDtHZTxkdC5zLnI7KytHZSlCZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhrdFtHZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycra3RbR2VdLm9kcysnIic6IiIpKyI+PC90YWJs'@;
put 'ZTp0YWJsZS1yb3c+XG4iKTtmb3IoO0dlPD1kdC5lLnI7KytHZSl7Zm9yKEJlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W0dlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytrdFtHZV0ub2RzKyciJzoiIikrIj5cbiIpLG50PTA7bnQ8ZHQucy5jOysrbnQpQmUucHVzaChM'@;
put 'KTtmb3IoO250PD1kdC5lLmM7KytudCl7dmFyIFR0PSExLFp0PXt9LHBuPSIiO2ZvcihjdD0wO2N0IT1DdC5sZW5ndGg7KytjdClpZighKEN0W2N0XS5zLmM+bnR8fEN0W2N0XS5zLnI+R2V8fEN0W2N0XS5lLmM8bnR8fEN0W2N0XS5lLnI8R2UpKXsoQ3RbY3RdLnMuYyE9bnR8fEN0W2N0XS5z'@;
put 'LnIhPUdlKSYmKFR0PSEwKSxadFsidGFibGU6bnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdPUN0W2N0XS5lLmMtQ3RbY3RdLnMuYysxLFp0WyJ0YWJsZTpudW1iZXItcm93cy1zcGFubmVkIl09Q3RbY3RdLmUuci1DdFtjdF0ucy5yKzE7YnJlYWt9aWYoVHQpQmUucHVzaCgiICAgICAgICAgIDx0'@;
put 'YWJsZTpjb3ZlcmVkLXRhYmxlLWNlbGwvPlxuIik7ZWxzZXt2YXIgS249ZGkoe3I6R2UsYzpudH0pLHVuPWJ0Pyh2ZVtHZV18fFtdKVtudF06dmVbS25dO2lmKHVuJiZ1bi5mJiYoWnRbInRhYmxlOmZvcm11bGEiXT1IcihjUyh1bi5mKSksdW4uRiYmdW4uRi5zbGljZSgwLEtuLmxlbmd0aCk9'@;
put 'PUtuKSl7dmFyIHFuPVdzKHVuLkYpO1p0WyJ0YWJsZTpudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdPXFuLmUuYy1xbi5zLmMrMSxadFsidGFibGU6bnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXT1xbi5lLnItcW4ucy5yKzF9aWYodW4pe3N3aXRjaCh1bi50KXtjYXNlImIiOnBu'@;
put 'PXVuLnY/IlRSVUUiOiJGQUxTRSIsWnRbIm9mZmljZTp2YWx1ZS10eXBlIl09ImJvb2xlYW4iLFp0WyJvZmZpY2U6Ym9vbGVhbi12YWx1ZSJdPXVuLnY/InRydWUiOiJmYWxzZSI7YnJlYWs7Y2FzZSJuIjpwbj11bi53fHxTdHJpbmcodW4udnx8MCksWnRbIm9mZmljZTp2YWx1ZS10eXBlIl09'@;
put 'ImZsb2F0IixadFsib2ZmaWNlOnZhbHVlIl09dW4udnx8MDticmVhaztjYXNlInMiOmNhc2Uic3RyIjpwbj11bi52LFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJzdHJpbmciO2JyZWFrO2Nhc2UiZCI6cG49dW4ud3x8SHQodW4udikudG9JU09TdHJpbmcoKSxadFsib2ZmaWNlOnZhbHVlLXR5'@;
put 'cGUiXT0iZGF0ZSIsWnRbIm9mZmljZTpkYXRlLXZhbHVlIl09SHQodW4udikudG9JU09TdHJpbmcoKSxadFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZTEiO2JyZWFrO2RlZmF1bHQ6QmUucHVzaChMKTtjb250aW51ZX1udWxsIT11bi5vZHMmJiFadFsidGFibGU6c3R5bGUtbmFtZSJdJiYoWnRb'@;
put 'InRhYmxlOnN0eWxlLW5hbWUiXT0iY2UiK3VuLm9kcyk7dmFyIHpuPSF1bi5SfHx1bi5sJiZ1bi5sLlRhcmdldD95KHBuKTpQKHVuLlIpO2lmKHVuLmwmJnVuLmwuVGFyZ2V0KXt2YXIga249dW4ubC5UYXJnZXQ7IiMiIT0oa249IiMiPT1rbi5jaGFyQXQoMCk/IiMiK3VTKGtuLnNsaWNlKDEp'@;
put 'KTprbikuY2hhckF0KDApJiYha24ubWF0Y2goL15cdys6LykmJihrbj0iLi4vIitrbiksem49U3IoInRleHQ6YSIsem4seyJ4bGluazpocmVmIjprbi5yZXBsYWNlKC8mL2csIiZhbXA7Iil9KX1CZS5wdXNoKCIgICAgICAgICAgIitTcigidGFibGU6dGFibGUtY2VsbCIsU3IoInRleHQ6cCIs'@;
put 'em4se30pLFp0KSsiXG4iKX1lbHNlIEJlLnB1c2goTCl9fUJlLnB1c2goIiAgICAgICAgPC90YWJsZTp0YWJsZS1yb3c+XG4iKX1yZXR1cm4gQmUucHVzaCgiICAgICAgPC90YWJsZTp0YWJsZT5cbiIpLEJlLmpvaW4oIiIpfSxnZT17Y2VudGVyOiJjZW50ZXIiLGxlZnQ6InN0YXJ0IixyaWdo'@;
put 'dDoiZW5kIn07cmV0dXJuIGZ1bmN0aW9uKFNlLEhlKXt2YXIgQmU9W0JuXSxHZT1QYSh7InhtbG5zOm9mZmljZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4'@;
put 'bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lz'@;
put 'Om5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxu'@;
put 'czpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bWV0YSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHls'@;
put 'ZToxLjAiLCJ4bWxuczpwcmVzZW50YXRpb24iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnByZXNlbnRhdGlvbjoxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOmNo'@;
put 'YXJ0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjaGFydDoxLjAiLCJ4bWxuczpkcjNkIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcjNkOjEuMCIsInhtbG5zOm1hdGgiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1M'@;
put 'IiwieG1sbnM6Zm9ybSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpzY3JpcHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnNjcmlwdDoxLjAiLCJ4bWxuczpvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcv'@;
put 'MjAwNC9vZmZpY2UiLCJ4bWxuczpvb293IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvd3JpdGVyIiwieG1sbnM6b29vYyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L2NhbGMiLCJ4bWxuczpkb20iOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC1ldmVudHMiLCJ4bWxuczp4'@;
put 'Zm9ybXMiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAyL3hmb3JtcyIsInhtbG5zOnhzZCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwieG1sbnM6eHNpIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLCJ4bWxuczpzaGVldCI6InVybjpvYXNp'@;
put 'czpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6c2gzM3RqczoxLjAiLCJ4bWxuczpycHQiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNS9yZXBvcnQiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2Y6MS4yIiwieG1sbnM6eGh0bWwiOiJodHRwOi8v'@;
put 'd3d3LnczLm9yZy8xOTk5L3hodG1sIiwieG1sbnM6Z3JkZGwiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAzL2cvZGF0YS12aWV3IyIsInhtbG5zOnRhYmxlb29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDkvdGFibGUiLCJ4bWxuczpkcmF3b29vIjoiaHR0cDovL29wZW5vZmZpY2Uub3Jn'@;
put 'LzIwMTAvZHJhdyIsInhtbG5zOmNhbGNleHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6Y2FsYzp4bWxuczpjYWxjZXh0OjEuMCIsInhtbG5zOmxvZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOm9mZmlj'@;
put 'ZTp4bWxuczpsb2V4dDoxLjAiLCJ4bWxuczpmaWVsZCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb28tbXMtaW50ZXJvcDp4bWxuczpmaWVsZDoxLjAiLCJ4bWxuczpmb3JteCI6InVybjpvcGVub2ZmaWNlOm5hbWVzOmV4cGVyaW1lbnRhbDpvb3htbC1vZGYtaW50ZXJv'@;
put 'cDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOmNzczN0IjoiaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy10ZXh0LyIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pLG50PVBhKHsieG1sbnM6Y29uZmlnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpjb25maWc6MS4wIiwi'@;
put 'b2ZmaWNlOm1pbWV0eXBlIjoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCJ9KTsiZm9kcyI9PUhlLmJvb2tUeXBlPyhCZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50IitHZStudCsiPlxuIiksQmUucHVzaChTNCgpLnJlcGxhY2UoL29mZmljZTpkb2N1bWVu'@;
put 'dC1tZXRhL2csIm9mZmljZTptZXRhIikpKTpCZS5wdXNoKCI8b2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQiK0dlKyI+XG4iKSxmdW5jdGlvbih2ZSxTZSl7dmFyIEhlPVtdLEJlPXt9O0hlLnB1c2goIiA8b2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKSxIZS5wdXNoKCcgIDxudW1iZXI6ZGF0'@;
put 'ZS1zdHlsZSBzdHlsZTpuYW1lPSJOMzciIG51bWJlcjphdXRvbWF0aWMtb3JkZXI9InRydWUiPlxuJyksSGUucHVzaCgnICAgPG51bWJlcjptb250aCBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLEhlLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLEhlLnB1c2go'@;
put 'JyAgIDxudW1iZXI6ZGF5IG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksSGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksSGUucHVzaCgiICAgPG51bWJlcjp5ZWFyLz5cbiIpLEhlLnB1c2goIiAgPC9udW1iZXI6ZGF0ZS1zdHlsZT5cbiIpO3ZhciBHZT0wO1Nl'@;
put 'LlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGN0KXtyZXR1cm4gU2UuU2hlZXRzW2N0XX0pLmZvckVhY2goZnVuY3Rpb24oY3Qpe2lmKGN0JiZjdFsiIWNvbHMiXSlmb3IodmFyIGJ0PTA7YnQ8Y3RbIiFjb2xzIl0ubGVuZ3RoOysrYnQpaWYoY3RbIiFjb2xzIl1bYnRdKXt2YXIgRnQ9Y3RbIiFj'@;
put 'b2xzIl1bYnRdO2lmKG51bGw9PUZ0LndpZHRoJiZudWxsPT1GdC53cHgmJm51bGw9PUZ0LndjaCljb250aW51ZTtwdShGdCksRnQub2RzPUdlO3ZhciBrdD1jdFsiIWNvbHMiXVtidF0ud3B4KyJweCI7SGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY28nK0dlKyciIHN0eWxl'@;
put 'OmZhbWlseT0idGFibGUtY29sdW1uIj5cbicpLEhlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1jb2x1bW4tcHJvcGVydGllcyBmbzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxlOmNvbHVtbi13aWR0aD0iJytrdCsnIi8+XG4nKSxIZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK0dlfX0p'@;
put 'O3ZhciBudD0wO1NlLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGN0KXtyZXR1cm4gU2UuU2hlZXRzW2N0XX0pLmZvckVhY2goZnVuY3Rpb24oY3Qpe2lmKGN0JiZjdFsiIXJvd3MiXSlmb3IodmFyIGJ0PTA7YnQ8Y3RbIiFyb3dzIl0ubGVuZ3RoOysrYnQpaWYoY3RbIiFyb3dzIl1bYnRdKXtj'@;
put 'dFsiIXJvd3MiXVtidF0ub2RzPW50O3ZhciBGdD1jdFsiIXJvd3MiXVtidF0uaHB4KyJweCI7SGUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0icm8nK250KyciIHN0eWxlOmZhbWlseT0idGFibGUtcm93Ij5cbicpLEhlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1yb3ctcHJvcGVy'@;
put 'dGllcyBmbzpicmVhay1iZWZvcmU9ImF1dG8iIHN0eWxlOnJvdy1oZWlnaHQ9IicrRnQrJyIvPlxuJyksSGUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksKytudH19KSxIZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJ0YTEiIHN0eWxlOmZhbWlseT0idGFibGUiIHN0eWxl'@;
put 'Om1hc3Rlci1wYWdlLW5hbWU9Im1wMSI+XG4nKSxIZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtcHJvcGVydGllcyB0YWJsZTpkaXNwbGF5PSJ0cnVlIiBzdHlsZTp3cml0aW5nLW1vZGU9ImxyLXRiIi8+XG4nKSxIZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSxIZS5wdXNoKCcgIDxzdHls'@;
put 'ZTpzdHlsZSBzdHlsZTpuYW1lPSJjZTEiIHN0eWxlOmZhbWlseT0idGFibGUtY2VsbCIgc3R5bGU6cGFyZW50LXN0eWxlLW5hbWU9IkRlZmF1bHQiIHN0eWxlOmRhdGEtc3R5bGUtbmFtZT0iTjM3Ii8+XG4nKTt2YXIgZHQ9MjtudD0wLFNlLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKGN0KXty'@;
put 'ZXR1cm4gU2UuU2hlZXRzW2N0XX0pLmZvckVhY2goZnVuY3Rpb24oY3Qpe2lmKGN0KWZvcih2YXIgYnQ9MCxGdD0wLGt0PVdzKGN0WyIhcmVmIl0pLFR0PUFycmF5LmlzQXJyYXkoY3QpO2J0PD1rdC5lLnI7KytidClmb3IoRnQ9MDtGdDw9a3QuZS5jOysrRnQpe3ZhciBadD1kaSh7cjpidCxj'@;
put 'OkZ0fSkscG49VHQ/KGN0W2J0XXx8W10pW0Z0XTpjdFtadF07aWYocG4mJihwbi5zfHxwbi5SKSl7dmFyIEtuPVtdO3BuLnMmJktuLnB1c2goW3BuLCEwXSkscG4uUiYmcG4uUi5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt1biYmdW4ucyYmS24ucHVzaChbdW4sITFdKX0pLEtuLmZvckVhY2goZnVu'@;
put 'Y3Rpb24odW4pe3ZhciBxbj11blswXSx6bj1xbi5zLGtuPSIiLGVyPXsic3R5bGU6bmFtZSI6KHVuWzFdPyJjZSI6IlQiKStkdCwic3R5bGU6ZmFtaWx5Ijp1blsxXT8idGFibGUtY2VsbCI6InRleHQifTt1blsxXSYmKGVyWyJzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZSJdPSJEZWZhdWx0Iixl'@;
put 'clsic3R5bGU6ZGF0YS1zdHlsZS1uYW1lIl09Ik4wIik7dmFyIHRyPXt9LFpuPSExLEJyPXt9LG9pPSExLGtpPXt9LExpPSExO2lmKHpuLmNvbG9yJiYoQnJbImZvOmNvbG9yIl09IiMiK091KHpuLmNvbG9yLnJnYiksb2k9ITApLHpuLnN6JiYoQnJbImZvOmZvbnQtc2l6ZSJdPXpuLnN6KyJw'@;
put 'dCIsb2k9ITApLHpuLmJvbGQmJihCclsiZm86Zm9udC13ZWlnaHQiXT0iYm9sZCIsb2k9ITApLHpuLml0YWxpYyYmKEJyWyJmbzpmb250LXN0eWxlIl09Iml0YWxpYyIsb2k9ITApLHpuLm5hbWUmJihCZVt6bi5uYW1lXXx8KEJlW3puLm5hbWVdPXpuLm5hbWUubWF0Y2goLyAvKT8iJmFwb3M7'@;
put 'Iit6bi5uYW1lKyImYXBvczsiOnpuLm5hbWUpLEJyWyJzdHlsZTpmb250LW5hbWUiXT16bi5uYW1lLG9pPSEwKSx6bi5zdHJpa2UmJihCclsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXT0ic29saWQiLEJyWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC10eXBlIl09InNpbmdsZSIs'@;
put 'b2k9ITApLHpuLnVuZGVybGluZSYmKEJyWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1zdHlsZSJdPSJzb2xpZCIsQnJbInN0eWxlOnRleHQtdW5kZXJsaW5lLXdpZHRoIl09ImF1dG8iLEJyWyJzdHlsZTp0ZXh0LXVuZGVybGluZS1jb2xvciJdPSJmb250LWNvbG9yIixvaT0hMCksdW5bMV0pe2lm'@;
put 'KHpuLmFsaWdubWVudCl7dmFyIFFyPXpuLmFsaWdubWVudDtRci53cmFwVGV4dCYmKHRyWyJmbzp3cmFwLW9wdGlvbiJdPSJ3cmFwIixabj0hMCksUXIudmVydGljYWwmJih0clsic3R5bGU6dmVydGljYWwtYWxpZ24iXT0iY2VudGVyIj09UXIudmVydGljYWw/Im1pZGRsZSI6UXIudmVydGlj'@;
put 'YWwsWm49ITApLGdlW1FyLmhvcml6b250YWxdJiYoa2lbImZvOnRleHQtYWxpZ24iXT1nZVtRci5ob3Jpem9udGFsXSxMaT0hMCl9em4uZmdDb2xvciYmKHRyWyJmbzpiYWNrZ3JvdW5kLWNvbG9yIl09IiMiK091KHpuLmZnQ29sb3IucmdiKSxabj0hMCl9Wm4mJihrbis9U3IoInN0eWxlOnRh'@;
put 'YmxlLWNlbGwtcHJvcGVydGllcyIsbnVsbCx0cikpLG9pJiYoa24rPVNyKCJzdHlsZTp0ZXh0LXByb3BlcnRpZXMiLG51bGwsQnIpKSxMaSYmKGtuKz1Tcigic3R5bGU6cGFyYWdyYXBoLXByb3BlcnRpZXMiLG51bGwsa2kpKSxIZS5wdXNoKCIgICIrU3IoInN0eWxlOnN0eWxlIixrbixlcikr'@;
put 'IlxuIikscW4ub2RzPWR0LCsrZHR9KX19fSksSGUucHVzaCgiIDwvb2ZmaWNlOmF1dG9tYXRpYy1zdHlsZXM+XG4iKTt2YXIgQ3Q9IiA8b2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiIrbHQoQmUpLm1hcChmdW5jdGlvbihjdCl7cmV0dXJuJyAgPHN0eWxlOmZvbnQtZmFjZSBzdHlsZTpuYW1l'@;
put 'PSInK2N0KyciIHN2Zzpmb250LWZhbWlseT0iJytCZVtjdF0rJyIvPlxuJ30pLmpvaW4oIiIpKyIgPC9vZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIjt2ZS5wdXNoKEN0KSx2ZS5wdXNoKEhlLmpvaW4oIiIpKX0oQmUsU2UpLEJlLnB1c2goIiAgPG9mZmljZTpib2R5PlxuIiksQmUucHVzaCgi'@;
put 'ICAgIDxvZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKTtmb3IodmFyIGR0PTA7ZHQhPVNlLlNoZWV0TmFtZXMubGVuZ3RoOysrZHQpQmUucHVzaChyZShTZS5TaGVldHNbU2UuU2hlZXROYW1lc1tkdF1dLFNlLGR0KSk7cmV0dXJuIEJlLnB1c2goIiAgICA8L29mZmljZTpzcHJlYWRzaGVldD5cbiIp'@;
put 'LEJlLnB1c2goIiAgPC9vZmZpY2U6Ym9keT5cbiIpLEJlLnB1c2goImZvZHMiPT1IZS5ib29rVHlwZT8iPC9vZmZpY2U6ZG9jdW1lbnQ+IjoiPC9vZmZpY2U6ZG9jdW1lbnQtY29udGVudD4iKSxCZS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gXzAoeSxQKXtpZigiZm9kcyI9PVAuYm9va1R5cGUp'@;
put 'cmV0dXJuIHYwKHksUCk7dmFyIEw9eW4oKSxRPSIiLHJlPVtdLGdlPVtdO3JldHVybiBZdChMLFE9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLFl0KEwsUT0iY29udGVudC54bWwiLHYwKHksUCkpLHJlLnB1c2goW1EsInRleHQv'@;
put 'eG1sIl0pLGdlLnB1c2goW1EsIkNvbnRlbnRGaWxlIl0pLFl0KEwsUT0ic3R5bGVzLnhtbCIsSzEoeSxQKSkscmUucHVzaChbUSwidGV4dC94bWwiXSksZ2UucHVzaChbUSwiU3R5bGVzRmlsZSJdKSxZdChMLFE9Im1ldGEueG1sIixCbitTNCgpKSxyZS5wdXNoKFtRLCJ0ZXh0L3htbCJdKSxn'@;
put 'ZS5wdXNoKFtRLCJNZXRhZGF0YUZpbGUiXSksWXQoTCxRPSJtYW5pZmVzdC5yZGYiLGZ1bmN0aW9uIEdoKHkpe3ZhciBQPVtCbl07UC5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBMPTA7'@;
put 'TCE9eS5sZW5ndGg7KytMKVAucHVzaChMMSh5W0xdWzBdLHlbTF1bMV0pKSxQLnB1c2goVm8oIiIseVtMXVswXSkpO3JldHVybiBQLnB1c2goTDEoIiIsIkRvY3VtZW50IiwicGtnIikpLFAucHVzaCgiPC9yZGY6UkRGPiIpLFAuam9pbigiIil9KGdlKSkscmUucHVzaChbUSwiYXBwbGljYXRp'@;
put 'b24vcmRmK3htbCJdKSxZdChMLFE9Ik1FVEEtSU5GL21hbmlmZXN0LnhtbCIsZnVuY3Rpb24gTGQoeSl7dmFyIFA9W0JuXTtQLnB1c2goJzxtYW5pZmVzdDptYW5pZmVzdCB4bWxuczptYW5pZmVzdD0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptYW5pZmVzdDoxLjAi'@;
put 'IG1hbmlmZXN0OnZlcnNpb249IjEuMiI+XG4nKSxQLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSIvIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiIG1hbmlmZXN0Om1lZGlhLXR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3By'@;
put 'ZWFkc2hlZXQiLz5cbicpO2Zvcih2YXIgTD0wO0w8eS5sZW5ndGg7KytMKVAucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9IicreVtMXVswXSsnIiBtYW5pZmVzdDptZWRpYS10eXBlPSInK3lbTF1bMV0rJyIvPlxuJyk7cmV0dXJuIFAucHVzaCgiPC9t'@;
put 'YW5pZmVzdDptYW5pZmVzdD4iKSxQLmpvaW4oIiIpfShyZSkpLEx9ZnVuY3Rpb24gWDEoeSl7cmV0dXJuIGZ1bmN0aW9uKEwsUSl7dmFyIHJlPWZ1bmN0aW9uIERNKHksUCl7aWYoIVApcmV0dXJuIDA7dmFyIEw9eS5TaGVldE5hbWVzLmluZGV4T2YoUCk7aWYoLTE9PUwpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJTaGVldCBub3QgZm91bmQ6ICIrUCk7cmV0dXJuIEx9KEwsUS5zaGVldCk7cmV0dXJuIHkuZnJvbV9zaGVldChMLlNoZWV0c1tMLlNoZWV0TmFtZXNbcmVdXSxRLEwpfX12YXIgbFI9WDEoRnUpLGNSPVgxKHtmcm9tX3NoZWV0OkJsfSksdVI9WDEodHlwZW9mIEU5PCJ1Ij9FOTp7fSks'@;
put 'ZFI9WDEodHlwZW9mIE0zPCJ1Ij9NMzp7fSksbF89WDEodHlwZW9mIEIxPCJ1Ij9CMTp7fSkseTU9WDEodHlwZW9mIE9tPCJ1Ij9PbTp7fSksaFI9WDEoe2Zyb21fc2hlZXQ6eFJ9KSxJTT1YMSh0eXBlb2YgQjI8InUiP0IyOnt9KSxmUj1YMSh0eXBlb2YgTzQ8InUiP080Ont9KSxzYz1GKDc3'@;
put 'OTAzKXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93c2VyaWZ5O2lmKCFzYyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBjXz17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hB'@;
put 'MToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1bmN0aW9uIGVsKHksUCl7c3dpdGNoKFA9KFB8fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3IHNjLmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZSh5KS5k'@;
put 'aWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcgc2MuY3JlYXRlSGFzaCgic2hhMSIpLnVwZGF0ZSh5KS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyBzYy5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoeSkuZGlnZXN0KCk7ZGVmYXVsdDppZihjX1tQXSlyZXR1'@;
put 'cm4gbmV3IHNjLmNyZWF0ZUhhc2goY19bUF0pLnVwZGF0ZSh5KS5kaWdlc3QoKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrUCl9fWZ1bmN0aW9uIEoxKHksUCxMKXtpZigicmMyIj09TCl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBRPXNjLmNyZWF0'@;
put 'ZURlY2lwaGVyaXYoTHx8ImFlcy0yNTYtY2JjIix5LFApO3JldHVybiBRLnNldEF1dG9QYWRkaW5nKCExKSxRfWZ1bmN0aW9uIFI2KHkpe3JldHVyblsoIjAwIisoMjU1JnkpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyh5Pj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIp'@;
put 'LCgiMDAiKyh5Pj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoeT4+PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciBPNj1mdW5jdGlvbih5LFAsTCl7Zm9yKHZhciBRPSJzdHJpbmciPT10eXBlb2YgUD9CdWZmZXIuZnJvbShQLCJo'@;
put 'ZXgiKTpQLHJlPSJzdHJpbmciPT10eXBlb2YgeT9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLHkpKTp5LGdlPSJzdHJpbmciPT10eXBlb2YgTD9CdWZmZXIuZnJvbShMLCJoZXgiKTpMLF9lPWVsKHJlLCJNRDUiKSx2ZT1CdWZmZXIuY29uY2F0KFtfZS5zbGljZSgwLDUp'@;
put 'LFFdKSxTZT0wO1NlPDQ7KytTZSl2ZT1CdWZmZXIuY29uY2F0KFt2ZSx2ZV0pO3ZhciBIZT1lbCh2ZSwiTUQ1Iik7cmV0dXJuKGVsKEJ1ZmZlci5jb25jYXQoW0hlLnNsaWNlKDAsNSksZ2VdKSwiTUQ1IikudG9TdHJpbmcoImhleCIpKyIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MCIpLnNsaWNlKDAsMzIpfSxwcj1mdW5jdGlvbih5LFAsTCl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBQP0J1ZmZlci5mcm9tKFAsImhleCIpOlAscmU9InN0cmluZyI9PXR5cGVvZiB5P0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAseSkpOnksZ2U9InN0cmluZyI9PXR5'@;
put 'cGVvZiBMP0J1ZmZlci5mcm9tKEwsImhleCIpOkwsX2U9ZWwoQnVmZmVyLmNvbmNhdChbUSxyZV0pLCJTSEExIik7cmV0dXJuIGVsKEJ1ZmZlci5jb25jYXQoW19lLGdlXSksIlNIQTEiKX0sYjA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBQKCl7fVAucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKGN0'@;
put 'KXt0aGlzLl9pPTA7dmFyIGJ0PXRoaXMuX2J1aWxkKGN0LCIiKTtyZXR1cm4iIj09PWJ0PyIiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+JytidH0sUC5wcm90b3R5cGUuX2J1aWxkPWZ1bmN0aW9uKGN0LGJ0KXtpZih0aGlzLl9pKysl'@;
put 'MWU2PT0wJiYodGhpcy5fYz1idFswXSksbnVsbD09Y3R8fCJvYmplY3QiIT10eXBlb2YgY3QmJiJmdW5jdGlvbiIhPXR5cGVvZiBjdCludWxsIT1jdCYmKGJ0Kz1mdW5jdGlvbiB5KGN0LGJ0KXtyZXR1cm4gbnVsbD09Y3R8fChjdD1jdC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsi'@;
put 'KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSxidCYmKGN0PWN0LnJlcGxhY2UoLyIvZywiJnF1b3Q7IikpKSxjdH0oY3QpKTtlbHNle2lmKCFjdC5uYW1lKXRocm93IG5ldyBFcnJvcigiWE1MIG5vZGUgZG9lcyBub3QgaGF2ZSBuYW1lOiAiK0pTT04uc3RyaW5n'@;
put 'aWZ5KGN0KSk7YnQrPSI8IitjdC5uYW1lO3ZhciBGdD10aGlzO2J0Kz1jdC5hdHRyaWJ1dGVzJiZQYShjdC5hdHRyaWJ1dGVzKXx8IiIsQXJyYXkuaXNBcnJheShjdC5jaGlsZHJlbikmJjAhPWN0LmNoaWxkcmVuLmxlbmd0aD8oYnQrPSI+IixjdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KGt0KXtidD1GdC5fYnVpbGQoa3QsYnQpfSksYnQrPSI8LyIrY3QubmFtZSsiPiIpOmJ0Kz0iLz4ifXJldHVybiBidH07dmFyIEw9QnVmZmVyLmZyb20oWzQsMCw0LDAsNjQsMCwwLDBdKSxnZT17ZGF0YUludGVncml0eTp7aG1hY0tleTpCdWZmZXIuZnJvbShbOTUsMTc4LDE3MywxLDEyLDE4'@;
put 'NSwyMjUsMjQ2XSksaG1hY1ZhbHVlOkJ1ZmZlci5mcm9tKFsxNjAsMTAzLDEyNywyLDE3OCw0NCwxMzIsNTFdKX0sa2V5OkJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwxNzIsMjA4LDIxNF0pLHZlcmlmaWVySGFzaDp7aW5wdXQ6QnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1'@;
put 'OSw3NSwxNTgsMTIxXSksdmFsdWU6QnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSl9fTtmdW5jdGlvbiBfZShjdCxidCxGdCxrdCxUdCxadCl7dmFyIHBuPWJ0LnRvTG93ZXJDYXNlKCkrIi0iKzgqa3QubGVuZ3RoO2lmKCJDaGFpbmluZ01vZGVDQkMiIT09RnQpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJVbmtub3duIGNpcGhlciBjaGFpbmluZzogIitGdCk7dmFyIEtuPXNjW2N0PyJjcmVhdGVDaXBoZXJpdiI6ImNyZWF0ZURlY2lwaGVyaXYiXShwbis9Ii1jYmMiLGt0LFR0KTtLbi5zZXRBdXRvUGFkZGluZyghMSk7dmFyIHVuPUtuLnVwZGF0ZShadCkscW49W3VuXTt0'@;
put 'cnl7dmFyIHpuPUtuLmZpbmFsKCk7cW4ucHVzaCh6bil9Y2F0Y2h7fXJldHVybiBCdWZmZXIuY29uY2F0KHFuKX1mdW5jdGlvbiB2ZShjdCl7Y3Q9Y3QudG9Mb3dlckNhc2UoKTt2YXIgYnQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7aWYoc2MuZ2V0SGFzaGVzKCkuaW5kZXhPZihjdCk8'@;
put 'MCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrY3QpO3ZhciBrdD1zYy5jcmVhdGVIYXNoKGN0KTtyZXR1cm4ga3QudXBkYXRlKEJ1ZmZlci5jb25jYXQoYnQpKSxrdC5kaWdlc3QoKX1mdW5jdGlvbiBTZShjdCxidCxGdCxrdCl7Im51bWJlciI9PXR5cGVv'@;
put 'ZiBrdCYmKGt0PUhlKGt0KSk7dmFyIFR0PXZlKGN0LGJ0LGt0KTtpZihUdC5sZW5ndGg8RnQpe3ZhciBadD1CdWZmZXIuYWxsb2MoRnQsNTQpO1R0LmNvcHkoWnQpLFR0PVp0fWVsc2UgVHQubGVuZ3RoPkZ0JiYoVHQ9VHQuc2xpY2UoMCxGdCkpO3JldHVybiBUdH1mdW5jdGlvbiBIZShjdCxi'@;
put 'dCl7dmFyIEZ0PUJ1ZmZlci5hbGxvYyhidHx8NCk7cmV0dXJuIEZ0LndyaXRlVUludDMyTEUoY3QsMCksRnR9ZnVuY3Rpb24gQmUoY3QsYnQsRnQsa3QsVHQsWnQpe2Zvcih2YXIgS249dmUoYnQsRnQsQnVmZmVyLmZyb20oY3QsInV0ZjE2bGUiKSksdW49MDt1bjxrdDt1bisrKUtuPXZlKGJ0'@;
put 'LEhlKHVuKSxLbik7dmFyIHpuPVR0Lzg7aWYoKEtuPXZlKGJ0LEtuLFp0KSkubGVuZ3RoPHpuKXt2YXIga249QnVmZmVyLmFsbG9jKHpuLDU0KTtLbi5jb3B5KGtuKSxLbj1rbn1lbHNlIEtuLmxlbmd0aD56biYmKEtuPUtuLnNsaWNlKDAsem4pKTtyZXR1cm4gS259cmV0dXJuIHNjLnJhbmRv'@;
put 'bUJ5dGVzfHwoc2MucmFuZG9tQnl0ZXM9ZnVuY3Rpb24oY3Qpe2Zvcih2YXIgYnQ9QnVmZmVyLmFsbG9jKGN0KSxGdD0wO0Z0PGN0OysrRnQpYnRbRnRdPU1hdGguZmxvb3IoMjU2Kk1hdGgucmFuZG9tKCkpO3JldHVybiBidH0pLGZ1bmN0aW9uIEN0KGN0LGJ0KXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGN0KXJldHVybiBDdChCdWZmZXIuZnJvbShjdCwiYmluYXJ5IiksYnQpO3ZhciBGdD1zYy5yYW5kb21CeXRlcygzMiksa3Q9e3BhY2thZ2U6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6c2MucmFuZG9tQnl0ZXMo'@;
put 'MTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LGtleUJpdHM6OCpGdC5sZW5ndGh9LGtleTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpzYy5yYW5kb21CeXRlcygxNiksaGFz'@;
put 'aEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsc3BpbkNvdW50OjEsa2V5Qml0czoyNTZ9fSxUdD1mdW5jdGlvbiBHZShjdCxidCxGdCxrdCxUdCxadCxwbixLbil7Zm9yKHZhciB1bj1bXSxxbj1jdD8wOjgsem49MCxrbj0wLGVyPTA7ZXI8S24ubGVuZ3RoOyl7'@;
put 'KGVyPShrbj1lcikrNDA5Nik+S24ubGVuZ3RoJiYoZXI9S24ubGVuZ3RoKTt2YXIgdHI9S24uc2xpY2Uoa24rcW4sZXIrcW4pLFpuPXRyLmxlbmd0aCVUdDtabiYmKHRyPUJ1ZmZlci5jb25jYXQoW3RyLEJ1ZmZlci5hbGxvYyhUdC1abildKSk7dmFyIG9pPV9lKGN0LGJ0LEZ0LHBuLFNlKGt0'@;
put 'LFp0LFR0LHpuKSx0cik7dW4ucHVzaChvaSksem4rK312YXIga2k9QnVmZmVyLmNvbmNhdCh1bik7aWYoY3Qpa2k9QnVmZmVyLmNvbmNhdChbSGUoS24ubGVuZ3RoLDgpLGtpXSk7ZWxzZXt2YXIgTGk9S24ucmVhZFVJbnQzMkxFKDApO2tpPWtpLnNsaWNlKDAsTGkpfXJldHVybiBraX0oITAs'@;
put 'a3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5ibG9ja1NpemUsa3QucGFja2FnZS5zYWx0VmFsdWUsRnQsY3QpLFp0PXNjLnJhbmRvbUJ5dGVzKDY0KSxwbj1TZShrdC5wYWNrYWdl'@;
put 'Lmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5zYWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsZ2UuZGF0YUludGVncml0eS5obWFjS2V5KSxLbj1fZSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEZ0LHBuLFp0KSx1bj1mdW5jdGlv'@;
put 'biBudChjdCxidCl7Y3Q9Y3QudG9Mb3dlckNhc2UoKTt2YXIgRnQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMik7aWYoc2MuZ2V0SGFzaGVzKCkuaW5kZXhPZihjdCk8MCl0aHJvdyBuZXcgRXJyb3IoIkhNQUMgYWxnb3JpdGhtICciK2N0KyInIG5vdCBzdXBwb3J0ZWQhIik7dmFyIFR0PXNj'@;
put 'LmNyZWF0ZUhtYWMoY3QsYnQpO3JldHVybiBUdC51cGRhdGUoQnVmZmVyLmNvbmNhdChGdCkpLFR0LmRpZ2VzdCgpfShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sWnQsVHQpLHFuPVNlKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdlLmJs'@;
put 'b2NrU2l6ZSxnZS5kYXRhSW50ZWdyaXR5LmhtYWNWYWx1ZSksem49X2UoITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxGdCxxbix1bik7a3QuZGF0YUludGVncml0eT17ZW5jcnlwdGVkSG1hY0tleTpLbixlbmNyeXB0ZWRIbWFjVmFsdWU6'@;
put 'em59O3ZhciBrbj1CZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsZ2Uua2V5KTtrdC5rZXkuZW5jcnlwdGVkS2V5VmFsdWU9X2UoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hh'@;
put 'aW5pbmcsa24sa3Qua2V5LnNhbHRWYWx1ZSxGdCk7dmFyIGVyPXNjLnJhbmRvbUJ5dGVzKDE2KSx0cj1CZShidCxrdC5rZXkuaGFzaEFsZ29yaXRobSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsZ2UudmVyaWZpZXJIYXNoLmlucHV0KTtrdC5rZXku'@;
put 'ZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ9X2UoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsdHIsa3Qua2V5LnNhbHRWYWx1ZSxlcik7dmFyIFpuPXZlKGt0LmtleS5oYXNoQWxnb3JpdGhtLGVyKSxCcj1CZShidCxrdC5rZXkuaGFzaEFsZ29yaXRo'@;
put 'bSxrdC5rZXkuc2FsdFZhbHVlLGt0LmtleS5zcGluQ291bnQsa3Qua2V5LmtleUJpdHMsZ2UudmVyaWZpZXJIYXNoLnZhbHVlKTtrdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWU9X2UoITAsa3Qua2V5LmNpcGhlckFsZ29yaXRobSxrdC5rZXkuY2lwaGVyQ2hhaW5pbmcsQnIsa3Qu'@;
put 'a2V5LnNhbHRWYWx1ZSxabik7dmFyIG9pPWZ1bmN0aW9uIGR0KGN0KXt2YXIgYnQ9e25hbWU6ImVuY3J5cHRpb24iLGF0dHJpYnV0ZXM6e3htbG5zOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2VuY3J5cHRpb24iLCJ4bWxuczpwIjoiaHR0cDovL3NjaGVtYXMu'@;
put 'bWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiLCJ4bWxuczpjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvY2VydGlmaWNhdGUifSxjaGlsZHJlbjpbe25hbWU6ImtleURhdGEiLGF0dHJpYnV0ZXM6'@;
put 'e3NhbHRTaXplOmN0LnBhY2thZ2Uuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1NpemU6Y3QucGFja2FnZS5ibG9ja1NpemUsa2V5Qml0czpjdC5wYWNrYWdlLmtleUJpdHMsaGFzaFNpemU6Y3QucGFja2FnZS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06Y3QucGFja2FnZS5jaXBoZXJBbGdvcml0'@;
put 'aG0sY2lwaGVyQ2hhaW5pbmc6Y3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOmN0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6Y3QucGFja2FnZS5zYWx0VmFsdWUudG9TdHJpbmcoImJhc2U2NCIpfX0se25hbWU6ImRhdGFJbnRlZ3JpdHkiLGF0dHJpYnV0'@;
put 'ZXM6e2VuY3J5cHRlZEhtYWNLZXk6Y3QuZGF0YUludGVncml0eS5lbmNyeXB0ZWRIbWFjS2V5LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRIbWFjVmFsdWU6Y3QuZGF0YUludGVncml0eS5lbmNyeXB0ZWRIbWFjVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpfX0se25hbWU6ImtleUVuY3J5'@;
put 'cHRvcnMiLGNoaWxkcmVuOlt7bmFtZToia2V5RW5jcnlwdG9yIixhdHRyaWJ1dGVzOnt1cmk6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIn0sY2hpbGRyZW46W3tuYW1lOiJwOmVuY3J5cHRlZEtleSIsYXR0cmlidXRlczp7'@;
put 'c3BpbkNvdW50OmN0LmtleS5zcGluQ291bnQsc2FsdFNpemU6Y3Qua2V5LnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOmN0LmtleS5ibG9ja1NpemUsa2V5Qml0czpjdC5rZXkua2V5Qml0cyxoYXNoU2l6ZTpjdC5rZXkuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmN0LmtleS5jaXBoZXJB'@;
put 'bGdvcml0aG0sY2lwaGVyQ2hhaW5pbmc6Y3Qua2V5LmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06Y3Qua2V5Lmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmN0LmtleS5zYWx0VmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0OmN0LmtleS5lbmNy'@;
put 'eXB0ZWRWZXJpZmllckhhc2hJbnB1dC50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWU6Y3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRLZXlWYWx1ZTpjdC5rZXkuZW5jcnlwdGVkS2V5VmFsdWUu'@;
put 'dG9TdHJpbmcoImJhc2U2NCIpfX1dfV19XX0sa3Q9KG5ldyBQKS5idWlsZChidCk7cmV0dXJuIEJ1ZmZlci5jb25jYXQoW0wsQnVmZmVyLmZyb20oa3QsInV0ZjgiKV0pfShrdCksa2k9amUudXRpbHMuY2ZiX25ldygpO3JldHVybiBqZS51dGlscy5jZmJfYWRkKGtpLCJFbmNyeXB0aW9uSW5m'@;
put 'byIsb2kpLGplLnV0aWxzLmNmYl9hZGQoa2ksIkVuY3J5cHRlZFBhY2thZ2UiLFR0KSxraX19KCk7ZnVuY3Rpb24gdzUoeSl7cmV0dXJuIGZ1bmN0aW9uKEwpe2Zvcih2YXIgUT0wO1EhPXkubGVuZ3RoOysrUSl7dmFyIHJlPXlbUV07dm9pZCAwPT09TFtyZVswXV0mJihMW3JlWzBdXT1yZVsx'@;
put 'XSksIm4iPT09cmVbMl0mJihMW3JlWzBdXT1OdW1iZXIoTFtyZVswXV0pKX19fXZhciBQNj1mdW5jdGlvbih5KXt3NShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwhMF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIs'@;
put 'ITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJib29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKHkpLHkuYm9va0lt'@;
put 'YWdlcyYmKHkuY2VsbFN0eWxlcz0hMCl9LGhfPXc1KFtbImNlbGxEYXRlcyIsITFdLFsiYm9va1NTVCIsITFdLFsiYm9va1R5cGUiLCJ4bHN4Il0sWyJjb21wcmVzc2lvbiIsITFdLFsiV1RGIiwhMV1dKTtmdW5jdGlvbiBSTSh5KXtyZXR1cm4gSGkuV1MuaW5kZXhPZih5KT4tMT8ic2hlZXQi'@;
put 'OkhpLkNTJiZ5PT1IaS5DUz8iY2hhcnQiOkhpLkRTJiZ5PT1IaS5EUz8iZGlhbG9nIjpIaS5NUyYmeT09SGkuTVM/Im1hY3JvIjp5JiZ5Lmxlbmd0aD95OiJzaGVldCJ9dmFyIEY2PVtdO2Z1bmN0aW9uIGdSKHksUCxMLFEscmUsZ2UsX2UsdmUsU2UsSGUsQmUsR2Upe3RyeXtnZVtRXT1EbyhR'@;
put 'dCh5LEwsITApLFApO3ZhciBkdCxudD1JdCh5LFApO3N3aXRjaCh2ZSl7Y2FzZSJzaGVldCI6ZHQ9ZnVuY3Rpb24gTkwoeSxQLEwsUSxyZSxnZSxfZSx2ZSl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gQ0woeSxQLEwsUSxyZSxnZSxfZSl7aWYoIXkpcmV0dXJuIHk7dmFy'@;
put 'IHZlPVB8fHt9O1F8fChRPXsiIWlkIjp7fX0pLG51bGwhPXRlJiZudWxsPT12ZS5kZW5zZSYmKHZlLmRlbnNlPXRlKTt2YXIgSGUsQ3QsY3QsYnQsRnQsa3QsVHQsWnQscG4sS24sU2U9dmUuZGVuc2U/W106e30sQmU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sR2U9W10sbnQ9ITEs'@;
put 'ZHQ9ITEsdW49W107dmUuYmlmZj0xMix2ZVsiIXJvdyJdPTA7dmFyIHFuPTAsem49ITEsa249W10sZXI9e30sdHI9dmUuc3VwYm9va3N8fHJlLnN1cGJvb2tzfHxbW11dO2lmKHRyLnNoYXJlZGY9ZXIsdHIuYXJyYXlmPWtuLHRyLlNoZWV0TmFtZXM9cmUuU2hlZXROYW1lc3x8cmUuU2hlZXRz'@;
put 'Lm1hcChmdW5jdGlvbihRcil7cmV0dXJuIFFyLm5hbWV9KSwhdmUuc3VwYm9va3MmJih2ZS5zdXBib29rcz10cixyZS5OYW1lcykpZm9yKHZhciBabj0wO1puPHJlLk5hbWVzLmxlbmd0aDsrK1puKXRyWzBdW1puKzFdPXJlLk5hbWVzW1puXTt2YXIgQnI9W10sb2k9W10sa2k9ITE7aWYobWZb'@;
put 'MTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6alN9LEhvKHksZnVuY3Rpb24odXIsQW4sdnIpe2lmKCFkdClzd2l0Y2godnIpe2Nhc2UgMTQ4OkhlPXVyO2JyZWFrO2Nhc2UgMDpDdD11cix2ZS5zaGVldFJvd3MmJnZlLnNoZWV0Um93czw9Q3QuciYmKGR0PSEwKSxwbj1IcyhGdD1DdC5yKSx2ZVsi'@;
put 'IXJvdyJdPUN0LnIsKHVyLmhpZGRlbnx8dXIuaHB0fHxudWxsIT11ci5sZXZlbCkmJih1ci5ocHQmJih1ci5ocHg9VTEodXIuaHB0KSksb2lbdXIucl09dXIpO2JyZWFrO2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNl'@;
put 'IDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OnN3aXRjaChjdD17dDp1clsyXX0sdXJbMl0pe2Nhc2UibiI6Y3Qudj11clsxXTticmVhaztjYXNlInMiOmN0LnY9KFp0PWY2W3VyWzFdXSkudCx2ZS5jZWxsU3R5bGVzJiYoY3QuUj1mdW5jdGlvbiB1'@;
put 'RCh5LFApe2lmKHkuUilyZXR1cm4geS5SO2lmKFAmJlAuRm9udHMmJigxIT15LnIubGVuZ3RofHwwIT15LnJbMF0uaWNoKSl7eS5SPVtdO3ZhciBMPTAsUT15LnJbTF0scmU9eS5yW0wrMV07Zm9yKFEuaWNoPjAmJnkuUi5wdXNoKHt0OiJzIix2OnkudC5zbGljZSgwLFEuaWNoKX0pO0w8eS5y'@;
put 'Lmxlbmd0aC0xOysrTCl5LlIucHVzaCh7dDoicyIsdjp5LnQuc2xpY2UoKFE9eS5yW0xdKS5pY2gsKHJlPXkucltMKzFdKS5pY2gpLHM6UC5Gb250c1tRLmlmbnRdfSk7cmV0dXJuIHkuUi5wdXNoKHt0OiJzIix2OnkudC5zbGljZSgocmV8fFEpLmljaCksczpQLkZvbnRzWyhyZXx8USkuaWZu'@;
put 'dF19KSx5LlJ9fShadCxfZSkpO2JyZWFrO2Nhc2UiYiI6Y3Qudj0hIXVyWzFdO2JyZWFrO2Nhc2UiZSI6Y3Qudj11clsxXSwhMSE9PXZlLmNlbGxUZXh0JiYoY3Qudz1Rb1tjdC52XSk7YnJlYWs7Y2FzZSJzdHIiOmN0LnQ9InMiLGN0LnY9dXJbMV19aWYoKGJ0PV9lLkNlbGxYZlt1clswXS5p'@;
put 'U3R5bGVSZWZdKSYmcDYoY3QsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCx2ZSwwLF9lKSx2ZS5jZWxsU3R5bGVzJiZjdC5zJiZidC5hbGlnbm1lbnQmJihjdC5zLmFsaWdubWVudD1vbihidC5hbGlnbm1lbnQpKSxrdD0tMT09dXJbMF0uYz9rdCsxOnVyWzBd'@;
put 'LmMsdmUuZGVuc2U/KFNlW0Z0XXx8KFNlW0Z0XT1bXSksU2VbRnRdW2t0XT1jdCk6U2VbTnMoa3QpK3BuXT1jdCx2ZS5jZWxsRm9ybXVsYSl7Zm9yKHpuPSExLHFuPTA7cW48a24ubGVuZ3RoOysrcW4pe3ZhciBycj1rbltxbl07Q3Qucj49cnJbMF0ucy5yJiZDdC5yPD1yclswXS5lLnImJmt0'@;
put 'Pj1yclswXS5zLmMmJmt0PD1yclswXS5lLmMmJihjdC5GPU9vKHJyWzBdKSx6bj0hMCl9IXpuJiZ1ci5sZW5ndGg+MyYmKGN0LmY9dXJbM10pfWlmKEJlLnMucj5DdC5yJiYoQmUucy5yPUN0LnIpLEJlLnMuYz5rdCYmKEJlLnMuYz1rdCksQmUuZS5yPEN0LnImJihCZS5lLnI9Q3QuciksQmUu'@;
put 'ZS5jPGt0JiYoQmUuZS5jPWt0KSx2ZS5jZWxsRGF0ZXMmJmJ0JiYibiI9PWN0LnQmJncuaXNfZGF0ZSh3Ll90YWJsZVtidC5udW1GbXRJZF0pKXt2YXIgU249dy5wYXJzZV9kYXRlX2NvZGUoY3Qudik7U24mJihjdC50PSJkIixjdC52PW5ldyBEYXRlKFNuLnksU24ubS0xLFNuLmQsU24uSCxT'@;
put 'bi5NLFNuLlMsU24udSkpfWJyZWFrO2Nhc2UgMTpjYXNlIDEyOmlmKCF2ZS5zaGVldFN0dWJzfHxudClicmVhaztjdD17dDoieiIsdjp2b2lkIDB9LGt0PS0xPT11clswXS5jP2t0KzE6dXJbMF0uYywoYnQ9X2UuQ2VsbFhmW3VyWzBdLmlTdHlsZVJlZl0pJiZwNihjdCxidC5udW1GbXRJZCxi'@;
put 'dC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHZlLDAsX2UpLHZlLmNlbGxTdHlsZXMmJmN0LnMmJmJ0LmFsaWdubWVudCYmKGN0LnMuYWxpZ25tZW50PW9uKGJ0LmFsaWdubWVudCkpLHZlLmRlbnNlPyhTZVtGdF18fChTZVtGdF09W10pLFNlW0Z0XVtrdF09Y3QpOlNlW05zKGt0KStw'@;
put 'bl09Y3QsQmUucy5yPkN0LnImJihCZS5zLnI9Q3QuciksQmUucy5jPmt0JiYoQmUucy5jPWt0KSxCZS5lLnI8Q3QuciYmKEJlLmUucj1DdC5yKSxCZS5lLmM8a3QmJihCZS5lLmM9a3QpO2JyZWFrO2Nhc2UgMTc2OnVuLnB1c2godXIpO2JyZWFrO2Nhc2UgNDk0OnZhciBncj1RWyIhaWQiXVt1'@;
put 'ci5yZWxJZF07Zm9yKGdyPyh1ci5UYXJnZXQ9Z3IuVGFyZ2V0LHVyLmxvYyYmKHVyLlRhcmdldCs9IiMiK3VyLmxvYyksdXIuUmVsPWdyKToiIj09dXIucmVsSWQmJih1ci5UYXJnZXQ9IiMiK3VyLmxvYyksRnQ9dXIucmZ4LnMucjtGdDw9dXIucmZ4LmUucjsrK0Z0KWZvcihrdD11ci5yZngu'@;
put 'cy5jO2t0PD11ci5yZnguZS5jOysra3QpdmUuZGVuc2U/KFNlW0Z0XXx8KFNlW0Z0XT1bXSksU2VbRnRdW2t0XXx8KFNlW0Z0XVtrdF09e3Q6InoiLHY6dm9pZCAwfSksU2VbRnRdW2t0XS5sPXVyKTooVHQ9ZGkoe2M6a3QscjpGdH0pLFNlW1R0XXx8KFNlW1R0XT17dDoieiIsdjp2b2lkIDB9'@;
put 'KSxTZVtUdF0ubD11cik7YnJlYWs7Y2FzZSA0MjY6aWYoIXZlLmNlbGxGb3JtdWxhKWJyZWFrO2tuLnB1c2godXIpLChLbj12ZS5kZW5zZT9TZVtGdF1ba3RdOlNlW05zKGt0KStwbl0pLmY9eGwodXJbMV0sQmUse3I6Q3QucixjOmt0fSx0cix2ZSksS24uRj1Pbyh1clswXSk7YnJlYWs7Y2Fz'@;
put 'ZSA0Mjc6aWYoIXZlLmNlbGxGb3JtdWxhKWJyZWFrO2VyW2RpKHVyWzBdLnMpXT11clsxXSwoS249dmUuZGVuc2U/U2VbRnRdW2t0XTpTZVtOcyhrdCkrcG5dKS5mPXhsKHVyWzFdLEJlLHtyOkN0LnIsYzprdH0sdHIsdmUpO2JyZWFrO2Nhc2UgNjA6aWYoIXZlLmNlbGxTdHlsZXMpYnJlYWs7'@;
put 'Zm9yKDt1ci5lPj11ci5zOylCclt1ci5lLS1dPXt3aWR0aDp1ci53LzI1NixoaWRkZW46ISEoMSZ1ci5mbGFncyksbGV2ZWw6dXIubGV2ZWx9LGtpfHwoa2k9ITApLHB1KEJyW3VyLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOlNlWyIhYXV0b2ZpbHRlciJdPXtyZWY6T28odXIpfTticmVhaztjYXNl'@;
put 'IDQ3NjpTZVsiIW1hcmdpbnMiXT11cjticmVhaztjYXNlIDE0NzpyZS5TaGVldHNbTF18fChyZS5TaGVldHNbTF09e30pLHVyLm5hbWUmJihyZS5TaGVldHNbTF0uQ29kZU5hbWU9dXIubmFtZSksKHVyLmFib3ZlfHx1ci5sZWZ0KSYmKFNlWyIhb3V0bGluZSJdPXthYm92ZTp1ci5hYm92ZSxs'@;
put 'ZWZ0OnVyLmxlZnR9KTticmVhaztjYXNlIDEzNzpyZS5WaWV3c3x8KHJlLlZpZXdzPVt7fV0pLHJlLlZpZXdzWzBdfHwocmUuVmlld3NbMF09e30pLHVyLlJUTCYmKHJlLlZpZXdzWzBdLlJUTD0hMCksdXIuZ3JpZHx8KHJlLlZpZXdzWzBdLmdyaWQ9ITEsU2VbIiFncmlkbGluZXMiXT0hMSk7'@;
put 'YnJlYWs7Y2FzZSA0ODU6U2VbIiFzaGVldEZvcm1hdCJdPXVyO2JyZWFrO2Nhc2UgNjQ6Y2FzZSAxMDUzOiFmdW5jdGlvbiB5TCh5LFAsTCxRKXtpZihQKXt2YXIgcmU9e3JlZjpQLnNxcmZ4LHQ6UC50fTtQLm9wJiYocmUub3A9UC5vcCk7dmFyIGdlPSIiLF9lPSIiLHZlPVAuc3FyZng/InN0'@;
put 'cmluZyI9PXR5cGVvZiBQLnNxcmZ4P09pKFAuc3FyZnguc3BsaXQoIiwiKVswXSk6UC5zcXJmeDpudWxsO2lmKFAuZjEmJihnZT14bChQLmYxLHZlLG51bGwsTCxRLCEwKSksUC5mMiYmKF9lPXhsKFAuZjIsdmUsbnVsbCxMLFEsITApKSxQLm9wJiZbIklOIiwiT1QiXS5pbmRleE9mKFAub3Ap'@;
put 'Pj0tMSlyZS5taW49Z2UscmUubWF4PV9lO2Vsc2UgaWYoUC5vcClyZS52PWdlO2Vsc2UgdHJ5e3N3aXRjaChQLnQpe2Nhc2UiTGlzdCI6aWYoIlB0Z1N0ciI9PT1QLmYxWzBdWzBdWzBdJiYxPT1QLmYxWzBdLmxlbmd0aCl7cmUubD1QLmYxWzBdWzBdWzFdLnNwbGl0KCIsIik7YnJlYWt9Y2Fz'@;
put 'ZSJDdXN0b20iOnJlLmY9Z2V9fWNhdGNoe315WyIhdmFsaWRhdGlvbnMiXXx8KHlbIiF2YWxpZGF0aW9ucyJdPVtdKSx5WyIhdmFsaWRhdGlvbnMiXS5wdXNoKHJlKX19KFNlLHVyLHRyLHZlKTticmVhaztjYXNlIDE1MTpTZVsiIWZyZWV6ZSJdPXVyWzBdO2JyZWFrO2Nhc2UgMTUyOlNlWyIh'@;
put 'c2VsIl09dXI7YnJlYWs7Y2FzZSAxNzU6Y2FzZSA2NDQ6Y2FzZSA2MjU6Y2FzZSA1NjI6Y2FzZSAzOTY6Y2FzZSAxMTEyOmNhc2UgMTE0NjpjYXNlIDQ3MTpjYXNlIDEwNTA6Y2FzZSA2NDk6Y2FzZSAxMTA1OmNhc2UgNDk6Y2FzZSA1ODk6Y2FzZSA2MDc6Y2FzZSA1NjQ6Y2FzZSAxMDU1OmNh'@;
put 'c2UgMTY4OmNhc2UgMTc0OmNhc2UgMTE4MDpjYXNlIDQ5OTpjYXNlIDUwNzpjYXNlIDU1MDpjYXNlIDE3MTpjYXNlIDE2NzpjYXNlIDExNzc6Y2FzZSAxNjk6Y2FzZSAxMTgxOmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNjYxOmNhc2UgNjM5OmNhc2UgNDc4OmNhc2UgNTM3OmNhc2UgNDc3OmNh'@;
put 'c2UgNTM2OmNhc2UgMTEwMzpjYXNlIDY4MDpjYXNlIDExMDQ6Y2FzZSAxMDI0OmNhc2UgNjYzOmNhc2UgNTM1OmNhc2UgNjc4OmNhc2UgNTA0OmNhc2UgMTA0MzpjYXNlIDQyODpjYXNlIDE3MDpjYXNlIDMwNzI6Y2FzZSA1MDpjYXNlIDIwNzA6Y2FzZSAxMDQ1OmJyZWFrO2Nhc2UgMzU6bnQ9'@;
put 'ITA7YnJlYWs7Y2FzZSAzNjpudD0hMTticmVhaztjYXNlIDM3OkdlLnB1c2goQW4pLG50PSEwO2JyZWFrO2Nhc2UgMzg6R2UucG9wKCksbnQ9ITE7YnJlYWs7ZGVmYXVsdDppZighKChBbnx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKEFufHwiIikuaW5kZXhPZigiRW5kIik+MCkmJigh'@;
put 'bnR8fHZlLldURiYmIkJydEFDQmVnaW4iIT1HZVtHZS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIit2cisiICIrQW4pfX0sdmUpLGRlbGV0ZSB2ZS5zdXBib29rcyxkZWxldGUgdmVbIiFyb3ciXSwhU2VbIiFyZWYiXSYmKEJlLnMucjwyZTZ8fEhlJiYo'@;
put 'SGUuZS5yPjB8fEhlLmUuYz4wfHxIZS5zLnI+MHx8SGUucy5jPjApKSYmKFNlWyIhcmVmIl09T28oSGV8fEJlKSksdmUuc2hlZXRSb3dzJiZTZVsiIXJlZiJdKXt2YXIgTGk9T2koU2VbIiFyZWYiXSk7dmUuc2hlZXRSb3dzPD0rTGkuZS5yJiYoTGkuZS5yPXZlLnNoZWV0Um93cy0xLExpLmUu'@;
put 'cj5CZS5lLnImJihMaS5lLnI9QmUuZS5yKSxMaS5lLnI8TGkucy5yJiYoTGkucy5yPUxpLmUuciksTGkuZS5jPkJlLmUuYyYmKExpLmUuYz1CZS5lLmMpLExpLmUuYzxMaS5zLmMmJihMaS5zLmM9TGkuZS5jKSxTZVsiIWZ1bGxyZWYiXT1TZVsiIXJlZiJdLFNlWyIhcmVmIl09T28oTGkpKX1y'@;
put 'ZXR1cm4gdW4ubGVuZ3RoPjAmJihTZVsiIW1lcmdlcyJdPXVuKSxCci5sZW5ndGg+MCYmKFNlWyIhY29scyJdPUJyKSxvaS5sZW5ndGg+MCYmKFNlWyIhcm93cyJdPW9pKSxTZX0oeSxRLEwscmUsZ2UsMCx2ZSk6ZnVuY3Rpb24gS1ooeSxQLEwsUSxyZSxnZSxfZSl7aWYoIXkpcmV0dXJuIHk7'@;
put 'UXx8KFE9eyIhaWQiOnt9fSksbnVsbCE9dGUmJm51bGw9PVAuZGVuc2UmJihQLmRlbnNlPXRlKTt2YXIgdmU9UC5kZW5zZT9bXTp7fSxTZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxIZT0iIixCZT0iIixHZT15Lm1hdGNoKGE1KTtHZT8oSGU9eS5zbGljZSgwLEdlLmluZGV4KSxC'@;
put 'ZT15LnNsaWNlKEdlLmluZGV4K0dlWzBdLmxlbmd0aCkpOkhlPUJlPXk7dmFyIG50PUJlLmxhc3RJbmRleE9mKCJleHRMc3QiKSxDdD0oLTE9PW50fHxCZS5zbGljZShudCksSGUubWF0Y2goeHYpKTtDdD92NihDdFswXSwwLHJlLEwpOihDdD1IZS5tYXRjaChESSkpJiZmdW5jdGlvbiBfUyh5'@;
put 'LFAsTCxRLHJlLGdlLF9lKXt2Nih5LnNsaWNlKDAseS5pbmRleE9mKCI+IikpLDAsUSxyZSk7dmFyIHZlPVAubWF0Y2goXzYpO2lmKHZlKXt2YXIgSGU9VTIobG4odmVbMF0pLGdlLF9lKTtMWyIhdGFiY29sb3IiXT1IZX1pZigodmU9UC5tYXRjaChtUykpJiZsbih2ZVswXSkuZml0VG9QYWdl'@;
put 'JiYoTFsiIXByaW50Il18fChMWyIhcHJpbnQiXT17fSksTFsiIXByaW50Il0ucHJvcHN8fChMWyIhcHJpbnQiXS5wcm9wcz17fSksTFsiIXByaW50Il0ucHJvcHMuZml0fHwoTFsiIXByaW50Il0ucHJvcHMuZml0PXt9KSxudWxsPT1MWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0JiYoTFsi'@;
put 'IXByaW50Il0ucHJvcHMuZml0LmhlaWdodD0xKSxudWxsPT1MWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGgmJihMWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGg9MSkpLHZlPVAubWF0Y2godlMpKXtMWyIhb3V0bGluZSJdPXt9O3ZhciBHZT1sbih2ZVswXSk7R2Uuc3VtbWFyeUJlbG93JiYo'@;
put 'TFsiIW91dGxpbmUiXS5hYm92ZT0heXIoR2Uuc3VtbWFyeUJlbG93KSksR2Uuc3VtbWFyeVJpZ2h0JiYoTFsiIW91dGxpbmUiXS5sZWZ0PSF5cihHZS5zdW1tYXJ5UmlnaHQpKX19KEN0WzBdLEN0WzFdfHwiIix2ZSxyZSxMLF9lLGdlKTt2YXIgY3Q9KEhlLm1hdGNoKC88KD86XHcqOik/ZGlt'@;
put 'ZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGN0PjApe3ZhciBidD1IZS5zbGljZShjdCxjdCs1MCkubWF0Y2goJFopO2J0JiYoIVB8fCFQLm5vZGltKSYmZnVuY3Rpb24gQUkoeSxQKXt2YXIgTD1PaShQKTtMLnMucjw9TC5lLnImJkwucy5jPD1MLmUuYyYmTC5zLnI+PTAmJkwucy5j'@;
put 'Pj0wJiYoeVsiIXJlZiJdPU9vKEwpKX0odmUsYnRbMV0pfXZhciBGdD1IZS5tYXRjaChJSSk7RnQmJkZ0WzFdJiZmdW5jdGlvbiBlWSh5LFAsTCxRKXtMLlZpZXdzfHwoTC5WaWV3cz1be31dKTt2YXIgcmU9MDt5LnJlcGxhY2UoekksZnVuY3Rpb24oZ2UsX2Upe3ZhciB2ZT1sbihnZSk7aWYo'@;
put 'TC5WaWV3c1tRXXx8KEwuVmlld3NbUV09e30pLHlyKHZlLnJpZ2h0VG9MZWZ0KSYmKEwuVmlld3NbUV0uUlRMPSEwKSx2ZS5zaG93R3JpZExpbmVzJiYoTC5WaWV3c1tRXS5ncmlkPXlyKHZlLnNob3dHcmlkTGluZXMpLG51bGw9PVBbIiFncmlkbGluZXMiXSYmKFBbIiFncmlkbGluZXMiXT15'@;
put 'cih2ZS5zaG93R3JpZExpbmVzKSkpLCt2ZS56b29tU2NhbGUmJihMLlZpZXdzW1FdLnpvb209K3ZlLnpvb21TY2FsZSksdmUudmlldyYmKEwuVmlld3NbUV0udmlldz12ZS52aWV3KSwxPT0rK3JlJiYiLz4iIT1nZS5zbGljZSgtMikpe3ZhciBTZT15LnNsaWNlKF9lK2dlLmxlbmd0aCksSGU9'@;
put 'U2UubWF0Y2goLzxcLyg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoIUhlKXJldHVybiIiO3ZhciBCZT0oU2U9U2Uuc2xpY2UoMCxIZS5pbmRleCkpLm1hdGNoKC88KD86XHc6KT9wYW5lKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoQmUpe3ZhciBHZT1sbihC'@;
put 'ZVswXSk7ImZyb3plbiI9PUdlLnN0YXRlP1BbIiFmcmVlemUiXT1OcygrR2UueFNwbGl0fHwwKStIcygrR2UueVNwbGl0fHwwKTpHZS50b3BMZWZ0Q2VsbCYmKFBbIiFmcmVlemUiXT1HZS50b3BMZWZ0Q2VsbCl9dmFyIG50PVNlLm1hdGNoKC88KD86XHc6KT9zZWxlY3Rpb24oPzpbXj5hLXpd'@;
put 'W14+XSopP1wvPz4vKTtpZihudCl7dmFyIGR0PWxuKG50WzBdKTtpZihkdC5hY3RpdmVDZWxsJiYoUFsiIXNlbCJdPXtjZWxsOmR0LmFjdGl2ZUNlbGx9KSxkdC5zcXJlZil7dmFyIEN0PWR0LnNxcmVmLnJlcGxhY2UoL1xzLiokLywiIik7UFsiIXNlbCJdfHwoUFsiIXNlbCJdPXtjZWxsOmRp'@;
put 'KFdzKEN0KS5zKX0pLFBbIiFzZWwiXS5yYW5nZT1kdC5zcXJlZn19fXJldHVybiIifSl9KEZ0WzFdLHZlLHJlLEwpO3ZhciBrdD1IZS5tYXRjaChmZiksVHQ9W107aWYoUC5jZWxsU3R5bGVzKXt2YXIgWnQ9SGUubWF0Y2goU3YpO1p0JiZmdW5jdGlvbiBHMyh5LFAsTCl7Zm9yKHZhciBRPSEx'@;
put 'LHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpe3ZhciBnZT1sbihQW3JlXSwhMCk7Z2UuaGlkZGVuJiYoZ2UuaGlkZGVuPXlyKGdlLmhpZGRlbikpO3ZhciBfZT1wYXJzZUludChnZS5taW4sMTApLTEsdmU9cGFyc2VJbnQoZ2UubWF4LDEwKS0xO2ZvcihnZS5vdXRsaW5lTGV2ZWwmJihnZS5sZXZl'@;
put 'bD0rZ2Uub3V0bGluZUxldmVsfHwwKSxkZWxldGUgZ2UubWluLGRlbGV0ZSBnZS5tYXgsZ2Uud2lkdGg9K2dlLndpZHRoLCFRJiZnZS53aWR0aCYmKFE9ITApLHB1KGdlKSxnZS5zdHlsZSYmKGdlLnM9YzUoZ2Uuc3R5bGUsTCkpO19lPD12ZTspeVtfZSsrXT1vbihnZSl9fShUdCxadCxfZSl9'@;
put 'aWYoR2UmJlpJKEdlWzFdLEwsdmUsUCxTZSxnZSxfZSksUC5jYWxsYmFjaylyZXR1cm4gdmU7dmFyIHBuPUJlLm1hdGNoKFRJKTtwbiYmKHZlWyIhcHJvdGVjdCJdPWZ1bmN0aW9uIHR0KHkpe3ZhciBQPWxuKHksITAsITApLEw9e307aWYoeXIoUC5zaGVldCkpcmV0dXJuIEF2LmZvckVhY2go'@;
put 'ZnVuY3Rpb24oUSl7TFtRXT1udWxsIT1QW1FdJiZ5cihQW1FdKX0pLFR2LmZvckVhY2goZnVuY3Rpb24oUSl7TFtRXT1udWxsPT1QW1FdfHx5cihQW1FdKX0pLFAuYWxnb3JpdGhtTmFtZSYmKEwuZW5jcnlwdGlvbj17YWxnbzpQLmFsZ29yaXRobU5hbWUsaGFzaDpQLmhhc2hWYWx1ZSxzYWx0'@;
put 'OlAuc2FsdFZhbHVlLHNwaW46K1Auc3BpbkNvdW50fHwxZTV9KSxMfShwblswXSkpO3ZhciBLbj1CZS5tYXRjaChnNik7S24mJih2ZVsiIWF1dG9maWx0ZXIiXT1mdW5jdGlvbiBsNSh5KXtyZXR1cm57cmVmOih5Lm1hdGNoKC9yZWY9IihbXiJdKikiLyl8fFtdKVsxXX19KEtuWzBdKSk7dmFy'@;
put 'IHVuPVtdLHFuPUJlLm1hdGNoKEN2KTtpZihxbilmb3IoY3Q9MDtjdCE9cW4ubGVuZ3RoOysrY3QpdW5bY3RdPU9pKHFuW2N0XS5zbGljZShxbltjdF0uaW5kZXhPZignIicpKzEpKTt2YXIgem49KC0xPT1udD9CZTpCZS5zbGljZSgwLG50KSkubWF0Y2gobTYpO3puJiYodmVbIiFjb25kZm10'@;
put 'Il09W10uY29uY2F0LmFwcGx5KFtdLHpuLm1hcChmdW5jdGlvbihBbil7cmV0dXJuIExTKEFuLFAsZ2UsX2UpfSkpKSxudD4tMSYmKHpuPUJlLnNsaWNlKG50KS5tYXRjaChtNikpJiYodmVbIiFjb25kZm10Il18fCh2ZVsiIWNvbmRmbXQiXT1bXSksdmVbIiFjb25kZm10Il09dmVbIiFjb25k'@;
put 'Zm10Il0uY29uY2F0LmFwcGx5KHZlWyIhY29uZGZtdCJdLHpuLm1hcChmdW5jdGlvbihBbil7cmV0dXJuIExTKEFuLFAsZ2UsX2UsITApfSkpKTt2YXIga249KC0xPT1udD9CZTpCZS5zbGljZSgwLG50KSkubWF0Y2goaFMpO2tuJiYodmVbIiF2YWxpZGF0aW9ucyJdPVRTKGtuWzBdLFApKSxu'@;
put 'dD4tMSYmKGtuPUJlLnNsaWNlKG50KS5tYXRjaChoUykpJiYodmVbIiF2YWxpZGF0aW9ucyJdfHwodmVbIiF2YWxpZGF0aW9ucyJdPVtdKSx2ZVsiIXZhbGlkYXRpb25zIl09dmVbIiF2YWxpZGF0aW9ucyJdLmNvbmNhdChUUyhrblswXSxQLCEwKSkpO3ZhciBlcj1CZS5tYXRjaChkUyk7ZXIm'@;
put 'JmZ1bmN0aW9uIE1TKHksUCxMKXtmb3IodmFyIFE9QXJyYXkuaXNBcnJheSh5KSxyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKXt2YXIgZ2U9bG4oUGkoUFtyZV0pLCEwKTtpZighZ2UucmVmKXJldHVybjt2YXIgX2U9KChMfHx7fSlbIiFpZCJdfHxbXSlbZ2UuaWRdO19lPyhnZS5UYXJnZXQ9X2Uu'@;
put 'VGFyZ2V0LGdlLmxvY2F0aW9uJiYoZ2UuVGFyZ2V0Kz0iIyIreHIoZ2UubG9jYXRpb24pKSk6KGdlLlRhcmdldD0iIyIreHIoZ2UubG9jYXRpb24pLF9lPXtUYXJnZXQ6Z2UuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGdlLlJlbD1fZSxnZS50b29sdGlwJiYoZ2UuVG9vbHRpcD1n'@;
put 'ZS50b29sdGlwLGRlbGV0ZSBnZS50b29sdGlwKTtmb3IodmFyIHZlPU9pKGdlLnJlZiksU2U9dmUucy5yO1NlPD12ZS5lLnI7KytTZSlmb3IodmFyIEhlPXZlLnMuYztIZTw9dmUuZS5jOysrSGUpe3ZhciBCZT1kaSh7YzpIZSxyOlNlfSk7UT8oeVtTZV18fCh5W1NlXT1bXSkseVtTZV1bSGVd'@;
put 'fHwoeVtTZV1bSGVdPXt0OiJ6Iix2OnZvaWQgMH0pLHlbU2VdW0hlXS5sPWdlKTooeVtCZV18fCh5W0JlXT17dDoieiIsdjp2b2lkIDB9KSx5W0JlXS5sPWdlKX19fSh2ZSxlcixRKTt2YXIgdHI9QmUubWF0Y2goTEkpO3RyJiZmdW5jdGlvbiBQSSh5LFApe3ZhciBMPWxuKHksITEsITApO1Bb'@;
put 'IiFwcmludCJdfHwoUFsiIXByaW50Il09e30pLFBbIiFwcmludCJdLnByb3BzfHwoUFsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBRPVBbIiFwcmludCJdLnByb3BzO0wuZ3JpZExpbmVzJiYoUS5ncmlkbGluZXM9eXIoTC5ncmlkTGluZXMpKSxudWxsIT1MLmhvcml6b250YWxDZW50ZXJlZCYm'@;
put 'KFEuY2VudGVyWD15cihMLmhvcml6b250YWxDZW50ZXJlZCkpLG51bGwhPUwudmVydGljYWxDZW50ZXJlZCYmKFEuY2VudGVyWT15cihMLnZlcnRpY2FsQ2VudGVyZWQpKX0odHJbMF0sdmUpO3ZhciBabj1CZS5tYXRjaChNdik7Wm4mJigodmVbIiFwcmludCJdfHwodmVbIiFwcmludCJdPXt9'@;
put 'KSkubWFyZ2lucz12ZVsiIW1hcmdpbnMiXT14UyhsbihablswXSkpKTt2YXIgQnI9QmUubWF0Y2goVzMpO0JyJiZmdW5jdGlvbiB5Uyh5LFApe3ZhciBMPWxuKHksITEsITApO2RlbGV0ZSBMLmlkLGRlbGV0ZSBMWzBdLFBbIiFwcmludCJdfHwoUFsiIXByaW50Il09e30pLFBbIiFwcmludCJd'@;
put 'LnByb3BzfHwoUFsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBRPVBbIiFwcmludCJdLnByb3BzO0wub3JpZW50YXRpb24mJihRLm9yaWVudGF0aW9uPUwub3JpZW50YXRpb24pLEwuc2NhbGUmJihRLnNjYWxlPStMLnNjYWxlKSwrTC5maXRUb0hlaWdodD49MCYmKChRLmZpdHx8KFEuZml0PXt9'@;
put 'KSkuaGVpZ2h0PStMLmZpdFRvSGVpZ2h0KSwrTC5maXRUb1dpZHRoPj0wJiYoKFEuZml0fHwoUS5maXQ9e30pKS53aWR0aD0rTC5maXRUb1dpZHRoKSxMLnBhcGVySGVpZ2h0JiZMLnBhcGVyV2lkdGg/US5wYXBlcj17d2lkdGg6TC5wYXBlcldpZHRoLGhlaWdodDpMLnBhcGVySGVpZ2h0fTpM'@;
put 'LnBhcGVyU2l6ZSYmKFEucGFwZXI9UW1bUS5wYXBlcj0rTC5wYXBlclNpemVdfHxRLnBhcGVyKSxMLmhvcml6b250YWxEcGk/US5kcGk9K0wuaG9yaXpvbnRhbERwaTpMLnZlcnRpY2FsRHBpJiYoUS5kcGk9K0wudmVydGljYWxEcGkpLCJhdXRvbWF0aWMiIT0oTC5maXJzdFBhZ2VOdW1iZXJ8'@;
put 'fCJhdXRvbWF0aWMiKSYmKFEuZmlyc3Q9K0wuZmlyc3RQYWdlTnVtYmVyKSx5cihMLmJsYWNrQW5kV2hpdGUpJiYoUS5idz0hMCkseXIoTC5kcmFmdCkmJihRLmRyYWZ0PSEwKSwib3ZlclRoZW5Eb3duIj09TC5wYWdlT3JkZXImJihRLm9yZGVyPSJvdmVyIiksa3ZbTC5jZWxsQ29tbWVudHNd'@;
put 'JiYoUS5jb21tZW50cz1rdltMLmNlbGxDb21tZW50c10pLGJTW0wuZXJyb3JzXSYmKFEuZXJyb3JzPWJTW0wuZXJyb3JzXSl9KEJyWzBdLHZlKTt2YXIgb2k9QmUubWF0Y2gocVopO29pJiZmdW5jdGlvbiBJdih5LFApe2lmKFBbIiFwcmludCJdfHwoUFsiIXByaW50Il09e30pLHlbMV0pe3Zh'@;
put 'ciBMPSIiLFE9MDt5WzFdLnJlcGxhY2UoJHQsZnVuY3Rpb24ocmUsZ2Upe2lmKCIvIiE9cmUuY2hhckF0KDEpKUw9cmUuc2xpY2UoMSwtMSksUT1nZStyZS5sZW5ndGg7ZWxzZSBpZihMKXt2YXIgX2U9TC5tYXRjaCgvSGVhZGVyLyk/ImhlYWRlciI6ImZvb3RlciIsdmU9TC5yZXBsYWNlKC9I'@;
put 'ZWFkZXJ8Rm9vdGVyLywiIik7TD0iIixQWyIhcHJpbnQiXVtfZV18fChQWyIhcHJpbnQiXVtfZV09e30pLFBbIiFwcmludCJdW19lXVt2ZV09eHIoUGkoeVsxXS5zbGljZShRLGdlKSkpfX0pfX0ob2ksdmUpO3ZhciBraT1CZS5tYXRjaChXZCk7a2kmJigodmVbIiFwcmludCJdfHwodmVbIiFw'@;
put 'cmludCJdPXt9KSkucm93QnJlYWtzPXZlWyIhcm93QnJlYWtzIl09ZnVuY3Rpb24gU1MoeSl7dmFyIFA9W107cmV0dXJuKHkubWF0Y2goQ1MpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgUT1sbihMKTtQLnB1c2goe1I6K1EuaWR9KX0pLFB9KGtpWzBdKSk7dmFyIExpPUJlLm1hdGNo'@;
put 'KGZTKTtMaSYmKCh2ZVsiIXByaW50Il18fCh2ZVsiIXByaW50Il09e30pKS5jb2xCcmVha3M9dmVbIiFjb2xCcmVha3MiXT1mdW5jdGlvbiBISSh5KXt2YXIgUD1bXTtyZXR1cm4oeS5tYXRjaChDUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPWxuKEwpO1AucHVzaCh7QzorUS5p'@;
put 'ZH0pfSksUH0oTGlbMF0pKTt2YXIgUXI9W107aWYoKFFyPUJlLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHZlWyIhcmVsIl09UXJbMV0pLChRcj1CZS5tYXRjaCgvbGVnYWN5RHJhd2luZyByOmlkPSIoLio/KSIvKSkmJih2ZVsiIWxlZ3JlbCJdPVFyWzFdKSwoUXI9QmUubWF0'@;
put 'Y2goaGYpKSYmKHZlWyIhY3RybGlkIl09UXIubWFwKGZ1bmN0aW9uKEFuKXtyZXR1cm4gbG4oQW4pfSkpLChRcj1CZS5tYXRjaChFdikpJiZmdW5jdGlvbiBnUyh5LFApe3lbIiF0YWJsZXJlZnMiXXx8KHlbIiF0YWJsZXJlZnMiXT1bXSksKFAubWF0Y2gocFMpfHxbXSkuZm9yRWFjaChmdW5j'@;
put 'dGlvbihMKXt5WyIhdGFibGVyZWZzIl0ucHVzaChsbihMKS5pZCl9KX0odmUsUXJbMV0pLFAmJlAubm9kaW0mJihTZS5zLmM9U2Uucy5yPTApLCF2ZVsiIXJlZiJdJiZTZS5lLmM+PVNlLnMuYyYmU2UuZS5yPj1TZS5zLnImJih2ZVsiIXJlZiJdPU9vKFNlKSksUC5zaGVldFJvd3M+MCYmdmVb'@;
put 'IiFyZWYiXSl7dmFyIHVyPU9pKHZlWyIhcmVmIl0pO1Auc2hlZXRSb3dzPD0rdXIuZS5yJiYodXIuZS5yPVAuc2hlZXRSb3dzLTEsdXIuZS5yPlNlLmUuciYmKHVyLmUucj1TZS5lLnIpLHVyLmUucjx1ci5zLnImJih1ci5zLnI9dXIuZS5yKSx1ci5lLmM+U2UuZS5jJiYodXIuZS5jPVNlLmUu'@;
put 'YyksdXIuZS5jPHVyLnMuYyYmKHVyLnMuYz11ci5lLmMpLHZlWyIhZnVsbHJlZiJdPXZlWyIhcmVmIl0sdmVbIiFyZWYiXT1Pbyh1cikpfXJldHVybiBrdCYmKHZlWyIhc2hlZXRGb3JtYXQiXT1mdW5jdGlvbiBYWih5KXt2YXIgUD17fSxMPXt9LFE9ITEscmU9e30sZ2U9ITE7cmV0dXJuIHku'@;
put 'ZGVmYXVsdFJvd0hlaWdodCYmKFE9ITAsTC5ocHQ9cGFyc2VGbG9hdCh5LmRlZmF1bHRSb3dIZWlnaHQpKSx5Lnplcm9IZWlnaHQmJihRPSEwLEwuaGlkZGVuPXlyKHkuemVyb0hlaWdodCkpLHkuYmFzZUNvbFdpZHRoPyhnZT0hMCxyZS53Y2g9cGFyc2VGbG9hdCh5LmJhc2VDb2xXaWR0aCkp'@;
put 'OnkuZGVmYXVsdENvbFdpZHRoJiYoZ2U9ITAscmUud2NoPXBhcnNlRmxvYXQoeS5kZWZhdWx0Q29sV2lkdGgpLTUvcGwpLHkub3V0bGluZUxldmVsQ29sJiYoUC5jb2xvdXRsaW5lPXBhcnNlSW50KHkub3V0bGluZUxldmVsQ29sKSkseS5vdXRsaW5lTGV2ZWxSb3cmJihQLnJvd291dGxpbmU9'@;
put 'cGFyc2VJbnQoeS5vdXRsaW5lTGV2ZWxSb3cpKSx5LnRoaWNrQm90dG9tJiYoUC5ib3R0aGljaz15cih5LnRoaWNrQm90dG9tKSkseS50aGlja1RvcCYmKFAudG9wdGhpY2s9eXIoeS50aGlja1RvcCkpLHkuZHlEZXNjZW50JiYoUC5keURlc2NlbnQ9cGFyc2VGbG9hdCh5LmR5RGVzY2VudCkp'@;
put 'LFEmJihJMyhMKSxQLnJvdz1MKSxnZSYmKHB1KHJlKSxQLmNvbD1yZSksUH0obG4oa3RbMF0pKSksVHQubGVuZ3RoPjAmJih2ZVsiIWNvbHMiXT1UdCksdW4ubGVuZ3RoPjAmJih2ZVsiIW1lcmdlcyJdPXVuKSxRWyIhaWQiXVt2ZVsiIXJlbCJdXSYmKHZlWyIhZHJhd2VsIl09UVsiIWlkIl1b'@;
put 'dmVbIiFyZWwiXV0pLFFbIiFpZCJdW3ZlWyIhbGVncmVsIl1dJiYodmVbIiFsZWdkcmF3ZWwiXT1RWyIhaWQiXVt2ZVsiIWxlZ3JlbCJdXSksKHZlWyIhY3RybGlkIl18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEFuKXtBbi5yZWw9UVsiIWlkIl1bQW4uaWRdfSksbnVsbD09dmVbIiFncmlkbGlu'@;
put 'ZXMiXSYmKHZlWyIhZ3JpZGxpbmVzIl09ITApLHZlfSh5LFEsTCxyZSxnZSxfZSx2ZSl9KG50LFAscmUsU2UsZ2VbUV0sSGUsQmUsR2UpO2JyZWFrO2Nhc2UiY2hhcnQiOmR0PWZ1bmN0aW9uIFZMKHksUCxMLFEscmUsZ2UsX2UsdmUpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0'@;
put 'aW9uIHRwKHksUCxMLFEscmUpe2lmKCF5KXJldHVybiB5O1F8fChRPXsiIWlkIjp7fX0pO3ZhciBnZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sX2U9W10sdmU9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24oSGUsQmUsR2Upe3N3aXRjaChHZSl7Y2FzZSA1NTA6'@;
put 'Z2VbIiFyZWwiXT1IZTticmVhaztjYXNlIDY1MTpyZS5TaGVldHNbTF18fChyZS5TaGVldHNbTF09e30pLEhlLm5hbWUmJihyZS5TaGVldHNbTF0uQ29kZU5hbWU9SGUubmFtZSk7YnJlYWs7Y2FzZSA1NjI6Y2FzZSA2NTI6Y2FzZSA2Njk6Y2FzZSA2Nzk6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2Fz'@;
put 'ZSA0NzY6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgMzU6dmU9ITA7YnJlYWs7Y2FzZSAzNjp2ZT0hMTticmVhaztjYXNlIDM3Ol9lLnB1c2goQmUpO2JyZWFrO2Nhc2UgMzg6X2UucG9wKCk7YnJlYWs7ZGVmYXVsdDppZigoQmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApX2UucHVzaChCZSk7ZWxz'@;
put 'ZSBpZigoQmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKV9lLnBvcCgpO2Vsc2UgaWYoIXZlfHxQLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrR2UrIiAiK0JlKX19LFApLFFbIiFpZCJdW2dlWyIhcmVsIl1dJiYoZ2VbIiFkcmF3ZWwiXT1RWyIhaWQiXVtnZVsiIXJl'@;
put 'bCJdXSksZ2V9KHksUSxMLHJlLGdlKTpmdW5jdGlvbiBKMyh5LFAsTCxRLHJlKXtpZigheSlyZXR1cm4geTtRfHwoUT17IiFpZCI6e319KTt2YXIgX2UsZ2U9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LHZlPXkubWF0Y2goeHYpO3ZlJiZ2Nih2ZVswXSwwLHJl'@;
put 'LEwpO3ZhciBTZT15Lm1hdGNoKE12KTtyZXR1cm4gU2UmJihnZVsiIW1hcmdpbnMiXT14UyhsbihTZVswXSkpKSwoX2U9eS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihnZVsiIXJlbCJdPV9lWzFdKSxRWyIhaWQiXVtnZVsiIXJlbCJdXSYmKGdlWyIhZHJhd2VsIl09UVsiIWlk'@;
put 'Il1bZ2VbIiFyZWwiXV0pLGdlfSh5LDAsTCxyZSxnZSl9KG50LFAscmUsU2UsZ2VbUV0sSGUpO2JyZWFrO2Nhc2UibWFjcm8iOmR0PWZ1bmN0aW9uIEJMKHksUCxMLFEscmUsZ2UsX2UsdmUpe3JldHVybiBQLnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCxQKTticmVhaztjYXNlImRp'@;
put 'YWxvZyI6ZHQ9ZnVuY3Rpb24gakwoeSxQLEwsUSxyZSxnZSxfZSx2ZSl7cmV0dXJuIFAuc2xpY2UoLTQpLHsiIXR5cGUiOiJkaWFsb2cifX0oMCxQKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHNoZWV0IHR5cGUgIit2ZSl9aWYoU2UuY2FsbGJhY2spcmV0'@;
put 'dXJuO19lW1FdPWR0LGZ1bmN0aW9uIFBNKHksUCxMLFEscmUsZ2UsX2UsdmUpe2lmKHkmJnlbIiFkcmF3ZWwiXSl7dmFyIFNlPXNuKHlbIiFkcmF3ZWwiXS5UYXJnZXQsUSksSGU9QmkoU2UpLEJlPWZ1bmN0aW9uIEdEKHksUCxMLFEscmUpe3ZhciBnZT17Y2hhcnRzOltdLGltYWdlczpbXSxz'@;
put 'aGFwZXM6W119O2lmKCF5KXJldHVybiBnZTt2YXIgX2U9cmV8fHt9O3JldHVybih5Lm1hdGNoKC88W148XSo/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPz4vZyl8fFtd'@;
put 'KS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgU2U9IiIsSGU9e3R5cGU6IiJ9LEJlPXt9LEdlPSEwLG50PSExLGR0PSExLEN0PSExLGN0PXtzOnt9fSxidD0tMSxGdD1bXSxrdD1bXSxUdD17czp7YWxpZ25tZW50Ontob3Jpem9udGFsOiJjZW50ZXIiLHZlcnRpY2FsOiJjZW50ZXIifX19LFp0'@;
put 'PSIiLHBuPS0xLHVuPXt9O3ZlLnJlcGxhY2UoJHQsZnVuY3Rpb24ocW4sem4pe0Z0PW51bGw7dmFyIGtuPWxuKHFuKSxlcj1qbihrblswXSkucmVwbGFjZSgvW1wvXT8+JC8sIiIpO3N3aXRjaChlcil7Y2FzZSI8Y2xpZW50RGF0YSI6YnJlYWs7Y2FzZSI8YWJzb2x1dGVBbmNob3IiOmNhc2Ui'@;
put 'PG9uZUNlbGxBbmNob3IiOmNhc2UiPHR3b0NlbGxBbmNob3IiOkhlLnR5cGU9am4oa25bMF0pLnJlcGxhY2UoL1s8Pl0vZywiIik7YnJlYWs7Y2FzZSI8L2Fic29sdXRlQW5jaG9yIjpjYXNlIjwvb25lQ2VsbEFuY2hvciI6Y2FzZSI8L3R3b0NlbGxBbmNob3IiOmJyZWFrO2Nhc2UiPHBvcyI6'@;
put 'SGUucG9zPXt4Oitrbi54LHk6K2tuLnl9O2JyZWFrO2Nhc2UiPGV4dCI6R2UmJihIZS5leHQ9e3g6K2tuLmN4LHk6K2tuLmN5fSk7YnJlYWs7Y2FzZSI8ZnJvbSI6Y2FzZSI8dG8iOkJlPXt9O2JyZWFrO2Nhc2UiPC9mcm9tIjpHZSYmKEhlLmZyb209QmUpO2JyZWFrO2Nhc2UiPC90byI6R2Um'@;
put 'JihIZS50bz1CZSk7YnJlYWs7Y2FzZSI8Y29sIjpjYXNlIjxjb2xPZmYiOmNhc2UiPHJvdyI6Y2FzZSI8cm93T2ZmIjpidD16bitxbi5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbCI6QmUuYz0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPC9jb2xPZmYiOkJlLmNPZmY9K3ZlLnNsaWNlKGJ0'@;
put 'LHpuKTticmVhaztjYXNlIjwvcm93IjpCZS5yPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8L3Jvd09mZiI6QmUuck9mZj0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPHNwIjpTZT0ic2hhcGUiLFR0LkFuY2hvcj1IZSxnZS5zaGFwZXMucHVzaChUdCksR2U9ITE7YnJlYWs7Y2Fz'@;
put 'ZSI8L3NwIjpHZT0hMDticmVhaztjYXNlIjxncmFwaGljRnJhbWUiOlNlPSJncmFwaGljIixHZT0hMTticmVhaztjYXNlIjwvZ3JhcGhpY0ZyYW1lIjpHZT0hMDticmVhaztjYXNlIjxwaWMiOlNlPSJwaWN0dXJlIixHZT0hMTticmVhaztjYXNlIjwvcGljIjpHZT0hMDticmVhaztjYXNlIjxn'@;
put 'cnBTcCI6U2U9Imdyb3Vwc2hhcGUiLEdlPSExO2JyZWFrO2Nhc2UiPC9ncnBTcCI6R2U9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpYyI6Y2FzZSI8L2dyYXBoaWMiOmNhc2UiPHhmcm0iOmNhc2UiPC94ZnJtIjpjYXNlIjxvZmYiOmJyZWFrO2Nhc2UiPGdyYXBoaWNEYXRhIjpudD0hMDticmVhaztj'@;
put 'YXNlIjwvZ3JhcGhpY0RhdGEiOm50PSExO2JyZWFrO2Nhc2UiPGJsaXBGaWxsIjpudD0hMDticmVhaztjYXNlIjwvYmxpcEZpbGwiOm50PSExO2JyZWFrO2Nhc2UiPC9ibGlwIjpicmVhaztjYXNlIjxzcmNSZWN0IjpudD0hMDticmVhaztjYXNlIjwvc3JjUmVjdCI6bnQ9ITE7YnJlYWs7Y2Fz'@;
put 'ZSI8bm9GaWxsIjppZihkdClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMSlbMF0mJihUdC5zLmZnQ29sb3I9bnVsbCk7YnJlYWs7Y2FzZSI8L3NvbGlkRmlsbCI6aWYoZHR8fEN0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0yKVswXT9UdC5zLmZnQ29sb3I9dW46IjxyUHIiPT1rdC5zbGlj'@;
put 'ZSgtMilbMF0mJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGN0LnMuY29sb3I9dW4pLHVuPXt9LEN0PSExO2JyZWFrO2Nhc2UiPHByc3RHZW9tIjoic2hhcGUiPT1TZSYmKFR0WyIhc2hhcGUiXT1rbi5wcnN0KTticmVhaztjYXNlIjwvcHJzdEdlb20iOmNhc2UiPGF2THN0IjpicmVhaztj'@;
put 'YXNlIjx0eEJvZHkiOm50PSEwLFR0LlI9W107YnJlYWs7Y2FzZSI8L3R4Qm9keSI6bnQ9ITE7YnJlYWs7Y2FzZSI8Ym9keVByIjpUdC5zLmFsaWdubWVudC52ZXJ0aWNhbD1ZRFtrbi5hbmNob3J8fCJ0Il18fCJ0b3AiO2JyZWFrO2Nhc2UiPGxzdFN0eWxlIjpicmVhaztjYXNlIjx0Ijpwbj16'@;
put 'bitxbi5sZW5ndGg7YnJlYWs7Y2FzZSI8YnIiOmNhc2UiPGJyLz4iOlp0Kz0iXG4iO2JyZWFrO2Nhc2UiPC90IjpadCs9dmUuc2xpY2UocG4sem4pO2JyZWFrO2Nhc2UiPHBQciI6VHQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8KFR0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9TENba24uYWxn'@;
put 'bnx8ImwiXXx8ImxlZnQiKSxrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihjdC5zLmFsaWdubWVudC5ob3Jpem9udGFsPUxDW2tuLmFsZ258fCJsIl18fCJsZWZ0Iik7YnJlYWs7Y2FzZSI8clByIjprbi5zeiYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoVHQucy5zej1jdC5zLnN6PStr'@;
put 'bi5zei8xMDApO2JyZWFrO2Nhc2UiPHAiOlp0PSIiLGN0PXt0OiJzIix2OiIiLHM6e2FsaWdubWVudDp7fX19O2JyZWFrO2Nhc2UiPC9wIjoic2hhcGUiPT1TZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoVHQudj0oVHQudnx8IiIpK1p0LGN0LnY9WnQsVHQuUi5wdXNoKGN0KSk7YnJl'@;
put 'YWs7Y2FzZSI8bGF0aW4iOmtuLnR5cGVmYWNlJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihjdC5zLm5hbWU9a24udHlwZWZhY2UpO2JyZWFrO2Nhc2UiPHN0eWxlIjpudD0hMCxkdD0hMDticmVhaztjYXNlIjwvc3R5bGUiOm50PSExLGR0PSExO2JyZWFrO2Nhc2UiPGxuUmVmIjpjYXNl'@;
put 'IjxmaWxsUmVmIjpjYXNlIjxlZmZlY3RSZWYiOmNhc2UiPGZvbnRSZWYiOmJyZWFrO2Nhc2UiPC9maWxsUmVmIjohZHQmJiJzaGFwZSI9PVNlJiYoVHQucy5mZ0NvbG9yPXVuKSx1bj17fTticmVhaztjYXNlIjwvZm9udFJlZiI6IWR0JiYic2hhcGUiPT1TZSYmKFR0LnMuY29sb3I9dW4pLHVu'@;
put 'PXt9O2JyZWFrO2Nhc2UiPHNjaGVtZUNsciI6dmFyIHRyPXtiZzE6Imx0MSIsYmcyOiJsdDIiLHR4MToiZGsxIix0eDI6ImRrMiJ9W2tuLnZhbF18fGtuLnZhbCxabj0oKFEudGhlbWVFbGVtZW50c3x8e30pLmNsclNjaGVtZXx8W10pLmZpbmQoZnVuY3Rpb24ob2kpe3JldHVybiBvaS5uYW1l'@;
put 'PT10cn0pO1puP3VuLnJnYj1abi5yZ2I6Q3Q9ITA7YnJlYWs7Y2FzZSI8c2NyZ2JDbHIiOkN0PSEwO2JyZWFrO2Nhc2UiPHNyZ2JDbHIiOnVuLnJnYj1rbi52YWwuc2xpY2UoLTYpO2JyZWFrO2Nhc2UiPGhzbENsciI6Y2FzZSI8c3lzQ2xyIjpjYXNlIjxwcnN0Q2xyIjpDdD0hMDticmVhaztj'@;
put 'YXNlIjxjaGFydCI6RnQ9Z2UuY2hhcnRzO3ZhciBCcj1rbi5pZDtjYXNlIjxibGlwIjpGdHx8KEZ0PWdlLmltYWdlcyxCcj1rbi5lbWJlZCksRnQucHVzaCh7QW5jaG9yOkhlLFRhcmdldDooUFsiIWlkIl1bQnJdfHx7fSkuVGFyZ2V0fSksa24ubGluayYmKEZ0W0Z0Lmxlbmd0aC0xXS5MaW5r'@;
put 'PShQWyIhaWQiXVtrbi5saW5rXXx8e30pLlRhcmdldCk7YnJlYWs7Y2FzZSI8Z3JwU3BQciI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2dycFNwUHIiOm50PSExO2JyZWFrO2Nhc2UiPG52R3JwU3BQciI6bnQ9ITA7YnJlYWs7Y2FzZSI8L252R3JwU3BQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8c3BQciI6'@;
put 'bnQ9ITA7YnJlYWs7Y2FzZSI8L3NwUHIiOm50PSExO2JyZWFrO2Nhc2UiPHN0cmV0Y2giOmNhc2UiPC9zdHJldGNoIjpjYXNlIjxmaWxsUmVjdCI6Y2FzZSI8bnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L252R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGNOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjwv'@;
put 'Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGdyYXBoaWNGcmFtZUxvY2tzIjpjYXNlIjxudlBpY1ByIjpjYXNlIjwvbnZQaWNQciI6Y2FzZSI8Y052UGljUHIiOmNhc2UiPC9jTnZQaWNQciI6Y2FzZSI8cGljTG9ja3MiOmNhc2UiPGNOdkdycFNwUHIiOmNhc2UiPC9jTnZHcnBTcFByIjpjYXNl'@;
put 'IjxncnBTcExvY2tzIjpjYXNlIjxudlNwUHIiOmNhc2UiPC9udlNwUHIiOmNhc2UiPGNOdlNwUHIiOmNhc2UiPC9jTnZTcFByIjpjYXNlIjxzcExvY2tzIjpicmVhaztjYXNlIjxjTnZQciI6bnQ9ITA7YnJlYWs7Y2FzZSI8L2NOdlByIjpudD0hMTticmVhaztjYXNlIjxjeG5TcCI6bnQ9ITA7'@;
put 'YnJlYWs7Y2FzZSI8L2N4blNwIjpudD0hMTticmVhaztjYXNlIjxjTnZDeG5TcFByIjpudD0hMDticmVhaztjYXNlIjwvY052Q3huU3BQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8bnZDeG5TcFByIjpjYXNlIjwvbnZDeG5TcFByIjpicmVhaztjYXNlIjxleHRMc3QiOm50PSEwLGR0PSEwO2JyZWFr'@;
put 'O2Nhc2UiPC9leHRMc3QiOm50PSExLGR0PSExO2JyZWFrO2Nhc2UiPC9leHQiOmJyZWFrO2RlZmF1bHQ6aWYoX2UmJl9lLldURiYmIW50KXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra25bMF0rIiBpbiBkcmF3aW5nIil9cmV0dXJuIjwvIj09ZXIuc2xpY2UoMCwyKT9rdC5wb3Ao'@;
put 'KToiLz4iIT1xbi5zbGljZShxbi5sZW5ndGgtMikmJmt0LnB1c2goZXIpLCIifSl9KSxnZX0oUXQoTCxTZSwhMCksRG8oUXQoTCxIZSwhMCksU2UpLDAsdmUscmUpO2lmKEJlKXtpZihCZS5jaGFydHMpZm9yKHZhciBHZT0wO0dlPEJlLmNoYXJ0cy5sZW5ndGg7KytHZSl7dmFyIG50PUJlLmNo'@;
put 'YXJ0c1tHZV0sZHQ9c24obnQuVGFyZ2V0LFNlKSxDdD1CaShkdCksY3Q9ImNoYXJ0Ij09UCYmMD09R2UsYnQ9bTAoUXQoTCxkdCwhMCksMCwwLERvKFF0KEwsQ3QsITApLGR0KSwwLGN0P3k6bnVsbCxudCxjdD9udWxsOnkpO2N0fHwoeVsiIWNoYXJ0cyJdfHwoeVsiIWNoYXJ0cyJdPVtdKSx5'@;
put 'WyIhY2hhcnRzIl0ucHVzaChidCkpfWlmKHJlLmJvb2tJbWFnZXMmJkJlLmltYWdlcylmb3IodmFyIEZ0PTA7RnQ8QmUuaW1hZ2VzLmxlbmd0aDsrK0Z0KXt2YXIga3Q9QmUuaW1hZ2VzW0Z0XSxUdD17IiF0eXBlIjoiaW1hZ2UiLCIhcG9zIjp4QyhrdC5BbmNob3IpLCIhcG9zVHlwZSI6a3Qu'@;
put 'QW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOnNmKGt0LkFuY2hvcix5KSwiIXJlbHBvcyI6S20oa3QuQW5jaG9yLHkpfTtpZihrdC5UYXJnZXQmJihUdFsiIXBhdGgiXT1zbihrdC5UYXJnZXQsU2UpLFR0WyIhZGF0YSJdPUl0KEwsVHRbIiFwYXRoIl0pLFR0WyIh'@;
put 'ZGF0YXR5cGUiXT0ic3RyaW5nIj09dHlwZW9mIFR0WyIhZGF0YSJdPyJiaW5hcnkiOiJidWZmZXIiKSxrdC5MaW5rJiYoVHRbIiFkYXRhdHlwZSJdfHwoVHRbIiFkYXRhdHlwZSJdPSJyZW1vdGUiKSxUdFsiIWxpbmsiXT1rdC5MaW5rKSwhVHRbIiFkYXRhdHlwZSJdKXRocm93IkltYWdlIGRh'@;
put 'dGEgY2Fubm90IGJlIGZvdW5kIjt5WyIhaW1hZ2VzIl18fCh5WyIhaW1hZ2VzIl09W10pLHlbIiFpbWFnZXMiXS5wdXNoKFR0KX12YXIgWnQscG47aWYoQmUuc2hhcGVzKWZvcih2YXIgdW49MDt1bjxCZS5zaGFwZXMubGVuZ3RoOysrdW4pcG49eyIhdHlwZSI6InNoYXBlIiwiIXBvcyI6c2Yo'@;
put 'KFp0PUJlLnNoYXBlc1t1bl0pLkFuY2hvcix5KSwiIXBvc1R5cGUiOlp0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpzZihadC5BbmNob3IseSksIiFyZWxwb3MiOkttKFp0LkFuY2hvcix5KX0sWyJ2IiwiIXNoYXBlIiwicyIsIlIiXS5mb3JFYWNoKEtuKSx5'@;
put 'WyIhc2hhcGVzIl18fCh5WyIhc2hhcGVzIl09W10pLHlbIiFzaGFwZXMiXS5wdXNoKHBuKX19ZnVuY3Rpb24gS24ocW4pe1p0W3FuXSYmKHBuW3FuXT1adFtxbl0pfX0oZHQsdmUseSxQLFNlLDAsMCxCZSk7dmFyIEN0PVtdO3JldHVybiBnZSYmZ2VbUV0mJmx0KGdlW1FdKS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKGN0KXtpZihnZVtRXVtjdF0uVHlwZT09SGkuQ01OVCl7dmFyIGJ0PXNuKGdlW1FdW2N0XS5UYXJnZXQsUCk7aWYoIShDdD1mdW5jdGlvbiB1WSh5LFAsTCl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gUUQoeSxQKXt2YXIgTD1bXSxRPVtdLHJlPXt9LGdlPSEx'@;
put 'O3JldHVybiBIbyh5LGZ1bmN0aW9uKHZlLFNlLEhlKXtzd2l0Y2goSGUpe2Nhc2UgNjMyOlEucHVzaCh2ZSk7YnJlYWs7Y2FzZSA2MzU6cmU9dmU7YnJlYWs7Y2FzZSA2Mzc6cmUudD12ZS50LHJlLmg9dmUuaCxyZS5yPXZlLnI7YnJlYWs7Y2FzZSA2MzY6aWYocmUuYXV0aG9yPVFbcmUuaWF1'@;
put 'dGhvcl0sZGVsZXRlIHJlLmlhdXRob3IsUC5zaGVldFJvd3MmJnJlLnJmeCYmUC5zaGVldFJvd3M8PXJlLnJmeC5yKWJyZWFrO3JlLnR8fChyZS50PSIiKSxkZWxldGUgcmUucmZ4LEwucHVzaChyZSk7YnJlYWs7Y2FzZSAzMDcyOmNhc2UgMzc6Y2FzZSAzODpicmVhaztjYXNlIDM1OmdlPSEw'@;
put 'O2JyZWFrO2Nhc2UgMzY6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZighKChTZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFNlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighZ2V8fFAuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrSGUrIiAiK1NlKX19KSxM'@;
put 'fSh5LEwpOmZ1bmN0aW9uIEhDKHksUCl7aWYoeS5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRzICpcLz4vKSlyZXR1cm5bXTt2YXIgTD1bXSxRPVtdLHJlPXkubWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7cmUmJnJlWzFdJiZyZVsxXS5z'@;
put 'cGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihfZSl7aWYoIiIhPT1fZSYmIiIhPT1fZS50cmltKCkpe3ZhciB2ZT1fZS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcltePl0qPiguKikvKTt2ZSYmTC5wdXNoKHZlWzFdKX19KTt2YXIgZ2U9eS5tYXRjaCgvPCg/Olx3Kzop'@;
put 'P2NvbW1lbnRMaXN0PihbXHNcU10qKTxcLyg/Olx3KzopP2NvbW1lbnRMaXN0Pi8pO3JldHVybiBnZSYmZ2VbMV0mJmdlWzFdLnNwbGl0KC88XC9cdyo6P2NvbW1lbnQ+LykuZm9yRWFjaChmdW5jdGlvbihfZSl7aWYoIiIhPT1fZSYmIiIhPT1fZS50cmltKCkpe3ZhciB2ZT1fZS5tYXRjaCgv'@;
put 'PCg/Olx3KzopP2NvbW1lbnRbXj5dKj4vKTtpZih2ZSl7dmFyIFNlPWxuKHZlWzBdKSxIZT17YXV0aG9yOlNlLmF1dGhvcklkJiZMW1NlLmF1dGhvcklkXXx8InNoZWV0anNnaG9zdCIscmVmOlNlLnJlZixndWlkOlNlLmd1aWR9LEJlPXNzKFNlLnJlZik7aWYoIShQLnNoZWV0Um93cyYmUC5z'@;
put 'aGVldFJvd3M8PUJlLnIpKXt2YXIgR2U9X2UubWF0Y2goLzwoPzpcdys6KT90ZXh0PihbXHNcU10qKTxcLyg/Olx3KzopP3RleHQ+LyksbnQ9ISFHZSYmISFHZVsxXSYmRDkoR2VbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O0hlLnI9bnQuciwiPHQ+PC90PiI9PW50LnImJihudC50PW50Lmg9IiIp'@;
put 'LEhlLnQ9KG50LnR8fCIiKS5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxQLmNlbGxIVE1MJiYoSGUuaD1udC5oKSxRLnB1c2goSGUpfX19fSksUX0oeSxMKX0oSXQoeSxidCwhMCksYnQsU2UpKXx8IUN0Lmxlbmd0aClyZXR1cm47IWZ1bmN0aW9uICQ5KHksUCl7'@;
put 'dmFyIFEsTD1BcnJheS5pc0FycmF5KHkpO1AuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIGdlPXNzKHJlLnJlZik7aWYoTD8oeVtnZS5yXXx8KHlbZ2Uucl09W10pLFE9eVtnZS5yXVtnZS5jXSk6UT15W3JlLnJlZl0sIVEpe1E9e3Q6InoifSxMP3lbZ2Uucl1bZ2UuY109UTp5W3JlLnJlZl09'@;
put 'UTt2YXIgX2U9T2koeVsiIXJlZiJdfHwiQkRXR08xMDAwMDAxOkExIik7X2Uucy5yPmdlLnImJihfZS5zLnI9Z2UuciksX2UuZS5yPGdlLnImJihfZS5lLnI9Z2UuciksX2Uucy5jPmdlLmMmJihfZS5zLmM9Z2UuYyksX2UuZS5jPGdlLmMmJihfZS5lLmM9Z2UuYyk7dmFyIHZlPU9vKF9lKTt2'@;
put 'ZSE9PXlbIiFyZWYiXSYmKHlbIiFyZWYiXT12ZSl9US5jfHwoUS5jPVtdKTt2YXIgU2U9e2E6cmUuYXV0aG9yLHQ6cmUudCxyOnJlLnJ9O1NlLnImJiJzdHJpbmciPT10eXBlb2YgU2UuciYmKFNlLlI9RG0oU2UucikpLHJlLmgmJihTZS5oPXJlLmgpLFEuYy5wdXNoKFNlKX0pfShkdCxDdCl9'@;
put 'fSksZnVuY3Rpb24gcFIoeSxQLEwsUSxyZSxnZSxfZSl7IXl8fCF5WyIhdGFibGVyZWZzIl18fCFMfHwhTFsiIWlkIl18fCh5WyIhdGFibGVzIl09W10seVsiIXRhYmxlcmVmcyJdLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT1MWyIhaWQiXVt2ZV07aWYoU2UmJlNlLlRhcmdldCl7dmFy'@;
put 'IEhlPXNuKFNlLlRhcmdldCxRKTshZnVuY3Rpb24gJDQoeSxQLEwsUSxyZSl7dmFyIGdlPXtzdHlsZTp7fSxoZWFkZXI6MH0sX2U9ITE7eS5yZXBsYWNlKCR0LGZ1bmN0aW9uKHZlKXt2YXIgU2U9bG4odmUpO3N3aXRjaChqbihTZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC90YWJsZT4iOmNh'@;
put 'c2UiPC9hdXRvRmlsdGVyPiI6Y2FzZSI8c29ydFN0YXRlIjpjYXNlIjxzb3J0U3RhdGU+IjpjYXNlIjwvc29ydFN0YXRlPiI6Y2FzZSI8L3RhYmxlQ29sdW1ucyI6Y2FzZSI8L3RhYmxlQ29sdW1ucz4iOmNhc2UiPC90YWJsZUNvbHVtbj4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxh'@;
put 'PiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGEiOmNhc2UiPC9jYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhIjpjYXNlIjwvdG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHhtbENvbHVtblByPiI6Y2Fz'@;
put 'ZSI8eG1sQ29sdW1uUHIiOmNhc2UiPC94bWxDb2x1bW5Qcj4iOmNhc2UiPHNvcnRDb25kaXRpb24+IjpjYXNlIjxzb3J0Q29uZGl0aW9uIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8dGFibGUiOlNlLnJl'@;
put 'ZiYmKGdlLnJlZj1TZS5yZWYpLFNlLm5hbWU/Z2UubmFtZT1TZS5uYW1lOlNlLmRpc3BsYXlOYW1lJiYoZ2UubmFtZT1TZS5kaXNwbGF5TmFtZSksbnVsbCE9U2UuaGVhZGVycm93Y291bnQmJjEhPStTZS5oZWFkZXJyb3djb3VudD9nZS5oZWFkZXI9K1NlLmhlYWRlcnJvd2NvdW50Om51bGw9'@;
put 'PVNlLmhlYWRlcnJvd2NvdW50JiYoZ2UuaGVhZGVyPTEpO2JyZWFrO2Nhc2UiPGF1dG9GaWx0ZXIiOmNhc2UiPGF1dG9GaWx0ZXI+IjpnZS5maWx0ZXI9ITA7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW5zIjpjYXNlIjx0YWJsZUNvbHVtbnM+IjpnZS5jb2xzPVtdO2JyZWFrO2Nhc2UiPHRhYmxl'@;
put 'U3R5bGVJbmZvIjpTZS5zaG93Um93U3RyaXBlcyYmKGdlLnN0eWxlLnJvd3N0cmlwZT15cihTZS5zaG93Um93U3RyaXBlcykpLFNlLnNob3dDb2x1bW5TdHJpcGVzJiYoZ2Uuc3R5bGUuY29sc3RyaXBlPXlyKFNlLnNob3dDb2x1bW5TdHJpcGVzKSksU2Uuc2hvd0ZpcnN0Q29sdW1uJiYoZ2Uu'@;
put 'c3R5bGUuY29sZmlyc3Q9eXIoU2Uuc2hvd0ZpcnN0Q29sdW1uKSksU2Uuc2hvd0xhc3RDb2x1bW4mJihnZS5zdHlsZS5jb2xsYXN0PXlyKFNlLnNob3dMYXN0Q29sdW1uKSksU2UubmFtZSYmKGdlLnN0eWxlLm5hbWU9U2UubmFtZS5yZXBsYWNlKC9eVGFibGVTdHlsZS8sIiIpKTticmVhaztj'@;
put 'YXNlIjx0YWJsZUNvbHVtbiI6Y2FzZSI8dGFibGVDb2x1bW4+IjpnZS5jb2xzLnB1c2goe2lkOitTZS5pZCxuYW1lOlNlLm5hbWV9KTticmVhaztjYXNlIjxmaWx0ZXJDb2x1bW4+IjpjYXNlIjxmaWx0ZXJDb2x1bW4iOmNhc2UiPGN1c3RvbUZpbHRlcnMiOmNhc2UiPGN1c3RvbUZpbHRlcnM+'@;
put 'IjpjYXNlIjxleHQiOl9lPSEwO2JyZWFrO2Nhc2UiPC9maWx0ZXJDb2x1bW4+IjpjYXNlIjwvY3VzdG9tRmlsdGVycz4iOmNhc2UiPC9leHQ+IjpfZT0hMTticmVhaztkZWZhdWx0OmlmKCFfZSYmcmUuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrU2VbMF0rIiBpbiB0YWJs'@;
put 'ZSIpfXJldHVybiB2ZX0pLGdlLmZpbHRlcnx8KGdlLmZpbHRlcj0hMSksZ2Uuc3R5bGUubmFtZSYmIWdlLnN0eWxlLm5hbWUubWF0Y2goL14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pJiZMLlRhYmxlJiZMLlRhYmxlLmZvckVhY2goZnVuY3Rpb24odmUpeyh2ZS5uYW1lPT1nZS5zdHlsZS5u'@;
put 'YW1lfHx2ZS5yYXduYW1lPT1nZS5zdHlsZS5uYW1lKSYmKGdlLnN0eWxlLnJhdz1vbih2ZSkpfSksUFsiIXRhYmxlcyJdLnB1c2goZ2UpfShJdChQLEhlLCEwKSx5LHJlLDAsX2UpfX0pLGRlbGV0ZSB5WyIhdGFibGVyZWZzIl0pfShkdCx5LGdlW1FdLFAsR2UsMCxTZSksdHlwZW9mIHBhcnNl'@;
put 'X3NoZWV0X3Bpdm90PCJ1IiYmRjYucHVzaChbZHQseSxnZVtRXSxQLHtTaGVldHM6X2V9LEdlLFNlXSksZnVuY3Rpb24gRk0oeSxQLEwsUSxyZSxnZSxfZSx2ZSl7aWYoeSYmeVsiIWxlZ2RyYXdlbCJdKXt2YXIgU2U9c24oeVsiIWxlZ2RyYXdlbCJdLlRhcmdldCxRKSxIZT1RdChMLFNlLCEw'@;
put 'KTtIZSYmZnVuY3Rpb24gJEQoeSxQLEwpe3ZhciBRPTA7KHkubWF0Y2goTjMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIEZ0LGt0LFR0LFp0LHBuLEtuLHVuLHFuLGdlPSIiLF9lPSEwLHZlPSIiLFNlPS0xLEhlPXt9LEJlPXt9LEdlPXt9LG50PS0xLGR0PS0xLEN0PSIiLGN0PSIi'@;
put 'LGJ0PSIiLHpuPSExLGtuPSExO3N3aXRjaChyZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKFpuLEJyKXt2YXIgb2k9bG4oWm4pO3N3aXRjaChqbihvaVswXSkpe2Nhc2UiPHNoYXBlIjpvaS5maWxsY29sb3ImJihIZS5jb2xvcjE9b2kuZmlsbGNvbG9yKSxvaS5zdHJva2Vjb2xvciYmKEdlLmNvbG9y'@;
put 'PW9pLnN0cm9rZWNvbG9yKTticmVhaztjYXNlIjxmaWxsIjpjYXNlIjxmaWxsPiI6Ijx2OmZpbGwiPT1vaVswXSYmKG9pLmNvbG9yMiYmKEhlLmNvbG9yMj1vaS5jb2xvcjIpLG9pLnR5cGUmJihIZS50eXBlPW9pLnR5cGUpKTticmVhaztjYXNlIjwvZmlsbD4iOmNhc2UiPGxvY2siOmNhc2Ui'@;
put 'PGxvY2svPiI6YnJlYWs7Y2FzZSI8c2hhZG93IjpvaS5jb2xvciYmKEJlLmNvbG9yPW9pLmNvbG9yKSxvaS5vbiYmKEJlLm9uPW9pLm9uKTticmVhaztjYXNlIjxDbGllbnREYXRhIjpvaS5PYmplY3RUeXBlJiYoZ2U9b2kuT2JqZWN0VHlwZSk7YnJlYWs7Y2FzZSI8VmlzaWJsZSI6Y2FzZSI8'@;
put 'VmlzaWJsZS8+IjpfZT0hMTticmVhaztjYXNlIjxBbmNob3IiOmNhc2UiPEFuY2hvcj4iOmNhc2UiPFJvdyI6Y2FzZSI8Um93PiI6Y2FzZSI8Q29sdW1uIjpjYXNlIjxDb2x1bW4+IjpjYXNlIjxGbWxhTWFjcm8iOmNhc2UiPEZtbGFNYWNybz4iOmNhc2UiPEZtbGFMaW5rIjpjYXNlIjxGbWxh'@;
put 'TGluaz4iOmNhc2UiPEZtbGFSYW5nZSI6Y2FzZSI8Rm1sYVJhbmdlPiI6Y2FzZSI8U2VsVHlwZSI6Y2FzZSI8U2VsVHlwZT4iOmNhc2UiPFZhbCI6Y2FzZSI8VmFsPiI6Y2FzZSI8TWluIjpjYXNlIjxNaW4+IjpjYXNlIjxNYXgiOmNhc2UiPE1heD4iOmNhc2UiPEluYyI6Y2FzZSI8SW5jPiI6'@;
put 'Y2FzZSI8UGFnZSI6Y2FzZSI8UGFnZT4iOmNhc2UiPENoZWNrZWQiOmNhc2UiPENoZWNrZWQ+IjpjYXNlIjx0ZXh0Ym94IjpjYXNlIjx0ZXh0Ym94PiI6U2U9QnIrWm4ubGVuZ3RoO2JyZWFrO2Nhc2UiPC9BbmNob3I+Ijp2ZT1yZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9S'@;
put 'b3c+IjpudD0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvQ29sdW1uPiI6ZHQ9K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFNYWNybz4iOkN0PXJlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFMaW5rPiI6Y3Q9cmUuc2xp'@;
put 'Y2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYVJhbmdlPiI6dW49cmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvU2VsVHlwZT4iOnFuPXJlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1ZhbD4iOkZ0PStyZS5zbGljZShTZSxCcikudHJpbSgpO2Jy'@;
put 'ZWFrO2Nhc2UiPC9NaW4+IjprdD0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvTWF4PiI6VHQ9K3JlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0luYz4iOlp0PStyZS5zbGljZShTZSxCcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9QYWdlPiI6cG49K3JlLnNs'@;
put 'aWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NoZWNrZWQ+IjpLbj0rcmUuc2xpY2UoU2UsQnIpLnRyaW0oKTticmVhaztjYXNlIjwvdGV4dGJveD4iOmJ0PXJlLnNsaWNlKFNlLEJyKS50cmltKCk7YnJlYWs7Y2FzZSI8TW92ZVdpdGhDZWxscy8+IjpjYXNlIjxNb3ZlV2l0aENlbGxz'@;
put 'PiI6em49ITA7YnJlYWs7Y2FzZSI8U2l6ZVdpdGhDZWxscy8+IjpjYXNlIjxTaXplV2l0aENlbGxzPiI6a249ITB9cmV0dXJuIiJ9KSxnZSl7Y2FzZSJOb3RlIjp2YXIgZXI9cW8uc2hlZXRfZ2V0X2NlbGwoUCxudD49MCYmZHQ+PTA/ZGkoe3I6bnQsYzpkdH0pOkxbUV0ucmVmKTtlci5jJiYo'@;
put 'ZXIuYy5oaWRkZW49X2UsdmUmJihlci5jLnJhd2FuY2hvcj12ZSxYbSh2ZSxlci5jKSxFQyhlci5jWyIhcG9zIl0sMiohIXpuKyEha24sUCkpLEhlLmNvbG9yMSYmKGVyLmMuZmlsbD1IZSksQmUuY29sb3ImJihlci5jLnNoYWRvdz1CZSksR2UuY29sb3ImJihlci5jLnN0cm9rZT1HZSkpLCsr'@;
put 'UTticmVhaztjYXNlIkJ1dHRvbiI6Y2FzZSJHQm94IjpjYXNlIkRyb3AiOmNhc2UiTGFiZWwiOmNhc2UiQ2hlY2tib3giOmNhc2UiU2Nyb2xsIjpjYXNlIkxpc3QiOmNhc2UiUmFkaW8iOmNhc2UiU3BpbiI6Y2FzZSJFZGl0IjpQWyIhY29udHJvbHMiXXx8KFBbIiFjb250cm9scyJdPVtdKTt2'@;
put 'YXIgdHI9eyIhdHlwZSI6Z2V9O3ZlJiZYbSh2ZSx0ciksQ3QmJih0ci5tYWNybz1DdC5yZXBsYWNlKCJbMF0hIiwiIikpLGN0JiYodHIubGluaz1jdCksIlNjcm9sbCI9PWdlfHwiU3BpbiI9PWdlPyhudWxsPT1GdCYmKEZ0PTApLG51bGw9PWt0JiYoa3Q9MCksbnVsbD09VHQmJihUdD0zZTQp'@;
put 'LG51bGw9PVp0JiYoWnQ9MSksIlNjcm9sbCI9PWdlJiZudWxsPT1wbiYmKHBuPTEwKSk6IlJhZGlvIj09Z2V8fCJDaGVja2JveCI9PWdlPyhudWxsPT1LbiYmKEtuPTApLEZ0PUtuKTooIkxpc3QiPT1nZXx8IkRyb3AiPT1nZSkmJihudWxsIT11biYmKHRyLnJlZj11biksbnVsbD09cW4mJihx'@;
put 'bj0iU2luZ2xlIiksIkxpc3QiPT1nZSYmKHRyLnNlbD1xbikpLG51bGwhPUZ0JiYodHIudmFsPUZ0KSxudWxsIT1rdCYmKHRyLm1pbj1rdCksbnVsbCE9VHQmJih0ci5tYXg9VHQpLG51bGwhPVp0JiYodHIuc3RlcD1adCksbnVsbCE9cG4mJih0ci5wYWdlPXBuKSxidCYmKHRyLnQ9YnQucmVw'@;
put 'bGFjZSgvXHMqPFtcc1xTXSo/PlxzKi9nLCIiKSksUFsiIWNvbnRyb2xzIl0ucHVzaCh0cil9fSl9KFBpKEhlKSx5LHZlfHxbXSkseVsiIUxEUCJdPVNlLHlbIiFjdHJsaWQiXSYmeVsiIWN0cmxpZCJdLmZvckVhY2goZnVuY3Rpb24oQmUpe2lmKEJlLnJlbCYmQmUucmVsLlRhcmdldCl7dmFy'@;
put 'IEdlPXNuKEJlLnJlbC5UYXJnZXQsUSk7QmUucGF0aD1HZSxkZWxldGUgQmUucmVsfX0pfX0oZHQsMCx5LFAsMCwwLDAsQ3QpLGR0fWNhdGNoKGN0KXtpZihTZS5XVEYpdGhyb3cgY3R9fWZ1bmN0aW9uIGFjKHkpe3JldHVybiIvIj09eS5jaGFyQXQoMCk/eS5zbGljZSgxKTp5fXZhciBtUj1m'@;
put 'dW5jdGlvbigpe307ZnVuY3Rpb24gSE0oeSxQKXtpZihGNj1bXSxQNihQPVB8fHt9KSxtbih5LCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKXx8bW4oeSwib2JqZWN0ZGF0YS54bWwiKSlyZXR1cm4gZnVuY3Rpb24gVE0oeSxQKXtQPVB8fHt9LG1uKHksIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIp'@;
put 'JiZmdW5jdGlvbiBWYSh5LFApe2Zvcih2YXIgUSxyZSxMPVF2KHkpO1E9VnIuZXhlYyhMKTspc3dpdGNoKFFbM10pe2Nhc2UibWFuaWZlc3QiOmJyZWFrO2Nhc2UiZmlsZS1lbnRyeSI6aWYoIi8iPT0ocmU9bG4oUVswXSwhMSkpLnBhdGgmJnJlLnR5cGUhPT1UdSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlRoaXMgT3BlbkRvY3VtZW50IGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7YnJlYWs7Y2FzZSJlbmNyeXB0aW9uLWRhdGEiOmNhc2UiYWxnb3JpdGhtIjpjYXNlInN0YXJ0LWtleS1nZW5lcmF0aW9uIjpjYXNlImtleS1kZXJpdmF0aW9uIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE9E'@;
put 'UyBFbmNyeXB0aW9uIik7ZGVmYXVsdDppZihQJiZQLldURil0aHJvdyBRfX0oSXQoeSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIiksUCk7dmFyIEw9UXQoeSwiY29udGVudC54bWwiKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVudC54bWwgaW4gT0RTIC8gVU9GIGZpbGUi'@;
put 'KTt2YXIgUT1RMChQaShMKSxQKTtyZXR1cm4gbW4oeSwibWV0YS54bWwiKSYmKFEuUHJvcHM9TzIoSXQoeSwibWV0YS54bWwiKSkpLFF9KHksUCk7aWYobW4oeSwiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUiKTt2YXIgZ2Us'@;
put 'X2UsTD1mdW5jdGlvbiBwdCh5KXtmb3IodmFyIFA9eS5GdWxsUGF0aHN8fGx0KHkuZmlsZXMpLEw9W10sUT0wO1E8UC5sZW5ndGg7KytRKSIvIiE9UFtRXS5zbGljZSgtMSkmJkwucHVzaChQW1FdKTtyZXR1cm4gTC5zb3J0KCl9KHkpLFE9ZnVuY3Rpb24gY20oeSl7dmFyIFA9e3dvcmtib29r'@;
put 'czpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJh'@;
put 'd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3Bz'@;
put 'OltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCF5fHwheS5tYXRjaClyZXR1cm4gUDt2YXIgTD17fTtpZigoeS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciByZT1sbihRKTtzd2l0Y2gocmVbMF0ucmVwbGFjZShQbiwiPCIpKXtjYXNlIjw/eG1sIjpicmVhaztjYXNlIjxU'@;
put 'eXBlcyI6UC54bWxucz1yZVsieG1sbnMiKyhyZVswXS5tYXRjaCgvPChcdyspOi8pfHxbIiIsIiJdKVsxXV07YnJlYWs7Y2FzZSI8RGVmYXVsdCI6TFtyZS5FeHRlbnNpb24udG9Mb3dlckNhc2UoKV09cmUuQ29udGVudFR5cGU7YnJlYWs7Y2FzZSI8T3ZlcnJpZGUiOnZvaWQgMCE9PVBbUmxb'@;
put 'cmUuQ29udGVudFR5cGVdXSYmUFtSbFtyZS5Db250ZW50VHlwZV1dLnB1c2gocmUuUGFydE5hbWUpfX0pLFAueG1sbnMhPT1pcy5DVCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK1AueG1sbnMpO3JldHVybiBQLmNhbGNjaGFpbj1QLmNhbGNjaGFpbnMubGVuZ3RoPjA/'@;
put 'UC5jYWxjY2hhaW5zWzBdOiIiLFAuc3N0PVAuc3Rycy5sZW5ndGg+MD9QLnN0cnNbMF06IiIsUC5zdHlsZT1QLnN0eWxlcy5sZW5ndGg+MD9QLnN0eWxlc1swXToiIixQLmNvbm49UC5jb25ucy5sZW5ndGg+MD9QLmNvbm5zWzBdOiIiLFAuZGVmYXVsdHM9TCxkZWxldGUgUC5jYWxjY2hhaW5z'@;
put 'LFB9KFF0KHksIltDb250ZW50X1R5cGVzXS54bWwiKSkscmU9ITE7aWYoMD09PVEud29ya2Jvb2tzLmxlbmd0aCYmSXQoeSxfZT0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJlEud29ya2Jvb2tzLnB1c2goX2UpLDA9PT1RLndvcmtib29rcy5sZW5ndGgpe2lmKCFJdCh5LF9lPSJ4bC93b3JrYm9v'@;
put 'ay5iaW4iLCEwKSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHdvcmtib29rIik7US53b3JrYm9va3MucHVzaChfZSkscmU9ITB9ImJpbiI9PVEud29ya2Jvb2tzWzBdLnNsaWNlKC0zKSYmKHJlPSEwKTt2YXIgdmU9e30sU2U9e307aWYoIVAuYm9va1NoZWV0cyYmIVAuYm9va1By'@;
put 'b3BzKXtpZihmNj1bXSxRLnNzdCl0cnl7ZjY9ZnVuY3Rpb24gTDYoeSxQLEwpe3JldHVybiIuYmluIj09PVAuc2xpY2UoLTQpP2Z1bmN0aW9uIGNEKHksUCl7dmFyIEw9W10sUT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbihnZSxfZSx2ZSl7c3dpdGNoKHZlKXtjYXNlIDE1OTpMLkNvdW50PWdl'@;
put 'WzBdLEwuVW5pcXVlPWdlWzFdO2JyZWFrO2Nhc2UgMTk6TC5wdXNoKGdlKTticmVhaztjYXNlIDE2MDpyZXR1cm4hMDtjYXNlIDM1OlE9ITA7YnJlYWs7Y2FzZSAzNjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoX2UuaW5kZXhPZigiQmVnaW4iKT4wfHxfZS5pbmRleE9mKCJFbmQiKSwhUXx8UC5X'@;
put 'VEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3ZlKyIgIitfZSl9fSksTH0oeSxMKTpmdW5jdGlvbiByQyh5LFApe3ZhciBMPVtdLFE9IiI7aWYoIXkpcmV0dXJuIEw7dmFyIHJlPXkubWF0Y2goZUMpO2lmKHJlKXtRPXJlWzJdLnJlcGxhY2UodEMsIiIpLnNwbGl0KG5D'@;
put 'KTtmb3IodmFyIGdlPTA7Z2UhPVEubGVuZ3RoOysrZ2Upe3ZhciBfZT1EOShRW2dlXS50cmltKCksUCk7bnVsbCE9X2UmJihMW0wubGVuZ3RoXT1fZSl9cmU9bG4ocmVbMV0pLEwuQ291bnQ9cmUuY291bnQsTC5VbmlxdWU9cmUudW5pcXVlQ291bnR9cmV0dXJuIEx9KHksTCl9KEl0KHksYWMo'@;
put 'US5zc3QpKSxRLnNzdCxQKX1jYXRjaChycil7aWYoUC5XVEYpdGhyb3cgcnJ9UC5jZWxsU3R5bGVzJiZRLnRoZW1lcy5sZW5ndGgmJih2ZT1mdW5jdGlvbiBJNih5LFAsTCl7cmV0dXJuIEdtKHksTCl9KFF0KHksUS50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLFApKSxR'@;
put 'LnN0eWxlJiYoU2U9ZnVuY3Rpb24gJHYoeSxQLEwsUSl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gQjkoeSxQLEwpe3ZhciBRPXtOdW1iZXJGbXQ6W119O2Zvcih2YXIgcmUgaW4gdy5fdGFibGUpUS5OdW1iZXJGbXRbcmVdPXcuX3RhYmxlW3JlXTtRLkNlbGxYZj1bXSxR'@;
put 'LkZvbnRzPVtdLFEuRmlsbHM9W10sUS5Cb3JkZXJzPVtdO3ZhciBnZT1bXSxfZT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbihTZSxIZSxCZSl7c3dpdGNoKEJlKXtjYXNlIDQ0OlEuTnVtYmVyRm10W1NlWzBdXT1TZVsxXSx3LmxvYWQoU2VbMV0sU2VbMF0pO2JyZWFrO2Nhc2UgNDM6ejQoU2Uu'@;
put 'Y29sb3IsUCksUS5Gb250cy5wdXNoKFNlKTticmVhaztjYXNlIDEwMjU6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNlIDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDU6U2UuZmdDb2xvciYmejQo'@;
put 'U2UuZmdDb2xvcixQKSxTZS5iZ0NvbG9yJiZ6NChTZS5iZ0NvbG9yLFApLFEuRmlsbHMucHVzaChTZSk7YnJlYWs7Y2FzZSA0NjpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImRpYWciXS5mb3JFYWNoKGZ1bmN0aW9uKEdlKXtTZVtHZV0mJlNlW0dlXS5jb2xvciYmejQoU2VbR2Vd'@;
put 'LmNvbG9yLFApfSksUS5Cb3JkZXJzLnB1c2goU2UpO2JyZWFrO2Nhc2UgNDc6IkJydEJlZ2luQ2VsbFhGcyI9PWdlW2dlLmxlbmd0aC0xXSYmUS5DZWxsWGYucHVzaChTZSk7YnJlYWs7Y2FzZSAzNTpfZT0hMDticmVhaztjYXNlIDM2Ol9lPSExO2JyZWFrO2Nhc2UgMzc6Z2UucHVzaChIZSks'@;
put 'X2U9ITA7YnJlYWs7Y2FzZSAzODpnZS5wb3AoKSxfZT0hMTticmVhaztkZWZhdWx0OmlmKChIZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClnZS5wdXNoKEhlKTtlbHNlIGlmKChIZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApZ2UucG9wKCk7ZWxzZSBpZighX2V8fEwuV1RGJiYiQnJ0QUNCZWdp'@;
put 'biIhPWdlW2dlLmxlbmd0aC0xXSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQmUrIiAiK0hlKX19KSwoUS5Gb250c3x8W10pWzBdJiZaMShRLkZvbnRzWzBdKSxRfSh5LEwsUSk6Wm0oeSxMLFEpfShJdCh5LGFjKFEuc3R5bGUpKSxRLnN0eWxlLHZlLFApKX12YXIgSGU9'@;
put 'US5saW5rcy5tYXAoZnVuY3Rpb24ocnIpe3RyeXt2YXIgU249RG8oUXQoeSxCaShhYyhycikpKSxycik7cmV0dXJuIGZ1bmN0aW9uIFVMKHksUCxMLFEpe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9uIEc0KHksUCxMLFEpe2lmKCF5KXJldHVybiB5O3ZhciByZT1RfHx7fSxn'@;
put 'ZT0hMTtIbyh5LGZ1bmN0aW9uKFNlLEhlLEJlKXtzd2l0Y2goQmUpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNhc2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgw'@;
put 'OmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6Z2U9ITA7YnJlYWs7Y2FzZSAzNjpnZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKEhlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoSGV8fCIiKS5p'@;
put 'bmRleE9mKCJFbmQiKT4wKSYmKCFnZXx8cmUuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQmUudG9TdHJpbmcoMTYpKyIgIitIZSl9fSxyZSl9KHksMCwwLFEpOmZ1bmN0aW9uIFk5KHksUCxMLFEpe3ZhciByZT1RfHx7fSxnZT17U2hlZXROYW1lczpbXSxTaGVl'@;
put 'dHM6e319LHZlPSExLFNlPXt9LEhlPS0xLEJlPS0xLEdlPXtzOntyOjAsYzowfSxlOntyOi0xLGM6LTF9fSxudD17fSxkdD0wO3JldHVybih5fHwiIikucmVwbGFjZSgkdCxmdW5jdGlvbihDdCxjdCl7dmFyIGJ0PWxuKEN0KTtzd2l0Y2goam4oYnRbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxl'@;
put 'eHRlcm5hbExpbmsiOmNhc2UiPC9leHRlcm5hbExpbms+IjpjYXNlIjwvZXh0ZXJuYWxCb29rPiI6Y2FzZSI8c2hlZXROYW1lcyI6Y2FzZSI8c2hlZXROYW1lcz4iOmNhc2UiPC9zaGVldE5hbWVzPiI6Y2FzZSI8c2hlZXREYXRhU2V0PiI6Y2FzZSI8c2hlZXREYXRhU2V0Lz4iOmNhc2UiPC9z'@;
put 'aGVldERhdGFTZXQ+IjpjYXNlIjwvcm93PiI6YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxCb29rIjpjYXNlIjxleHRlcm5hbEJvb2s+IjpnZS5UYXJnZXQ9UFsiIWlkIl1bYnQuaWRdLlRhcmdldCxnZS5NaXNzaW5nPVBbIiFpZCJdW2J0LmlkXS5UeXBlPT1IaS5YTUlTUzticmVhaztjYXNlIjxzaGVl'@;
put 'dE5hbWUiOmdlLlNoZWV0TmFtZXMucHVzaCh4cihQaShidC52YWwpKSk7YnJlYWs7Y2FzZSI8c2hlZXREYXRhIjpTZT17fSxnZS5TaGVldHNbZ2UuU2hlZXROYW1lc1tidC5zaGVldElkXV09eXIoYnQucmVmcmVzaEVycm9yfHwiMCIpP251bGw6U2U7YnJlYWs7Y2FzZSI8L3NoZWV0RGF0YT4i'@;
put 'OkdlLmUuYz49MCYmKFNlWyIhcmVmIl09T28oR2UpKTticmVhaztjYXNlIjxyb3ciOmNhc2UiPHJvdz4iOmJ0LnI/SGU9cGFyc2VJbnQoYnQuciwxMCktMTpIZSsrLEJlPS0xO2JyZWFrO2Nhc2UiPGNlbGwiOmNhc2UiPGNlbGw+IjpidC5yP0JlPXNzKGJ0LnIpLmM6KytCZSxudC50PWJ0LnR8'@;
put 'fCJuIiwic3RyIj09bnQudCYmKG50LnQ9InMiKTticmVhaztjYXNlIjwvY2VsbD4iOkdlLmUucjxIZSYmKEdlLmUucj1IZSksR2UuZS5jPEJlJiYoR2UuZS5jPUJlKSxTZVtkaSh7cjpIZSxjOkJlfSldPW50LG50PXt9O2JyZWFrO2Nhc2UiPHYiOmNhc2UiPHY+IjpkdD1DdC5sZW5ndGgrY3Q7'@;
put 'YnJlYWs7Y2FzZSI8L3Y+Ijp2YXIgRnQ9eHIoeS5zbGljZShkdCxjdCkpO250LnY9Im4iPT1udC50P3BhcnNlRmxvYXQoRnQpOkZ0O2JyZWFrO2Nhc2UiPHYvPiI6bnQudj0iIjticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+Ijp2ZT0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6dmU9'@;
put 'ITE7YnJlYWs7ZGVmYXVsdDppZighdmUmJnJlLldURil0aHJvdyJ1bnJlY29nbml6ZWQgIitidFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLGdlfSh5LFAsMCxRKX0oSXQoeSxhYyhycikpLFNuLHJyLFApfWNhdGNoe319KSxCZT1mdW5jdGlvbiBtNSh5LFAsTCl7cmV0dXJuIi5iaW4iPT09'@;
put 'UC5zbGljZSgtNCk/ZnVuY3Rpb24gR3YoeSxQKXt2YXIgTD17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LHhtbG5zOiIifSxRPVtdLHJlPSExO1B8fChQPXt9KSxQLmJpZmY9MTI7dmFyIGdlPVtdLF9lPVtbXV07cmV0dXJuIF9lLlNoZWV0'@;
put 'TmFtZXM9W10sX2UuWFRJPVtdLG1mWzE2XT17bjoiQnJ0RlJUQXJjaElEJCIsZjpXdn0sSG8oeSxmdW5jdGlvbihTZSxIZSxCZSl7c3dpdGNoKEJlKXtjYXNlIDE1NjpfZS5TaGVldE5hbWVzLnB1c2goU2UubmFtZSksTC5TaGVldHMucHVzaChTZSk7YnJlYWs7Y2FzZSAxNTM6TC5XQlByb3Bz'@;
put 'PVNlO2JyZWFrO2Nhc2UgMzk6bnVsbCE9U2UuU2hlZXQmJihQLlNJRD1TZS5TaGVldCksU2UuUmVmPXhsKFNlLlB0ZyxudWxsLG51bGwsX2UsUCksZGVsZXRlIFAuU0lELGRlbGV0ZSBTZS5QdGcsZ2UucHVzaChTZSk7YnJlYWs7Y2FzZSAxMDM2OmNhc2UgMzYxOmNhc2UgMjA3MTpjYXNlIDE1'@;
put 'ODpjYXNlIDE0MzpjYXNlIDY2NDpjYXNlIDM1MzpjYXNlIDMwNzI6Y2FzZSAzMDczOmNhc2UgNTM0OmNhc2UgNjc3OmNhc2UgMTU3OmNhc2UgNjEwOmNhc2UgMjA1MDpjYXNlIDE1NTpjYXNlIDU0ODpjYXNlIDY3NjpjYXNlIDEyODpjYXNlIDY2NTpjYXNlIDIxMjg6Y2FzZSAyMTI1OmNhc2Ug'@;
put 'NTQ5OmNhc2UgMjA1MzpjYXNlIDU5NjpjYXNlIDIwNzY6Y2FzZSAyMDc1OmNhc2UgMjA4MjpjYXNlIDM5NzpjYXNlIDE1NDpjYXNlIDExMTc6Y2FzZSA1NTM6Y2FzZSAyMDkxOmNhc2UgMTY6YnJlYWs7Y2FzZSAzNTc6Y2FzZSAzNTg6Y2FzZSAzNTU6Y2FzZSA2Njc6X2VbMF0ubGVuZ3RoP19l'@;
put 'LnB1c2goW0JlLFNlXSk6X2VbMF09W0JlLFNlXSxfZVtfZS5sZW5ndGgtMV0uWFRJPVtdO2JyZWFrO2Nhc2UgMzYyOjA9PT1fZS5sZW5ndGgmJihfZVswXT1bXSxfZVswXS5YVEk9W10pLF9lW19lLmxlbmd0aC0xXS5YVEk9X2VbX2UubGVuZ3RoLTFdLlhUSS5jb25jYXQoU2UpLF9lLlhUST1f'@;
put 'ZS5YVEkuY29uY2F0KFNlKTticmVhaztjYXNlIDM1OmNhc2UgMzc6US5wdXNoKEhlKSxyZT0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6US5wb3AoKSxyZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKEhlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoSGV8fCIiKS5pbmRleE9mKCJFbmQi'@;
put 'KT4wKSYmKCFyZXx8UC5XVEYmJiJCcnRBQ0JlZ2luIiE9UVtRLmxlbmd0aC0xXSYmIkJydEZSVEJlZ2luIiE9UVtRLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0JlKyIgIitIZSl9fSxQKSxVdihMKSxMLk5hbWVzPWdlLEwuc3VwYm9va3M9X2UsTH0o'@;
put 'eSxMKTpmdW5jdGlvbiBhWSh5LFApe2lmKCF5KXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgZmlsZSIpO3ZhciBMPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30sTmFtZXM6W10sRXh0ZXJuOltdLHhtbG5zOiIifSxRPSExLHJl'@;
put 'PSJ4bWxucyIsZ2U9e30sX2U9MDtpZih5LnJlcGxhY2UoJHQsZnVuY3Rpb24oU2UsSGUpe3ZhciBCZT1sbihTZSk7c3dpdGNoKGpuKEJlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3dvcmtib29rPiI6Y2FzZSI8ZmlsZVZlcnNpb24vPiI6Y2FzZSI8L2ZpbGVWZXJzaW9uPiI6Y2FzZSI8Zmls'@;
put 'ZVNoYXJpbmcvPiI6Y2FzZSI8L3dvcmtib29rUHI+IjpjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24vPiI6Y2FzZSI8Ym9va1ZpZXdzIjpjYXNlIjxib29rVmlld3M+IjpjYXNlIjwvYm9va1ZpZXdzPiI6Y2FzZSI8L3dvcmtib29rVmlldz4iOmNhc2UiPHNoZWV0cyI6Y2FzZSI8c2hlZXRzPiI6'@;
put 'Y2FzZSI8L3NoZWV0cz4iOmNhc2UiPC9zaGVldD4iOmNhc2UiPGZ1bmN0aW9uR3JvdXBzIjpjYXNlIjxmdW5jdGlvbkdyb3Vwcy8+IjpjYXNlIjxmdW5jdGlvbkdyb3VwIjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXMiOmNhc2UiPC9leHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxleHRlcm5h'@;
put 'bFJlZmVyZW5jZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMvPiI6Y2FzZSI8ZGVmaW5lZE5hbWUvPiI6Y2FzZSI8L2NhbGNQcj4iOmNhc2UiPG9sZVNpemUiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPGN1c3RvbVdvcmtib29r'@;
put 'Vmlld3MiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlldyI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlldz4iOmNhc2UiPHBpdm90Q2FjaGVzPiI6Y2FzZSI8L3Bpdm90Q2FjaGVzPiI6Y2FzZSI8cGl2b3RDYWNoZXMiOmNhc2UiPHBpdm90Q2FjaGUiOmNhc2UiPHNtYXJ0VGFnUHIiOmNhc2UiPHNt'@;
put 'YXJ0VGFnUHIvPiI6Y2FzZSI8c21hcnRUYWdUeXBlcyI6Y2FzZSI8c21hcnRUYWdUeXBlcz4iOmNhc2UiPC9zbWFydFRhZ1R5cGVzPiI6Y2FzZSI8c21hcnRUYWdUeXBlIjpjYXNlIjx3ZWJQdWJsaXNoaW5nIjpjYXNlIjx3ZWJQdWJsaXNoaW5nLz4iOmNhc2UiPGZpbGVSZWNvdmVyeVByIjpj'@;
put 'YXNlIjxmaWxlUmVjb3ZlcnlQci8+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzIjpjYXNlIjwvd2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRM'@;
put 'c3Q+IjpjYXNlIjxleHRMc3QvPiI6Y2FzZSI8QXJjaElEIjpjYXNlIjxyZXZpc2lvblB0ciI6YnJlYWs7Y2FzZSI8d29ya2Jvb2siOlNlLm1hdGNoKHNZKSYmKHJlPSJ4bWxucyIrU2UubWF0Y2goLzwoXHcrKTovKVsxXSksTC54bWxucz1CZVtyZV07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24i'@;
put 'OmRlbGV0ZSBCZVswXSxMLkFwcFZlcnNpb249QmU7YnJlYWs7Y2FzZSI8ZmlsZVNoYXJpbmciOkwuTW9kaWZ5PXt1c2VyOkJlLnVzZXJOYW1lLHdhcm46eXIoQmUucmVhZE9ubHlSZWNvbW1lbmRlZHx8ImZhbHNlIil9LChCZS5hbGdvcml0aG1OYW1lfHxCZS5oYXNoVmFsdWV8fEJlLnNhbHRW'@;
put 'YWx1ZXx8QmUuc3BpbkNvdW50KSYmKEwuTW9kaWZ5LmVuY3J5cHRpb249e2FsZ286QmUuYWxnb3JpdGhtTmFtZSxoYXNoOkJlLmhhc2hWYWx1ZSxzYWx0OkJlLnNhbHRWYWx1ZSxzcGluOitCZS5zcGluQ291bnR8fDFlNX0pO2JyZWFrO2Nhc2UiPHdvcmtib29rUHIiOmNhc2UiPHdvcmtib29r'@;
put 'UHIvPiI6SzIuZm9yRWFjaChmdW5jdGlvbihudCl7aWYobnVsbCE9QmVbbnRbMF1dKXN3aXRjaChudFsyXSl7Y2FzZSJib29sIjpMLldCUHJvcHNbbnRbMF1dPXlyKEJlW250WzBdXSk7YnJlYWs7Y2FzZSJpbnQiOkwuV0JQcm9wc1tudFswXV09cGFyc2VJbnQoQmVbbnRbMF1dLDEwKTticmVh'@;
put 'aztkZWZhdWx0OkwuV0JQcm9wc1tudFswXV09QmVbbnRbMF1dfX0pLEJlLmNvZGVOYW1lJiYoTC5XQlByb3BzLkNvZGVOYW1lPVBpKEJlLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uIjp2YXIgR2U9TC5Qcm90ZWN0aW9ufHx7fTtHZS5sb2NrU3RydWN0dXJlPXly'@;
put 'KEJlLmxvY2tTdHJ1Y3R1cmV8fCJmYWxzZSIpLEdlLmxvY2tXaW5kb3dzPXlyKEJlLmxvY2tXaW5kb3dzfHwiZmFsc2UiKSxCZS53b3JrYm9va0FsZ29yaXRobU5hbWUmJihHZS5lbmNyeXB0aW9uPXthbGdvOkJlLndvcmtib29rQWxnb3JpdGhtTmFtZSxoYXNoOkJlLndvcmtib29rSGFzaFZh'@;
put 'bHVlLHNhbHQ6QmUud29ya2Jvb2tTYWx0VmFsdWUsc3BpbjorQmUud29ya2Jvb2tTcGluQ291bnR8fDFlNX0pLEwuUHJvdGVjdGlvbj1HZTticmVhaztjYXNlIjx3b3JrYm9va1ZpZXciOmNhc2UiPHdvcmtib29rVmlldy8+IjpkZWxldGUgQmVbMF0sTC5XQlZpZXcucHVzaChCZSk7YnJlYWs7'@;
put 'Y2FzZSI8c2hlZXQiOnN3aXRjaChCZS5zdGF0ZSl7Y2FzZSJoaWRkZW4iOkJlLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6QmUuSGlkZGVuPTI7YnJlYWs7ZGVmYXVsdDpCZS5IaWRkZW49MH1kZWxldGUgQmUuc3RhdGUsQmUubmFtZT14cihQaShCZS5uYW1lKSksZGVsZXRlIEJl'@;
put 'WzBdLEwuU2hlZXRzLnB1c2goQmUpO2JyZWFrO2Nhc2UiPGV4dGVybmFsUmVmZXJlbmNlIjpMLkV4dGVybi5wdXNoKEJlLmlkKTticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMiOmNhc2UiPGV4dCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8QWx0'@;
put 'ZXJuYXRlQ29udGVudD4iOlE9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOmNhc2UiPC9leHQ+IjpjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOlE9ITE7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWUiOihnZT17fSkuTmFtZT1QaShCZS5uYW1lKSxCZS5jb21tZW50JiYoZ2UuQ29tbWVu'@;
put 'dD1CZS5jb21tZW50KSxCZS5sb2NhbFNoZWV0SWQmJihnZS5TaGVldD0rQmUubG9jYWxTaGVldElkKSx5cihCZS5oaWRkZW58fCIwIikmJihnZS5IaWRkZW49ITApLF9lPUhlK1NlLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjpnZS5SZWY9eHIoUGkoeS5zbGljZShfZSxIZSkp'@;
put 'KSxMLk5hbWVzLnB1c2goZ2UpO2JyZWFrO2Nhc2UiPGNhbGNQciI6Y2FzZSI8Y2FsY1ByLz4iOmRlbGV0ZSBCZVswXSxMLkNhbGNQcj1CZTticmVhaztkZWZhdWx0OmlmKCFRJiZQLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0JlWzBdKyIgaW4gd29ya2Jvb2siKX1yZXR1'@;
put 'cm4gU2V9KSwtMT09PWlzLm1haW4uaW5kZXhPZihMLnhtbG5zKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK0wueG1sbnMpO3JldHVybiBVdihMKSxMfSh5LEwpfShJdCh5LGFjKFEud29ya2Jvb2tzWzBdKSksUS53b3JrYm9va3NbMF0sUCksR2U9e30sbnQ9IiI7US5j'@;
put 'b3JlcHJvcHMubGVuZ3RoJiYoKG50PUl0KHksYWMoUS5jb3JlcHJvcHNbMF0pLCEwKSkmJihHZT1PMihudCkpLDAhPT1RLmV4dHByb3BzLmxlbmd0aCYmKG50PUl0KHksYWMoUS5leHRwcm9wc1swXSksITApKSYmZnVuY3Rpb24gcDMoeSxQLEwpe3ZhciBRPXt9O1B8fChQPXt9KSx5PVBpKHkp'@;
put 'LFIxLmZvckVhY2goZnVuY3Rpb24ocmUpe3ZhciBnZT0oeS5tYXRjaCh1bChyZVswXSkpfHxbXSlbMV07c3dpdGNoKHJlWzJdKXtjYXNlInN0cmluZyI6Z2UmJihQW3JlWzFdXT14cihnZSkpO2JyZWFrO2Nhc2UiYm9vbCI6UFtyZVsxXV09InRydWUiPT09Z2U7YnJlYWs7Y2FzZSJyYXciOnZh'@;
put 'ciBfZT15Lm1hdGNoKG5ldyBSZWdFeHAoIjwiK3JlWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrcmVbMF0rIj4iKSk7X2UmJl9lLmxlbmd0aD4wJiYoUVtyZVsxXV09X2VbMV0pfX0pLFEuSGVhZGluZ1BhaXJzJiZRLlRpdGxlc09mUGFydHMmJnUwKFEuSGVhZGluZ1BhaXJzLFEuVGl0bGVz'@;
put 'T2ZQYXJ0cyxQLEwpfShudCxHZSxQKSk7dmFyIGR0PXt9OyghUC5ib29rU2hlZXRzfHxQLmJvb2tQcm9wcykmJjAhPT1RLmN1c3Rwcm9wcy5sZW5ndGgmJihudD1RdCh5LGFjKFEuY3VzdHByb3BzWzBdKSwhMCkpJiYoZHQ9ZnVuY3Rpb24gTTQoeSxQKXt2YXIgTD17fSxRPSIiLHJlPXkubWF0'@;
put 'Y2goQXcpO2lmKHJlKWZvcih2YXIgZ2U9MDtnZSE9cmUubGVuZ3RoOysrZ2Upe3ZhciBfZT1yZVtnZV0sdmU9bG4oX2UpO3N3aXRjaCh2ZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8UHJvcGVydGllcyI6YnJlYWs7Y2FzZSI8cHJvcGVydHkiOlE9eHIodmUubmFtZSk7YnJlYWs7Y2FzZSI8L3By'@;
put 'b3BlcnR5PiI6UT1udWxsO2JyZWFrO2RlZmF1bHQ6aWYoMD09PV9lLmluZGV4T2YoIjx2dDoiKSl7dmFyIFNlPV9lLnNwbGl0KCI+IiksSGU9U2VbMF0uc2xpY2UoNCksQmU9U2VbMV07c3dpdGNoKEhlKXtjYXNlImxwc3RyIjpjYXNlImJzdHIiOmNhc2UibHB3c3RyIjpjYXNlImN5IjpjYXNl'@;
put 'ImVycm9yIjpMW1FdPXhyKEJlKTticmVhaztjYXNlImJvb2wiOkxbUV09eXIoQmUpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOkxbUV09cGFyc2VJbnQoQmUsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UicjgiOmNhc2UiZGVj'@;
put 'aW1hbCI6TFtRXT1wYXJzZUZsb2F0KEJlKTticmVhaztjYXNlImZpbGV0aW1lIjpjYXNlImRhdGUiOkxbUV09SHQoQmUpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1IZS5zbGljZSgtMSkpYnJlYWs7UC5XVEYmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJVbmV4cGVjdGVkIixf'@;
put 'ZSxIZSxTZSl9fWVsc2UgaWYoIjwvIiE9PV9lLnNsaWNlKDAsMikmJlAuV1RGKXRocm93IG5ldyBFcnJvcihfZSl9fXJldHVybiBMfShudCxQKSk7dmFyIEN0PXt9O2lmKChQLmJvb2tTaGVldHN8fFAuYm9va1Byb3BzKSYmKEJlLlNoZWV0cz9nZT1CZS5TaGVldHMubWFwKGZ1bmN0aW9uKFNu'@;
put 'KXtyZXR1cm4gU24ubmFtZX0pOkdlLldvcmtzaGVldHMmJkdlLlNoZWV0TmFtZXMubGVuZ3RoPjAmJihnZT1HZS5TaGVldE5hbWVzKSxQLmJvb2tQcm9wcyYmKEN0LlByb3BzPUdlLEN0LkN1c3Rwcm9wcz1kdCksUC5ib29rU2hlZXRzJiZ0eXBlb2YgZ2U8InUiJiYoQ3QuU2hlZXROYW1lcz1n'@;
put 'ZSksUC5ib29rU2hlZXRzP0N0LlNoZWV0TmFtZXM6UC5ib29rUHJvcHMpKXJldHVybiBDdDtnZT17fTt2YXIgY3Q9e307UC5ib29rRGVwcyYmUS5jYWxjY2hhaW4mJihjdD1mdW5jdGlvbiB6TCh5LFAsTCl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gREMoeSxQLEwpe3Zh'@;
put 'ciBRPVtdO3JldHVybiBIbyh5LGZ1bmN0aW9uKF9lLHZlLFNlKXtpZig2Mz09PVNlKVEucHVzaChfZSk7ZWxzZSBpZighKCh2ZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MHx8KHZlfHwiIikuaW5kZXhPZigiRW5kIik+MCkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1Nl'@;
put 'KyIgIit2ZSl9KSxRfSh5KTpmdW5jdGlvbiBlNih5KXt2YXIgUD1bXTtpZigheSlyZXR1cm4gUDt2YXIgTD0xO3JldHVybih5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIHJlPWxuKFEpO3N3aXRjaChyZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8Y2FsY0NoYWluIjpj'@;
put 'YXNlIjxjYWxjQ2hhaW4+IjpjYXNlIjwvY2FsY0NoYWluPiI6YnJlYWs7Y2FzZSI8YyI6ZGVsZXRlIHJlWzBdLHJlLmk/TD1yZS5pOnJlLmk9TCxQLnB1c2gocmUpfX0pLFB9KHkpfShJdCh5LGFjKFEuY2FsY2NoYWluKSksUS5jYWxjY2hhaW4pKTt2YXIga3QsVHQsYnQ9MCxGdD17fSxadD1C'@;
put 'ZS5TaGVldHM7R2UuV29ya3NoZWV0cz1adC5sZW5ndGgsR2UuU2hlZXROYW1lcz1bXTtmb3IodmFyIHBuPTA7cG4hPVp0Lmxlbmd0aDsrK3BuKUdlLlNoZWV0TmFtZXNbcG5dPVp0W3BuXS5uYW1lO3ZhciBLbj1yZT8iYmluIjoieG1sIix1bj1RLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigi'@;
put 'LyIpLHFuPShRLndvcmtib29rc1swXS5zbGljZSgwLHVuKzEpKyJfcmVscy8iK1Eud29ya2Jvb2tzWzBdLnNsaWNlKHVuKzEpKyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO21uKHkscW4pfHwocW49InhsL19yZWxzL3dvcmtib29rLiIrS24rIi5yZWxzIik7dmFyIHpuPURvKFF0KHkscW4s'@;
put 'ITApLHFuKSxrbj16bixlcj1bXTt6biYmKEJlJiZCZS5FeHRlcm4mJkJlLkV4dGVybi5sZW5ndGgmJkJlLkV4dGVybi5mb3JFYWNoKGZ1bmN0aW9uKHJyLFNuKXt2YXIgQ2k9KCIveGwvIit6blsiIWlkIl1bcnJdLlRhcmdldCkucmVwbGFjZSgvW1wvXVtcL10vZywiLyIpLHpyPVEubGlua3Mu'@;
put 'aW5kZXhPZihDaSk7enI+LTEmJihlcltTbl09SGVbenJdKX0pLEJlJiZkZWxldGUgQmUuRXh0ZXJuKSx6biYmKHpuPWZ1bmN0aW9uIE9NKHksUCl7aWYoIXkpcmV0dXJuIDA7dHJ5e3k9UC5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIFEuaWR8fChRLmlkPVEuc3RyUmVsSUQpLFtRLm5hbWUseVsi'@;
put 'IWlkIl1bUS5pZF0uVGFyZ2V0LFJNKHlbIiFpZCJdW1EuaWRdLlR5cGUpXX0pfWNhdGNoe3JldHVybiBudWxsfXJldHVybiB5JiYwIT09eS5sZW5ndGg/eTpudWxsfSh6bixCZS5TaGVldHMpKTt2YXIgdHI9bW4oeSwieGwvd29ya3NoZWV0cy9zaGVldC54bWwiKT8xOjAsWm49W10sQnI9W107'@;
put 'ZTpmb3IoYnQ9MDtidCE9R2UuV29ya3NoZWV0czsrK2J0KXt2YXIgb2k9InNoZWV0IjtpZih6biYmem5bYnRdPyhrdD0ieGwvIit6bltidF1bMV0ucmVwbGFjZSgvW1wvXT94bFwvLywiIiksbW4oeSxrdCl8fChrdD16bltidF1bMV0pLG1uKHksa3QpfHwoa3Q9cW4ucmVwbGFjZSgvX3JlbHNc'@;
put 'Ly4qJC8sIiIpK3puW2J0XVsxXSksb2k9em5bYnRdWzJdKTprdD0oa3Q9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhidCsxLXRyKSsiLiIrS24pLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksVHQ9a3QucmVwbGFjZSgvXiguKikoXC8pKFteXC9dKikkLywiJDEvX3JlbHMvJDMucmVscyIp'@;
put 'LFpuLnB1c2goa3QpLFAmJm51bGwhPVAuc2hlZXRzKXN3aXRjaCh0eXBlb2YgUC5zaGVldHMpe2Nhc2UibnVtYmVyIjppZihidCE9UC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoR2UuU2hlZXROYW1lc1tidF0udG9Mb3dlckNhc2UoKSE9UC5zaGVldHMudG9Mb3dl'@;
put 'ckNhc2UoKSljb250aW51ZSBlO2JyZWFrO2RlZmF1bHQ6aWYoQXJyYXkuaXNBcnJheSYmQXJyYXkuaXNBcnJheShQLnNoZWV0cykpe2Zvcih2YXIga2k9MCxMaT0wO0xpIT1QLnNoZWV0cy5sZW5ndGg7KytMaSkibnVtYmVyIj09dHlwZW9mIFAuc2hlZXRzW0xpXSYmUC5zaGVldHNbTGldPT1i'@;
put 'dCYmKGtpPTEpLCJzdHJpbmciPT10eXBlb2YgUC5zaGVldHNbTGldJiZQLnNoZWV0c1tMaV0udG9Mb3dlckNhc2UoKT09R2UuU2hlZXROYW1lc1tidF0udG9Mb3dlckNhc2UoKSYmKGtpPTEpO2lmKCFraSljb250aW51ZSBlfX1pZighUC5za2lwUGFyc2Upe3ZhciBRcj1nUih5LGt0LFR0LEdl'@;
put 'LlNoZWV0TmFtZXNbYnRdLGJ0LEZ0LGdlLG9pLFAsQmUsdmUsU2UpO1FyJiZRclsiIUxEUCJdJiYoQnJbYnRdPVFyWyIhTERQIl0sZGVsZXRlIFFyWyIhTERQIl0pfX1pZih0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiKWZvcihidD0wO2J0PEY2Lmxlbmd0aDsrK2J0KXBhcnNlX3NoZWV0'@;
put 'X3Bpdm90LmFwcGx5KG51bGwsRjZbYnRdKTtpZihDdD17RGlyZWN0b3J5OlEsV29ya2Jvb2s6QmUsUHJvcHM6R2UsQ3VzdHByb3BzOmR0LERlcHM6Y3QsU2hlZXRzOmdlLFNoZWV0TmFtZXM6R2UuU2hlZXROYW1lcyxTdHJpbmdzOmY2LFN0eWxlczpTZSxUaGVtZXM6dmUsU1NGOncuZ2V0X3Rh'@;
put 'YmxlKCl9LCFQLnNraXBQYXJzZSl7aWYoZnVuY3Rpb24gQUMoeSl7IXl8fCF5Lldvcmtib29rfHwheS5Xb3JrYm9vay5OYW1lc3x8eS5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFApe2lmKFAuTmFtZSYmIl94bG5tLiI9PVAuTmFtZS5zbGljZSgwLDYpJiYoIl94bG5tLlByaW50'@;
put 'X0FyZWEiPT1QLk5hbWV8fCJfeGxubS5QcmludF9UaXRsZXMiPT1QLk5hbWUpKXt2YXIgTD15LlNoZWV0c1t5LlNoZWV0TmFtZXNbUC5TaGVldF1dO2lmKEwpe0xbIiFwcmludCJdfHwoTFsiIXByaW50Il09e30pLExbIiFwcmludCJdLnByb3BzfHwoTFsiIXByaW50Il0ucHJvcHM9e30pO3Zh'@;
put 'ciBRPUxbIiFwcmludCJdLHJlPVAuUmVmO2lmKCJfeGxubS5QcmludF9BcmVhIj09UC5OYW1lKXtyZS5pbmRleE9mKCIhIik+LTEmJihyZT1yZS5zbGljZShyZS5pbmRleE9mKCIhIikrMSkpO3ZhciBnZT1PaShyZT1yZS5yZXBsYWNlKC9bJF0vZywiIikpO1EuYXJlYT1nZX1lbHNlIl94bG5t'@;
put 'LlByaW50X1RpdGxlcyI9PVAuTmFtZSYmKFEudGl0bGVzPXtzOntyOi0xLGM6LTF9LGU6e3I6LTEsYzotMX19LHJlLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihfZSl7dmFyIFNlPVdzKF9lLnNsaWNlKF9lLmluZGV4T2YoIiEiKSsxKS5yZXBsYWNlKC9bJF0vZywiIikpO1NlLnMuYz4t'@;
put 'MSYmKFEudGl0bGVzLnMuYz1TZS5zLmMpLFNlLmUuYz4tMSYmKFEudGl0bGVzLmUuYz1TZS5lLmMpLFNlLnMucj4tMSYmKFEudGl0bGVzLnMucj1TZS5zLnIpLFNlLmUucj4tMSYmKFEudGl0bGVzLmUucj1TZS5lLnIpfSkpfX19KX0oQ3QpLFAmJlAuYm9va0ZpbGVzJiYoQ3Qua2V5cz1MLEN0'@;
put 'LmZpbGVzPXkuZmlsZXMpLFAmJlAuYm9va1ZCQSYmKFEudmJhLmxlbmd0aD4wP0N0LnZiYXJhdz1JdCh5LGFjKFEudmJhWzBdKSwhMCk6US5kZWZhdWx0cyYmUS5kZWZhdWx0cy5iaW49PT0kMiYmKEN0LnZiYXJhdz1JdCh5LCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksa24mJmtuWyIhaWQi'@;
put 'XSl7Zm9yKHZhciB1cj1bXSxBbj0xO0FuPD0xMDI0OysrQW4pa25bIiFpZCJdWyJySWQiK0FuXSYma25bIiFpZCJdWyJySWQiK0FuXS5UeXBlJiYvY3VzdG9tWG1sJC8udGVzdChrblsiIWlkIl1bInJJZCIrQW5dLlR5cGUpJiZ1ci5wdXNoKHNuKGtuWyIhaWQiXVsicklkIitBbl0uVGFyZ2V0'@;
put 'LFEud29ya2Jvb2tzWzBdKSk7dXIubGVuZ3RoPjAmJihDdC5DdXN0b21YTUw9W10sdXIuZm9yRWFjaChmdW5jdGlvbihycil7dmFyIFNuPXtkYXRhOlF0KHksYWMocnIpKX0sZ3I9QmkocnIpO3RyeXt2YXIgQ2k9RG8oUXQoeSxhYyhnciksITApLGdyKTtpZihDaSlmb3IodmFyIHpyPTE7enI8'@;
put 'PTEwMjQ7Kyt6cilDaVsiIWlkIl1bInJJZCIrenJdJiZDaVsiIWlkIl1bInJJZCIrenJdLlR5cGUmJi9jdXN0b21YbWxQcm9wcyQvLnRlc3QoQ2lbIiFpZCJdWyJySWQiK3pyXS5UeXBlKSYmKFNuLnByb3BzPVF0KHksYWMoc24oQ2lbIiFpZCJdWyJySWQiK3pyXS5UYXJnZXQscnIpKSkpfWNh'@;
put 'dGNoe31DdC5DdXN0b21YTUwucHVzaChTbil9KSl9dmFyIHZyPUR0KHksInhsL21vZGVsL2l0ZW0uZGF0YSIsITApO3ZyJiYoQ3QubW9kZWw9dnIpLFEuY29ubiYmKEN0LmNvbm49SXQoeSxhYyhRLmNvbm4pLCEwKSksZXIubGVuZ3RoJiYoQ3QuRXh0ZXJuYWxXQj1lciksQmUmJihCZS5QUEk9'@;
put 'bmYpfXJldHVybiBQLnRlbXBsYXRlJiYoQ3QuX3dzcGF0aHM9Wm4sQ3QuX3N0eXBhdGg9YWMoUS5zdHlsZXx8IiIpLEN0Ll93YnBhdGg9YWMoUS53b3JrYm9va3NbMF18fCJ4bC93b3JrYm9vay54bWwiKSxDdC5fdm1scGF0aHM9QnIsQ3QuX3dicmVsc3BhdGg9cW4sQ3QuX2N0PVF0KHksIltD'@;
put 'b250ZW50X1R5cGVzXS54bWwiKSxDdC5maWxlcz15LmZpbGVzLG1SKEN0LHksUCkpLEN0fWZ1bmN0aW9uIHZSKHksUCl7dmFyIEw9UHx8e307TC5wYXNzd29yZHx8KEwucGFzc3dvcmQ9IlZlbHZldFN3ZWF0c2hvcCIpO3ZhciBRPSJXb3JrYm9vayIscmU9amUuZmluZCh5LFEpO3RyeXtpZigh'@;
put 'KHJlPWplLmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvVmVyc2lvbiIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7aWYoZnVuY3Rpb24gZEQoeSl7dmFyIFA9e307UC5pZD15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAu'@;
put 'Uj1HMCh5LDQpLFAuVT1HMCh5LDQpLFAuVz1HMCh5LDQpfShyZS5jb250ZW50KSwhKHJlPWplLmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlTWFwIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTt2YXIg'@;
put 'Z2U9ZnVuY3Rpb24gUDQoeSl7dmFyIFA9W107eS5sKz00O2Zvcih2YXIgTD15LnJlYWRfc2hpZnQoNCk7TC0tID4wOylQLnB1c2goc0MoeSkpO3JldHVybiBQfShyZS5jb250ZW50KTtpZigxIT09Z2UubGVuZ3RofHwxIT09Z2VbMF0uY29tcHMubGVuZ3RofHwwIT09Z2VbMF0uY29tcHNbMF0u'@;
put 'dHx8IlN0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiIT09Z2VbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09Z2VbMF0uY29tcHNbMF0udil0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK1EpO2lmKCEocmU9amUuZmluZCh5LFE9Ii8hRGF0YVNwYWNl'@;
put 'cy9EYXRhU3BhY2VJbmZvL1N0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO3ZhciBfZT1mdW5jdGlvbiBFMyh5KXt2YXIgUD1bXTt5LmwrPTQ7Zm9yKHZhciBMPXkucmVh'@;
put 'ZF9zaGlmdCg0KTtMLS0gPjA7KVAucHVzaCh5LnJlYWRfc2hpZnQoMCwibHBwNCIpKTtyZXR1cm4gUH0ocmUuY29udGVudCk7aWYoMSE9X2UubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPV9lWzBdKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUg'@;
put 'YmFkICIrUSk7aWYoIShyZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL1RyYW5zZm9ybUluZm8vU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybS8hUHJpbWFyeSIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7IWZ1'@;
put 'bmN0aW9uIEEzKHkpe3ZhciBQPWZ1bmN0aW9uIGszKHkpe3ZhciBQPXt9O3JldHVybiB5LnJlYWRfc2hpZnQoNCkseS5sKz00LFAuaWQ9eS5yZWFkX3NoaWZ0KDAsImxwcDQiKSxQLm5hbWU9eS5yZWFkX3NoaWZ0KDAsImxwcDQiKSxQLlI9RzAoeSw0KSxQLlU9RzAoeSw0KSxQLlc9RzAoeSw0'@;
put 'KSxQfSh5KTtpZihQLmVuYW1lPXkucmVhZF9zaGlmdCgwLCI4bHBwNCIpLFAuYmxrc3o9eS5yZWFkX3NoaWZ0KDQpLFAuY21vZGU9eS5yZWFkX3NoaWZ0KDQpLDQhPXkucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4gUH0ocmUuY29u'@;
put 'dGVudCl9Y2F0Y2h7fWlmKCEocmU9amUuZmluZCh5LFE9Ii9FbmNyeXB0aW9uSW5mbyIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7dmFyIHZlPWZ1bmN0aW9uIFQzKHkpe3ZhciBQPUcwKHkpO3N3aXRjaChQLk1p'@;
put 'bm9yKXtjYXNlIDI6cmV0dXJuW1AuTWlub3IsZ1ooeSldO2Nhc2UgMzpyZXR1cm5bUC5NaW5vcixoRCgpXTtjYXNlIDQ6cmV0dXJuW1AuTWlub3IsbVooeSldfXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgdW5yZWNvZ25pemVkIFZlcnNpb246ICIrUC5NaW5vcil9'@;
put 'KHJlLmNvbnRlbnQpO2lmKCEocmU9amUuZmluZCh5LFE9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTtpZig0PT12ZVswXSlyZXR1cm4gZnVuY3Rpb24gTmUoeSxQLEwsUSl7dmFy'@;
put 'IHJlPWplLnV0aWxzLnByZXBfYmxvYjtpZigiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiIT15LnVyaSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVDTUEtMzc2IEFnaWxlIFVSSSAiK3kudXJpKTt2YXIgZ2U9eS5l'@;
put 'bmNzWzBdLF9lPWdlLmhhc2hBbGdvcml0aG0sdmU9ImFlcy0yNTYtY2JjIixTZT1CdWZmZXIuZnJvbShnZS5zYWx0VmFsdWUsImJhc2U2NCIpLEhlPUJ1ZmZlci5mcm9tKHkuc2FsdFZhbHVlLCJiYXNlNjQiKSxCZT0rZ2UuYmxvY2tTaXplLEdlPStnZS5rZXlCaXRzPj4zLG50PWVsKEJ1ZmZl'@;
put 'ci5jb25jYXQoW1NlLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTCkpXSksX2UpLGR0PUJ1ZmZlci5hbGxvYyg0KTtyZShkdCwwKTtmb3IodmFyIEN0PTA7Q3Q8Z2Uuc3BpbkNvdW50OysrQ3QpZHQubD0wLGR0LndyaXRlX3NoaWZ0KDQsQ3QpLG50PWVsKEJ1ZmZlci5j'@;
put 'b25jYXQoW2R0LG50XSksX2UpO3ZhciBjdD1mdW5jdGlvbih0cixabixCcixvaSl7dmFyIGtpPWVsKEJ1ZmZlci5jb25jYXQoW3RyLEJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwxNzIsMjA4LDIxNF0pXSksb2kpLExpPWtpLmxlbmd0aD49QnI/a2kuc2xpY2UoMCxCcik6QnVmZmVy'@;
put 'LmFsbG9jKEJyKTtpZihraS5sZW5ndGg8QnIpe2Zvcih2YXIgUXI9MDtRcjxraS5sZW5ndGg7KytRcilMaVtRcl09a2lbUXJdO2Zvcig7UXI8QnI7KytRcilMaVtRcl09NTR9cmV0dXJuIExpfShudCwwLEdlLF9lKTtzd2l0Y2goZ2UuY2lwaGVyQWxnb3JpdGhtKXtjYXNlIkFFUyI6aWYoIkNo'@;
put 'YWluaW5nTW9kZUNCQyIhPWdlLmNpcGhlckNoYWluaW5nKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGNoYWluaW5nICIrZ2UuY2lwaGVyQ2hhaW5pbmcpO3ZlPSJhZXMtIitnZS5rZXlCaXRzKyItY2JjIjticmVhaztjYXNlIlJDMiI6dmU9InJjMiI7YnJlYWs7ZGVmYXVs'@;
put 'dDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBhbGdvICIrZ2UuY2lwaGVyQWxnb3JpdGhtKX1TZT1mdW5jdGlvbihlcil7Zm9yKHZhciB0cj1CdWZmZXIuYWxsb2MoQmUpLFpuPTA7Wm48QmU7Kytabil0cltabl09Wm48ZXIubGVuZ3RoP2VyW1puXTo1NDtyZXR1cm4gdHJ9'@;
put 'KFNlKTt2YXIgYnQ9QnVmZmVyLmZyb20oZ2UuZW5jcnlwdGVkS2V5VmFsdWUsImJhc2U2NCIpLEZ0PUoxKGN0LFNlLHZlKS51cGRhdGUoYnQpLGt0PUoxKGVsKEJ1ZmZlci5jb25jYXQoW250LEJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pXSksX2UpLnNsaWNlKDAs'@;
put 'R2UpLFNlLHZlKS51cGRhdGUoQnVmZmVyLmZyb20oZ2UuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUsImJhc2U2NCIpKSxUdD1lbChKMShlbChCdWZmZXIuY29uY2F0KFtudCxCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKV0pLF9lKS5zbGljZSgwLEdlKSxT'@;
put 'ZSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKGdlLmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LCJiYXNlNjQiKSksX2UpLFp0PStnZS5oYXNoU2l6ZXx8TWF0aC5taW4oa3QubGVuZ3RoLFR0Lmxlbmd0aCk7aWYoMCE9a3Quc2xpY2UoMCxadCkuY29tcGFyZShUdC5zbGljZSgwLFp0KSkpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtyZShQLDApO3ZhciBwbj1QLnJlYWRfc2hpZnQoNCk7UC5sKz00O3ZhciBLbj1bXSx1bj1CdWZmZXIuY29uY2F0KFtIZSxCdWZmZXIuYWxsb2MoNCldKTtmb3IocmUodW4pLEN0PTA7UC5sPFAubGVuZ3RoOyl1bi5sPVNlLmxlbmd0'@;
put 'aCx1bi53cml0ZV9zaGlmdCg0LEN0KSxLbi5wdXNoKEoxKEZ0LGVsKEJ1ZmZlci5mcm9tKHVuKSxfZSkuc2xpY2UoMCwxNiksdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShQLnNsaWNlKFAubCxQLmwrNDA5NikpKSksUC5sKz00MDk2LCsrQ3Q7dmFyIHpuPUJ1ZmZlci5jb25jYXQoS24pLnNsaWNl'@;
put 'KDAscG4pLGtuPW9uKFEpO3JldHVybiBrbi50eXBlPSJidWZmZXIiLF9mKHpuLGtuKX0odmVbMV0scmUuY29udGVudCxMLnBhc3N3b3JkfHwiIixMKTtpZigyPT12ZVswXSlyZXR1cm4gZnVuY3Rpb24gZF8oeSxQLEwsUSl7dmFyIHJlPWplLnV0aWxzLnByZXBfYmxvYjtpZigiU3RkIiE9PXku'@;
put 'dCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7dmFyIGdlPXkudi5TYWx0LF9lPXkudi5WZXJpZmllcix2ZT15LnYuVmVyaWZpZXJIYXNoO2lmKDM2IT15LmguRmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBTdGFuZGFyZCBFbmNyeXB0'@;
put 'aW9uIGJhZCBGbGFncyIpO3ZhciBTZT0wLEhlPSIiO3N3aXRjaCh5LmguQWxnSUQpe2Nhc2UgMjYxMjY6U2U9MTI4LEhlPSJhZXMtMTI4LWVjYiI7YnJlYWs7Y2FzZSAyNjEyNzpTZT0xOTYsSGU9ImFlcy0xOTItZWNiIjticmVhaztjYXNlIDI2MTI4OlNlPTI1NixIZT0iYWVzLTI1Ni1lY2Ii'@;
put 'O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpfWlmKDMyNzcyIT15LmguQWxnSURIYXNoKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTtpZih5LmguS2V5U2l6ZSE9U2UpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJBbGdJRC9LZXlTaXplIG1pc21hdGNoIik7aWYoMjQhPXkuaC5Qcm92aWRlclR5cGUpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiB1bnN1cHBvcnRlZCBQcm92aWRlclR5cGUgIit5LmguUHJvdmlkZXJUeXBlKTtpZigiTWljcm9zb2Z0IEVuaGFuY2VkIFJTQSBhbmQg'@;
put 'QUVTIENyeXB0b2dyYXBoaWMgUHJvdmlkZXIiIT09eS5oLkNTUE5hbWUuc2xpY2UoMCw1MykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDcnlwdG8gUHJvdmlkZXIgIit5LmguQ1NQTmFtZSk7dmFyIEdlPSJTSEEtMSIsbnQ9U2U+PjMsZHQ9ZWwoQnVmZmVyLmNvbmNhdChbZ2UsY3B0'@;
put 'YWJsZS51dGlscy5lbmNvZGUoMTIwMCxMKV0pLEdlKSxDdD1CdWZmZXIuYWxsb2MoNCk7cmUoQ3QsMCk7Zm9yKHZhciBjdD0wO2N0PDVlNDsrK2N0KUN0Lmw9MCxDdC53cml0ZV9zaGlmdCg0LGN0KSxkdD1lbChCdWZmZXIuY29uY2F0KFtDdCxkdF0pLEdlKTtDdC5sPTAsQ3Qud3JpdGVfc2hp'@;
put 'ZnQoNCwwKTt2YXIgS24sdW4scW4sem4sa24sRnQ9KHpuPShxbj1mdW5jdGlvbih0cixabixCcil7Zm9yKHZhciBvaT1CdWZmZXIuYWxsb2MoNjQpLGtpPTA7a2k8b2kubGVuZ3RoOysra2kpb2lba2ldPXRyO2ZvcihraT0wO2tpPFpuLmxlbmd0aDsrK2tpKW9pW2tpXV49Wm5ba2ldO3JldHVy'@;
put 'biBlbChvaSxCcil9KSg1NCxLbj1lbChCdWZmZXIuY29uY2F0KFtkdCxDdF0pLEdlKSx1bj1HZSksa249cW4oOTIsS24sdW4pLEJ1ZmZlci5jb25jYXQoW3puLGtuXSkuc2xpY2UoMCxudCkpO2lmKEoxKEZ0LEJ1ZmZlci5hbGxvYygwKSxIZSkudXBkYXRlKHZlKS5zbGljZSgwLDIwKS5jb21w'@;
put 'YXJlKGVsKEoxKEZ0LEJ1ZmZlci5hbGxvYygwKSxIZSkudXBkYXRlKF9lKSxHZSkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7cmUoUCwwKTt2YXIga3Q9UC5yZWFkX3NoaWZ0KDQpO1AubCs9NDt2YXIgVHQ9W107Zm9yKGN0PTA7UC5sPFAubGVuZ3RoOylUdC5wdXNo'@;
put 'KEoxKEZ0LEJ1ZmZlci5hbGxvYygwKSxIZSkudXBkYXRlKFAuc2xpY2UoUC5sLFAubCs0MDk2KSkpLFAubCs9NDA5NiwrK2N0O3JldHVybiBfZihCdWZmZXIuY29uY2F0KFR0KS5zbGljZSgwLGt0KSxRKX0odmVbMV0scmUuY29udGVudCxMLnBhc3N3b3JkfHwiIixMKTt0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIil9dmFyIF9SPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBiUih5LFApe2lmKFAudGVtcGxhdGUpcmV0dXJuIF9SKHksUCk7aWYoIm9kcyI9PVAuYm9va1R5cGUpcmV0dXJuIF8wKHksUCk7Rm0oUCYmUC5QUEl8fDk2KSx5JiYheS5TU0YmJih5'@;
put 'LlNTRj13LmdldF90YWJsZSgpKSx5JiZ5LlNTRiYmKEoodyksdy5sb2FkX3RhYmxlKHkuU1NGKSxQLnJldnNzZj1BZSh5LlNTRiksUC5yZXZzc2ZbeS5TU0ZbNjU1MzVdXT0wLFAuc3NmPXkuU1NGKSx5LlN0eWxlcz17Rm9udHM6UC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoi'@;
put 'MDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpQLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpQLkJvcmRlcnM9W3t9XSxEWEY6UC5EWEY9eS5TdHlsZXMmJnkuU3R5bGVzLkRY'@;
put 'Rnx8W10sVGFibGU6UC5UYWJsZT15LlN0eWxlcyYmeS5TdHlsZXMuVGFibGV8fFtdfSxQLm92ZXJyaWRlTURXP3BsPVAub3ZlcnJpZGVNRFc6WjEoUC5Gb250c1swXSksUC5yZWxzPXt9LFAud2JyZWxzPXt9LFAuU3RyaW5ncz1bXSxQLlN0cmluZ3MuQ291bnQ9MCxQLlN0cmluZ3MuVW5pcXVl'@;
put 'PTAsSzA/UC5yZXZTdHJpbmdzPW5ldyBNYXA6KFAucmV2U3RyaW5ncz17fSxQLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBQLnJldlN0cmluZ3MuZm9vKTt2YXIgTD0ieGxzYiI9PVAuYm9va1R5cGU/ImJpbiI6InhtbCIsUT1SWi5pbmRleE9mKFAuYm9va1R5cGUpPi0xLHJlPXt3b3JrYm9v'@;
put 'a3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10sdmJhOltdLGRy'@;
put 'YXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0b214bWxwcm9w'@;
put 'czpbXSxUT0RPOltdLHhtbG5zOiIifTtoXyhQPVB8fHt9KTt2YXIgZ2U9eW4oKSxfZT0iIix2ZT0wO2lmKFAuY2VsbFhmcz1bXSxQLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxndShQLmNlbGxYZnMsUC5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJhbDowfX0pLHkuUHJv'@;
put 'cHN8fCh5LlByb3BzPXt9KSxZdChnZSxfZT0iZG9jUHJvcHMvY29yZS54bWwiLGZ1bmN0aW9uICRoKHksUCl7dmFyIEw9UHx8e30sUT1bQm4sUDJdLHJlPXt9O2lmKCF5JiYhTC5Qcm9wcylyZXR1cm4gUS5qb2luKCIiKTt5JiYobnVsbCE9eS5DcmVhdGVkRGF0ZSYmaHUoImRjdGVybXM6Y3Jl'@;
put 'YXRlZCIsInN0cmluZyI9PXR5cGVvZiB5LkNyZWF0ZWREYXRlP3kuQ3JlYXRlZERhdGU6UGgoeS5DcmVhdGVkRGF0ZSxMLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sUSxyZSksbnVsbCE9eS5Nb2RpZmllZERhdGUmJmh1KCJkY3Rlcm1zOm1vZGlmaWVkIiwic3RyaW5nIj09'@;
put 'dHlwZW9mIHkuTW9kaWZpZWREYXRlP3kuTW9kaWZpZWREYXRlOlBoKHkuTW9kaWZpZWREYXRlLEwuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxRLHJlKSk7Zm9yKHZhciBnZT0wO2dlIT1PbC5sZW5ndGg7KytnZSl7dmFyIF9lPU9sW2dlXSx2ZT1MLlByb3BzJiZudWxsIT1M'@;
put 'LlByb3BzW19lWzFdXT9MLlByb3BzW19lWzFdXTp5P3lbX2VbMV1dOm51bGw7ITA9PT12ZT92ZT0iMSI6ITE9PT12ZT92ZT0iMCI6Im51bWJlciI9PXR5cGVvZiB2ZSYmKHZlPVN0cmluZyh2ZSkpLG51bGwhPXZlJiZodShfZVswXSx2ZSxudWxsLFEscmUpfXJldHVybiBRLmxlbmd0aD4yJiYo'@;
put 'UVtRLmxlbmd0aF09IjwvY3A6Y29yZVByb3BlcnRpZXM+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9KHkuUHJvcHMsUCkpLHJlLmNvcmVwcm9wcy5wdXNoKF9lKSx6byhQLnJlbHMsMixfZSxIaS5DT1JFX1BST1BTKSxfZT0iZG9jUHJvcHMvYXBwLnhtbCIsIXku'@;
put 'UHJvcHN8fCF5LlByb3BzLlNoZWV0TmFtZXMpaWYoeS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgU2U9W10sSGU9MDtIZTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrSGUpMiE9KHkuV29ya2Jvb2suU2hlZXRzW0hlXXx8e30pLkhpZGRlbiYmU2UucHVzaCh5LlNoZWV0TmFt'@;
put 'ZXNbSGVdKTt5LlByb3BzLlNoZWV0TmFtZXM9U2V9ZWxzZSB5LlByb3BzLlNoZWV0TmFtZXM9eS5TaGVldE5hbWVzO3kuUHJvcHMuV29ya3NoZWV0cz15LlByb3BzLlNoZWV0TmFtZXMubGVuZ3RoLFl0KGdlLF9lLGZ1bmN0aW9uIHBzKHkpe3ZhciBQPVtdLEw9U3I7cmV0dXJuIHl8fCh5PXt9'@;
put 'KSx5LkFwcGxpY2F0aW9uPSJTaGVldEpTIixQW1AubGVuZ3RoXT1CbixQW1AubGVuZ3RoXT1nMyxSMS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKHZvaWQgMCE9PXlbUVsxXV0pe3ZhciByZTtzd2l0Y2goUVsyXSl7Y2FzZSJzdHJpbmciOnJlPUhyKFN0cmluZyh5W1FbMV1dKSk7YnJlYWs7Y2Fz'@;
put 'ZSJib29sIjpyZT15W1FbMV1dPyJ0cnVlIjoiZmFsc2UifXZvaWQgMCE9PXJlJiYoUFtQLmxlbmd0aF09TChRWzBdLHJlKSl9fSksUFtQLmxlbmd0aF09TCgiSGVhZGluZ1BhaXJzIixMKCJ2dDp2ZWN0b3IiLEwoInZ0OnZhcmlhbnQiLCI8dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+'@;
put 'IikrTCgidnQ6dmFyaWFudCIsTCgidnQ6aTQiLFN0cmluZyh5LldvcmtzaGVldHMpKSkse3NpemU6MixiYXNlVHlwZToidmFyaWFudCJ9KSksUFtQLmxlbmd0aF09TCgiVGl0bGVzT2ZQYXJ0cyIsTCgidnQ6dmVjdG9yIix5LlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKFEpe3JldHVybiI8dnQ6'@;
put 'bHBzdHI+IitIcihRKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6eS5Xb3Jrc2hlZXRzLGJhc2VUeXBlOiJscHN0ciJ9KSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9KHkuUHJv'@;
put 'cHMpKSxyZS5leHRwcm9wcy5wdXNoKF9lKSx6byhQLnJlbHMsMyxfZSxIaS5FWFRfUFJPUFMpLHkuQ3VzdHByb3BzIT09eS5Qcm9wcyYmbHQoeS5DdXN0cHJvcHN8fHt9KS5sZW5ndGg+MCYmKFl0KGdlLF9lPSJkb2NQcm9wcy9jdXN0b20ueG1sIixmdW5jdGlvbiBkMCh5KXt2YXIgUD1bQm4s'@;
put 'dW1dO2lmKCF5KXJldHVybiBQLmpvaW4oIiIpO3ZhciBMPTE7cmV0dXJuIGx0KHkpLmZvckVhY2goZnVuY3Rpb24ocmUpeysrTCxQW1AubGVuZ3RoXT1TcigicHJvcGVydHkiLGZ1bmN0aW9uIGVhKHksUCl7c3dpdGNoKHR5cGVvZiB5KXtjYXNlInN0cmluZyI6dmFyIEw9U3IoInZ0Omxwd3N0'@;
put 'ciIsSHIoeSkpO3JldHVybiBQJiYoTD1MLnJlcGxhY2UoLyZxdW90Oy9nLCJfeDAwMjJfIikpLEw7Y2FzZSJudW1iZXIiOnJldHVybiBTcigoMHx5KT09eT8idnQ6aTQiOiJ2dDpyOCIsSHIoU3RyaW5nKHkpKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4gU3IoInZ0OmJvb2wiLHk/InRydWUiOiJm'@;
put 'YWxzZSIpfWlmKHkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBTcigidnQ6ZmlsZXRpbWUiLFBoKHkpKTt0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBzZXJpYWxpemUgIit5KX0oeVtyZV0sITApLHtmbXRpZDoie0Q1Q0RENTA1LTJFOUMtMTAxQi05Mzk3LTA4MDAyQjJDRjlBRX0iLHBpZDpM'@;
put 'LG5hbWU6SHIocmUpfSl9KSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX0oeS5DdXN0cHJvcHMpKSxyZS5jdXN0cHJvcHMucHVzaChfZSksem8oUC5yZWxzLDQsX2UsSGkuQ1VTVF9QUk9QUykp'@;
put 'O3ZhciBCZT1bXSxHZT1bXTtmdW5jdGlvbiBudChwbixLbil7R2UucHVzaChbdmUtMSxLbixwbl0pfWZ1bmN0aW9uIGR0KHBuKXtCZS5wdXNoKFt2ZS0xLHBuXSksem8oQ3QsLTEsIi4uL3Bpdm90VGFibGVzL3Bpdm90VGFibGUiK0JlLmxlbmd0aCsiLiIrTCxIaS5QSVZPVCl9Zm9yKHZlPTE7'@;
put 'dmU8PXkuU2hlZXROYW1lcy5sZW5ndGg7Kyt2ZSl7dmFyIEN0PXsiIWlkIjp7fX0sY3Q9eS5TaGVldHNbeS5TaGVldE5hbWVzW3ZlLTFdXSxidD0oY3R8fHt9KVsiIXR5cGUiXXx8InNoZWV0Ijtzd2l0Y2goYnQpe2Nhc2UiY2hhcnQiOmlmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSIpe1l0'@;
put 'KGdlLF9lPSJ4bC9jaGFydHNoZWV0cy9zaGVldCIrdmUrIi4iK0wsbE0odmUtMSxfZSxQLHksQ3QpKSxyZS5jaGFydHMucHVzaChfZSksem8oUC53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3NoZWV0Iit2ZSsiLiIrTCxIaS5DUyk7YnJlYWt9ZGVmYXVsdDpZdChnZSxfZT0ieGwvd29ya3NoZWV0'@;
put 'cy9zaGVldCIrdmUrIi4iK0wsWkwodmUtMSxfZSxQLHksQ3QpKSxyZS5zaGVldHMucHVzaChfZSksem8oUC53YnJlbHMsLTEsIndvcmtzaGVldHMvc2hlZXQiK3ZlKyIuIitMLEhpLldTWzBdKX1pZihjdCl7ImNoYXJ0Ij09YnQmJiFjdFsiIXBvcyJdJiYoY3RbIiFwb3MiXT17eDowLHk6MCx3'@;
put 'OjkwMCxoOjYwMH0pO3ZhciBGdD1jdFsiIWNvbW1lbnRzIl0sa3Q9ITE7aWYoRnQmJkZ0Lmxlbmd0aD4wKXt2YXIgVHQ9InhsL2NvbW1lbnRzIit2ZSsiLiIrTDtZdChnZSxUdCxKZShGdCxUdCxQKSkscmUuY29tbWVudHMucHVzaChUdCksem8oQ3QsLTEsIi4uL2NvbW1lbnRzIit2ZSsiLiIr'@;
put 'TCxIaS5DTU5UKSxrdD0hMH0oY3RbIiFjb250cm9scyJdfHxbXSkubGVuZ3RoPjAmJihrdD0hMCksY3RbIiFsZWdhY3kiXSYma3QmJll0KGdlLCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIit2ZSsiLnZtbCIscUQodmUsY3RbIiFjb21tZW50cyJdLGN0WyIhY29udHJvbHMiXSxjdCkpLGN0WyIh'@;
put 'bGVnYWN5SEYiXSYmbjYoZ2UsMCx2ZSxjdFsiIXByaW50Il0uaW1hZ2VzKTt2YXIgWnQ9KCJjaGFydCI9PWN0WyIhdHlwZSJdP1tjdF06Y3RbIiFjaGFydHMiXXx8W10pLmNvbmNhdCgoY3RbIiFpbWFnZXMiXXx8W10pLm1hcChmdW5jdGlvbihwbil7cmV0dXJuIHBuWyIhdHlwZSJdfHwocG5b'@;
put 'IiF0eXBlIl09ImltYWdlIikscG59KSkuY29uY2F0KChjdFsiIXNoYXBlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKHBuKXtyZXR1cm4gcG5bIiF0eXBlIl18fChwblsiIXR5cGUiXT0ic2hhcGUiKSxwbn0pKTtadCYmWnQubGVuZ3RoJiYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Ij93cml0ZV9k'@;
put 'cmF3aW5nXyhnZSxyZSx2ZSxjdCxadCk6KFl0KGdlLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIit2ZSsiLnhtbCIsUkMoKSkscmUuZHJhd2luZ3MucHVzaCgieGwvZHJhd2luZ3MvZHJhd2luZyIrdmUrIi54bWwiKSkpLGRlbGV0ZSBjdFsiIWNvbW1lbnRzIl0sZGVsZXRlIGN0WyIhbGVnYWN5Il0s'@;
put 'ZGVsZXRlIGN0WyIhbGVnYWN5SEYiXX1jdCYmY3RbIiFwaXZvdHMiXSYmInhtbCI9PUwmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZjdFsiIXBpdm90cyJdLmZvckVhY2goZHQpLEN0WyIhaWQiXS5ySWQxJiZZdChnZSxCaShfZSksWGEoQ3QpKSxjdCYmY3RbIiF0YWJsZXMiXSYmInht'@;
put 'bCI9PUwmJmN0WyIhdGFibGVzIl0uZm9yRWFjaChudCl9cmV0dXJuIG51bGwhPVAuU3RyaW5ncyYmUC5TdHJpbmdzLmxlbmd0aD4wJiYoWXQoZ2UsX2U9InhsL3NoYXJlZFN0cmluZ3MuIitMLFdMKFAuU3RyaW5ncyxfZSxQKSkscmUuc3Rycy5wdXNoKF9lKSx6byhQLndicmVscywtMSwic2hh'@;
put 'cmVkU3RyaW5ncy4iK0wsSGkuU1NUKSksInhtbCI9PUwmJnR5cGVvZiB3cml0ZV9waXZvdF94bWw8InUiJiZ3cml0ZV9waXZvdF94bWwoQmUseSxnZSxyZSxQKSwieG1sIj09TCYmZnVuY3Rpb24gcTQoeSxQLEwsUSl7eS5mb3JFYWNoKGZ1bmN0aW9uKHJlLGdlKXt2YXIgX2U9UC5TaGVldHNb'@;
put 'UC5TaGVldE5hbWVzW3JlWzBdXV0sdmU9InhsL3RhYmxlcy90YWJsZSIrKHJlWzBdKzEpKyJfIityZVsxXSsiLnhtbCI7US50YWJsZXMucHVzaCh2ZSk7dmFyIFNlPXJlWzJdLnJlZnx8X2VbIiFyZWYiXTsic3RyaW5nIiE9dHlwZW9mIFNlJiYoU2U9T28oU2UpKTt2YXIgSGU9T2koU2UpLEJl'@;
put 'PXJlWzJdLm5hbWV8fCJzanN0YmxfIityZVswXSsiXyIrcmVbMV0sR2U9W0JuXSxudD0haG4ocmVbMl0uaGVhZGVyKSxkdD1udCYmIWhuKHJlWzJdLmZpbHRlcik7R2UucHVzaCgnPHRhYmxlIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8y'@;
put 'MDA2L21haW4iIGlkPSInKyhnZSsxKSsnIiBuYW1lPSInK0hyKEJlKSsnIiBkaXNwbGF5TmFtZT0iJytIcihCZSkrJyIgcmVmPSInK1NlKyciICcrKG51bGwhPXJlWzJdLmhlYWRlciYmMSE9cmVbMl0uaGVhZGVyPydoZWFkZXJSb3dDb3VudD0iJysocmVbMl0uaGVhZGVyfHwwKSsnIiAnOiIi'@;
put 'KSsiPiIpLGR0JiZHZS5wdXNoKCc8YXV0b0ZpbHRlciByZWY9IicrU2UrJyIvPicpLEdlLnB1c2goJzx0YWJsZUNvbHVtbnMgY291bnQ9IicrKEhlLmUuYy1IZS5zLmMrMSkrJyI+Jyk7Zm9yKHZhciBDdD1bXSxjdD1IZS5zLmM7Y3Q8PUhlLmUuYzsrK2N0KWlmKG50KXtmb3IodmFyIGJ0PWRp'@;
put 'KHtyOkhlLnMucixjOmN0fSksRnQ9X2VbYnRdLGt0PXJlWzJdLmNvbHMmJnJlWzJdLmNvbHNbY3QtSGUucy5jXSYmcmVbMl0uY29sc1tjdC1IZS5zLmNdLm5hbWV8fEZ0JiYoRnQud3x8RnQudil8fCJDb2x1bW4gIisoY3QtSGUucy5jKzEpLFR0PWt0LFp0PTE7Q3QuaW5kZXhPZihUdCk+LTEm'@;
put 'JisrWnQ8MTYzODQ7KVR0PWt0K1p0O2lmKFR0IT1rdCl0aHJvdyJ0YWJsZSBjb2x1bW5zICIrY3QrIiBhbmQgIisoQ3QuaW5kZXhPZihrdCkrSGUucy5jKSsiIGhhdmUgdGhlIHNhbWUgaGVhZGVyICciK2t0KyInOyB0cnkgc2V0dGluZyBjZWxsICIrYnQrIiB0byAnIitUdCsiJyI7Q3QucHVz'@;
put 'aChUdCksR2UucHVzaCgnPHRhYmxlQ29sdW1uIGlkPSInKyhyZVsyXS5jb2xzJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10mJm51bGwhPXJlWzJdLmNvbHNbY3QtSGUucy5jXS5pZD9yZVsyXS5jb2xzW2N0LUhlLnMuY10uaWQ6Y3QtSGUucy5jKzEpKyciIG5hbWU9IicrSHIoVHQpKyciLz4nKX1l'@;
put 'bHNlIEdlLnB1c2gocmVbMl0uY29scyYmcmVbMl0uY29sc1tjdC1IZS5zLmNdPyc8dGFibGVDb2x1bW4gaWQ9IicrcmVbMl0uY29sc1tjdC1IZS5zLmNdLmlkKyciIG5hbWU9IicrcmVbMl0uY29sc1tjdC1IZS5zLmNdLm5hbWUrJyIvPic6Jzx0YWJsZUNvbHVtbiBpZD0iJysoY3QtSGUucy5j'@;
put 'KzEpKyciIHVuaXF1ZU5hbWU9IicrKGN0LUhlLnMuYysxKSsnIiBuYW1lPSInKyhjdC1IZS5zLmMrMSkrJyIvPicpO0dlLnB1c2goIjwvdGFibGVDb2x1bW5zPiIpO3ZhciBLbj0rKCExIT09KHJlWzJdLnN0eWxlfHx7fSkucm93c3RyaXBlKSx1bj0rISEocmVbMl0uc3R5bGV8fHt9KS5jb2xz'@;
put 'dHJpcGUscW49KyEhKHJlWzJdLnN0eWxlfHx7fSkuY29sZmlyc3Qsem49KyEhKHJlWzJdLnN0eWxlfHx7fSkuY29sbGFzdCxrbj0ocmVbMl0uc3R5bGV8fHt9KS5uYW1lfHwiTWVkaXVtOSI7a249a24ubWF0Y2goL14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pPyJUYWJsZVN0eWxlIitrbjpr'@;
put 'bixHZS5wdXNoKCc8dGFibGVTdHlsZUluZm8gbmFtZT0iJytrbisnIiBzaG93Rmlyc3RDb2x1bW49IicrcW4rJyIgc2hvd0xhc3RDb2x1bW49Iicrem4rJyIgc2hvd1Jvd1N0cmlwZXM9IicrS24rJyIgc2hvd0NvbHVtblN0cmlwZXM9IicrdW4rJyIvPicpLEdlLnB1c2goIjwvdGFibGU+Iiks'@;
put 'WXQoTCx2ZSxHZS5qb2luKCIiKSl9KX0oR2UseSxnZSxyZSksInhtbCI9PUwmJih5LkV4dGVybmFsV0J8fFtdKS5sZW5ndGgmJmZ1bmN0aW9uIFc5KHksUCxMKXtMLmxpbmtzfHwoTC5saW5rcz1bXSkseS5FeHRlcm5hbFdCJiZ5LkV4dGVybmFsV0IuZm9yRWFjaChmdW5jdGlvbihRLHJlKXt2'@;
put 'YXIgZ2U9Ii94bC9leHRlcm5hbExpbmtzL19yZWxzL2V4dGVybmFsTGluayIrKHJlKzEpKyIueG1sLnJlbHMiLF9lPXt9O3pvKF9lLC0xLFEuVGFyZ2V0LFEuTWlzc2luZz9IaS5YTUlTUzpIaS5YUEFUSCksWXQoUCxhYyhnZSksWGEoX2UpKTt2YXIgdmU9Ii94bC9leHRlcm5hbExpbmtzL2V4'@;
put 'dGVybmFsTGluayIrKHJlKzEpKyIueG1sIjtMLmxpbmtzLnB1c2godmUpLFl0KFAsYWModmUpLGZ1bmN0aW9uIElDKHkpe3ZhciBQPVtCbix0Nl07cmV0dXJuKHkuU2hlZXROYW1lc3x8W10pLmxlbmd0aCYmKFAucHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5v'@;
put 'cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxQLnB1c2goIjxzaGVldE5hbWVzPiIpLHkuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKEwpe1AucHVzaCgnPHNoZWV0TmFtZSB2YWw9IicrSHIoTCkrJyIvPicpfSks'@;
put 'UC5wdXNoKCI8L3NoZWV0TmFtZXM+IiksUC5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLHkuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKEwsUSl7dmFyIHJlPXkuU2hlZXRzW0xdLGdlPXtzaGVldElkOlF9LF9lPW51bGw7aWYobnVsbD09cmUpZ2UucmVmcmVzaEVycm9yPTE7ZWxzZSBpZihy'@;
put 'ZVsiIXJlZiJdKXt2YXIgdmU9V3MocmVbIiFyZWYiXSk7X2U9IiI7Zm9yKHZhciBTZT12ZS5zLnI7U2U8PXZlLmUucjsrK1NlKXtmb3IodmFyIEhlPSIiLEJlPXZlLnMuYztCZTw9dmUuZS5jOysrQmUpe3ZhciBHZT1kaSh7cjpTZSxjOkJlfSk7cmVbR2VdJiYoSGV8fChIZT0nPHJvdyByPSIn'@;
put 'KyhTZSsxKSsnIj4nKSxIZSs9JzxjZWxsIHI9IicrR2UrJyInKyhyZVtHZV0udD8nIHQ9IicrcmVbR2VdLnQrJyInOiIiKSsiPjx2PiIrSHIocmVbR2VdLnYpKyI8L3Y+PC9jZWxsPiIpfUhlJiYoX2UrPUhlKyI8L3Jvdz4iKX19UC5wdXNoKFNyKCJzaGVldERhdGEiLF9lLGdlKSl9KSxQLnB1'@;
put 'c2goIjwvc2hlZXREYXRhU2V0PiIpLFAucHVzaCgiPC9leHRlcm5hbEJvb2s+IikpLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9leHRlcm5hbExpbms+IixQWzFdPVBbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9KFEpKX0pfSh5LGdlLHJlKSwieG1sIj09TCYmZnVuY3Rp'@;
put 'b24gVEMoeSl7dmFyIFAsTDt5Lldvcmtib29rfHwoeS5Xb3JrYm9vaz17TmFtZXM6W119KSx5Lldvcmtib29rLk5hbWVzfHwoeS5Xb3JrYm9vay5OYW1lcz1bXSk7Zm9yKHZhciBRPXkuV29ya2Jvb2suTmFtZXMscmU9MDtyZTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrcmUpe3ZhciBnZT15LlNo'@;
put 'ZWV0TmFtZXNbcmVdLF9lPXkuU2hlZXRzW2dlXTtpZihfZSYmX2VbIiFwcmludCJdKXt2YXIgdmU9IiciK2dlKyInISIsU2U9X2VbIiFwcmludCJdO2lmKFNlKXt2YXIgSGU9IShQPVNlLmFyZWEpLEJlPSEoTD1TZS50aXRsZXMpLEdlPVA/InN0cmluZyI9PXR5cGVvZiBQP1A6T28oUCk6IiI7'@;
put 'aWYoUCYmKFEuZm9yRWFjaChmdW5jdGlvbihkdCl7ZHQuU2hlZXQ9PXJlJiYhSGUmJiJfeGxubS5QcmludF9BcmVhIj09ZHQuTmFtZSYmKEhlPSEwLGR0LlJlZj12ZStHZSl9KSxIZXx8US5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9BcmVhIixSZWY6dmUrR2UsU2hlZXQ6cmV9KSksTCl7dmFy'@;
put 'IG50PSIiO0wucy5jPi0xJiZMLmUuYz4tMSYmKG50Kz12ZStOcyhMLnMuYykrIjoiK05zKEwuZS5jKSsiLCIpLEwucy5yPi0xJiZMLmUucj4tMSYmKG50Kz12ZStIcyhMLnMucikrIjoiK0hzKEwuZS5yKSsiLCIpLG50PW50LnNsaWNlKDAsLTEpLFEuZm9yRWFjaChmdW5jdGlvbihkdCl7ZHQu'@;
put 'U2hlZXQ9PXJlJiYhQmUmJiJfeGxubS5QcmludF9UaXRsZXMiPT1kdC5OYW1lJiYoSGU9ITAsZHQuUmVmPW50KX0pLEJlfHxRLnB1c2goe05hbWU6Il94bG5tLlByaW50X1RpdGxlcyIsUmVmOm50LFNoZWV0OnJlfSl9fX19fSh5KSxZdChnZSxfZT0ieGwvd29ya2Jvb2suIitMLGZ1bmN0aW9u'@;
put 'IHF2KHksUCxMKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/SEw6UkwpKHksTCl9KHksX2UsUCkpLHJlLndvcmtib29rcy5wdXNoKF9lKSx6byhQLnJlbHMsMSxfZSxIaS5XQiksWXQoZ2UsX2U9InhsL3RoZW1lL3RoZW1lMS54bWwiLHJmKHkuVGhlbWVzLFApKSxyZS50aGVtZXMucHVz'@;
put 'aChfZSksem8oUC53YnJlbHMsLTEsInRoZW1lL3RoZW1lMS54bWwiLEhpLlRIRU1FKSxZdChnZSxfZT0ieGwvc3R5bGVzLiIrTCxmdW5jdGlvbiBZTCh5LFAsTCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP1BEOnBDKSh5LEwpfSh5LF9lLFApKSxyZS5zdHlsZXMucHVzaChfZSksem8o'@;
put 'UC53YnJlbHMsLTEsInN0eWxlcy4iK0wsSGkuU1RZKSx5LnZiYXJhdyYmUSYmKFl0KGdlLF9lPSJ4bC92YmFQcm9qZWN0LmJpbiIseS52YmFyYXcpLHJlLnZiYS5wdXNoKF9lKSx6byhQLndicmVscywtMSwidmJhUHJvamVjdC5iaW4iLEhpLlZCQSkpLHkubW9kZWwmJnkubW9kZWwubGVuZ3Ro'@;
put 'JiYoWXQoZ2UsInhsL21vZGVsL2l0ZW0uZGF0YSIseS5tb2RlbCksem8oUC53YnJlbHMsLTEsIm1vZGVsL2l0ZW0uZGF0YSIsSGkuUFdSUEQpKSx5LmNvbm4mJihZdChnZSwieGwvY29ubmVjdGlvbnMueG1sIix5LmNvbm4pLHJlLmNvbm5zLnB1c2goIi94bC9jb25uZWN0aW9ucy54bWwiKSx6'@;
put 'byhQLndicmVscywtMSwiY29ubmVjdGlvbnMueG1sIixIaS5DT05OKSkseS5DdXN0b21YTUwmJnkuQ3VzdG9tWE1MLmZvckVhY2goZnVuY3Rpb24ocG4sS24pe2lmKFl0KGdlLCJjdXN0b21YbWwvaXRlbSIrKEtuKzEpKyIueG1sIixwbi5kYXRhKSx6byhQLndicmVscywtMSwiLi4vY3VzdG9t'@;
put 'WG1sL2l0ZW0iKyhLbisxKSsiLnhtbCIsSGkuQ1hNTCkscG4ucHJvcHMpe1l0KGdlLCJjdXN0b21YbWwvaXRlbVByb3BzIisoS24rMSkrIi54bWwiLHBuLnByb3BzKSxyZS5jdXN0b214bWxwcm9wcy5wdXNoKCIvY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKEtuKzEpKyIueG1sIik7dmFyIHVuPXt9'@;
put 'O3pvKHVuLC0xLCJpdGVtUHJvcHMiKyhLbisxKSsiLnhtbCIsSGkuQ1hNTFApLFl0KGdlLCJjdXN0b21YbWwvX3JlbHMvaXRlbSIrKEtuKzEpKyIueG1sLnJlbHMiLFhhKHVuKSl9fSksWXQoZ2UsIltDb250ZW50X1R5cGVzXS54bWwiLGZ1bmN0aW9uIHI5KHksUCxMKXt2YXIgcmUsUT1bXTtM'@;
put 'fHwoUVtRLmxlbmd0aF09Qm4sUVtRLmxlbmd0aF09ZjMsUT1RLmNvbmNhdChuOSkpO3ZhciBnZT1mdW5jdGlvbihTZSl7eVtTZV0mJnlbU2VdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09U3IoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT0ocmU9eVtTZV1bMF0pWzBdPyIiOiIvIikr'@;
put 'cmUsQ29udGVudFR5cGU6SWRbU2VdW1AuYm9va1R5cGV8fCJ4bHN4Il19KSl9LF9lPWZ1bmN0aW9uKFNlKXsoeVtTZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtRW1EubGVuZ3RoXT1TcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PUhlWzBdPyIiOiIvIikrSGUsQ29udGVu'@;
put 'dFR5cGU6SWRbU2VdW1AuYm9va1R5cGV8fCJ4bHN4Il19KX0pfSx2ZT1mdW5jdGlvbihTZSl7KHlbU2VdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihIZSl7UVtRLmxlbmd0aF09U3IoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1IZVswXT8iIjoiLyIpK0hlLENvbnRlbnRUeXBlOk5j'@;
put 'W1NlXVswXX0pfSl9O3JldHVybiBnZSgid29ya2Jvb2tzIiksX2UoInNoZWV0cyIpLF9lKCJjaGFydHMiKSx2ZSgidGhlbWVzIiksWyJzdHJzIiwic3R5bGVzIiwiY29ubnMiXS5mb3JFYWNoKGdlKSxbImNvcmVwcm9wcyIsImV4dHByb3BzIiwiY3VzdHByb3BzIl0uZm9yRWFjaCh2ZSksdmUo'@;
put 'InZiYSIpLHZlKCJjb21tZW50cyIpLHZlKCJkcmF3aW5ncyIpLF9lKCJ0YWJsZXMiKSxfZSgicGl2b3RzIiksX2UoInBpdm90Y2FjaGVzIiksX2UoInBpdm90cmVjb3JkcyIpLHZlKCJkYXRhbW9kZWxzIiksdmUoImN0cmxwcm9wcyIpLHZlKCJjaGFydG9ianMiKSx2ZSgiY2hhcnRzdHlsZXMi'@;
put 'KSx2ZSgiY2hhcnRjb2xvcnMiKSx2ZSgiY2hhcnRleHMiKSxfZSgibGlua3MiKSx2ZSgiY3VzdG9teG1scHJvcHMiKSwhTCYmUS5sZW5ndGg+MiYmKFFbUS5sZW5ndGhdPSI8L1R5cGVzPiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfShyZSxQKSksWXQoZ2UsIl9y'@;
put 'ZWxzLy5yZWxzIixYYShQLnJlbHMpKSxZdChnZSwieGwvX3JlbHMvd29ya2Jvb2suIitMKyIucmVscyIsWGEoUC53YnJlbHMpKSxkZWxldGUgUC5Gb250cyxkZWxldGUgUC5GaWxscyxkZWxldGUgUC5Cb3JkZXJzLGRlbGV0ZSBQLnJldnNzZixkZWxldGUgUC5zc2YsZ2V9ZnVuY3Rpb24gZl8o'@;
put 'eSxQKXt2YXIgTD0iIjtzd2l0Y2goKFB8fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVyblt5WzBdLHlbMV0seVsyXSx5WzNdLHlbNF0seVs1XSx5WzZdLHlbN11dO2Nhc2UiYmFzZTY0IjpMPXNlLmRlY29kZSh5LnNsaWNlKDAsMTIpKTticmVhaztj'@;
put 'YXNlImJpbmFyeSI6TD15O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhQJiZQLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW0wuY2hhckNvZGVBdCgwKSxMLmNoYXJDb2RlQXQoMSksTC5jaGFyQ29kZUF0KDIpLEwuY2hhckNvZGVBdCgzKSxM'@;
put 'LmNoYXJDb2RlQXQoNCksTC5jaGFyQ29kZUF0KDUpLEwuY2hhckNvZGVBdCg2KSxMLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIE5NKHksUCl7dmFyIEw9MDtlOmZvcig7TDx5Lmxlbmd0aDspc3dpdGNoKHkuY2hhckNvZGVBdChMKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6KytMO2JyZWFr'@;
put 'O2Nhc2UgNjA6cmV0dXJuIGphKHkuc2xpY2UoTCksUCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBCMS50b193b3JrYm9vayh5LFApfWZ1bmN0aW9uIHBfKHksUCxMLFEpe3JldHVybiBRPyhMLnR5cGU9InN0cmluZyIsQjEudG9fd29ya2Jvb2soeSxMKSk6QjEudG9fd29ya2Jvb2soUCxMKX1m'@;
put 'dW5jdGlvbiBfZih5LFApe3ZhciBMPXcuZ2V0bG9jYWxlKCk7Sih3KSx3LnNldGxvY2FsZShMKSxWKCk7dmFyIFE9UHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmeSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBfZihuZXcgVWludDhBcnJheSh5KSwoKFE9b24oUSkpLnR5'@;
put 'cGU9ImFycmF5IixRKSk7dmFyIGdlLHJlPXksX2U9ITE7aWYoRm0obmY9US5QUEl8fEw5KSxRLmNlbGxTdHlsZXMmJihRLmNlbGxORj0hMCxRLnNoZWV0U3R1YnM9ITApLFozPXt9LFEuZGF0ZU5GJiYoWjMuZGF0ZU5GPVEuZGF0ZU5GKSxRLnR5cGV8fChRLnR5cGU9aGUmJkJ1ZmZlci5pc0J1'@;
put 'ZmZlcih5KT8iYnVmZmVyIjoiYmFzZTY0IiksImZpbGUiPT1RLnR5cGUmJihRLnR5cGU9aGU/ImJ1ZmZlciI6ImJpbmFyeSIscmU9ZnVuY3Rpb24gUWUoeSl7aWYodHlwZW9mIFdlPCJ1IilyZXR1cm4gV2UucmVhZEZpbGVTeW5jKHkpO2lmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUi'@;
put 'JiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIFA9RmlsZSh5KTtQLm9wZW4oInIiKSxQLmVuY29kaW5nPSJiaW5hcnkiO3ZhciBMPVAucmVhZCgpO3JldHVybiBQLmNsb3NlKCksTH1jYXRjaChRKXtpZighUS5tZXNzYWdlfHwhUS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IFF9'@;
put 'dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWNjZXNzIGZpbGUgIit5KX0oeSkpLCJzdHJpbmciPT1RLnR5cGUmJihfZT0hMCxRLnR5cGU9ImJpbmFyeSIsUS5jb2RlcGFnZT02NTAwMSxyZT1mdW5jdGlvbiBNUih5KXtyZXR1cm4geS5tYXRjaCgvW15ceDAwLVx4N0ZdLyk/TG8oeSk6eX0oeSkp'@;
put 'LCJhcnJheSI9PVEudHlwZSYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ5IGluc3RhbmNlb2YgVWludDhBcnJheSYmdHlwZW9mIEFycmF5QnVmZmVyPCJ1Iil7dmFyIHZlPW5ldyBBcnJheUJ1ZmZlcigzKSxTZT1uZXcgVWludDhBcnJheSh2ZSk7aWYoU2UuZm9vPSJiYXIiLCFTZS5mb28pcmV0'@;
put 'dXJuKFE9b24oUSkpLnR5cGU9ImFycmF5IixfZihDKHJlKSxRKX1zd2l0Y2goKGdlPWZfKHJlLFEpKVswXSl7Y2FzZSAyMDg6aWYoMjA3PT09Z2VbMV0mJjE3PT09Z2VbMl0mJjIyND09PWdlWzNdJiYxNjE9PT1nZVs0XSYmMTc3PT09Z2VbNV0mJjI2PT09Z2VbNl0mJjIyNT09PWdlWzddKXJl'@;
put 'dHVybiBmdW5jdGlvbiB5Uih5LFApe3JldHVybiBqZS5maW5kKHksIkVuY3J5cHRlZFBhY2thZ2UiKT92Uih5LFApOl81KHksUCl9KGplLnJlYWQocmUsUSksUSk7YnJlYWs7Y2FzZSA5OmlmKGdlWzFdPD04KXJldHVybiBfNShyZSxRKTticmVhaztjYXNlIDYwOnJldHVybiBqYShyZSxRKTtj'@;
put 'YXNlIDczOmlmKDczPT09Z2VbMV0mJjQyPT09Z2VbMl0mJjA9PT1nZVszXSl0aHJvdyBuZXcgRXJyb3IoIlRJRkYgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2lmKDY4PT09Z2VbMV0pcmV0dXJuIGZ1bmN0aW9uIHBaKHksUCl7dmFyIEw9UHx8e30sUT0hIUwuV1RGO0wuV1RG'@;
put 'PSEwO3RyeXt2YXIgcmU9RTkudG9fd29ya2Jvb2soeSxMKTtyZXR1cm4gTC5XVEY9USxyZX1jYXRjaChnZSl7aWYoTC5XVEY9USwhZ2UubWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJlEpdGhyb3cgZ2U7cmV0dXJuIEIxLnRvX3dvcmtib29rKHksUCl9fShyZSxRKTticmVh'@;
put 'aztjYXNlIDg0OmlmKDY1PT09Z2VbMV0mJjY2PT09Z2VbMl0mJjc2PT09Z2VbM10pcmV0dXJuIE0zLnRvX3dvcmtib29rKHJlLFEpO2JyZWFrO2Nhc2UgODA6cmV0dXJuIDc1PT09Z2VbMV0mJmdlWzJdPDkmJmdlWzNdPDk/ZnVuY3Rpb24gd1IoeSxQKXt2YXIgUT15LHJlPVB8fHt9O3JldHVy'@;
put 'biByZS50eXBlfHwocmUudHlwZT1oZSYmQnVmZmVyLmlzQnVmZmVyKHkpPyJidWZmZXIiOiJiYXNlNjQiKSxITSh4bihRLHJlKSxyZSl9KHJlLFEpOnBfKHkscmUsUSxfZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09Z2VbM10/amEocmUsUSk6cF8oeSxyZSxRLF9lKTtjYXNlIDI1NTppZigyNTQ9'@;
put 'PT1nZVsxXSlyZXR1cm4gZnVuY3Rpb24gU1IoeSxQKXt2YXIgTD15O3JldHVybiJiYXNlNjQiPT1QLnR5cGUmJihMPXNlLmRlY29kZShMKSksTD1jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLEwuc2xpY2UoMiksInN0ciIpLFAudHlwZT0iYmluYXJ5IixOTShMLFApfShyZSxRKTticmVhaztj'@;
put 'YXNlIDA6aWYoMD09PWdlWzFdJiZnZVsyXT49MiYmMD09PWdlWzNdKXJldHVybiBUbS50b193b3JrYm9vayhyZSxRKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIEIyLnRvX3dvcmtib29rKHJlLFEpO2Nhc2UgMTIzOmlmKDkyPT09Z2VbMV0mJjExND09'@;
put 'PWdlWzJdJiYxMTY9PT1nZVszXSlyZXR1cm4gT20udG9fd29ya2Jvb2socmUsUSk7YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9uIENSKHksUCl7dmFyIEw9IiIsUT1mXyh5LFApO3N3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpMPXNlLmRlY29kZSh5KTti'@;
put 'cmVhaztjYXNlImJpbmFyeSI6TD15O2JyZWFrO2Nhc2UiYnVmZmVyIjpMPXkudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOkw9UHQoeSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1yZXR1cm4gMjM5PT1RWzBd'@;
put 'JiYxODc9PVFbMV0mJjE5MT09UVsyXSYmKEw9UGkoTCkpLE5NKEwsUCl9KHJlLFEpfXJldHVybiBCMi52ZXJzaW9ucy5pbmRleE9mKGdlWzBdKT4tMSYmZ2VbMl08PTEyJiZnZVszXTw9MzE/QjIudG9fd29ya2Jvb2socmUsUSk6cF8oeSxyZSxRLF9lKX1mdW5jdGlvbiBnXyh5LFApe3ZhciBM'@;
put 'PVB8fHt9O3JldHVybiBMLnR5cGU9ImZpbGUiLF9mKHksTCl9ZnVuY3Rpb24gbV8oeSxQKXtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmJyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpQLnR5cGU9IiI7YnJlYWs7Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5m'@;
put 'aWxlLGplLndyaXRlKHkse3R5cGU6aGU/ImJ1ZmZlciI6IiJ9KSk7Y2FzZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIrUC5ib29rVHlwZSsiJyBmaWxlcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQg'@;
put 'dHlwZSAiK1AudHlwZSl9cmV0dXJuIGplLndyaXRlKHksUCl9ZnVuY3Rpb24gZTEoeSxQLEwpe0x8fChMPSIiKTt2YXIgUT1MK3k7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBzZS5lbmNvZGUoTG8oUSkpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTG8oUSk7Y2FzZSJzdHJpbmci'@;
put 'OnJldHVybiB5O2Nhc2UiZmlsZSI6cmV0dXJuIFllKFAuZmlsZSxRLCJ1dGY4Iik7Y2FzZSJidWZmZXIiOnJldHVybiBoZT91ZShRLCJ1dGY4Iik6ZTEoUSx7dHlwZToiYmluYXJ5In0pLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24ocmUpe3JldHVybiByZS5jaGFyQ29kZUF0KDApfSl9dGhyb3cg'@;
put 'bmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9ZnVuY3Rpb24gdl8oeSxQKXtzd2l0Y2goUC50eXBlKXtjYXNlInN0cmluZyI6Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5Ijpmb3IodmFyIEw9IiIsUT0wO1E8eS5sZW5ndGg7KytRKUwrPVN0cmluZy5mcm9tQ2hhckNvZGUo'@;
put 'eVtRXSk7cmV0dXJuImJhc2U2NCI9PVAudHlwZT9zZS5lbmNvZGUoTCk6InN0cmluZyI9PVAudHlwZT9QaShMKTpMO2Nhc2UiZmlsZSI6cmV0dXJuIFllKFAuZmlsZSx5KTtjYXNlImJ1ZmZlciI6cmV0dXJuIHk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIr'@;
put 'UC50eXBlKX19ZnVuY3Rpb24gQzUoeSxQKXtWKCksZnVuY3Rpb24gREwoeSl7aWYoIXl8fCF5LlNoZWV0TmFtZXN8fCF5LlNoZWV0cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgV29ya2Jvb2siKTtpZigheS5TaGVldE5hbWVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIldvcmtib29rIGlz'@;
put 'IGVtcHR5Iik7IWZ1bmN0aW9uIFl2KHksUCxMKXt5LmZvckVhY2goZnVuY3Rpb24oUSxyZSl7WnYoUSk7Zm9yKHZhciBnZT0wO2dlPHJlOysrZ2UpaWYoUT09eVtnZV0pdGhyb3cgbmV3IEVycm9yKCJEdXBsaWNhdGUgU2hlZXQgTmFtZTogIitRKTtpZihMKXt2YXIgX2U9UCYmUFtyZV0mJlBb'@;
put 'cmVdLkNvZGVOYW1lfHxRO2lmKDk1PT1fZS5jaGFyQ29kZUF0KDApJiZfZS5sZW5ndGg+MjIpdGhyb3cgbmV3IEVycm9yKCJCYWQgQ29kZSBOYW1lOiBXb3Jrc2hlZXQiK19lKX19KX0oeS5TaGVldE5hbWVzLHkuV29ya2Jvb2smJnkuV29ya2Jvb2suU2hlZXRzfHxbXSwhIXkudmJhcmF3KTtm'@;
put 'b3IodmFyIEw9MDtMPHkuU2hlZXROYW1lcy5sZW5ndGg7KytMKXM1KHkuU2hlZXRzW3kuU2hlZXROYW1lc1tMXV0sMCxMKX0oeSk7dmFyIEw9UHx8e307aWYoTC5jZWxsU3R5bGVzJiYoTC5jZWxsTkY9ITAsTC5zaGVldFN0dWJzPSEwKSwiYXJyYXkiPT1MLnR5cGUpe0wudHlwZT0iYmluYXJ5'@;
put 'Ijt2YXIgUT1DNSh5LEwpO3JldHVybiBMLnR5cGU9ImFycmF5IixIKFEpfXN3aXRjaChMLmJvb2tUeXBlfHwieGxzYiIpe2Nhc2UieG1sIjpjYXNlInhsbWwiOnJldHVybiBlMShKTCh5LEwpLEwpO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiBlMSh1Uih5LEwpLEwpO2Nhc2UiaHRtIjpj'@;
put 'YXNlImh0bWwiOnJldHVybiBlMShsUih5LEwpLEwpO2Nhc2UidHh0IjpyZXR1cm4gZnVuY3Rpb24gak0oeSxQKXtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHNlLmVuY29kZSh5KTtjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOnJldHVybiB5O2Nhc2UiZmlsZSI6cmV0dXJu'@;
put 'IFllKFAuZmlsZSx5LCJiaW5hcnkiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIGhlP3VlKHksImJpbmFyeSIpOnkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihMKXtyZXR1cm4gTC5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1AudHlwZSl9KGhSKHks'@;
put 'TCksTCk7Y2FzZSJjc3YiOnJldHVybiBlMShjUih5LEwpLEwsIlx1ZmVmZiIpO2Nhc2UiZGlmIjpyZXR1cm4gZTEoZFIoeSxMKSxMKTtjYXNlImRiZiI6cmV0dXJuIHZfKElNKHksTCksTCk7Y2FzZSJwcm4iOnJldHVybiBlMShsXyh5LEwpLEwpO2Nhc2UicnRmIjpyZXR1cm4gZTEoeTUoeSxM'@;
put 'KSxMKTtjYXNlImV0aCI6cmV0dXJuIGUxKGZSKHksTCksTCk7Y2FzZSJmb2RzIjpyZXR1cm4gZTEoXzAoeSxMKSxMKTtjYXNlImJpZmYyIjpMLmJpZmZ8fChMLmJpZmY9Mik7Y2FzZSJiaWZmMyI6TC5iaWZmfHwoTC5iaWZmPTMpO2Nhc2UiYmlmZjQiOnJldHVybiBMLmJpZmZ8fChMLmJpZmY9'@;
put 'NCksdl8oaV8oeSxMKSxMKTtjYXNlImJpZmY1IjpMLmJpZmZ8fChMLmJpZmY9NSk7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmNhc2UieGxzIjpyZXR1cm4gTC5iaWZmfHwoTC5iaWZmPTgpLGZ1bmN0aW9uIEJNKHksUCl7dmFyIEw9UHx8e307cmV0dXJuIG1fKGZ1bmN0aW9uIENNKHksUCl7dmFy'@;
put 'IEw9UHx8e30sUT1qZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pLHJlPSIvV29ya2Jvb2siO3N3aXRjaChMLmJvb2tUeXBlfHwieGxzIil7Y2FzZSJ4bHMiOkwuYm9va1R5cGU9ImJpZmY4IjtjYXNlInhsYSI6TC5ib29rVHlwZXx8KEwuYm9va1R5cGU9InhsYSIpO2Nhc2UiYmlmZjgiOnJl'@;
put 'PSIvV29ya2Jvb2siLEwuYmlmZj04O2JyZWFrO2Nhc2UiYmlmZjUiOnJlPSIvQm9vayIsTC5iaWZmPTU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK0wuYm9va1R5cGUrIiBmb3IgWExTIENGQiIpfXJldHVybiBqZS51dGlscy5jZmJfYWRkKFEscmUsaV8o'@;
put 'eSxMKSksOD09TC5iaWZmJiYoeS5Qcm9wc3x8eS5DdXN0cHJvcHMpJiZmdW5jdGlvbiB3TSh5LFApe3ZhciBfZSxMPVtdLFE9W10scmU9W10sZ2U9MDtpZih5LlByb3BzKWZvcihfZT1sdCh5LlByb3BzKSxnZT0wO2dlPF9lLmxlbmd0aDsrK2dlKShPYmplY3QucHJvdG90eXBlLmhhc093blBy'@;
put 'b3BlcnR5LmNhbGwoYjQsX2VbZ2VdKT9MOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5NCxfZVtnZV0pP1E6cmUpLnB1c2goW19lW2dlXSx5LlByb3BzW19lW2dlXV1dKTtpZih5LkN1c3Rwcm9wcylmb3IoX2U9bHQoeS5DdXN0cHJvcHMpLGdlPTA7Z2U8X2UubGVuZ3Ro'@;
put 'OysrZ2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHkuUHJvcHN8fHt9LF9lW2dlXSl8fChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYjQsX2VbZ2VdKT9MOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5NCxfZVtnZV0pP1E6'@;
put 'cmUpLnB1c2goW19lW2dlXSx5LkN1c3Rwcm9wc1tfZVtnZV1dXSk7dmFyIHZlPVtdO2ZvcihnZT0wO2dlPHJlLmxlbmd0aDsrK2dlKWZtLmluZGV4T2YocmVbZ2VdWzBdKT4tMXx8bnVsbCE9cmVbZ2VdWzFdJiZ2ZS5wdXNoKHJlW2dlXSk7US5sZW5ndGgmJmplLnV0aWxzLmNmYl9hZGQoUCwi'@;
put 'L1x4MDVTdW1tYXJ5SW5mb3JtYXRpb24iLHdpKFEscnAuU0kseTQsd3IpKSwoTC5sZW5ndGh8fHZlLmxlbmd0aCkmJmplLnV0aWxzLmNmYl9hZGQoUCwiL1x4MDVEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIsd2koTCxycC5EU0ksYjQsXzQsdmUubGVuZ3RoP3ZlOm51bGwscnAuVURJKSl9'@;
put 'KHksUSksOD09TC5iaWZmJiZ5LnZiYXJhdyYmZnVuY3Rpb24gdEkoeSxQKXtQLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKEwsUSl7aWYoMCE9USl7dmFyIHJlPUwucmVwbGFjZSgvW15cL10qW1wvXS8sIi9fVkJBX1BST0pFQ1RfQ1VSLyIpOyIvIiE9PXJlLnNsaWNlKC0xKSYmamUudXRp'@;
put 'bHMuY2ZiX2FkZCh5LHJlLFAuRmlsZUluZGV4W1FdLmNvbnRlbnQpfX0pfShRLGplLnJlYWQoeS52YmFyYXcse3R5cGU6InN0cmluZyI9PXR5cGVvZiB5LnZiYXJhdz8iYmluYXJ5IjoiYnVmZmVyIn0pKSxRfSh5LEwpLEwpfSh5LEwpO2Nhc2UieGxzeCI6Y2FzZSJ4bHNtIjpjYXNlInhsYW0i'@;
put 'OmNhc2UieGxzYiI6Y2FzZSJvZHMiOnJldHVybiBmdW5jdGlvbiBWTSh5LFApe3ZhciBMPVB8fHt9LFE9YlIoeSxMKSxyZT17fTtpZihMLmNvbXByZXNzaW9uJiYocmUuY29tcHJlc3Npb249IkRFRkxBVEUiKSxMLnBhc3N3b3JkKXJlLnR5cGU9aGU/Im5vZGVidWZmZXIiOiJzdHJpbmciO2Vs'@;
put 'c2Ugc3dpdGNoKEwudHlwZSl7Y2FzZSJiYXNlNjQiOnJlLnR5cGU9ImJhc2U2NCI7YnJlYWs7Y2FzZSJiaW5hcnkiOnJlLnR5cGU9InN0cmluZyI7YnJlYWs7Y2FzZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIrTC5ib29rVHlw'@;
put 'ZSsiJyBmaWxlcyIpO2Nhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJlLnR5cGU9aGU/Im5vZGVidWZmZXIiOiJzdHJpbmciO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0wudHlwZSl9dmFyIGdlPVEuRnVsbFBhdGhzP2plLndyaXRlKFEse2ZpbGVU'@;
put 'eXBlOiJ6aXAiLHR5cGU6e25vZGVidWZmZXI6ImJ1ZmZlciIsc3RyaW5nOiJiaW5hcnkifVtyZS50eXBlXXx8cmUudHlwZX0pOlEuZ2VuZXJhdGUocmUpO3JldHVybiBMLnBhc3N3b3JkJiZ0eXBlb2YgYjA8InUiP21fKGIwKGdlLEwucGFzc3dvcmQpLEwpOiJmaWxlIj09PUwudHlwZT9ZZShM'@;
put 'LmZpbGUsZ2UpOiJzdHJpbmciPT1MLnR5cGU/UGkoZ2UpOmdlfSh5LEwpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgYm9va1R5cGUgfCIrTC5ib29rVHlwZSsifCIpfX1mdW5jdGlvbiB0MSh5KXtpZigheS5ib29rVHlwZSl7dmFyIEw9eS5maWxlLnNsaWNlKHkuZmls'@;
put 'ZS5sYXN0SW5kZXhPZigiLiIpKS50b0xvd2VyQ2FzZSgpO0wubWF0Y2goL15cLlthLXpdKyQvKSYmKHkuYm9va1R5cGU9TC5zbGljZSgxKSkseS5ib29rVHlwZT17eGxzOiJiaWZmOCIsaHRtOiJodG1sIixzbGs6InN5bGsiLHNvY2lhbGNhbGM6ImV0aCIsU2gzM3RKUzoiV1RGIn1beS5ib29r'@;
put 'VHlwZV18fHkuYm9va1R5cGV9fWZ1bmN0aW9uIFM1KHksUCxMKXt2YXIgUT1MfHx7fTtyZXR1cm4gUS50eXBlPSJmaWxlIixRLmZpbGU9UCx0MShRKSxDNSh5LFEpfWZ1bmN0aW9uIHpNKHksUCxMLFEscmUsZ2UsX2UsdmUpe3ZhciBTZT1IcyhMKSxIZT12ZS5kZWZ2YWwsQmU9dmUucmF3LEdl'@;
put 'PSEwLG50PTE9PT1yZT9bXTp7fTtpZigxIT09cmUpaWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkobnQsIl9fcm93TnVtX18iLHt2YWx1ZTpMLGVudW1lcmFibGU6ITF9KX1jYXRjaHtudC5fX3Jvd051bV9fPUx9ZWxzZSBudC5fX3Jvd051bV9fPUw7'@;
put 'aWYoIV9lfHx5W0xdKWZvcih2YXIgZHQ9UC5zLmM7ZHQ8PVAuZS5jOysrZHQpe3ZhciBDdD1fZT95W0xdW2R0XTp5W1FbZHRdK1NlXTtpZih2b2lkIDAhPT1DdCYmdm9pZCAwIT09Q3QudCl7dmFyIGN0PUN0LnY7c3dpdGNoKEN0LnQpe2Nhc2UieiI6aWYobnVsbD09Y3QpYnJlYWs7Y29udGlu'@;
put 'dWU7Y2FzZSJlIjpjdD0wPT1jdD9udWxsOnZvaWQgMDticmVhaztjYXNlInMiOmNhc2UiZCI6Y2FzZSJiIjpjYXNlIm4iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgdHlwZSAiK0N0LnQpfWlmKG51bGwhPWdlW2R0XSl7aWYobnVsbD09Y3QpaWYoImUiPT1D'@;
put 'dC50JiZudWxsPT09Y3QpbnRbZ2VbZHRdXT1udWxsO2Vsc2UgaWYodm9pZCAwIT09SGUpbnRbZ2VbZHRdXT1IZTtlbHNle2lmKCFCZXx8bnVsbCE9PWN0KWNvbnRpbnVlO250W2dlW2R0XV09bnVsbH1lbHNlIG50W2dlW2R0XV09QmU/Y3Q6Y3UoQ3QsY3QsdmUpO251bGwhPWN0JiYoR2U9ITEp'@;
put 'fX1lbHNle2lmKHZvaWQgMD09PUhlKWNvbnRpbnVlO251bGwhPWdlW2R0XSYmKG50W2dlW2R0XV09SGUpfX1yZXR1cm57cm93Om50LGlzZW1wdHk6R2V9fWZ1bmN0aW9uIEg2KHksUCl7aWYobnVsbD09eXx8bnVsbD09eVsiIXJlZiJdKXJldHVybltdO3ZhciBMPXt0OiJuIix2OjB9LFE9MCxy'@;
put 'ZT0xLGdlPVtdLF9lPTAsdmU9IiIsU2U9SlNPTi5wYXJzZSgneyJzIjp7InIiOjAsImMiOjB9LCJlIjp7InIiOjAsImMiOjB9fScpLEhlPVB8fHt9LEJlPW51bGwhPUhlLnJhbmdlP0hlLnJhbmdlOnlbIiFyZWYiXTtzd2l0Y2goMT09PUhlLmhlYWRlcj9RPTE6IkEiPT09SGUuaGVhZGVyP1E9'@;
put 'MjpBcnJheS5pc0FycmF5KEhlLmhlYWRlcik/UT0zOm51bGw9PUhlLmhlYWRlciYmKFE9MCksdHlwZW9mIEJlKXtjYXNlInN0cmluZyI6U2U9T2koQmUpO2JyZWFrO2Nhc2UibnVtYmVyIjooU2U9T2koeVsiIXJlZiJdKSkucy5yPUJlO2JyZWFrO2RlZmF1bHQ6U2U9QmV9UT4wJiYocmU9MCk7'@;
put 'dmFyIEdlPUhzKFNlLnMuciksbnQ9W10sZHQ9W10sQ3Q9MCxjdD0wLGJ0PUFycmF5LmlzQXJyYXkoeSksRnQ9U2Uucy5yLGt0PTAsVHQ9MDtmb3IoYnQmJiF5W0Z0XSYmKHlbRnRdPVtdKSxrdD1TZS5zLmM7a3Q8PVNlLmUuYzsrK2t0KXN3aXRjaChudFtrdF09TnMoa3QpLEw9YnQ/eVtGdF1b'@;
put 'a3RdOnlbbnRba3RdK0dlXSxRKXtjYXNlIDE6Z2Vba3RdPWt0LVNlLnMuYzticmVhaztjYXNlIDI6Z2Vba3RdPW50W2t0XTticmVhaztjYXNlIDM6Z2Vba3RdPUhlLmhlYWRlcltrdC1TZS5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9yKG51bGw9PUwmJihMPUpTT04ucGFyc2UoJ3sidyI6ICJfX0VN'@;
put 'UFRZIiwgInQiOiAicyJ9JykpLHZlPV9lPWN1KEwsbnVsbCxIZSksY3Q9MCxUdD0wO1R0PGdlLmxlbmd0aDsrK1R0KWdlW1R0XT09dmUmJih2ZT1fZSsiXyIrICsrY3QpO2dlW2t0XT12ZX1mb3IoRnQ9U2Uucy5yK3JlO0Z0PD1TZS5lLnI7KytGdCl7dmFyIFp0PXpNKHksU2UsRnQsbnQsUSxn'@;
put 'ZSxidCxIZSk7KCExPT09WnQuaXNlbXB0eXx8KDE9PT1RPyExIT09SGUuYmxhbmtyb3dzOkhlLmJsYW5rcm93cykpJiYoZHRbQ3QrK109WnQucm93KX1yZXR1cm4gZHQubGVuZ3RoPUN0LGR0fXZhciAkZD0vIi9nO2Z1bmN0aW9uIFVNKHksUCxMLFEscmUsZ2UsX2UsdmUpe2Zvcih2YXIgU2U9'@;
put 'ITAsSGU9W10sQmU9IiIsR2U9SHMoTCksbnQ9UC5zLmM7bnQ8PVAuZS5jOysrbnQpaWYoUVtudF0pe3ZhciBkdD12ZS5kZW5zZT8oeVtMXXx8W10pW250XTp5W1FbbnRdK0dlXTtpZihudWxsPT1kdClCZT0iIjtlbHNlIGlmKG51bGwhPWR0LnYpe1NlPSExLEJlPSIiK2N1KGR0LG51bGwsdmUp'@;
put 'O2Zvcih2YXIgQ3Q9MCxjdD0wO0N0IT09QmUubGVuZ3RoOysrQ3QpaWYoKGN0PUJlLmNoYXJDb2RlQXQoQ3QpKT09PXJlfHxjdD09PWdlfHwzND09PWN0KXtCZT0nIicrQmUucmVwbGFjZSgkZCwnIiInKSsnIic7YnJlYWt9IklEIj09QmUmJihCZT0nIklEIicpfWVsc2UgbnVsbD09ZHQuZnx8'@;
put 'ZHQuRj9CZT0iIjooU2U9ITEsKEJlPSI9IitkdC5mKS5pbmRleE9mKCIsIik+PTAmJihCZT0nIicrQmUucmVwbGFjZSgkZCwnIiInKSsnIicpKTtIZS5wdXNoKEJlKX1yZXR1cm4hMT09PXZlLmJsYW5rcm93cyYmU2U/bnVsbDpIZS5qb2luKF9lKX1mdW5jdGlvbiBCbCh5LFApe3ZhciBMPVtd'@;
put 'LFE9UD8/e307aWYobnVsbD09eXx8bnVsbD09eVsiIXJlZiJdKXJldHVybiIiO3ZhciByZT1PaSh5WyIhcmVmIl0pLGdlPXZvaWQgMCE9PVEuRlM/US5GUzoiLCIsX2U9Z2UuY2hhckNvZGVBdCgwKSx2ZT12b2lkIDAhPT1RLlJTP1EuUlM6IlxuIixTZT12ZS5jaGFyQ29kZUF0KDApLEhlPW5l'@;
put 'dyBSZWdFeHAoKCJ8Ij09Z2U/IlxcfCI6Z2UpKyIrJCIpLEJlPSIiLEdlPVtdO1EuZGVuc2U9QXJyYXkuaXNBcnJheSh5KTtmb3IodmFyIG50PVEuc2tpcEhpZGRlbiYmeVsiIWNvbHMiXXx8W10sZHQ9US5za2lwSGlkZGVuJiZ5WyIhcm93cyJdfHxbXSxDdD1yZS5zLmM7Q3Q8PXJlLmUuYzsr'@;
put 'K0N0KShudFtDdF18fHt9KS5oaWRkZW58fChHZVtDdF09TnMoQ3QpKTtmb3IodmFyIGN0PXJlLnMucjtjdDw9cmUuZS5yOysrY3QpKGR0W2N0XXx8e30pLmhpZGRlbnx8bnVsbCE9KEJlPVVNKHkscmUsY3QsR2UsX2UsU2UsZ2UsUSkpJiYoUS5zdHJpcCYmKEJlPUJlLnJlcGxhY2UoSGUsIiIp'@;
put 'KSxMLnB1c2goQmUrdmUpKTtyZXR1cm4gZGVsZXRlIFEuZGVuc2UsTC5qb2luKCIiKX1mdW5jdGlvbiB4Uih5LFApe1B8fChQPXt9KSxQLkZTPSJcdCIsUC5SUz0iXG4iO3ZhciBMPUJsKHksUCk7aWYodHlwZW9mIGNwdGFibGU+InUifHwic3RyaW5nIj09UC50eXBlKXJldHVybiBMO3ZhciBR'@;
put 'PWNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTCwic3RyIik7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1KStTdHJpbmcuZnJvbUNoYXJDb2RlKDI1NCkrUX1mdW5jdGlvbiBONih5KXt2YXIgTCxQPSIiLFE9IiI7aWYobnVsbD09eXx8bnVsbD09eVsiIXJlZiJdKXJldHVybltdO3Zh'@;
put 'ciB2ZSxyZT1PaSh5WyIhcmVmIl0pLGdlPSIiLF9lPVtdLFNlPVtdLEhlPUFycmF5LmlzQXJyYXkoeSk7Zm9yKHZlPXJlLnMuYzt2ZTw9cmUuZS5jOysrdmUpX2VbdmVdPU5zKHZlKTtmb3IodmFyIEJlPXJlLnMucjtCZTw9cmUuZS5yOysrQmUpZm9yKGdlPUhzKEJlKSx2ZT1yZS5zLmM7dmU8'@;
put 'PXJlLmUuYzsrK3ZlKWlmKFA9X2VbdmVdK2dlLFE9IiIsdm9pZCAwIT09KEw9SGU/KHlbQmVdfHxbXSlbdmVdOnlbUF0pKXtpZihudWxsIT1MLkYpe2lmKFA9TC5GLCFMLmYpY29udGludWU7UT1MLmYsLTE9PVAuaW5kZXhPZigiOiIpJiYoUD1QKyI6IitQKX1pZihudWxsIT1MLmYpUT1MLmY7'@;
put 'ZWxzZXtpZigieiI9PUwudCljb250aW51ZTtpZigibiI9PUwudCYmbnVsbCE9TC52KVE9IiIrTC52O2Vsc2UgaWYoImIiPT1MLnQpUT1MLnY/IlRSVUUiOiJGQUxTRSI7ZWxzZSBpZih2b2lkIDAhPT1MLncpUT0iJyIrTC53O2Vsc2V7aWYodm9pZCAwPT09TC52KWNvbnRpbnVlO1E9InMiPT1M'@;
put 'LnQ/IiciK0wudjoiIitMLnZ9fVNlW1NlLmxlbmd0aF09UCsiPSIrUX1yZXR1cm4gU2V9ZnVuY3Rpb24gX18oeSxQLEwpe3ZhciBRPUx8fHt9LHJlPSshUS5za2lwSGVhZGVyLGdlPXl8fHt9LF9lPTAsdmU9MDtpZihnZSYmbnVsbCE9US5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBRLm9y'@;
put 'aWdpbilfZT1RLm9yaWdpbjtlbHNle3ZhciBTZT0ic3RyaW5nIj09dHlwZW9mIFEub3JpZ2luP3NzKFEub3JpZ2luKTpRLm9yaWdpbjtfZT1TZS5yLHZlPVNlLmN9dmFyIEhlLEJlPUpTT04ucGFyc2UoJ3sicyI6IHsiYyI6MCwgInIiOjB9LCAiZSI6IHsiYyI6MCwgInIiOjB9fScpO2lmKEJl'@;
put 'LmUuYz12ZSxCZS5lLnI9X2UrUC5sZW5ndGgtMStyZSxnZVsiIXJlZiJdKXt2YXIgR2U9T2koZ2VbIiFyZWYiXSk7QmUuZS5jPU1hdGgubWF4KEJlLmUuYyxHZS5lLmMpLEJlLmUucj1NYXRoLm1heChCZS5lLnIsR2UuZS5yKSwtMT09X2UmJihCZS5lLnI9KF9lPUdlLmUucisxKStQLmxlbmd0'@;
put 'aC0xK3JlKX1lbHNlLTE9PV9lJiYoX2U9MCxCZS5lLnI9UC5sZW5ndGgtMStyZSk7dmFyIG50PVEuaGVhZGVyfHxbXSxkdD0wO1AuZm9yRWFjaChmdW5jdGlvbihjdCxidCl7bHQoY3QpLmZvckVhY2goZnVuY3Rpb24oRnQpey0xPT0oZHQ9bnQuaW5kZXhPZihGdCkpJiYobnRbZHQ9bnQubGVu'@;
put 'Z3RoXT1GdCk7dmFyIGt0PWN0W0Z0XSxUdD0ieiIsWnQ9IiIscG49ZGkoe2M6dmUrZHQscjpfZStidCtyZX0pO2lmKEhlPXFvLnNoZWV0X2dldF9jZWxsKGdlLHBuKSwha3R8fCJvYmplY3QiIT10eXBlb2Yga3R8fGt0IGluc3RhbmNlb2YgRGF0ZSl7aWYoIm51bWJlciI9PXR5cGVvZiBrdD9U'@;
put 'dD0ibiI6ImJvb2xlYW4iPT10eXBlb2Yga3Q/VHQ9ImIiOiJzdHJpbmciPT10eXBlb2Yga3Q/VHQ9InMiOmt0IGluc3RhbmNlb2YgRGF0ZT8oVHQ9ImQiLFEuY2VsbERhdGVzfHwoVHQ9Im4iLGt0PVVlKGt0KSksWnQ9SGUueiYmdy5pc19kYXRlKEhlLnopP0hlLno6US5kYXRlTkZ8fHcuX3Rh'@;
put 'YmxlWzE0XSk6bnVsbD09PWt0JiZRLm51bGxFcnJvciYmKFR0PSJlIixrdD0wKSxIZT8oSGUudD1UdCxIZS52PWt0LGRlbGV0ZSBIZS53LGRlbGV0ZSBIZS5SLFp0JiYoSGUuej1adCkpOmdlW3BuXT1IZT17dDpUdCx2Omt0fSxadCYmKEhlLno9WnQpLEhlJiZIZS5oKXRyeXtpZihIZS5SPUZ1'@;
put 'Lmh0bWxfdG9fcnMoSGUuaCksIUhlLnYpe0hlLnY9IiI7Zm9yKHZhciBLbj0wO0tuPEhlLlIubGVuZ3RoOysrS24pSGUudis9SGUuUltLbl0udnx8IiJ9fWNhdGNoe319ZWxzZSBnZVtwbl09a3R9KX0pLEJlLmUuYz1NYXRoLm1heChCZS5lLmMsdmUrbnQubGVuZ3RoLTEpO3ZhciBDdD1Icyhf'@;
put 'ZSk7aWYocmUpZm9yKGR0PTA7ZHQ8bnQubGVuZ3RoOysrZHQpZ2VbTnMoZHQrdmUpK0N0XT17dDoicyIsdjpudFtkdF19O3JldHVybiBnZVsiIXJlZiJdPU9vKEJlKSxnZX12YXIgcW89e2VuY29kZV9jb2w6TnMsZW5jb2RlX3JvdzpIcyxlbmNvZGVfY2VsbDpkaSxlbmNvZGVfcmFuZ2U6T28s'@;
put 'ZGVjb2RlX2NvbDpqaCxkZWNvZGVfcm93OkIwLHNwbGl0X2NlbGw6ZnVuY3Rpb24gaDQoeSl7cmV0dXJuIHkucmVwbGFjZSgvKFwkP1tBLVpdKikoXCQ/XGQqKS8sIiQxLCQyIikuc3BsaXQoIiwiKX0sZGVjb2RlX2NlbGw6c3MsZGVjb2RlX3JhbmdlOldzLGZvcm1hdF9jZWxsOmN1LGdldF9m'@;
put 'b3JtdWxhZTpONixtYWtlX2NzdjpCbCxtYWtlX2pzb246SDYsbWFrZV9mb3JtdWxhZTpONixodG1sX3RvX3JzOkZ1Lmh0bWxfdG9fcnMsc2hlZXRfYWRkX2FvYTpzMCxzaGVldF9hZGRfanNvbjpfXyxzaGVldF9hZGRfZG9tOkFNLGFvYV90b19zaGVldDprMSxqc29uX3RvX3NoZWV0OmZ1bmN0'@;
put 'aW9uIGZZKHksUCl7cmV0dXJuIF9fKG51bGwseSxQKX0sdGFibGVfdG9fc2hlZXQ6SHUsdGFibGVfdG9fYm9vazpmdW5jdGlvbiBkcih5LFApe3JldHVybiBFZChIdSh5LFApLFApfSxzaGVldF90b19jc3Y6Qmwsc2hlZXRfdG9fdHh0OnhSLHNoZWV0X3RvX2pzb246SDYsc2hlZXRfdG9faHRt'@;
put 'bDpGdS5mcm9tX3NoZWV0LHNoZWV0X3RvX2Zvcm11bGFlOk42LHNoZWV0X3RvX3Jvd19vYmplY3RfYXJyYXk6SDZ9O2Z1bmN0aW9uIFpNKHksUCxMLFEscmUpe3ZhciBnZTtpZih5LnN0eWxlJiYhKHkuX3JhbmdlJiYoZ2U9InN0cmluZyI9PXR5cGVvZiB5Ll9yYW5nZT9NLnV0aWxzLmRlY29k'@;
put 'ZV9yYW5nZSh5Ll9yYW5nZSk6eS5fcmFuZ2UsTC5jPmdlLmUuY3x8TC5jPGdlLnMuY3x8TC5yPmdlLmUucnx8TC5yPGdlLnMucikpJiZnZSl7dmFyIF9lPXkuc3R5bGUuc3R5bGU7aWYoX2Upe19lLndob2xlVGFibGUmJnFvLmFwcGx5X3N0eWxlX2RlbHRhKFEsX2Uud2hvbGVUYWJsZSk7ZTpp'@;
put 'ZihfZS5oZWFkZXJSb3cpaWYocmUpe2lmKEwuciE9Z2Uucy5yKWJyZWFrIGU7aG4oeS5zdHlsZS5jb2xoZWFkKXx8cW8uYXBwbHlfc3R5bGVfZGVsdGEoUSxfZS5oZWFkZXJSb3cpfWVsc2V7aWYoTC5yIT1nZS5zLnIpYnJlYWsgZTtobih5LmhlYWRlcil8fHFvLmFwcGx5X3N0eWxlX2RlbHRh'@;
put 'KFEsX2UuaGVhZGVyUm93KX19fX1xby50ZXN0X3Bhc3N3b3JkPWZ1bmN0aW9uIExNKHksUCl7dmFyIEw9QnVmZmVyLmZyb20oeS5zYWx0LCJiYXNlNjQiKSxRPXkuYWxnbyxyZT1lbChCdWZmZXIuY29uY2F0KFtMLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUCkpXSks'@;
put 'USksZ2U9QnVmZmVyLmFsbG9jKDQpO29sKGdlLDApO2Zvcih2YXIgX2U9MDtfZTx5LnNwaW47KytfZSlnZS5sPTAsZ2Uud3JpdGVfc2hpZnQoNCxfZSkscmU9ZWwoQnVmZmVyLmNvbmNhdChbcmUsZ2VdKSxRKTt2YXIgdmU9QnVmZmVyLmZyb20oeS5oYXNoLCJiYXNlNjQiKTtyZXR1cm4gMD09'@;
put 'cmUuY29tcGFyZSh2ZSl9LHFvLmhhc2hfcGFzc3dvcmQ9ZnVuY3Rpb24gdV8oeSl7dmFyIFA9e2FsZ286IlNIQS01MTIiLHNhbHQ6IlUyaGxaWFJLVXk1amIyMHZlR3h6ZUE9PSIsc3BpbjoxZTN9LEw9QnVmZmVyLmZyb20oUC5zYWx0LCJiYXNlNjQiKSxRPVAuYWxnbyxyZT1lbChCdWZmZXIu'@;
put 'Y29uY2F0KFtMLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAseSkpXSksUSksZ2U9QnVmZmVyLmFsbG9jKDQpO29sKGdlLDApO2Zvcih2YXIgX2U9MDtfZTxQLnNwaW47KytfZSlnZS5sPTAsZ2Uud3JpdGVfc2hpZnQoNCxfZSkscmU9ZWwoQnVmZmVyLmNvbmNhdChbcmUs'@;
put 'Z2VdKSxRKTtyZXR1cm4gUC5oYXNoPXJlLnRvU3RyaW5nKCJiYXNlNjQiKSxQfSxxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGU9ZnVuY3Rpb24oeSxQLEwpe2lmKEwpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUD9PaShQKTpQO251bGwhPVEuciYmbnVsbCE9US5jJiYoUT17czpRLGU6UX0pO3Zh'@;
put 'ciB2ZSxyZT1RLnMucixnZT0wLF9lPSIiLFNlPVdzKHlbIiFyZWYiXXx8IkExIik7U2Uucy5yPlEucy5yJiYoU2Uucy5yPVEucy5yKSxTZS5zLmM+US5zLmMmJihTZS5zLmM9US5zLmMpLFNlLmUucjxRLmUuciYmKFNlLmUucj1RLmUuciksU2UuZS5jPFEuZS5jJiYoU2UuZS5jPVEuZS5jKSx5'@;
put 'WyIhcmVmIl09T28oU2UpO2Zvcih2YXIgQmU9QXJyYXkuaXNBcnJheSh5KTtyZTw9US5lLnI7KytyZSlmb3IoZ2U9US5zLmM7Z2U8PVEuZS5jOysrZ2UpQmU/KHlbcmVdfHwoeVtyZV09W10pLHlbcmVdW2dlXXx8KHlbcmVdW2dlXT17dDoieiJ9KSx2ZT15W3JlXVtnZV0pOih5W19lPWRpKHty'@;
put 'OnJlLGM6Z2V9KV18fCh5W19lXT17dDoieiJ9KSx2ZT15W19lXSksdmUuc3x8KHZlLnM9e30pLE9iamVjdC5rZXlzKEwpLmZvckVhY2goSGUpLHZlLnMucGF0dGVyblR5cGUmJiF2ZS5zLmZnQ29sb3ImJihkZWxldGUgdmUucy5wYXR0ZXJuVHlwZSxkZWxldGUgdmUucy5iZ0NvbG9yKSwodmUu'@;
put 'cy5mZ0NvbG9yfHx2ZS5zLmJnQ29sb3IpJiYibm9uZSI9PSh2ZS5zLnBhdHRlcm5UeXBlfHwibm9uZSIpJiYodmUucy5wYXR0ZXJuVHlwZT0ic29saWQiKTtpZihyZT1RLnMucixMLnRvcHx8bnVsbD09PUwudG9wKWZvcihnZT1RLnMuYztnZTw9US5lLmM7KytnZSl7aWYoQmUpe2lmKCF5W3Jl'@;
put 'XSljb250aW51ZTt2ZT15W3JlXVtnZV19ZWxzZSBfZT1kaSh7cjpyZSxjOmdlfSksdmU9eVtfZV07dmUmJihudWxsPT09TC50b3A/ZGVsZXRlIHZlLnMudG9wOnZlLnMudG9wPW9uKEwudG9wKSl9aWYocmU9US5lLnIsTC5ib3R0b218fG51bGw9PT1MLmJvdHRvbSlmb3IoZ2U9US5zLmM7Z2U8'@;
put 'PVEuZS5jOysrZ2Upe2lmKEJlKXtpZigheVtyZV0pY29udGludWU7dmU9eVtyZV1bZ2VdfWVsc2UgX2U9ZGkoe3I6cmUsYzpnZX0pLHZlPXlbX2VdO3ZlJiYobnVsbD09PUwuYm90dG9tP2RlbGV0ZSB2ZS5zLmJvdHRvbTp2ZS5zLmJvdHRvbT1vbihMLmJvdHRvbSkpfWlmKGdlPVEucy5jLEwu'@;
put 'bGVmdHx8bnVsbD09PUwubGVmdClmb3IocmU9US5zLnI7cmU8PVEuZS5yOysrcmUpe2lmKEJlKXtpZigheVtyZV0pY29udGludWU7dmU9eVtyZV1bZ2VdfWVsc2UgX2U9ZGkoe3I6cmUsYzpnZX0pLHZlPXlbX2VdO3ZlJiYobnVsbD09PUwubGVmdD9kZWxldGUgdmUucy5sZWZ0OnZlLnMubGVm'@;
put 'dD1vbihMLmxlZnQpKX1pZihnZT1RLmUuYyxMLnJpZ2h0fHxudWxsPT09TC5yaWdodClmb3IocmU9US5zLnI7cmU8PVEuZS5yOysrcmUpe2lmKEJlKXtpZigheVtyZV0pY29udGludWU7dmU9eVtyZV1bZ2VdfWVsc2UgX2U9ZGkoe3I6cmUsYzpnZX0pLHZlPXlbX2VdO3ZlJiYobnVsbD09PUwu'@;
put 'cmlnaHQ/ZGVsZXRlIHZlLnMucmlnaHQ6dmUucy5yaWdodD1vbihMLnJpZ2h0KSl9fWZ1bmN0aW9uIEhlKEdlKXtpZigidG9wIiE9R2UmJiJib3R0b20iIT1HZSYmImxlZnQiIT1HZSYmInJpZ2h0IiE9R2Upe2lmKCJ6Ij09R2UpcmV0dXJuIHZvaWQodmUuej1MLnopO2lmKCJhbGlnbm1lbnQi'@;
put 'PT1HZSlyZXR1cm4gdm9pZCh2ZS5zW0dlXT9PYmplY3Qua2V5cyhMW0dlXSkuZm9yRWFjaChmdW5jdGlvbihudCl7dmUuc1tHZV1bbnRdPUxbR2VdW250XX0pOnZlLnNbR2VdPW9uKExbR2VdKSk7aWYoImluY29sIj09R2UpcmV0dXJuIGdlPlEucy5jJiYobnVsbD09PUwubGVmdD9kZWxldGUg'@;
put 'dmUucy5sZWZ0OnZlLnMubGVmdD0ib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXSksdm9pZChnZTxRLmUuYyYmKG51bGw9PT1MLnJpZ2h0P2RlbGV0ZSB2ZS5zLnJpZ2h0OnZlLnMucmlnaHQ9Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pKTtpZigi'@;
put 'aW5yb3ciPT1HZSlyZXR1cm4gcmU+US5zLnImJihudWxsPT09TC50b3A/ZGVsZXRlIHZlLnMudG9wOnZlLnMudG9wPSJvYmplY3QiPT10eXBlb2YgTFtHZV0/b24oTFtHZV0pOkxbR2VdKSx2b2lkKHJlPFEuZS5yJiYobnVsbD09PUwuYm90dG9tP2RlbGV0ZSB2ZS5zLmJvdHRvbTp2ZS5zLmJv'@;
put 'dHRvbT0ib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXSkpO251bGw9PT1MW0dlXT9kZWxldGUgdmUuc1tHZV06dmUuc1tHZV09TFtHZV0mJkFycmF5LmlzQXJyYXkoTFtHZV0pP0xbR2VdLnNsaWNlKCkubWFwKGZ1bmN0aW9uKG50KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9m'@;
put 'IG50P29uKG50KTpudH0pOiJvYmplY3QiPT10eXBlb2YgTFtHZV0/b24oTFtHZV0pOkxbR2VdfX19LHFvLmFwcGx5X3N0eWxlX2RlbHRhPWZ1bmN0aW9uKHksUCl7WyJzeiIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2UiLCJuYW1lIiwidmFsaWduIl0uZm9yRWFjaChmdW5j'@;
put 'dGlvbihMKXt2YXIgUT1MOyJiZ0NvbG9yIj09TD9RPSJmZ0NvbG9yIjoiZmdDb2xvciI9PUwmJihRPSJiZ0NvbG9yIiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsTCkmJihudWxsPT09UFtMXT9kZWxldGUgeVtRXTpudWxsIT1QW0xdJiYoeVtRXT1QW0xdKSl9KSxb'@;
put 'ImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImFsaWdubWVudCIsInByb3RlY3Rpb24iLCJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uZm9yRWFjaChmdW5jdGlvbihMKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxMKSYmKG51bGw9PT1QW0xdP2RlbGV0'@;
put 'ZSB5W0xdOm51bGwhPVBbTF0mJih5W0xdPW9uKFBbTF0pKSl9KX0scW8uZ2V0X2NvbXB1dGVkX3N0eWxlPWZ1bmN0aW9uKHksUCl7InN0cmluZyI9PXR5cGVvZiBQJiYoUD1NLnV0aWxzLmRlY29kZV9jZWxsKFApKTt2YXIgTD1BcnJheS5pc0FycmF5KHkpPyh5W1Aucl18fFtdKVtQLmNdOnlb'@;
put 'TS51dGlscy5lbmNvZGVfY2VsbChQKV0sUT1vbihMJiZMLnN8fHt9KTtyZXR1cm4geVsiIXRhYmxlcyJdJiZ5WyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbihyZSl7Wk0ocmUsMCxQLFEpfSkseVsiIXBpdm90cyJdJiZ5WyIhcGl2b3RzIl0uZm9yRWFjaChmdW5jdGlvbihyZSl7Wk0ocmUs'@;
put 'MCxQLFEsITApfSksUX07dmFyIFlNPXt9O3FvLmNlbGxfYXJyYXlfdG9fY3N2X3Jvdz1mdW5jdGlvbih5LFApe3ZhciBMPVA/P3t9LFE9dm9pZCAwIT09TC5GUz9MLkZTOiIsIixyZT1RLmNoYXJDb2RlQXQoMCksZ2U9dm9pZCAwIT09TC5SUz9MLlJTOiJcbiIsX2U9Z2UuY2hhckNvZGVBdCgw'@;
put 'KSx2ZT1ZTVtRXXx8KFlNW1FdPW5ldyBSZWdFeHAoKCJ8Ij09UT8iXFx8IjpRKSsiKyQiKSksU2U9ZnVuY3Rpb24gaXAoeSxQLEwsUSxyZSl7Zm9yKHZhciBnZT0hMCxfZT1bXSx2ZT0iIixTZT0wO1NlPD15Lmxlbmd0aC0xOysrU2Upe3ZhciBIZT15W1NlXTtpZihudWxsPT1IZSl2ZT0iIjtl'@;
put 'bHNlIGlmKG51bGwhPUhlLnYpe2dlPSExLHZlPSIiK2N1KEhlLG51bGwscmUpO2Zvcih2YXIgQmU9MCxHZT0wO0JlIT09dmUubGVuZ3RoOysrQmUpaWYoKEdlPXZlLmNoYXJDb2RlQXQoQmUpKT09PVB8fEdlPT09THx8MzQ9PT1HZSl7dmU9JyInK3ZlLnJlcGxhY2UoJGQsJyIiJykrJyInO2Jy'@;
put 'ZWFrfSJJRCI9PXZlJiYodmU9JyJJRCInKX1lbHNlIG51bGw9PUhlLmZ8fEhlLkY/dmU9IiI6KGdlPSExLCh2ZT0iPSIrSGUuZikuaW5kZXhPZigiLCIpPj0wJiYodmU9JyInK3ZlLnJlcGxhY2UoJGQsJyIiJykrJyInKSk7X2UucHVzaCh2ZSl9cmV0dXJuITE9PT1yZS5ibGFua3Jvd3MmJmdl'@;
put 'P251bGw6X2Uuam9pbihRKX0oeSxyZSxfZSxRLEwpO3JldHVybiBMLnN0cmlwJiYoU2U9U2UucmVwbGFjZSh2ZSwiIikpLFNlK2dlfSxmdW5jdGlvbih5KXtmdW5jdGlvbiBMKGdlLF9lLHZlKXtyZXR1cm4gbnVsbCE9Z2VbX2VdP2dlW19lXTpnZVtfZV09dmV9ZnVuY3Rpb24gUShnZSxfZSx2'@;
put 'ZSl7aWYoInN0cmluZyI9PXR5cGVvZiBfZSl7aWYoQXJyYXkuaXNBcnJheShnZSkpe3ZhciBTZT1zcyhfZSk7cmV0dXJuIGdlW1NlLnJdfHwoZ2VbU2Uucl09W10pLGdlW1NlLnJdW1NlLmNdfHwoZ2VbU2Uucl1bU2UuY109e3Q6InoifSl9cmV0dXJuIGdlW19lXXx8KGdlW19lXT17dDoieiJ9'@;
put 'KX1yZXR1cm4gUShnZSxkaSgibnVtYmVyIiE9dHlwZW9mIF9lP19lOntyOl9lLGM6dmV8fDB9KSl9eS5jb25zdHM9eS5jb25zdHN8fHt9LHkuc2hlZXRfZ2V0X2NlbGw9USx5LmJvb2tfbmV3PWZ1bmN0aW9uKCl7cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0seS5ib29rX2FwcGVu'@;
put 'ZF9zaGVldD1mdW5jdGlvbihnZSxfZSx2ZSl7aWYoIXZlKWZvcih2YXIgU2U9MTtTZTw9NjU1MzUmJi0xIT1nZS5TaGVldE5hbWVzLmluZGV4T2YodmU9IlNoZWV0IitTZSk7KytTZSk7aWYoWnYodmUpLGdlLlNoZWV0TmFtZXMuaW5kZXhPZih2ZSk+PTApdGhyb3cgbmV3IEVycm9yKCJXb3Jr'@;
put 'c2hlZXQgd2l0aCBuYW1lIHwiK3ZlKyJ8IGFscmVhZHkgZXhpc3RzISIpO2dlLlNoZWV0TmFtZXMucHVzaCh2ZSksZ2UuU2hlZXRzW3ZlXT1fZX0seS5ib29rX3NldF9zaGVldF92aXNpYmlsaXR5PWZ1bmN0aW9uKGdlLF9lLHZlKXtMKGdlLCJXb3JrYm9vayIse30pLEwoZ2UuV29ya2Jvb2ss'@;
put 'IlNoZWV0cyIsW10pO3ZhciBTZT1mdW5jdGlvbiByZShnZSxfZSl7aWYoIm51bWJlciI9PXR5cGVvZiBfZSl7aWYoX2U+PTAmJmdlLlNoZWV0TmFtZXMubGVuZ3RoPl9lKXJldHVybiBfZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0ICMgIitfZSl9aWYoInN0cmluZyI9PXR5'@;
put 'cGVvZiBfZSl7dmFyIHZlPWdlLlNoZWV0TmFtZXMuaW5kZXhPZihfZSk7aWYodmU+LTEpcmV0dXJuIHZlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgbmFtZSB8IitfZSsifCIpfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgfCIrX2UrInwiKX0oZ2UsX2Up'@;
put 'O3N3aXRjaChMKGdlLldvcmtib29rLlNoZWV0cyxTZSx7fSksdmUpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgc2hlZXQgdmlzaWJpbGl0eSBzZXR0aW5nICIrdmUpfWdlLldvcmtib29rLlNoZWV0c1tTZV0uSGlkZGVuPXZlfSxmdW5j'@;
put 'dGlvbiBQKGdlKXtnZS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXt5LmNvbnN0c1tfZVswXV09X2VbMV19KX0oW1siU0hFRVRfVklTSUJMRSIsMF0sWyJTSEVFVF9ISURERU4iLDFdLFsiU0hFRVRfVkVSWV9ISURERU4iLDJdXSkseS5jZWxsX3NldF9udW1iZXJfZm9ybWF0PWZ1bmN0aW9uKGdlLF9l'@;
put 'KXtyZXR1cm4gZ2Uuej1fZSxnZX0seS5jZWxsX3NldF9oeXBlcmxpbms9ZnVuY3Rpb24oZ2UsX2UsdmUpe3JldHVybiBfZT8oZ2UubD17VGFyZ2V0Ol9lfSx2ZSYmKGdlLmwuVG9vbHRpcD12ZSksZ2Uuc3x8KGdlLnM9e30pLGdlLnMuY29sb3I9e3RoZW1lOjEwfSk6KGRlbGV0ZSBnZS5sLGdl'@;
put 'LnMmJmdlLnMuY29sb3ImJjEwPT1nZS5zLmNvbG9yLnRoZW1lJiZkZWxldGUgZ2Uucy5jb2xvciksZ2V9LHkuY2VsbF9zZXRfaW50ZXJuYWxfbGluaz1mdW5jdGlvbihnZSxfZSx2ZSl7cmV0dXJuIHkuY2VsbF9zZXRfaHlwZXJsaW5rKGdlLCIjIitfZSx2ZSl9LHkuY2VsbF9hZGRfY29tbWVu'@;
put 'dD1mdW5jdGlvbihnZSxfZSx2ZSl7Z2UuY3x8KGdlLmM9W10pLGdlLmMucHVzaCh7dDpfZSxhOnZlfHwiU2hlZXRKUyJ9KX0seS5zaGVldF9zZXRfYXJyYXlfZm9ybXVsYT1mdW5jdGlvbihnZSxfZSx2ZSl7Zm9yKHZhciBTZT0ic3RyaW5nIiE9dHlwZW9mIF9lP19lOk9pKF9lKSxIZT0ic3Ry'@;
put 'aW5nIj09dHlwZW9mIF9lP19lOk9vKF9lKSxCZT1TZS5zLnI7QmU8PVNlLmUucjsrK0JlKWZvcih2YXIgR2U9U2Uucy5jO0dlPD1TZS5lLmM7KytHZSl7dmFyIG50PVEoZ2UsQmUsR2UpO250LnQ9Im4iLG50LkY9SGUsZGVsZXRlIG50LnYsQmU9PVNlLnMuciYmR2U9PVNlLnMuYyYmKG50LmY9'@;
put 'dmUpfXJldHVybiBnZX19KHFvKSxoZSYmZnVuY3Rpb24oKXt2YXIgeT1GKDUxNzkzKS5SZWFkYWJsZTtNLnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihyZSxnZSl7dmFyIF9lPXkoe29iamVjdE1vZGU6ITB9KTtpZihudWxsPT1yZXx8bnVsbD09cmVbIiFyZWYiXSlyZXR1cm4gX2UucHVzaChu'@;
put 'dWxsKSxfZTt2YXIgdmU9e3Q6Im4iLHY6MH0sU2U9MCxIZT0xLEJlPVtdLEdlPTAsbnQ9IiIsZHQ9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxDdD1nZXx8e30sY3Q9bnVsbCE9Q3QucmFuZ2U/Q3QucmFuZ2U6cmVbIiFyZWYiXTtzd2l0Y2goMT09PUN0LmhlYWRlcj9TZT0xOiJBIj09PUN0'@;
put 'LmhlYWRlcj9TZT0yOkFycmF5LmlzQXJyYXkoQ3QuaGVhZGVyKSYmKFNlPTMpLHR5cGVvZiBjdCl7Y2FzZSJzdHJpbmciOmR0PU9pKGN0KTticmVhaztjYXNlIm51bWJlciI6KGR0PU9pKHJlWyIhcmVmIl0pKS5zLnI9Y3Q7YnJlYWs7ZGVmYXVsdDpkdD1jdH1TZT4wJiYoSGU9MCk7dmFyIGJ0'@;
put 'PUhzKGR0LnMuciksRnQ9W10sa3Q9MCxUdD1BcnJheS5pc0FycmF5KHJlKSxadD1kdC5zLnIscG49MCxLbj0wO2ZvcihUdCYmIXJlW1p0XSYmKHJlW1p0XT1bXSkscG49ZHQucy5jO3BuPD1kdC5lLmM7Kytwbilzd2l0Y2goRnRbcG5dPU5zKHBuKSx2ZT1UdD9yZVtadF1bcG5dOnJlW0Z0W3Bu'@;
put 'XStidF0sU2Upe2Nhc2UgMTpCZVtwbl09cG4tZHQucy5jO2JyZWFrO2Nhc2UgMjpCZVtwbl09RnRbcG5dO2JyZWFrO2Nhc2UgMzpCZVtwbl09Q3QuaGVhZGVyW3BuLWR0LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09dmUmJih2ZT17dzoiX19FTVBUWSIsdDoicyJ9KSxudD1HZT1jdSh2'@;
put 'ZSxudWxsLEN0KSxrdD0wLEtuPTA7S248QmUubGVuZ3RoOysrS24pQmVbS25dPT1udCYmKG50PUdlKyJfIisgKytrdCk7QmVbcG5dPW50fXJldHVybiBadD1kdC5zLnIrSGUsX2UuX3JlYWQ9ZnVuY3Rpb24oKXtpZihadD5kdC5lLnIpcmV0dXJuIF9lLnB1c2gobnVsbCk7Zm9yKDtadDw9ZHQu'@;
put 'ZS5yOyl7dmFyIHVuPXpNKHJlLGR0LFp0LEZ0LFNlLEJlLFR0LEN0KTtpZigrK1p0LCExPT09dW4uaXNlbXB0eXx8KDE9PT1TZT8hMSE9PUN0LmJsYW5rcm93czpDdC5ibGFua3Jvd3MpKXtfZS5wdXNoKHVuLnJvdyk7YnJlYWt9fX0sX2V9LHRvX2h0bWw6ZnVuY3Rpb24ocmUsZ2Upe3ZhciBf'@;
put 'ZT15KCksdmU9Z2V8fHt9LEhlPW51bGwhPXZlLmZvb3Rlcj92ZS5mb290ZXI6RnUuRU5EO19lLnB1c2gobnVsbCE9dmUuaGVhZGVyP3ZlLmhlYWRlcjpGdS5CRUdJTik7dmFyIEJlPVdzKHJlWyIhcmVmIl0pO3ZlLmRlbnNlPUFycmF5LmlzQXJyYXkocmUpLF9lLnB1c2goRnUuX3ByZWFtYmxl'@;
put 'KHJlLEJlLHZlKSk7dmFyIEdlPUJlLnMucixudD0hMSxkdD1bXTtyZXR1cm4gX2UuX3JlYWQ9ZnVuY3Rpb24oKXtpZihHZT5CZS5lLnIpcmV0dXJuIG50fHwobnQ9ITAsX2UucHVzaCgiPC90YWJsZT4iK0hlKSksX2UucHVzaChudWxsKTtmb3IoO0dlPD1CZS5lLnI7KXtfZS5wdXNoKEZ1Ll9y'@;
put 'b3cocmUsQmUsR2UsdmUsZHQsIiIpKSwrK0dlO2JyZWFrfX0sX2V9LHRvX2NzdjpmdW5jdGlvbihyZSxnZSl7dmFyIF9lPXkoKSx2ZT1nZT8/e307aWYobnVsbD09cmV8fG51bGw9PXJlWyIhcmVmIl0pcmV0dXJuIF9lLnB1c2gobnVsbCksX2U7dmFyIFNlPU9pKHJlWyIhcmVmIl0pLEhlPXZv'@;
put 'aWQgMCE9PXZlLkZTP3ZlLkZTOiIsIixCZT1IZS5jaGFyQ29kZUF0KDApLEdlPXZvaWQgMCE9PXZlLlJTP3ZlLlJTOiJcbiIsbnQ9R2UuY2hhckNvZGVBdCgwKSxkdD1uZXcgUmVnRXhwKCgifCI9PUhlPyJcXHwiOkhlKSsiKyQiKSxDdD0iIixjdD1bXTt2ZS5kZW5zZT1BcnJheS5pc0FycmF5'@;
put 'KHJlKTtmb3IodmFyIGJ0PXZlLnNraXBIaWRkZW4mJnJlWyIhY29scyJdfHxbXSxGdD12ZS5za2lwSGlkZGVuJiZyZVsiIXJvd3MiXXx8W10sa3Q9U2Uucy5jO2t0PD1TZS5lLmM7KytrdCkoYnRba3RdfHx7fSkuaGlkZGVufHwoY3Rba3RdPU5zKGt0KSk7dmFyIFR0PVNlLnMucixadD0hMTty'@;
put 'ZXR1cm4gX2UuX3JlYWQ9ZnVuY3Rpb24oKXtpZighWnQpcmV0dXJuIFp0PSEwLF9lLnB1c2goIlx1ZmVmZiIpO2Zvcig7VHQ8PVNlLmUucjspaWYoKytUdCwhKEZ0W1R0LTFdfHx7fSkuaGlkZGVuJiZudWxsIT0oQ3Q9VU0ocmUsU2UsVHQtMSxjdCxCZSxudCxIZSx2ZSkpKXt2ZS5zdHJpcCYm'@;
put 'KEN0PUN0LnJlcGxhY2UoZHQsIiIpKSxfZS5wdXNoKEN0K0dlKTticmVha31yZXR1cm4gVHQ+U2UuZS5yP19lLnB1c2gobnVsbCk6dm9pZCAwfSxfZX19fSgpLE0ucGFyc2VfeGxzY2ZiPV81LE0ucGFyc2VfemlwPUhNLE0ucmVhZD1fZixNLnJlYWRGaWxlPWdfLE0ucmVhZEZpbGVTeW5jPWdf'@;
put 'LE0ud3JpdGU9QzUsTS53cml0ZUZpbGU9UzUsTS53cml0ZUZpbGVTeW5jPVM1LE0ud3JpdGVGaWxlQXN5bmM9ZnVuY3Rpb24gYmYoeSxQLEwsUSl7dmFyIHJlPUx8fHt9O3JlLnR5cGU9ImZpbGUiLHJlLmZpbGU9eSx0MShyZSkscmUudHlwZT0iYnVmZmVyIjt2YXIgZ2U9UTtyZXR1cm4gZ2Ug'@;
put 'aW5zdGFuY2VvZiBGdW5jdGlvbnx8KGdlPUwpLFdlLndyaXRlRmlsZSh5LEM1KFAscmUpLGdlKX0sTS5zZXRfZGF0ZV9zdHlsZT1mdW5jdGlvbiB6ZSh5KXtzd2l0Y2goeSl7Y2FzZSAwOk1lKCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBEZSgpe3ZhciB5PW5ldyBEYXRlO1hlPXFlLmdldFRp'@;
put 'bWUoKSs2ZTQqKHkuZ2V0VGltZXpvbmVPZmZzZXQoKS1xZS5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgUD15LmdldFRpbWV6b25lT2Zmc2V0KCk7VWU9ZnVuY3Rpb24oUSxyZSl7dmFyIGdlPVEuZ2V0VGltZSgpO3JldHVybiByZSYmKGdlLT0xMjYzMTY4ZTUpLChnZS0ocWUuZ2V0VGltZSgp'@;
put 'KzZlNCooUS5nZXRUaW1lem9uZU9mZnNldCgpLXFlLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9LGh0PWZ1bmN0aW9uKFEpe3ZhciByZT1uZXcgRGF0ZTtyZXR1cm4gcmUuc2V0VGltZSgyNCpRKjYwKjYwKjFlMytYZSkscmUuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PVAmJnJlLnNldFRp'@;
put 'bWUocmUuZ2V0VGltZSgpKzZlNCoocmUuZ2V0VGltZXpvbmVPZmZzZXQoKS1QKSkscmV9fSgpfX0sTS51dGlscz1xbyxNLlNTRj13LHR5cGVvZiBqZTwidSImJihNLkNGQj1qZSl9KEllKX0sMjc0MTQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUllO2FlLmJpZ251bT1GKDUw'@;
put 'NDcpLGFlLmRlZmluZT1GKDkwMzAyKS5kZWZpbmUsYWUuYmFzZT1GKDQwNTEwKSxhZS5jb25zdGFudHM9Rig0NDE1NSksYWUuZGVjb2RlcnM9Rig3MTMwMSksYWUuZW5jb2RlcnM9RigyMzY5Myl9LDkwMzAyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDIzNjkzKSx4PUYo'@;
put 'NzEzMDEpLG09Rig2NjY5OCk7ZnVuY3Rpb24gTShPLFIpe3RoaXMubmFtZT1PLHRoaXMuYm9keT1SLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1JZS5kZWZpbmU9ZnVuY3Rpb24oUix6KXtyZXR1cm4gbmV3IE0oUix6KX0sTS5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0'@;
put 'aW9uKFIpe2NvbnN0IHo9dGhpcy5uYW1lO2Z1bmN0aW9uIEsoSSl7dGhpcy5faW5pdE5hbWVkKEkseil9cmV0dXJuIG0oSyxSKSxLLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKGssRSl7Ui5jYWxsKHRoaXMsayxFKX0sbmV3IEsodGhpcyl9LE0ucHJvdG90eXBlLl9nZXREZWNvZGVy'@;
put 'PWZ1bmN0aW9uKFIpe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFI9Unx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tSXT10aGlzLl9jcmVhdGVOYW1lZCh4W1JdKSksdGhpcy5kZWNvZGVyc1tSXX0sTS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFIseixLKXtyZXR1cm4g'@;
put 'dGhpcy5fZ2V0RGVjb2Rlcih6KS5kZWNvZGUoUixLKX0sTS5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUj1SfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1JdPXRoaXMuX2NyZWF0ZU5hbWVkKGFlW1JdKSksdGhp'@;
put 'cy5lbmNvZGVyc1tSXX0sTS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFIseixLKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2Rlcih6KS5lbmNvZGUoUixLKX19LDc1NzIwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoOTU2ODQpLmIsbT1GKDI0MTc5KS5C'@;
put 'dWZmZXI7ZnVuY3Rpb24gbGUoTyxSKXt4LmNhbGwodGhpcyxSKSxtLmlzQnVmZmVyKE8pPyh0aGlzLmJhc2U9Tyx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPU8ubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gTShPLFIpe2lmKEFycmF5LmlzQXJyYXko'@;
put 'TykpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPU8ubWFwKGZ1bmN0aW9uKHope3JldHVybiBNLmlzRW5jb2RlckJ1ZmZlcih6KXx8KHo9bmV3IE0oeixSKSksdGhpcy5sZW5ndGgrPXoubGVuZ3RoLHp9LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBPKXtpZighKDA8PU8mJk88PTI1'@;
put 'NSkpcmV0dXJuIFIuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPU8sdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgTyl0aGlzLnZhbHVlPU8sdGhpcy5sZW5ndGg9bS5ieXRlTGVuZ3RoKE8pO2Vsc2V7aWYoIW0uaXNCdWZmZXIo'@;
put 'TykpcmV0dXJuIFIuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIE8pO3RoaXMudmFsdWU9Tyx0aGlzLmxlbmd0aD1PLmxlbmd0aH19YWUobGUseCksSWUuQz1sZSxsZS5pc0RlY29kZXJCdWZmZXI9ZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiBsZXx8Im9iamVjdCI9'@;
put 'PXR5cGVvZiBSJiZtLmlzQnVmZmVyKFIuYmFzZSkmJiJEZWNvZGVyQnVmZmVyIj09PVIuY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBSLm9mZnNldCYmIm51bWJlciI9PXR5cGVvZiBSLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFIuc2F2ZSYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFIucmVzdG9yZSYmImZ1bmN0aW9uIj09dHlwZW9mIFIuaXNFbXB0eSYmImZ1bmN0aW9uIj09dHlwZW9mIFIucmVhZFVJbnQ4JiYiZnVuY3Rpb24iPT10eXBlb2YgUi5za2lwJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5yYXd9LGxlLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'e29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjp4LnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxsZS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihSKXtjb25zdCB6PW5ldyBsZSh0aGlzLmJhc2UpO3JldHVybiB6Lm9mZnNldD1SLm9mZnNldCx6Lmxlbmd0aD10aGlzLm9mZnNldCx0'@;
put 'aGlzLm9mZnNldD1SLm9mZnNldCx4LnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxSLnJlcG9ydGVyKSx6fSxsZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxsZS5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKFIp'@;
put 'e3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoUnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxsZS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihSLHope2lmKCEodGhpcy5vZmZzZXQrUjw9'@;
put 'dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKHp8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTtjb25zdCBLPW5ldyBsZSh0aGlzLmJhc2UpO3JldHVybiBLLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsSy5vZmZzZXQ9dGhpcy5vZmZzZXQsSy5sZW5ndGg9dGhpcy5v'@;
put 'ZmZzZXQrUix0aGlzLm9mZnNldCs9UixLfSxsZS5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKFIpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoUj9SLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LEllLlI9TSxNLmlzRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihSKXtyZXR1cm4gUiBpbnN0'@;
put 'YW5jZW9mIE18fCJvYmplY3QiPT10eXBlb2YgUiYmIkVuY29kZXJCdWZmZXIiPT09Ui5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIFIubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5qb2lufSxNLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKFIseil7cmV0dXJuIFJ8fChS'@;
put 'PW0uYWxsb2ModGhpcy5sZW5ndGgpKSx6fHwoej0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihLKXtLLmpvaW4oUix6KSx6Kz1LLmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/Ult6'@;
put 'XT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9SLndyaXRlKHRoaXMudmFsdWUseik6bS5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KFIseikseis9dGhpcy5sZW5ndGgpKSxSfX0sNDA1MTA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0'@;
put 'IGFlPUllO2FlLlJlcG9ydGVyPUYoOTU2ODQpLmIsYWUuRGVjb2RlckJ1ZmZlcj1GKDc1NzIwKS5DLGFlLkVuY29kZXJCdWZmZXI9Rig3NTcyMCkuUixhZS5Ob2RlPUYoNTg1MzMpfSw1ODUzMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig5NTY4NCkuYix4PUYoNzU3MjAp'@;
put 'LlIsbT1GKDc1NzIwKS5DLGxlPUYoNTc3OTgpLE09WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJpbnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdy'@;
put 'YXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxPPVsia2V5Iiwib2JqIiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNl'@;
put 'IiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQoTSk7ZnVuY3Rpb24geihJLGssRSl7Y29uc3Qgaj17fTt0aGlzLl9iYXNlU3RhdGU9aixqLm5hbWU9RSxqLmVuYz1JLGoucGFyZW50PWt8fG51bGwsai5jaGlsZHJlbj1udWxsLGoudGFnPW51bGwsai5hcmdzPW51bGwsai5yZXZlcnNlQXJncz1u'@;
put 'dWxsLGouY2hvaWNlPW51bGwsai5vcHRpb25hbD0hMSxqLmFueT0hMSxqLm9iaj0hMSxqLnVzZT1udWxsLGoudXNlRGVjb2Rlcj1udWxsLGoua2V5PW51bGwsai5kZWZhdWx0PW51bGwsai5leHBsaWNpdD1udWxsLGouaW1wbGljaXQ9bnVsbCxqLmNvbnRhaW5zPW51bGwsai5wYXJlbnR8fChq'@;
put 'LmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9YXQuZXhwb3J0cz16O2NvbnN0IEs9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1'@;
put 'bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTt6LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2NvbnN0IGs9dGhpcy5fYmFzZVN0YXRlLEU9e307Sy5mb3JFYWNoKGZ1bmN0aW9uKFYpe0VbVl09a1tWXX0pO2NvbnN0IGo9bmV3IHRoaXMuY29uc3RydWN0b3IoRS5wYXJl'@;
put 'bnQpO3JldHVybiBqLl9iYXNlU3RhdGU9RSxqfSx6LnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe2NvbnN0IGs9dGhpcy5fYmFzZVN0YXRlO08uZm9yRWFjaChmdW5jdGlvbihFKXt0aGlzW0VdPWZ1bmN0aW9uKCl7Y29uc3QgVj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4g'@;
put 'ay5jaGlsZHJlbi5wdXNoKFYpLFZbRV0uYXBwbHkoVixhcmd1bWVudHMpfX0sdGhpcyl9LHoucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO2xlKG51bGw9PT1FLnBhcmVudCksay5jYWxsKHRoaXMpLEUuY2hpbGRyZW49RS5jaGlsZHJlbi5maWx0'@;
put 'ZXIoZnVuY3Rpb24oail7cmV0dXJuIGouX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxsZS5lcXVhbChFLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sei5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oayl7Y29uc3QgRT10'@;
put 'aGlzLl9iYXNlU3RhdGUsaj1rLmZpbHRlcihmdW5jdGlvbihWKXtyZXR1cm4gViBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO2s9ay5maWx0ZXIoZnVuY3Rpb24oVil7cmV0dXJuIShWIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1qLmxlbmd0aCYm'@;
put 'KGxlKG51bGw9PT1FLmNoaWxkcmVuKSxFLmNoaWxkcmVuPWosai5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1rLmxlbmd0aCYmKGxlKG51bGw9PT1FLmFyZ3MpLEUuYXJncz1rLEUucmV2ZXJzZUFyZ3M9ay5tYXAoZnVuY3Rpb24oVil7'@;
put 'aWYoIm9iamVjdCIhPXR5cGVvZiBWfHxWLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBWO2NvbnN0IEI9e307cmV0dXJuIE9iamVjdC5rZXlzKFYpLmZvckVhY2goZnVuY3Rpb24oWSl7WT09KDB8WSkmJihZfD0wKSxCW1ZbWV1dPVl9KSxCfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRh'@;
put 'ZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGlt'@;
put 'ZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihJKXt6LnByb3RvdHlwZVtJXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihJKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19'@;
put 'KSxNLmZvckVhY2goZnVuY3Rpb24oSSl7ei5wcm90b3R5cGVbSV09ZnVuY3Rpb24oKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZSxqPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGxlKG51bGw9PT1FLnRhZyksRS50YWc9SSx0aGlzLl91c2VBcmdzKGopLHRo'@;
put 'aXN9fSksei5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGspe2xlKGspO2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS51c2UpLEUudXNlPWssdGhpc30sei5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFs'@;
put 'PSEwLHRoaXN9LHoucHJvdG90eXBlLmRlZj1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUuZGVmYXVsdCksRS5kZWZhdWx0PWssRS5vcHRpb25hbD0hMCx0aGlzfSx6LnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihrKXtjb25zdCBFPXRo'@;
put 'aXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUuZXhwbGljaXQmJm51bGw9PT1FLmltcGxpY2l0KSxFLmV4cGxpY2l0PWssdGhpc30sei5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxlKG51bGw9PT1FLmV4cGxpY2l0'@;
put 'JiZudWxsPT09RS5pbXBsaWNpdCksRS5pbXBsaWNpdD1rLHRoaXN9LHoucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe2NvbnN0IGs9dGhpcy5fYmFzZVN0YXRlLEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gay5vYmo9ITAsMCE9PUUubGVuZ3RoJiZ0aGlz'@;
put 'Ll91c2VBcmdzKEUpLHRoaXN9LHoucHJvdG90eXBlLmtleT1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUua2V5KSxFLmtleT1rLHRoaXN9LHoucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEw'@;
put 'LHRoaXN9LHoucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUuY2hvaWNlKSxFLmNob2ljZT1rLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoaykubWFwKGZ1bmN0aW9uKGope3JldHVybiBrW2pdfSkpLHRoaXN9'@;
put 'LHoucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS51c2UpLEUuY29udGFpbnM9ayx0aGlzfSx6LnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7aWYobnVs'@;
put 'bD09PWoucGFyZW50KXJldHVybiBrLndyYXBSZXN1bHQoai5jaGlsZHJlblswXS5fZGVjb2RlKGssRSkpO2xldCBYLFY9ai5kZWZhdWx0LEI9ITAsWT1udWxsO2lmKG51bGwhPT1qLmtleSYmKFk9ay5lbnRlcktleShqLmtleSkpLGoub3B0aW9uYWwpe2xldCBVPW51bGw7aWYobnVsbCE9PWou'@;
put 'ZXhwbGljaXQ/VT1qLmV4cGxpY2l0Om51bGwhPT1qLmltcGxpY2l0P1U9ai5pbXBsaWNpdDpudWxsIT09ai50YWcmJihVPWoudGFnKSxudWxsIT09VXx8ai5hbnkpe2lmKEI9dGhpcy5fcGVla1RhZyhrLFUsai5hbnkpLGsuaXNFcnJvcihCKSlyZXR1cm4gQn1lbHNle2NvbnN0IHE9ay5zYXZl'@;
put 'KCk7dHJ5e251bGw9PT1qLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKGoudGFnLGssRSk6dGhpcy5fZGVjb2RlQ2hvaWNlKGssRSksQj0hMH1jYXRjaHtCPSExfWsucmVzdG9yZShxKX19aWYoai5vYmomJkImJihYPWsuZW50ZXJPYmplY3QoKSksQil7aWYobnVsbCE9PWouZXhwbGljaXQp'@;
put 'e2NvbnN0IHE9dGhpcy5fZGVjb2RlVGFnKGssai5leHBsaWNpdCk7aWYoay5pc0Vycm9yKHEpKXJldHVybiBxO2s9cX1jb25zdCBVPWsub2Zmc2V0O2lmKG51bGw9PT1qLnVzZSYmbnVsbD09PWouY2hvaWNlKXtsZXQgcTtqLmFueSYmKHE9ay5zYXZlKCkpO2NvbnN0IGVlPXRoaXMuX2RlY29k'@;
put 'ZVRhZyhrLG51bGwhPT1qLmltcGxpY2l0P2ouaW1wbGljaXQ6ai50YWcsai5hbnkpO2lmKGsuaXNFcnJvcihlZSkpcmV0dXJuIGVlO2ouYW55P1Y9ay5yYXcocSk6az1lZX1pZihFJiZFLnRyYWNrJiZudWxsIT09ai50YWcmJkUudHJhY2soay5wYXRoKCksVSxrLmxlbmd0aCwidGFnZ2VkIiks'@;
put 'RSYmRS50cmFjayYmbnVsbCE9PWoudGFnJiZFLnRyYWNrKGsucGF0aCgpLGsub2Zmc2V0LGsubGVuZ3RoLCJjb250ZW50Iiksai5hbnl8fChWPW51bGw9PT1qLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKGoudGFnLGssRSk6dGhpcy5fZGVjb2RlQ2hvaWNlKGssRSkpLGsuaXNFcnJvcihW'@;
put 'KSlyZXR1cm4gVjtpZighai5hbnkmJm51bGw9PT1qLmNob2ljZSYmbnVsbCE9PWouY2hpbGRyZW4mJmouY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlZSl7ZWUuX2RlY29kZShrLEUpfSksai5jb250YWlucyYmKCJvY3RzdHIiPT09ai50YWd8fCJiaXRzdHIiPT09ai50YWcpKXtjb25zdCBx'@;
put 'PW5ldyBtKFYpO1Y9dGhpcy5fZ2V0VXNlKGouY29udGFpbnMsay5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUocSxFKX19cmV0dXJuIGoub2JqJiZCJiYoVj1rLmxlYXZlT2JqZWN0KFgpKSxudWxsPT09ai5rZXl8fG51bGw9PT1WJiYhMCE9PUI/bnVsbCE9PVkmJmsuZXhpdEtleShZKTpr'@;
put 'LmxlYXZlS2V5KFksai5rZXksViksVn0sei5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09a3x8InNldCI9PT1rP251bGw6InNlcW9mIj09PWt8fCJzZXRvZiI9PT1rP3RoaXMuX2RlY29kZUxpc3Qo'@;
put 'RSxrLFYuYXJnc1swXSxqKTovc3RyJC8udGVzdChrKT90aGlzLl9kZWNvZGVTdHIoRSxrLGopOiJvYmppZCI9PT1rJiZWLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoRSxWLmFyZ3NbMF0sVi5hcmdzWzFdLGopOiJvYmppZCI9PT1rP3RoaXMuX2RlY29kZU9iamlkKEUsbnVsbCxudWxsLGopOiJn'@;
put 'ZW50aW1lIj09PWt8fCJ1dGN0aW1lIj09PWs/dGhpcy5fZGVjb2RlVGltZShFLGssaik6Im51bGxfIj09PWs/dGhpcy5fZGVjb2RlTnVsbChFLGopOiJib29sIj09PWs/dGhpcy5fZGVjb2RlQm9vbChFLGopOiJvYmpEZXNjIj09PWs/dGhpcy5fZGVjb2RlU3RyKEUsayxqKToiaW50Ij09PWt8'@;
put 'fCJlbnVtIj09PWs/dGhpcy5fZGVjb2RlSW50KEUsVi5hcmdzJiZWLmFyZ3NbMF0saik6bnVsbCE9PVYudXNlP3RoaXMuX2dldFVzZShWLnVzZSxFLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShFLGopOkUuZXJyb3IoInVua25vd24gdGFnOiAiK2spfSx6LnByb3RvdHlwZS5fZ2V0VXNl'@;
put 'PWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGoudXNlRGVjb2Rlcj10aGlzLl91c2UoayxFKSxsZShudWxsPT09ai51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxqLnVzZURlY29kZXI9ai51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0s'@;
put 'ai5pbXBsaWNpdCE9PWoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoai51c2VEZWNvZGVyPWoudXNlRGVjb2Rlci5jbG9uZSgpLGoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PWouaW1wbGljaXQpLGoudXNlRGVjb2Rlcn0sei5wcm90b3R5cGUuX2RlY29kZUNob2lj'@;
put 'ZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2xldCBWPW51bGwsQj0hMTtyZXR1cm4gT2JqZWN0LmtleXMoai5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oWSl7Y29uc3QgWD1rLnNhdmUoKSxVPWouY2hvaWNlW1ldO3RyeXtjb25zdCBxPVUuX2RlY29kZShrLEUpO2lmKGsu'@;
put 'aXNFcnJvcihxKSlyZXR1cm4hMTtWPXt0eXBlOlksdmFsdWU6cX0sQj0hMH1jYXRjaHtyZXR1cm4gay5yZXN0b3JlKFgpLCExfXJldHVybiEwfSx0aGlzKSxCP1Y6ay5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LHoucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9u'@;
put 'KGspe3JldHVybiBuZXcgeChrLHRoaXMucmVwb3J0ZXIpfSx6LnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsIT09Vi5kZWZhdWx0JiZWLmRlZmF1bHQ9PT1rKXJldHVybjtjb25zdCBCPXRoaXMuX2VuY29kZVZhbHVlKGss'@;
put 'RSxqKTtyZXR1cm4gdm9pZCAwPT09Qnx8dGhpcy5fc2tpcERlZmF1bHQoQixFLGopP3ZvaWQgMDpCfSx6LnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1WLnBhcmVudClyZXR1cm4gVi5jaGlsZHJlblswXS5f'@;
put 'ZW5jb2RlKGssRXx8bmV3IGFlKTtsZXQgQj1udWxsO2lmKHRoaXMucmVwb3J0ZXI9RSxWLm9wdGlvbmFsJiZ2b2lkIDA9PT1rKXtpZihudWxsPT09Vi5kZWZhdWx0KXJldHVybjtrPVYuZGVmYXVsdH1sZXQgWT1udWxsLFg9ITE7aWYoVi5hbnkpQj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVy'@;
put 'KGspO2Vsc2UgaWYoVi5jaG9pY2UpQj10aGlzLl9lbmNvZGVDaG9pY2UoayxFKTtlbHNlIGlmKFYuY29udGFpbnMpWT10aGlzLl9nZXRVc2UoVi5jb250YWlucyxqKS5fZW5jb2RlKGssRSksWD0hMDtlbHNlIGlmKFYuY2hpbGRyZW4pWT1WLmNoaWxkcmVuLm1hcChmdW5jdGlvbihVKXtpZigi'@;
put 'bnVsbF8iPT09VS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gVS5fZW5jb2RlKG51bGwsRSxrKTtpZihudWxsPT09VS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gRS5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTtjb25zdCBxPUUuZW50ZXJLZXkoVS5fYmFzZVN0YXRlLmtleSk7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBrKXJldHVybiBFLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTtjb25zdCBlZT1VLl9lbmNvZGUoa1tVLl9iYXNlU3RhdGUua2V5XSxFLGspO3JldHVybiBFLmxlYXZlS2V5KHEpLGVlfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24o'@;
put 'VSl7cmV0dXJuIFV9KSxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWSk7ZWxzZSBpZigic2Vxb2YiPT09Vi50YWd8fCJzZXRvZiI9PT1WLnRhZyl7aWYoIVYuYXJnc3x8MSE9PVYuYXJncy5sZW5ndGgpcmV0dXJuIEUuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitWLnRhZyk7aWYo'@;
put 'IUFycmF5LmlzQXJyYXkoaykpcmV0dXJuIEUuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTtjb25zdCBVPXRoaXMuY2xvbmUoKTtVLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoay5tYXAoZnVuY3Rpb24ocSl7'@;
put 'cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxrKS5fZW5jb2RlKHEsRSl9LFUpKX1lbHNlIG51bGwhPT1WLnVzZT9CPXRoaXMuX2dldFVzZShWLnVzZSxqKS5fZW5jb2RlKGssRSk6KFk9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFYudGFnLGspLFg9ITApO2lmKCFW'@;
put 'LmFueSYmbnVsbD09PVYuY2hvaWNlKXtjb25zdCBVPW51bGwhPT1WLmltcGxpY2l0P1YuaW1wbGljaXQ6Vi50YWcscT1udWxsPT09Vi5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PVU/bnVsbD09PVYudXNlJiZFLmVycm9yKCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5'@;
put 'IGZvciAudXNlKCkiKTpudWxsPT09Vi51c2UmJihCPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShVLFgscSxZKSl9cmV0dXJuIG51bGwhPT1WLmV4cGxpY2l0JiYoQj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVi5leHBsaWNpdCwhMSwiY29udGV4dCIsQikpLEJ9LHoucHJvdG90eXBlLl9lbmNvZGVD'@;
put 'aG9pY2U9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZSxWPWouY2hvaWNlW2sudHlwZV07cmV0dXJuIFZ8fGxlKCExLGsudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKGouY2hvaWNlKSkpLFYuX2VuY29kZShrLnZhbHVlLEUpfSx6'@;
put 'LnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoaykpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihFLGspO2lmKCJvYmppZCI9PT1rJiZqLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEUsai5y'@;
put 'ZXZlcnNlQXJnc1swXSxqLmFyZ3NbMV0pO2lmKCJvYmppZCI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChFLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09a3x8InV0Y3RpbWUiPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShFLGspO2lmKCJudWxsXyI9PT1rKXJldHVybiB0aGlz'@;
put 'Ll9lbmNvZGVOdWxsKCk7aWYoImludCI9PT1rfHwiZW51bSI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoRSxqLmFyZ3MmJmoucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woRSk7aWYoIm9iakRlc2MiPT09aylyZXR1cm4gdGhpcy5fZW5j'@;
put 'b2RlU3RyKEUsayk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrayl9LHoucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihrKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KGspfSx6LnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihrKXtyZXR1cm4vXltBLVphLXow'@;
put 'LTkgJygpKywtLi86PT9dKiQvLnRlc3Qoayl9fSw5NTY4NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCk7ZnVuY3Rpb24geChsZSl7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOmxlfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9u'@;
put 'IG0obGUsTSl7dGhpcy5wYXRoPWxlLHRoaXMucmV0aHJvdyhNKX1JZS5iPXgseC5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihNKXtyZXR1cm4gTSBpbnN0YW5jZW9mIG19LHgucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtjb25zdCBNPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29i'@;
put 'ajpNLm9iaixwYXRoTGVuOk0ucGF0aC5sZW5ndGh9fSx4LnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTtPLm9iaj1NLm9iaixPLnBhdGg9Ty5wYXRoLnNsaWNlKDAsTS5wYXRoTGVuKX0seC5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rp'@;
put 'b24oTSl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKE0pfSx4LnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKE0pe2NvbnN0IE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTtPLnBhdGg9Ty5wYXRoLnNsaWNlKDAsTS0xKX0seC5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24o'@;
put 'TSxPLFIpe2NvbnN0IHo9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkoTSksbnVsbCE9PXoub2JqJiYoei5vYmpbT109Uil9LHgucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0seC5wcm90b3R5cGUuZW50'@;
put 'ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBNPXRoaXMuX3JlcG9ydGVyU3RhdGUsTz1NLm9iajtyZXR1cm4gTS5vYmo9e30sT30seC5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24oTSl7Y29uc3QgTz10aGlzLl9yZXBvcnRlclN0YXRlLFI9Ty5vYmo7cmV0dXJuIE8ub2JqPU0sUn0s'@;
put 'eC5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oTSl7bGV0IE87Y29uc3QgUj10aGlzLl9yZXBvcnRlclN0YXRlLHo9TSBpbnN0YW5jZW9mIG07aWYoTz16P006bmV3IG0oUi5wYXRoLm1hcChmdW5jdGlvbihLKXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoSykrIl0ifSkuam9pbigiIiksTS5t'@;
put 'ZXNzYWdlfHxNLE0uc3RhY2spLCFSLm9wdGlvbnMucGFydGlhbCl0aHJvdyBPO3JldHVybiB6fHxSLmVycm9ycy5wdXNoKE8pLE99LHgucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oTSl7Y29uc3QgTz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBPLm9wdGlvbnMucGFydGlhbD97'@;
put 'cmVzdWx0OnRoaXMuaXNFcnJvcihNKT9udWxsOk0sZXJyb3JzOk8uZXJyb3JzfTpNfSxhZShtLEVycm9yKSxtLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKE0pe2lmKHRoaXMubWVzc2FnZT1NKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1Ry'@;
put 'YWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG0pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChPKXt0aGlzLnN0YWNrPU8uc3RhY2t9cmV0dXJuIHRoaXN9fSw2NTA4NjooYXQsSWUpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEYo'@;
put 'YWUpe2NvbnN0IHg9e307cmV0dXJuIE9iamVjdC5rZXlzKGFlKS5mb3JFYWNoKGZ1bmN0aW9uKG0peygwfG0pPT1tJiYobXw9MCkseFthZVttXV09bX0pLHh9SWUudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxJZS50YWdD'@;
put 'bGFzc0J5TmFtZT1GKEllLnRhZ0NsYXNzKSxJZS50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0Zjhz'@;
put 'dHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vu'@;
put 'c3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LEllLnRhZ0J5TmFtZT1GKEllLnRhZyl9LDQ0MTU1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1JZTthZS5fcmV2ZXJzZT1mdW5jdGlvbihtKXtjb25zdCBsZT17fTtyZXR1cm4gT2JqZWN0LmtleXMo'@;
put 'bSkuZm9yRWFjaChmdW5jdGlvbihNKXsoMHxNKT09TSYmKE18PTApLGxlW21bTV1dPU19KSxsZX0sYWUuZGVyPUYoNjUwODYpfSw5NjgzNTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDUwNDcpLG09Rig3NTcyMCkuQyxsZT1GKDU4NTMzKSxNPUYoNjUw'@;
put 'ODYpO2Z1bmN0aW9uIE8oSSl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUkubmFtZSx0aGlzLmVudGl0eT1JLHRoaXMudHJlZT1uZXcgUix0aGlzLnRyZWUuX2luaXQoSS5ib2R5KX1mdW5jdGlvbiBSKEkpe2xlLmNhbGwodGhpcywiZGVyIixJKX1mdW5jdGlvbiB6KEksayl7bGV0IEU9SS5y'@;
put 'ZWFkVUludDgoayk7aWYoSS5pc0Vycm9yKEUpKXJldHVybiBFO2NvbnN0IGo9TS50YWdDbGFzc1tFPj42XSxWPTA9PSgzMiZFKTtpZigzMT09KDMxJkUpKXtsZXQgWT1FO2ZvcihFPTA7MTI4PT0oMTI4JlkpOyl7aWYoWT1JLnJlYWRVSW50OChrKSxJLmlzRXJyb3IoWSkpcmV0dXJuIFk7RTw8'@;
put 'PTcsRXw9MTI3Jll9fWVsc2UgRSY9MzE7cmV0dXJue2NsczpqLHByaW1pdGl2ZTpWLHRhZzpFLHRhZ1N0cjpNLnRhZ1tFXX19ZnVuY3Rpb24gSyhJLGssRSl7bGV0IGo9SS5yZWFkVUludDgoRSk7aWYoSS5pc0Vycm9yKGopKXJldHVybiBqO2lmKCFrJiYxMjg9PT1qKXJldHVybiBudWxsO2lm'@;
put 'KCEoMTI4JmopKXJldHVybiBqO2NvbnN0IFY9MTI3Jmo7aWYoVj40KXJldHVybiBJLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7aj0wO2ZvcihsZXQgQj0wO0I8VjtCKyspe2o8PD04O2NvbnN0IFk9SS5yZWFkVUludDgoRSk7aWYoSS5pc0Vycm9yKFkpKXJldHVybiBZO2p8'@;
put 'PVl9cmV0dXJuIGp9YXQuZXhwb3J0cz1PLE8ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihrLEUpe3JldHVybiBtLmlzRGVjb2RlckJ1ZmZlcihrKXx8KGs9bmV3IG0oayxFKSksdGhpcy50cmVlLl9kZWNvZGUoayxFKX0sYWUoUixsZSksUi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24o'@;
put 'ayxFLGope2lmKGsuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IFY9ay5zYXZlKCksQj16KGssJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrRSsnIicpO3JldHVybiBrLmlzRXJyb3IoQik/Qjooay5yZXN0b3JlKFYpLEIudGFnPT09RXx8Qi50YWdTdHI9PT1FfHxCLnRhZ1N0cisib2YiPT09RXx8'@;
put 'ail9LFIucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oayxFLGope2NvbnN0IFY9eihrLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytFKyciJyk7aWYoay5pc0Vycm9yKFYpKXJldHVybiBWO2xldCBCPUsoayxWLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicr'@;
put 'RSsnIicpO2lmKGsuaXNFcnJvcihCKSlyZXR1cm4gQjtpZighaiYmVi50YWchPT1FJiZWLnRhZ1N0ciE9PUUmJlYudGFnU3RyKyJvZiIhPT1FKXJldHVybiBrLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytFKyciJyk7aWYoVi5wcmltaXRpdmV8fG51bGwhPT1CKXJldHVybiBrLnNr'@;
put 'aXAoQiwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0UrJyInKTtjb25zdCBZPWsuc2F2ZSgpLFg9dGhpcy5fc2tpcFVudGlsRW5kKGssJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIGsuaXNFcnJvcihYKT9YOihCPWsu'@;
put 'b2Zmc2V0LVkub2Zmc2V0LGsucmVzdG9yZShZKSxrLnNraXAoQiwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0UrJyInKSl9LFIucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oayxFKXtmb3IoOzspe2NvbnN0IGo9eihrLEUpO2lmKGsuaXNFcnJvcihqKSlyZXR1cm4gajtj'@;
put 'b25zdCBWPUsoayxqLnByaW1pdGl2ZSxFKTtpZihrLmlzRXJyb3IoVikpcmV0dXJuIFY7bGV0IEI7aWYoQj1qLnByaW1pdGl2ZXx8bnVsbCE9PVY/ay5za2lwKFYpOnRoaXMuX3NraXBVbnRpbEVuZChrLEUpLGsuaXNFcnJvcihCKSlyZXR1cm4gQjtpZigiZW5kIj09PWoudGFnU3RyKWJyZWFr'@;
put 'fX0sUi5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oayxFLGosVil7Y29uc3QgQj1bXTtmb3IoOyFrLmlzRW1wdHkoKTspe2NvbnN0IFk9dGhpcy5fcGVla1RhZyhrLCJlbmQiKTtpZihrLmlzRXJyb3IoWSkpcmV0dXJuIFk7Y29uc3QgWD1qLmRlY29kZShrLCJkZXIiLFYpO2lmKGsu'@;
put 'aXNFcnJvcihYKSYmWSlicmVhaztCLnB1c2goWCl9cmV0dXJuIEJ9LFIucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oayxFKXtpZigiYml0c3RyIj09PUUpe2NvbnN0IGo9ay5yZWFkVUludDgoKTtyZXR1cm4gay5pc0Vycm9yKGopP2o6e3VudXNlZDpqLGRhdGE6ay5yYXcoKX19aWYo'@;
put 'ImJtcHN0ciI9PT1FKXtjb25zdCBqPWsucmF3KCk7aWYoai5sZW5ndGglMj09MSlyZXR1cm4gay5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtsZXQgVj0iIjtmb3IobGV0IEI9MDtCPGoubGVuZ3RoLzI7QisrKVYrPVN0cmluZy5mcm9t'@;
put 'Q2hhckNvZGUoai5yZWFkVUludDE2QkUoMipCKSk7cmV0dXJuIFZ9aWYoIm51bXN0ciI9PT1FKXtjb25zdCBqPWsucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGopP2o6ay5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBv'@;
put 'cnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1FKXJldHVybiBrLnJhdygpO2lmKCJvYmpEZXNjIj09PUUpcmV0dXJuIGsucmF3KCk7aWYoInByaW50c3RyIj09PUUpe2NvbnN0IGo9ay5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihqKT9qOmsu'@;
put 'ZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoRSk/ay5yYXcoKS50b1N0cmluZygpOmsuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0UrIiB1bnN1cHBvcnRlZCIpfSxSLnBy'@;
put 'b3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oayxFLGope2xldCBWO2NvbnN0IEI9W107bGV0IFk9MCxYPTA7Zm9yKDshay5pc0VtcHR5KCk7KVg9ay5yZWFkVUludDgoKSxZPDw9NyxZfD0xMjcmWCwxMjgmWHx8KEIucHVzaChZKSxZPTApO2lmKDEyOCZYJiZCLnB1c2goWSksVj1qP0I6'@;
put 'W0JbMF0vNDB8MCxCWzBdJTQwXS5jb25jYXQoQi5zbGljZSgxKSksRSl7bGV0IGVlPUVbVi5qb2luKCIgIildO3ZvaWQgMD09PWVlJiYoZWU9RVtWLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWVlJiYoVj1lZSl9cmV0dXJuIFZ9LFIucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKGssRSl7'@;
put 'Y29uc3Qgaj1rLnJhdygpLnRvU3RyaW5nKCk7bGV0IFYsQixZLFgsVSxxO2lmKCJnZW50aW1lIj09PUUpVj0wfGouc2xpY2UoMCw0KSxCPTB8ai5zbGljZSg0LDYpLFk9MHxqLnNsaWNlKDYsOCksWD0wfGouc2xpY2UoOCwxMCksVT0wfGouc2xpY2UoMTAsMTIpLHE9MHxqLnNsaWNlKDEyLDE0'@;
put 'KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUUpcmV0dXJuIGsuZXJyb3IoIkRlY29kaW5nICIrRSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtWPTB8ai5zbGljZSgwLDIpLEI9MHxqLnNsaWNlKDIsNCksWT0wfGouc2xpY2UoNCw2KSxYPTB8ai5zbGljZSg2LDgpLFU9MHxqLnNsaWNlKDgs'@;
put 'MTApLHE9MHxqLnNsaWNlKDEwLDEyKSxWPVY8NzA/MmUzK1Y6MTkwMCtWfXJldHVybiBEYXRlLlVUQyhWLEItMSxZLFgsVSxxLDApfSxSLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxSLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihrKXtjb25z'@;
put 'dCBFPWsucmVhZFVJbnQ4KCk7cmV0dXJuIGsuaXNFcnJvcihFKT9FOjAhPT1FfSxSLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj1rLnJhdygpO2xldCBWPW5ldyB4KGopO3JldHVybiBFJiYoVj1FW1YudG9TdHJpbmcoMTApXXx8ViksVn0sUi5wcm90b3R5cGUu'@;
put 'X3VzZT1mdW5jdGlvbihrLEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBrJiYoaz1rKEUpKSxrLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sNzEzMDE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUllO2FlLmRlcj1GKDk2ODM1KSxhZS5wZW09RigyMjA4KX0sMjIwODoo'@;
put 'YXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDI0MTc5KS5CdWZmZXIsbT1GKDk2ODM1KTtmdW5jdGlvbiBsZShNKXttLmNhbGwodGhpcyxNKSx0aGlzLmVuYz0icGVtIn1hZShsZSxtKSxhdC5leHBvcnRzPWxlLGxlLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rp'@;
put 'b24oTyxSKXtjb25zdCB6PU8udG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxLPVIubGFiZWwudG9VcHBlckNhc2UoKSxJPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLztsZXQgaz0tMSxFPS0xO2ZvcihsZXQgQj0wO0I8ei5sZW5ndGg7QisrKXtjb25zdCBZPXpbQl0ubWF0'@;
put 'Y2goSSk7aWYobnVsbCE9PVkmJllbMl09PT1LKXtpZigtMSE9PWspe2lmKCJFTkQiIT09WVsxXSlicmVhaztFPUI7YnJlYWt9aWYoIkJFR0lOIiE9PVlbMV0pYnJlYWs7az1CfX1pZigtMT09PWt8fC0xPT09RSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIr'@;
put 'Syk7Y29uc3Qgaj16LnNsaWNlKGsrMSxFKS5qb2luKCIiKTtqLnJlcGxhY2UoL1teYS16MC05Ky89XSsvZ2ksIiIpO2NvbnN0IFY9eC5mcm9tKGosImJhc2U2NCIpO3JldHVybiBtLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLFYsUil9fSw2OTEzMzooYXQsSWUsRik9PnsidXNlIHN0cmlj'@;
put 'dCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDI0MTc5KS5CdWZmZXIsbT1GKDU4NTMzKSxsZT1GKDY1MDg2KTtmdW5jdGlvbiBNKEspe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1LLm5hbWUsdGhpcy5lbnRpdHk9Syx0aGlzLnRyZWU9bmV3IE8sdGhpcy50cmVlLl9pbml0KEsuYm9keSl9ZnVu'@;
put 'Y3Rpb24gTyhLKXttLmNhbGwodGhpcywiZGVyIixLKX1mdW5jdGlvbiBSKEspe3JldHVybiBLPDEwPyIwIitLOkt9YXQuZXhwb3J0cz1NLE0ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihJLGspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShJLGspLmpvaW4oKX0sYWUoTyxtKSxPLnByb3Rv'@;
put 'dHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKEksayxFLGope2NvbnN0IFY9ZnVuY3Rpb24geihLLEksayxFKXtsZXQgajtpZigic2Vxb2YiPT09Sz9LPSJzZXEiOiJzZXRvZiI9PT1LJiYoSz0ic2V0IiksbGUudGFnQnlOYW1lLmhhc093blByb3BlcnR5KEspKWo9bGUudGFnQnlOYW1l'@;
put 'W0tdO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBLfHwoMHxLKSE9PUspcmV0dXJuIEUuZXJyb3IoIlVua25vd24gdGFnOiAiK0spO2o9S31yZXR1cm4gaj49MzE/RS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEl8fChqfD0zMiksanw9bGUudGFnQ2xh'@;
put 'c3NCeU5hbWVba3x8InVuaXZlcnNhbCJdPDw2LGopfShJLGssRSx0aGlzLnJlcG9ydGVyKTtpZihqLmxlbmd0aDwxMjgpe2NvbnN0IFg9eC5hbGxvYygyKTtyZXR1cm4gWFswXT1WLFhbMV09ai5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbWCxqXSl9bGV0IEI9MTtmb3IobGV0'@;
put 'IFg9ai5sZW5ndGg7WD49MjU2O1g+Pj04KUIrKztjb25zdCBZPXguYWxsb2MoMitCKTtZWzBdPVYsWVsxXT0xMjh8Qjtmb3IobGV0IFg9MStCLFU9ai5sZW5ndGg7VT4wO1gtLSxVPj49OClZW1hdPTI1NSZVO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtZLGpdKX0sTy5wcm90'@;
put 'b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihJLGspe2lmKCJiaXRzdHIiPT09aylyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxJLnVudXNlZCxJLmRhdGFdKTtpZigiYm1wc3RyIj09PWspe2NvbnN0IEU9eC5hbGxvYygyKkkubGVuZ3RoKTtmb3IobGV0IGo9MDtqPEkubGVu'@;
put 'Z3RoO2orKylFLndyaXRlVUludDE2QkUoSS5jaGFyQ29kZUF0KGopLDIqaik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSl9cmV0dXJuIm51bXN0ciI9PT1rP3RoaXMuX2lzTnVtc3RyKEkpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSSk6dGhpcy5yZXBvcnRlci5lcnJv'@;
put 'cigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09az90aGlzLl9pc1ByaW50c3RyKEkpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSSk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Yg'@;
put 'c3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwg'@;
put 'Y29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChrKXx8Im9iakRlc2MiPT09az90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEkpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK2srIiB1bnN1cHBvcnRlZCIpfSxPLnBy'@;
put 'b3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oSSxrLEUpe2lmKCJzdHJpbmciPT10eXBlb2YgSSl7aWYoIWspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighay5oYXNPd25Qcm9wZXJ0eShJKSly'@;
put 'ZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtJPWtbSV0uc3BsaXQoL1tccy5dKy9nKTtmb3IobGV0IFk9MDtZPEkubGVuZ3RoO1krKylJW1ldfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShJKSl7ST1JLnNsaWNlKCk7Zm9yKGxldCBZ'@;
put 'PTA7WTxJLmxlbmd0aDtZKyspSVtZXXw9MH1pZighQXJyYXkuaXNBcnJheShJKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KEkpKTtpZighRSl7aWYoSVsxXT49NDApcmV0'@;
put 'dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0kuc3BsaWNlKDAsMiw0MCpJWzBdK0lbMV0pfWxldCBqPTA7Zm9yKGxldCBZPTA7WTxJLmxlbmd0aDtZKyspe2xldCBYPUlbWV07Zm9yKGorKztYPj0xMjg7WD4+PTcpaisrfWNvbnN0IFY9eC5h'@;
put 'bGxvYyhqKTtsZXQgQj1WLmxlbmd0aC0xO2ZvcihsZXQgWT1JLmxlbmd0aC0xO1k+PTA7WS0tKXtsZXQgWD1JW1ldO2ZvcihWW0ItLV09MTI3Jlg7KFg+Pj03KT4wOylWW0ItLV09MTI4fDEyNyZYfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFYpfSxPLnByb3RvdHlwZS5fZW5j'@;
put 'b2RlVGltZT1mdW5jdGlvbihJLGspe2xldCBFO2NvbnN0IGo9bmV3IERhdGUoSSk7cmV0dXJuImdlbnRpbWUiPT09az9FPVtSKGouZ2V0VVRDRnVsbFllYXIoKSksUihqLmdldFVUQ01vbnRoKCkrMSksUihqLmdldFVUQ0RhdGUoKSksUihqLmdldFVUQ0hvdXJzKCkpLFIoai5nZXRVVENNaW51'@;
put 'dGVzKCkpLFIoai5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09az9FPVtSKGouZ2V0VVRDRnVsbFllYXIoKSUxMDApLFIoai5nZXRVVENNb250aCgpKzEpLFIoai5nZXRVVENEYXRlKCkpLFIoai5nZXRVVENIb3VycygpKSxSKGouZ2V0VVRDTWludXRlcygpKSxS'@;
put 'KGouZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIraysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoRSwib2N0c3RyIil9LE8ucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxPLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKEksayl7aWYoInN0cmluZyI9PXR5cGVvZiBJKXtpZighaylyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFs'@;
put 'dWVzIG1hcCIpO2lmKCFrLmhhc093blByb3BlcnR5KEkpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShJKSk7ST1rW0ldfWlmKCJudW1iZXIiIT10eXBlb2YgSSYmIXguaXNCdWZmZXIoSSkpe2NvbnN0IFY9'@;
put 'SS50b0FycmF5KCk7IUkuc2lnbiYmMTI4JlZbMF0mJlYudW5zaGlmdCgwKSxJPXguZnJvbShWKX1pZih4LmlzQnVmZmVyKEkpKXtsZXQgVj1JLmxlbmd0aDswPT09SS5sZW5ndGgmJlYrKztjb25zdCBCPXguYWxsb2MoVik7cmV0dXJuIEkuY29weShCKSwwPT09SS5sZW5ndGgmJihCWzBdPTAp'@;
put 'LHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQil9aWYoSTwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSSk7aWYoSTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsSV0pO2xldCBFPTE7Zm9yKGxldCBWPUk7Vj49MjU2O1Y+Pj04KUUrKztjb25z'@;
put 'dCBqPW5ldyBBcnJheShFKTtmb3IobGV0IFY9ai5sZW5ndGgtMTtWPj0wO1YtLSlqW1ZdPTI1NSZJLEk+Pj04O3JldHVybiAxMjgmalswXSYmai51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoeC5mcm9tKGopKX0sTy5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24o'@;
put 'SSl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoST8yNTU6MCl9LE8ucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oSSxrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSSYmKEk9SShrKSksSS5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sTy5wcm90b3R5cGUuX3NraXBEZWZhdWx0'@;
put 'PWZ1bmN0aW9uKEksayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgVjtpZihudWxsPT09ai5kZWZhdWx0KXJldHVybiExO2NvbnN0IEI9SS5qb2luKCk7aWYodm9pZCAwPT09ai5kZWZhdWx0QnVmZmVyJiYoai5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKGouZGVmYXVs'@;
put 'dCxrLEUpLmpvaW4oKSksQi5sZW5ndGghPT1qLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihWPTA7VjxCLmxlbmd0aDtWKyspaWYoQltWXSE9PWouZGVmYXVsdEJ1ZmZlcltWXSlyZXR1cm4hMTtyZXR1cm4hMH19LDIzNjkzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25z'@;
put 'dCBhZT1JZTthZS5kZXI9Rig2OTEzMyksYWUucGVtPUYoNzkwMCl9LDc5MDA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9Rig2OTEzMyk7ZnVuY3Rpb24gbShsZSl7eC5jYWxsKHRoaXMsbGUpLHRoaXMuZW5jPSJwZW0ifWFlKG0seCksYXQuZXhwb3J0cz1t'@;
put 'LG0ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihNLE8pe2NvbnN0IHo9eC5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxNKS50b1N0cmluZygiYmFzZTY0IiksSz1bIi0tLS0tQkVHSU4gIitPLmxhYmVsKyItLS0tLSJdO2ZvcihsZXQgST0wO0k8ei5sZW5ndGg7SSs9NjQpSy5wdXNoKHou'@;
put 'c2xpY2UoSSxJKzY0KSk7cmV0dXJuIEsucHVzaCgiLS0tLS1FTkQgIitPLmxhYmVsKyItLS0tLSIpLEsuam9pbigiXG4iKX19LDUwNDc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8'@;
put 'fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihH'@;
put 'KSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5'@;
put 'cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDgwOTUwKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJD'@;
put 'b2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgu'@;
put 'bWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5'@;
put 'cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlw'@;
put 'ZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTIm'@;
put 'JkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMu'@;
put 'X2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3'@;
put 'MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlz'@;
put 'Ll9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVu'@;
put 'Z3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlz'@;
put 'LndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29y'@;
put 'ZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxI'@;
put 'KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+'@;
put 'PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29y'@;
put 'ZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3'@;
put 'MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRo'@;
put 'aXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90'@;
put 'eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5y'@;
put 'ZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlz'@;
put 'fSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09'@;
put 'dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwi'@;
put 'MDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2'@;
put 'NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0'@;
put 'MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdh'@;
put 'dGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYs'@;
put 'Sj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8'@;
put 'Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0'@;
put 'aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZv'@;
put 'cigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihK'@;
put 'Lm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4g'@;
put 'MCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53'@;
put 'b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdh'@;
put 'dGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9B'@;
put 'cnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0'@;
put 'aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1'@;
put 'c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGgu'@;
put 'Y2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0s'@;
put 'TS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyss'@;
put 'SH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJl'@;
put 'dHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMu'@;
put 'Yml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3Ru'@;
put 'KGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90'@;
put 'b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7'@;
put 'RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90'@;
put 'eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6'@;
put 'Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlz'@;
put 'Lmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5s'@;
put 'ZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1'@;
put 'eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7Tisr'@;
put 'KXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54'@;
put 'b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6'@;
put 'Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29y'@;
put 'ZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnBy'@;
put 'b3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3Ry'@;
put 'aXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlz'@;
put 'Lm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7Qysr'@;
put 'KXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1I'@;
put 'Lmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3Jl'@;
put 'dHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEs'@;
put 'RCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9'@;
put 'MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMu'@;
put 'bGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAh'@;
put 'PT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0'@;
put 'aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3Jk'@;
put 'cyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLFFlPTB8Tls0XSxsdD04'@;
put 'MTkxJlFlLFBlPVFlPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLG90PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZN'@;
put 'dCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9'@;
put 'WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLFF0PTB8Z1s2XSxEdD04MTkxJlF0LHB0PVF0Pj4+MTMsWXQ9MHxnWzddLEluPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+'@;
put 'MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFBuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkr'@;
put 'KHA+Pj4xMyl8MCkrKFBuPj4+MjYpfDAsUG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGgu'@;
put 'aW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0'@;
put 'KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01h'@;
put 'dGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwLHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGgu'@;
put 'aW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxV'@;
put 'dCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStN'@;
put 'YXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUs'@;
put 'ZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditN'@;
put 'YXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGgu'@;
put 'aW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxV'@;
put 'dCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3'@;
put 'PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStN'@;
put 'YXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGplLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLEluKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKG90LENuKSxwPShwPU1hdGguaW11bChvdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGgu'@;
put 'aW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVs'@;
put 'KGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0'@;
put 'KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKG90LFduKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01h'@;
put 'dGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUs'@;
put 'SXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGgu'@;
put 'aW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChvdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGZ0KXwwKStNYXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'TWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01h'@;
put 'dGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4y'@;
put 'Nil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKG90LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qsd3QpfDApK01hdGguaW11bCh1dCxobil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXww'@;
put 'KStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMr'@;
put 'KHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmlt'@;
put 'dWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKG90LF90KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9'@;
put 'ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01h'@;
put 'dGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxJbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5p'@;
put 'bXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChvdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKG90LEl0KXww'@;
put 'KStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1w'@;
put 'K01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMr'@;
put 'KHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmlt'@;
put 'dWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKG90LER0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9'@;
put 'ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01h'@;
put 'dGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4y'@;
put 'Nil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKG90LEluKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsenQpfDApK01hdGguaW11bCh1dCxJbil8'@;
put 'MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGgu'@;
put 'aW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChvdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKG90LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygo'@;
put 'ODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNu'@;
put 'KSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwob3QsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChvdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0'@;
put 'KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkp'@;
put 'KyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPVBuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENb'@;
put 'MTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJv'@;
put 'dG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5u'@;
put 'ZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3Ro'@;
put 'KzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxI'@;
put 'PUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEs'@;
put 'Tj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxV'@;
put 'LnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFy'@;
put 'IFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxP'@;
put 'ZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1'@;
put 'ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7'@;
put 'TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQo'@;
put 'YlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkx'@;
put 'JihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09'@;
put 'MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShO'@;
put 'KSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxD'@;
put 'LHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0'@;
put 'aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVu'@;
put 'Y3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRo'@;
put 'aXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zv'@;
put 'cih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMu'@;
put 'd29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tE'@;
put 'LzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7Tisr'@;
put 'LGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIg'@;
put 'Qz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3Ro'@;
put 'LTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2'@;
put 'ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEw'@;
put 'ODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsr'@;
put 'KXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+'@;
put 'Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlz'@;
put 'Lm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNo'@;
put 'cm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2'@;
put 'YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRo'@;
put 'aXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2'@;
put 'M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2'@;
put 'NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiks'@;
put 'dGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQs'@;
put 'RD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2'@;
put 'NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08'@;
put 'MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0u'@;
put 'cHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtn'@;
put 'Kyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hd'@;
put 'KStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1'@;
put 'cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1'@;
put 'c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3dd'@;
put 'PTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0'@;
put 'aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25l'@;
put 'XT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5l'@;
put 'dyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7'@;
put 'ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9k'@;
put 'KGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYi'@;
put 'PT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dv'@;
put 'cmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1v'@;
put 'ZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9k'@;
put 'LmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShi'@;
put 'PD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxl'@;
put 'bmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3Rv'@;
put 'dHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgx'@;
put 'KSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZv'@;
put 'cihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNo'@;
put 'cm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0'@;
put 'dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBO'@;
put 'PW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1'@;
put 'c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQp'@;
put 'LGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhp'@;
put 'cy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTsp'@;
put 'SC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYiku'@;
put 'YS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4g'@;
put 'dGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zv'@;
put 'cih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBl'@;
put 'LmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1'@;
put 'cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0u'@;
put 'cHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwt'@;
put 'RDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxi'@;
put 'LndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnBy'@;
put 'b3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUu'@;
put 'bHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rp'@;
put 'b24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJl'@;
put 'ZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBl'@;
put 'LmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90'@;
put 'eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90'@;
put 'eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5'@;
put 'IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy'@;
put 'aWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0s'@;
put 'TS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5v'@;
put 'cm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhp'@;
put 'cy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9u'@;
put 'IHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUu'@;
put 'Y2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5y'@;
put 'aW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVu'@;
put 'Y3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhE'@;
put 'KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6'@;
put 'RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQp'@;
put 'e2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29y'@;
put 'ZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmlt'@;
put 'dWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcx'@;
put 'MDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0w'@;
put 'LEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVti'@;
put 'XTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09'@;
put 'RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihi'@;
put 'LEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9'@;
put 'LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3Zl'@;
put 'cmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhp'@;
put 'cy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVy'@;
put 'biB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMu'@;
put 'X3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9'@;
put 'ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4o'@;
put 'MSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcg'@;
put 'TSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBm'@;
put 'ZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90'@;
put 'b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSly'@;
put 'ZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7'@;
put 'dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHww'@;
put 'IT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xv'@;
put 'bmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYo'@;
put 'Yi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5z'@;
put 'aGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJu'@;
put 'IG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+'@;
put 'PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9'@;
put 'fShhdD1GLm5tZChhdCksdGhpcyl9LDM2MDcyOihhdCxJZSk9PnshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Zm9yKHZhciBGPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixhZT1uZXcgVWludDhBcnJheSgyNTYpLHg9'@;
put 'MDt4PDY0O3grKylhZVtGLmNoYXJDb2RlQXQoeCldPXg7SWUuYz1mdW5jdGlvbihtKXt2YXIgTSxsZT1uZXcgVWludDhBcnJheShtKSxPPWxlLmxlbmd0aCxSPSIiO2ZvcihNPTA7TTxPO00rPTMpUis9RltsZVtNXT4+Ml0sUis9RlsoMyZsZVtNXSk8PDR8bGVbTSsxXT4+NF0sUis9RlsoMTUm'@;
put 'bGVbTSsxXSk8PDJ8bGVbTSsyXT4+Nl0sUis9Rls2MyZsZVtNKzJdXTtyZXR1cm4gTyUzPT0yP1I9Ui5zdWJzdHJpbmcoMCxSLmxlbmd0aC0xKSsiPSI6TyUzPT0xJiYoUj1SLnN1YnN0cmluZygwLFIubGVuZ3RoLTIpKyI9PSIpLFJ9LEllLko9ZnVuY3Rpb24obSl7dmFyIE8seixLLEksayxs'@;
put 'ZT0uNzUqbS5sZW5ndGgsTT1tLmxlbmd0aCxSPTA7Ij0iPT09bVttLmxlbmd0aC0xXSYmKGxlLS0sIj0iPT09bVttLmxlbmd0aC0yXSYmbGUtLSk7dmFyIEU9bmV3IEFycmF5QnVmZmVyKGxlKSxqPW5ldyBVaW50OEFycmF5KEUpO2ZvcihPPTA7TzxNO08rPTQpej1hZVttLmNoYXJDb2RlQXQo'@;
put 'TyldLEs9YWVbbS5jaGFyQ29kZUF0KE8rMSldLEk9YWVbbS5jaGFyQ29kZUF0KE8rMildLGs9YWVbbS5jaGFyQ29kZUF0KE8rMyldLGpbUisrXT16PDwyfEs+PjQsaltSKytdPSgxNSZLKTw8NHxJPj4yLGpbUisrXT0oMyZJKTw8Nnw2MyZrO3JldHVybiBFfX0oKX0sOTkxOTooYXQsSWUpPT57'@;
put 'InVzZSBzdHJpY3QiO0llLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gUihqKXt2YXIgVj1PKGopLFk9VlsxXTtyZXR1cm4gMyooVlswXStZKS80LVl9LEllLnRvQnl0ZUFycmF5PWZ1bmN0aW9uIEsoail7dmFyIFYsdGUsQj1PKGopLFk9QlswXSxYPUJbMV0sVT1uZXcgeChmdW5jdGlvbiB6KGosVixC'@;
put 'KXtyZXR1cm4gMyooVitCKS80LUJ9KDAsWSxYKSkscT0wLGVlPVg+MD9ZLTQ6WTtmb3IodGU9MDt0ZTxlZTt0ZSs9NClWPWFlW2ouY2hhckNvZGVBdCh0ZSldPDwxOHxhZVtqLmNoYXJDb2RlQXQodGUrMSldPDwxMnxhZVtqLmNoYXJDb2RlQXQodGUrMildPDw2fGFlW2ouY2hhckNvZGVBdCh0'@;
put 'ZSszKV0sVVtxKytdPVY+PjE2JjI1NSxVW3ErK109Vj4+OCYyNTUsVVtxKytdPTI1NSZWO3JldHVybiAyPT09WCYmKFY9YWVbai5jaGFyQ29kZUF0KHRlKV08PDJ8YWVbai5jaGFyQ29kZUF0KHRlKzEpXT4+NCxVW3ErK109MjU1JlYpLDE9PT1YJiYoVj1hZVtqLmNoYXJDb2RlQXQodGUpXTw8'@;
put 'MTB8YWVbai5jaGFyQ29kZUF0KHRlKzEpXTw8NHxhZVtqLmNoYXJDb2RlQXQodGUrMildPj4yLFVbcSsrXT1WPj44JjI1NSxVW3ErK109MjU1JlYpLFV9LEllLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gRShqKXtmb3IodmFyIFYsQj1qLmxlbmd0aCxZPUIlMyxYPVtdLFU9MTYzODMscT0wLGVl'@;
put 'PUItWTtxPGVlO3ErPVUpWC5wdXNoKGsoaixxLHErVT5lZT9lZTpxK1UpKTtyZXR1cm4gMT09PVk/WC5wdXNoKEZbKFY9altCLTFdKT4+Ml0rRltWPDw0JjYzXSsiPT0iKToyPT09WSYmWC5wdXNoKEZbKFY9KGpbQi0yXTw8OCkraltCLTFdKT4+MTBdK0ZbVj4+NCY2M10rRltWPDwyJjYzXSsi'@;
put 'PSIpLFguam9pbigiIil9O2Zvcih2YXIgRj1bXSxhZT1bXSx4PXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5OkFycmF5LG09IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGxlPTA7bGU8NjQ7KytsZSlGW2xl'@;
put 'XT1tW2xlXSxhZVttLmNoYXJDb2RlQXQobGUpXT1sZTtmdW5jdGlvbiBPKGope3ZhciBWPWoubGVuZ3RoO2lmKFYlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBCPWouaW5kZXhPZigiPSIpO3JldHVybi0x'@;
put 'PT09QiYmKEI9ViksW0IsQj09PVY/MDo0LUIlNF19ZnVuY3Rpb24gSShqKXtyZXR1cm4gRltqPj4xOCY2M10rRltqPj4xMiY2M10rRltqPj42JjYzXStGWzYzJmpdfWZ1bmN0aW9uIGsoaixWLEIpe2Zvcih2YXIgWD1bXSxVPVY7VTxCO1UrPTMpWC5wdXNoKEkoKGpbVV08PDE2JjE2NzExNjgw'@;
put 'KSsoaltVKzFdPDw4JjY1MjgwKSsoMjU1JmpbVSsyXSkpKTtyZXR1cm4gWC5qb2luKCIiKX1hZVsiLSIuY2hhckNvZGVBdCgwKV09NjIsYWVbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSw2MjY2MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u'@;
put 'IG0oSCxOKXtpZighSCl0aHJvdyBuZXcgRXJyb3IoTnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShILE4pe0guc3VwZXJfPU47dmFyIGc9ZnVuY3Rpb24oKXt9O2cucHJvdG90eXBlPU4ucHJvdG90eXBlLEgucHJvdG90eXBlPW5ldyBnLEgucHJvdG90eXBlLmNvbnN0cnVjdG9y'@;
put 'PUh9ZnVuY3Rpb24gTShILE4sZyl7aWYoTS5pc0JOKEgpKXJldHVybiBIO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1IJiYoKCJsZSI9PT1OfHwiYmUiPT09TikmJihnPU4sTj0xMCksdGhpcy5faW5pdChIfHwwLE58'@;
put 'fDEwLGd8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoNDY2MDEpLkJ1ZmZlcn1jYXRj'@;
put 'aHt9ZnVuY3Rpb24gUihILE4pe3ZhciBnPUguY2hhckNvZGVBdChOKTtyZXR1cm4gZz49NDgmJmc8PTU3P2ctNDg6Zz49NjUmJmc8PTcwP2ctNTU6Zz49OTcmJmc8PTEwMj9nLTg3OnZvaWQgbSghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIitIKX1mdW5jdGlvbiB6KEgsTixnKXt2YXIgQz1S'@;
put 'KEgsZyk7cmV0dXJuIGctMT49TiYmKEN8PVIoSCxnLTEpPDw0KSxDfWZ1bmN0aW9uIEsoSCxOLGcsQyl7Zm9yKHZhciBTPTAsdj0wLHA9TWF0aC5taW4oSC5sZW5ndGgsZyksdz1OO3c8cDt3Kyspe3ZhciBKPUguY2hhckNvZGVBdCh3KS00ODtTKj1DLHY9Sj49NDk/Si00OSsxMDpKPj0xNz9K'@;
put 'LTE3KzEwOkosbShKPj0wJiZ2PEMsIkludmFsaWQgY2hhcmFjdGVyIiksUys9dn1yZXR1cm4gU31mdW5jdGlvbiBJKEgsTil7SC53b3Jkcz1OLndvcmRzLEgubGVuZ3RoPU4ubGVuZ3RoLEgubmVnYXRpdmU9Ti5uZWdhdGl2ZSxILnJlZD1OLnJlZH1pZihNLmlzQk49ZnVuY3Rpb24oTil7cmV0'@;
put 'dXJuIE4gaW5zdGFuY2VvZiBNfHxudWxsIT09TiYmIm9iamVjdCI9PXR5cGVvZiBOJiZOLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShOLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oTixnKXtyZXR1cm4gTi5jbXAoZyk+MD9OOmd9LE0ubWluPWZ1bmN0'@;
put 'aW9uKE4sZyl7cmV0dXJuIE4uY21wKGcpPDA/TjpnfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihOLGcsQyl7aWYoIm51bWJlciI9PXR5cGVvZiBOKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKE4sZyxDKTtpZigib2JqZWN0Ij09dHlwZW9mIE4pcmV0dXJuIHRoaXMuX2luaXRBcnJheShO'@;
put 'LGcsQyk7ImhleCI9PT1nJiYoZz0xNiksbShnPT09KDB8ZykmJmc+PTImJmc8PTM2KTt2YXIgUz0wOyItIj09PShOPU4udG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoUysrLHRoaXMubmVnYXRpdmU9MSksUzxOLmxlbmd0aCYmKDE2PT09Zz90aGlzLl9wYXJzZUhleChOLFMs'@;
put 'Qyk6KHRoaXMuX3BhcnNlQmFzZShOLGcsUyksImxlIj09PUMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxnLEMpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKE4sZyxDKXtOPDAmJih0aGlzLm5lZ2F0aXZlPTEsTj0tTiksTjw2NzEwODg2ND8odGhpcy53b3Jk'@;
put 'cz1bNjcxMDg4NjMmTl0sdGhpcy5sZW5ndGg9MSk6Tjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZOLE4vNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKE48OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmTixOLzY3MTA4ODY0'@;
put 'JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1DJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZyxDKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihOLGcsQyl7aWYobSgibnVtYmVyIj09dHlwZW9mIE4ubGVuZ3RoKSxOLmxlbmd0aDw9MClyZXR1cm4g'@;
put 'dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChOLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT0wO3ZhciB2LHAsdz0wO2lmKCJi'@;
put 'ZSI9PT1DKWZvcihTPU4ubGVuZ3RoLTEsdj0wO1M+PTA7Uy09Myl0aGlzLndvcmRzW3ZdfD0ocD1OW1NdfE5bUy0xXTw8OHxOW1MtMl08PDE2KTw8dyY2NzEwODg2Myx0aGlzLndvcmRzW3YrMV09cD4+PjI2LXcmNjcxMDg4NjMsKHcrPTI0KT49MjYmJih3LT0yNix2KyspO2Vsc2UgaWYoImxl'@;
put 'Ij09PUMpZm9yKFM9MCx2PTA7UzxOLmxlbmd0aDtTKz0zKXRoaXMud29yZHNbdl18PShwPU5bU118TltTKzFdPDw4fE5bUysyXTw8MTYpPDx3JjY3MTA4ODYzLHRoaXMud29yZHNbdisxXT1wPj4+MjYtdyY2NzEwODg2Mywodys9MjQpPj0yNiYmKHctPTI2LHYrKyk7cmV0dXJuIHRoaXMuX3N0'@;
put 'cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihOLGcsQyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChOLmxlbmd0aC1nKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT0wO3Zh'@;
put 'ciB3LHY9MCxwPTA7aWYoImJlIj09PUMpZm9yKFM9Ti5sZW5ndGgtMTtTPj1nO1MtPTIpdz16KE4sZyxTKTw8dix0aGlzLndvcmRzW3BdfD02NzEwODg2MyZ3LHY+PTE4Pyh2LT0xOCx0aGlzLndvcmRzW3ArPTFdfD13Pj4+MjYpOnYrPTg7ZWxzZSBmb3IoUz0oTi5sZW5ndGgtZyklMj09MD9n'@;
put 'KzE6ZztTPE4ubGVuZ3RoO1MrPTIpdz16KE4sZyxTKTw8dix0aGlzLndvcmRzW3BdfD02NzEwODg2MyZ3LHY+PTE4Pyh2LT0xOCx0aGlzLndvcmRzW3ArPTFdfD13Pj4+MjYpOnYrPTg7dGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihOLGcsQyl7dGhpcy53'@;
put 'b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIFM9MCx2PTE7djw9NjcxMDg4NjM7dio9ZylTKys7Uy0tLHY9di9nfDA7Zm9yKHZhciBwPU4ubGVuZ3RoLUMsdz1wJVMsSj1NYXRoLm1pbihwLHAtdykrQyxuZT0wLGRlPUM7ZGU8SjtkZSs9UyluZT1LKE4sZGUsZGUrUyxnKSx0aGlzLmlt'@;
put 'dWxuKHYpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpO2lmKDAhPT13KXt2YXIgZmU9MTtmb3IobmU9SyhOLGRlLE4ubGVuZ3RoLGcpLGRlPTA7ZGU8dztkZSsrKWZlKj1nO3RoaXMuaW11bG4oZmUpLHRoaXMud29yZHNbMF0rbmU8'@;
put 'NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpfXRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oTil7Ti53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGg7ZysrKU4ud29yZHNbZ109dGhpcy53'@;
put 'b3Jkc1tnXTtOLmxlbmd0aD10aGlzLmxlbmd0aCxOLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsTi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKE4pe0koTix0aGlzKX0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTj1uZXcgTShudWxsKTtyZXR1cm4g'@;
put 'dGhpcy5jb3B5KE4pLE59LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oTil7Zm9yKDt0aGlzLmxlbmd0aDxOOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRo'@;
put 'aXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0'@;
put 'eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e00ucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWt9Y2F0Y2h7TS5wcm90b3R5cGUuaW5zcGVjdD1rfWVsc2UgTS5wcm90b3R5cGUuaW5zcGVjdD1rO2Z1'@;
put 'bmN0aW9uIGsoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgRT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxqPVswLDAsMjUsMTYsMTIs'@;
put 'MTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFY9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4'@;
put 'MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1'@;
put 'NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWChILE4sZyl7Zy5uZWdhdGl2ZT1OLm5lZ2F0aXZlXkgubmVnYXRpdmU7dmFyIEM9SC5sZW5ndGgrTi5sZW5ndGh8MDtnLmxlbmd0aD1DLEM9Qy0xfDA7dmFyIFM9MHxILndvcmRzWzBdLHY9MHxOLndv'@;
put 'cmRzWzBdLHA9Uyp2LEo9cC82NzEwODg2NHwwO2cud29yZHNbMF09NjcxMDg4NjMmcDtmb3IodmFyIG5lPTE7bmU8QztuZSsrKXtmb3IodmFyIGRlPUo+Pj4yNixmZT02NzEwODg2MyZKLHhlPU1hdGgubWluKG5lLE4ubGVuZ3RoLTEpLExlPU1hdGgubWF4KDAsbmUtSC5sZW5ndGgrMSk7TGU8'@;
put 'PXhlO0xlKyspZGUrPShwPShTPTB8SC53b3Jkc1tuZS1MZXwwXSkqKHY9MHxOLndvcmRzW0xlXSkrZmUpLzY3MTA4ODY0fDAsZmU9NjcxMDg4NjMmcDtnLndvcmRzW25lXT0wfGZlLEo9MHxkZX1yZXR1cm4gMCE9PUo/Zy53b3Jkc1tuZV09MHxKOmcubGVuZ3RoLS0sZy5fc3RyaXAoKX1NLnBy'@;
put 'b3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihOLGcpe3ZhciBDO2lmKGc9MHxnfHwxLDE2PT09KE49Tnx8MTApfHwiaGV4Ij09PU4pe0M9IiI7Zm9yKHZhciBTPTAsdj0wLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIHc9dGhpcy53b3Jkc1twXSxKPSgxNjc3NzIxNSYodzw8U3x2KSkudG9T'@;
put 'dHJpbmcoMTYpO3Y9dz4+PjI0LVMmMTY3NzcyMTUsKFMrPTIpPj0yNiYmKFMtPTI2LHAtLSksQz0wIT09dnx8cCE9PXRoaXMubGVuZ3RoLTE/RVs2LUoubGVuZ3RoXStKK0M6SitDfWZvcigwIT09diYmKEM9di50b1N0cmluZygxNikrQyk7Qy5sZW5ndGglZyE9MDspQz0iMCIrQztyZXR1cm4g'@;
put 'MCE9PXRoaXMubmVnYXRpdmUmJihDPSItIitDKSxDfWlmKE49PT0oMHxOKSYmTj49MiYmTjw9MzYpe3ZhciBuZT1qW05dLGRlPVZbTl07Qz0iIjt2YXIgZmU9dGhpcy5jbG9uZSgpO2ZvcihmZS5uZWdhdGl2ZT0wOyFmZS5pc1plcm8oKTspe3ZhciB4ZT1mZS5tb2RybihkZSkudG9TdHJpbmco'@;
put 'Tik7Qz0oZmU9ZmUuaWRpdm4oZGUpKS5pc1plcm8oKT94ZStDOkVbbmUteGUubGVuZ3RoXSt4ZStDfWZvcih0aGlzLmlzWmVybygpJiYoQz0iMCIrQyk7Qy5sZW5ndGglZyE9MDspQz0iMCIrQztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihDPSItIitDKSxDfW0oITEsIkJhc2Ugc2hvdWxk'@;
put 'IGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Tis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP04rPTQ1'@;
put 'MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tTjpOfSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy50b1N0cmluZygxNiwyKX0sTyYmKE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoTyxOLGcpfSksTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihOLGcpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LE4sZyl9LE0u'@;
put 'cHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKE4sZyxDKXt0aGlzLl9zdHJpcCgpO3ZhciBTPXRoaXMuYnl0ZUxlbmd0aCgpLHY9Q3x8TWF0aC5tYXgoMSxTKTttKFM8PXYsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKHY+MCwiUmVxdWVzdGVkIGFycmF5'@;
put 'IGxlbmd0aCA8PSAwIik7dmFyIHA9ZnVuY3Rpb24oTixnKXtyZXR1cm4gTi5hbGxvY1Vuc2FmZT9OLmFsbG9jVW5zYWZlKGcpOm5ldyBOKGcpfShOLHYpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09Zz8iTEUiOiJCRSIpXShwLFMpLHB9LE0ucHJvdG90eXBlLl90b0FycmF5'@;
put 'TGlrZUxFPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPTAsUz0wLHY9MCxwPTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciB3PXRoaXMud29yZHNbdl08PHB8UztOW0MrK109MjU1JncsQzxOLmxlbmd0aCYmKE5bQysrXT13Pj44JjI1NSksQzxOLmxlbmd0aCYmKE5bQysrXT13Pj4xNiYyNTUpLDY9'@;
put 'PT1wPyhDPE4ubGVuZ3RoJiYoTltDKytdPXc+PjI0JjI1NSksUz0wLHA9MCk6KFM9dz4+PjI0LHArPTIpfWlmKEM8Ti5sZW5ndGgpZm9yKE5bQysrXT1TO0M8Ti5sZW5ndGg7KU5bQysrXT0wfSxNLnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz1OLmxl'@;
put 'bmd0aC0xLFM9MCx2PTAscD0wO3Y8dGhpcy5sZW5ndGg7disrKXt2YXIgdz10aGlzLndvcmRzW3ZdPDxwfFM7TltDLS1dPTI1NSZ3LEM+PTAmJihOW0MtLV09dz4+OCYyNTUpLEM+PTAmJihOW0MtLV09dz4+MTYmMjU1KSw2PT09cD8oQz49MCYmKE5bQy0tXT13Pj4yNCYyNTUpLFM9MCxwPTAp'@;
put 'OihTPXc+Pj4yNCxwKz0yKX1pZihDPj0wKWZvcihOW0MtLV09UztDPj0wOylOW0MtLV09MH0sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKE4pe3JldHVybiAzMi1NYXRoLmNsejMyKE4pfTpmdW5jdGlvbihOKXt2YXIgZz1OLEM9MDtyZXR1cm4gZz49NDA5NiYm'@;
put 'KEMrPTEzLGc+Pj49MTMpLGc+PTY0JiYoQys9NyxnPj4+PTcpLGc+PTgmJihDKz00LGc+Pj49NCksZz49MiYmKEMrPTIsZz4+Pj0yKSxDK2d9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihOKXtpZigwPT09TilyZXR1cm4gMjY7dmFyIGc9TixDPTA7cmV0dXJuIDgxOTEmZ3x8KEMr'@;
put 'PTEzLGc+Pj49MTMpLDEyNyZnfHwoQys9NyxnPj4+PTcpLDE1Jmd8fChDKz00LGc+Pj49NCksMyZnfHwoQys9MixnPj4+PTIpLDEmZ3x8QysrLEN9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBnPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFd'@;
put 'KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2d9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIE49MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBDPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZ10pO2lmKE4r'@;
put 'PUMsMjYhPT1DKWJyZWFrfXJldHVybiBOfSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oTil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCku'@;
put 'aW5vdG4oTikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy50ZXN0bihOLTEpP3RoaXMubm90bihOKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVy'@;
put 'biAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1'@;
put 'b3I9ZnVuY3Rpb24oTil7Zm9yKDt0aGlzLmxlbmd0aDxOLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZz0wO2c8Ti5sZW5ndGg7ZysrKXRoaXMud29yZHNbZ109dGhpcy53b3Jkc1tnXXxOLndvcmRzW2ddO3JldHVybiB0aGlzLl9zdHJpcCgpfSxNLnByb3Rv'@;
put 'dHlwZS5pb3I9ZnVuY3Rpb24oTil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Ti5uZWdhdGl2ZSkpLHRoaXMuaXVvcihOKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoTik6Ti5jbG9uZSgpLmlvcih0'@;
put 'aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihOKTpOLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oTil7dmFyIGc7Zz10aGlzLmxlbmd0aD5OLmxlbmd0aD9O'@;
put 'OnRoaXM7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdJk4ud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0oMD09KHRoaXMubmVn'@;
put 'YXRpdmV8Ti5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoTil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoTik6Ti5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oTil7cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChOKTpOLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKE4pe3ZhciBnLEM7dGhpcy5sZW5ndGg+Ti5sZW5ndGg/KGc9dGhpcyxDPU4pOihnPU4sQz10aGlzKTtmb3IodmFyIFM9'@;
put 'MDtTPEMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPWcud29yZHNbU11eQy53b3Jkc1tTXTtpZih0aGlzIT09Zylmb3IoO1M8Zy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Zy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9Zy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUu'@;
put 'aXhvcj1mdW5jdGlvbihOKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxOLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihOKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihOKTpOLmNsb25lKCkuaXhvcih0'@;
put 'aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKE4pOk4uY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTAp'@;
put 'O3ZhciBnPTB8TWF0aC5jZWlsKE4vMjYpLEM9TiUyNjt0aGlzLl9leHBhbmQoZyksQz4wJiZnLS07Zm9yKHZhciBTPTA7UzxnO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJn50aGlzLndvcmRzW1NdO3JldHVybiBDPjAmJih0aGlzLndvcmRzW1NdPX50aGlzLndvcmRzW1NdJjY3MTA4ODYz'@;
put 'Pj4yNi1DKSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oTil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oTixnKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIEM9Ti8yNnwwLFM9TiUyNjtyZXR1'@;
put 'cm4gdGhpcy5fZXhwYW5kKEMrMSksdGhpcy53b3Jkc1tDXT1nP3RoaXMud29yZHNbQ118MTw8Uzp0aGlzLndvcmRzW0NdJn4oMTw8UyksdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihOKXt2YXIgZyxDLFM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1OLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZz10aGlzLmlzdWIoTiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Ti5uZWdhdGl2ZSlyZXR1cm4gTi5uZWdhdGl2ZT0wLGc9dGhpcy5pc3ViKE4pLE4ubmVnYXRpdmU9MSxnLl9u'@;
put 'b3JtU2lnbigpO3RoaXMubGVuZ3RoPk4ubGVuZ3RoPyhDPXRoaXMsUz1OKTooQz1OLFM9dGhpcyk7Zm9yKHZhciB2PTAscD0wO3A8Uy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09NjcxMDg4NjMmKGc9KDB8Qy53b3Jkc1twXSkrKDB8Uy53b3Jkc1twXSkrdiksdj1nPj4+MjY7Zm9yKDswIT09'@;
put 'diYmcDxDLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyYoZz0oMHxDLndvcmRzW3BdKSt2KSx2PWc+Pj4yNjtpZih0aGlzLmxlbmd0aD1DLmxlbmd0aCwwIT09dil0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT12LHRoaXMubGVuZ3RoKys7ZWxzZSBpZihDIT09dGhpcylmb3IoO3A8'@;
put 'Qy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09Qy53b3Jkc1twXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe3ZhciBnO3JldHVybiAwIT09Ti5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KE4ubmVnYXRpdmU9MCxnPXRoaXMuc3ViKE4pLE4ubmVnYXRpdmVe'@;
put 'PTEsZyk6MD09PU4ubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZz1OLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZyk6dGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoTik6Ti5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBl'@;
put 'LmlzdWI9ZnVuY3Rpb24oTil7aWYoMCE9PU4ubmVnYXRpdmUpe04ubmVnYXRpdmU9MDt2YXIgZz10aGlzLmlhZGQoTik7cmV0dXJuIE4ubmVnYXRpdmU9MSxnLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKE4pLHRoaXMu'@;
put 'bmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYsQz10aGlzLmNtcChOKTtpZigwPT09QylyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7Qz4wPyhTPXRoaXMsdj1OKTooUz1OLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8'@;
put 'di5sZW5ndGg7dysrKXA9KGc9KDB8Uy53b3Jkc1t3XSktKDB8di53b3Jkc1t3XSkrcCk+PjI2LHRoaXMud29yZHNbd109NjcxMDg4NjMmZztmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKylwPShnPSgwfFMud29yZHNbd10pK3ApPj4yNix0aGlzLndvcmRzW3ddPTY3MTA4ODYzJmc7aWYoMD09'@;
put 'PXAmJnc8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx3KSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5'@;
put 'cGUuc3ViPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihOKX07dmFyIFU9ZnVuY3Rpb24oTixnLEMpe3ZhciBKLG5lLGRlLFM9Ti53b3Jkcyx2PWcud29yZHMscD1DLndvcmRzLHc9MCxmZT0wfFNbMF0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8U1sxXSxPZT04MTkx'@;
put 'JkZlLGplPUZlPj4+MTMsV2U9MHxTWzJdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxRZT0wfFNbM10sbHQ9ODE5MSZRZSxQZT1RZT4+PjEzLGJlPTB8U1s0XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxTWzVdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfFNbNl0sTWU9ODE5MSZodCxE'@;
put 'ZT1odD4+PjEzLHplPTB8U1s3XSxvdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxTWzhdLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfFNbOV0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8dlswXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHx2WzFdLEhuPTgxOTEmJG4sZnQ9JG4+'@;
put 'Pj4xMyxmbj0wfHZbMl0saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8dlszXSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHx2WzRdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxRdD0wfHZbNV0sRHQ9ODE5MSZRdCxwdD1RdD4+PjEzLFl0PTB8dls2XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMs'@;
put 'eW49MHx2WzddLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfHZbOF0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzLFBuPTB8dls5XSxuaT04MTkxJlBuLGxuPVBuPj4+MTM7Qy5uZWdhdGl2ZT1OLm5lZ2F0aXZlXmcubmVnYXRpdmUsQy5sZW5ndGg9MTk7dmFyIGpuPSh3KyhKPU1hdGguaW11bCh4'@;
put 'ZSxXbikpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bCh4ZSxlbikpK01hdGguaW11bChMZSxXbil8MCkpPDwxMyl8MDt3PSgoZGU9TWF0aC5pbXVsKExlLGVuKSkrKG5lPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2MyxKPU1hdGguaW11bChPZSxXbiksbmU9KG5lPU1hdGgu'@;
put 'aW11bChPZSxlbikpK01hdGguaW11bChqZSxXbil8MCxkZT1NYXRoLmltdWwoamUsZW4pO3ZhciBxcj0odysoSj1KK01hdGguaW11bCh4ZSxIbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDApKTw8MTMpfDA7dz0oKGRlPWRl'@;
put 'K01hdGguaW11bChMZSxmdCl8MCkrKG5lPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxKPU1hdGguaW11bChLZSxXbiksbmU9KG5lPU1hdGguaW11bChLZSxlbikpK01hdGguaW11bChZZSxXbil8MCxkZT1NYXRoLmltdWwoWWUsZW4pLEo9SitNYXRoLmltdWwoT2UsSG4pfDAs'@;
put 'bmU9KG5lPW5lK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLGRlPWRlK01hdGguaW11bChqZSxmdCl8MDt2YXIgZ2k9KHcrKEo9SitNYXRoLmltdWwoeGUsaG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhu'@;
put 'KXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsd3QpfDApKyhuZT4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwobHQsV24pLG5lPShuZT1NYXRoLmltdWwobHQsZW4pKStNYXRoLmltdWwoUGUsV24pfDAsZGU9TWF0aC5pbXVsKFBlLGVuKSxK'@;
put 'PUorTWF0aC5pbXVsKEtlLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCxkZT1kZStNYXRoLmltdWwoWWUsZnQpfDAsSj1KK01hdGguaW11bChPZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4p'@;
put 'fDAsZGU9ZGUrTWF0aC5pbXVsKGplLHd0KXwwO3ZhciB4cj0odysoSj1KK01hdGguaW11bCh4ZSxfdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSxOdCl8MCkrKG5l'@;
put 'Pj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2MyxKPU1hdGguaW11bChBZSxXbiksbmU9KG5lPU1hdGguaW11bChBZSxlbikpK01hdGguaW11bChUZSxXbil8MCxkZT1NYXRoLmltdWwoVGUsZW4pLEo9SitNYXRoLmltdWwobHQsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLGRlPWRlK01hdGguaW11bChQZSxmdCl8MCxKPUorTWF0aC5pbXVsKEtlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCxkZT1kZStNYXRoLmltdWwoWWUsd3QpfDAsSj1KK01hdGguaW11bChPZSxf'@;
put 'dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKGplLE50KXwwO3ZhciBVaT0odysoSj1KK01hdGguaW11bCh4ZSxydCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwo'@;
put 'TGUscnQpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSxJdCl8MCkrKG5lPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2MyxKPU1hdGguaW11bChYZSxXbiksbmU9KG5lPU1hdGguaW11bChYZSxlbikpK01hdGguaW11bChVZSxXbil8MCxkZT1NYXRoLmltdWwoVWUs'@;
put 'ZW4pLEo9SitNYXRoLmltdWwoQWUsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLGRlPWRlK01hdGguaW11bChUZSxmdCl8MCxKPUorTWF0aC5pbXVsKGx0LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQ'@;
put 'ZSxobil8MCxkZT1kZStNYXRoLmltdWwoUGUsd3QpfDAsSj1KK01hdGguaW11bChLZSxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFllLE50KXwwLEo9SitNYXRoLmltdWwoT2UscnQpfDAsbmU9KG5lPW5lK01h'@;
put 'dGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLGRlPWRlK01hdGguaW11bChqZSxJdCl8MDt2YXIgS3I9KHcrKEo9SitNYXRoLmltdWwoeGUsRHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwKSk8PDEzKXww'@;
put 'O3c9KChkZT1kZStNYXRoLmltdWwoTGUscHQpfDApKyhuZT4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoTWUsV24pLG5lPShuZT1NYXRoLmltdWwoTWUsZW4pKStNYXRoLmltdWwoRGUsV24pfDAsZGU9TWF0aC5pbXVsKERlLGVuKSxKPUorTWF0aC5pbXVs'@;
put 'KFhlLEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCxkZT1kZStNYXRoLmltdWwoVWUsZnQpfDAsSj1KK01hdGguaW11bChBZSxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsZGU9ZGUrTWF0'@;
put 'aC5pbXVsKFRlLHd0KXwwLEo9SitNYXRoLmltdWwobHQsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLGRlPWRlK01hdGguaW11bChQZSxOdCl8MCxKPUorTWF0aC5pbXVsKEtlLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsSXQpfDAp'@;
put 'K01hdGguaW11bChZZSxydCl8MCxkZT1kZStNYXRoLmltdWwoWWUsSXQpfDAsSj1KK01hdGguaW11bChPZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGplLHB0KXwwO3ZhciBubz0odysoSj1KK01hdGguaW11'@;
put 'bCh4ZSxJbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsSW4pfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSx6dCl8MCkrKG5lPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxKPU1hdGguaW11bChvdCxX'@;
put 'biksbmU9KG5lPU1hdGguaW11bChvdCxlbikpK01hdGguaW11bCh1dCxXbil8MCxkZT1NYXRoLmltdWwodXQsZW4pLEo9SitNYXRoLmltdWwoTWUsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLGRlPWRlK01hdGguaW11bChEZSxmdCl8MCxK'@;
put 'PUorTWF0aC5pbXVsKFhlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCxkZT1kZStNYXRoLmltdWwoVWUsd3QpfDAsSj1KK01hdGguaW11bChBZSxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3Qp'@;
put 'fDAsZGU9ZGUrTWF0aC5pbXVsKFRlLE50KXwwLEo9SitNYXRoLmltdWwobHQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLGRlPWRlK01hdGguaW11bChQZSxJdCl8MCxKPUorTWF0aC5pbXVsKEtlLER0KXwwLG5lPShuZT1uZStNYXRoLmlt'@;
put 'dWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoWWUscHQpfDAsSj1KK01hdGguaW11bChPZSxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKGplLHp0KXwwO3ZhciBIcj0odyso'@;
put 'Sj1KK01hdGguaW11bCh4ZSx4bil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSxzbil8MCkrKG5lPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2MyxKPU1h'@;
put 'dGguaW11bChIdCxXbiksbmU9KG5lPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCxkZT1NYXRoLmltdWwoUHQsZW4pLEo9SitNYXRoLmltdWwob3QsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLGRlPWRlK01hdGguaW11'@;
put 'bCh1dCxmdCl8MCxKPUorTWF0aC5pbXVsKE1lLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCxkZT1kZStNYXRoLmltdWwoRGUsd3QpfDAsSj1KK01hdGguaW11bChYZSxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLE50KXwwKStNYXRo'@;
put 'LmltdWwoVWUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLE50KXwwLEo9SitNYXRoLmltdWwoQWUscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLGRlPWRlK01hdGguaW11bChUZSxJdCl8MCxKPUorTWF0aC5pbXVsKGx0LER0KXwwLG5lPShu'@;
put 'ZT1uZStNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoUGUscHQpfDAsSj1KK01hdGguaW11bChLZSxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFllLHp0KXww'@;
put 'LEo9SitNYXRoLmltdWwoT2UseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLGRlPWRlK01hdGguaW11bChqZSxzbil8MDt2YXIgcWk9KHcrKEo9SitNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh4'@;
put 'ZSwkdCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoTGUsJHQpfDApKyhuZT4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24sV24pLG5lPShuZT1NYXRoLmltdWwoQ24sZW4pKStNYXRoLmltdWwoVXQsV24p'@;
put 'fDAsZGU9TWF0aC5pbXVsKFV0LGVuKSxKPUorTWF0aC5pbXVsKEh0LEhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsZnQpfDApK01hdGguaW11bChQdCxIbil8MCxkZT1kZStNYXRoLmltdWwoUHQsZnQpfDAsSj1KK01hdGguaW11bChvdCxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90'@;
put 'LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LHd0KXwwLEo9SitNYXRoLmltdWwoTWUsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLGRlPWRlK01hdGguaW11bChEZSxOdCl8MCxKPUorTWF0aC5pbXVsKFhl'@;
put 'LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCxkZT1kZStNYXRoLmltdWwoVWUsSXQpfDAsSj1KK01hdGguaW11bChBZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsZGU9ZGUrTWF0aC5p'@;
put 'bXVsKFRlLHB0KXwwLEo9SitNYXRoLmltdWwobHQsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLGRlPWRlK01hdGguaW11bChQZSx6dCl8MCxKPUorTWF0aC5pbXVsKEtlLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2Usc24pfDApK01h'@;
put 'dGguaW11bChZZSx4bil8MCxkZT1kZStNYXRoLmltdWwoWWUsc24pfDAsSj1KK01hdGguaW11bChPZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKGplLCR0KXwwO3ZhciBKaT0odysoSj1KK01hdGguaW11bCh4'@;
put 'ZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLGxuKXwwKStNYXRoLmltdWwoTGUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSxsbil8MCkrKG5lPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2MyxKPU1hdGguaW11bChDbixIbiks'@;
put 'bmU9KG5lPU1hdGguaW11bChDbixmdCkpK01hdGguaW11bChVdCxIbil8MCxkZT1NYXRoLmltdWwoVXQsZnQpLEo9SitNYXRoLmltdWwoSHQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCx3dCl8MCkrTWF0aC5pbXVsKFB0LGhuKXwwLGRlPWRlK01hdGguaW11bChQdCx3dCl8MCxKPUor'@;
put 'TWF0aC5pbXVsKG90LF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCxkZT1kZStNYXRoLmltdWwodXQsTnQpfDAsSj1KK01hdGguaW11bChNZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAs'@;
put 'ZGU9ZGUrTWF0aC5pbXVsKERlLEl0KXwwLEo9SitNYXRoLmltdWwoWGUsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLGRlPWRlK01hdGguaW11bChVZSxwdCl8MCxKPUorTWF0aC5pbXVsKEFlLEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'QWUsenQpfDApK01hdGguaW11bChUZSxJbil8MCxkZT1kZStNYXRoLmltdWwoVGUsenQpfDAsSj1KK01hdGguaW11bChsdCx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHNuKXwwLEo9SitNYXRoLmltdWwo'@;
put 'S2UsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwLGRlPWRlK01hdGguaW11bChZZSwkdCl8MDt2YXIgYW89KHcrKEo9SitNYXRoLmltdWwoT2UsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChPZSxsbil8MCkrTWF0aC5p'@;
put 'bXVsKGplLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoamUsbG4pfDApKyhuZT4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24saG4pLG5lPShuZT1NYXRoLmltdWwoQ24sd3QpKStNYXRoLmltdWwoVXQsaG4pfDAsZGU9TWF0aC5pbXVs'@;
put 'KFV0LHd0KSxKPUorTWF0aC5pbXVsKEh0LF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsTnQpfDApK01hdGguaW11bChQdCxfdCl8MCxkZT1kZStNYXRoLmltdWwoUHQsTnQpfDAsSj1KK01hdGguaW11bChvdCxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LEl0KXwwKStNYXRoLmlt'@;
put 'dWwodXQscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LEl0KXwwLEo9SitNYXRoLmltdWwoTWUsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLGRlPWRlK01hdGguaW11bChEZSxwdCl8MCxKPUorTWF0aC5pbXVsKFhlLEluKXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCxkZT1kZStNYXRoLmltdWwoVWUsenQpfDAsSj1KK01hdGguaW11bChBZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLHNuKXwwLEo9'@;
put 'SitNYXRoLmltdWwobHQsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwLGRlPWRlK01hdGguaW11bChQZSwkdCl8MDt2YXIgcm89KHcrKEo9SitNYXRoLmltdWwoS2UsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChLZSxs'@;
put 'bil8MCkrTWF0aC5pbXVsKFllLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoWWUsbG4pfDApKyhuZT4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24sX3QpLG5lPShuZT1NYXRoLmltdWwoQ24sTnQpKStNYXRoLmltdWwoVXQsX3QpfDAs'@;
put 'ZGU9TWF0aC5pbXVsKFV0LE50KSxKPUorTWF0aC5pbXVsKEh0LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsSXQpfDApK01hdGguaW11bChQdCxydCl8MCxkZT1kZStNYXRoLmltdWwoUHQsSXQpfDAsSj1KK01hdGguaW11bChvdCxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LHB0'@;
put 'KXwwKStNYXRoLmltdWwodXQsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LHB0KXwwLEo9SitNYXRoLmltdWwoTWUsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLGRlPWRlK01hdGguaW11bChEZSx6dCl8MCxKPUorTWF0aC5pbXVsKFhlLHhu'@;
put 'KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCxkZT1kZStNYXRoLmltdWwoVWUsc24pfDAsSj1KK01hdGguaW11bChBZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVs'@;
put 'KFRlLCR0KXwwO3ZhciBpbz0odysoSj1KK01hdGguaW11bChsdCxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGx0LGxuKXwwKStNYXRoLmltdWwoUGUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChQZSxsbil8MCkrKG5lPj4+MTMpfDApKyhpbz4+PjI2'@;
put 'KXwwLGlvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixydCksbmU9KG5lPU1hdGguaW11bChDbixJdCkpK01hdGguaW11bChVdCxydCl8MCxkZT1NYXRoLmltdWwoVXQsSXQpLEo9SitNYXRoLmltdWwoSHQsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxwdCl8MCkrTWF0aC5pbXVsKFB0'@;
put 'LER0KXwwLGRlPWRlK01hdGguaW11bChQdCxwdCl8MCxKPUorTWF0aC5pbXVsKG90LEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsenQpfDApK01hdGguaW11bCh1dCxJbil8MCxkZT1kZStNYXRoLmltdWwodXQsenQpfDAsSj1KK01hdGguaW11bChNZSx4bil8MCxuZT0obmU9bmUrTWF0'@;
put 'aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLHNuKXwwLEo9SitNYXRoLmltdWwoWGUsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwLGRlPWRlK01hdGguaW11bChVZSwkdCl8MDt2YXIgR2k9'@;
put 'KHcrKEo9SitNYXRoLmltdWwoQWUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChBZSxsbil8MCkrTWF0aC5pbXVsKFRlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoVGUsbG4pfDApKyhuZT4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMs'@;
put 'Sj1NYXRoLmltdWwoQ24sRHQpLG5lPShuZT1NYXRoLmltdWwoQ24scHQpKStNYXRoLmltdWwoVXQsRHQpfDAsZGU9TWF0aC5pbXVsKFV0LHB0KSxKPUorTWF0aC5pbXVsKEh0LEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwoSHQsenQpfDApK01hdGguaW11bChQdCxJbil8MCxkZT1kZStNYXRo'@;
put 'LmltdWwoUHQsenQpfDAsSj1KK01hdGguaW11bChvdCx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LHNuKXwwLEo9SitNYXRoLmltdWwoTWUsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSwkdCl8MCkr'@;
put 'TWF0aC5pbXVsKERlLFJuKXwwLGRlPWRlK01hdGguaW11bChEZSwkdCl8MDt2YXIgaG89KHcrKEo9SitNYXRoLmltdWwoWGUsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChYZSxsbil8MCkrTWF0aC5pbXVsKFVlLG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmlt'@;
put 'dWwoVWUsbG4pfDApKyhuZT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24sSW4pLG5lPShuZT1NYXRoLmltdWwoQ24senQpKStNYXRoLmltdWwoVXQsSW4pfDAsZGU9TWF0aC5pbXVsKFV0LHp0KSxKPUorTWF0aC5pbXVsKEh0LHhuKXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoSHQsc24pfDApK01hdGguaW11bChQdCx4bil8MCxkZT1kZStNYXRoLmltdWwoUHQsc24pfDAsSj1KK01hdGguaW11bChvdCxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LCR0KXwwO3Zh'@;
put 'ciB5cj0odysoSj1KK01hdGguaW11bChNZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKE1lLGxuKXwwKStNYXRoLmltdWwoRGUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChEZSxsbil8MCkrKG5lPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEw'@;
put 'ODg2MyxKPU1hdGguaW11bChDbix4biksbmU9KG5lPU1hdGguaW11bChDbixzbikpK01hdGguaW11bChVdCx4bil8MCxkZT1NYXRoLmltdWwoVXQsc24pLEo9SitNYXRoLmltdWwoSHQsUm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCwkdCl8MCkrTWF0aC5pbXVsKFB0LFJuKXwwLGRlPWRl'@;
put 'K01hdGguaW11bChQdCwkdCl8MDt2YXIgUGk9KHcrKEo9SitNYXRoLmltdWwob3QsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChvdCxsbil8MCkrTWF0aC5pbXVsKHV0LG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwodXQsbG4pfDApKyhuZT4+PjEzKXww'@;
put 'KSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoQ24sUm4pLG5lPShuZT1NYXRoLmltdWwoQ24sJHQpKStNYXRoLmltdWwoVXQsUm4pfDAsZGU9TWF0aC5pbXVsKFV0LCR0KTt2YXIgTG89KHcrKEo9SitNYXRoLmltdWwoSHQsbmkpfDApfDApKygoODE5MSYobmU9KG5lPW5l'@;
put 'K01hdGguaW11bChIdCxsbil8MCkrTWF0aC5pbXVsKFB0LG5pKXwwKSk8PDEzKXwwO3c9KChkZT1kZStNYXRoLmltdWwoUHQsbG4pfDApKyhuZT4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjM7dmFyIGhzPSh3KyhKPU1hdGguaW11bChDbixuaSkpfDApKygoODE5MSYobmU9KG5l'@;
put 'PU1hdGguaW11bChDbixsbikpK01hdGguaW11bChVdCxuaSl8MCkpPDwxMyl8MDtyZXR1cm4gdz0oKGRlPU1hdGguaW11bChVdCxsbikpKyhuZT4+PjEzKXwwKSsoaHM+Pj4yNil8MCxocyY9NjcxMDg4NjMscFswXT1qbixwWzFdPXFyLHBbMl09Z2kscFszXT14cixwWzRdPVVpLHBbNV09S3Is'@;
put 'cFs2XT1ubyxwWzddPUhyLHBbOF09cWkscFs5XT1KaSxwWzEwXT1hbyxwWzExXT1ybyxwWzEyXT1pbyxwWzEzXT1HaSxwWzE0XT1obyxwWzE1XT15cixwWzE2XT1QaSxwWzE3XT1MbyxwWzE4XT1ocywwIT09dyYmKHBbMTldPXcsQy5sZW5ndGgrKyksQ307ZnVuY3Rpb24gcShILE4sZyl7Zy5u'@;
put 'ZWdhdGl2ZT1OLm5lZ2F0aXZlXkgubmVnYXRpdmUsZy5sZW5ndGg9SC5sZW5ndGgrTi5sZW5ndGg7Zm9yKHZhciBDPTAsUz0wLHY9MDt2PGcubGVuZ3RoLTE7disrKXt2YXIgcD1TO1M9MDtmb3IodmFyIHc9NjcxMDg4NjMmQyxKPU1hdGgubWluKHYsTi5sZW5ndGgtMSksbmU9TWF0aC5tYXgo'@;
put 'MCx2LUgubGVuZ3RoKzEpO25lPD1KO25lKyspe3ZhciBMZT0oMHxILndvcmRzW3YtbmVdKSooMHxOLndvcmRzW25lXSksRmU9NjcxMDg4NjMmTGU7dz02NzEwODg2MyYoRmU9RmUrd3wwKSxTKz0ocD0ocD1wKyhMZS82NzEwODg2NHwwKXwwKSsoRmU+Pj4yNil8MCk+Pj4yNixwJj02NzEwODg2'@;
put 'M31nLndvcmRzW3ZdPXcsQz1wLHA9U31yZXR1cm4gMCE9PUM/Zy53b3Jkc1t2XT1DOmcubGVuZ3RoLS0sZy5fc3RyaXAoKX1mdW5jdGlvbiBlZShILE4sZyl7cmV0dXJuIHEoSCxOLGcpfWZ1bmN0aW9uIHRlKEgsTil7dGhpcy54PUgsdGhpcy55PU59TWF0aC5pbXVsfHwoVT1YKSxNLnByb3Rv'@;
put 'dHlwZS5tdWxUbz1mdW5jdGlvbihOLGcpe3ZhciBTPXRoaXMubGVuZ3RoK04ubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PU4ubGVuZ3RoP1UodGhpcyxOLGcpOlM8NjM/WCh0aGlzLE4sZyk6UzwxMDI0P3EodGhpcyxOLGcpOmVlKHRoaXMsTixnKX0sdGUucHJvdG90eXBl'@;
put 'Lm1ha2VSQlQ9ZnVuY3Rpb24oTil7Zm9yKHZhciBnPW5ldyBBcnJheShOKSxDPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoTiktMSxTPTA7UzxOO1MrKylnW1NdPXRoaXMucmV2QmluKFMsQyxOKTtyZXR1cm4gZ30sdGUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihOLGcsQyl7aWYoMD09PU58'@;
put 'fE49PT1DLTEpcmV0dXJuIE47Zm9yKHZhciBTPTAsdj0wO3Y8Zzt2KyspU3w9KDEmTik8PGctdi0xLE4+Pj0xO3JldHVybiBTfSx0ZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihOLGcsQyxTLHYscCl7Zm9yKHZhciB3PTA7dzxwO3crKylTW3ddPWdbTlt3XV0sdlt3XT1DW05bd11dfSx0'@;
put 'ZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKE4sZyxDLFMsdixwKXt0aGlzLnBlcm11dGUocCxOLGcsQyxTLHYpO2Zvcih2YXIgdz0xO3c8djt3PDw9MSlmb3IodmFyIEo9dzw8MSxuZT1NYXRoLmNvcygyKk1hdGguUEkvSiksZGU9TWF0aC5zaW4oMipNYXRoLlBJL0opLGZlPTA7ZmU8'@;
put 'djtmZSs9Silmb3IodmFyIHhlPW5lLExlPWRlLEZlPTA7RmU8dztGZSsrKXt2YXIgT2U9Q1tmZStGZV0samU9U1tmZStGZV0sV2U9Q1tmZStGZSt3XSxLZT1TW2ZlK0ZlK3ddLFllPXhlKldlLUxlKktlO0tlPXhlKktlK0xlKldlLENbZmUrRmVdPU9lKyhXZT1ZZSksU1tmZStGZV09amUrS2Us'@;
put 'Q1tmZStGZSt3XT1PZS1XZSxTW2ZlK0ZlK3ddPWplLUtlLEZlIT09SiYmKFllPW5lKnhlLWRlKkxlLExlPW5lKkxlK2RlKnhlLHhlPVllKX19LHRlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihOLGcpe3ZhciBDPTF8TWF0aC5tYXgoZyxOKSxTPTEmQyx2PTA7Zm9yKEM9Qy8yfDA7'@;
put 'QztDPj4+PTEpdisrO3JldHVybiAxPDx2KzErU30sdGUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihOLGcsQyl7aWYoIShDPD0xKSlmb3IodmFyIFM9MDtTPEMvMjtTKyspe3ZhciB2PU5bU107TltTXT1OW0MtUy0xXSxOW0MtUy0xXT12LHY9Z1tTXSxnW1NdPS1nW0MtUy0xXSxnW0Mt'@;
put 'Uy0xXT0tdn19LHRlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9MCxTPTA7UzxnLzI7UysrKXt2YXIgdj04MTkyKk1hdGgucm91bmQoTlsyKlMrMV0vZykrTWF0aC5yb3VuZChOWzIqU10vZykrQztOW1NdPTY3MTA4ODYzJnYsQz12PDY3MTA4ODY0PzA6'@;
put 'di82NzEwODg2NHwwfXJldHVybiBOfSx0ZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihOLGcsQyxTKXtmb3IodmFyIHY9MCxwPTA7cDxnO3ArKylDWzIqcF09ODE5MSYodis9MHxOW3BdKSxDWzIqcCsxXT04MTkxJih2Pj4+PTEzKSx2Pj4+PTEzO2ZvcihwPTIqZztwPFM7KytwKUNb'@;
put 'cF09MDttKDA9PT12KSxtKDA9PSgtODE5MiZ2KSl9LHRlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKE4pe2Zvcih2YXIgZz1uZXcgQXJyYXkoTiksQz0wO0M8TjtDKyspZ1tDXT0wO3JldHVybiBnfSx0ZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihOLGcsQyl7dmFyIFM9Mip0aGlzLmd1ZXNz'@;
put 'TGVuMTNiKE4ubGVuZ3RoLGcubGVuZ3RoKSx2PXRoaXMubWFrZVJCVChTKSxwPXRoaXMuc3R1YihTKSx3PW5ldyBBcnJheShTKSxKPW5ldyBBcnJheShTKSxuZT1uZXcgQXJyYXkoUyksZGU9bmV3IEFycmF5KFMpLGZlPW5ldyBBcnJheShTKSx4ZT1uZXcgQXJyYXkoUyksTGU9Qy53b3JkcztM'@;
put 'ZS5sZW5ndGg9Uyx0aGlzLmNvbnZlcnQxM2IoTi53b3JkcyxOLmxlbmd0aCx3LFMpLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGRlLFMpLHRoaXMudHJhbnNmb3JtKHcscCxKLG5lLFMsdiksdGhpcy50cmFuc2Zvcm0oZGUscCxmZSx4ZSxTLHYpO2Zvcih2YXIgRmU9MDtGZTxT'@;
put 'O0ZlKyspe3ZhciBPZT1KW0ZlXSpmZVtGZV0tbmVbRmVdKnhlW0ZlXTtuZVtGZV09SltGZV0qeGVbRmVdK25lW0ZlXSpmZVtGZV0sSltGZV09T2V9cmV0dXJuIHRoaXMuY29uanVnYXRlKEosbmUsUyksdGhpcy50cmFuc2Zvcm0oSixuZSxMZSxwLFMsdiksdGhpcy5jb25qdWdhdGUoTGUscCxT'@;
put 'KSx0aGlzLm5vcm1hbGl6ZTEzYihMZSxTKSxDLm5lZ2F0aXZlPU4ubmVnYXRpdmVeZy5uZWdhdGl2ZSxDLmxlbmd0aD1OLmxlbmd0aCtnLmxlbmd0aCxDLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7dmFyIGc9bmV3IE0obnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFy'@;
put 'cmF5KHRoaXMubGVuZ3RoK04ubGVuZ3RoKSx0aGlzLm11bFRvKE4sZyl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oTil7dmFyIGc9bmV3IE0obnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK04ubGVuZ3RoKSxlZSh0aGlzLE4sZyl9LE0ucHJvdG90eXBlLmlt'@;
put 'dWw9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhOLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihOKXt2YXIgZz1OPDA7ZyYmKE49LU4pLG0oIm51bWJlciI9PXR5cGVvZiBOKSxtKE48NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9MDtTPHRoaXMubGVuZ3Ro'@;
put 'O1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqTixwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKSxn'@;
put 'P3RoaXMuaW5lZygpOnRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihOKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oTil7dmFyIGc9ZnVuY3Rpb24gWShIKXtmb3IodmFyIE49bmV3IEFycmF5KEguYml0TGVuZ3RoKCkpLGc9MDtnPE4ubGVuZ3RoO2crKylOW2ddPUgud29yZHNbZy8yNnwwXT4+PmclMjYmMTtyZXR1cm4gTn0o'@;
put 'Tik7aWYoMD09PWcubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEM9dGhpcyxTPTA7UzxnLmxlbmd0aCYmMD09PWdbU107UysrLEM9Qy5zcXIoKSk7aWYoKytTPGcubGVuZ3RoKWZvcih2YXIgdj1DLnNxcigpO1M8Zy5sZW5ndGg7UysrLHY9di5zcXIoKSkwIT09Z1tTXSYmKEM9Qy5t'@;
put 'dWwodikpO3JldHVybiBDfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciB2LGc9TiUyNixDPShOLWcpLzI2LFM9NjcxMDg4NjM+Pj4yNi1nPDwyNi1nO2lmKDAhPT1nKXt2YXIgcD0wO2Zvcih2PTA7djx0aGlzLmxlbmd0aDt2'@;
put 'Kyspe3ZhciB3PXRoaXMud29yZHNbdl0mUzt0aGlzLndvcmRzW3ZdPSgwfHRoaXMud29yZHNbdl0pLXc8PGd8cCxwPXc+Pj4yNi1nfXAmJih0aGlzLndvcmRzW3ZdPXAsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUMpe2Zvcih2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pdGhpcy53b3Jkc1t2K0Nd'@;
put 'PXRoaXMud29yZHNbdl07Zm9yKHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09MDt0aGlzLmxlbmd0aCs9Q31yZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oTil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKE4pfSxNLnByb3Rv'@;
put 'dHlwZS5pdXNocm49ZnVuY3Rpb24oTixnLEMpe3ZhciBTO20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKSxTPWc/KGctZyUyNikvMjY6MDt2YXIgdj1OJTI2LHA9TWF0aC5taW4oKE4tdikvMjYsdGhpcy5sZW5ndGgpLHc9NjcxMDg4NjNeNjcxMDg4NjM+Pj52PDx2LEo9QztpZihTLT1wLFM9'@;
put 'TWF0aC5tYXgoMCxTKSxKKXtmb3IodmFyIG5lPTA7bmU8cDtuZSsrKUoud29yZHNbbmVdPXRoaXMud29yZHNbbmVdO0oubGVuZ3RoPXB9aWYoMCE9PXApaWYodGhpcy5sZW5ndGg+cClmb3IodGhpcy5sZW5ndGgtPXAsbmU9MDtuZTx0aGlzLmxlbmd0aDtuZSsrKXRoaXMud29yZHNbbmVdPXRo'@;
put 'aXMud29yZHNbbmUrcF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZGU9MDtmb3IobmU9dGhpcy5sZW5ndGgtMTtuZT49MCYmKDAhPT1kZXx8bmU+PVMpO25lLS0pe3ZhciBmZT0wfHRoaXMud29yZHNbbmVdO3RoaXMud29yZHNbbmVdPWRlPDwyNi12fGZlPj4+dixk'@;
put 'ZT1mZSZ3fXJldHVybiBKJiYwIT09ZGUmJihKLndvcmRzW0oubGVuZ3RoKytdPWRlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oTixnLEMpe3JldHVybiBtKDA9PT10aGlz'@;
put 'Lm5lZ2F0aXZlKSx0aGlzLml1c2hybihOLGcsQyl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihOKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oTil9LE0ucHJvdG90eXBlLnNo'@;
put 'cm49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihOKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oTil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2'@;
put 'YXIgZz1OJTI2LEM9KE4tZykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9Q3x8ISh0aGlzLndvcmRzW0NdJjE8PGcpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgZz1OJTI2LEM9KE4tZykvMjY7cmV0dXJuIG0oMD09PXRo'@;
put 'aXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1DP3RoaXM6KDAhPT1nJiZDKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oQyx0aGlzLmxlbmd0aCksMCE9PWcmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2'@;
put 'M142NzEwODg2Mz4+Pmc8PGcpLHRoaXMuX3N0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihOKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oTil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBOKSxtKE48NjcxMDg4'@;
put 'NjQpLE48MD90aGlzLmlzdWJuKC1OKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1OPyh0aGlzLndvcmRzWzBdPU4tKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihO'@;
put 'KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oTil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihOKXt0aGlzLndvcmRzWzBdKz1OO2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZ10+PTY3MTA4ODY0O2crKyl0aGlzLndvcmRzW2ddLT02NzEwODg2'@;
put 'NCxnPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2crMV09MTp0aGlzLndvcmRzW2crMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZysxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihOKXtpZihtKCJudW1iZXIiPT10eXBlb2YgTiksbShO'@;
put 'PDY3MTA4ODY0KSxOPDApcmV0dXJuIHRoaXMuaWFkZG4oLU4pO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihOKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1OLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1sw'@;
put 'XTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tnXTwwO2crKyl0aGlzLndvcmRzW2ddKz02NzEwODg2NCx0aGlzLndvcmRzW2crMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9'@;
put 'LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihOKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKE4pfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRp'@;
put 'dmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKE4sZyxDKXt2YXIgdjt0aGlzLl9leHBhbmQoTi5sZW5ndGgrQyk7dmFyIHAsdz0wO2Zvcih2PTA7djxOLmxlbmd0'@;
put 'aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K0NdKSt3O3ZhciBKPSgwfE4ud29yZHNbdl0pKmc7dz0oKHAtPTY3MTA4ODYzJkopPj4yNiktKEovNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K0NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3RoLUM7disrKXc9KHA9KDB8dGhpcy53b3Jkc1t2'@;
put 'K0NdKSt3KT4+MjYsdGhpcy53b3Jkc1t2K0NdPTY3MTA4ODYzJnA7aWYoMD09PXcpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKG0oLTE9PT13KSx3PTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKXc9KHA9LSgwfHRoaXMud29yZHNbdl0pK3cpPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7'@;
put 'cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihOLGcpe3ZhciBDLFM9dGhpcy5jbG9uZSgpLHY9TixwPTB8di53b3Jkc1t2Lmxlbmd0aC0xXTswIT0oQz0yNi10aGlzLl9jb3VudEJpdHMocCkpJiYodj12LnVzaGxuKEMp'@;
put 'LFMuaXVzaGxuKEMpLHA9MHx2LndvcmRzW3YubGVuZ3RoLTFdKTt2YXIgbmUsSj1TLmxlbmd0aC12Lmxlbmd0aDtpZigibW9kIiE9PWcpeyhuZT1uZXcgTShudWxsKSkubGVuZ3RoPUorMSxuZS53b3Jkcz1uZXcgQXJyYXkobmUubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8bmUubGVuZ3RoO2Rl'@;
put 'KyspbmUud29yZHNbZGVdPTB9dmFyIGZlPVMuY2xvbmUoKS5faXNobG5zdWJtdWwodiwxLEopOzA9PT1mZS5uZWdhdGl2ZSYmKFM9ZmUsbmUmJihuZS53b3Jkc1tKXT0xKSk7Zm9yKHZhciB4ZT1KLTE7eGU+PTA7eGUtLSl7dmFyIExlPTY3MTA4ODY0KigwfFMud29yZHNbdi5sZW5ndGgreGVd'@;
put 'KSsoMHxTLndvcmRzW3YubGVuZ3RoK3hlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvcHwwLDY3MTA4ODYzKSxTLl9pc2hsbnN1Ym11bCh2LExlLHhlKTswIT09Uy5uZWdhdGl2ZTspTGUtLSxTLm5lZ2F0aXZlPTAsUy5faXNobG5zdWJtdWwodiwxLHhlKSxTLmlzWmVybygpfHwoUy5uZWdhdGl2'@;
put 'ZV49MSk7bmUmJihuZS53b3Jkc1t4ZV09TGUpfXJldHVybiBuZSYmbmUuX3N0cmlwKCksUy5fc3RyaXAoKSwiZGl2IiE9PWcmJjAhPT1DJiZTLml1c2hybihDKSx7ZGl2Om5lfHxudWxsLG1vZDpTfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKE4sZyxDKXtyZXR1cm4gbSghTi5pc1pl'@;
put 'cm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1OLm5lZ2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKE4sZyksIm1vZCIhPT1nJiYoUz1wLmRpdi5uZWcoKSksImRpdiIhPT1nJiYodj1wLm1vZC5uZWcoKSxDJiYw'@;
put 'IT09di5uZWdhdGl2ZSYmdi5pYWRkKE4pKSx7ZGl2OlMsbW9kOnZ9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PU4ubmVnYXRpdmU/KHA9dGhpcy5kaXZtb2QoTi5uZWcoKSxnKSwibW9kIiE9PWcmJihTPXAuZGl2Lm5lZygpKSx7ZGl2OlMsbW9kOnAubW9kfSk6dGhpcy5uZWdhdGl2ZSZOLm5l'@;
put 'Z2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKE4ubmVnKCksZyksImRpdiIhPT1nJiYodj1wLm1vZC5uZWcoKSxDJiYwIT09di5uZWdhdGl2ZSYmdi5pc3ViKE4pKSx7ZGl2OnAuZGl2LG1vZDp2fSk6Ti5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKE4pPDA/e2RpdjpuZXcgTSgwKSxt'@;
put 'b2Q6dGhpc306MT09PU4ubGVuZ3RoPyJkaXYiPT09Zz97ZGl2OnRoaXMuZGl2bihOLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1nP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RybihOLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKE4ud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlz'@;
put 'Lm1vZHJuKE4ud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihOLGcpO3ZhciBTLHYscH0sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmRpdm1vZChOLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5kaXZtb2QoTiwi'@;
put 'bW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmRpdm1vZChOLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKE4pe3ZhciBnPXRoaXMuZGl2bW9kKE4pO2lmKGcubW9kLmlzWmVybygpKXJldHVybiBnLmRpdjt2'@;
put 'YXIgQz0wIT09Zy5kaXYubmVnYXRpdmU/Zy5tb2QuaXN1YihOKTpnLm1vZCxTPU4udXNocm4oMSksdj1OLmFuZGxuKDEpLHA9Qy5jbXAoUyk7cmV0dXJuIHA8MHx8MT09PXYmJjA9PT1wP2cuZGl2OjAhPT1nLmRpdi5uZWdhdGl2ZT9nLmRpdi5pc3VibigxKTpnLmRpdi5pYWRkbigxKX0sTS5w'@;
put 'cm90b3R5cGUubW9kcm49ZnVuY3Rpb24oTil7dmFyIGc9TjwwO2cmJihOPS1OKSxtKE48PTY3MTA4ODYzKTtmb3IodmFyIEM9KDE8PDI2KSVOLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVOO3JldHVybiBnPy1TOlN9LE0ucHJvdG90eXBl'@;
put 'Lm1vZG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubW9kcm4oTil9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKE4pe3ZhciBnPU48MDtnJiYoTj0tTiksbShOPD02NzEwODg2Myk7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0oMHx0aGlzLndvcmRzW1Nd'@;
put 'KSs2NzEwODg2NCpDO3RoaXMud29yZHNbU109di9OfDAsQz12JU59cmV0dXJuIHRoaXMuX3N0cmlwKCksZz90aGlzLmluZWcoKTp0aGlzfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oTil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24o'@;
put 'Til7bSgwPT09Ti5uZWdhdGl2ZSksbSghTi5pc1plcm8oKSk7dmFyIGc9dGhpcyxDPU4uY2xvbmUoKTtnPTAhPT1nLm5lZ2F0aXZlP2cudW1vZChOKTpnLmNsb25lKCk7Zm9yKHZhciBTPW5ldyBNKDEpLHY9bmV3IE0oMCkscD1uZXcgTSgwKSx3PW5ldyBNKDEpLEo9MDtnLmlzRXZlbigpJiZD'@;
put 'LmlzRXZlbigpOylnLml1c2hybigxKSxDLml1c2hybigxKSwrK0o7Zm9yKHZhciBuZT1DLmNsb25lKCksZGU9Zy5jbG9uZSgpOyFnLmlzWmVybygpOyl7Zm9yKHZhciBmZT0wLHhlPTE7IShnLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKGcuaXVzaHJuKGZl'@;
put 'KTtmZS0tID4wOykoUy5pc09kZCgpfHx2LmlzT2RkKCkpJiYoUy5pYWRkKG5lKSx2LmlzdWIoZGUpKSxTLml1c2hybigxKSx2Lml1c2hybigxKTtmb3IodmFyIExlPTAsRmU9MTshKEMud29yZHNbMF0mRmUpJiZMZTwyNjsrK0xlLEZlPDw9MSk7aWYoTGU+MClmb3IoQy5pdXNocm4oTGUpO0xl'@;
put 'LS0gPjA7KShwLmlzT2RkKCl8fHcuaXNPZGQoKSkmJihwLmlhZGQobmUpLHcuaXN1YihkZSkpLHAuaXVzaHJuKDEpLHcuaXVzaHJuKDEpO2cuY21wKEMpPj0wPyhnLmlzdWIoQyksUy5pc3ViKHApLHYuaXN1Yih3KSk6KEMuaXN1YihnKSxwLmlzdWIoUyksdy5pc3ViKHYpKX1yZXR1cm57YTpw'@;
put 'LGI6dyxnY2Q6Qy5pdXNobG4oSil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oTil7bSgwPT09Ti5uZWdhdGl2ZSksbSghTi5pc1plcm8oKSk7dmFyIGZlLGc9dGhpcyxDPU4uY2xvbmUoKTtnPTAhPT1nLm5lZ2F0aXZlP2cudW1vZChOKTpnLmNsb25lKCk7Zm9yKHZhciBTPW5ldyBN'@;
put 'KDEpLHY9bmV3IE0oMCkscD1DLmNsb25lKCk7Zy5jbXBuKDEpPjAmJkMuY21wbigxKT4wOyl7Zm9yKHZhciB3PTAsSj0xOyEoZy53b3Jkc1swXSZKKSYmdzwyNjsrK3csSjw8PTEpO2lmKHc+MClmb3IoZy5pdXNocm4odyk7dy0tID4wOylTLmlzT2RkKCkmJlMuaWFkZChwKSxTLml1c2hybigx'@;
put 'KTtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXYuaXNPZGQoKSYmdi5pYWRkKHApLHYuaXVzaHJuKDEpO2cuY21wKEMpPj0wPyhnLmlzdWIoQyksUy5pc3ViKHYpKTooQy5pc3Vi'@;
put 'KGcpLHYuaXN1YihTKSl9cmV0dXJuKGZlPTA9PT1nLmNtcG4oMSk/Uzp2KS5jbXBuKDApPDAmJmZlLmlhZGQoTiksZmV9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBOLmFicygpO2lmKE4uaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFy'@;
put 'IGc9dGhpcy5jbG9uZSgpLEM9Ti5jbG9uZSgpO2cubmVnYXRpdmU9MCxDLm5lZ2F0aXZlPTA7Zm9yKHZhciBTPTA7Zy5pc0V2ZW4oKSYmQy5pc0V2ZW4oKTtTKyspZy5pdXNocm4oMSksQy5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2cuaXNFdmVuKCk7KWcuaXVzaHJuKDEpO2Zvcig7Qy5pc0V2'@;
put 'ZW4oKTspQy5pdXNocm4oMSk7dmFyIHY9Zy5jbXAoQyk7aWYodjwwKXt2YXIgcD1nO2c9QyxDPXB9ZWxzZSBpZigwPT09dnx8MD09PUMuY21wbigxKSlicmVhaztnLmlzdWIoQyl9cmV0dXJuIEMuaXVzaGxuKFMpfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmVn'@;
put 'Y2QoTikuYS51bW9kKE4pfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihOKXty'@;
put 'ZXR1cm4gdGhpcy53b3Jkc1swXSZOfSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTik7dmFyIGc9TiUyNixDPShOLWcpLzI2LFM9MTw8ZztpZih0aGlzLmxlbmd0aDw9QylyZXR1cm4gdGhpcy5fZXhwYW5kKEMrMSksdGhpcy53b3Jkc1tDXXw9Uyx0'@;
put 'aGlzO2Zvcih2YXIgdj1TLHA9QzswIT09diYmcDx0aGlzLmxlbmd0aDtwKyspe3ZhciB3PTB8dGhpcy53b3Jkc1twXTt2PSh3Kz12KT4+PjI2LHRoaXMud29yZHNbcF09dyY9NjcxMDg4NjN9cmV0dXJuIDAhPT12JiYodGhpcy53b3Jkc1twXT12LHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJv'@;
put 'dG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKE4pe3ZhciBDLGc9TjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZylyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'ZylyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7ZyYmKE49LU4pLG0oTjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIFM9MHx0aGlzLndvcmRzWzBdO0M9Uz09PU4/MDpTPE4/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwt'@;
put 'QzpDfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oTil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1OLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Ti5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZz10aGlzLnVjbXAoTik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlPzB8LWc6Z30sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihOKXtpZih0aGlzLmxlbmd0aD5OLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxOLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGc9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0pe3ZhciBTPTB8dGhpcy53b3Jkc1tD'@;
put 'XSx2PTB8Ti53b3Jkc1tDXTtpZihTIT09dil7Uzx2P2c9LTE6Uz52JiYoZz0xKTticmVha319cmV0dXJuIGd9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihOKXtyZXR1cm4gMT09PXRoaXMuY21wbihOKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oTil7cmV0dXJuIDE9PT10aGlzLmNtcChO'@;
put 'KX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXBuKE4pPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY21wKE4pPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oTil7cmV0dXJuLTE9PT10aGlzLmNtcG4oTil9LE0ucHJv'@;
put 'dG90eXBlLmx0PWZ1bmN0aW9uKE4pe3JldHVybi0xPT09dGhpcy5jbXAoTil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY21wbihOKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcChOKTw9MH0sTS5wcm90b3R5cGUuZXFu'@;
put 'PWZ1bmN0aW9uKE4pe3JldHVybiAwPT09dGhpcy5jbXBuKE4pfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtyZXR1cm4gMD09PXRoaXMuY21wKE4pfSxNLnJlZD1mdW5jdGlvbihOKXtyZXR1cm4gbmV3IGIoTil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKE4pe3JldHVybiBtKCF0'@;
put 'aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksTi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKE4pfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLnJlZD1OLHRoaXN9LE0ucHJv'@;
put 'dG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKE4pe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKE4pfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsTil9LE0u'@;
put 'cHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3Vi'@;
put 'IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsTil9LE0u'@;
put 'cHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsTiksdGhpcy5yZWQubXVsKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oTil7'@;
put 'cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLE4pLHRoaXMucmVkLmltdWwodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0'@;
put 'aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlv'@;
put 'bigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQmJiFOLnJlZCwicmVk'@;
put 'UG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxOKX07dmFyIG9lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gc2UoSCxOKXt0aGlzLm5hbWU9SCx0aGlzLnA9bmV3IE0oTiwxNiksdGhp'@;
put 'cy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGhlKCl7c2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiB1ZSgpe3NlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gY2UoKXtzZS5jYWxsKHRoaXMsInAxOTIi'@;
put 'LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEcoKXtzZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1'@;
put 'bmN0aW9uIGIoSCl7aWYoInN0cmluZyI9PXR5cGVvZiBIKXt2YXIgTj1NLl9wcmltZShIKTt0aGlzLm09Ti5wLHRoaXMucHJpbWU9Tn1lbHNlIG0oSC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1ILHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBEKEgp'@;
put 'e2IuY2FsbCh0aGlzLEgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhp'@;
put 'cy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9c2UucHJvdG90eXBlLl90bXA9'@;
put 'ZnVuY3Rpb24oKXt2YXIgTj1uZXcgTShudWxsKTtyZXR1cm4gTi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLE59LHNlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKE4pe3ZhciBDLGc9Tjtkb3t0aGlzLnNwbGl0KGcsdGhpcy50bXApLEM9KGc9KGc9dGhpcy5pbXVs'@;
put 'SyhnKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEM+dGhpcy5uKTt2YXIgUz1DPHRoaXMubj8tMTpnLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PVM/KGcud29yZHNbMF09MCxnLmxlbmd0aD0xKTpTPjA/Zy5pc3ViKHRoaXMucCk6dm9pZCAwIT09Zy5zdHJpcD9nLnN0cmlw'@;
put 'KCk6Zy5fc3RyaXAoKSxnfSxzZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oTixnKXtOLml1c2hybih0aGlzLm4sMCxnKX0sc2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKE4pe3JldHVybiBOLmltdWwodGhpcy5rKX0sbGUoaGUsc2UpLGhlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihO'@;
put 'LGcpe2Zvcih2YXIgQz00MTk0MzAzLFM9TWF0aC5taW4oTi5sZW5ndGgsOSksdj0wO3Y8Uzt2KyspZy53b3Jkc1t2XT1OLndvcmRzW3ZdO2lmKGcubGVuZ3RoPVMsTi5sZW5ndGg8PTkpcmV0dXJuIE4ud29yZHNbMF09MCx2b2lkKE4ubGVuZ3RoPTEpO3ZhciBwPU4ud29yZHNbOV07Zm9yKGcu'@;
put 'd29yZHNbZy5sZW5ndGgrK109cCZDLHY9MTA7djxOLmxlbmd0aDt2Kyspe3ZhciB3PTB8Ti53b3Jkc1t2XTtOLndvcmRzW3YtMTBdPSh3JkMpPDw0fHA+Pj4yMixwPXd9Ti53b3Jkc1t2LTEwXT1wPj4+PTIyLE4ubGVuZ3RoLT0wPT09cCYmTi5sZW5ndGg+MTA/MTA6OX0saGUucHJvdG90eXBl'@;
put 'LmltdWxLPWZ1bmN0aW9uKE4pe04ud29yZHNbTi5sZW5ndGhdPTAsTi53b3Jkc1tOLmxlbmd0aCsxXT0wLE4ubGVuZ3RoKz0yO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl7dmFyIFM9MHxOLndvcmRzW0NdO04ud29yZHNbQ109NjcxMDg4NjMmKGcrPTk3NypTKSxnPTY0KlMrKGcv'@;
put 'NjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1OLndvcmRzW04ubGVuZ3RoLTFdJiYoTi5sZW5ndGgtLSwwPT09Ti53b3Jkc1tOLmxlbmd0aC0xXSYmTi5sZW5ndGgtLSksTn0sbGUodWUsc2UpLGxlKGNlLHNlKSxsZShHLHNlKSxHLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihOKXtmb3IodmFyIGc9'@;
put 'MCxDPTA7QzxOLmxlbmd0aDtDKyspe3ZhciBTPTE5KigwfE4ud29yZHNbQ10pK2csdj02NzEwODg2MyZTO1M+Pj49MjYsTi53b3Jkc1tDXT12LGc9U31yZXR1cm4gMCE9PWcmJihOLndvcmRzW04ubGVuZ3RoKytdPWcpLE59LE0uX3ByaW1lPWZ1bmN0aW9uKE4pe2lmKG9lW05dKXJldHVybiBv'@;
put 'ZVtOXTt2YXIgZztpZigiazI1NiI9PT1OKWc9bmV3IGhlO2Vsc2UgaWYoInAyMjQiPT09TilnPW5ldyB1ZTtlbHNlIGlmKCJwMTkyIj09PU4pZz1uZXcgY2U7ZWxzZXtpZigicDI1NTE5IiE9PU4pdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrTik7Zz1uZXcgR31yZXR1cm4gb2Vb'@;
put 'Tl09ZyxnfSxiLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihOKXttKDA9PT1OLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oTi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sYi5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24o'@;
put 'TixnKXttKDA9PShOLm5lZ2F0aXZlfGcubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oTi5yZWQmJk4ucmVkPT09Zy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sYi5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhp'@;
put 'cy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoTikuX2ZvcmNlUmVkKHRoaXMpOihJKE4sTi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxOKX0sYi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKE4pe3JldHVybiBOLmlzWmVybygpP04uY2xvbmUoKTp0aGlzLm0uc3ViKE4pLl9mb3JjZVJl'@;
put 'ZCh0aGlzKX0sYi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4sZyl7dGhpcy5fdmVyaWZ5MihOLGcpO3ZhciBDPU4uYWRkKGcpO3JldHVybiBDLmNtcCh0aGlzLm0pPj0wJiZDLmlzdWIodGhpcy5tKSxDLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihOLGcpe3Ro'@;
put 'aXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLmlhZGQoZyk7cmV0dXJuIEMuY21wKHRoaXMubSk+PTAmJkMuaXN1Yih0aGlzLm0pLEN9LGIucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihOLGcpe3RoaXMuX3ZlcmlmeTIoTixnKTt2YXIgQz1OLnN1YihnKTtyZXR1cm4gQy5jbXBuKDApPDAmJkMuaWFk'@;
put 'ZCh0aGlzLm0pLEMuX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKE4sZyl7dGhpcy5fdmVyaWZ5MihOLGcpO3ZhciBDPU4uaXN1YihnKTtyZXR1cm4gQy5jbXBuKDApPDAmJkMuaWFkZCh0aGlzLm0pLEN9LGIucHJvdG90eXBlLnNobD1mdW5jdGlvbihOLGcpe3Jl'@;
put 'dHVybiB0aGlzLl92ZXJpZnkxKE4pLHRoaXMuaW1vZChOLnVzaGxuKGcpKX0sYi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihOLGcpe3JldHVybiB0aGlzLl92ZXJpZnkyKE4sZyksdGhpcy5pbW9kKE4uaW11bChnKSl9LGIucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLGcpe3JldHVybiB0aGlz'@;
put 'Ll92ZXJpZnkyKE4sZyksdGhpcy5pbW9kKE4ubXVsKGcpKX0sYi5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5pbXVsKE4sTi5jbG9uZSgpKX0sYi5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLm11bChOLE4pfSxiLnByb3RvdHlwZS5zcXJ0PWZ1'@;
put 'bmN0aW9uKE4pe2lmKE4uaXNaZXJvKCkpcmV0dXJuIE4uY2xvbmUoKTt2YXIgZz10aGlzLm0uYW5kbG4oMyk7aWYobShnJTI9PTEpLDM9PT1nKXt2YXIgQz10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KE4sQyl9Zm9yKHZhciBTPXRoaXMubS5zdWJuKDEp'@;
put 'LHY9MDshUy5pc1plcm8oKSYmMD09PVMuYW5kbG4oMSk7KXYrKyxTLml1c2hybigxKTttKCFTLmlzWmVybygpKTt2YXIgcD1uZXcgTSgxKS50b1JlZCh0aGlzKSx3PXAucmVkTmVnKCksSj10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbmU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihuZT1uZXcg'@;
put 'TSgyKm5lKm5lKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobmUsSikuY21wKHcpOyluZS5yZWRJQWRkKHcpO2Zvcih2YXIgZGU9dGhpcy5wb3cobmUsUyksZmU9dGhpcy5wb3coTixTLmFkZG4oMSkuaXVzaHJuKDEpKSx4ZT10aGlzLnBvdyhOLFMpLExlPXY7MCE9PXhlLmNtcChwKTspe2Zv'@;
put 'cih2YXIgRmU9eGUsT2U9MDswIT09RmUuY21wKHApO09lKyspRmU9RmUucmVkU3FyKCk7bShPZTxMZSk7dmFyIGplPXRoaXMucG93KGRlLG5ldyBNKDEpLml1c2hsbihMZS1PZS0xKSk7ZmU9ZmUucmVkTXVsKGplKSxkZT1qZS5yZWRTcXIoKSx4ZT14ZS5yZWRNdWwoZGUpLExlPU9lfXJldHVy'@;
put 'biBmZX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihOKXt2YXIgZz1OLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Zy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChnKS5yZWROZWcoKSk6dGhpcy5pbW9kKGcpfSxiLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oTixnKXtpZihn'@;
put 'LmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09Zy5jbXBuKDEpKXJldHVybiBOLmNsb25lKCk7dmFyIFM9bmV3IEFycmF5KDE2KTtTWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFNbMV09Tjtmb3IodmFyIHY9Mjt2PFMubGVuZ3RoO3YrKylTW3ZdPXRoaXMubXVs'@;
put 'KFNbdi0xXSxOKTt2YXIgcD1TWzBdLHc9MCxKPTAsbmU9Zy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLHY9Zy5sZW5ndGgtMTt2Pj0wO3YtLSl7Zm9yKHZhciBkZT1nLndvcmRzW3ZdLGZlPW5lLTE7ZmU+PTA7ZmUtLSl7dmFyIHhlPWRlPj5mZSYxO3AhPT1TWzBdJiYocD10'@;
put 'aGlzLnNxcihwKSksMCE9PXhlfHwwIT09dz8odzw8PTEsd3w9eGUsKDQ9PSsrSnx8MD09PXYmJjA9PT1mZSkmJihwPXRoaXMubXVsKHAsU1t3XSksSj0wLHc9MCkpOko9MH1uZT0yNn1yZXR1cm4gcH0sYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKE4pe3ZhciBnPU4udW1vZCh0aGlz'@;
put 'Lm0pO3JldHVybiBnPT09Tj9nLmNsb25lKCk6Z30sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oTil7dmFyIGc9Ti5jbG9uZSgpO3JldHVybiBnLnJlZD1udWxsLGd9LE0ubW9udD1mdW5jdGlvbihOKXtyZXR1cm4gbmV3IEQoTil9LGxlKEQsYiksRC5wcm90b3R5cGUuY29udmVy'@;
put 'dFRvPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmltb2QoTi51c2hsbih0aGlzLnNoaWZ0KSl9LEQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKE4pe3ZhciBnPXRoaXMuaW1vZChOLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZy5yZWQ9bnVsbCxnfSxELnByb3RvdHlwZS5pbXVsPWZ1'@;
put 'bmN0aW9uKE4sZyl7aWYoTi5pc1plcm8oKXx8Zy5pc1plcm8oKSlyZXR1cm4gTi53b3Jkc1swXT0wLE4ubGVuZ3RoPTEsTjt2YXIgQz1OLmltdWwoZyksUz1DLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx2PUMuaXN1YihT'@;
put 'KS5pdXNocm4odGhpcy5zaGlmdCkscD12O3JldHVybiB2LmNtcCh0aGlzLm0pPj0wP3A9di5pc3ViKHRoaXMubSk6di5jbXBuKDApPDAmJihwPXYuaWFkZCh0aGlzLm0pKSxwLl9mb3JjZVJlZCh0aGlzKX0sRC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4sZyl7aWYoTi5pc1plcm8oKXx8Zy5p'@;
put 'c1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBDPU4ubXVsKGcpLFM9Qy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksdj1DLmlzdWIoUykuaXVzaHJuKHRoaXMuc2hpZnQpLHA9djtyZXR1cm4g'@;
put 'di5jbXAodGhpcy5tKT49MD9wPXYuaXN1Yih0aGlzLm0pOnYuY21wbigwKTwwJiYocD12LmlhZGQodGhpcy5tKSkscC5fZm9yY2VSZWQodGhpcyl9LEQucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuaW1vZChOLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2Zv'@;
put 'cmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw2MDA4MjooYXQsSWUsRik9Pnt2YXIgYWU7ZnVuY3Rpb24geChsZSl7dGhpcy5yYW5kPWxlfWlmKGF0LmV4cG9ydHM9ZnVuY3Rpb24oTSl7cmV0dXJuIGFlfHwoYWU9bmV3IHgobnVsbCkpLGFlLmdlbmVyYXRlKE0pfSxhdC5leHBv'@;
put 'cnRzLlJhbmQ9eCx4LnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5fcmFuZChNKX0seC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oTSl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMoTSk7Zm9yKHZhciBPPW5ldyBVaW50'@;
put 'OEFycmF5KE0pLFI9MDtSPE8ubGVuZ3RoO1IrKylPW1JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIE99LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP3gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe3ZhciBPPW5l'@;
put 'dyBVaW50OEFycmF5KE0pO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoTyksT306c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/eC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oTSl7dmFyIE89bmV3IFVpbnQ4QXJyYXkoTSk7cmV0dXJuIHNl'@;
put 'bGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKE8pLE99OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoeC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBtPUYoNzc5MDMpO2lmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBtLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO3gucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKE0pe3JldHVybiBtLnJhbmRvbUJ5dGVzKE0pfX1jYXRjaHt9fSw2NDAzOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0'@;
put 'aW9uIHgoeil7YWUuaXNCdWZmZXIoeil8fCh6PWFlLmZyb20oeikpO2Zvcih2YXIgSz16Lmxlbmd0aC80fDAsST1uZXcgQXJyYXkoSyksaz0wO2s8SztrKyspSVtrXT16LnJlYWRVSW50MzJCRSg0KmspO3JldHVybiBJfWZ1bmN0aW9uIG0oeil7Zm9yKDswPHoubGVuZ3RoO3orKyl6WzBdPTB9'@;
put 'ZnVuY3Rpb24gbGUoeixLLEksayxFKXtmb3IodmFyIHRlLG9lLHNlLGhlLGo9SVswXSxWPUlbMV0sQj1JWzJdLFk9SVszXSxYPXpbMF1eS1swXSxVPXpbMV1eS1sxXSxxPXpbMl1eS1syXSxlZT16WzNdXktbM10sdWU9NCxjZT0xO2NlPEU7Y2UrKyl0ZT1qW1g+Pj4yNF1eVltVPj4+MTYmMjU1'@;
put 'XV5CW3E+Pj44JjI1NV1eWVsyNTUmZWVdXktbdWUrK10sb2U9altVPj4+MjRdXlZbcT4+PjE2JjI1NV1eQltlZT4+PjgmMjU1XV5ZWzI1NSZYXV5LW3VlKytdLHNlPWpbcT4+PjI0XV5WW2VlPj4+MTYmMjU1XV5CW1g+Pj44JjI1NV1eWVsyNTUmVV1eS1t1ZSsrXSxoZT1qW2VlPj4+MjRdXlZb'@;
put 'WD4+PjE2JjI1NV1eQltVPj4+OCYyNTVdXllbMjU1JnFdXktbdWUrK10sWD10ZSxVPW9lLHE9c2UsZWU9aGU7cmV0dXJuIHRlPShrW1g+Pj4yNF08PDI0fGtbVT4+PjE2JjI1NV08PDE2fGtbcT4+PjgmMjU1XTw8OHxrWzI1NSZlZV0pXktbdWUrK10sb2U9KGtbVT4+PjI0XTw8MjR8a1txPj4+'@;
put 'MTYmMjU1XTw8MTZ8a1tlZT4+PjgmMjU1XTw8OHxrWzI1NSZYXSleS1t1ZSsrXSxzZT0oa1txPj4+MjRdPDwyNHxrW2VlPj4+MTYmMjU1XTw8MTZ8a1tYPj4+OCYyNTVdPDw4fGtbMjU1JlVdKV5LW3VlKytdLGhlPShrW2VlPj4+MjRdPDwyNHxrW1g+Pj4xNiYyNTVdPDwxNnxrW1U+Pj44JjI1'@;
put 'NV08PDh8a1syNTUmcV0pXktbdWUrK10sW3RlPj4+PTAsb2U+Pj49MCxzZT4+Pj0wLGhlPj4+PTBdfXZhciBNPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxPPWZ1bmN0aW9uKCl7Zm9yKHZhciB6PW5ldyBBcnJheSgyNTYpLEs9MDtLPDI1NjtLKyspeltLXT1LPDEyOD9LPDwxOks8'@;
put 'PDFeMjgzO2Zvcih2YXIgST1bXSxrPVtdLEU9W1tdLFtdLFtdLFtdXSxqPVtbXSxbXSxbXSxbXV0sVj0wLEI9MCxZPTA7WTwyNTY7KytZKXt2YXIgWD1CXkI8PDFeQjw8Ml5CPDwzXkI8PDQ7SVtWXT1YPVg+Pj44XjI1NSZYXjk5LGtbWF09Vjt2YXIgVT16W1ZdLHE9eltVXSxlZT16W3FdLHRl'@;
put 'PTI1Nyp6W1hdXjE2ODQzMDA4Klg7RVswXVtWXT10ZTw8MjR8dGU+Pj44LEVbMV1bVl09dGU8PDE2fHRlPj4+MTYsRVsyXVtWXT10ZTw8OHx0ZT4+PjI0LEVbM11bVl09dGUsalswXVtYXT0odGU9MTY4NDMwMDkqZWVeNjU1MzcqcV4yNTcqVV4xNjg0MzAwOCpWKTw8MjR8dGU+Pj44LGpbMV1b'@;
put 'WF09dGU8PDE2fHRlPj4+MTYsalsyXVtYXT10ZTw8OHx0ZT4+PjI0LGpbM11bWF09dGUsMD09PVY/Vj1CPTE6KFY9VV56W3pbeltlZV5VXV1dLEJePXpbeltCXV0pfXJldHVybntTQk9YOkksSU5WX1NCT1g6ayxTVUJfTUlYOkUsSU5WX1NVQl9NSVg6an19KCk7ZnVuY3Rpb24gUih6KXt0aGlz'@;
put 'Ll9rZXk9eCh6KSx0aGlzLl9yZXNldCgpfVIuYmxvY2tTaXplPTE2LFIua2V5U2l6ZT0zMixSLnByb3RvdHlwZS5ibG9ja1NpemU9Ui5ibG9ja1NpemUsUi5wcm90b3R5cGUua2V5U2l6ZT1SLmtleVNpemUsUi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB6PXRoaXMuX2tl'@;
put 'eSxLPXoubGVuZ3RoLEk9Sys2LGs9NCooSSsxKSxFPVtdLGo9MDtqPEs7aisrKUVbal09eltqXTtmb3Ioaj1LO2o8aztqKyspe3ZhciBWPUVbai0xXTtqJUs9PTA/KFY9Ty5TQk9YWyhWPVY8PDh8Vj4+PjI0KT4+PjI0XTw8MjR8Ty5TQk9YW1Y+Pj4xNiYyNTVdPDwxNnxPLlNCT1hbVj4+Pjgm'@;
put 'MjU1XTw8OHxPLlNCT1hbMjU1JlZdLFZePU1bai9LfDBdPDwyNCk6Sz42JiZqJUs9PTQmJihWPU8uU0JPWFtWPj4+MjRdPDwyNHxPLlNCT1hbVj4+PjE2JjI1NV08PDE2fE8uU0JPWFtWPj4+OCYyNTVdPDw4fE8uU0JPWFsyNTUmVl0pLEVbal09RVtqLUtdXlZ9Zm9yKHZhciBCPVtdLFk9MDtZ'@;
put 'PGs7WSsrKXt2YXIgWD1rLVksVT1FW1gtKFklND8wOjQpXTtCW1ldPVk8NHx8WDw9ND9VOk8uSU5WX1NVQl9NSVhbMF1bTy5TQk9YW1U+Pj4yNF1dXk8uSU5WX1NVQl9NSVhbMV1bTy5TQk9YW1U+Pj4xNiYyNTVdXV5PLklOVl9TVUJfTUlYWzJdW08uU0JPWFtVPj4+OCYyNTVdXV5PLklOVl9T'@;
put 'VUJfTUlYWzNdW08uU0JPWFsyNTUmVV1dfXRoaXMuX25Sb3VuZHM9SSx0aGlzLl9rZXlTY2hlZHVsZT1FLHRoaXMuX2ludktleVNjaGVkdWxlPUJ9LFIucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbih6KXtyZXR1cm4gbGUoej14KHopLHRoaXMuX2tleVNjaGVkdWxlLE8uU1VC'@;
put 'X01JWCxPLlNCT1gsdGhpcy5fblJvdW5kcyl9LFIucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbih6KXt2YXIgSz10aGlzLmVuY3J5cHRCbG9ja1Jhdyh6KSxJPWFlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gSS53cml0ZVVJbnQzMkJFKEtbMF0sMCksSS53cml0ZVVJbnQzMkJFKEtb'@;
put 'MV0sNCksSS53cml0ZVVJbnQzMkJFKEtbMl0sOCksSS53cml0ZVVJbnQzMkJFKEtbM10sMTIpLEl9LFIucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbih6KXt2YXIgSz0oej14KHopKVsxXTt6WzFdPXpbM10selszXT1LO3ZhciBJPWxlKHosdGhpcy5faW52S2V5U2NoZWR1bGUsTy5J'@;
put 'TlZfU1VCX01JWCxPLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLGs9YWUuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBrLndyaXRlVUludDMyQkUoSVswXSwwKSxrLndyaXRlVUludDMyQkUoSVszXSw0KSxrLndyaXRlVUludDMyQkUoSVsyXSw4KSxrLndyaXRlVUludDMyQkUoSVsxXSwxMiksa30s'@;
put 'Ui5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXttKHRoaXMuX2tleVNjaGVkdWxlKSxtKHRoaXMuX2ludktleVNjaGVkdWxlKSxtKHRoaXMuX2tleSl9LGF0LmV4cG9ydHMuQUVTPVJ9LDU2MDg3OihhdCxJZSxGKT0+e3ZhciBhZT1GKDY0MDMpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoODY0MjAp'@;
put 'LGxlPUYoNjY2OTgpLE09RigxNTAzKSxPPUYoNjM2MzYpLFI9Rig5MTA3KTtmdW5jdGlvbiBJKGssRSxqLFYpe20uY2FsbCh0aGlzKTt2YXIgQj14LmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBhZS5BRVMoRSk7dmFyIFk9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhCKTt0aGlzLl9n'@;
put 'aGFzaD1uZXcgTShZKSxqPWZ1bmN0aW9uIEsoayxFLGope2lmKDEyPT09RS5sZW5ndGgpcmV0dXJuIGsuX2ZpbklEPXguY29uY2F0KFtFLHguZnJvbShbMCwwLDAsMV0pXSkseC5jb25jYXQoW0UseC5mcm9tKFswLDAsMCwyXSldKTt2YXIgVj1uZXcgTShqKSxCPUUubGVuZ3RoLFk9QiUxNjtW'@;
put 'LnVwZGF0ZShFKSxZJiZWLnVwZGF0ZSh4LmFsbG9jKFk9MTYtWSwwKSksVi51cGRhdGUoeC5hbGxvYyg4LDApKTt2YXIgWD04KkIsVT14LmFsbG9jKDgpO1Uud3JpdGVVSW50QkUoWCwwLDgpLFYudXBkYXRlKFUpLGsuX2ZpbklEPVYuc3RhdGU7dmFyIHE9eC5mcm9tKGsuX2ZpbklEKTtyZXR1'@;
put 'cm4gUihxKSxxfSh0aGlzLGosWSksdGhpcy5fcHJldj14LmZyb20oaiksdGhpcy5fY2FjaGU9eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT14LmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Vix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsdGhpcy5fbW9kZT1rLHRoaXMuX2F1'@;
put 'dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9bGUoSSxtKSxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGspe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBFPTE2LXRoaXMuX2FsZW4lMTY7RTwxNiYmKEU9eC5hbGxvYyhFLDApLHRoaXMuX2doYXNoLnVwZGF0ZShFKSl9'@;
put 'dGhpcy5fY2FsbGVkPSEwO3ZhciBqPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGspO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9rOmopLHRoaXMuX2xlbis9ay5sZW5ndGgsan0sSS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYm'@;
put 'IXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgaz1PKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlz'@;
put 'Ll9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIHooayxFKXt2YXIgaj0wO2subGVuZ3RoIT09RS5sZW5ndGgmJmorKztmb3IodmFyIFY9TWF0aC5taW4oay5sZW5ndGgsRS5sZW5ndGgpLEI9MDtCPFY7KytCKWorPWtbQl1eRVtCXTtyZXR1cm4gan0oayx0aGlzLl9hdXRoVGFn'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9ayx0aGlzLl9jaXBoZXIuc2NydWIoKX0sSS5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCF4Lmlz'@;
put 'QnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sSS5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihFKXtpZighdGhpcy5fZGVjcnlwdCl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1FfSxJLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oRSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQg'@;
put 'QUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEUpLHRoaXMuX2FsZW4rPUUubGVuZ3RofSxhdC5leHBvcnRzPUl9LDgyNDg5OihhdCxJZSxGKT0+e3ZhciBhZT1GKDEyNjg5KSx4PUYoNTAwNDYpLG09Rig0NDk0Nik7SWUuY3JlYXRlQ2lwaGVyPUllLkNpcGhl'@;
put 'cj1hZS5jcmVhdGVDaXBoZXIsSWUuY3JlYXRlQ2lwaGVyaXY9SWUuQ2lwaGVyaXY9YWUuY3JlYXRlQ2lwaGVyaXYsSWUuY3JlYXRlRGVjaXBoZXI9SWUuRGVjaXBoZXI9eC5jcmVhdGVEZWNpcGhlcixJZS5jcmVhdGVEZWNpcGhlcml2PUllLkRlY2lwaGVyaXY9eC5jcmVhdGVEZWNpcGhlcml2'@;
put 'LEllLmxpc3RDaXBoZXJzPUllLmdldENpcGhlcnM9ZnVuY3Rpb24gbGUoKXtyZXR1cm4gT2JqZWN0LmtleXMobSl9fSw1MDA0NjooYXQsSWUsRik9Pnt2YXIgYWU9Rig1NjA4NykseD1GKDg0MykuQnVmZmVyLG09RigxMjQyMSksbGU9Rig4OTM1NCksTT1GKDg2NDIwKSxPPUYoNjQwMyksUj1G'@;
put 'KDM2NTA1KTtmdW5jdGlvbiBLKFYsQixZKXtNLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBPLkFFUyhCKSx0aGlzLl9wcmV2PXguZnJvbShZKSx0aGlzLl9tb2RlPVYsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24g'@;
put 'SSgpe3RoaXMuY2FjaGU9eC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBFKFYsQixZKXt2YXIgWD1tW1YudG9Mb3dlckNhc2UoKV07aWYoIVgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT14LmZyb20oWSkpLCJHQ00i'@;
put 'IT09WC5tb2RlJiZZLmxlbmd0aCE9PVguaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitZLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBCJiYoQj14LmZyb20oQikpLEIubGVuZ3RoIT09WC5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtl'@;
put 'eSBsZW5ndGggIitCLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1YLnR5cGU/bmV3IGxlKFgubW9kdWxlLEIsWSwhMCk6ImF1dGgiPT09WC50eXBlP25ldyBhZShYLm1vZHVsZSxCLFksITApOm5ldyBLKFgubW9kdWxlLEIsWSl9Rig2NjY5OCkoSyxNKSxLLnByb3RvdHlwZS5fdXBkYXRlPWZ1'@;
put 'bmN0aW9uKFYpe3RoaXMuX2NhY2hlLmFkZChWKTtmb3IodmFyIEIsWSxYPVtdO0I9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspWT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxCKSxYLnB1c2goWSk7cmV0dXJuIHguY29uY2F0KFgpfSxLLnByb3RvdHlwZS5fZmluYWw9ZnVu'@;
put 'Y3Rpb24oKXt2YXIgVj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBrKFYpe3ZhciBCPVZbMTVdO2lmKEI8MXx8Qj4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIFk9LTE7KytZPEI7KWlm'@;
put 'KFZbWSsoMTYtQildIT09Qil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PUIpcmV0dXJuIFYuc2xpY2UoMCwxNi1CKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVikpO2lmKFYpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBi'@;
put 'bG9jayBsZW5ndGgiKX0sSy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVil7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVix0aGlzfSxJLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVil7dGhpcy5jYWNoZT14LmNvbmNhdChbdGhpcy5jYWNoZSxWXSl9LEkucHJvdG90eXBl'@;
put 'LmdldD1mdW5jdGlvbihWKXt2YXIgQjtpZihWKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gQj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksQn1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gQj10aGlzLmNh'@;
put 'Y2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksQjtyZXR1cm4gbnVsbH0sSS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0sSWUuY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24gaihWLEIp'@;
put 'e3ZhciBZPW1bVi50b0xvd2VyQ2FzZSgpXTtpZighWSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgWD1SKEIsITEsWS5rZXksWS5pdik7cmV0dXJuIEUoVixYLmtleSxYLml2KX0sSWUuY3JlYXRlRGVjaXBoZXJpdj1FfSwxMjY4OTooYXQsSWUsRik9Pnt2'@;
put 'YXIgYWU9RigxMjQyMSkseD1GKDU2MDg3KSxtPUYoODQzKS5CdWZmZXIsbGU9Rig4OTM1NCksTT1GKDg2NDIwKSxPPUYoNjQwMyksUj1GKDM2NTA1KTtmdW5jdGlvbiBLKFYsQixZKXtNLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGssdGhpcy5fY2lwaGVyPW5ldyBPLkFFUyhCKSx0aGlz'@;
put 'Ll9wcmV2PW0uZnJvbShZKSx0aGlzLl9tb2RlPVYsdGhpcy5fYXV0b3BhZGRpbmc9ITB9Rig2NjY5OCkoSyxNKSxLLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFYpe3RoaXMuX2NhY2hlLmFkZChWKTtmb3IodmFyIEIsWSxYPVtdO0I9dGhpcy5fY2FjaGUuZ2V0KCk7KVk9dGhpcy5fbW9k'@;
put 'ZS5lbmNyeXB0KHRoaXMsQiksWC5wdXNoKFkpO3JldHVybiBtLmNvbmNhdChYKX07dmFyIEk9bS5hbGxvYygxNiwxNik7ZnVuY3Rpb24gaygpe3RoaXMuY2FjaGU9bS5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBFKFYsQixZKXt2YXIgWD1hZVtWLnRvTG93ZXJDYXNlKCldO2lmKCFYKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgQiYmKEI9bS5mcm9tKEIpKSxCLmxlbmd0aCE9PVgua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrQi5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2Yg'@;
put 'WSYmKFk9bS5mcm9tKFkpKSwiR0NNIiE9PVgubW9kZSYmWS5sZW5ndGghPT1YLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09WC50eXBlP25ldyBsZShYLm1vZHVsZSxCLFkpOiJhdXRoIj09PVgudHlwZT9uZXcg'@;
put 'eChYLm1vZHVsZSxCLFkpOm5ldyBLKFgubW9kdWxlLEIsWSl9Sy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gVj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxWKSx0aGlzLl9jaXBoZXIuc2Ny'@;
put 'dWIoKSxWO2lmKCFWLmVxdWFscyhJKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxLLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFW'@;
put 'LHRoaXN9LGsucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXt0aGlzLmNhY2hlPW0uY29uY2F0KFt0aGlzLmNhY2hlLFZdKX0say5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBWPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMu'@;
put 'Y2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksVn1yZXR1cm4gbnVsbH0say5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFY9MTYtdGhpcy5jYWNoZS5sZW5ndGgsQj1tLmFsbG9jVW5zYWZlKFYpLFk9LTE7KytZPFY7KUIud3JpdGVVSW50OChWLFkpO3JldHVybiBtLmNvbmNh'@;
put 'dChbdGhpcy5jYWNoZSxCXSl9LEllLmNyZWF0ZUNpcGhlcml2PUUsSWUuY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uIGooVixCKXt2YXIgWT1hZVtWLnRvTG93ZXJDYXNlKCldO2lmKCFZKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBYPVIoQiwhMSxZLmtleSxZ'@;
put 'Lml2KTtyZXR1cm4gRShWLFgua2V5LFguaXYpfX0sMTUwMzooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PWFlLmFsbG9jKDE2LDApO2Z1bmN0aW9uIGxlKE8pe3ZhciBSPWFlLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gUi53cml0ZVVJbnQzMkJFKE9bMF0+Pj4wLDApLFIud3Jp'@;
put 'dGVVSW50MzJCRShPWzFdPj4+MCw0KSxSLndyaXRlVUludDMyQkUoT1syXT4+PjAsOCksUi53cml0ZVVJbnQzMkJFKE9bM10+Pj4wLDEyKSxSfWZ1bmN0aW9uIE0oTyl7dGhpcy5oPU8sdGhpcy5zdGF0ZT1hZS5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPWFlLmFsbG9jVW5zYWZlKDApfU0ucHJv'@;
put 'dG90eXBlLmdoYXNoPWZ1bmN0aW9uKE8pe2Zvcih2YXIgUj0tMTsrK1I8Ty5sZW5ndGg7KXRoaXMuc3RhdGVbUl1ePU9bUl07dGhpcy5fbXVsdGlwbHkoKX0sTS5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB6LEksTz1mdW5jdGlvbiBtKE8pe3JldHVybltPLnJlYWRV'@;
put 'SW50MzJCRSgwKSxPLnJlYWRVSW50MzJCRSg0KSxPLnJlYWRVSW50MzJCRSg4KSxPLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLFI9WzAsMCwwLDBdLGs9LTE7KytrPDEyODspe2ZvcigwIT0odGhpcy5zdGF0ZVt+fihrLzgpXSYxPDw3LWslOCkmJihSWzBdXj1PWzBdLFJbMV1ePU9bMV0s'@;
put 'UlsyXV49T1syXSxSWzNdXj1PWzNdKSxJPTAhPSgxJk9bM10pLHo9Mzt6PjA7ei0tKU9bel09T1t6XT4+PjF8KDEmT1t6LTFdKTw8MzE7T1swXT1PWzBdPj4+MSxJJiYoT1swXT1PWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9bGUoUil9LE0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihPKXt0'@;
put 'aGlzLmNhY2hlPWFlLmNvbmNhdChbdGhpcy5jYWNoZSxPXSk7Zm9yKHZhciBSO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspUj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChSKX0sTS5wcm90b3R5cGUuZmluYWw9ZnVuY3Rp'@;
put 'b24oTyxSKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goYWUuY29uY2F0KFt0aGlzLmNhY2hlLHhdLDE2KSksdGhpcy5naGFzaChsZShbMCxPLDAsUl0pKSx0aGlzLnN0YXRlfSxhdC5leHBvcnRzPU19LDkxMDc6YXQ9PnthdC5leHBvcnRzPWZ1bmN0aW9uIEllKEYpe2Zv'@;
put 'cih2YXIgeCxhZT1GLmxlbmd0aDthZS0tOyl7aWYoMjU1IT09KHg9Ri5yZWFkVUludDgoYWUpKSl7eCsrLEYud3JpdGVVSW50OCh4LGFlKTticmVha31GLndyaXRlVUludDgoMCxhZSl9fX0sMzExNzU6KGF0LEllLEYpPT57dmFyIGFlPUYoNjM2MzYpO0llLmVuY3J5cHQ9ZnVuY3Rpb24oeCxt'@;
put 'KXt2YXIgbGU9YWUobSx4Ll9wcmV2KTtyZXR1cm4geC5fcHJldj14Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGxlKSx4Ll9wcmV2fSxJZS5kZWNyeXB0PWZ1bmN0aW9uKHgsbSl7dmFyIGxlPXguX3ByZXY7eC5fcHJldj1tO3ZhciBNPXguX2NpcGhlci5kZWNyeXB0QmxvY2sobSk7cmV0dXJuIGFl'@;
put 'KE0sbGUpfX0sNDM2MzE6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDYzNjM2KTtmdW5jdGlvbiBtKGxlLE0sTyl7dmFyIFI9TS5sZW5ndGgsej14KE0sbGUuX2NhY2hlKTtyZXR1cm4gbGUuX2NhY2hlPWxlLl9jYWNoZS5zbGljZShSKSxsZS5fcHJldj1hZS5jb25jYXQo'@;
put 'W2xlLl9wcmV2LE8/TTp6XSksen1JZS5lbmNyeXB0PWZ1bmN0aW9uKGxlLE0sTyl7Zm9yKHZhciB6LFI9YWUuYWxsb2NVbnNhZmUoMCk7TS5sZW5ndGg7KXtpZigwPT09bGUuX2NhY2hlLmxlbmd0aCYmKGxlLl9jYWNoZT1sZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhsZS5fcHJldiksbGUuX3By'@;
put 'ZXY9YWUuYWxsb2NVbnNhZmUoMCkpLCEobGUuX2NhY2hlLmxlbmd0aDw9TS5sZW5ndGgpKXtSPWFlLmNvbmNhdChbUixtKGxlLE0sTyldKTticmVha31SPWFlLmNvbmNhdChbUixtKGxlLE0uc2xpY2UoMCx6PWxlLl9jYWNoZS5sZW5ndGgpLE8pXSksTT1NLnNsaWNlKHopfXJldHVybiBSfX0s'@;
put 'MzM4OTI6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24geChsZSxNLE8pe2Zvcih2YXIgayxFLHo9LTEsST0wOysrejw4OylJKz0oMTI4JihFPWxlLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGxlLl9wcmV2KVswXV4oaz1NJjE8PDctej8xMjg6MCkpKT4+eiU4LGxlLl9w'@;
put 'cmV2PW0obGUuX3ByZXYsTz9rOkUpO3JldHVybiBJfWZ1bmN0aW9uIG0obGUsTSl7dmFyIE89bGUubGVuZ3RoLFI9LTEsej1hZS5hbGxvY1Vuc2FmZShsZS5sZW5ndGgpO2ZvcihsZT1hZS5jb25jYXQoW2xlLGFlLmZyb20oW01dKV0pOysrUjxPOyl6W1JdPWxlW1JdPDwxfGxlW1IrMV0+Pjc7'@;
put 'cmV0dXJuIHp9SWUuZW5jcnlwdD1mdW5jdGlvbihsZSxNLE8pe2Zvcih2YXIgUj1NLmxlbmd0aCx6PWFlLmFsbG9jVW5zYWZlKFIpLEs9LTE7KytLPFI7KXpbS109eChsZSxNW0tdLE8pO3JldHVybiB6fX0sMzY3ODc6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24g'@;
put 'eChtLGxlLE0pe3ZhciBSPW0uX2NpcGhlci5lbmNyeXB0QmxvY2sobS5fcHJldilbMF1ebGU7cmV0dXJuIG0uX3ByZXY9YWUuY29uY2F0KFttLl9wcmV2LnNsaWNlKDEpLGFlLmZyb20oW00/bGU6Ul0pXSksUn1JZS5lbmNyeXB0PWZ1bmN0aW9uKG0sbGUsTSl7Zm9yKHZhciBPPWxlLmxlbmd0'@;
put 'aCxSPWFlLmFsbG9jVW5zYWZlKE8pLHo9LTE7Kyt6PE87KVJbel09eChtLGxlW3pdLE0pO3JldHVybiBSfX0sODUyNjg6KGF0LEllLEYpPT57dmFyIGFlPUYoNjM2MzYpLHg9Rig4NDMpLkJ1ZmZlcixtPUYoOTEwNyk7ZnVuY3Rpb24gbGUoTyl7dmFyIFI9Ty5fY2lwaGVyLmVuY3J5cHRCbG9j'@;
put 'a1JhdyhPLl9wcmV2KTtyZXR1cm4gbShPLl9wcmV2KSxSfUllLmVuY3J5cHQ9ZnVuY3Rpb24oTyxSKXt2YXIgej1NYXRoLmNlaWwoUi5sZW5ndGgvMTYpLEs9Ty5fY2FjaGUubGVuZ3RoO08uX2NhY2hlPXguY29uY2F0KFtPLl9jYWNoZSx4LmFsbG9jVW5zYWZlKDE2KnopXSk7Zm9yKHZhciBJ'@;
put 'PTA7STx6O0krKyl7dmFyIGs9bGUoTyksRT1LKzE2Kkk7Ty5fY2FjaGUud3JpdGVVSW50MzJCRShrWzBdLEUrMCksTy5fY2FjaGUud3JpdGVVSW50MzJCRShrWzFdLEUrNCksTy5fY2FjaGUud3JpdGVVSW50MzJCRShrWzJdLEUrOCksTy5fY2FjaGUud3JpdGVVSW50MzJCRShrWzNdLEUrMTIp'@;
put 'fXZhciBqPU8uX2NhY2hlLnNsaWNlKDAsUi5sZW5ndGgpO3JldHVybiBPLl9jYWNoZT1PLl9jYWNoZS5zbGljZShSLmxlbmd0aCksYWUoUixqKX19LDQ1OTk1OihhdCxJZSk9PntJZS5lbmNyeXB0PWZ1bmN0aW9uKEYsYWUpe3JldHVybiBGLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGFlKX0sSWUu'@;
put 'ZGVjcnlwdD1mdW5jdGlvbihGLGFlKXtyZXR1cm4gRi5fY2lwaGVyLmRlY3J5cHRCbG9jayhhZSl9fSwxMjQyMTooYXQsSWUsRik9Pnt2YXIgYWU9e0VDQjpGKDQ1OTk1KSxDQkM6RigzMTE3NSksQ0ZCOkYoNDM2MzEpLENGQjg6RigzNjc4NyksQ0ZCMTpGKDMzODkyKSxPRkI6RigzNDUzMiks'@;
put 'Q1RSOkYoODUyNjgpLEdDTTpGKDg1MjY4KX0seD1GKDQ0OTQ2KTtmb3IodmFyIG0gaW4geCl4W21dLm1vZHVsZT1hZVt4W21dLm1vZGVdO2F0LmV4cG9ydHM9eH0sMzQ1MzI6KGF0LEllLEYpPT57dmFyIGFlPUYoNjM2MzYpO2Z1bmN0aW9uIHgobSl7cmV0dXJuIG0uX3ByZXY9bS5fY2lwaGVy'@;
put 'LmVuY3J5cHRCbG9jayhtLl9wcmV2KSxtLl9wcmV2fUllLmVuY3J5cHQ9ZnVuY3Rpb24obSxsZSl7Zm9yKDttLl9jYWNoZS5sZW5ndGg8bGUubGVuZ3RoOyltLl9jYWNoZT1CdWZmZXIuY29uY2F0KFttLl9jYWNoZSx4KG0pXSk7dmFyIE09bS5fY2FjaGUuc2xpY2UoMCxsZS5sZW5ndGgpO3Jl'@;
put 'dHVybiBtLl9jYWNoZT1tLl9jYWNoZS5zbGljZShsZS5sZW5ndGgpLGFlKGxlLE0pfX0sODkzNTQ6KGF0LEllLEYpPT57dmFyIGFlPUYoNjQwMykseD1GKDg0MykuQnVmZmVyLG09Rig4NjQyMCk7ZnVuY3Rpb24gTShPLFIseixLKXttLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBhZS5B'@;
put 'RVMoUiksdGhpcy5fcHJldj14LmZyb20oeiksdGhpcy5fY2FjaGU9eC5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT14LmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Syx0aGlzLl9tb2RlPU99Rig2NjY5OCkoTSxtKSxNLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe3Jl'@;
put 'dHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxPLHRoaXMuX2RlY3J5cHQpfSxNLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sYXQuZXhwb3J0cz1NfSwyNTYwMDooYXQsSWUsRik9Pnt2YXIgYWU9RigxNDk0OCkseD1GKDgyNDg5KSxtPUYoMTI0'@;
put 'MjEpLGxlPUYoODk0MDIpLE09RigzNjUwNSk7ZnVuY3Rpb24geihrLEUsail7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlyZXR1cm4geC5jcmVhdGVDaXBoZXJpdihrLEUsaik7aWYobGVba10pcmV0dXJuIG5ldyBhZSh7a2V5OkUsaXY6aixtb2RlOmt9KTt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiBLKGssRSxqKXtpZihrPWsudG9Mb3dlckNhc2UoKSxtW2tdKXJldHVybiB4LmNyZWF0ZURlY2lwaGVyaXYoayxFLGopO2lmKGxlW2tdKXJldHVybiBuZXcgYWUoe2tleTpFLGl2OmosbW9kZTprLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1JZS5jcmVhdGVDaXBoZXI9SWUuQ2lwaGVyPWZ1bmN0aW9uIE8oayxFKXt2YXIgaixWO2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10paj1tW2tdLmtleSxWPW1ba10uaXY7ZWxzZXtpZighbGVba10pdGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'aW52YWxpZCBzdWl0ZSB0eXBlIik7aj04KmxlW2tdLmtleSxWPWxlW2tdLml2fXZhciBCPU0oRSwhMSxqLFYpO3JldHVybiB6KGssQi5rZXksQi5pdil9LEllLmNyZWF0ZUNpcGhlcml2PUllLkNpcGhlcml2PXosSWUuY3JlYXRlRGVjaXBoZXI9SWUuRGVjaXBoZXI9ZnVuY3Rpb24gUihrLEUp'@;
put 'e3ZhciBqLFY7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlqPW1ba10ua2V5LFY9bVtrXS5pdjtlbHNle2lmKCFsZVtrXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtqPTgqbGVba10ua2V5LFY9bGVba10uaXZ9dmFyIEI9TShFLCExLGosVik7cmV0dXJuIEso'@;
put 'ayxCLmtleSxCLml2KX0sSWUuY3JlYXRlRGVjaXBoZXJpdj1JZS5EZWNpcGhlcml2PUssSWUubGlzdENpcGhlcnM9SWUuZ2V0Q2lwaGVycz1mdW5jdGlvbiBJKCl7cmV0dXJuIE9iamVjdC5rZXlzKGxlKS5jb25jYXQoeC5nZXRDaXBoZXJzKCkpfX0sMTQ5NDg6KGF0LEllLEYpPT57dmFyIGFl'@;
put 'PUYoODY0MjApLHg9Rig0MDEzMiksbT1GKDY2Njk4KSxsZT1GKDg0MykuQnVmZmVyLE09eyJkZXMtZWRlMy1jYmMiOnguQ0JDLmluc3RhbnRpYXRlKHguRURFKSwiZGVzLWVkZTMiOnguRURFLCJkZXMtZWRlLWNiYyI6eC5DQkMuaW5zdGFudGlhdGUoeC5FREUpLCJkZXMtZWRlIjp4LkVERSwi'@;
put 'ZGVzLWNiYyI6eC5DQkMuaW5zdGFudGlhdGUoeC5ERVMpLCJkZXMtZWNiIjp4LkRFU307ZnVuY3Rpb24gTyhSKXthZS5jYWxsKHRoaXMpO3ZhciBJLHo9Ui5tb2RlLnRvTG93ZXJDYXNlKCksSz1NW3pdO0k9Ui5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIGs9Ui5rZXk7bGUuaXNC'@;
put 'dWZmZXIoayl8fChrPWxlLmZyb20oaykpLCgiZGVzLWVkZSI9PT16fHwiZGVzLWVkZS1jYmMiPT09eikmJihrPWxlLmNvbmNhdChbayxrLnNsaWNlKDAsOCldKSk7dmFyIEU9Ui5pdjtsZS5pc0J1ZmZlcihFKXx8KEU9bGUuZnJvbShFKSksdGhpcy5fZGVzPUsuY3JlYXRlKHtrZXk6ayxpdjpF'@;
put 'LHR5cGU6SX0pfU0uZGVzPU1bImRlcy1jYmMiXSxNLmRlczM9TVsiZGVzLWVkZTMtY2JjIl0sYXQuZXhwb3J0cz1PLG0oTyxhZSksTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihSKXtyZXR1cm4gbGUuZnJvbSh0aGlzLl9kZXMudXBkYXRlKFIpKX0sTy5wcm90b3R5cGUuX2ZpbmFsPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIGxlLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sODk0MDI6KGF0LEllKT0+e0llWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LEllWyJkZXMtY2JjIl09SWUuZGVzPXtrZXk6OCxpdjo4fSxJZVsiZGVzLWVkZTMtY2JjIl09SWUuZGVzMz17a2V5OjI0LGl2Ojh9LEll'@;
put 'WyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0sSWVbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxJZVsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDcxOTQ2OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYyNjYyKSx4PUYoNDQwMTkpO2Z1bmN0aW9uIGxlKE8pe3ZhciB6LFI9Ty5tb2R1bHVz'@;
put 'LmJ5dGVMZW5ndGgoKTtkb3t6PW5ldyBhZSh4KFIpKX13aGlsZSh6LmNtcChPLm1vZHVsdXMpPj0wfHwhei51bW9kKE8ucHJpbWUxKXx8IXoudW1vZChPLnByaW1lMikpO3JldHVybiB6fWZ1bmN0aW9uIE0oTyxSKXt2YXIgej1mdW5jdGlvbiBtKE8pe3ZhciBSPWxlKE8pO3JldHVybntibGlu'@;
put 'ZGVyOlIudG9SZWQoYWUubW9udChPLm1vZHVsdXMpKS5yZWRQb3cobmV3IGFlKE8ucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCksdW5ibGluZGVyOlIuaW52bShPLm1vZHVsdXMpfX0oUiksSz1SLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEk9bmV3IGFlKE8pLm11bCh6LmJsaW5kZXIpLnVtb2Qo'@;
put 'Ui5tb2R1bHVzKSxrPUkudG9SZWQoYWUubW9udChSLnByaW1lMSkpLEU9SS50b1JlZChhZS5tb250KFIucHJpbWUyKSksaj1SLmNvZWZmaWNpZW50LFY9Ui5wcmltZTEsQj1SLnByaW1lMixZPWsucmVkUG93KFIuZXhwb25lbnQxKS5mcm9tUmVkKCksWD1FLnJlZFBvdyhSLmV4cG9uZW50Miku'@;
put 'ZnJvbVJlZCgpLFU9WS5pc3ViKFgpLmltdWwoaikudW1vZChWKS5pbXVsKEIpO3JldHVybiBYLmlhZGQoVSkuaW11bCh6LnVuYmxpbmRlcikudW1vZChSLm1vZHVsdXMpLnRvQXJyYXlMaWtlKEJ1ZmZlciwiYmUiLEspfU0uZ2V0cj1sZSxhdC5leHBvcnRzPU19LDgxNjk5OihhdCxJZSxGKT0+'@;
put 'eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUYoNzUyMDcpfSwyNzY4NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDk2MzYyKSxtPUYoOTY3NDUpLGxlPUYoNjY2OTgpLE09Rig2MzYwMiksTz1GKDUxMTczKSxSPUYoNzUyMDcpO2Z1bmN0aW9uIHoo'@;
put 'RSl7bS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBqPVJbRV07aWYoIWopdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9ai5oYXNoLHRoaXMuX2hhc2g9eChqLmhhc2gpLHRoaXMuX3RhZz1qLmlkLHRoaXMuX3NpZ25UeXBlPWouc2lnbn1m'@;
put 'dW5jdGlvbiBLKEUpe20uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgaj1SW0VdO2lmKCFqKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9eChqLmhhc2gpLHRoaXMuX3RhZz1qLmlkLHRoaXMuX3NpZ25UeXBlPWouc2lnbn1mdW5jdGlvbiBJKEUp'@;
put 'e3JldHVybiBuZXcgeihFKX1mdW5jdGlvbiBrKEUpe3JldHVybiBuZXcgSyhFKX1PYmplY3Qua2V5cyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEUpe1JbRV0uaWQ9YWUuZnJvbShSW0VdLmlkLCJoZXgiKSxSW0UudG9Mb3dlckNhc2UoKV09UltFXX0pLGxlKHosbS5Xcml0YWJsZSksei5wcm90b3R5'@;
put 'cGUuX3dyaXRlPWZ1bmN0aW9uKGosVixCKXt0aGlzLl9oYXNoLnVwZGF0ZShqKSxCKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihqLFYpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIGo/YWUuZnJvbShqLFYpOmopLHRoaXN9LHoucHJvdG90eXBlLnNp'@;
put 'Z249ZnVuY3Rpb24oaixWKXt0aGlzLmVuZCgpO3ZhciBCPXRoaXMuX2hhc2guZGlnZXN0KCksWT1NKEIsaix0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBWP1kudG9TdHJpbmcoVik6WX0sbGUoSyxtLldyaXRhYmxlKSxLLnByb3RvdHlwZS5fd3JpdGU9'@;
put 'ZnVuY3Rpb24oaixWLEIpe3RoaXMuX2hhc2gudXBkYXRlKGopLEIoKX0sSy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGosVil7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2Ygaj9hZS5mcm9tKGosVik6aiksdGhpc30sSy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0'@;
put 'aW9uKGosVixCKXt2YXIgWT0ic3RyaW5nIj09dHlwZW9mIFY/YWUuZnJvbShWLEIpOlY7dGhpcy5lbmQoKTt2YXIgWD10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBPKFksWCxqLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LGF0LmV4cG9ydHM9e1NpZ246SSxWZXJpZnk6ayxjcmVhdGVT'@;
put 'aWduOkksY3JlYXRlVmVyaWZ5Omt9fSw2MzYwMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDg1ODI1KSxtPUYoNzE5NDYpLGxlPUYoODg2NTEpLmVjLE09Rig2MjY2MiksTz1GKDg3OTgzKSxSPUYoMTMwOCk7ZnVuY3Rpb24gaihVLHEsZWUsdGUp'@;
put 'e2lmKChVPWFlLmZyb20oVS50b0FycmF5KCkpKS5sZW5ndGg8cS5ieXRlTGVuZ3RoKCkpe3ZhciBvZT1hZS5hbGxvYyhxLmJ5dGVMZW5ndGgoKS1VLmxlbmd0aCk7VT1hZS5jb25jYXQoW29lLFVdKX12YXIgc2U9ZWUubGVuZ3RoLGhlPWZ1bmN0aW9uIEIoVSxxKXtVPShVPVYoVSxxKSkubW9k'@;
put 'KHEpO3ZhciBlZT1hZS5mcm9tKFUudG9BcnJheSgpKTtpZihlZS5sZW5ndGg8cS5ieXRlTGVuZ3RoKCkpe3ZhciB0ZT1hZS5hbGxvYyhxLmJ5dGVMZW5ndGgoKS1lZS5sZW5ndGgpO2VlPWFlLmNvbmNhdChbdGUsZWVdKX1yZXR1cm4gZWV9KGVlLHEpLHVlPWFlLmFsbG9jKHNlKTt1ZS5maWxs'@;
put 'KDEpO3ZhciBjZT1hZS5hbGxvYyhzZSk7cmV0dXJuIGNlPXgodGUsY2UpLnVwZGF0ZSh1ZSkudXBkYXRlKGFlLmZyb20oWzBdKSkudXBkYXRlKFUpLnVwZGF0ZShoZSkuZGlnZXN0KCksdWU9eCh0ZSxjZSkudXBkYXRlKHVlKS5kaWdlc3QoKSx7azpjZT14KHRlLGNlKS51cGRhdGUodWUpLnVw'@;
put 'ZGF0ZShhZS5mcm9tKFsxXSkpLnVwZGF0ZShVKS51cGRhdGUoaGUpLmRpZ2VzdCgpLHY6dWU9eCh0ZSxjZSkudXBkYXRlKHVlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVihVLHEpe3ZhciBlZT1uZXcgTShVKSx0ZT0oVS5sZW5ndGg8PDMpLXEuYml0TGVuZ3RoKCk7cmV0dXJuIHRlPjAmJmVlLmlz'@;
put 'aHJuKHRlKSxlZX1mdW5jdGlvbiBZKFUscSxlZSl7dmFyIHRlLG9lO2Rve2Zvcih0ZT1hZS5hbGxvYygwKTs4KnRlLmxlbmd0aDxVLmJpdExlbmd0aCgpOylxLnY9eChlZSxxLmspLnVwZGF0ZShxLnYpLmRpZ2VzdCgpLHRlPWFlLmNvbmNhdChbdGUscS52XSk7b2U9Vih0ZSxVKSxxLms9eChl'@;
put 'ZSxxLmspLnVwZGF0ZShxLnYpLnVwZGF0ZShhZS5mcm9tKFswXSkpLmRpZ2VzdCgpLHEudj14KGVlLHEuaykudXBkYXRlKHEudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1vZS5jbXAoVSkpO3JldHVybiBvZX1mdW5jdGlvbiBYKFUscSxlZSx0ZSl7cmV0dXJuIFUudG9SZWQoTS5tb250KGVlKSku'@;
put 'cmVkUG93KHEpLmZyb21SZWQoKS5tb2QodGUpfWF0LmV4cG9ydHM9ZnVuY3Rpb24gSyhVLHEsZWUsdGUsb2Upe3ZhciBzZT1PKHEpO2lmKHNlLmN1cnZlKXtpZigiZWNkc2EiIT09dGUmJiJlY2RzYS9yc2EiIT09dGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIEkoVSxxKXt2YXIgZWU9UltxLmN1cnZlLmpvaW4oIi4iKV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK3EuY3VydmUuam9pbigiLiIpKTt2YXIgc2U9bmV3IGxlKGVlKS5rZXlGcm9tUHJpdmF0ZShxLnByaXZhdGVLZXkpLnNpZ24oVSk7'@;
put 'cmV0dXJuIGFlLmZyb20oc2UudG9ERVIoKSl9KFUsc2UpfWlmKCJkc2EiPT09c2UudHlwZSl7aWYoImRzYSIhPT10ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gayhVLHEsZWUpe2Zvcih2YXIgY2UsdGU9cS5wYXJhbXMucHJpdl9r'@;
put 'ZXksb2U9cS5wYXJhbXMucCxzZT1xLnBhcmFtcy5xLGhlPXEucGFyYW1zLmcsdWU9bmV3IE0oMCksRz1WKFUsc2UpLm1vZChzZSksYj0hMSxEPWoodGUsc2UsVSxlZSk7ITE9PT1iOyl1ZT1YKGhlLGNlPVkoc2UsRCxlZSksb2Usc2UpLDA9PT0oYj1jZS5pbnZtKHNlKS5pbXVsKEcuYWRkKHRl'@;
put 'Lm11bCh1ZSkpKS5tb2Qoc2UpKS5jbXBuKDApJiYoYj0hMSx1ZT1uZXcgTSgwKSk7cmV0dXJuIGZ1bmN0aW9uIEUoVSxxKXtVPVUudG9BcnJheSgpLHE9cS50b0FycmF5KCksMTI4JlVbMF0mJihVPVswXS5jb25jYXQoVSkpLDEyOCZxWzBdJiYocT1bMF0uY29uY2F0KHEpKTt2YXIgdGU9WzQ4'@;
put 'LFUubGVuZ3RoK3EubGVuZ3RoKzQsMixVLmxlbmd0aF07cmV0dXJuIHRlPXRlLmNvbmNhdChVLFsyLHEubGVuZ3RoXSxxKSxhZS5mcm9tKHRlKX0odWUsYil9KFUsc2UsZWUpfWlmKCJyc2EiIT09dGUmJiJlY2RzYS9yc2EiIT09dGUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtl'@;
put 'eSB0eXBlIik7aWYodm9pZCAwIT09cS5wYWRkaW5nJiYxIT09cS5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtVPWFlLmNvbmNhdChbb2UsVV0pO2Zvcih2YXIgaGU9c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksdWU9WzAsMV07'@;
put 'VS5sZW5ndGgrdWUubGVuZ3RoKzE8aGU7KXVlLnB1c2goMjU1KTt1ZS5wdXNoKDApO2Zvcih2YXIgY2U9LTE7KytjZTxVLmxlbmd0aDspdWUucHVzaChVW2NlXSk7cmV0dXJuIG0odWUsc2UpfSxhdC5leHBvcnRzLmdldEtleT1qLGF0LmV4cG9ydHMubWFrZUtleT1ZfSw1MTE3MzooYXQsSWUs'@;
put 'Rik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDYyNjYyKSxtPUYoODg2NTEpLmVjLGxlPUYoODc5ODMpLE09RigxMzA4KTtmdW5jdGlvbiBLKEksayl7aWYoSS5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKTtpZihJLmNtcChrKT49MCl0'@;
put 'aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIil9YXQuZXhwb3J0cz1mdW5jdGlvbiBPKEksayxFLGosVil7dmFyIEI9bGUoRSk7aWYoImVjIj09PUIudHlwZSl7aWYoImVjZHNhIiE9PWomJiJlY2RzYS9yc2EiIT09ail0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIp'@;
put 'O3JldHVybiBmdW5jdGlvbiBSKEksayxFKXt2YXIgaj1NW0UuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighail0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitFLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBtKGopLnZlcmlmeShr'@;
put 'LEksRS5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShJLGssQil9aWYoImRzYSI9PT1CLnR5cGUpe2lmKCJkc2EiIT09ail0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiB6KEksayxFKXt2YXIgaj1FLmRhdGEucCxWPUUuZGF0YS5x'@;
put 'LEI9RS5kYXRhLmcsWT1FLmRhdGEucHViX2tleSxYPWxlLnNpZ25hdHVyZS5kZWNvZGUoSSwiZGVyIiksVT1YLnMscT1YLnI7SyhVLFYpLEsocSxWKTt2YXIgZWU9eC5tb250KGopLHRlPVUuaW52bShWKTtyZXR1cm4gMD09PUIudG9SZWQoZWUpLnJlZFBvdyhuZXcgeChrKS5tdWwodGUpLm1v'@;
put 'ZChWKSkuZnJvbVJlZCgpLm11bChZLnRvUmVkKGVlKS5yZWRQb3cocS5tdWwodGUpLm1vZChWKSkuZnJvbVJlZCgpKS5tb2QoaikubW9kKFYpLmNtcChxKX0oSSxrLEIpfWlmKCJyc2EiIT09aiYmImVjZHNhL3JzYSIhPT1qKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBl'@;
put 'Iik7az1hZS5jb25jYXQoW1Ysa10pO2Zvcih2YXIgWT1CLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFg9WzFdLFU9MDtrLmxlbmd0aCtYLmxlbmd0aCsyPFk7KVgucHVzaCgyNTUpLFUrPTE7WC5wdXNoKDApO2Zvcih2YXIgcT0tMTsrK3E8ay5sZW5ndGg7KVgucHVzaChrW3FdKTtYPWFlLmZyb20o'@;
put 'WCk7dmFyIGVlPXgubW9udChCLm1vZHVsdXMpO0k9KEk9bmV3IHgoSSkudG9SZWQoZWUpKS5yZWRQb3cobmV3IHgoQi5wdWJsaWNFeHBvbmVudCkpLEk9YWUuZnJvbShJLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciB0ZT1VPDg/MTowO2ZvcihZPU1hdGgubWluKEkubGVuZ3RoLFgubGVuZ3Ro'@;
put 'KSxJLmxlbmd0aCE9PVgubGVuZ3RoJiYodGU9MSkscT0tMTsrK3E8WTspdGV8PUlbcV1eWFtxXTtyZXR1cm4gMD09PXRlfX0sNjM2MzY6YXQ9PnthdC5leHBvcnRzPWZ1bmN0aW9uKEYsYWUpe2Zvcih2YXIgeD1NYXRoLm1pbihGLmxlbmd0aCxhZS5sZW5ndGgpLG09bmV3IEJ1ZmZlcih4KSxs'@;
put 'ZT0wO2xlPHg7KytsZSltW2xlXT1GW2xlXV5hZVtsZV07cmV0dXJuIG19fSwzOTAwNzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoOTkxOSkseD1GKDIyNjAxKSxtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJv'@;
put 'bC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtJZS5CdWZmZXI9UixJZS5TbG93QnVmZmVyPWZ1bmN0aW9uIFUoUGUpe3JldHVybitQZSE9UGUmJihQZT0wKSxSLmFsbG9jKCtQZSl9LEllLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBsZT0yMTQ3NDgzNjQ3O2Z1bmN0'@;
put 'aW9uIE8oUGUpe2lmKFBlPmxlKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrUGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciBiZT1uZXcgVWludDhBcnJheShQZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihiZSxSLnByb3RvdHlwZSksYmV9'@;
put 'ZnVuY3Rpb24gUihQZSxiZSxBZSl7aWYoIm51bWJlciI9PXR5cGVvZiBQZSl7aWYoInN0cmluZyI9PXR5cGVvZiBiZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4g'@;
put 'ayhQZSl9cmV0dXJuIHooUGUsYmUsQWUpfWZ1bmN0aW9uIHooUGUsYmUsQWUpe2lmKCJzdHJpbmciPT10eXBlb2YgUGUpcmV0dXJuIGZ1bmN0aW9uIEUoUGUsYmUpe2lmKCgic3RyaW5nIiE9dHlwZW9mIGJlfHwiIj09PWJlKSYmKGJlPSJ1dGY4IiksIVIuaXNFbmNvZGluZyhiZSkpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitiZSk7dmFyIEFlPTB8cShQZSxiZSksVGU9TyhBZSkscWU9VGUud3JpdGUoUGUsYmUpO3JldHVybiBxZSE9PUFlJiYoVGU9VGUuc2xpY2UoMCxxZSkpLFRlfShQZSxiZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFBlKSlyZXR1cm4g'@;
put 'ZnVuY3Rpb24gVihQZSl7aWYoWWUoUGUsVWludDhBcnJheSkpe3ZhciBiZT1uZXcgVWludDhBcnJheShQZSk7cmV0dXJuIEIoYmUuYnVmZmVyLGJlLmJ5dGVPZmZzZXQsYmUuYnl0ZUxlbmd0aCl9cmV0dXJuIGooUGUpfShQZSk7aWYobnVsbD09UGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhl'@;
put 'IGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgUGUpO2lmKFllKFBlLEFycmF5QnVmZmVyKXx8UGUmJlllKFBlLmJ1ZmZlcixBcnJh'@;
put 'eUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihZZShQZSxTaGFyZWRBcnJheUJ1ZmZlcil8fFBlJiZZZShQZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gQihQZSxiZSxBZSk7aWYoIm51bWJlciI9PXR5cGVvZiBQZSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgVGU9UGUudmFsdWVPZiYmUGUudmFsdWVPZigpO2lmKG51bGwhPVRlJiZUZSE9PVBlKXJldHVybiBSLmZyb20oVGUsYmUsQWUpO3ZhciBxZT1mdW5jdGlv'@;
put 'biBZKFBlKXtpZihSLmlzQnVmZmVyKFBlKSl7dmFyIGJlPTB8WChQZS5sZW5ndGgpLEFlPU8oYmUpO3JldHVybiAwPT09QWUubGVuZ3RofHxQZS5jb3B5KEFlLDAsMCxiZSksQWV9cmV0dXJuIHZvaWQgMCE9PVBlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIFBlLmxlbmd0aHx8UWUoUGUubGVu'@;
put 'Z3RoKT9PKDApOmooUGUpOiJCdWZmZXIiPT09UGUudHlwZSYmQXJyYXkuaXNBcnJheShQZS5kYXRhKT9qKFBlLmRhdGEpOnZvaWQgMH0oUGUpO2lmKHFlKXJldHVybiBxZTtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'UGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gUi5mcm9tKFBlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGJlLEFlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIs'@;
put 'IEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBQZSl9ZnVuY3Rpb24gSyhQZSl7aWYoIm51bWJlciIhPXR5cGVvZiBQZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKFBlPDAp'@;
put 'dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytQZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gayhQZSl7cmV0dXJuIEsoUGUpLE8oUGU8MD8wOjB8WChQZSkpfWZ1bmN0aW9uIGooUGUpe2Zvcih2YXIgYmU9UGUubGVuZ3RoPDA/MDowfFgoUGUu'@;
put 'bGVuZ3RoKSxBZT1PKGJlKSxUZT0wO1RlPGJlO1RlKz0xKUFlW1RlXT0yNTUmUGVbVGVdO3JldHVybiBBZX1mdW5jdGlvbiBCKFBlLGJlLEFlKXtpZihiZTwwfHxQZS5ieXRlTGVuZ3RoPGJlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3Vu'@;
put 'ZHMnKTtpZihQZS5ieXRlTGVuZ3RoPGJlKyhBZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBUZTtyZXR1cm4gVGU9dm9pZCAwPT09YmUmJnZvaWQgMD09PUFlP25ldyBVaW50OEFycmF5KFBlKTp2b2lkIDA9PT1B'@;
put 'ZT9uZXcgVWludDhBcnJheShQZSxiZSk6bmV3IFVpbnQ4QXJyYXkoUGUsYmUsQWUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihUZSxSLnByb3RvdHlwZSksVGV9ZnVuY3Rpb24gWChQZSl7aWYoUGU+PWxlKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBs'@;
put 'YXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitsZS50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfFBlfWZ1bmN0aW9uIHEoUGUsYmUpe2lmKFIuaXNCdWZmZXIoUGUpKXJldHVybiBQZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFBlKXx8WWUoUGUsQXJyYXlCdWZmZXIp'@;
put 'KXJldHVybiBQZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgUGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFBl'@;
put 'KTt2YXIgQWU9UGUubGVuZ3RoLFRlPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIVRlJiYwPT09QWUpcmV0dXJuIDA7Zm9yKHZhciBxZT0hMTs7KXN3aXRjaChiZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQWU7Y2FzZSJ1'@;
put 'dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRmUoUGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqQWU7Y2FzZSJoZXgiOnJldHVybiBBZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBXZShQZSkubGVuZ3RoO2RlZmF1'@;
put 'bHQ6aWYocWUpcmV0dXJuIFRlPy0xOkZlKFBlKS5sZW5ndGg7YmU9KCIiK2JlKS50b0xvd2VyQ2FzZSgpLHFlPSEwfX1mdW5jdGlvbiBlZShQZSxiZSxBZSl7dmFyIFRlPSExO2lmKCh2b2lkIDA9PT1iZXx8YmU8MCkmJihiZT0wKSxiZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1BZXx8QWU+'@;
put 'dGhpcy5sZW5ndGgpJiYoQWU9dGhpcy5sZW5ndGgpLEFlPD0wKXx8KEFlPj4+PTApPD0oYmU+Pj49MCkpcmV0dXJuIiI7Zm9yKFBlfHwoUGU9InV0ZjgiKTs7KXN3aXRjaChQZSl7Y2FzZSJoZXgiOnJldHVybiB2KHRoaXMsYmUsQWUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEgo'@;
put 'dGhpcyxiZSxBZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIEModGhpcyxiZSxBZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gUyh0aGlzLGJlLEFlKTtjYXNlImJhc2U2NCI6cmV0dXJuIEQodGhpcyxiZSxBZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNh'@;
put 'c2UidXRmLTE2bGUiOnJldHVybiBwKHRoaXMsYmUsQWUpO2RlZmF1bHQ6aWYoVGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitQZSk7UGU9KFBlKyIiKS50b0xvd2VyQ2FzZSgpLFRlPSEwfX1mdW5jdGlvbiB0ZShQZSxiZSxBZSl7dmFyIFRlPVBlW2JlXTtQZVti'@;
put 'ZV09UGVbQWVdLFBlW0FlXT1UZX1mdW5jdGlvbiBvZShQZSxiZSxBZSxUZSxxZSl7aWYoMD09PVBlLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIEFlPyhUZT1BZSxBZT0wKTpBZT4yMTQ3NDgzNjQ3P0FlPTIxNDc0ODM2NDc6QWU8LTIxNDc0ODM2NDgmJihBZT0tMjE0NzQ4'@;
put 'MzY0OCksUWUoQWU9K0FlKSYmKEFlPXFlPzA6UGUubGVuZ3RoLTEpLEFlPDAmJihBZT1QZS5sZW5ndGgrQWUpLEFlPj1QZS5sZW5ndGgpe2lmKHFlKXJldHVybi0xO0FlPVBlLmxlbmd0aC0xfWVsc2UgaWYoQWU8MCl7aWYoIXFlKXJldHVybi0xO0FlPTB9aWYoInN0cmluZyI9PXR5cGVvZiBi'@;
put 'ZSYmKGJlPVIuZnJvbShiZSxUZSkpLFIuaXNCdWZmZXIoYmUpKXJldHVybiAwPT09YmUubGVuZ3RoPy0xOnNlKFBlLGJlLEFlLFRlLHFlKTtpZigibnVtYmVyIj09dHlwZW9mIGJlKXJldHVybiBiZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9m'@;
put 'P3FlP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChQZSxiZSxBZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChQZSxiZSxBZSk6c2UoUGUsW2JlXSxBZSxUZSxxZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIg'@;
put 'b3IgQnVmZmVyIil9ZnVuY3Rpb24gc2UoUGUsYmUsQWUsVGUscWUpe3ZhciBEZSxYZT0xLFVlPVBlLmxlbmd0aCxodD1iZS5sZW5ndGg7aWYodm9pZCAwIT09VGUmJigidWNzMiI9PT0oVGU9U3RyaW5nKFRlKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PVRlfHwidXRmMTZsZSI9PT1UZXx8'@;
put 'InV0Zi0xNmxlIj09PVRlKSl7aWYoUGUubGVuZ3RoPDJ8fGJlLmxlbmd0aDwyKXJldHVybi0xO1hlPTIsVWUvPTIsaHQvPTIsQWUvPTJ9ZnVuY3Rpb24gTWUoTXQsSHQpe3JldHVybiAxPT09WGU/TXRbSHRdOk10LnJlYWRVSW50MTZCRShIdCpYZSl9aWYocWUpe3ZhciB6ZT0tMTtmb3IoRGU9'@;
put 'QWU7RGU8VWU7RGUrKylpZihNZShQZSxEZSk9PT1NZShiZSwtMT09PXplPzA6RGUtemUpKXtpZigtMT09PXplJiYoemU9RGUpLERlLXplKzE9PT1odClyZXR1cm4gemUqWGV9ZWxzZS0xIT09emUmJihEZS09RGUtemUpLHplPS0xfWVsc2UgZm9yKEFlK2h0PlVlJiYoQWU9VWUtaHQpLERlPUFl'@;
put 'O0RlPj0wO0RlLS0pe2Zvcih2YXIgb3Q9ITAsdXQ9MDt1dDxodDt1dCsrKWlmKE1lKFBlLERlK3V0KSE9PU1lKGJlLHV0KSl7b3Q9ITE7YnJlYWt9aWYob3QpcmV0dXJuIERlfXJldHVybi0xfWZ1bmN0aW9uIGhlKFBlLGJlLEFlLFRlKXtBZT1OdW1iZXIoQWUpfHwwO3ZhciBxZT1QZS5sZW5n'@;
put 'dGgtQWU7VGU/KFRlPU51bWJlcihUZSkpPnFlJiYoVGU9cWUpOlRlPXFlO3ZhciBYZT1iZS5sZW5ndGg7VGU+WGUvMiYmKFRlPVhlLzIpO2Zvcih2YXIgVWU9MDtVZTxUZTsrK1VlKXt2YXIgaHQ9cGFyc2VJbnQoYmUuc3Vic3RyKDIqVWUsMiksMTYpO2lmKFFlKGh0KSlyZXR1cm4gVWU7UGVb'@;
put 'QWUrVWVdPWh0fXJldHVybiBVZX1mdW5jdGlvbiB1ZShQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKEZlKGJlLFBlLmxlbmd0aC1BZSksUGUsQWUsVGUpfWZ1bmN0aW9uIGNlKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoZnVuY3Rpb24gT2UoUGUpe2Zvcih2YXIgYmU9W10sQWU9MDtBZTxQZS5sZW5n'@;
put 'dGg7KytBZSliZS5wdXNoKDI1NSZQZS5jaGFyQ29kZUF0KEFlKSk7cmV0dXJuIGJlfShiZSksUGUsQWUsVGUpfWZ1bmN0aW9uIEcoUGUsYmUsQWUsVGUpe3JldHVybiBLZShXZShiZSksUGUsQWUsVGUpfWZ1bmN0aW9uIGIoUGUsYmUsQWUsVGUpe3JldHVybiBLZShmdW5jdGlvbiBqZShQZSxi'@;
put 'ZSl7Zm9yKHZhciBBZSxUZSxYZT1bXSxVZT0wO1VlPFBlLmxlbmd0aCYmISgoYmUtPTIpPDApOysrVWUpVGU9KEFlPVBlLmNoYXJDb2RlQXQoVWUpKT4+OCxYZS5wdXNoKEFlJTI1NiksWGUucHVzaChUZSk7cmV0dXJuIFhlfShiZSxQZS5sZW5ndGgtQWUpLFBlLEFlLFRlKX1mdW5jdGlvbiBE'@;
put 'KFBlLGJlLEFlKXtyZXR1cm4gYWUuZnJvbUJ5dGVBcnJheSgwPT09YmUmJkFlPT09UGUubGVuZ3RoP1BlOlBlLnNsaWNlKGJlLEFlKSl9ZnVuY3Rpb24gSChQZSxiZSxBZSl7QWU9TWF0aC5taW4oUGUubGVuZ3RoLEFlKTtmb3IodmFyIFRlPVtdLHFlPWJlO3FlPEFlOyl7dmFyIE1lLERlLHpl'@;
put 'LG90LFhlPVBlW3FlXSxVZT1udWxsLGh0PVhlPjIzOT80OlhlPjIyMz8zOlhlPjE5MT8yOjE7aWYocWUraHQ8PUFlKXN3aXRjaChodCl7Y2FzZSAxOlhlPDEyOCYmKFVlPVhlKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihNZT1QZVtxZSsxXSkpJiYob3Q9KDMxJlhlKTw8Nnw2MyZNZSk+MTI3'@;
put 'JiYoVWU9b3QpO2JyZWFrO2Nhc2UgMzpEZT1QZVtxZSsyXSwxMjg9PSgxOTImKE1lPVBlW3FlKzFdKSkmJjEyOD09KDE5MiZEZSkmJihvdD0oMTUmWGUpPDwxMnwoNjMmTWUpPDw2fDYzJkRlKT4yMDQ3JiYob3Q8NTUyOTZ8fG90PjU3MzQzKSYmKFVlPW90KTticmVhaztjYXNlIDQ6RGU9UGVb'@;
put 'cWUrMl0semU9UGVbcWUrM10sMTI4PT0oMTkyJihNZT1QZVtxZSsxXSkpJiYxMjg9PSgxOTImRGUpJiYxMjg9PSgxOTImemUpJiYob3Q9KDE1JlhlKTw8MTh8KDYzJk1lKTw8MTJ8KDYzJkRlKTw8Nnw2MyZ6ZSk+NjU1MzUmJm90PDExMTQxMTImJihVZT1vdCl9bnVsbD09PVVlPyhVZT02NTUz'@;
put 'MyxodD0xKTpVZT42NTUzNSYmKFRlLnB1c2goKFVlLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxVZT01NjMyMHwxMDIzJlVlKSxUZS5wdXNoKFVlKSxxZSs9aHR9cmV0dXJuIGZ1bmN0aW9uIGcoUGUpe3ZhciBiZT1QZS5sZW5ndGg7aWYoYmU8PU4pcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUuYXBwbHkoU3RyaW5nLFBlKTtmb3IodmFyIEFlPSIiLFRlPTA7VGU8YmU7KUFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxQZS5zbGljZShUZSxUZSs9TikpO3JldHVybiBBZX0oVGUpfUllLmtNYXhMZW5ndGg9bGUsIShSLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rp'@;
put 'b24gTSgpe3RyeXt2YXIgUGU9bmV3IFVpbnQ4QXJyYXkoMSksYmU9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoYmUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihQZSxiZSksNDI9PT1QZS5mb28oKX1j'@;
put 'YXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1'@;
put 'ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoUi5pc0J1ZmZlcih0aGlzKSlyZXR1'@;
put 'cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxSLnBvb2xTaXplPTgxOTIsUi5mcm9tPWZ1bmN0'@;
put 'aW9uKFBlLGJlLEFlKXtyZXR1cm4geihQZSxiZSxBZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihSLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKFIsVWludDhBcnJheSksUi5hbGxvYz1mdW5jdGlvbihQZSxiZSxBZSl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIEkoUGUsYmUsQWUpe3JldHVybiBLKFBlKSxQZTw9MD9PKFBlKTp2b2lkIDAhPT1iZT8ic3RyaW5nIj09dHlwZW9mIEFlP08oUGUpLmZpbGwoYmUsQWUpOk8oUGUpLmZpbGwoYmUpOk8oUGUpfShQZSxiZSxBZSl9LFIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oUGUpe3JldHVybiBrKFBlKX0s'@;
put 'Ui5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oUGUpe3JldHVybiBrKFBlKX0sUi5pc0J1ZmZlcj1mdW5jdGlvbihiZSl7cmV0dXJuIG51bGwhPWJlJiYhMD09PWJlLl9pc0J1ZmZlciYmYmUhPT1SLnByb3RvdHlwZX0sUi5jb21wYXJlPWZ1bmN0aW9uKGJlLEFlKXtpZihZZShiZSxVaW50OEFy'@;
put 'cmF5KSYmKGJlPVIuZnJvbShiZSxiZS5vZmZzZXQsYmUuYnl0ZUxlbmd0aCkpLFllKEFlLFVpbnQ4QXJyYXkpJiYoQWU9Ui5mcm9tKEFlLEFlLm9mZnNldCxBZS5ieXRlTGVuZ3RoKSksIVIuaXNCdWZmZXIoYmUpfHwhUi5pc0J1ZmZlcihBZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJi'@;
put 'dWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoYmU9PT1BZSlyZXR1cm4gMDtmb3IodmFyIFRlPWJlLmxlbmd0aCxxZT1BZS5sZW5ndGgsWGU9MCxVZT1NYXRoLm1pbihUZSxxZSk7WGU8VWU7KytYZSlpZihiZVtYZV0h'@;
put 'PT1BZVtYZV0pe1RlPWJlW1hlXSxxZT1BZVtYZV07YnJlYWt9cmV0dXJuIFRlPHFlPy0xOnFlPFRlPzE6MH0sUi5pc0VuY29kaW5nPWZ1bmN0aW9uKGJlKXtzd2l0Y2goU3RyaW5nKGJlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lp'@;
put 'IjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LFIuY29uY2F0PWZ1bmN0aW9uKGJlLEFlKXtpZighQXJyYXkuaXNBcnJheShi'@;
put 'ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1iZS5sZW5ndGgpcmV0dXJuIFIuYWxsb2MoMCk7dmFyIFRlO2lmKHZvaWQgMD09PUFlKWZvcihBZT0wLFRlPTA7VGU8YmUubGVuZ3RoOysrVGUpQWUrPWJl'@;
put 'W1RlXS5sZW5ndGg7dmFyIHFlPVIuYWxsb2NVbnNhZmUoQWUpLFhlPTA7Zm9yKFRlPTA7VGU8YmUubGVuZ3RoOysrVGUpe3ZhciBVZT1iZVtUZV07aWYoWWUoVWUsVWludDhBcnJheSkpWGUrVWUubGVuZ3RoPnFlLmxlbmd0aD9SLmZyb20oVWUpLmNvcHkocWUsWGUpOlVpbnQ4QXJyYXkucHJv'@;
put 'dG90eXBlLnNldC5jYWxsKHFlLFVlLFhlKTtlbHNle2lmKCFSLmlzQnVmZmVyKFVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7VWUuY29weShxZSxYZSl9WGUrPVVlLmxlbmd0aH1yZXR1cm4gcWV9LFIuYnl0ZUxl'@;
put 'bmd0aD1xLFIucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxSLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5sZW5ndGg7aWYoYmUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFy'@;
put 'IEFlPTA7QWU8YmU7QWUrPTIpdGUodGhpcyxBZSxBZSsxKTtyZXR1cm4gdGhpc30sUi5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGJlPXRoaXMubGVuZ3RoO2lmKGJlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAz'@;
put 'Mi1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKz00KXRlKHRoaXMsQWUsQWUrMyksdGUodGhpcyxBZSsxLEFlKzIpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5sZW5ndGg7aWYoYmUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi'@;
put 'QnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIEFlPTA7QWU8YmU7QWUrPTgpdGUodGhpcyxBZSxBZSs3KSx0ZSh0aGlzLEFlKzEsQWUrNiksdGUodGhpcyxBZSsyLEFlKzUpLHRlKHRoaXMsQWUrMyxBZSs0KTtyZXR1cm4gdGhpc30sUi5wcm90b3R5'@;
put 'cGUudG9Mb2NhbGVTdHJpbmc9Ui5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1iZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9IKHRoaXMsMCxiZSk6ZWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxSLnByb3RvdHlwZS5lcXVhbHM9'@;
put 'ZnVuY3Rpb24oYmUpe2lmKCFSLmlzQnVmZmVyKGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1iZXx8MD09PVIuY29tcGFyZSh0aGlzLGJlKX0sUi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBiZT0iIixB'@;
put 'ZT1JZS5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gYmU9dGhpcy50b1N0cmluZygiaGV4IiwwLEFlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPkFlJiYoYmUrPSIgLi4uICIpLCI8QnVmZmVyICIrYmUrIj4ifSxtJiYoUi5wcm90b3R5cGVbbV09Ui5wcm90'@;
put 'b3R5cGUuaW5zcGVjdCksUi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihiZSxBZSxUZSxxZSxYZSl7aWYoWWUoYmUsVWludDhBcnJheSkmJihiZT1SLmZyb20oYmUsYmUub2Zmc2V0LGJlLmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcihiZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0'@;
put 'YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgYmUpO2lmKHZvaWQgMD09PUFlJiYoQWU9MCksdm9pZCAwPT09VGUmJihUZT1iZT9iZS5sZW5ndGg6MCksdm9pZCAwPT09cWUmJihxZT0wKSx2b2lk'@;
put 'IDA9PT1YZSYmKFhlPXRoaXMubGVuZ3RoKSxBZTwwfHxUZT5iZS5sZW5ndGh8fHFlPDB8fFhlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihxZT49WGUmJkFlPj1UZSlyZXR1cm4gMDtpZihxZT49WGUpcmV0dXJuLTE7aWYoQWU+PVRl'@;
put 'KXJldHVybiAxO2lmKHRoaXM9PT1iZSlyZXR1cm4gMDtmb3IodmFyIFVlPShYZT4+Pj0wKS0ocWU+Pj49MCksaHQ9KFRlPj4+PTApLShBZT4+Pj0wKSxNZT1NYXRoLm1pbihVZSxodCksRGU9dGhpcy5zbGljZShxZSxYZSksemU9YmUuc2xpY2UoQWUsVGUpLG90PTA7b3Q8TWU7KytvdClpZihE'@;
put 'ZVtvdF0hPT16ZVtvdF0pe1VlPURlW290XSxodD16ZVtvdF07YnJlYWt9cmV0dXJuIFVlPGh0Py0xOmh0PFVlPzE6MH0sUi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKGJlLEFlLFRlKX0sUi5wcm90b3R5cGUuaW5kZXhPZj1m'@;
put 'dW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIG9lKHRoaXMsYmUsQWUsVGUsITApfSxSLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIG9lKHRoaXMsYmUsQWUsVGUsITEpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYodm9p'@;
put 'ZCAwPT09QWUpcWU9InV0ZjgiLFRlPXRoaXMubGVuZ3RoLEFlPTA7ZWxzZSBpZih2b2lkIDA9PT1UZSYmInN0cmluZyI9PXR5cGVvZiBBZSlxZT1BZSxUZT10aGlzLmxlbmd0aCxBZT0wO2Vsc2V7aWYoIWlzRmluaXRlKEFlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcs'@;
put 'IGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7QWU+Pj49MCxpc0Zpbml0ZShUZSk/KFRlPj4+PTAsdm9pZCAwPT09cWUmJihxZT0idXRmOCIpKToocWU9VGUsVGU9dm9pZCAwKX12YXIgWGU9dGhpcy5sZW5ndGgtQWU7aWYoKHZvaWQgMD09PVRl'@;
put 'fHxUZT5YZSkmJihUZT1YZSksYmUubGVuZ3RoPjAmJihUZTwwfHxBZTwwKXx8QWU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cWV8fChxZT0idXRmOCIpO2Zvcih2YXIgVWU9ITE7Oylzd2l0Y2gocWUp'@;
put 'e2Nhc2UiaGV4IjpyZXR1cm4gaGUodGhpcyxiZSxBZSxUZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gdWUodGhpcyxiZSxBZSxUZSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gY2UodGhpcyxiZSxBZSxUZSk7Y2FzZSJiYXNlNjQiOnJldHVy'@;
put 'biBHKHRoaXMsYmUsQWUsVGUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gYih0aGlzLGJlLEFlLFRlKTtkZWZhdWx0OmlmKFVlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcWUpO3FlPSgiIitxZSku'@;
put 'dG9Mb3dlckNhc2UoKSxVZT0hMH19LFIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIE49NDA5NjtmdW5jdGlvbiBDKFBlLGJlLEFlKXt2YXIgVGU9'@;
put 'IiI7QWU9TWF0aC5taW4oUGUubGVuZ3RoLEFlKTtmb3IodmFyIHFlPWJlO3FlPEFlOysrcWUpVGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JlBlW3FlXSk7cmV0dXJuIFRlfWZ1bmN0aW9uIFMoUGUsYmUsQWUpe3ZhciBUZT0iIjtBZT1NYXRoLm1pbihQZS5sZW5ndGgsQWUpO2Zvcih2YXIg'@;
put 'cWU9YmU7cWU8QWU7KytxZSlUZSs9U3RyaW5nLmZyb21DaGFyQ29kZShQZVtxZV0pO3JldHVybiBUZX1mdW5jdGlvbiB2KFBlLGJlLEFlKXt2YXIgVGU9UGUubGVuZ3RoOyghYmV8fGJlPDApJiYoYmU9MCksKCFBZXx8QWU8MHx8QWU+VGUpJiYoQWU9VGUpO2Zvcih2YXIgcWU9IiIsWGU9YmU7'@;
put 'WGU8QWU7KytYZSlxZSs9bHRbUGVbWGVdXTtyZXR1cm4gcWV9ZnVuY3Rpb24gcChQZSxiZSxBZSl7Zm9yKHZhciBUZT1QZS5zbGljZShiZSxBZSkscWU9IiIsWGU9MDtYZTxUZS5sZW5ndGgtMTtYZSs9MilxZSs9U3RyaW5nLmZyb21DaGFyQ29kZShUZVtYZV0rMjU2KlRlW1hlKzFdKTtyZXR1'@;
put 'cm4gcWV9ZnVuY3Rpb24gdyhQZSxiZSxBZSl7aWYoUGUlMSE9MHx8UGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoUGUrYmU+QWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5j'@;
put 'dGlvbiBKKFBlLGJlLEFlLFRlLHFlLFhlKXtpZighUi5pc0J1ZmZlcihQZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKGJlPnFlfHxiZTxYZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVu'@;
put 'dCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoQWUrVGU+UGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBuZShQZSxiZSxBZSxUZSxxZSxYZSl7aWYoQWUrVGU+UGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQg'@;
put 'b2YgcmFuZ2UiKTtpZihBZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBkZShQZSxiZSxBZSxUZSxxZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLHFlfHxuZShQZSwwLEFlLDQpLHgud3JpdGUoUGUsYmUsQWUsVGUsMjMsNCksQWUrNH1mdW5j'@;
put 'dGlvbiBmZShQZSxiZSxBZSxUZSxxZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLHFlfHxuZShQZSwwLEFlLDgpLHgud3JpdGUoUGUsYmUsQWUsVGUsNTIsOCksQWUrOH1SLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihiZSxBZSl7dmFyIFRlPXRoaXMubGVuZ3RoOyhiZT1+fmJlKTwwPyhiZSs9'@;
put 'VGUpPDAmJihiZT0wKTpiZT5UZSYmKGJlPVRlKSwoQWU9dm9pZCAwPT09QWU/VGU6fn5BZSk8MD8oQWUrPVRlKTwwJiYoQWU9MCk6QWU+VGUmJihBZT1UZSksQWU8YmUmJihBZT1iZSk7dmFyIHFlPXRoaXMuc3ViYXJyYXkoYmUsQWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocWUs'@;
put 'Ui5wcm90b3R5cGUpLHFlfSxSLnByb3RvdHlwZS5yZWFkVWludExFPVIucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT10aGlzW2JlXSxYZT0xLFVlPTA7KytVZTxBZSYmKFhl'@;
put 'Kj0yNTYpOylxZSs9dGhpc1tiZStVZV0qWGU7cmV0dXJuIHFlfSxSLnByb3RvdHlwZS5yZWFkVWludEJFPVIucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT10aGlzW2JlKy0t'@;
put 'QWVdLFhlPTE7QWU+MCYmKFhlKj0yNTYpOylxZSs9dGhpc1tiZSstLUFlXSpYZTtyZXR1cm4gcWV9LFIucHJvdG90eXBlLnJlYWRVaW50OD1SLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDEsdGhpcy5sZW5ndGgpLHRoaXNbYmVd'@;
put 'fSxSLnByb3RvdHlwZS5yZWFkVWludDE2TEU9Ui5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2JlXXx0aGlzW2JlKzFdPDw4fSxSLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Ui5wcm90b3R5'@;
put 'cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2JlXTw8OHx0aGlzW2JlKzFdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ui5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1'@;
put 'cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tiZV18dGhpc1tiZSsxXTw8OHx0aGlzW2JlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tiZSszXX0sUi5wcm90b3R5cGUucmVhZFVpbnQzMkJFPVIucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihiZSxBZSl7cmV0'@;
put 'dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tiZV0rKHRoaXNbYmUrMV08PDE2fHRoaXNbYmUrMl08PDh8dGhpc1tiZSszXSl9LFIucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFl'@;
put 'LHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPXRoaXNbYmVdLFhlPTEsVWU9MDsrK1VlPEFlJiYoWGUqPTI1Nik7KXFlKz10aGlzW2JlK1VlXSpYZTtyZXR1cm4gcWU+PShYZSo9MTI4KSYmKHFlLT1NYXRoLnBvdygyLDgqQWUpKSxxZX0sUi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGJl'@;
put 'LEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9QWUsWGU9MSxVZT10aGlzW2JlKy0tcWVdO3FlPjAmJihYZSo9MjU2KTspVWUrPXRoaXNbYmUrLS1xZV0qWGU7cmV0dXJuIFVlPj0oWGUqPTEyOCkmJihVZS09TWF0aC5wb3coMiw4KkFl'@;
put 'KSksVWV9LFIucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tiZV0/LTEqKDI1NS10aGlzW2JlXSsxKTp0aGlzW2JlXX0sUi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oYmUsQWUp'@;
put 'e2JlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCk7dmFyIFRlPXRoaXNbYmVdfHRoaXNbYmUrMV08PDg7cmV0dXJuIDMyNzY4JlRlPzQyOTQ5MDE3NjB8VGU6VGV9LFIucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGJlLEFlKXtiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5n'@;
put 'dGgpO3ZhciBUZT10aGlzW2JlKzFdfHRoaXNbYmVdPDw4O3JldHVybiAzMjc2OCZUZT80Mjk0OTAxNzYwfFRlOlRlfSxSLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksdGhpc1tiZV18dGhpc1tiZSsx'@;
put 'XTw8OHx0aGlzW2JlKzJdPDwxNnx0aGlzW2JlKzNdPDwyNH0sUi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLHRoaXNbYmVdPDwyNHx0aGlzW2JlKzFdPDwxNnx0aGlzW2JlKzJdPDw4fHRoaXNbYmUr'@;
put 'M119LFIucHJvdG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx4LnJlYWQodGhpcyxiZSwhMCwyMyw0KX0sUi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFl'@;
put 'fHx3KGJlLDQsdGhpcy5sZW5ndGgpLHgucmVhZCh0aGlzLGJlLCExLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDgsdGhpcy5sZW5ndGgpLHgucmVhZCh0aGlzLGJlLCEwLDUyLDgpfSxSLnByb3RvdHlwZS5y'@;
put 'ZWFkRG91YmxlQkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDgsdGhpcy5sZW5ndGgpLHgucmVhZCh0aGlzLGJlLCExLDUyLDgpfSxSLnByb3RvdHlwZS53cml0ZVVpbnRMRT1SLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7YmU9'@;
put 'K2JlLEFlPj4+PTAsVGU+Pj49MCxxZXx8Sih0aGlzLGJlLEFlLFRlLE1hdGgucG93KDIsOCpUZSktMSwwKTt2YXIgVWU9MSxodD0wO2Zvcih0aGlzW0FlXT0yNTUmYmU7KytodDxUZSYmKFVlKj0yNTYpOyl0aGlzW0FlK2h0XT1iZS9VZSYyNTU7cmV0dXJuIEFlK1RlfSxSLnByb3RvdHlwZS53'@;
put 'cml0ZVVpbnRCRT1SLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7YmU9K2JlLEFlPj4+PTAsVGU+Pj49MCxxZXx8Sih0aGlzLGJlLEFlLFRlLE1hdGgucG93KDIsOCpUZSktMSwwKTt2YXIgVWU9VGUtMSxodD0xO2Zvcih0aGlzW0FlK1VlXT0yNTUmYmU7LS1V'@;
put 'ZT49MCYmKGh0Kj0yNTYpOyl0aGlzW0FlK1VlXT1iZS9odCYyNTU7cmV0dXJuIEFlK1RlfSxSLnByb3RvdHlwZS53cml0ZVVpbnQ4PVIucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDEsMjU1LDAp'@;
put 'LHRoaXNbQWVdPTI1NSZiZSxBZSsxfSxSLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPVIucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsNjU1MzUsMCksdGhpc1tBZV09MjU1JmJlLHRoaXNb'@;
put 'QWUrMV09YmU+Pj44LEFlKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ui5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiw2NTUzNSwwKSx0aGlzW0FlXT1iZT4+PjgsdGhpc1tBZSsx'@;
put 'XT0yNTUmYmUsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1SLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tBZSszXT1iZT4+PjI0LHRoaXNb'@;
put 'QWUrMl09YmU+Pj4xNix0aGlzW0FlKzFdPWJlPj4+OCx0aGlzW0FlXT0yNTUmYmUsQWUrNH0sUi5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1SLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSw0'@;
put 'LDQyOTQ5NjcyOTUsMCksdGhpc1tBZV09YmU+Pj4yNCx0aGlzW0FlKzFdPWJlPj4+MTYsdGhpc1tBZSsyXT1iZT4+PjgsdGhpc1tBZSszXT0yNTUmYmUsQWUrNH0sUi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYoYmU9K2JlLEFlPj4+PTAsIXFlKXt2YXIg'@;
put 'WGU9TWF0aC5wb3coMiw4KlRlLTEpO0oodGhpcyxiZSxBZSxUZSxYZS0xLC1YZSl9dmFyIFVlPTAsaHQ9MSxNZT0wO2Zvcih0aGlzW0FlXT0yNTUmYmU7KytVZTxUZSYmKGh0Kj0yNTYpOyliZTwwJiYwPT09TWUmJjAhPT10aGlzW0FlK1VlLTFdJiYoTWU9MSksdGhpc1tBZStVZV09KGJlL2h0'@;
put 'Pj4wKS1NZSYyNTU7cmV0dXJuIEFlK1RlfSxSLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZihiZT0rYmUsQWU+Pj49MCwhcWUpe3ZhciBYZT1NYXRoLnBvdygyLDgqVGUtMSk7Sih0aGlzLGJlLEFlLFRlLFhlLTEsLVhlKX12YXIgVWU9VGUtMSxodD0xLE1l'@;
put 'PTA7Zm9yKHRoaXNbQWUrVWVdPTI1NSZiZTstLVVlPj0wJiYoaHQqPTI1Nik7KWJlPDAmJjA9PT1NZSYmMCE9PXRoaXNbQWUrVWUrMV0mJihNZT0xKSx0aGlzW0FlK1VlXT0oYmUvaHQ+PjApLU1lJjI1NTtyZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihiZSxB'@;
put 'ZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMSwxMjcsLTEyOCksYmU8MCYmKGJlPTI1NStiZSsxKSx0aGlzW0FlXT0yNTUmYmUsQWUrMX0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAs'@;
put 'VGV8fEoodGhpcyxiZSxBZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tBZV09MjU1JmJlLHRoaXNbQWUrMV09YmU+Pj44LEFlKzJ9LFIucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiwzMjc2Nywt'@;
put 'MzI3NjgpLHRoaXNbQWVdPWJlPj4+OCx0aGlzW0FlKzFdPTI1NSZiZSxBZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tBZV09'@;
put 'MjU1JmJlLHRoaXNbQWUrMV09YmU+Pj44LHRoaXNbQWUrMl09YmU+Pj4xNix0aGlzW0FlKzNdPWJlPj4+MjQsQWUrNH0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSw0LDIxNDc0ODM2NDcs'@;
put 'LTIxNDc0ODM2NDgpLGJlPDAmJihiZT00Mjk0OTY3Mjk1K2JlKzEpLHRoaXNbQWVdPWJlPj4+MjQsdGhpc1tBZSsxXT1iZT4+PjE2LHRoaXNbQWUrMl09YmU+Pj44LHRoaXNbQWUrM109MjU1JmJlLEFlKzR9LFIucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0'@;
put 'dXJuIGRlKHRoaXMsYmUsQWUsITAsVGUpfSxSLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBkZSh0aGlzLGJlLEFlLCExLFRlKX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGZlKHRoaXMsYmUsQWUs'@;
put 'ITAsVGUpfSxSLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gZmUodGhpcyxiZSxBZSwhMSxUZSl9LFIucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKCFSLmlzQnVmZmVyKGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1'@;
put 'bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihUZXx8KFRlPTApLCFxZSYmMCE9PXFlJiYocWU9dGhpcy5sZW5ndGgpLEFlPj1iZS5sZW5ndGgmJihBZT1iZS5sZW5ndGgpLEFlfHwoQWU9MCkscWU+MCYmcWU8VGUmJihxZT1UZSkscWU9PT1UZXx8MD09PWJlLmxlbmd0aHx8MD09PXRoaXMu'@;
put 'bGVuZ3RoKXJldHVybiAwO2lmKEFlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihUZTwwfHxUZT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHFlPDApdGhyb3cgbmV3IFJhbmdl'@;
put 'RXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7cWU+dGhpcy5sZW5ndGgmJihxZT10aGlzLmxlbmd0aCksYmUubGVuZ3RoLUFlPHFlLVRlJiYocWU9YmUubGVuZ3RoLUFlK1RlKTt2YXIgWGU9cWUtVGU7cmV0dXJuIHRoaXM9PT1iZSYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJy'@;
put 'YXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKEFlLFRlLHFlKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChiZSx0aGlzLnN1YmFycmF5KFRlLHFlKSxBZSksWGV9LFIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgYmUpe2lmKCJzdHJpbmciPT10eXBlb2YgQWU/KHFlPUFlLEFlPTAsVGU9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgVGUmJihxZT1UZSxUZT10aGlzLmxlbmd0aCksdm9pZCAwIT09cWUmJiJzdHJpbmciIT10eXBlb2YgcWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2Rp'@;
put 'bmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgcWUmJiFSLmlzRW5jb2RpbmcocWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcWUpO2lmKDE9PT1iZS5sZW5ndGgpe3ZhciBYZT1iZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1xZSYm'@;
put 'WGU8MTI4fHwibGF0aW4xIj09PXFlKSYmKGJlPVhlKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgYmU/YmUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiBiZSYmKGJlPU51bWJlcihiZSkpO2lmKEFlPDB8fHRoaXMubGVuZ3RoPEFlfHx0aGlzLmxlbmd0aDxUZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigi'@;
put 'T3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoVGU8PUFlKXJldHVybiB0aGlzO3ZhciBVZTtpZihBZT4+Pj0wLFRlPXZvaWQgMD09PVRlP3RoaXMubGVuZ3RoOlRlPj4+MCxiZXx8KGJlPTApLCJudW1iZXIiPT10eXBlb2YgYmUpZm9yKFVlPUFlO1VlPFRlOysrVWUpdGhpc1tVZV09YmU7ZWxzZXt2'@;
put 'YXIgaHQ9Ui5pc0J1ZmZlcihiZSk/YmU6Ui5mcm9tKGJlLHFlKSxNZT1odC5sZW5ndGg7aWYoMD09PU1lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytiZSsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKFVlPTA7VWU8VGUtQWU7KytVZSl0aGlzW1Vl'@;
put 'K0FlXT1odFtVZSVNZV19cmV0dXJuIHRoaXN9O3ZhciB4ZT0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIEZlKFBlLGJlKXtiZT1iZXx8MS8wO2Zvcih2YXIgQWUsVGU9UGUubGVuZ3RoLHFlPW51bGwsWGU9W10sVWU9MDtVZTxUZTsrK1VlKXtpZigoQWU9UGUuY2hhckNvZGVBdChVZSkp'@;
put 'PjU1Mjk1JiZBZTw1NzM0NCl7aWYoIXFlKXtpZihBZT41NjMxOSl7KGJlLT0zKT4tMSYmWGUucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoVWUrMT09PVRlKXsoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1xZT1BZTtjb250aW51ZX1pZihBZTw1NjMyMCl7'@;
put 'KGJlLT0zKT4tMSYmWGUucHVzaCgyMzksMTkxLDE4OSkscWU9QWU7Y29udGludWV9QWU9NjU1MzYrKHFlLTU1Mjk2PDwxMHxBZS01NjMyMCl9ZWxzZSBxZSYmKGJlLT0zKT4tMSYmWGUucHVzaCgyMzksMTkxLDE4OSk7aWYocWU9bnVsbCxBZTwxMjgpe2lmKChiZS09MSk8MClicmVhaztYZS5w'@;
put 'dXNoKEFlKX1lbHNlIGlmKEFlPDIwNDgpe2lmKChiZS09Mik8MClicmVhaztYZS5wdXNoKEFlPj42fDE5Miw2MyZBZXwxMjgpfWVsc2UgaWYoQWU8NjU1MzYpe2lmKChiZS09Myk8MClicmVhaztYZS5wdXNoKEFlPj4xMnwyMjQsQWU+PjYmNjN8MTI4LDYzJkFlfDEyOCl9ZWxzZXtpZighKEFl'@;
put 'PDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKGJlLT00KTwwKWJyZWFrO1hlLnB1c2goQWU+PjE4fDI0MCxBZT4+MTImNjN8MTI4LEFlPj42JjYzfDEyOCw2MyZBZXwxMjgpfX1yZXR1cm4gWGV9ZnVuY3Rpb24gV2UoUGUpe3JldHVybiBhZS50b0J5'@;
put 'dGVBcnJheShmdW5jdGlvbiBMZShQZSl7aWYoKFBlPShQZT1QZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZSh4ZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7UGUubGVuZ3RoJTQhPTA7KVBlKz0iPSI7cmV0dXJuIFBlfShQZSkpfWZ1bmN0aW9uIEtlKFBlLGJlLEFlLFRlKXtm'@;
put 'b3IodmFyIHFlPTA7cWU8VGUmJiEocWUrQWU+PWJlLmxlbmd0aHx8cWU+PVBlLmxlbmd0aCk7KytxZSliZVtxZStBZV09UGVbcWVdO3JldHVybiBxZX1mdW5jdGlvbiBZZShQZSxiZSl7cmV0dXJuIFBlIGluc3RhbmNlb2YgYmV8fG51bGwhPVBlJiZudWxsIT1QZS5jb25zdHJ1Y3RvciYmbnVs'@;
put 'bCE9UGUuY29uc3RydWN0b3IubmFtZSYmUGUuY29uc3RydWN0b3IubmFtZT09PWJlLm5hbWV9ZnVuY3Rpb24gUWUoUGUpe3JldHVybiBQZSE9UGV9dmFyIGx0PWZ1bmN0aW9uKCl7Zm9yKHZhciBQZT0iMDEyMzQ1Njc4OWFiY2RlZiIsYmU9bmV3IEFycmF5KDI1NiksQWU9MDtBZTwxNjsrK0Fl'@;
put 'KWZvcih2YXIgVGU9MTYqQWUscWU9MDtxZTwxNjsrK3FlKWJlW1RlK3FlXT1QZVtBZV0rUGVbcWVdO3JldHVybiBiZX0oKX0sODY0MjA6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDUxNzkzKS5UcmFuc2Zvcm0sbT1GKDcyMDI0KS5zO2Z1bmN0aW9uIE0oTyl7eC5jYWxs'@;
put 'KHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiBPLHRoaXMuaGFzaE1vZGU/dGhpc1tPXT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1u'@;
put 'dWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1GKDY2Njk4KShNLHgpLE0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihPLFIseil7InN0cmluZyI9PXR5cGVvZiBPJiYoTz1hZS5mcm9tKE8sUikpO3ZhciBLPXRoaXMuX3VwZGF0ZShPKTtyZXR1cm4gdGhpcy5o'@;
put 'YXNoTW9kZT90aGlzOih6JiYoSz10aGlzLl90b1N0cmluZyhLLHopKSxLKX0sTS5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LE0ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5z'@;
put 'dXBwb3J0ZWQgc3RhdGUiKX0sTS5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxNLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRy'@;
put 'eWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LE0ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxSLHope3ZhciBLO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShPKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKE8pKX1jYXRjaChJKXtLPUl9ZmluYWxs'@;
put 'eXt6KEspfX0sTS5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciBSO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKHope1I9en1PKFIpfSxNLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbihPKXt2YXIgUj10aGlzLl9fZmluYWwoKXx8YWUuYWxsb2Mo'@;
put 'MCk7cmV0dXJuIE8mJihSPXRoaXMuX3RvU3RyaW5nKFIsTywhMCkpLFJ9LE0ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihPLFIseil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IG0oUiksdGhpcy5fZW5jb2Rpbmc9UiksdGhpcy5fZW5jb2RpbmchPT1SKXRocm93'@;
put 'IG5ldyBFcnJvcigiY2FuJ3Qgc3dpdGNoIGVuY29kaW5ncyIpO3ZhciBLPXRoaXMuX2RlY29kZXIud3JpdGUoTyk7cmV0dXJuIHomJihLKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxLfSxhdC5leHBvcnRzPU19LDM4ODQwOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg4NjUxKSx4PUYoMzE4NSk7YXQu'@;
put 'ZXhwb3J0cz1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IGxlKFIpfTt2YXIgbT17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0s'@;
put 'cHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBs'@;
put 'ZShPKXt0aGlzLmN1cnZlVHlwZT1tW09dLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6T30pLHRoaXMuY3VydmU9bmV3IGFlLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gTShPLFIseil7QXJyYXkuaXNBcnJheShPKXx8KE89'@;
put 'Ty50b0FycmF5KCkpO3ZhciBLPW5ldyBCdWZmZXIoTyk7aWYoeiYmSy5sZW5ndGg8eil7dmFyIEk9bmV3IEJ1ZmZlcih6LUsubGVuZ3RoKTtJLmZpbGwoMCksSz1CdWZmZXIuY29uY2F0KFtJLEtdKX1yZXR1cm4gUj9LLnRvU3RyaW5nKFIpOkt9bS5wMjI0PW0uc2VjcDIyNHIxLG0ucDI1Nj1t'@;
put 'LnNlY3AyNTZyMT1tLnByaW1lMjU2djEsbS5wMTkyPW0uc2VjcDE5MnIxPW0ucHJpbWUxOTJ2MSxtLnAzODQ9bS5zZWNwMzg0cjEsbS5wNTIxPW0uc2VjcDUyMXIxLGxlLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2Vu'@;
put 'S2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KE8sUil9LGxlLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gUj1SfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKE8pfHwoTz1uZXcgQnVmZmVyKE8sUikpLE0odGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKE8p'@;
put 'LmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCkseix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sbGUucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihPLFIpe3ZhciB6PXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09UiwhMCk7'@;
put 'cmV0dXJuImh5YnJpZCI9PT1SJiYoelswXT16W3oubGVuZ3RoLTFdJTI/Nzo2KSxNKHosTyl9LGxlLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKE8pe3JldHVybiBNKHRoaXMua2V5cy5nZXRQcml2YXRlKCksTyl9LGxlLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24o'@;
put 'TyxSKXtyZXR1cm4gUj1SfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKE8pfHwoTz1uZXcgQnVmZmVyKE8sUikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKE8pLHRoaXN9LGxlLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKE8sUil7Uj1SfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVy'@;
put 'KE8pfHwoTz1uZXcgQnVmZmVyKE8sUikpO3ZhciB6PW5ldyB4KE8pO3JldHVybiB6PXoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoeiksdGhpc319LDMxODU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9u'@;
put 'KGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1u'@;
put 'ZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYo'@;
put 'RD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93'@;
put 'LkJ1ZmZlcjpGKDg2MjMpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWIm'@;
put 'JihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNC'@;
put 'Tj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4w'@;
put 'P2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4g'@;
put 'dGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3Ro'@;
put 'aXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3'@;
put 'MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEw'@;
put 'ODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIu'@;
put 'bGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7'@;
put 'dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2'@;
put 'LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysr'@;
put 'KTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRo'@;
put 'aXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIu'@;
put 'bGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlv'@;
put 'bihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQp'@;
put 'LHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEw'@;
put 'ODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0Rd'@;
put 'O2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7'@;
put 'Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhp'@;
put 'cy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxC'@;
put 'Ti1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2'@;
put 'LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUs'@;
put 'MTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4'@;
put 'NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtE'@;
put 'LndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0p'@;
put 'KihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxE'@;
put 'fHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhp'@;
put 'cy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZi'@;
put 'Pj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9'@;
put 'Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3Zh'@;
put 'ciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEs'@;
put 'Ik51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1'@;
put 'cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMu'@;
put 'Ynl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhp'@;
put 'cy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcu'@;
put 'aXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYm'@;
put 'KEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgr'@;
put 'PTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0'@;
put 'aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4g'@;
put 'Yn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMu'@;
put 'Y2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0u'@;
put 'cHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhp'@;
put 'cy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxl'@;
put 'bmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5p'@;
put 'dWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29y'@;
put 'ZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0o'@;
put 'MD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxI'@;
put 'PWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnBy'@;
put 'b3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53'@;
put 'b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxE'@;
put 'PXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5n'@;
put 'dGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRz'@;
put 'W0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1I'@;
put 'LndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRo'@;
put 'aXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5u'@;
put 'ZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7'@;
put 'dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRz'@;
put 'W1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9y'@;
put 'KDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZG'@;
put 'ZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsUWU9MHxOWzRdLGx0PTgxOTEmUWUsUGU9UWU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9'@;
put 'aHQ+Pj4xMyx6ZT0wfE5bOF0sb3Q9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+'@;
put 'MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsUXQ9MHxnWzZdLER0PTgxOTEmUXQscHQ9UXQ+Pj4xMyxZdD0wfGdbN10sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHlu'@;
put 'PTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgUG49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChu'@;
put 'ZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoUG4+Pj4yNil8MCxQbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5p'@;
put 'bXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxu'@;
put 'aSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+'@;
put 'PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFdu'@;
put 'KXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYo'@;
put 'cD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0'@;
put 'aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9dytNYXRoLmltdWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRo'@;
put 'LmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24p'@;
put 'LHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmlt'@;
put 'dWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChq'@;
put 'ZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5l'@;
put 'LEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1N'@;
put 'YXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmlt'@;
put 'dWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9dytNYXRoLmltdWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRo'@;
put 'LmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24p'@;
put 'LHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmlt'@;
put 'dWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQ'@;
put 'ZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0'@;
put 'KXwwLHc9dytNYXRoLmltdWwoamUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsSW4pfDApfDApKygoODE5MSYo'@;
put 'cD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLEluKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwob3QsQ24pLHA9KHA9TWF0aC5pbXVsKG90LFV0KSkrTWF0'@;
put 'aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11'@;
put 'bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAs'@;
put 'dj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxJbil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+'@;
put 'PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwob3QsV24pfDAscD0ocD1wK01hdGguaW11bChvdCxlbil8MCkrTWF0aC5pbXVsKHV0LFdu'@;
put 'KXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3Qp'@;
put 'fDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRo'@;
put 'LmltdWwoT2UsSW4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLEluKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11'@;
put 'bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxu'@;
put 'byY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKG90LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRo'@;
put 'LmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9l'@;
put 'LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4p'@;
put 'fDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRo'@;
put 'LmltdWwob3QsaG4pfDAscD0ocD1wK01hdGguaW11bChvdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11'@;
put 'bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRl'@;
put 'LER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsSW4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Us'@;
put 'c24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmlt'@;
put 'dWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChvdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhl'@;
put 'LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsSW4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLEluKXwwLHc9dytNYXRoLmltdWwoVGUsenQp'@;
put 'fDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8'@;
put 'MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5p'@;
put 'bXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERl'@;
put 'LER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUs'@;
put 'c24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmlt'@;
put 'dWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsSXQpLHY9ditNYXRoLmltdWwob3QsRHQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChvdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhl'@;
put 'LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4p'@;
put 'fDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRo'@;
put 'LmltdWwob3QsSW4pfDAscD0ocD1wK01hdGguaW11bChvdCx6dCl8MCkrTWF0aC5pbXVsKHV0LEluKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11'@;
put 'bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxp'@;
put 'byY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSW4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LEluKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKG90LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcr'@;
put 'TWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+'@;
put 'PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChvdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90'@;
put 'LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkp'@;
put 'K01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09UG4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhd'@;
put 'PUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIs'@;
put 'RCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIs'@;
put 'RCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9'@;
put 'NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUv'@;
put 'NjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rp'@;
put 'b24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4g'@;
put 'Yjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNm'@;
put 'b3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRl'@;
put 'PXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2ZlXT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9l'@;
put 'LGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9amUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90'@;
put 'eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5j'@;
put 'dGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZl'@;
put 'cnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlw'@;
put 'ZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4p'@;
put 'LEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMs'@;
put 'TiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVd'@;
put 'Km5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2'@;
put 'ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVs'@;
put 'Zj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5'@;
put 'cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2'@;
put 'NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3Fy'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcu'@;
put 'Yml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyss'@;
put 'SD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFy'@;
put 'IGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYm'@;
put 'KHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlw'@;
put 'KCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7'@;
put 'dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09'@;
put 'QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13'@;
put 'fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5z'@;
put 'dHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hs'@;
put 'bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0s'@;
put 'TS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVt'@;
put 'YmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1p'@;
put 'bihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBl'@;
put 'LmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jk'@;
put 'c1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5s'@;
put 'ZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxN'@;
put 'LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZl'@;
put 'PTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndv'@;
put 'cmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3Zh'@;
put 'ciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09'@;
put 'NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylT'@;
put 'PShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tn'@;
put 'Lmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jk'@;
put 'cz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7'@;
put 'dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNo'@;
put 'bG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9'@;
put 'ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygp'@;
put 'KSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6'@;
put 'Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0'@;
put 'aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMu'@;
put 'ZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5j'@;
put 'dGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lm'@;
put 'KEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRp'@;
put 'di5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3Rv'@;
put 'dHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3Rv'@;
put 'dHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpE'@;
put 'LmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zv'@;
put 'cih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxm'@;
put 'ZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIo'@;
put 'SCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlz'@;
put 'LEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9'@;
put 'MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQo'@;
put 'QyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJv'@;
put 'KCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hy'@;
put 'bigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5p'@;
put 'dXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'MT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMu'@;
put 'bGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1'@;
put 'cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYo'@;
put 'MCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jk'@;
put 'c1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRp'@;
put 'dmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZh'@;
put 'ciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4o'@;
put 'Yil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90'@;
put 'b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0'@;
put 'ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRU'@;
put 'byh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlw'@;
put 'ZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJv'@;
put 'dG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdv'@;
put 'cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJv'@;
put 'dG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0'@;
put 'aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3Rv'@;
put 'dHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRo'@;
put 'aXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo'@;
put 'dGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90'@;
put 'eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9'@;
put 'O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhp'@;
put 'cywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAw'@;
put 'MDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZm'@;
put 'ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBn'@;
put 'cmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgx'@;
put 'KS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRo'@;
put 'aXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24o'@;
put 'Yil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0w'@;
put 'LEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1'@;
put 'cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBd'@;
put 'PUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIg'@;
put 'Tj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUo'@;
put 'c2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jk'@;
put 'c1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09'@;
put 'Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3Jr'@;
put 'cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIp'@;
put 'e3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSks'@;
put 'SC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMu'@;
put 'X3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigw'@;
put 'KTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5p'@;
put 'bW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5'@;
put 'cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcg'@;
put 'TSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygp'@;
put 'LHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEp'@;
put 'Lml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11'@;
put 'bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0'@;
put 'aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMp'@;
put 'LE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7'@;
put 'Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNv'@;
put 'bnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52'@;
put 'KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWlu'@;
put 'dikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5w'@;
put 'cm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu'@;
put 'bSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sOTYzNjI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2Njk4KSx4PUYoNzU4MjkpLG09RigzOTcwNiksbGU9Rig5Nzk2NSksTT1G'@;
put 'KDg2NDIwKTtmdW5jdGlvbiBPKFIpe00uY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPVJ9YWUoTyxNKSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIpe3RoaXMuX2hhc2gudXBkYXRlKFIpfSxPLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFz'@;
put 'aC5kaWdlc3QoKX0sYXQuZXhwb3J0cz1mdW5jdGlvbih6KXtyZXR1cm4ibWQ1Ij09PSh6PXoudG9Mb3dlckNhc2UoKSk/bmV3IHg6InJtZDE2MCI9PT16fHwicmlwZW1kMTYwIj09PXo/bmV3IG06bmV3IE8obGUoeikpfX0sODc1ODg6KGF0LEllLEYpPT57dmFyIGFlPUYoNzU4MjkpO2F0LmV4'@;
put 'cG9ydHM9ZnVuY3Rpb24oeCl7cmV0dXJuKG5ldyBhZSkudXBkYXRlKHgpLmRpZ2VzdCgpfX0sODU4MjU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2Njk4KSx4PUYoOTU5MjIpLG09Rig4NjQyMCksbGU9Rig4NDMpLkJ1ZmZlcixNPUYoODc1ODgpLE89RigzOTcwNiksUj1G'@;
put 'KDk3OTY1KSx6PWxlLmFsbG9jKDEyOCk7ZnVuY3Rpb24gSyhJLGspe20uY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIGsmJihrPWxlLmZyb20oaykpO3ZhciBFPSJzaGE1MTIiPT09SXx8InNoYTM4NCI9PT1JPzEyODo2NDt0aGlzLl9hbGc9SSx0aGlzLl9rZXk9ayxrLmxl'@;
put 'bmd0aD5FP2s9KCJybWQxNjAiPT09ST9uZXcgTzpSKEkpKS51cGRhdGUoaykuZGlnZXN0KCk6ay5sZW5ndGg8RSYmKGs9bGUuY29uY2F0KFtrLHpdLEUpKTtmb3IodmFyIFY9dGhpcy5faXBhZD1sZS5hbGxvY1Vuc2FmZShFKSxCPXRoaXMuX29wYWQ9bGUuYWxsb2NVbnNhZmUoRSksWT0wO1k8'@;
put 'RTtZKyspVltZXT01NF5rW1ldLEJbWV09OTJea1tZXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09ST9uZXcgTzpSKEkpLHRoaXMuX2hhc2gudXBkYXRlKFYpfWFlKEssbSksSy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihJKXt0aGlzLl9oYXNoLnVwZGF0ZShJKX0sSy5wcm90b3R5cGUuX2Zp'@;
put 'bmFsPWZ1bmN0aW9uKCl7dmFyIEk9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IE86Uih0aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKEkpLmRpZ2VzdCgpfSxhdC5leHBvcnRzPWZ1bmN0aW9uKGssRSl7cmV0dXJuInJtZDE2'@;
put 'MCI9PT0oaz1rLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PWs/bmV3IEsoInJtZDE2MCIsRSk6Im1kNSI9PT1rP25ldyB4KE0sRSk6bmV3IEsoayxFKX19LDk1OTIyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDg0MykuQnVmZmVyLG09Rig4NjQy'@;
put 'MCksbGU9eC5hbGxvYygxMjgpLE09NjQ7ZnVuY3Rpb24gTyhSLHope20uY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIHomJih6PXguZnJvbSh6KSksdGhpcy5fYWxnPVIsdGhpcy5fa2V5PXosei5sZW5ndGg+TT96PVIoeik6ei5sZW5ndGg8TSYmKHo9eC5jb25jYXQoW3os'@;
put 'bGVdLE0pKTtmb3IodmFyIEs9dGhpcy5faXBhZD14LmFsbG9jVW5zYWZlKE0pLEk9dGhpcy5fb3BhZD14LmFsbG9jVW5zYWZlKE0pLGs9MDtrPE07aysrKUtba109NTReeltrXSxJW2tdPTkyXnpba107dGhpcy5faGFzaD1bS119YWUoTyxtKSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u'@;
put 'KFIpe3RoaXMuX2hhc2gucHVzaChSKX0sTy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5fYWxnKHguY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKHguY29uY2F0KFt0aGlzLl9vcGFkLFJdKSl9LGF0LmV4cG9ydHM9T30sNzc5MDM6KGF0LEllLEYp'@;
put 'PT57InVzZSBzdHJpY3QiO0llLnJhbmRvbUJ5dGVzPUllLnJuZz1JZS5wc2V1ZG9SYW5kb21CeXRlcz1JZS5wcm5nPUYoNDQwMTkpLEllLmNyZWF0ZUhhc2g9SWUuSGFzaD1GKDk2MzYyKSxJZS5jcmVhdGVIbWFjPUllLkhtYWM9Rig4NTgyNSk7dmFyIGFlPUYoODE2OTkpLHg9T2JqZWN0Lmtl'@;
put 'eXMoYWUpLG09WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KHgpO0llLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBtfTt2YXIgbGU9Rig1NzEwMCk7SWUucGJrZGYyPWxlLnBia2RmMixJZS5wYmtkZjJTeW5jPWxl'@;
put 'LnBia2RmMlN5bmM7dmFyIE09RigyNTYwMCk7SWUuQ2lwaGVyPU0uQ2lwaGVyLEllLmNyZWF0ZUNpcGhlcj1NLmNyZWF0ZUNpcGhlcixJZS5DaXBoZXJpdj1NLkNpcGhlcml2LEllLmNyZWF0ZUNpcGhlcml2PU0uY3JlYXRlQ2lwaGVyaXYsSWUuRGVjaXBoZXI9TS5EZWNpcGhlcixJZS5jcmVh'@;
put 'dGVEZWNpcGhlcj1NLmNyZWF0ZURlY2lwaGVyLEllLkRlY2lwaGVyaXY9TS5EZWNpcGhlcml2LEllLmNyZWF0ZURlY2lwaGVyaXY9TS5jcmVhdGVEZWNpcGhlcml2LEllLmdldENpcGhlcnM9TS5nZXRDaXBoZXJzLEllLmxpc3RDaXBoZXJzPU0ubGlzdENpcGhlcnM7dmFyIE89Rig0NTE0NCk7'@;
put 'SWUuRGlmZmllSGVsbG1hbkdyb3VwPU8uRGlmZmllSGVsbG1hbkdyb3VwLEllLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1PLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxJZS5nZXREaWZmaWVIZWxsbWFuPU8uZ2V0RGlmZmllSGVsbG1hbixJZS5jcmVhdGVEaWZmaWVIZWxsbWFuPU8uY3Jl'@;
put 'YXRlRGlmZmllSGVsbG1hbixJZS5EaWZmaWVIZWxsbWFuPU8uRGlmZmllSGVsbG1hbjt2YXIgUj1GKDI3Njg2KTtJZS5jcmVhdGVTaWduPVIuY3JlYXRlU2lnbixJZS5TaWduPVIuU2lnbixJZS5jcmVhdGVWZXJpZnk9Ui5jcmVhdGVWZXJpZnksSWUuVmVyaWZ5PVIuVmVyaWZ5LEllLmNyZWF0'@;
put 'ZUVDREg9RigzODg0MCk7dmFyIHo9RigyNzA1MCk7SWUucHVibGljRW5jcnlwdD16LnB1YmxpY0VuY3J5cHQsSWUucHJpdmF0ZUVuY3J5cHQ9ei5wcml2YXRlRW5jcnlwdCxJZS5wdWJsaWNEZWNyeXB0PXoucHVibGljRGVjcnlwdCxJZS5wcml2YXRlRGVjcnlwdD16LnByaXZhdGVEZWNyeXB0'@;
put 'O3ZhciBLPUYoNjEyMzcpO0llLnJhbmRvbUZpbGw9Sy5yYW5kb21GaWxsLEllLnJhbmRvbUZpbGxTeW5jPUsucmFuZG9tRmlsbFN5bmMsSWUuY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWyJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxl'@;
put 'bWVudGVkIHlldCIsIndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzIiwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Il0uam9pbigiXG4iKSl9LEllLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9U'@;
put 'X1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFf'@;
put 'T0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDEwMDEyOmZ1bmN0aW9uKGF0'@;
put 'LEllLEYpe3ZhciBhZTthdC5leHBvcnRzPShhZT1hZXx8ZnVuY3Rpb24oeCxtKXt2YXIgbGU7aWYodHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG8mJihsZT13aW5kb3cuY3J5cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYobGU9c2VsZi5jcnlwdG8pLHR5cGVvZiBn'@;
put 'bG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5jcnlwdG8mJihsZT1nbG9iYWxUaGlzLmNyeXB0byksIWxlJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYobGU9d2luZG93Lm1zQ3J5cHRvKSwhbGUmJnR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWwuY3J5cHRvJiYobGU9Z2xv'@;
put 'YmFsLmNyeXB0byksIWxlKXRyeXtsZT1GKDc3OTAzKX1jYXRjaHt9dmFyIE09ZnVuY3Rpb24oKXtpZihsZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGxlLmdldFJhbmRvbVZhbHVlcyl0cnl7cmV0dXJuIGxlLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdfWNhdGNoe31p'@;
put 'ZigiZnVuY3Rpb24iPT10eXBlb2YgbGUucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBsZS5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpfWNhdGNoe319dGhyb3cgbmV3IEVycm9yKCJOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJhbmRvbSBu'@;
put 'dW1iZXIuIil9LE89T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiBVKCl7fXJldHVybiBmdW5jdGlvbihxKXt2YXIgZWU7cmV0dXJuIFUucHJvdG90eXBlPXEsZWU9bmV3IFUsVS5wcm90b3R5cGU9bnVsbCxlZX19KCksUj17fSx6PVIubGliPXt9LEs9ei5CYXNlPXtleHRlbmQ6'@;
put 'ZnVuY3Rpb24oVSl7dmFyIHE9Tyh0aGlzKTtyZXR1cm4gVSYmcS5taXhJbihVKSwoIXEuaGFzT3duUHJvcGVydHkoImluaXQiKXx8dGhpcy5pbml0PT09cS5pbml0KSYmKHEuaW5pdD1mdW5jdGlvbigpe3EuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkscS5pbml0LnByb3Rv'@;
put 'dHlwZT1xLHEuJHN1cGVyPXRoaXMscX0sY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5leHRlbmQoKTtyZXR1cm4gVS5pbml0LmFwcGx5KFUsYXJndW1lbnRzKSxVfSxpbml0OmZ1bmN0aW9uKCl7fSxtaXhJbjpmdW5jdGlvbihVKXtmb3IodmFyIHEgaW4gVSlVLmhhc093blByb3BlcnR5'@;
put 'KHEpJiYodGhpc1txXT1VW3FdKTtVLmhhc093blByb3BlcnR5KCJ0b1N0cmluZyIpJiYodGhpcy50b1N0cmluZz1VLnRvU3RyaW5nKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fSxJPXouV29yZEFycmF5PUsuZXh0ZW5kKHtpbml0'@;
put 'OmZ1bmN0aW9uKFUscSl7VT10aGlzLndvcmRzPVV8fFtdLHRoaXMuc2lnQnl0ZXM9bnVsbCE9cT9xOjQqVS5sZW5ndGh9LHRvU3RyaW5nOmZ1bmN0aW9uKFUpe3JldHVybihVfHxFKS5zdHJpbmdpZnkodGhpcyl9LGNvbmNhdDpmdW5jdGlvbihVKXt2YXIgcT10aGlzLndvcmRzLGVlPVUud29y'@;
put 'ZHMsdGU9dGhpcy5zaWdCeXRlcyxvZT1VLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSx0ZSU0KWZvcih2YXIgc2U9MDtzZTxvZTtzZSsrKXFbdGUrc2U+Pj4yXXw9KGVlW3NlPj4+Ml0+Pj4yNC1zZSU0KjgmMjU1KTw8MjQtKHRlK3NlKSU0Kjg7ZWxzZSBmb3IodmFyIHVlPTA7dWU8b2U7dWUr'@;
put 'PTQpcVt0ZSt1ZT4+PjJdPWVlW3VlPj4+Ml07cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPW9lLHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIFU9dGhpcy53b3JkcyxxPXRoaXMuc2lnQnl0ZXM7VVtxPj4+Ml0mPTQyOTQ5NjcyOTU8PDMyLXElNCo4LFUubGVuZ3RoPXguY2VpbChxLzQpfSxjbG9u'@;
put 'ZTpmdW5jdGlvbigpe3ZhciBVPUsuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gVS53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLFV9LHJhbmRvbTpmdW5jdGlvbihVKXtmb3IodmFyIHE9W10sZWU9MDtlZTxVO2VlKz00KXEucHVzaChNKCkpO3JldHVybiBuZXcgSS5pbml0KHEsVSl9fSksaz1S'@;
put 'LmVuYz17fSxFPWsuSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVUud29yZHMsZWU9VS5zaWdCeXRlcyx0ZT1bXSxvZT0wO29lPGVlO29lKyspe3ZhciBzZT1xW29lPj4+Ml0+Pj4yNC1vZSU0KjgmMjU1O3RlLnB1c2goKHNlPj4+NCkudG9TdHJpbmcoMTYpKSx0ZS5wdXNo'@;
put 'KCgxNSZzZSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gdGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLmxlbmd0aCxlZT1bXSx0ZT0wO3RlPHE7dGUrPTIpZWVbdGU+Pj4zXXw9cGFyc2VJbnQoVS5zdWJzdHIodGUsMiksMTYpPDwyNC10ZSU4KjQ7cmV0dXJuIG5ldyBJ'@;
put 'LmluaXQoZWUscS8yKX19LGo9ay5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS53b3JkcyxlZT1VLnNpZ0J5dGVzLHRlPVtdLG9lPTA7b2U8ZWU7b2UrKyl0ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocVtvZT4+PjJdPj4+MjQtb2UlNCo4JjI1NSkpO3JldHVy'@;
put 'biB0ZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oVSl7Zm9yKHZhciBxPVUubGVuZ3RoLGVlPVtdLHRlPTA7dGU8cTt0ZSsrKWVlW3RlPj4+Ml18PSgyNTUmVS5jaGFyQ29kZUF0KHRlKSk8PDI0LXRlJTQqODtyZXR1cm4gbmV3IEkuaW5pdChlZSxxKX19LFY9ay5VdGY4PXtzdHJpbmdpZnk6'@;
put 'ZnVuY3Rpb24oVSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGouc3RyaW5naWZ5KFUpKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgVVRGLTggZGF0YSIpfX0scGFyc2U6ZnVuY3Rpb24oVSl7cmV0dXJuIGoucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJ'@;
put 'Q29tcG9uZW50KFUpKSl9fSxCPXouQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1LLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBJLmluaXQsdGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKFUpeyJzdHJpbmciPT10eXBlb2YgVSYmKFU9Vi5wYXJzZShV'@;
put 'KSksdGhpcy5fZGF0YS5jb25jYXQoVSksdGhpcy5fbkRhdGFCeXRlcys9VS5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24oVSl7dmFyIHEsZWU9dGhpcy5fZGF0YSx0ZT1lZS53b3JkcyxvZT1lZS5zaWdCeXRlcyxzZT10aGlzLmJsb2NrU2l6ZSx1ZT1vZS8oNCpzZSksY2U9KHVlPVU/eC5j'@;
put 'ZWlsKHVlKTp4Lm1heCgoMHx1ZSktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKSkqc2UsRz14Lm1pbig0KmNlLG9lKTtpZihjZSl7Zm9yKHZhciBiPTA7YjxjZTtiKz1zZSl0aGlzLl9kb1Byb2Nlc3NCbG9jayh0ZSxiKTtxPXRlLnNwbGljZSgwLGNlKSxlZS5zaWdCeXRlcy09R31yZXR1cm4gbmV3'@;
put 'IEkuaW5pdChxLEcpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBVPUsuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gVS5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksVX0sX21pbkJ1ZmZlclNpemU6MH0pLFg9KHouSGFzaGVyPUIuZXh0ZW5kKHtjZmc6Sy5leHRlbmQoKSxpbml0OmZ1bmN0aW9uKFUp'@;
put 'e3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZChVKSx0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7Qi5yZXNldC5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKFUpe3JldHVybiB0aGlzLl9hcHBlbmQoVSksdGhpcy5fcHJvY2VzcygpLHRoaXN9LGZpbmFs'@;
put 'aXplOmZ1bmN0aW9uKFUpe3JldHVybiBVJiZ0aGlzLl9hcHBlbmQoVSksdGhpcy5fZG9GaW5hbGl6ZSgpfSxibG9ja1NpemU6MTYsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24ocSxlZSl7cmV0dXJuIG5ldyBVLmluaXQoZWUpLmZpbmFsaXplKHEpfX0sX2NyZWF0'@;
put 'ZUhtYWNIZWxwZXI6ZnVuY3Rpb24oVSl7cmV0dXJuIGZ1bmN0aW9uKHEsZWUpe3JldHVybiBuZXcgWC5ITUFDLmluaXQoVSxlZSkuZmluYWxpemUocSl9fX0pLFIuYWxnbz17fSk7cmV0dXJuIFJ9KE1hdGgpLGFlKX0sOTI4NzM6ZnVuY3Rpb24oYXQsSWUsRil7dmFyIGFlO2F0LmV4cG9ydHM9'@;
put 'KGFlPUYoMTAwMTIpLGZ1bmN0aW9uKHgpe3ZhciBtPWFlLGxlPW0ubGliLE09bGUuV29yZEFycmF5LE89bGUuSGFzaGVyLFI9bS5hbGdvLHo9W107IWZ1bmN0aW9uKCl7Zm9yKHZhciBWPTA7Vjw2NDtWKyspeltWXT00Mjk0OTY3Mjk2KnguYWJzKHguc2luKFYrMSkpfDB9KCk7dmFyIEs9Ui5N'@;
put 'RDU9Ty5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgTS5pbml0KFsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKFYsQil7Zm9yKHZhciBZPTA7WTwxNjtZKyspe3ZhciBYPUIrWSxV'@;
put 'PVZbWF07VltYXT0xNjcxMTkzNSYoVTw8OHxVPj4+MjQpfDQyNzgyNTUzNjAmKFU8PDI0fFU+Pj44KX12YXIgcT10aGlzLl9oYXNoLndvcmRzLGVlPVZbQiswXSx0ZT1WW0IrMV0sb2U9VltCKzJdLHNlPVZbQiszXSxoZT1WW0IrNF0sdWU9VltCKzVdLGNlPVZbQis2XSxHPVZbQis3XSxiPVZb'@;
put 'Qis4XSxEPVZbQis5XSxIPVZbQisxMF0sTj1WW0IrMTFdLGc9VltCKzEyXSxDPVZbQisxM10sUz1WW0IrMTRdLHY9VltCKzE1XSxwPXFbMF0sdz1xWzFdLEo9cVsyXSxuZT1xWzNdO3A9SShwLHcsSixuZSxlZSw3LHpbMF0pLG5lPUkobmUscCx3LEosdGUsMTIselsxXSksSj1JKEosbmUscCx3'@;
put 'LG9lLDE3LHpbMl0pLHc9SSh3LEosbmUscCxzZSwyMix6WzNdKSxwPUkocCx3LEosbmUsaGUsNyx6WzRdKSxuZT1JKG5lLHAsdyxKLHVlLDEyLHpbNV0pLEo9SShKLG5lLHAsdyxjZSwxNyx6WzZdKSx3PUkodyxKLG5lLHAsRywyMix6WzddKSxwPUkocCx3LEosbmUsYiw3LHpbOF0pLG5lPUko'@;
put 'bmUscCx3LEosRCwxMix6WzldKSxKPUkoSixuZSxwLHcsSCwxNyx6WzEwXSksdz1JKHcsSixuZSxwLE4sMjIselsxMV0pLHA9SShwLHcsSixuZSxnLDcselsxMl0pLG5lPUkobmUscCx3LEosQywxMix6WzEzXSksSj1JKEosbmUscCx3LFMsMTcselsxNF0pLHA9ayhwLHc9SSh3LEosbmUscCx2'@;
put 'LDIyLHpbMTVdKSxKLG5lLHRlLDUselsxNl0pLG5lPWsobmUscCx3LEosY2UsOSx6WzE3XSksSj1rKEosbmUscCx3LE4sMTQselsxOF0pLHc9ayh3LEosbmUscCxlZSwyMCx6WzE5XSkscD1rKHAsdyxKLG5lLHVlLDUselsyMF0pLG5lPWsobmUscCx3LEosSCw5LHpbMjFdKSxKPWsoSixuZSxw'@;
put 'LHcsdiwxNCx6WzIyXSksdz1rKHcsSixuZSxwLGhlLDIwLHpbMjNdKSxwPWsocCx3LEosbmUsRCw1LHpbMjRdKSxuZT1rKG5lLHAsdyxKLFMsOSx6WzI1XSksSj1rKEosbmUscCx3LHNlLDE0LHpbMjZdKSx3PWsodyxKLG5lLHAsYiwyMCx6WzI3XSkscD1rKHAsdyxKLG5lLEMsNSx6WzI4XSks'@;
put 'bmU9ayhuZSxwLHcsSixvZSw5LHpbMjldKSxKPWsoSixuZSxwLHcsRywxNCx6WzMwXSkscD1FKHAsdz1rKHcsSixuZSxwLGcsMjAselszMV0pLEosbmUsdWUsNCx6WzMyXSksbmU9RShuZSxwLHcsSixiLDExLHpbMzNdKSxKPUUoSixuZSxwLHcsTiwxNix6WzM0XSksdz1FKHcsSixuZSxwLFMs'@;
put 'MjMselszNV0pLHA9RShwLHcsSixuZSx0ZSw0LHpbMzZdKSxuZT1FKG5lLHAsdyxKLGhlLDExLHpbMzddKSxKPUUoSixuZSxwLHcsRywxNix6WzM4XSksdz1FKHcsSixuZSxwLEgsMjMselszOV0pLHA9RShwLHcsSixuZSxDLDQsels0MF0pLG5lPUUobmUscCx3LEosZWUsMTEsels0MV0pLEo9'@;
put 'RShKLG5lLHAsdyxzZSwxNix6WzQyXSksdz1FKHcsSixuZSxwLGNlLDIzLHpbNDNdKSxwPUUocCx3LEosbmUsRCw0LHpbNDRdKSxuZT1FKG5lLHAsdyxKLGcsMTEsels0NV0pLEo9RShKLG5lLHAsdyx2LDE2LHpbNDZdKSxwPWoocCx3PUUodyxKLG5lLHAsb2UsMjMsels0N10pLEosbmUsZWUs'@;
put 'Nix6WzQ4XSksbmU9aihuZSxwLHcsSixHLDEwLHpbNDldKSxKPWooSixuZSxwLHcsUywxNSx6WzUwXSksdz1qKHcsSixuZSxwLHVlLDIxLHpbNTFdKSxwPWoocCx3LEosbmUsZyw2LHpbNTJdKSxuZT1qKG5lLHAsdyxKLHNlLDEwLHpbNTNdKSxKPWooSixuZSxwLHcsSCwxNSx6WzU0XSksdz1q'@;
put 'KHcsSixuZSxwLHRlLDIxLHpbNTVdKSxwPWoocCx3LEosbmUsYiw2LHpbNTZdKSxuZT1qKG5lLHAsdyxKLHYsMTAsels1N10pLEo9aihKLG5lLHAsdyxjZSwxNSx6WzU4XSksdz1qKHcsSixuZSxwLEMsMjEsels1OV0pLHA9aihwLHcsSixuZSxoZSw2LHpbNjBdKSxuZT1qKG5lLHAsdyxKLE4s'@;
put 'MTAsels2MV0pLEo9aihKLG5lLHAsdyxvZSwxNSx6WzYyXSksdz1qKHcsSixuZSxwLEQsMjEsels2M10pLHFbMF09cVswXStwfDAscVsxXT1xWzFdK3d8MCxxWzJdPXFbMl0rSnwwLHFbM109cVszXStuZXwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBWPXRoaXMuX2RhdGEsQj1WLndv'@;
put 'cmRzLFk9OCp0aGlzLl9uRGF0YUJ5dGVzLFg9OCpWLnNpZ0J5dGVzO0JbWD4+PjVdfD0xMjg8PDI0LVglMzI7dmFyIFU9eC5mbG9vcihZLzQyOTQ5NjcyOTYpLHE9WTtCWzE1KyhYKzY0Pj4+OTw8NCldPTE2NzExOTM1JihVPDw4fFU+Pj4yNCl8NDI3ODI1NTM2MCYoVTw8MjR8VT4+PjgpLEJb'@;
put 'MTQrKFgrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKHE8PDh8cT4+PjI0KXw0Mjc4MjU1MzYwJihxPDwyNHxxPj4+OCksVi5zaWdCeXRlcz00KihCLmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBlZT10aGlzLl9oYXNoLHRlPWVlLndvcmRzLG9lPTA7b2U8NDtvZSsrKXt2YXIgc2U9'@;
put 'dGVbb2VdO3RlW29lXT0xNjcxMTkzNSYoc2U8PDh8c2U+Pj4yNCl8NDI3ODI1NTM2MCYoc2U8PDI0fHNlPj4+OCl9cmV0dXJuIGVlfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBWPU8uY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gVi5faGFzaD10aGlzLl9oYXNoLmNsb25lKCksVn19KTtmdW5jdGlv'@;
put 'biBJKFYsQixZLFgsVSxxLGVlKXt2YXIgdGU9VisoQiZZfH5CJlgpK1UrZWU7cmV0dXJuKHRlPDxxfHRlPj4+MzItcSkrQn1mdW5jdGlvbiBrKFYsQixZLFgsVSxxLGVlKXt2YXIgdGU9VisoQiZYfFkmflgpK1UrZWU7cmV0dXJuKHRlPDxxfHRlPj4+MzItcSkrQn1mdW5jdGlvbiBFKFYsQixZ'@;
put 'LFgsVSxxLGVlKXt2YXIgdGU9VisoQl5ZXlgpK1UrZWU7cmV0dXJuKHRlPDxxfHRlPj4+MzItcSkrQn1mdW5jdGlvbiBqKFYsQixZLFgsVSxxLGVlKXt2YXIgdGU9VisoWV4oQnx+WCkpK1UrZWU7cmV0dXJuKHRlPDxxfHRlPj4+MzItcSkrQn1tLk1ENT1PLl9jcmVhdGVIZWxwZXIoSyksbS5I'@;
put 'bWFjTUQ1PU8uX2NyZWF0ZUhtYWNIZWxwZXIoSyl9KE1hdGgpLGFlLk1ENSl9LDQwMTMyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtJZS51dGlscz1GKDUyMjk0KSxJZS5DaXBoZXI9RigyOTQ4NCksSWUuREVTPUYoMTQzNzQpLEllLkNCQz1GKDEyMDY2KSxJZS5FREU9Rig1OTcxMCl9LDEy'@;
put 'MDY2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KSxtPXt9O2Z1bmN0aW9uIGxlKE8pe2FlLmVxdWFsKE8ubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBSPTA7Ujx0aGlzLml2Lmxlbmd0'@;
put 'aDtSKyspdGhpcy5pdltSXT1PW1JdfUllLmluc3RhbnRpYXRlPWZ1bmN0aW9uIE0oTyl7ZnVuY3Rpb24gUihrKXtPLmNhbGwodGhpcyxrKSx0aGlzLl9jYmNJbml0KCl9eChSLE8pO2Zvcih2YXIgej1PYmplY3Qua2V5cyhtKSxLPTA7Szx6Lmxlbmd0aDtLKyspe3ZhciBJPXpbS107Ui5wcm90'@;
put 'b3R5cGVbSV09bVtJXX1yZXR1cm4gUi5jcmVhdGU9ZnVuY3Rpb24oRSl7cmV0dXJuIG5ldyBSKEUpfSxSfSxtLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIFI9bmV3IGxlKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9Un0sbS5fdXBkYXRlPWZ1bmN0aW9uKFIseixLLEkpe3ZhciBF'@;
put 'PXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxqPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBWPTA7Vjx0aGlzLmJsb2NrU2l6ZTtWKyspaltWXV49Ult6K1ZdO2ZvcihFLl91cGRhdGUuY2FsbCh0aGlzLGosMCxLLEkpLFY9MDtW'@;
put 'PHRoaXMuYmxvY2tTaXplO1YrKylqW1ZdPUtbSStWXX1lbHNle2ZvcihFLl91cGRhdGUuY2FsbCh0aGlzLFIseixLLEkpLFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylLW0krVl1ePWpbVl07Zm9yKFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylqW1ZdPVJbeitWXX19fSwyOTQ4NDooYXQsSWUs'@;
put 'Rik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpO2Z1bmN0aW9uIHgobSl7dGhpcy5vcHRpb25zPW0sdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5i'@;
put 'dWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1tLnBhZGRpbmd9YXQuZXhwb3J0cz14LHgucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSx4LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obGUpe3JldHVybiAwPT09bGUubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlz'@;
put 'Ll91cGRhdGVEZWNyeXB0KGxlKTp0aGlzLl91cGRhdGVFbmNyeXB0KGxlKX0seC5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihsZSxNKXtmb3IodmFyIE89TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLGxlLmxlbmd0aC1NKSxSPTA7UjxPO1IrKyl0aGlzLmJ1'@;
put 'ZmZlclt0aGlzLmJ1ZmZlck9mZitSXT1sZVtNK1JdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9TyxPfSx4LnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24obGUsTSl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLGxlLE0pLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9j'@;
put 'a1NpemV9LHgucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKGxlKXt2YXIgTT0wLE89MCx6PW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK2xlLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKE0rPXRoaXMuX2J1'@;
put 'ZmZlcihsZSxNKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKE8rPXRoaXMuX2ZsdXNoQnVmZmVyKHosTykpKTtmb3IodmFyIEs9bGUubGVuZ3RoLShsZS5sZW5ndGgtTSkldGhpcy5ibG9ja1NpemU7TTxLO00rPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShsZSxN'@;
put 'LHosTyksTys9dGhpcy5ibG9ja1NpemU7Zm9yKDtNPGxlLmxlbmd0aDtNKyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09bGVbTV07cmV0dXJuIHp9LHgucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKGxlKXtmb3IodmFyIE09MCxPPTAsUj1N'@;
put 'YXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK2xlLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsej1uZXcgQXJyYXkoUip0aGlzLmJsb2NrU2l6ZSk7Uj4wO1ItLSlNKz10aGlzLl9idWZmZXIobGUsTSksTys9dGhpcy5fZmx1c2hCdWZmZXIoeixPKTtyZXR1cm4gTSs9dGhpcy5fYnVmZmVyKGxl'@;
put 'LE0pLHp9LHgucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKGxlKXt2YXIgTSxPO3JldHVybiBsZSYmKE09dGhpcy51cGRhdGUobGUpKSxPPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxNP00uY29uY2F0KE8pOk99LHgucHJv'@;
put 'dG90eXBlLl9wYWQ9ZnVuY3Rpb24obGUsTSl7aWYoMD09PU0pcmV0dXJuITE7Zm9yKDtNPGxlLmxlbmd0aDspbGVbTSsrXT0wO3JldHVybiEwfSx4LnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0'@;
put 'dXJuW107dmFyIGxlPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLGxlLDApLGxlfSx4LnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24obGUpe3JldHVybiBsZX0seC5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe2Fl'@;
put 'LmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBsZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihsZSwwKSx0aGlzLl91bnBhZChsZSl9fSwxNDM3NDooYXQsSWUsRik9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCksbT1GKDUyMjk0KSxsZT1GKDI5NDg0KTtmdW5jdGlvbiBNKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIE8oeil7bGUuY2FsbCh0aGlzLHopO3ZhciBLPW5ldyBNO3RoaXMuX2Rl'@;
put 'c1N0YXRlPUssdGhpcy5kZXJpdmVLZXlzKEssei5rZXkpfXgoTyxsZSksYXQuZXhwb3J0cz1PLE8uY3JlYXRlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgTyhLKX07dmFyIFI9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO08ucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24o'@;
put 'SyxJKXtLLmtleXM9bmV3IEFycmF5KDMyKSxhZS5lcXVhbChJLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIGs9bS5yZWFkVUludDMyQkUoSSwwKSxFPW0ucmVhZFVJbnQzMkJFKEksNCk7bS5wYzEoayxFLEsudG1wLDApLGs9Sy50bXBbMF0sRT1LLnRt'@;
put 'cFsxXTtmb3IodmFyIGo9MDtqPEsua2V5cy5sZW5ndGg7ais9Mil7dmFyIFY9UltqPj4+MV07az1tLnIyOHNobChrLFYpLEU9bS5yMjhzaGwoRSxWKSxtLnBjMihrLEUsSy5rZXlzLGopfX0sTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihLLEksayxFKXt2YXIgaj10aGlzLl9kZXNTdGF0'@;
put 'ZSxWPW0ucmVhZFVJbnQzMkJFKEssSSksQj1tLnJlYWRVSW50MzJCRShLLEkrNCk7bS5pcChWLEIsai50bXAsMCksVj1qLnRtcFswXSxCPWoudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KGosVixCLGoudG1wLDApOnRoaXMuX2RlY3J5cHQoaixWLEIsai50bXAs'@;
put 'MCksQj1qLnRtcFsxXSxtLndyaXRlVUludDMyQkUoayxWPWoudG1wWzBdLEUpLG0ud3JpdGVVSW50MzJCRShrLEIsRSs0KX0sTy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihLLEkpe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgaz1LLmxlbmd0aC1JLEU9STtFPEsubGVu'@;
put 'Z3RoO0UrKylLW0VdPWs7cmV0dXJuITB9LE8ucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihLKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gSztmb3IodmFyIEk9S1tLLmxlbmd0aC0xXSxrPUsubGVuZ3RoLUk7azxLLmxlbmd0aDtrKyspYWUuZXF1YWwoS1trXSxJKTtyZXR1cm4gSy5z'@;
put 'bGljZSgwLEsubGVuZ3RoLUkpfSxPLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihLLEksayxFLGope2Zvcih2YXIgVj1JLEI9ayxZPTA7WTxLLmtleXMubGVuZ3RoO1krPTIpe3ZhciBYPUsua2V5c1tZXSxVPUsua2V5c1tZKzFdO20uZXhwYW5kKEIsSy50bXAsMCk7dmFyIHE9bS5zdWJz'@;
put 'dGl0dXRlKFhePUsudG1wWzBdLFVePUsudG1wWzFdKSx0ZT1CO0I9KFZebS5wZXJtdXRlKHEpKT4+PjAsVj10ZX1tLnJpcChCLFYsRSxqKX0sTy5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oSyxJLGssRSxqKXtmb3IodmFyIFY9ayxCPUksWT1LLmtleXMubGVuZ3RoLTI7WT49MDtZLT0y'@;
put 'KXt2YXIgWD1LLmtleXNbWV0sVT1LLmtleXNbWSsxXTttLmV4cGFuZChWLEsudG1wLDApO3ZhciBxPW0uc3Vic3RpdHV0ZShYXj1LLnRtcFswXSxVXj1LLnRtcFsxXSksdGU9VjtWPShCXm0ucGVybXV0ZShxKSk+Pj4wLEI9dGV9bS5yaXAoVixCLEUsail9fSw1OTcxMDooYXQsSWUsRik9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCksbT1GKDI5NDg0KSxsZT1GKDE0Mzc0KTtmdW5jdGlvbiBNKFIseil7YWUuZXF1YWwoei5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBLPXouc2xpY2UoMCw4KSxJPXouc2xpY2UoOCwxNiksaz16LnNsaWNl'@;
put 'KDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Uj9bbGUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6S30pLGxlLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okl9KSxsZS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTprfSldOltsZS5jcmVhdGUoe3R5cGU6ImRlY3J5cHQi'@;
put 'LGtleTprfSksbGUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6SX0pLGxlLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okt9KV19ZnVuY3Rpb24gTyhSKXttLmNhbGwodGhpcyxSKTt2YXIgej1uZXcgTSh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9en14'@;
put 'KE8sbSksYXQuZXhwb3J0cz1PLE8uY3JlYXRlPWZ1bmN0aW9uKHope3JldHVybiBuZXcgTyh6KX0sTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih6LEssSSxrKXt2YXIgRT10aGlzLl9lZGVTdGF0ZTtFLmNpcGhlcnNbMF0uX3VwZGF0ZSh6LEssSSxrKSxFLmNpcGhlcnNbMV0uX3VwZGF0'@;
put 'ZShJLGssSSxrKSxFLmNpcGhlcnNbMl0uX3VwZGF0ZShJLGssSSxrKX0sTy5wcm90b3R5cGUuX3BhZD1sZS5wcm90b3R5cGUuX3BhZCxPLnByb3RvdHlwZS5fdW5wYWQ9bGUucHJvdG90eXBlLl91bnBhZH0sNTIyOTQ6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtJZS5yZWFkVUludDMyQkU9ZnVu'@;
put 'Y3Rpb24obGUsTSl7cmV0dXJuKGxlWzArTV08PDI0fGxlWzErTV08PDE2fGxlWzIrTV08PDh8bGVbMytNXSk+Pj4wfSxJZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGxlLE0sTyl7bGVbMCtPXT1NPj4+MjQsbGVbMStPXT1NPj4+MTYmMjU1LGxlWzIrT109TT4+PjgmMjU1LGxlWzMrT109MjU1'@;
put 'Jk19LEllLmlwPWZ1bmN0aW9uKGxlLE0sTyxSKXtmb3IodmFyIHo9MCxLPTAsST02O0k+PTA7SS09Mil7Zm9yKHZhciBrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1NPj4+aytJJjE7Zm9yKGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PWxlPj4+aytJJjF9Zm9yKEk9NjtJPj0wO0ktPTIpe2Zvcihr'@;
put 'PTE7azw9MjU7ays9OClLPDw9MSxLfD1NPj4+aytJJjE7Zm9yKGs9MTtrPD0yNTtrKz04KUs8PD0xLEt8PWxlPj4+aytJJjF9T1tSKzBdPXo+Pj4wLE9bUisxXT1LPj4+MH0sSWUucmlwPWZ1bmN0aW9uKGxlLE0sTyxSKXtmb3IodmFyIHo9MCxLPTAsST0wO0k8NDtJKyspZm9yKHZhciBrPTI0'@;
put 'O2s+PTA7ay09OCl6PDw9MSx6fD1NPj4+aytJJjEsejw8PTEsenw9bGU+Pj5rK0kmMTtmb3IoST00O0k8ODtJKyspZm9yKGs9MjQ7az49MDtrLT04KUs8PD0xLEt8PU0+Pj5rK0kmMSxLPDw9MSxLfD1sZT4+PmsrSSYxO09bUiswXT16Pj4+MCxPW1IrMV09Sz4+PjB9LEllLnBjMT1mdW5jdGlv'@;
put 'bihsZSxNLE8sUil7Zm9yKHZhciB6PTAsSz0wLEk9NztJPj01O0ktLSl7Zm9yKHZhciBrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1NPj5rK0kmMTtmb3Ioaz0wO2s8PTI0O2srPTgpejw8PTEsenw9bGU+PmsrSSYxfWZvcihrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1NPj5rK0kmMTtmb3IoST0x'@;
put 'O0k8PTM7SSsrKXtmb3Ioaz0wO2s8PTI0O2srPTgpSzw8PTEsS3w9TT4+aytJJjE7Zm9yKGs9MDtrPD0yNDtrKz04KUs8PD0xLEt8PWxlPj5rK0kmMX1mb3Ioaz0wO2s8PTI0O2srPTgpSzw8PTEsS3w9bGU+PmsrSSYxO09bUiswXT16Pj4+MCxPW1IrMV09Sz4+PjB9LEllLnIyOHNobD1mdW5j'@;
put 'dGlvbihsZSxNKXtyZXR1cm4gbGU8PE0mMjY4NDM1NDU1fGxlPj4+MjgtTX07dmFyIEY9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAs'@;
put 'MTQsNiwyMCwyNywyNF07SWUucGMyPWZ1bmN0aW9uKGxlLE0sTyxSKXtmb3IodmFyIHo9MCxLPTAsST1GLmxlbmd0aD4+PjEsaz0wO2s8STtrKyspejw8PTEsenw9bGU+Pj5GW2tdJjE7Zm9yKGs9STtrPEYubGVuZ3RoO2srKylLPDw9MSxLfD1NPj4+RltrXSYxO09bUiswXT16Pj4+MCxPW1Ir'@;
put 'MV09Sz4+PjB9LEllLmV4cGFuZD1mdW5jdGlvbihsZSxNLE8pe3ZhciBSPTAsej0wO1I9KDEmbGUpPDw1fGxlPj4+Mjc7Zm9yKHZhciBLPTIzO0s+PTE1O0stPTQpUjw8PTYsUnw9bGU+Pj5LJjYzO2ZvcihLPTExO0s+PTM7Sy09NCl6fD1sZT4+PksmNjMsejw8PTY7enw9KDMxJmxlKTw8MXxs'@;
put 'ZT4+PjMxLE1bTyswXT1SPj4+MCxNW08rMV09ej4+PjB9O3ZhciBhZT1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDEx'@;
put 'LDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDks'@;
put 'MCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcs'@;
put 'MTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDEx'@;
put 'LDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDks'@;
put 'NywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMs'@;
put 'MTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwz'@;
put 'LDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtJZS5zdWJzdGl0dXRlPWZ1bmN0aW9uKGxlLE0pe2Zvcih2YXIgTz0wLFI9MDtSPDQ7UisrKU88PD00LE98'@;
put 'PWFlWzY0KlIrKGxlPj4+MTgtNipSJjYzKV07Zm9yKFI9MDtSPDQ7UisrKU88PD00LE98PWFlWzI1Nis2NCpSKyhNPj4+MTgtNipSJjYzKV07cmV0dXJuIE8+Pj4wfTt2YXIgeD1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIz'@;
put 'LDEzLDE5LDIsMjYsMTAsMjEsMjgsN107SWUucGVybXV0ZT1mdW5jdGlvbihsZSl7Zm9yKHZhciBNPTAsTz0wO088eC5sZW5ndGg7TysrKU08PD0xLE18PWxlPj4+eFtPXSYxO3JldHVybiBNPj4+MH0sSWUucGFkU3BsaXQ9ZnVuY3Rpb24obGUsTSxPKXtmb3IodmFyIFI9bGUudG9TdHJpbmco'@;
put 'Mik7Ui5sZW5ndGg8TTspUj0iMCIrUjtmb3IodmFyIHo9W10sSz0wO0s8TTtLKz1PKXoucHVzaChSLnNsaWNlKEssSytPKSk7cmV0dXJuIHouam9pbigiICIpfX0sNDUxNDQ6KGF0LEllLEYpPT57dmFyIGFlPUYoNzEwOTYpLHg9RigyOTc5OSksbT1GKDk1NTgwKSxNPXtiaW5hcnk6ITAsaGV4'@;
put 'OiEwLGJhc2U2NDohMH07SWUuRGlmZmllSGVsbG1hbkdyb3VwPUllLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1JZS5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIGxlKFIpe3ZhciB6PW5ldyBCdWZmZXIoeFtSXS5wcmltZSwiaGV4IiksSz1uZXcgQnVmZmVyKHhbUl0uZ2VuLCJoZXgiKTty'@;
put 'ZXR1cm4gbmV3IG0oeixLKX0sSWUuY3JlYXRlRGlmZmllSGVsbG1hbj1JZS5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIE8oUix6LEssSSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih6KXx8dm9pZCAwPT09TVt6XT9PKFIsImJpbmFyeSIseixLKTooej16fHwiYmluYXJ5IixJPUl8fCJiaW5hcnki'@;
put 'LEs9S3x8bmV3IEJ1ZmZlcihbMl0pLEJ1ZmZlci5pc0J1ZmZlcihLKXx8KEs9bmV3IEJ1ZmZlcihLLEkpKSwibnVtYmVyIj09dHlwZW9mIFI/bmV3IG0oYWUoUixLKSxLLCEwKTooQnVmZmVyLmlzQnVmZmVyKFIpfHwoUj1uZXcgQnVmZmVyKFIseikpLG5ldyBtKFIsSywhMCkpKX19LDk1NTgw'@;
put 'OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg3MzAxKSxtPW5ldyhGKDQ4NjA2KSksbGU9bmV3IGFlKDI0KSxNPW5ldyBhZSgxMSksTz1uZXcgYWUoMTApLFI9bmV3IGFlKDMpLHo9bmV3IGFlKDcpLEs9Rig3MTA5NiksST1GKDQ0MDE5KTtmdW5jdGlvbiBrKFgsVSl7cmV0dXJuIFU9VXx8InV0Zjgi'@;
put 'LEJ1ZmZlci5pc0J1ZmZlcihYKXx8KFg9bmV3IEJ1ZmZlcihYLFUpKSx0aGlzLl9wdWI9bmV3IGFlKFgpLHRoaXN9ZnVuY3Rpb24gRShYLFUpe3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoWCl8fChYPW5ldyBCdWZmZXIoWCxVKSksdGhpcy5fcHJpdj1uZXcgYWUoWCksdGhp'@;
put 'c31hdC5leHBvcnRzPUI7dmFyIGo9e307ZnVuY3Rpb24gQihYLFUscSl7dGhpcy5zZXRHZW5lcmF0b3IoVSksdGhpcy5fX3ByaW1lPW5ldyBhZShYKSx0aGlzLl9wcmltZT1hZS5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49WC5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlz'@;
put 'Ll9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHE/KHRoaXMuc2V0UHVibGljS2V5PWssdGhpcy5zZXRQcml2YXRlS2V5PUUpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIFkoWCxVKXt2YXIgcT1uZXcgQnVmZmVyKFgudG9BcnJheSgpKTtyZXR1cm4gVT9xLnRvU3RyaW5n'@;
put 'KFUpOnF9T2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gVihYLFUpe3ZhciBxPVUu'@;
put 'dG9TdHJpbmcoImhleCIpLGVlPVtxLFgudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoZWUgaW4gailyZXR1cm4galtlZV07dmFyIG9lLHRlPTA7aWYoWC5pc0V2ZW4oKXx8IUsuc2ltcGxlU2lldmV8fCFLLmZlcm1hdFRlc3QoWCl8fCFtLnRlc3QoWCkpcmV0dXJuIHRlKz0xLGpbZWVdPXRl'@;
put 'Kz0iMDIiPT09cXx8IjA1Ij09PXE/ODo0LHRlO3N3aXRjaChtLnRlc3QoWC5zaHJuKDEpKXx8KHRlKz0yKSxxKXtjYXNlIjAyIjpYLm1vZChsZSkuY21wKE0pJiYodGUrPTgpO2JyZWFrO2Nhc2UiMDUiOihvZT1YLm1vZChPKSkuY21wKFIpJiZvZS5jbXAoeikmJih0ZSs9OCk7YnJlYWs7ZGVm'@;
put 'YXVsdDp0ZSs9NH1yZXR1cm4galtlZV09dGUsdGV9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLEIucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgYWUoSSh0aGlzLl9wcmltZUxl'@;
put 'bikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LEIucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oWCl7dmFyIFU9KFg9KFg9bmV3IGFlKFgpKS50b1JlZCh0aGlz'@;
put 'Ll9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCkscT1uZXcgQnVmZmVyKFUudG9BcnJheSgpKSxlZT10aGlzLmdldFByaW1lKCk7aWYocS5sZW5ndGg8ZWUubGVuZ3RoKXt2YXIgdGU9bmV3IEJ1ZmZlcihlZS5sZW5ndGgtcS5sZW5ndGgpO3RlLmZpbGwoMCkscT1CdWZmZXIu'@;
put 'Y29uY2F0KFt0ZSxxXSl9cmV0dXJuIHF9LEIucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihVKXtyZXR1cm4gWSh0aGlzLl9wdWIsVSl9LEIucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oVSl7cmV0dXJuIFkodGhpcy5fcHJpdixVKX0sQi5wcm90b3R5cGUuZ2V0UHJp'@;
put 'bWU9ZnVuY3Rpb24oWCl7cmV0dXJuIFkodGhpcy5fX3ByaW1lLFgpfSxCLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oWCl7cmV0dXJuIFkodGhpcy5fZ2VuLFgpfSxCLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oWCxVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVy'@;
put 'LmlzQnVmZmVyKFgpfHwoWD1uZXcgQnVmZmVyKFgsVSkpLHRoaXMuX19nZW49WCx0aGlzLl9nZW49bmV3IGFlKFgpLHRoaXN9fSw3MTA5NjooYXQsSWUsRik9Pnt2YXIgYWU9Rig0NDAxOSk7YXQuZXhwb3J0cz10ZSx0ZS5zaW1wbGVTaWV2ZT1xLHRlLmZlcm1hdFRlc3Q9ZWU7dmFyIHg9Rig4'@;
put 'NzMwMSksbT1uZXcgeCgyNCksTT1uZXcoRig0ODYwNikpLE89bmV3IHgoMSksUj1uZXcgeCgyKSx6PW5ldyB4KDUpLGs9KG5ldyB4KDE2KSxuZXcgeCg4KSxuZXcgeCgxMCkpLEU9bmV3IHgoMyksVj0obmV3IHgoNyksbmV3IHgoMTEpKSxCPW5ldyB4KDQpLFg9KG5ldyB4KDEyKSxudWxsKTtm'@;
put 'dW5jdGlvbiBxKG9lKXtmb3IodmFyIHNlPWZ1bmN0aW9uIFUoKXtpZihudWxsIT09WClyZXR1cm4gWDt2YXIgc2U9W107c2VbMF09Mjtmb3IodmFyIGhlPTEsdWU9Mzt1ZTwxMDQ4NTc2O3VlKz0yKXtmb3IodmFyIGNlPU1hdGguY2VpbChNYXRoLnNxcnQodWUpKSxHPTA7RzxoZSYmc2VbR108'@;
put 'PWNlJiZ1ZSVzZVtHXSE9MDtHKyspO2hlIT09RyYmc2VbR108PWNlfHwoc2VbaGUrK109dWUpfXJldHVybiBYPXNlLHNlfSgpLGhlPTA7aGU8c2UubGVuZ3RoO2hlKyspaWYoMD09PW9lLm1vZG4oc2VbaGVdKSlyZXR1cm4gMD09PW9lLmNtcG4oc2VbaGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBl'@;
put 'ZShvZSl7dmFyIHNlPXgubW9udChvZSk7cmV0dXJuIDA9PT1SLnRvUmVkKHNlKS5yZWRQb3cob2Uuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gdGUob2Usc2Upe2lmKG9lPDE2KXJldHVybiBuZXcgeCgyPT09c2V8fDU9PT1zZT9bMTQwLDEyM106WzE0MCwzOV0pO3NlPW5l'@;
put 'dyB4KHNlKTtmb3IodmFyIGhlLHVlOzspe2ZvcihoZT1uZXcgeChhZShNYXRoLmNlaWwob2UvOCkpKTtoZS5iaXRMZW5ndGgoKT5vZTspaGUuaXNocm4oMSk7aWYoaGUuaXNFdmVuKCkmJmhlLmlhZGQoTyksaGUudGVzdG4oMSl8fGhlLmlhZGQoUiksc2UuY21wKFIpKXtpZighc2UuY21wKHop'@;
put 'KWZvcig7aGUubW9kKGspLmNtcChFKTspaGUuaWFkZChCKX1lbHNlIGZvcig7aGUubW9kKG0pLmNtcChWKTspaGUuaWFkZChCKTtpZihxKHVlPWhlLnNocm4oMSkpJiZxKGhlKSYmZWUodWUpJiZlZShoZSkmJk0udGVzdCh1ZSkmJk0udGVzdChoZSkpcmV0dXJuIGhlfX19LDg3MzAxOmZ1bmN0'@;
put 'aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5w'@;
put 'cm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigo'@;
put 'ImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdp'@;
put 'bmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+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+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFBuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygo'@;
put 'ODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKFBuPj4+MjYpfDAsUG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGgu'@;
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+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPVBuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1n'@;
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 'aW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDcwODk2OmZ1bmN0aW9uKGF0KXthdC5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u'@;
put 'IEllKE1lKXtyZXR1cm4oSWU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oRGUpe3JldHVybiB0eXBlb2YgRGV9OmZ1bmN0aW9uKERlKXtyZXR1cm4gRGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJkRlLmNv'@;
put 'bnN0cnVjdG9yPT09U3ltYm9sJiZEZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIERlfSkoTWUpfWZ1bmN0aW9uIEYoTWUsRGUpe3JldHVybihGPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24ob3QsdXQpe3JldHVybiBvdC5fX3Byb3RvX189dXQsb3R9KShNZSxE'@;
put 'ZSl9ZnVuY3Rpb24geChNZSxEZSx6ZSl7cmV0dXJuKHg9ZnVuY3Rpb24gYWUoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3Jl'@;
put 'dHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk/UmVmbGVjdC5jb25zdHJ1Y3Q6ZnVuY3Rpb24odXQsTXQsSHQpe3ZhciBQdD1bbnVsbF07UHQucHVzaC5hcHBs'@;
put 'eShQdCxNdCk7dmFyIENuPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHV0LFB0KSk7cmV0dXJuIEh0JiZGKENuLEh0LnByb3RvdHlwZSksQ259KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbShNZSl7cmV0dXJuIGZ1bmN0aW9uIGxlKE1lKXtpZihBcnJheS5pc0FycmF5KE1lKSly'@;
put 'ZXR1cm4gUihNZSl9KE1lKXx8ZnVuY3Rpb24gTShNZSl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPU1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPU1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oTWUpfShNZSl8fGZ1bmN0aW9uIE8oTWUsRGUpe2lmKE1lKXtpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIE1lKXJldHVybiBSKE1lLERlKTt2YXIgemU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE1lKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PXplJiZNZS5jb25zdHJ1Y3RvciYmKHplPU1lLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09emV8fCJTZXQiPT09'@;
put 'emUpcmV0dXJuIEFycmF5LmZyb20oTWUpO2lmKCJBcmd1bWVudHMiPT09emV8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHplKSlyZXR1cm4gUihNZSxEZSl9fShNZSl8fGZ1bmN0aW9uIHooKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0'@;
put 'dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBSKE1lLERlKXsobnVsbD09RGV8fERlPk1lLmxl'@;
put 'bmd0aCkmJihEZT1NZS5sZW5ndGgpO2Zvcih2YXIgemU9MCxvdD1uZXcgQXJyYXkoRGUpO3plPERlO3plKyspb3RbemVdPU1lW3plXTtyZXR1cm4gb3R9dmFyIEs9T2JqZWN0Lmhhc093blByb3BlcnR5LEk9T2JqZWN0LnNldFByb3RvdHlwZU9mLGs9T2JqZWN0LmlzRnJvemVuLEU9T2JqZWN0'@;
put 'LmdldFByb3RvdHlwZU9mLGo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixWPU9iamVjdC5mcmVlemUsQj1PYmplY3Quc2VhbCxZPU9iamVjdC5jcmVhdGUsWD10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QsVT1YLmFwcGx5LHE9WC5jb25zdHJ1Y3Q7VXx8KFU9ZnVuY3Rpb24o'@;
put 'RGUsemUsb3Qpe3JldHVybiBEZS5hcHBseSh6ZSxvdCl9KSxWfHwoVj1mdW5jdGlvbihEZSl7cmV0dXJuIERlfSksQnx8KEI9ZnVuY3Rpb24oRGUpe3JldHVybiBEZX0pLHF8fChxPWZ1bmN0aW9uKERlLHplKXtyZXR1cm4geChEZSxtKHplKSl9KTt2YXIgZWU9TihBcnJheS5wcm90b3R5cGUu'@;
put 'Zm9yRWFjaCksdGU9TihBcnJheS5wcm90b3R5cGUucG9wKSxvZT1OKEFycmF5LnByb3RvdHlwZS5wdXNoKSxzZT1OKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLGhlPU4oU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksdWU9TihTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxjZT1OKFN0'@;
put 'cmluZy5wcm90b3R5cGUucmVwbGFjZSksRz1OKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksYj1OKFN0cmluZy5wcm90b3R5cGUudHJpbSksRD1OKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksSD1mdW5jdGlvbiBnKE1lKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIERlPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsemU9bmV3IEFycmF5KERlKSxvdD0wO290PERlO290KyspemVbb3RdPWFyZ3VtZW50c1tvdF07cmV0dXJuIHEoTWUsemUpfX0oVHlwZUVycm9yKTtmdW5jdGlvbiBOKE1lKXtyZXR1cm4gZnVuY3Rpb24oRGUpe2Zvcih2YXIgemU9YXJndW1lbnRzLmxlbmd0aCxvdD1uZXcgQXJyYXko'@;
put 'emU+MT96ZS0xOjApLHV0PTE7dXQ8emU7dXQrKylvdFt1dC0xXT1hcmd1bWVudHNbdXRdO3JldHVybiBVKE1lLERlLG90KX19ZnVuY3Rpb24gQyhNZSxEZSx6ZSl7dmFyIG90O3plPW51bGwhPT0ob3Q9emUpJiZ2b2lkIDAhPT1vdD9vdDpzZSxJJiZJKE1lLG51bGwpO2Zvcih2YXIgdXQ9RGUu'@;
put 'bGVuZ3RoO3V0LS07KXt2YXIgTXQ9RGVbdXRdO2lmKCJzdHJpbmciPT10eXBlb2YgTXQpe3ZhciBIdD16ZShNdCk7SHQhPT1NdCYmKGsoRGUpfHwoRGVbdXRdPUh0KSxNdD1IdCl9TWVbTXRdPSEwfXJldHVybiBNZX1mdW5jdGlvbiBTKE1lKXt2YXIgemUsRGU9WShudWxsKTtmb3IoemUgaW4g'@;
put 'TWUpITA9PT1VKEssTWUsW3plXSkmJihEZVt6ZV09TWVbemVdKTtyZXR1cm4gRGV9ZnVuY3Rpb24gdihNZSxEZSl7Zm9yKDtudWxsIT09TWU7KXt2YXIgemU9aihNZSxEZSk7aWYoemUpe2lmKHplLmdldClyZXR1cm4gTih6ZS5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB6ZS52YWx1ZSly'@;
put 'ZXR1cm4gTih6ZS52YWx1ZSl9TWU9RShNZSl9cmV0dXJuIGZ1bmN0aW9uIG90KHV0KXtyZXR1cm4gY29uc29sZS53YXJuKCJmYWxsYmFjayB2YWx1ZSBmb3IiLHV0KSxudWxsfX12YXIgcD1WKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUi'@;
put 'LCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIs'@;
put 'ImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYi'@;
put 'LCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwia2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwi'@;
put 'b3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ry'@;
put 'b25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSx3PVYoWyJzdmci'@;
put 'LCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBo'@;
put 'IiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIs'@;
put 'InN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLEo9VihbImZlQmxlbmQiLCJmZUNvbG9yTWF0cml4IiwiZmVDb21wb25lbnRUcmFuc2ZlciIsImZlQ29tcG9zaXRlIiwiZmVDb252b2x2ZU1hdHJpeCIsImZl'@;
put 'RGlmZnVzZUxpZ2h0aW5nIiwiZmVEaXNwbGFjZW1lbnRNYXAiLCJmZURpc3RhbnRMaWdodCIsImZlRmxvb2QiLCJmZUZ1bmNBIiwiZmVGdW5jQiIsImZlRnVuY0ciLCJmZUZ1bmNSIiwiZmVHYXVzc2lhbkJsdXIiLCJmZUltYWdlIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9s'@;
put 'b2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxuZT1WKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZmVkcm9wc2hhZG93IiwiZm9udC1m'@;
put 'YWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5'@;
put 'cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxkZT1WKFsibWF0aCIsIm1lbmNsb3NlIiwibWVycm9yIiwibWZlbmNlZCIsIm1mcmFjIiwibWdseXBoIiwibWkiLCJtbGFiZWxlZHRyIiwibW11bHRpc2NyaXB0cyIsIm1uIiwibW8iLCJtb3ZlciIsIm1w'@;
put 'YWRkZWQiLCJtcGhhbnRvbSIsIm1yb290IiwibXJvdyIsIm1zIiwibXNwYWNlIiwibXNxcnQiLCJtc3R5bGUiLCJtc3ViIiwibXN1cCIsIm1zdWJzdXAiLCJtdGFibGUiLCJtdGQiLCJtdGV4dCIsIm10ciIsIm11bmRlciIsIm11bmRlcm92ZXIiXSksZmU9VihbIm1hY3Rpb24iLCJtYWxpZ25n'@;
put 'cm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIsIm5vbmUiXSkseGU9VihbIiN0ZXh0'@;
put 'Il0pLExlPVYoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwi'@;
put 'Y2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJs'@;
put 'ZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFu'@;
put 'ZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNtYXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwi'@;
put 'bmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1'@;
put 'aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5'@;
put 'IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLEZlPVYoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYXNjZW50'@;
put 'IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNoaWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xv'@;
put 'ci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJlbmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRn'@;
put 'ZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJmaWxsIiwiZmlsbC1vcGFjaXR5IiwiZmlsbC1ydWxlIiwiZmlsdGVyIiwiZmlsdGVydW5pdHMiLCJmbG9vZC1jb2xvciIsImZsb29kLW9wYWNpdHkiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc2l6ZS1hZGp1c3QiLCJmb250LXN0'@;
put 'cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC12YXJpYW50IiwiZm9udC13ZWlnaHQiLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoLW5hbWUiLCJnbHlwaHJlZiIsImdyYWRpZW50dW5pdHMiLCJncmFkaWVudHRyYW5zZm9ybSIsImhlaWdodCIsImhyZWYiLCJpZCIsImltYWdlLXJlbmRlcmlu'@;
put 'ZyIsImluIiwiaW4yIiwiayIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmluZyIsImtleXBvaW50cyIsImtleXNwbGluZXMiLCJrZXl0aW1lcyIsImxhbmciLCJsZW5ndGhhZGp1c3QiLCJsZXR0ZXItc3BhY2luZyIsImtlcm5lbG1hdHJpeCIsImtlcm5lbHVuaXRsZW5ndGgiLCJsaWdodGlu'@;
put 'Zy1jb2xvciIsImxvY2FsIiwibWFya2VyLWVuZCIsIm1hcmtlci1taWQiLCJtYXJrZXItc3RhcnQiLCJtYXJrZXJoZWlnaHQiLCJtYXJrZXJ1bml0cyIsIm1hcmtlcndpZHRoIiwibWFza2NvbnRlbnR1bml0cyIsIm1hc2t1bml0cyIsIm1heCIsIm1hc2siLCJtZWRpYSIsIm1ldGhvZCIsIm1v'@;
put 'ZGUiLCJtaW4iLCJuYW1lIiwibnVtb2N0YXZlcyIsIm9mZnNldCIsIm9wZXJhdG9yIiwib3BhY2l0eSIsIm9yZGVyIiwib3JpZW50Iiwib3JpZW50YXRpb24iLCJvcmlnaW4iLCJvdmVyZmxvdyIsInBhaW50LW9yZGVyIiwicGF0aCIsInBhdGhsZW5ndGgiLCJwYXR0ZXJuY29udGVudHVuaXRz'@;
put 'IiwicGF0dGVybnRyYW5zZm9ybSIsInBhdHRlcm51bml0cyIsInBvaW50cyIsInByZXNlcnZlYWxwaGEiLCJwcmVzZXJ2ZWFzcGVjdHJhdGlvIiwicHJpbWl0aXZldW5pdHMiLCJyIiwicngiLCJyeSIsInJhZGl1cyIsInJlZngiLCJyZWZ5IiwicmVwZWF0Y291bnQiLCJyZXBlYXRkdXIiLCJy'@;
put 'ZXN0YXJ0IiwicmVzdWx0Iiwicm90YXRlIiwic2NhbGUiLCJzZWVkIiwic2hhcGUtcmVuZGVyaW5nIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xv'@;
put 'ciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3Vy'@;
put 'ZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwi'@;
put 'dTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmlld2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIs'@;
put 'InljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEiLCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxPZT1WKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVt'@;
put 'bnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRo'@;
put 'YmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFj'@;
put 'ZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZz'@;
put 'ZXQiLCJ3aWR0aCIsInhtbG5zIl0pLGplPVYoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSxXZT1CKC9ce1x7W1x3XFddKnxbXHdcV10qXH1cfS9nbSksS2U9QigvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksWWU9QigvXCR7'@;
put 'W1x3XFddKn0vZ20pLFFlPUIoL15kYXRhLVtcLVx3Llx1MDBCNy1cdUZGRkZdLyksbHQ9QigvXmFyaWEtW1wtXHddKyQvKSxQZT1CKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSks'@;
put 'YmU9QigvXig/Olx3K3NjcmlwdHxkYXRhKTovaSksQWU9QigvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxUZT1CKC9eaHRtbCQvaSk7cmV0dXJuIGZ1bmN0aW9uIFVlKCl7dmFyIE1lPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdyxEZT1mdW5jdGlvbihZbil7cmV0dXJuIFVlKFluKX07aWYoRGUudmVyc2lvbj0iMi40LjciLERlLnJlbW92ZWQ9W10sIU1lfHwhTWUuZG9jdW1lbnR8fDkhPT1NZS5kb2N1bWVudC5u'@;
put 'b2RlVHlwZSlyZXR1cm4gRGUuaXNTdXBwb3J0ZWQ9ITEsRGU7dmFyIHplPU1lLmRvY3VtZW50LG90PU1lLmRvY3VtZW50LHV0PU1lLkRvY3VtZW50RnJhZ21lbnQsTXQ9TWUuSFRNTFRlbXBsYXRlRWxlbWVudCxIdD1NZS5Ob2RlLFB0PU1lLkVsZW1lbnQsb249TWUuTm9kZUZpbHRlcixDbj1N'@;
put 'ZS5OYW1lZE5vZGVNYXAsVXQ9dm9pZCAwPT09Q24/TWUuTmFtZWROb2RlTWFwfHxNZS5Nb3pOYW1lZEF0dHJNYXA6Q24sYm49TWUuSFRNTEZvcm1FbGVtZW50LFduPU1lLkRPTVBhcnNlcixlbj1NZS50cnVzdGVkVHlwZXMsJG49UHQucHJvdG90eXBlLEhuPXYoJG4sImNsb25lTm9kZSIpLGZ0'@;
put 'PXYoJG4sIm5leHRTaWJsaW5nIiksZm49digkbiwiY2hpbGROb2RlcyIpLGhuPXYoJG4sInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTXQpe3ZhciB3dD1vdC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3d0LmNvbnRlbnQmJnd0LmNvbnRlbnQub3duZXJEb2N1bWVudCYm'@;
put 'KG90PXd0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9dmFyIFh0PWZ1bmN0aW9uKERlLHplKXtpZigib2JqZWN0IiE9PUllKERlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIERlLmNyZWF0ZVBvbGljeSlyZXR1cm4gbnVsbDt2YXIgb3Q9bnVsbCx1dD0iZGF0YS10dC1wb2xpY3ktc3VmZml4Ijt6ZS5j'@;
put 'dXJyZW50U2NyaXB0JiZ6ZS5jdXJyZW50U2NyaXB0Lmhhc0F0dHJpYnV0ZSh1dCkmJihvdD16ZS5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZSh1dCkpO3ZhciBNdD0iZG9tcHVyaWZ5Iisob3Q/IiMiK290OiIiKTt0cnl7cmV0dXJuIERlLmNyZWF0ZVBvbGljeShNdCx7Y3JlYXRlSFRNTDpm'@;
put 'dW5jdGlvbihQdCl7cmV0dXJuIFB0fSxjcmVhdGVTY3JpcHRVUkw6ZnVuY3Rpb24oUHQpe3JldHVybiBQdH19KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrTXQrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX0oZW4semUpLF90PVh0P1h0'@;
put 'LmNyZWF0ZUhUTUwoIiIpOiIiLG1uPW90LmltcGxlbWVudGF0aW9uLHJ0PW90LmNyZWF0ZU5vZGVJdGVyYXRvcixJdD1vdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50LFF0PW90LmdldEVsZW1lbnRzQnlUYWdOYW1lLER0PXplLmltcG9ydE5vZGUscHQ9e307dHJ5e3B0PVMob3QpLmRvY3VtZW50'@;
put 'TW9kZT9vdC5kb2N1bWVudE1vZGU6e319Y2F0Y2h7fXZhciBZdD17fTtEZS5pc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgaG4mJm1uJiZ2b2lkIDAhPT1tbi5jcmVhdGVIVE1MRG9jdW1lbnQmJjkhPT1wdDt2YXIgZWEsJGEsSW49V2UsenQ9S2UseW49WWUseG49UWUsc249bHQsQm49'@;
put 'YmUsUm49QWUsJHQ9UGUsUG49bnVsbCxuaT1DKHt9LFtdLmNvbmNhdChtKHApLG0odyksbShKKSxtKGRlKSxtKHhlKSkpLGxuPW51bGwsam49Qyh7fSxbXS5jb25jYXQobShMZSksbShGZSksbShPZSksbShqZSkpKSxxcj1PYmplY3Quc2VhbChPYmplY3QuY3JlYXRlKG51bGwse3RhZ05hbWVD'@;
put 'aGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6'@;
put 'e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxnaT1udWxsLHhyPW51bGwsVWk9ITAsS3I9ITAsbm89ITEsSHI9ITAscWk9ITEsSmk9ITEsYW89ITEscm89ITEsaW89ITEsR2k9ITEsaG89ITEseXI9ITAsUGk9ITEsaHM9ITAscnM9ITEsUmM9'@;
put 'e30sdWw9bnVsbCxPYz1DKHt9LFsiYW5ub3RhdGlvbi14bWwiLCJhdWRpbyIsImNvbGdyb3VwIiwiZGVzYyIsImZvcmVpZ25vYmplY3QiLCJoZWFkIiwiaWZyYW1lIiwibWF0aCIsIm1pIiwibW4iLCJtbyIsIm1zIiwibXRleHQiLCJub2VtYmVkIiwibm9mcmFtZXMiLCJub3NjcmlwdCIsInBs'@;
put 'YWludGV4dCIsInNjcmlwdCIsInN0eWxlIiwic3ZnIiwidGVtcGxhdGUiLCJ0aGVhZCIsInRpdGxlIiwidmlkZW8iLCJ4bXAiXSksTjA9bnVsbCxzMz1DKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSksazI9bnVsbCxlMD1DKHt9LFsiYWx0Iiwi'@;
put 'Y2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSkseHU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLGZzPSJodHRwOi8vd3d3Lncz'@;
put 'Lm9yZy8yMDAwL3N2ZyIsUGE9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFNyPVBhLEEyPSExLGEzPW51bGwsUGg9Qyh7fSxbeHUsZnMsUGFdLGhlKSxpcz1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdLHQwPW51bGwsU2E9b3QuY3JlYXRlRWxlbWVudCgiZm9y'@;
put 'bSIpLEZoPWZ1bmN0aW9uKFluKXtyZXR1cm4gWW4gaW5zdGFuY2VvZiBSZWdFeHB8fFluIGluc3RhbmNlb2YgRnVuY3Rpb259LEV1PWZ1bmN0aW9uKFluKXt0MCYmdDA9PT1Zbnx8KCghWW58fCJvYmplY3QiIT09SWUoWW4pKSYmKFluPXt9KSxZbj1TKFluKSxlYT1lYT0tMT09PWlzLmluZGV4'@;
put 'T2YoWW4uUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOlluLlBBUlNFUl9NRURJQV9UWVBFLCRhPSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09ZWE/aGU6c2UsUG49IkFMTE9XRURfVEFHUyJpbiBZbj9DKHt9LFluLkFMTE9XRURfVEFHUywkYSk6bmksbG49IkFMTE9XRURfQVRUUiJp'@;
put 'biBZbj9DKHt9LFluLkFMTE9XRURfQVRUUiwkYSk6am4sYTM9IkFMTE9XRURfTkFNRVNQQUNFUyJpbiBZbj9DKHt9LFluLkFMTE9XRURfTkFNRVNQQUNFUyxoZSk6UGgsazI9IkFERF9VUklfU0FGRV9BVFRSImluIFluP0MoUyhlMCksWW4uQUREX1VSSV9TQUZFX0FUVFIsJGEpOmUwLE4wPSJB'@;
put 'RERfREFUQV9VUklfVEFHUyJpbiBZbj9DKFMoczMpLFluLkFERF9EQVRBX1VSSV9UQUdTLCRhKTpzMyx1bD0iRk9SQklEX0NPTlRFTlRTImluIFluP0Moe30sWW4uRk9SQklEX0NPTlRFTlRTLCRhKTpPYyxnaT0iRk9SQklEX1RBR1MiaW4gWW4/Qyh7fSxZbi5GT1JCSURfVEFHUywkYSk6e30s'@;
put 'eHI9IkZPUkJJRF9BVFRSImluIFluP0Moe30sWW4uRk9SQklEX0FUVFIsJGEpOnt9LFJjPSJVU0VfUFJPRklMRVMiaW4gWW4mJlluLlVTRV9QUk9GSUxFUyxVaT0hMSE9PVluLkFMTE9XX0FSSUFfQVRUUixLcj0hMSE9PVluLkFMTE9XX0RBVEFfQVRUUixubz1Zbi5BTExPV19VTktOT1dOX1BS'@;
put 'T1RPQ09MU3x8ITEsSHI9ITEhPT1Zbi5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIscWk9WW4uU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxKaT1Zbi5XSE9MRV9ET0NVTUVOVHx8ITEsaW89WW4uUkVUVVJOX0RPTXx8ITEsR2k9WW4uUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsaG89WW4uUkVUVVJO'@;
put 'X1RSVVNURURfVFlQRXx8ITEscm89WW4uRk9SQ0VfQk9EWXx8ITEseXI9ITEhPT1Zbi5TQU5JVElaRV9ET00sUGk9WW4uU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLGhzPSExIT09WW4uS0VFUF9DT05URU5ULHJzPVluLklOX1BMQUNFfHwhMSwkdD1Zbi5BTExPV0VEX1VSSV9SRUdFWFB8fCR0'@;
put 'LFNyPVluLk5BTUVTUEFDRXx8UGEscXI9WW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZGaChZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYocXIudGFnTmFtZUNoZWNrPVluLkNVU1RPTV9FTEVNRU5UX0hB'@;
put 'TkRMSU5HLnRhZ05hbWVDaGVjayksWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJkZoKFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykmJihxci5hdHRyaWJ1dGVOYW1lQ2hlY2s9WW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNo'@;
put 'ZWNrKSxZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2YgWW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYocXIuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPVluLkNVU1RPTV9FTEVNRU5UX0hB'@;
put 'TkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cykscWkmJihLcj0hMSksR2kmJihpbz0hMCksUmMmJihQbj1DKHt9LG0oeGUpKSxsbj1bXSwhMD09PVJjLmh0bWwmJihDKFBuLHApLEMobG4sTGUpKSwhMD09PVJjLnN2ZyYmKEMoUG4sdyksQyhsbixGZSksQyhsbixqZSkpLCEw'@;
put 'PT09UmMuc3ZnRmlsdGVycyYmKEMoUG4sSiksQyhsbixGZSksQyhsbixqZSkpLCEwPT09UmMubWF0aE1sJiYoQyhQbixkZSksQyhsbixPZSksQyhsbixqZSkpKSxZbi5BRERfVEFHUyYmKFBuPT09bmkmJihQbj1TKFBuKSksQyhQbixZbi5BRERfVEFHUywkYSkpLFluLkFERF9BVFRSJiYobG49'@;
put 'PT1qbiYmKGxuPVMobG4pKSxDKGxuLFluLkFERF9BVFRSLCRhKSksWW4uQUREX1VSSV9TQUZFX0FUVFImJkMoazIsWW4uQUREX1VSSV9TQUZFX0FUVFIsJGEpLFluLkZPUkJJRF9DT05URU5UUyYmKHVsPT09T2MmJih1bD1TKHVsKSksQyh1bCxZbi5GT1JCSURfQ09OVEVOVFMsJGEpKSxocyYm'@;
put 'KFBuWyIjdGV4dCJdPSEwKSxKaSYmQyhQbixbImh0bWwiLCJoZWFkIiwiYm9keSJdKSxQbi50YWJsZSYmKEMoUG4sWyJ0Ym9keSJdKSxkZWxldGUgZ2kudGJvZHkpLFYmJlYoWW4pLHQwPVluKX0sQXM9Qyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksbjA9Qyh7fSxbImZvcmVp'@;
put 'Z25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxxYT1DKHt9LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pLF9jPUMoe30sdyk7QyhfYyxKKSxDKF9jLG5lKTt2YXIgSGg9Qyh7fSxkZSk7QyhIaCxmZSk7dmFyIGJvPWZ1bmN0aW9uKFluKXtv'@;
put 'ZShEZS5yZW1vdmVkLHtlbGVtZW50OllufSk7dHJ5e1luLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoWW4pfWNhdGNoe3RyeXtZbi5vdXRlckhUTUw9X3R9Y2F0Y2h7WW4ucmVtb3ZlKCl9fX0scjA9ZnVuY3Rpb24oWW4sYmkpe3RyeXtvZShEZS5yZW1vdmVkLHthdHRyaWJ1dGU6YmkuZ2V0QXR0'@;
put 'cmlidXRlTm9kZShZbiksZnJvbTpiaX0pfWNhdGNoe29lKERlLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206Yml9KX1pZihiaS5yZW1vdmVBdHRyaWJ1dGUoWW4pLCJpcyI9PT1ZbiYmIWxuW1luXSlpZihpb3x8R2kpdHJ5e2JvKGJpKX1jYXRjaHt9ZWxzZSB0cnl7Ymkuc2V0QXR0cmli'@;
put 'dXRlKFluLCIiKX1jYXRjaHt9fSxUMj1mdW5jdGlvbihZbil7dmFyIGJpLHlpO2lmKHJvKVluPSI8cmVtb3ZlPjwvcmVtb3ZlPiIrWW47ZWxzZXt2YXIgb3M9dWUoWW4sL15bXHJcblx0IF0rLyk7eWk9b3MmJm9zWzBdfSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09ZWEmJlNyPT09UGEmJihZ'@;
put 'bj0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjwvaGVhZD48Ym9keT4nK1luKyI8L2JvZHk+PC9odG1sPiIpO3ZhciBGYT1YdD9YdC5jcmVhdGVIVE1MKFluKTpZbjtpZihTcj09PVBhKXRyeXtiaT0obmV3IFduKS5wYXJzZUZyb21TdHJpbmcoRmEs'@;
put 'ZWEpfWNhdGNoe31pZighYml8fCFiaS5kb2N1bWVudEVsZW1lbnQpe2JpPW1uLmNyZWF0ZURvY3VtZW50KFNyLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e2JpLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9QTI/X3Q6RmF9Y2F0Y2h7fX12YXIgSGE9YmkuYm9keXx8YmkuZG9jdW1lbnRFbGVtZW50'@;
put 'O3JldHVybiBZbiYmeWkmJkhhLmluc2VydEJlZm9yZShvdC5jcmVhdGVUZXh0Tm9kZSh5aSksSGEuY2hpbGROb2Rlc1swXXx8bnVsbCksU3I9PT1QYT9RdC5jYWxsKGJpLEppPyJodG1sIjoiYm9keSIpWzBdOkppP2JpLmRvY3VtZW50RWxlbWVudDpIYX0sRDI9ZnVuY3Rpb24oWW4pe3JldHVy'@;
put 'biBydC5jYWxsKFluLm93bmVyRG9jdW1lbnR8fFluLFluLG9uLlNIT1dfRUxFTUVOVHxvbi5TSE9XX0NPTU1FTlR8b24uU0hPV19URVhULG51bGwsITEpfSxBcj1mdW5jdGlvbihZbil7cmV0dXJuIm9iamVjdCI9PT1JZShIdCk/WW4gaW5zdGFuY2VvZiBIdDpZbiYmIm9iamVjdCI9PT1JZShZ'@;
put 'bikmJiJudW1iZXIiPT10eXBlb2YgWW4ubm9kZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgWW4ubm9kZU5hbWV9LGJjPWZ1bmN0aW9uKFluLGJpLHlpKXtZdFtZbl0mJmVlKFl0W1luXSxmdW5jdGlvbihvcyl7b3MuY2FsbChEZSxiaSx5aSx0MCl9KX0sa289ZnVuY3Rpb24oWW4pe3ZhciBiaTtp'@;
put 'ZihiYygiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsWW4sbnVsbCksZnVuY3Rpb24oWW4pe3JldHVybiBZbiBpbnN0YW5jZW9mIGJuJiYoInN0cmluZyIhPXR5cGVvZiBZbi5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiBZbi50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLnJl'@;
put 'bW92ZUNoaWxkfHwhKFluLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBVdCl8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgWW4ubmFtZXNwYWNlVVJJfHwiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgWW4uaW5zZXJ0QmVmb3JlfHwiZnVuY3Rpb24iIT10eXBlb2YgWW4uaGFzQ2hpbGROb2Rlcyl9KFluKXx8RCgvW1x1MDA4MC1cdUZGRkZdLyxZbi5ub2RlTmFtZSkpcmV0dXJuIGJvKFluKSwhMDt2YXIgeWk9JGEoWW4ubm9kZU5hbWUpO2lmKGJjKCJ1cG9uU2FuaXRpemVFbGVtZW50'@;
put 'IixZbix7dGFnTmFtZTp5aSxhbGxvd2VkVGFnczpQbn0pLFluLmhhc0NoaWxkTm9kZXMoKSYmIUFyKFluLmZpcnN0RWxlbWVudENoaWxkKSYmKCFBcihZbi5jb250ZW50KXx8IUFyKFluLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSYmRCgvPFsvXHddL2csWW4uaW5uZXJIVE1MKSYmRCgv'@;
put 'PFsvXHddL2csWW4udGV4dENvbnRlbnQpfHwic2VsZWN0Ij09PXlpJiZEKC88dGVtcGxhdGUvaSxZbi5pbm5lckhUTUwpKXJldHVybiBibyhZbiksITA7aWYoIVBuW3lpXXx8Z2lbeWldKXtpZighZ2lbeWldJiZvMCh5aSkmJihxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkQo'@;
put 'cXIudGFnTmFtZUNoZWNrLHlpKXx8cXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJnFyLnRhZ05hbWVDaGVjayh5aSkpKXJldHVybiExO2lmKGhzJiYhdWxbeWldKXt2YXIgb3M9aG4oWW4pfHxZbi5wYXJlbnROb2RlLEZhPWZuKFluKXx8WW4uY2hpbGROb2RlcztpZihGYSYm'@;
put 'b3MpZm9yKHZhciAkbz1GYS5sZW5ndGgtMTskbz49MDstLSRvKW9zLmluc2VydEJlZm9yZShIbihGYVskb10sITApLGZ0KFluKSl9cmV0dXJuIGJvKFluKSwhMH1yZXR1cm4gWW4gaW5zdGFuY2VvZiBQdCYmIWZ1bmN0aW9uKFluKXt2YXIgYmk9aG4oWW4pOyghYml8fCFiaS50YWdOYW1lKSYm'@;
put 'KGJpPXtuYW1lc3BhY2VVUkk6U3IsdGFnTmFtZToidGVtcGxhdGUifSk7dmFyIHlpPXNlKFluLnRhZ05hbWUpLG9zPXNlKGJpLnRhZ05hbWUpO3JldHVybiEhYTNbWW4ubmFtZXNwYWNlVVJJXSYmKFluLm5hbWVzcGFjZVVSST09PWZzP2JpLm5hbWVzcGFjZVVSST09PVBhPyJzdmciPT09eWk6'@;
put 'YmkubmFtZXNwYWNlVVJJPT09eHU/InN2ZyI9PT15aSYmKCJhbm5vdGF0aW9uLXhtbCI9PT1vc3x8QXNbb3NdKTohIV9jW3lpXTpZbi5uYW1lc3BhY2VVUkk9PT14dT9iaS5uYW1lc3BhY2VVUkk9PT1QYT8ibWF0aCI9PT15aTpiaS5uYW1lc3BhY2VVUkk9PT1mcz8ibWF0aCI9PT15aSYmbjBb'@;
put 'b3NdOiEhSGhbeWldOlluLm5hbWVzcGFjZVVSST09PVBhPyEoYmkubmFtZXNwYWNlVVJJPT09ZnMmJiFuMFtvc118fGJpLm5hbWVzcGFjZVVSST09PXh1JiYhQXNbb3NdKSYmIUhoW3lpXSYmKHFhW3lpXXx8IV9jW3lpXSk6ISgiYXBwbGljYXRpb24veGh0bWwreG1sIiE9PWVhfHwhYTNbWW4u'@;
put 'bmFtZXNwYWNlVVJJXSkpfShZbil8fCgibm9zY3JpcHQiPT09eWl8fCJub2VtYmVkIj09PXlpfHwibm9mcmFtZXMiPT09eWkpJiZEKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLFluLmlubmVySFRNTCk/KGJvKFluKSwhMCk6KHFpJiYzPT09WW4ubm9kZVR5cGUmJihiaT1jZShiaT1Z'@;
put 'bi50ZXh0Q29udGVudCxJbiwiICIpLGJpPWNlKGJpLHp0LCIgIiksYmk9Y2UoYmkseW4sIiAiKSxZbi50ZXh0Q29udGVudCE9PWJpJiYob2UoRGUucmVtb3ZlZCx7ZWxlbWVudDpZbi5jbG9uZU5vZGUoKX0pLFluLnRleHRDb250ZW50PWJpKSksYmMoImFmdGVyU2FuaXRpemVFbGVtZW50cyIs'@;
put 'WW4sbnVsbCksITEpfSxDcz1mdW5jdGlvbihZbixiaSx5aSl7aWYoeXImJigiaWQiPT09Yml8fCJuYW1lIj09PWJpKSYmKHlpIGluIG90fHx5aSBpbiBTYSkpcmV0dXJuITE7aWYoKCFLcnx8eHJbYmldfHwhRCh4bixiaSkpJiYoIVVpfHwhRChzbixiaSkpKWlmKCFsbltiaV18fHhyW2JpXSl7'@;
put 'aWYoIShvMChZbikmJihxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkQocXIudGFnTmFtZUNoZWNrLFluKXx8cXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJnFyLnRhZ05hbWVDaGVjayhZbikpJiYocXIuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2Yg'@;
put 'UmVnRXhwJiZEKHFyLmF0dHJpYnV0ZU5hbWVDaGVjayxiaSl8fHFyLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZxci5hdHRyaWJ1dGVOYW1lQ2hlY2soYmkpKXx8ImlzIj09PWJpJiZxci5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihxci50YWdOYW1l'@;
put 'Q2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkQocXIudGFnTmFtZUNoZWNrLHlpKXx8cXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJnFyLnRhZ05hbWVDaGVjayh5aSkpKSlyZXR1cm4hMX1lbHNlIGlmKCFrMltiaV0mJiFEKCR0LGNlKHlpLFJuLCIiKSkmJigic3JjIiE9PWJp'@;
put 'JiYieGxpbms6aHJlZiIhPT1iaSYmImhyZWYiIT09Yml8fCJzY3JpcHQiPT09WW58fDAhPT1HKHlpLCJkYXRhOiIpfHwhTjBbWW5dKSYmKCFub3x8RChCbixjZSh5aSxSbiwiIikpKSYmeWkpcmV0dXJuITE7cmV0dXJuITB9LG8wPWZ1bmN0aW9uKFluKXtyZXR1cm4gWW4uaW5kZXhPZigiLSIp'@;
put 'PjB9LEkyPWZ1bmN0aW9uKFluKXt2YXIgYmkseWksb3MsRmE7YmMoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsWW4sbnVsbCk7dmFyIEhhPVluLmF0dHJpYnV0ZXM7aWYoSGEpe3ZhciAkbz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVz'@;
put 'OmxufTtmb3IoRmE9SGEubGVuZ3RoO0ZhLS07KXt2YXIgRGE9KGJpPUhhW0ZhXSkubmFtZSxWaD1iaS5uYW1lc3BhY2VVUkk7aWYoeWk9InZhbHVlIj09PURhP2JpLnZhbHVlOmIoYmkudmFsdWUpLG9zPSRhKERhKSwkby5hdHRyTmFtZT1vcywkby5hdHRyVmFsdWU9eWksJG8ua2VlcEF0dHI9'@;
put 'ITAsJG8uZm9yY2VLZWVwQXR0cj12b2lkIDAsYmMoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsWW4sJG8pLHlpPSRvLmF0dHJWYWx1ZSwhJG8uZm9yY2VLZWVwQXR0ciYmKHIwKERhLFluKSwkby5rZWVwQXR0cikpe2lmKCFIciYmRCgvXC8+L2kseWkpKXtyMChEYSxZbik7Y29udGludWV9cWkm'@;
put 'Jih5aT1jZSh5aSxJbiwiICIpLHlpPWNlKHlpLHp0LCIgIikseWk9Y2UoeWkseW4sIiAiKSk7dmFyIEJoPSRhKFluLm5vZGVOYW1lKTtpZihDcyhCaCxvcyx5aSkpe2lmKFBpJiYoImlkIj09PW9zfHwibmFtZSI9PT1vcykmJihyMChEYSxZbikseWk9InVzZXItY29udGVudC0iK3lpKSxYdCYm'@;
put 'Im9iamVjdCI9PT1JZShlbikmJiJmdW5jdGlvbiI9PXR5cGVvZiBlbi5nZXRBdHRyaWJ1dGVUeXBlJiYhVmgpc3dpdGNoKGVuLmdldEF0dHJpYnV0ZVR5cGUoQmgsb3MpKXtjYXNlIlRydXN0ZWRIVE1MIjp5aT1YdC5jcmVhdGVIVE1MKHlpKTticmVhaztjYXNlIlRydXN0ZWRTY3JpcHRVUkwi'@;
put 'OnlpPVh0LmNyZWF0ZVNjcmlwdFVSTCh5aSl9dHJ5e1ZoP1luLnNldEF0dHJpYnV0ZU5TKFZoLERhLHlpKTpZbi5zZXRBdHRyaWJ1dGUoRGEseWkpLHRlKERlLnJlbW92ZWQpfWNhdGNoe319fX1iYygiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLFluLG51bGwpfX0sTmg9ZnVuY3Rpb24gUWko'@;
put 'WW4pe3ZhciBiaSx5aT1EMihZbik7Zm9yKGJjKCJiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSIsWW4sbnVsbCk7Ymk9eWkubmV4dE5vZGUoKTspYmMoInVwb25TYW5pdGl6ZVNoYWRvd05vZGUiLGJpLG51bGwpLCFrbyhiaSkmJihiaS5jb250ZW50IGluc3RhbmNlb2YgdXQmJlFpKGJpLmNvbnRl'@;
put 'bnQpLEkyKGJpKSk7YmMoImFmdGVyU2FuaXRpemVTaGFkb3dET00iLFluLG51bGwpfTtyZXR1cm4gRGUuc2FuaXRpemU9ZnVuY3Rpb24oUWkpe3ZhciBiaSx5aSxvcyxGYSxIYSxZbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYo'@;
put 'KEEyPSFRaSkmJihRaT0iXHgzYyEtLVx4M2UiKSwic3RyaW5nIiE9dHlwZW9mIFFpJiYhQXIoUWkpKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgUWkudG9TdHJpbmcpdGhyb3cgSCgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigic3RyaW5nIiE9dHlwZW9mKFFpPVFpLnRvU3RyaW5n'@;
put 'KCkpKXRocm93IEgoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1pZighRGUuaXNTdXBwb3J0ZWQpe2lmKCJvYmplY3QiPT09SWUoTWUudG9TdGF0aWNIVE1MKXx8ImZ1bmN0aW9uIj09dHlwZW9mIE1lLnRvU3RhdGljSFRNTCl7aWYoInN0cmluZyI9PXR5cGVvZiBRaSlyZXR1'@;
put 'cm4gTWUudG9TdGF0aWNIVE1MKFFpKTtpZihBcihRaSkpcmV0dXJuIE1lLnRvU3RhdGljSFRNTChRaS5vdXRlckhUTUwpfXJldHVybiBRaX1pZihhb3x8RXUoWW4pLERlLnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiBRaSYmKHJzPSExKSxycyl7aWYoUWkubm9kZU5hbWUpe3ZhciAkbz0k'@;
put 'YShRaS5ub2RlTmFtZSk7aWYoIVBuWyRvXXx8Z2lbJG9dKXRocm93IEgoInJvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UiKX19ZWxzZSBpZihRaSBpbnN0YW5jZW9mIEh0KTE9PT0oeWk9KGJpPVQyKCJceDNjIS0tLS1ceDNlIikpLm93bmVy'@;
put 'RG9jdW1lbnQuaW1wb3J0Tm9kZShRaSwhMCkpLm5vZGVUeXBlJiYiQk9EWSI9PT15aS5ub2RlTmFtZXx8IkhUTUwiPT09eWkubm9kZU5hbWU/Ymk9eWk6YmkuYXBwZW5kQ2hpbGQoeWkpO2Vsc2V7aWYoIWlvJiYhcWkmJiFKaSYmLTE9PT1RaS5pbmRleE9mKCI8IikpcmV0dXJuIFh0JiZobz9Y'@;
put 'dC5jcmVhdGVIVE1MKFFpKTpRaTtpZighKGJpPVQyKFFpKSkpcmV0dXJuIGlvP251bGw6aG8/X3Q6IiJ9YmkmJnJvJiZibyhiaS5maXJzdENoaWxkKTtmb3IodmFyIFYwPUQyKHJzP1FpOmJpKTtvcz1WMC5uZXh0Tm9kZSgpOykzPT09b3Mubm9kZVR5cGUmJm9zPT09RmF8fGtvKG9zKXx8KG9z'@;
put 'LmNvbnRlbnQgaW5zdGFuY2VvZiB1dCYmTmgob3MuY29udGVudCksSTIob3MpLEZhPW9zKTtpZihGYT1udWxsLHJzKXJldHVybiBRaTtpZihpbyl7aWYoR2kpZm9yKEhhPUl0LmNhbGwoYmkub3duZXJEb2N1bWVudCk7YmkuZmlyc3RDaGlsZDspSGEuYXBwZW5kQ2hpbGQoYmkuZmlyc3RDaGls'@;
put 'ZCk7ZWxzZSBIYT1iaTtyZXR1cm4obG4uc2hhZG93cm9vdHx8bG4uc2hhZG93cm9vdG1vZCkmJihIYT1EdC5jYWxsKHplLEhhLCEwKSksSGF9dmFyIERhPUppP2JpLm91dGVySFRNTDpiaS5pbm5lckhUTUw7cmV0dXJuIEppJiZQblsiIWRvY3R5cGUiXSYmYmkub3duZXJEb2N1bWVudCYmYmku'@;
put 'b3duZXJEb2N1bWVudC5kb2N0eXBlJiZiaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmRChUZSxiaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihEYT0iPCFET0NUWVBFICIrYmkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrIj5cbiIrRGEpLHFpJiYoRGE9Y2UoRGEsSW4s'@;
put 'IiAiKSxEYT1jZShEYSx6dCwiICIpLERhPWNlKERhLHluLCIgIikpLFh0JiZobz9YdC5jcmVhdGVIVE1MKERhKTpEYX0sRGUuc2V0Q29uZmlnPWZ1bmN0aW9uKFFpKXtFdShRaSksYW89ITB9LERlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7dDA9bnVsbCxhbz0hMX0sRGUuaXNWYWxpZEF0dHJp'@;
put 'YnV0ZT1mdW5jdGlvbihRaSxZbixiaSl7dDB8fEV1KHt9KTt2YXIgeWk9JGEoUWkpLG9zPSRhKFluKTtyZXR1cm4gQ3MoeWksb3MsYmkpfSxEZS5hZGRIb29rPWZ1bmN0aW9uKFFpLFluKXsiZnVuY3Rpb24iPT10eXBlb2YgWW4mJihZdFtRaV09WXRbUWldfHxbXSxvZShZdFtRaV0sWW4pKX0s'@;
put 'RGUucmVtb3ZlSG9vaz1mdW5jdGlvbihRaSl7aWYoWXRbUWldKXJldHVybiB0ZShZdFtRaV0pfSxEZS5yZW1vdmVIb29rcz1mdW5jdGlvbihRaSl7WXRbUWldJiYoWXRbUWldPVtdKX0sRGUucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtZdD17fX0sRGV9KCl9KCl9LDg4NjUxOihhdCxJZSxG'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9SWU7YWUudmVyc2lvbj1GKDE4NTk3KS5pOCxhZS51dGlscz1GKDQ2NzY3KSxhZS5yYW5kPUYoNjAwODIpLGFlLmN1cnZlPUYoOTEzMiksYWUuY3VydmVzPUYoODA0OSksYWUuZWM9Rig2NDQzKSxhZS5lZGRzYT1GKDk5NTc3KX0sNzEzMjQ6KGF0LEll'@;
put 'LEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNDY3NjcpLG09eC5nZXROQUYsbGU9eC5nZXRKU0YsTT14LmFzc2VydDtmdW5jdGlvbiBPKHosSyl7dGhpcy50eXBlPXosdGhpcy5wPW5ldyBhZShLLnAsMTYpLHRoaXMucmVkPUsucHJpbWU/YWUucmVkKEsucHJpbWUpOmFl'@;
put 'Lm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IGFlKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgYWUoMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBhZSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPUsubiYmbmV3IGFlKEsubiwxNiksdGhpcy5nPUsuZyYmdGhpcy5w'@;
put 'b2ludEZyb21KU09OKEsuZyxLLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVu'@;
put 'Z3RoKCk6MDt2YXIgST10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshSXx8SS5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBSKHosSyl7dGhpcy5jdXJ2ZT16LHRoaXMu'@;
put 'dHlwZT1LLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1hdC5leHBvcnRzPU8sTy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxPLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxl'@;
put 'bWVudGVkIil9LE8ucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbihLLEkpe00oSy5wcmVjb21wdXRlZCk7dmFyIGs9Sy5fZ2V0RG91YmxlcygpLEU9bShJLDEsdGhpcy5fYml0TGVuZ3RoKSxqPSgxPDxrLnN0ZXArMSktKGsuc3RlcCUyPT0wPzI6MSk7ai89Mzt2YXIgQixZLFY9W107'@;
put 'Zm9yKEI9MDtCPEUubGVuZ3RoO0IrPWsuc3RlcCl7WT0wO2Zvcih2YXIgWD1CK2suc3RlcC0xO1g+PUI7WC0tKVk9KFk8PDEpK0VbWF07Vi5wdXNoKFkpfWZvcih2YXIgVT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZWU9ajtlZT4w'@;
put 'O2VlLS0pe2ZvcihCPTA7QjxWLmxlbmd0aDtCKyspKFk9VltCXSk9PT1lZT9xPXEubWl4ZWRBZGQoay5wb2ludHNbQl0pOlk9PT0tZWUmJihxPXEubWl4ZWRBZGQoay5wb2ludHNbQl0ubmVnKCkpKTtVPVUuYWRkKHEpfXJldHVybiBVLnRvUCgpfSxPLnByb3RvdHlwZS5fd25hZk11bD1mdW5j'@;
put 'dGlvbihLLEkpe2Zvcih2YXIgaz00LEU9Sy5fZ2V0TkFGUG9pbnRzKGspLGo9RS5wb2ludHMsVj1tKEksaz1FLnduZCx0aGlzLl9iaXRMZW5ndGgpLEI9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFk9Vi5sZW5ndGgtMTtZPj0wO1ktLSl7Zm9yKHZhciBYPTA7WT49MCYmMD09PVZbWV07'@;
put 'WS0tKVgrKztpZihZPj0wJiZYKyssQj1CLmRibHAoWCksWTwwKWJyZWFrO3ZhciBVPVZbWV07TSgwIT09VSksQj0iYWZmaW5lIj09PUsudHlwZT9CLm1peGVkQWRkKFU+MD9qW1UtMT4+MV06alstVS0xPj4xXS5uZWcoKSk6Qi5hZGQoVT4wP2pbVS0xPj4xXTpqWy1VLTE+PjFdLm5lZygpKX1y'@;
put 'ZXR1cm4iYWZmaW5lIj09PUsudHlwZT9CLnRvUCgpOkJ9LE8ucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKEssSSxrLEUsail7dmFyIFUscSxlZSxWPXRoaXMuX3duYWZUMSxCPXRoaXMuX3duYWZUMixZPXRoaXMuX3duYWZUMyxYPTA7Zm9yKFU9MDtVPEU7VSsrKXt2YXIgdGU9KGVl'@;
put 'PUlbVV0pLl9nZXROQUZQb2ludHMoSyk7VltVXT10ZS53bmQsQltVXT10ZS5wb2ludHN9Zm9yKFU9RS0xO1U+PTE7VS09Mil7dmFyIG9lPVUtMSxzZT1VO2lmKDE9PT1WW29lXSYmMT09PVZbc2VdKXt2YXIgaGU9W0lbb2VdLG51bGwsbnVsbCxJW3NlXV07MD09PUlbb2VdLnkuY21wKElbc2Vd'@;
put 'LnkpPyhoZVsxXT1JW29lXS5hZGQoSVtzZV0pLGhlWzJdPUlbb2VdLnRvSigpLm1peGVkQWRkKElbc2VdLm5lZygpKSk6MD09PUlbb2VdLnkuY21wKElbc2VdLnkucmVkTmVnKCkpPyhoZVsxXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXSksaGVbMl09SVtvZV0uYWRkKElbc2VdLm5lZygp'@;
put 'KSk6KGhlWzFdPUlbb2VdLnRvSigpLm1peGVkQWRkKElbc2VdKSxoZVsyXT1JW29lXS50b0ooKS5taXhlZEFkZChJW3NlXS5uZWcoKSkpO3ZhciB1ZT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxjZT1sZShrW29lXSxrW3NlXSk7Zm9yKFg9TWF0aC5tYXgoY2VbMF0ubGVuZ3RoLFgpLFlbb2Vd'@;
put 'PW5ldyBBcnJheShYKSxZW3NlXT1uZXcgQXJyYXkoWCkscT0wO3E8WDtxKyspWVtvZV1bcV09dWVbMyooMSsoMHxjZVswXVtxXSkpKygxKygwfGNlWzFdW3FdKSldLFlbc2VdW3FdPTAsQltvZV09aGV9ZWxzZSBZW29lXT1tKGtbb2VdLFZbb2VdLHRoaXMuX2JpdExlbmd0aCksWVtzZV09bShr'@;
put 'W3NlXSxWW3NlXSx0aGlzLl9iaXRMZW5ndGgpLFg9TWF0aC5tYXgoWVtvZV0ubGVuZ3RoLFgpLFg9TWF0aC5tYXgoWVtzZV0ubGVuZ3RoLFgpfXZhciBEPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxIPXRoaXMuX3duYWZUNDtmb3IoVT1YO1U+PTA7VS0tKXtmb3IodmFyIE49MDtVPj0w'@;
put 'Oyl7dmFyIGc9ITA7Zm9yKHE9MDtxPEU7cSsrKUhbcV09MHxZW3FdW1VdLDAhPT1IW3FdJiYoZz0hMSk7aWYoIWcpYnJlYWs7TisrLFUtLX1pZihVPj0wJiZOKyssRD1ELmRibHAoTiksVTwwKWJyZWFrO2ZvcihxPTA7cTxFO3ErKyl7dmFyIEM9SFtxXTswIT09QyYmKEM+MD9lZT1CW3FdW0Mt'@;
put 'MT4+MV06QzwwJiYoZWU9QltxXVstQy0xPj4xXS5uZWcoKSksRD0iYWZmaW5lIj09PWVlLnR5cGU/RC5taXhlZEFkZChlZSk6RC5hZGQoZWUpKX19Zm9yKFU9MDtVPEU7VSsrKUJbVV09bnVsbDtyZXR1cm4gaj9EOkQudG9QKCl9LE8uQmFzZVBvaW50PVIsUi5wcm90b3R5cGUuZXE9ZnVuY3Rp'@;
put 'b24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxSLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxPLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihLLEkpe0s9eC50b0FycmF5KEssSSk7dmFy'@;
put 'IGs9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PUtbMF18fDY9PT1LWzBdfHw3PT09S1swXSkmJksubGVuZ3RoLTE9PTIqaylyZXR1cm4gNj09PUtbMF0/TShLW0subGVuZ3RoLTFdJTI9PTApOjc9PT1LWzBdJiZNKEtbSy5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChLLnNsaWNlKDEs'@;
put 'MStrKSxLLnNsaWNlKDEraywxKzIqaykpO2lmKCgyPT09S1swXXx8Mz09PUtbMF0pJiZLLmxlbmd0aC0xPT09aylyZXR1cm4gdGhpcy5wb2ludEZyb21YKEsuc2xpY2UoMSwxK2spLDM9PT1LWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LFIucHJvdG90eXBl'@;
put 'LmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZW5jb2RlKEssITApfSxSLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEspe3ZhciBJPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksaz10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsSSk7cmV0dXJuIEs/W3RoaXMu'@;
put 'Z2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KGspOls0XS5jb25jYXQoayx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsSSkpfSxSLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oSyxJKXtyZXR1cm4geC5lbmNvZGUodGhpcy5fZW5jb2RlKEkpLEspfSxSLnByb3RvdHlwZS5wcmVjb21wdXRl'@;
put 'PWZ1bmN0aW9uKEspe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIEk9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBJLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksSS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxLKSxJLmJldGE9dGhpcy5f'@;
put 'Z2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9SSx0aGlzfSxSLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihLKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgST10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFJJiZJLnBvaW50cy5sZW5ndGg+PU1hdGgu'@;
put 'Y2VpbCgoSy5iaXRMZW5ndGgoKSsxKS9JLnN0ZXApfSxSLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihLLEkpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgaz1bdGhpc10s'@;
put 'RT10aGlzLGo9MDtqPEk7ais9Syl7Zm9yKHZhciBWPTA7VjxLO1YrKylFPUUuZGJsKCk7ay5wdXNoKEUpfXJldHVybntzdGVwOksscG9pbnRzOmt9fSxSLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKEspe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFm'@;
put 'KXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIEk9W3RoaXNdLGs9KDE8PEspLTEsRT0xPT09az9udWxsOnRoaXMuZGJsKCksaj0xO2o8aztqKyspSVtqXT1JW2otMV0uYWRkKEUpO3JldHVybnt3bmQ6Syxwb2ludHM6SX19LFIucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIG51bGx9LFIucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPXRoaXMsaz0wO2s8SztrKyspST1JLmRibCgpO3JldHVybiBJfX0sMjc2NjU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ2NzY3KSx4PUYoMzEzODcpLG09Rig2NjY5OCksbGU9'@;
put 'Rig3MTMyNCksTT1hZS5hc3NlcnQ7ZnVuY3Rpb24gTyh6KXt0aGlzLnR3aXN0ZWQ9MSE9KDB8ei5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfHouYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLGxlLmNhbGwodGhpcywiZWR3YXJkcyIseiksdGhpcy5hPW5ldyB4KHouYSwx'@;
put 'NikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IHgoei5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyB4KHouZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJl'@;
put 'ZEFkZCh0aGlzLmQpLE0oIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfHouYyl9ZnVuY3Rpb24gUih6LEssSSxrLEUpe2xlLkJhc2VQb2ludC5jYWxsKHRoaXMseiwicHJvamVjdGl2ZSIpLG51bGw9PT1LJiZudWxsPT09SSYmbnVs'@;
put 'bD09PWs/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgeChLLDE2KSx0aGlzLnk9bmV3IHgoSSwxNiksdGhpcy56PWs/bmV3IHgo'@;
put 'aywxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PUUmJm5ldyB4KEUsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRo'@;
put 'aXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54'@;
put 'LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW0oTyxsZSksYXQuZXhwb3J0cz1PLE8ucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLm1PbmVBP0sucmVkTmVnKCk6dGhpcy5hLnJlZE11bChL'@;
put 'KX0sTy5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMub25lQz9LOnRoaXMuYy5yZWRNdWwoSyl9LE8ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihLLEksayxFKXtyZXR1cm4gdGhpcy5wb2ludChLLEksayxFKX0sTy5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlv'@;
put 'bihLLEkpeyhLPW5ldyB4KEssMTYpKS5yZWR8fChLPUsudG9SZWQodGhpcy5yZWQpKTt2YXIgaz1LLnJlZFNxcigpLEU9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChrKSksaj10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoaykpLFY9RS5yZWRNdWwo'@;
put 'ai5yZWRJbnZtKCkpLEI9Vi5yZWRTcXJ0KCk7aWYoMCE9PUIucmVkU3FyKCkucmVkU3ViKFYpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBZPUIuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEkmJiFZfHwhSSYmWSkmJihCPUIucmVkTmVnKCkp'@;
put 'LHRoaXMucG9pbnQoSyxCKX0sTy5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbihLLEkpeyhLPW5ldyB4KEssMTYpKS5yZWR8fChLPUsudG9SZWQodGhpcy5yZWQpKTt2YXIgaz1LLnJlZFNxcigpLEU9ay5yZWRTdWIodGhpcy5jMiksaj1rLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlz'@;
put 'LmMyKS5yZWRTdWIodGhpcy5hKSxWPUUucmVkTXVsKGoucmVkSW52bSgpKTtpZigwPT09Vi5jbXAodGhpcy56ZXJvKSl7aWYoSSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sSyl9dmFyIEI9Vi5yZWRTcXJ0KCk7aWYoMCE9PUIu'@;
put 'cmVkU3FyKCkucmVkU3ViKFYpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiBCLmZyb21SZWQoKS5pc09kZCgpIT09SSYmKEI9Qi5yZWROZWcoKSksdGhpcy5wb2ludChCLEspfSxPLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihLKXtp'@;
put 'ZihLLmlzSW5maW5pdHkoKSlyZXR1cm4hMDtLLm5vcm1hbGl6ZSgpO3ZhciBJPUsueC5yZWRTcXIoKSxrPUsueS5yZWRTcXIoKSxFPUkucmVkTXVsKHRoaXMuYSkucmVkQWRkKGspLGo9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoSSkucmVkTXVsKGspKSk7'@;
put 'cmV0dXJuIDA9PT1FLmNtcChqKX0sbShSLGxlLkJhc2VQb2ludCksTy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihLKXtyZXR1cm4gUi5mcm9tSlNPTih0aGlzLEspfSxPLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihLLEksayxFKXtyZXR1cm4gbmV3IFIodGhpcyxLLEksayxF'@;
put 'KX0sUi5mcm9tSlNPTj1mdW5jdGlvbihLLEkpe3JldHVybiBuZXcgUihLLElbMF0sSVsxXSxJWzJdKX0sUi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9t'@;
put 'UmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxSLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYm'@;
put 'KDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LFIucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgSz10aGlzLngucmVkU3FyKCksST10aGlzLnkucmVkU3FyKCksaz10aGlzLnoucmVkU3FyKCk7az1rLnJlZElB'@;
put 'ZGQoayk7dmFyIEU9dGhpcy5jdXJ2ZS5fbXVsQShLKSxqPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIoSSksVj1FLnJlZEFkZChJKSxCPVYucmVkU3ViKGspLFk9RS5yZWRTdWIoSSksWD1qLnJlZE11bChCKSxVPVYucmVkTXVsKFkpLHE9ai5yZWRN'@;
put 'dWwoWSksZWU9Qi5yZWRNdWwoVik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWCxVLGVlLHEpfSxSLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBFLGosVixCLFksWCxLPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxJPXRoaXMueC5yZWRTcXIoKSxrPXRoaXMueS5y'@;
put 'ZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBVPShCPXRoaXMuY3VydmUuX211bEEoSSkpLnJlZEFkZChrKTt0aGlzLnpPbmU/KEU9Sy5yZWRTdWIoSSkucmVkU3ViKGspLnJlZE11bChVLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLGo9VS5yZWRNdWwoQi5yZWRTdWIoaykpLFY9'@;
put 'VS5yZWRTcXIoKS5yZWRTdWIoVSkucmVkU3ViKFUpKTooWT10aGlzLnoucmVkU3FyKCksWD1VLnJlZFN1YihZKS5yZWRJU3ViKFkpLEU9Sy5yZWRTdWIoSSkucmVkSVN1YihrKS5yZWRNdWwoWCksaj1VLnJlZE11bChCLnJlZFN1YihrKSksVj1VLnJlZE11bChYKSl9ZWxzZSBCPUkucmVkQWRk'@;
put 'KGspLFk9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLFg9Qi5yZWRTdWIoWSkucmVkU3ViKFkpLEU9dGhpcy5jdXJ2ZS5fbXVsQyhLLnJlZElTdWIoQikpLnJlZE11bChYKSxqPXRoaXMuY3VydmUuX211bEMoQikucmVkTXVsKEkucmVkSVN1YihrKSksVj1CLnJlZE11bChYKTty'@;
put 'ZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChFLGosVil9LFIucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxSLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0'@;
put 'aW9uKEspe3ZhciBJPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoSy55LnJlZFN1YihLLngpKSxrPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoSy55LnJlZEFkZChLLngpKSxFPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKEsudCksaj10aGlzLnoucmVkTXVs'@;
put 'KEsuei5yZWRBZGQoSy56KSksVj1rLnJlZFN1YihJKSxCPWoucmVkU3ViKEUpLFk9ai5yZWRBZGQoRSksWD1rLnJlZEFkZChJKSxVPVYucmVkTXVsKEIpLHE9WS5yZWRNdWwoWCksZWU9Vi5yZWRNdWwoWCksdGU9Qi5yZWRNdWwoWSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxxLHRlLGVl'@;
put 'KX0sUi5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oSyl7dmFyIHEsZWUsST10aGlzLnoucmVkTXVsKEsueiksaz1JLnJlZFNxcigpLEU9dGhpcy54LnJlZE11bChLLngpLGo9dGhpcy55LnJlZE11bChLLnkpLFY9dGhpcy5jdXJ2ZS5kLnJlZE11bChFKS5yZWRNdWwoaiksQj1rLnJlZFN1'@;
put 'YihWKSxZPWsucmVkQWRkKFYpLFg9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChLLngucmVkQWRkKEsueSkpLnJlZElTdWIoRSkucmVkSVN1YihqKSxVPUkucmVkTXVsKEIpLnJlZE11bChYKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhxPUkucmVkTXVsKFkpLnJlZE11bChqLnJl'@;
put 'ZFN1Yih0aGlzLmN1cnZlLl9tdWxBKEUpKSksZWU9Qi5yZWRNdWwoWSkpOihxPUkucmVkTXVsKFkpLnJlZE11bChqLnJlZFN1YihFKSksZWU9dGhpcy5jdXJ2ZS5fbXVsQyhCKS5yZWRNdWwoWSkpLHRoaXMuY3VydmUucG9pbnQoVSxxLGVlKX0sUi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEsp'@;
put 'e3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9LOksuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoSyk6dGhpcy5fcHJvakFkZChLKX0sUi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKEspP3RoaXMuY3Vy'@;
put 'dmUuX2ZpeGVkTmFmTXVsKHRoaXMsSyk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEspfSxSLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oSyxJLGspe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsSV0sW0ssa10sMiwhMSl9LFIucHJvdG90eXBlLmptdWxBZGQ9ZnVu'@;
put 'Y3Rpb24oSyxJLGspe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsSV0sW0ssa10sMiwhMCl9LFIucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgSz10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhp'@;
put 'cy54LnJlZE11bChLKSx0aGlzLnk9dGhpcy55LnJlZE11bChLKSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bChLKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxSLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0'@;
put 'aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LFIucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'bm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sUi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXM9PT1LfHwwPT09dGhpcy5nZXRYKCkuY21wKEsuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcChLLmdldFkoKSl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihL'@;
put 'KXt2YXIgST1LLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChJKSlyZXR1cm4hMDtmb3IodmFyIGs9Sy5jbG9uZSgpLEU9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKGsuaWFkZCh0aGlzLmN1cnZlLm4pLGsuY21wKHRo'@;
put 'aXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoSS5yZWRJQWRkKEUpLDA9PT10aGlzLnguY21wKEkpKXJldHVybiEwfX0sUi5wcm90b3R5cGUudG9QPVIucHJvdG90eXBlLm5vcm1hbGl6ZSxSLnByb3RvdHlwZS5taXhlZEFkZD1SLnByb3RvdHlwZS5hZGR9LDkxMzI6KGF0LEllLEYpPT57InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBhZT1JZTthZS5iYXNlPUYoNzEzMjQpLGFlLnNob3J0PUYoODk5OTYpLGFlLm1vbnQ9RigyOTI1MyksYWUuZWR3YXJkcz1GKDI3NjY1KX0sMjkyNTM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoNjY2OTgpLG09Rig3MTMyNCksbGU9'@;
put 'Rig0Njc2Nyk7ZnVuY3Rpb24gTShSKXttLmNhbGwodGhpcywibW9udCIsUiksdGhpcy5hPW5ldyBhZShSLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGFlKFIuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IGFlKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCks'@;
put 'dGhpcy50d289bmV3IGFlKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gTyhSLHosSyl7bS5CYXNlUG9pbnQuY2FsbCh0aGlzLFIsInByb2plY3RpdmUiKSxudWxsPT09eiYmbnVsbD09PUs/KHRoaXMu'@;
put 'eD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBhZSh6LDE2KSx0aGlzLno9bmV3IGFlKEssMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQo'@;
put 'dGhpcy5jdXJ2ZS5yZWQpKSl9eChNLG0pLGF0LmV4cG9ydHM9TSxNLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih6KXt2YXIgSz16Lm5vcm1hbGl6ZSgpLngsST1LLnJlZFNxcigpLGs9SS5yZWRNdWwoSykucmVkQWRkKEkucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChLKTtyZXR1cm4gMD09'@;
put 'PWsucmVkU3FydCgpLnJlZFNxcigpLmNtcChrKX0seChPLG0uQmFzZVBvaW50KSxNLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih6LEspe3JldHVybiB0aGlzLnBvaW50KGxlLnRvQXJyYXkoeixLKSwxKX0sTS5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oeixLKXtyZXR1cm4gbmV3'@;
put 'IE8odGhpcyx6LEspfSxNLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHope3JldHVybiBPLmZyb21KU09OKHRoaXMseil9LE8ucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LE8ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCku'@;
put 'dG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxPLmZyb21KU09OPWZ1bmN0aW9uKHosSyl7cmV0dXJuIG5ldyBPKHosS1swXSxLWzFdfHx6Lm9uZSl9LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2lu'@;
put 'dCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sTy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9'@;
put 'LE8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciBLPXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxrPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxFPUsucmVkU3ViKGspLGo9Sy5yZWRNdWwoayksVj1FLnJlZE11bChrLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRN'@;
put 'dWwoRSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChqLFYpfSxPLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxPLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKHosSyl7dmFyIEk9dGhpcy54'@;
put 'LnJlZEFkZCh0aGlzLnopLGs9dGhpcy54LnJlZFN1Yih0aGlzLnopLEU9ei54LnJlZEFkZCh6LnopLFY9ei54LnJlZFN1Yih6LnopLnJlZE11bChJKSxCPUUucmVkTXVsKGspLFk9Sy56LnJlZE11bChWLnJlZEFkZChCKS5yZWRTcXIoKSksWD1LLngucmVkTXVsKFYucmVkSVN1YihCKS5yZWRT'@;
put 'cXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxYKX0sTy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHope2Zvcih2YXIgSz16LmNsb25lKCksST10aGlzLGs9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGo9W107MCE9PUsuY21wbigwKTtLLml1c2hybigxKSlqLnB1c2goSy5hbmRs'@;
put 'bigxKSk7Zm9yKHZhciBWPWoubGVuZ3RoLTE7Vj49MDtWLS0pMD09PWpbVl0/KEk9SS5kaWZmQWRkKGssdGhpcyksaz1rLmRibCgpKTooaz1JLmRpZmZBZGQoayx0aGlzKSxJPUkuZGJsKCkpO3JldHVybiBrfSxPLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3Io'@;
put 'Ik5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxPLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sTy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oeil7cmV0dXJuIDA9PT10aGlz'@;
put 'LmdldFgoKS5jbXAoei5nZXRYKCkpfSxPLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LE8ucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'dGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sODk5OTY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ2NzY3KSx4PUYoMzEzODcpLG09Rig2NjY5OCksbGU9Rig3MTMyNCksTT1hZS5hc3NlcnQ7ZnVuY3Rpb24gTyhLKXtsZS5jYWxsKHRoaXMsInNob3J0IixL'@;
put 'KSx0aGlzLmE9bmV3IHgoSy5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyB4KEsuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlz'@;
put 'LmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9nZXRFbmRvbW9ycGhpc20oSyksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gUihLLEksayxFKXtsZS5CYXNlUG9pbnQuY2Fs'@;
put 'bCh0aGlzLEssImFmZmluZSIpLG51bGw9PT1JJiZudWxsPT09az8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IHgoSSwxNiksdGhpcy55PW5ldyB4KGssMTYpLEUmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJl'@;
put 'ZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24geihLLEksayxFKXtsZS5CYXNlUG9pbnQu'@;
put 'Y2FsbCh0aGlzLEssImphY29iaWFuIiksbnVsbD09PUkmJm51bGw9PT1rJiZudWxsPT09RT8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IHgoMCkpOih0aGlzLng9bmV3IHgoSSwxNiksdGhpcy55PW5ldyB4KGssMTYpLHRoaXMuej1uZXcg'@;
put 'eChFLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56'@;
put 'T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfW0oTyxsZSksYXQuZXhwb3J0cz1PLE8ucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oSSl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGssRTtpZihJLmJldGEpaz1uZXcg'@;
put 'eChJLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBqPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO2s9KGs9alswXS5jbXAoalsxXSk8MD9qWzBdOmpbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihJLmxhbWJkYSlFPW5ldyB4KEkubGFtYmRhLDE2KTtlbHNle3ZhciBWPXRoaXMu'@;
put 'X2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFZbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChrKSk/RT1WWzBdOk0oMD09PXRoaXMuZy5tdWwoRT1WWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoaykpKX1yZXR1cm57YmV0YTprLGxhbWJkYTpFLGJhc2lzOkkuYmFzaXM/'@;
put 'SS5iYXNpcy5tYXAoZnVuY3Rpb24oWSl7cmV0dXJue2E6bmV3IHgoWS5hLDE2KSxiOm5ldyB4KFkuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKEUpfX19LE8ucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oSSl7dmFyIGs9ST09PXRoaXMucD90aGlzLnJlZDp4Lm1vbnQoSSks'@;
put 'RT1uZXcgeCgyKS50b1JlZChrKS5yZWRJbnZtKCksaj1FLnJlZE5lZygpLFY9bmV3IHgoMykudG9SZWQoaykucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChFKTtyZXR1cm5bai5yZWRBZGQoVikuZnJvbVJlZCgpLGoucmVkU3ViKFYpLmZyb21SZWQoKV19LE8ucHJvdG90eXBlLl9nZXRFbmRv'@;
put 'QmFzaXM9ZnVuY3Rpb24oSSl7Zm9yKHZhciBVLHEsZWUsdGUsb2Usc2UsaGUsY2UsRyxrPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksRT1JLGo9dGhpcy5uLmNsb25lKCksVj1uZXcgeCgxKSxCPW5ldyB4KDApLFk9bmV3IHgoMCksWD1uZXcgeCgxKSx1'@;
put 'ZT0wOzAhPT1FLmNtcG4oMCk7KXt2YXIgYj1qLmRpdihFKTtjZT1qLnN1YihiLm11bChFKSksRz1ZLnN1YihiLm11bChWKSk7dmFyIEQ9WC5zdWIoYi5tdWwoQikpO2lmKCFlZSYmY2UuY21wKGspPDApVT1oZS5uZWcoKSxxPVYsZWU9Y2UubmVnKCksdGU9RztlbHNlIGlmKGVlJiYyPT0rK3Vl'@;
put 'KWJyZWFrO2hlPWNlLGo9RSxFPWNlLFk9VixWPUcsWD1CLEI9RH1vZT1jZS5uZWcoKSxzZT1HO3ZhciBIPWVlLnNxcigpLmFkZCh0ZS5zcXIoKSk7cmV0dXJuIG9lLnNxcigpLmFkZChzZS5zcXIoKSkuY21wKEgpPj0wJiYob2U9VSxzZT1xKSxlZS5uZWdhdGl2ZSYmKGVlPWVlLm5lZygpLHRl'@;
put 'PXRlLm5lZygpKSxvZS5uZWdhdGl2ZSYmKG9lPW9lLm5lZygpLHNlPXNlLm5lZygpKSxbe2E6ZWUsYjp0ZX0se2E6b2UsYjpzZX1dfSxPLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKEkpe3ZhciBrPXRoaXMuZW5kby5iYXNpcyxFPWtbMF0saj1rWzFdLFY9ai5iLm11bChJKS5kaXZS'@;
put 'b3VuZCh0aGlzLm4pLEI9RS5iLm5lZygpLm11bChJKS5kaXZSb3VuZCh0aGlzLm4pLFk9Vi5tdWwoRS5hKSxYPUIubXVsKGouYSksVT1WLm11bChFLmIpLHE9Qi5tdWwoai5iKTtyZXR1cm57azE6SS5zdWIoWSkuc3ViKFgpLGsyOlUuYWRkKHEpLm5lZygpfX0sTy5wcm90b3R5cGUucG9pbnRG'@;
put 'cm9tWD1mdW5jdGlvbihJLGspeyhJPW5ldyB4KEksMTYpKS5yZWR8fChJPUkudG9SZWQodGhpcy5yZWQpKTt2YXIgRT1JLnJlZFNxcigpLnJlZE11bChJKS5yZWRJQWRkKEkucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxqPUUucmVkU3FydCgpO2lmKDAhPT1qLnJlZFNxcigpLnJl'@;
put 'ZFN1YihFKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgVj1qLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihrJiYhVnx8IWsmJlYpJiYoaj1qLnJlZE5lZygpKSx0aGlzLnBvaW50KEksail9LE8ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9u'@;
put 'KEkpe2lmKEkuaW5mKXJldHVybiEwO3ZhciBrPUkueCxFPUkueSxqPXRoaXMuYS5yZWRNdWwoayksVj1rLnJlZFNxcigpLnJlZE11bChrKS5yZWRJQWRkKGopLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PUUucmVkU3FyKCkucmVkSVN1YihWKS5jbXBuKDApfSxPLnByb3RvdHlwZS5fZW5k'@;
put 'b1duYWZNdWxBZGQ9ZnVuY3Rpb24oSSxrLEUpe2Zvcih2YXIgaj10aGlzLl9lbmRvV25hZlQxLFY9dGhpcy5fZW5kb1duYWZUMixCPTA7QjxJLmxlbmd0aDtCKyspe3ZhciBZPXRoaXMuX2VuZG9TcGxpdChrW0JdKSxYPUlbQl0sVT1YLl9nZXRCZXRhKCk7WS5rMS5uZWdhdGl2ZSYmKFkuazEu'@;
put 'aW5lZygpLFg9WC5uZWcoITApKSxZLmsyLm5lZ2F0aXZlJiYoWS5rMi5pbmVnKCksVT1VLm5lZyghMCkpLGpbMipCXT1YLGpbMipCKzFdPVUsVlsyKkJdPVkuazEsVlsyKkIrMV09WS5rMn1mb3IodmFyIHE9dGhpcy5fd25hZk11bEFkZCgxLGosViwyKkIsRSksZWU9MDtlZTwyKkI7ZWUrKylq'@;
put 'W2VlXT1udWxsLFZbZWVdPW51bGw7cmV0dXJuIHF9LG0oUixsZS5CYXNlUG9pbnQpLE8ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKEksayxFKXtyZXR1cm4gbmV3IFIodGhpcyxJLGssRSl9LE8ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oSSxrKXtyZXR1cm4gUi5mcm9tSlNP'@;
put 'Tih0aGlzLEksayl9LFIucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgST10aGlzLnByZWNvbXB1dGVkO2lmKEkmJkkuYmV0YSlyZXR1cm4gSS5iZXRhO3ZhciBrPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVu'@;
put 'ZG8uYmV0YSksdGhpcy55KTtpZihJKXt2YXIgRT10aGlzLmN1cnZlLGo9ZnVuY3Rpb24oVil7cmV0dXJuIEUucG9pbnQoVi54LnJlZE11bChFLmVuZG8uYmV0YSksVi55KX07SS5iZXRhPWssay5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpJLm5hZiYme3duZDpJLm5hZi53bmQscG9pbnRz'@;
put 'OkkubmFmLnBvaW50cy5tYXAoail9LGRvdWJsZXM6SS5kb3VibGVzJiZ7c3RlcDpJLmRvdWJsZXMuc3RlcCxwb2ludHM6SS5kb3VibGVzLnBvaW50cy5tYXAoail9fX1yZXR1cm4ga319LFIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlz'@;
put 'LngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1'@;
put 'dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LFIuZnJvbUpTT049ZnVuY3Rpb24oSSxrLEUpeyJzdHJpbmciPT10eXBlb2YgayYmKGs9SlNPTi5wYXJzZShr'@;
put 'KSk7dmFyIGo9SS5wb2ludChrWzBdLGtbMV0sRSk7aWYoIWtbMl0pcmV0dXJuIGo7ZnVuY3Rpb24gVihZKXtyZXR1cm4gSS5wb2ludChZWzBdLFlbMV0sRSl9dmFyIEI9a1syXTtyZXR1cm4gai5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6Qi5kb3VibGVzJiZ7c3RlcDpCLmRvdWJs'@;
put 'ZXMuc3RlcCxwb2ludHM6W2pdLmNvbmNhdChCLmRvdWJsZXMucG9pbnRzLm1hcChWKSl9LG5hZjpCLm5hZiYme3duZDpCLm5hZi53bmQscG9pbnRzOltqXS5jb25jYXQoQi5uYWYucG9pbnRzLm1hcChWKSl9fSxqfSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu'@;
put 'aXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFIucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5pbmZ9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihJKXtpZih0aGlzLmluZilyZXR1cm4gSTtpZihJLmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKEkpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoSSkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxu'@;
put 'dWxsKTtpZigwPT09dGhpcy54LmNtcChJLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGs9dGhpcy55LnJlZFN1YihJLnkpOzAhPT1rLmNtcG4oMCkmJihrPWsucmVkTXVsKHRoaXMueC5yZWRTdWIoSS54KS5yZWRJbnZtKCkpKTt2YXIgRT1rLnJlZFNxcigpLnJl'@;
put 'ZElTdWIodGhpcy54KS5yZWRJU3ViKEkueCksaj1rLnJlZE11bCh0aGlzLngucmVkU3ViKEUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoRSxqKX0sUi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIEk9dGhpcy55'@;
put 'LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1JLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgaz10aGlzLmN1cnZlLmEsRT10aGlzLngucmVkU3FyKCksaj1JLnJlZEludm0oKSxWPUUucmVkQWRkKEUpLnJlZElBZGQoRSkucmVkSUFkZChrKS5yZWRNdWwoaiks'@;
put 'Qj1WLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxZPVYucmVkTXVsKHRoaXMueC5yZWRTdWIoQikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChCLFkpfSxSLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9t'@;
put 'UmVkKCl9LFIucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sUi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEkpe3JldHVybiBJPW5ldyB4KEksMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhJKT90aGlzLmN1cnZlLl9m'@;
put 'aXhlZE5hZk11bCh0aGlzLEkpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW0ldKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsSSl9LFIucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihJLGssRSl7dmFyIGo9W3RoaXMsa10sVj1bSSxFXTtyZXR1'@;
put 'cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKGosVik6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLGosViwyKX0sUi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihJLGssRSl7dmFyIGo9W3RoaXMsa10sVj1bSSxFXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRv'@;
put 'P3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKGosViwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLGosViwyLCEwKX0sUi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oSSl7cmV0dXJuIHRoaXM9PT1JfHx0aGlzLmluZj09PUkuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKEkueCkm'@;
put 'JjA9PT10aGlzLnkuY21wKEkueSkpfSxSLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oSSl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIGs9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihJJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgRT10aGlzLnByZWNvbXB1'@;
put 'dGVkLGo9ZnVuY3Rpb24oVil7cmV0dXJuIFYubmVnKCl9O2sucHJlY29tcHV0ZWQ9e25hZjpFLm5hZiYme3duZDpFLm5hZi53bmQscG9pbnRzOkUubmFmLnBvaW50cy5tYXAoail9LGRvdWJsZXM6RS5kb3VibGVzJiZ7c3RlcDpFLmRvdWJsZXMuc3RlcCxwb2ludHM6RS5kb3VibGVzLnBvaW50'@;
put 'cy5tYXAoail9fX1yZXR1cm4ga30sUi5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sbSh6LGxlLkJhc2VQb2ludCks'@;
put 'Ty5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKEksayxFKXtyZXR1cm4gbmV3IHoodGhpcyxJLGssRSl9LHoucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEk9dGhpcy56LnJlZEludm0o'@;
put 'KSxrPUkucmVkU3FyKCksRT10aGlzLngucmVkTXVsKGspLGo9dGhpcy55LnJlZE11bChrKS5yZWRNdWwoSSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoRSxqKX0sei5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVn'@;
put 'KCksdGhpcy56KX0sei5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEkpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBJO2lmKEkuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBrPUkuei5yZWRTcXIoKSxFPXRoaXMuei5yZWRTcXIoKSxqPXRoaXMueC5yZWRNdWwoayksVj1JLngucmVk'@;
put 'TXVsKEUpLEI9dGhpcy55LnJlZE11bChrLnJlZE11bChJLnopKSxZPUkueS5yZWRNdWwoRS5yZWRNdWwodGhpcy56KSksWD1qLnJlZFN1YihWKSxVPUIucmVkU3ViKFkpO2lmKDA9PT1YLmNtcG4oMCkpcmV0dXJuIDAhPT1VLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51'@;
put 'bGwpOnRoaXMuZGJsKCk7dmFyIHE9WC5yZWRTcXIoKSxlZT1xLnJlZE11bChYKSx0ZT1qLnJlZE11bChxKSxvZT1VLnJlZFNxcigpLnJlZElBZGQoZWUpLnJlZElTdWIodGUpLnJlZElTdWIodGUpLHNlPVUucmVkTXVsKHRlLnJlZElTdWIob2UpKS5yZWRJU3ViKEIucmVkTXVsKGVlKSksaGU9'@;
put 'dGhpcy56LnJlZE11bChJLnopLnJlZE11bChYKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQob2Usc2UsaGUpfSx6LnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihJKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gSS50b0ooKTtpZihJLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2'@;
put 'YXIgaz10aGlzLnoucmVkU3FyKCksRT10aGlzLngsaj1JLngucmVkTXVsKGspLFY9dGhpcy55LEI9SS55LnJlZE11bChrKS5yZWRNdWwodGhpcy56KSxZPUUucmVkU3ViKGopLFg9Vi5yZWRTdWIoQik7aWYoMD09PVkuY21wbigwKSlyZXR1cm4gMCE9PVguY21wbigwKT90aGlzLmN1cnZlLmpw'@;
put 'b2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgVT1ZLnJlZFNxcigpLHE9VS5yZWRNdWwoWSksZWU9RS5yZWRNdWwoVSksdGU9WC5yZWRTcXIoKS5yZWRJQWRkKHEpLnJlZElTdWIoZWUpLnJlZElTdWIoZWUpLG9lPVgucmVkTXVsKGVlLnJlZElTdWIodGUpKS5yZWRJU3ViKFYu'@;
put 'cmVkTXVsKHEpKSxzZT10aGlzLnoucmVkTXVsKFkpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0ZSxvZSxzZSl9LHoucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oSSl7aWYoMD09PUkpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIUkpcmV0dXJuIHRo'@;
put 'aXMuZGJsKCk7dmFyIGs7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBFPXRoaXM7Zm9yKGs9MDtrPEk7aysrKUU9RS5kYmwoKTtyZXR1cm4gRX12YXIgaj10aGlzLmN1cnZlLmEsVj10aGlzLmN1cnZlLnRpbnYsQj10aGlzLngsWT10aGlzLnksWD10aGlzLnos'@;
put 'VT1YLnJlZFNxcigpLnJlZFNxcigpLHE9WS5yZWRBZGQoWSk7Zm9yKGs9MDtrPEk7aysrKXt2YXIgZWU9Qi5yZWRTcXIoKSx0ZT1xLnJlZFNxcigpLG9lPXRlLnJlZFNxcigpLHNlPWVlLnJlZEFkZChlZSkucmVkSUFkZChlZSkucmVkSUFkZChqLnJlZE11bChVKSksaGU9Qi5yZWRNdWwodGUp'@;
put 'LHVlPXNlLnJlZFNxcigpLnJlZElTdWIoaGUucmVkQWRkKGhlKSksY2U9aGUucmVkSVN1Yih1ZSksRz1zZS5yZWRNdWwoY2UpO0c9Ry5yZWRJQWRkKEcpLnJlZElTdWIob2UpO3ZhciBiPXEucmVkTXVsKFgpO2srMTxJJiYoVT1VLnJlZE11bChvZSkpLEI9dWUsWD1iLHE9R31yZXR1cm4gdGhp'@;
put 'cy5jdXJ2ZS5qcG9pbnQoQixxLnJlZE11bChWKSxYKX0sei5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9k'@;
put 'YmwoKX0sei5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgSSxrLEU7aWYodGhpcy56T25lKXt2YXIgaj10aGlzLngucmVkU3FyKCksVj10aGlzLnkucmVkU3FyKCksQj1WLnJlZFNxcigpLFk9dGhpcy54LnJlZEFkZChWKS5yZWRTcXIoKS5yZWRJU3ViKGopLnJlZElTdWIoQik7'@;
put 'WT1ZLnJlZElBZGQoWSk7dmFyIFg9ai5yZWRBZGQoaikucmVkSUFkZChqKSxVPVgucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKFkpLHE9Qi5yZWRJQWRkKEIpO3E9KHE9cS5yZWRJQWRkKHEpKS5yZWRJQWRkKHEpLEk9VSxrPVgucmVkTXVsKFkucmVkSVN1YihVKSkucmVkSVN1YihxKSxF'@;
put 'PXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBlZT10aGlzLngucmVkU3FyKCksdGU9dGhpcy55LnJlZFNxcigpLG9lPXRlLnJlZFNxcigpLHNlPXRoaXMueC5yZWRBZGQodGUpLnJlZFNxcigpLnJlZElTdWIoZWUpLnJlZElTdWIob2UpO3NlPXNlLnJlZElBZGQoc2UpO3ZhciBoZT1l'@;
put 'ZS5yZWRBZGQoZWUpLnJlZElBZGQoZWUpLHVlPWhlLnJlZFNxcigpLGNlPW9lLnJlZElBZGQob2UpO2NlPShjZT1jZS5yZWRJQWRkKGNlKSkucmVkSUFkZChjZSksST11ZS5yZWRJU3ViKHNlKS5yZWRJU3ViKHNlKSxrPWhlLnJlZE11bChzZS5yZWRJU3ViKEkpKS5yZWRJU3ViKGNlKSxFPShF'@;
put 'PXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChFKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoSSxrLEUpfSx6LnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgSSxrLEU7aWYodGhpcy56T25lKXt2YXIgaj10aGlzLngucmVkU3FyKCksVj10aGlzLnkucmVkU3FyKCks'@;
put 'Qj1WLnJlZFNxcigpLFk9dGhpcy54LnJlZEFkZChWKS5yZWRTcXIoKS5yZWRJU3ViKGopLnJlZElTdWIoQik7WT1ZLnJlZElBZGQoWSk7dmFyIFg9ai5yZWRBZGQoaikucmVkSUFkZChqKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksVT1YLnJlZFNxcigpLnJlZElTdWIoWSkucmVkSVN1YihZKTtJ'@;
put 'PVU7dmFyIHE9Qi5yZWRJQWRkKEIpO3E9KHE9cS5yZWRJQWRkKHEpKS5yZWRJQWRkKHEpLGs9WC5yZWRNdWwoWS5yZWRJU3ViKFUpKS5yZWRJU3ViKHEpLEU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGVlPXRoaXMuei5yZWRTcXIoKSx0ZT10aGlzLnkucmVkU3FyKCksb2U9dGhp'@;
put 'cy54LnJlZE11bCh0ZSksc2U9dGhpcy54LnJlZFN1YihlZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoZWUpKTtzZT1zZS5yZWRBZGQoc2UpLnJlZElBZGQoc2UpO3ZhciBoZT1vZS5yZWRJQWRkKG9lKSx1ZT0oaGU9aGUucmVkSUFkZChoZSkpLnJlZEFkZChoZSk7ST1zZS5yZWRTcXIoKS5yZWRJ'@;
put 'U3ViKHVlKSxFPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKHRlKS5yZWRJU3ViKGVlKTt2YXIgY2U9dGUucmVkU3FyKCk7Y2U9KGNlPShjZT1jZS5yZWRJQWRkKGNlKSkucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpLGs9c2UucmVkTXVsKGhlLnJlZElTdWIoSSkpLnJl'@;
put 'ZElTdWIoY2UpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChJLGssRSl9LHoucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgST10aGlzLmN1cnZlLmEsaz10aGlzLngsRT10aGlzLnksaj10aGlzLnosVj1qLnJlZFNxcigpLnJlZFNxcigpLEI9ay5yZWRTcXIoKSxZPUUucmVkU3FyKCks'@;
put 'WD1CLnJlZEFkZChCKS5yZWRJQWRkKEIpLnJlZElBZGQoSS5yZWRNdWwoVikpLFU9ay5yZWRBZGQoaykscT0oVT1VLnJlZElBZGQoVSkpLnJlZE11bChZKSxlZT1YLnJlZFNxcigpLnJlZElTdWIocS5yZWRBZGQocSkpLHRlPXEucmVkSVN1YihlZSksb2U9WS5yZWRTcXIoKTtvZT0ob2U9KG9l'@;
put 'PW9lLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSk7dmFyIHNlPVgucmVkTXVsKHRlKS5yZWRJU3ViKG9lKSxoZT1FLnJlZEFkZChFKS5yZWRNdWwoaik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGVlLHNlLGhlKX0sei5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lm'@;
put 'KCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgST10aGlzLngucmVkU3FyKCksaz10aGlzLnkucmVkU3FyKCksRT10aGlzLnoucmVkU3FyKCksaj1rLnJlZFNxcigpLFY9SS5yZWRBZGQoSSkucmVkSUFkZChJKSxCPVYucmVkU3FyKCksWT10aGlzLngu'@;
put 'cmVkQWRkKGspLnJlZFNxcigpLnJlZElTdWIoSSkucmVkSVN1YihqKSxYPShZPShZPShZPVkucmVkSUFkZChZKSkucmVkQWRkKFkpLnJlZElBZGQoWSkpLnJlZElTdWIoQikpLnJlZFNxcigpLFU9ai5yZWRJQWRkKGopO1U9KFU9KFU9VS5yZWRJQWRkKFUpKS5yZWRJQWRkKFUpKS5yZWRJQWRk'@;
put 'KFUpO3ZhciBxPVYucmVkSUFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKEIpLnJlZElTdWIoWCkucmVkSVN1YihVKSxlZT1rLnJlZE11bChxKTtlZT0oZWU9ZWUucmVkSUFkZChlZSkpLnJlZElBZGQoZWUpO3ZhciB0ZT10aGlzLngucmVkTXVsKFgpLnJlZElTdWIoZWUpO3RlPSh0ZT10ZS5yZWRJ'@;
put 'QWRkKHRlKSkucmVkSUFkZCh0ZSk7dmFyIG9lPXRoaXMueS5yZWRNdWwocS5yZWRNdWwoVS5yZWRJU3ViKHEpKS5yZWRJU3ViKFkucmVkTXVsKFgpKSk7b2U9KG9lPShvZT1vZS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSkpLnJlZElBZGQob2UpO3ZhciBzZT10aGlzLnoucmVkQWRkKFkpLnJl'@;
put 'ZFNxcigpLnJlZElTdWIoRSkucmVkSVN1YihYKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsb2Usc2UpfSx6LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gST1uZXcgeChJLGspLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxJKX0sei5wcm90b3R5cGUuZXE9ZnVuY3Rp'@;
put 'b24oSSl7aWYoImFmZmluZSI9PT1JLnR5cGUpcmV0dXJuIHRoaXMuZXEoSS50b0ooKSk7aWYodGhpcz09PUkpcmV0dXJuITA7dmFyIGs9dGhpcy56LnJlZFNxcigpLEU9SS56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKEUpLnJlZElTdWIoSS54LnJlZE11bChrKSkuY21wbigwKSly'@;
put 'ZXR1cm4hMTt2YXIgaj1rLnJlZE11bCh0aGlzLnopLFY9RS5yZWRNdWwoSS56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoVikucmVkSVN1YihJLnkucmVkTXVsKGopKS5jbXBuKDApfSx6LnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oSSl7dmFyIGs9dGhpcy56LnJlZFNxcigpLEU9SS50'@;
put 'b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKGspO2lmKDA9PT10aGlzLnguY21wKEUpKXJldHVybiEwO2Zvcih2YXIgaj1JLmNsb25lKCksVj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKGspOzspe2lmKGouaWFkZCh0aGlzLmN1cnZlLm4pLGouY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJu'@;
put 'ITE7aWYoRS5yZWRJQWRkKFYpLDA9PT10aGlzLnguY21wKEUpKXJldHVybiEwfX0sei5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMgSlBvaW50IHg6ICIrdGhpcy54LnRvU3RyaW5nKDE2LDIp'@;
put 'KyIgeTogIit0aGlzLnkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LHoucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sODA0OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIHosYWU9'@;
put 'SWUseD1GKDcxMDc2KSxtPUYoOTEzMiksTT1GKDQ2NzY3KS5hc3NlcnQ7ZnVuY3Rpb24gTyhLKXt0aGlzLmN1cnZlPSJzaG9ydCI9PT1LLnR5cGU/bmV3IG0uc2hvcnQoSyk6ImVkd2FyZHMiPT09Sy50eXBlP25ldyBtLmVkd2FyZHMoSyk6bmV3IG0ubW9udChLKSx0aGlzLmc9dGhpcy5jdXJ2'@;
put 'ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPUsuaGFzaCxNKHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksTSh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIFIoSyxJKXtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoYWUsSyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIGs9bmV3IE8oSSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhZSxLLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTprfSksa319KX1hZS5QcmVz'@;
put 'ZXRDdXJ2ZT1PLFIoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoi'@;
put 'NjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGVi'@;
put 'IDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLFIoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAw'@;
put 'MDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVm'@;
put 'NzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLFIoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIs'@;
put 'YToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAw'@;
put 'MDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRm'@;
put 'ZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxSKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZj'@;
put 'IixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6eC5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYy'@;
put 'NWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksUigicDUyMSIse3R5cGU6InNob3J0'@;
put 'IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoi'@;
put 'MDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOnguc2hhNTEyLGdSZWQ6'@;
put 'ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAw'@;
put 'MDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLFIoImN1cnZlMjU1'@;
put 'MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRl'@;
put 'YTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxSKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZm'@;
put 'ZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQi'@;
put 'LGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3Ry'@;
put 'eXt6PUYoMjcyNzQpfWNhdGNoe3o9dm9pZCAwfVIoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOnguc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJk'@;
put 'YToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBm'@;
put 'N2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0'@;
put 'ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLHpdfSl9LDY0NDM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSx4PUYoOTI0NDcpLG09Rig0Njc2NyksbGU9Rig4MDQ5KSxNPUYoNjAwODIpLE89bS5hc3NlcnQsUj1GKDkxMzczKSx6'@;
put 'PUYoNTc3NDYpO2Z1bmN0aW9uIEsoSSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSykpcmV0dXJuIG5ldyBLKEkpOyJzdHJpbmciPT10eXBlb2YgSSYmKE8oT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxlLEkpLCJVbmtub3duIGN1cnZlICIrSSksST1sZVtJXSksSSBpbnN0'@;
put 'YW5jZW9mIGxlLlByZXNldEN1cnZlJiYoST17Y3VydmU6SX0pLHRoaXMuY3VydmU9SS5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPUkuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShJLmN1'@;
put 'cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPUkuaGFzaHx8SS5jdXJ2ZS5oYXNofWF0LmV4cG9ydHM9SyxLLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgUih0aGlzLGspfSxLLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihrLEUpe3JldHVy'@;
put 'biBSLmZyb21Qcml2YXRlKHRoaXMsayxFKX0sSy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihrLEUpe3JldHVybiBSLmZyb21QdWJsaWModGhpcyxrLEUpfSxLLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKGspe2t8fChrPXt9KTtmb3IodmFyIEU9bmV3IHgoe2hhc2g6'@;
put 'dGhpcy5oYXNoLHBlcnM6ay5wZXJzLHBlcnNFbmM6ay5wZXJzRW5jfHwidXRmOCIsZW50cm9weTprLmVudHJvcHl8fE0odGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzprLmVudHJvcHkmJmsuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxqPXRo'@;
put 'aXMubi5ieXRlTGVuZ3RoKCksVj10aGlzLm4uc3ViKG5ldyBhZSgyKSk7Oyl7dmFyIEI9bmV3IGFlKEUuZ2VuZXJhdGUoaikpO2lmKCEoQi5jbXAoVik+MCkpcmV0dXJuIEIuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShCKX19LEsucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlv'@;
put 'bihrLEUpe3ZhciBqPTgqay5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBqPjAmJihrPWsudXNocm4oaikpLCFFJiZrLmNtcCh0aGlzLm4pPj0wP2suc3ViKHRoaXMubik6a30sSy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihrLEUsaixWKXsib2JqZWN0Ij09dHlwZW9m'@;
put 'IGomJihWPWosaj1udWxsKSxWfHwoVj17fSksRT10aGlzLmtleUZyb21Qcml2YXRlKEUsaiksaz10aGlzLl90cnVuY2F0ZVRvTihuZXcgYWUoaywxNikpO2Zvcih2YXIgQj10aGlzLm4uYnl0ZUxlbmd0aCgpLFk9RS5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLEIpLFg9ay50b0FycmF5KCJi'@;
put 'ZSIsQiksVT1uZXcgeCh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpZLG5vbmNlOlgscGVyczpWLnBlcnMscGVyc0VuYzpWLnBlcnNFbmN8fCJ1dGY4In0pLHE9dGhpcy5uLnN1YihuZXcgYWUoMSkpLGVlPTA7O2VlKyspe3ZhciB0ZT1WLms/Vi5rKGVlKTpuZXcgYWUoVS5nZW5lcmF0ZSh0aGlz'@;
put 'Lm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgodGU9dGhpcy5fdHJ1bmNhdGVUb04odGUsITApKS5jbXBuKDEpPD0wfHx0ZS5jbXAocSk+PTApKXt2YXIgb2U9dGhpcy5nLm11bCh0ZSk7aWYoIW9lLmlzSW5maW5pdHkoKSl7dmFyIHNlPW9lLmdldFgoKSxoZT1zZS51bW9kKHRoaXMubik7aWYoMCE9'@;
put 'PWhlLmNtcG4oMCkpe3ZhciB1ZT10ZS5pbnZtKHRoaXMubikubXVsKGhlLm11bChFLmdldFByaXZhdGUoKSkuaWFkZChrKSk7aWYoMCE9PSh1ZT11ZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBjZT0ob2UuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PXNlLmNtcChoZSk/MjowKTtyZXR1'@;
put 'cm4gVi5jYW5vbmljYWwmJnVlLmNtcCh0aGlzLm5oKT4wJiYodWU9dGhpcy5uLnN1Yih1ZSksY2VePTEpLG5ldyB6KHtyOmhlLHM6dWUscmVjb3ZlcnlQYXJhbTpjZX0pfX19fX19LEsucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihrLEUsaixWKXtrPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBh'@;
put 'ZShrLDE2KSksaj10aGlzLmtleUZyb21QdWJsaWMoaixWKTt2YXIgQj0oRT1uZXcgeihFLCJoZXgiKSkucixZPUUucztpZihCLmNtcG4oMSk8MHx8Qi5jbXAodGhpcy5uKT49MHx8WS5jbXBuKDEpPDB8fFkuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGVlLFg9WS5pbnZtKHRoaXMubiks'@;
put 'VT1YLm11bChrKS51bW9kKHRoaXMubikscT1YLm11bChCKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKGVlPXRoaXMuZy5qbXVsQWRkKFUsai5nZXRQdWJsaWMoKSxxKSkuaXNJbmZpbml0eSgpJiZlZS5lcVhUb1AoQik6IShlZT10aGlzLmcubXVsQWRk'@;
put 'KFUsai5nZXRQdWJsaWMoKSxxKSkuaXNJbmZpbml0eSgpJiYwPT09ZWUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAoQil9LEsucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24oSSxrLEUsail7TygoMyZFKT09PUUsIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJp'@;
put 'dHMiKSxrPW5ldyB6KGssaik7dmFyIFY9dGhpcy5uLEI9bmV3IGFlKEkpLFk9ay5yLFg9ay5zLFU9MSZFLHE9RT4+MTtpZihZLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmcSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRp'@;
put 'bmF0ZSIpO1k9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHE/WS5hZGQodGhpcy5jdXJ2ZS5uKTpZLFUpO3ZhciBlZT1rLnIuaW52bShWKSx0ZT1WLnN1YihCKS5tdWwoZWUpLnVtb2QoViksb2U9WC5tdWwoZWUpLnVtb2QoVik7cmV0dXJuIHRoaXMuZy5tdWxBZGQodGUsWSxvZSl9LEsucHJvdG90'@;
put 'eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oSSxrLEUsail7aWYobnVsbCE9PShrPW5ldyB6KGssaikpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIGsucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFY9MDtWPDQ7VisrKXt2YXIgQjt0cnl7Qj10aGlzLnJlY292ZXJQdWJLZXkoSSxrLFYpfWNh'@;
put 'dGNoe2NvbnRpbnVlfWlmKEIuZXEoRSkpcmV0dXJuIFZ9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDkxMzczOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NyksbT1GKDQ2NzY3KS5hc3NlcnQ7ZnVuY3Rpb24g'@;
put 'bGUoTSxPKXt0aGlzLmVjPU0sdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxPLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoTy5wcml2LE8ucHJpdkVuYyksTy5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhPLnB1YixPLnB1YkVuYyl9YXQuZXhwb3J0cz1sZSxsZS5mcm9tUHVibGljPWZ1'@;
put 'bmN0aW9uKE8sUix6KXtyZXR1cm4gUiBpbnN0YW5jZW9mIGxlP1I6bmV3IGxlKE8se3B1YjpSLHB1YkVuYzp6fSl9LGxlLmZyb21Qcml2YXRlPWZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gUiBpbnN0YW5jZW9mIGxlP1I6bmV3IGxlKE8se3ByaXY6Uixwcml2RW5jOnp9KX0sbGUucHJvdG90eXBl'@;
put 'LnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIE89dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gTy5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9Ok8udmFsaWRhdGUoKT9PLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEw'@;
put 'LHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LGxlLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oTyxSKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE8m'@;
put 'JihSPU8sTz1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksUj90aGlzLnB1Yi5lbmNvZGUoUixPKTp0aGlzLnB1Yn0sbGUucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuImhleCI9PT1PP3RoaXMucHJpdi50b1N0cmluZygx'@;
put 'NiwyKTp0aGlzLnByaXZ9LGxlLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihPLFIpe3RoaXMucHJpdj1uZXcgYWUoTyxSfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LGxlLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKE8s'@;
put 'Uil7aWYoTy54fHxPLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP20oTy54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlfHwiZWR3YXJkcyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZtKE8ueCYmTy55LCJOZWVkIGJvdGggeCBh'@;
put 'bmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KE8ueCxPLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KE8sUil9LGxlLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oTyl7cmV0dXJuIE8udmFsaWRhdGUoKXx8bShPLnZhbGlk'@;
put 'YXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksTy5tdWwodGhpcy5wcml2KS5nZXRYKCl9LGxlLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gdGhpcy5lYy5zaWduKE8sdGhpcyxSLHopfSxsZS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE8sUil7cmV0'@;
put 'dXJuIHRoaXMuZWMudmVyaWZ5KE8sUix0aGlzKX0sbGUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9'@;
put 'fSw1Nzc0NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig0Njc2NyksbT14LmFzc2VydDtmdW5jdGlvbiBsZShLLEkpe2lmKEsgaW5zdGFuY2VvZiBsZSlyZXR1cm4gSzt0aGlzLl9pbXBvcnRERVIoSyxJKXx8KG0oSy5yJiZLLnMsIlNpZ25hdHVyZSB3aXRo'@;
put 'b3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgYWUoSy5yLDE2KSx0aGlzLnM9bmV3IGFlKEsucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PUsucmVjb3ZlcnlQYXJhbT9udWxsOksucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gTSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBPKEssSSl7'@;
put 'dmFyIGs9S1tJLnBsYWNlKytdO2lmKCEoMTI4JmspKXJldHVybiBrO3ZhciBFPTE1Jms7aWYoMD09PUV8fEU+NClyZXR1cm4hMTtmb3IodmFyIGo9MCxWPTAsQj1JLnBsYWNlO1Y8RTtWKyssQisrKWo8PD04LGp8PUtbQl0saj4+Pj0wO3JldHVybiEoajw9MTI3KSYmKEkucGxhY2U9QixqKX1m'@;
put 'dW5jdGlvbiBSKEspe2Zvcih2YXIgST0wLGs9Sy5sZW5ndGgtMTshS1tJXSYmISgxMjgmS1tJKzFdKSYmSTxrOylJKys7cmV0dXJuIDA9PT1JP0s6Sy5zbGljZShJKX1mdW5jdGlvbiB6KEssSSl7aWYoSTwxMjgpSy5wdXNoKEkpO2Vsc2V7dmFyIGs9MSsoTWF0aC5sb2coSSkvTWF0aC5MTjI+'@;
put 'Pj4zKTtmb3IoSy5wdXNoKDEyOHxrKTstLWs7KUsucHVzaChJPj4+KGs8PDMpJjI1NSk7Sy5wdXNoKEkpfX1hdC5leHBvcnRzPWxlLGxlLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKEksayl7ST14LnRvQXJyYXkoSSxrKTt2YXIgRT1uZXcgTTtpZig0OCE9PUlbRS5wbGFjZSsrXSly'@;
put 'ZXR1cm4hMTt2YXIgaj1PKEksRSk7aWYoITE9PT1qfHxqK0UucGxhY2UhPT1JLmxlbmd0aHx8MiE9PUlbRS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgVj1PKEksRSk7aWYoITE9PT1WKXJldHVybiExO3ZhciBCPUkuc2xpY2UoRS5wbGFjZSxWK0UucGxhY2UpO2lmKEUucGxhY2UrPVYsMiE9PUlb'@;
put 'RS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgWT1PKEksRSk7aWYoITE9PT1ZfHxJLmxlbmd0aCE9PVkrRS5wbGFjZSlyZXR1cm4hMTt2YXIgWD1JLnNsaWNlKEUucGxhY2UsWStFLnBsYWNlKTtpZigwPT09QlswXSl7aWYoISgxMjgmQlsxXSkpcmV0dXJuITE7Qj1CLnNsaWNlKDEpfWlmKDA9PT1Y'@;
put 'WzBdKXtpZighKDEyOCZYWzFdKSlyZXR1cm4hMTtYPVguc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgYWUoQiksdGhpcy5zPW5ldyBhZShYKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sbGUucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKEkpe3ZhciBrPXRoaXMuci50b0FycmF5KCks'@;
put 'RT10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgma1swXSYmKGs9WzBdLmNvbmNhdChrKSksMTI4JkVbMF0mJihFPVswXS5jb25jYXQoRSkpLGs9UihrKSxFPVIoRSk7IShFWzBdfHwxMjgmRVsxXSk7KUU9RS5zbGljZSgxKTt2YXIgaj1bMl07eihqLGsubGVuZ3RoKSwoaj1qLmNvbmNhdChrKSku'@;
put 'cHVzaCgyKSx6KGosRS5sZW5ndGgpO3ZhciBWPWouY29uY2F0KEUpLEI9WzQ4XTtyZXR1cm4geihCLFYubGVuZ3RoKSxCPUIuY29uY2F0KFYpLHguZW5jb2RlKEIsSSl9fSw5OTU3NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzEwNzYpLHg9Rig4MDQ5KSxtPUYoNDY3Njcp'@;
put 'LGxlPW0uYXNzZXJ0LE09bS5wYXJzZUJ5dGVzLE89RigxNzAxMiksUj1GKDc4MDYyKTtmdW5jdGlvbiB6KEspe2lmKGxlKCJlZDI1NTE5Ij09PUssIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7dGhpcy5jdXJ2'@;
put 'ZT1LPXhbS10uY3VydmUsdGhpcy5nPUsuZyx0aGlzLmcucHJlY29tcHV0ZShLLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPUsucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbChLLm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPWFlLnNo'@;
put 'YTUxMn1hdC5leHBvcnRzPXosei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihJLGspe0k9TShJKTt2YXIgRT10aGlzLmtleUZyb21TZWNyZXQoayksaj10aGlzLmhhc2hJbnQoRS5tZXNzYWdlUHJlZml4KCksSSksVj10aGlzLmcubXVsKGopLEI9dGhpcy5lbmNvZGVQb2ludChWKSxZPXRoaXMu'@;
put 'aGFzaEludChCLEUucHViQnl0ZXMoKSxJKS5tdWwoRS5wcml2KCkpLFg9ai5hZGQoWSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VixTOlgsUmVuY29kZWQ6Qn0pfSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oSSxrLEUpe0k9TShJKSxrPXRo'@;
put 'aXMubWFrZVNpZ25hdHVyZShrKTt2YXIgaj10aGlzLmtleUZyb21QdWJsaWMoRSksVj10aGlzLmhhc2hJbnQoay5SZW5jb2RlZCgpLGoucHViQnl0ZXMoKSxJKSxCPXRoaXMuZy5tdWwoay5TKCkpO3JldHVybiBrLlIoKS5hZGQoai5wdWIoKS5tdWwoVikpLmVxKEIpfSx6LnByb3RvdHlwZS5o'@;
put 'YXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBJPXRoaXMuaGFzaCgpLGs9MDtrPGFyZ3VtZW50cy5sZW5ndGg7aysrKUkudXBkYXRlKGFyZ3VtZW50c1trXSk7cmV0dXJuIG0uaW50RnJvbUxFKEkuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sei5wcm90b3R5cGUua2V5RnJvbVB1Ymxp'@;
put 'Yz1mdW5jdGlvbihJKXtyZXR1cm4gTy5mcm9tUHVibGljKHRoaXMsSSl9LHoucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oSSl7cmV0dXJuIE8uZnJvbVNlY3JldCh0aGlzLEkpfSx6LnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKEkpe3JldHVybiBJIGluc3RhbmNl'@;
put 'b2YgUj9JOm5ldyBSKHRoaXMsSSl9LHoucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKEkpe3ZhciBrPUkuZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4ga1t0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1JLmdldFgoKS5pc09kZCgpPzEyODowLGt9'@;
put 'LHoucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKEkpe3ZhciBrPShJPW0ucGFyc2VCeXRlcyhJKSkubGVuZ3RoLTEsRT1JLnNsaWNlKDAsaykuY29uY2F0KC0xMjkmSVtrXSksaj0wIT0oMTI4Jklba10pLFY9bS5pbnRGcm9tTEUoRSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9t'@;
put 'WShWLGopfSx6LnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSx6LnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIG0uaW50RnJvbUxFKEkpfSx6LnByb3RvdHlwZS5pc1BvaW50PWZ1'@;
put 'bmN0aW9uKEkpe3JldHVybiBJIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sMTcwMTI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ2NzY3KSx4PWFlLmFzc2VydCxtPWFlLnBhcnNlQnl0ZXMsbGU9YWUuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gTShPLFIpe3RoaXMu'@;
put 'ZWRkc2E9Tyx0aGlzLl9zZWNyZXQ9bShSLnNlY3JldCksTy5pc1BvaW50KFIucHViKT90aGlzLl9wdWI9Ui5wdWI6dGhpcy5fcHViQnl0ZXM9bShSLnB1Yil9TS5mcm9tUHVibGljPWZ1bmN0aW9uKFIseil7cmV0dXJuIHogaW5zdGFuY2VvZiBNP3o6bmV3IE0oUix7cHViOnp9KX0sTS5mcm9t'@;
put 'U2VjcmV0PWZ1bmN0aW9uKFIseil7cmV0dXJuIHogaW5zdGFuY2VvZiBNP3o6bmV3IE0oUix7c2VjcmV0Onp9KX0sTS5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sbGUoTSwicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5j'@;
put 'b2RlUG9pbnQodGhpcy5wdWIoKSl9KSxsZShNLCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksbGUoTSwicHJpdkJ5dGVzIixmdW5jdGlvbigp'@;
put 'e3ZhciBSPXRoaXMuZWRkc2Esej10aGlzLmhhc2goKSxLPVIuZW5jb2RpbmdMZW5ndGgtMSxJPXouc2xpY2UoMCxSLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gSVswXSY9MjQ4LElbS10mPTEyNyxJW0tdfD02NCxJfSksbGUoTSwicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5k'@;
put 'ZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxsZShNLCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxsZShNLCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGlj'@;
put 'ZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLE0ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUil7cmV0dXJuIHgodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihSLHRoaXMpfSxNLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUix6'@;
put 'KXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoUix6LHRoaXMpfSxNLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oUil7cmV0dXJuIHgodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksYWUuZW5jb2RlKHRoaXMuc2VjcmV0KCksUil9LE0ucHJvdG90eXBlLmdldFB1'@;
put 'YmxpYz1mdW5jdGlvbihSKXtyZXR1cm4gYWUuZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxSKX0sYXQuZXhwb3J0cz1NfSw3ODA2MjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig0Njc2NyksbT14LmFzc2VydCxsZT14LmNhY2hlZFByb3BlcnR5LE09eC5wYXJz'@;
put 'ZUJ5dGVzO2Z1bmN0aW9uIE8oUix6KXt0aGlzLmVkZHNhPVIsIm9iamVjdCIhPXR5cGVvZiB6JiYoej1NKHopKSxBcnJheS5pc0FycmF5KHopJiYoej17Ujp6LnNsaWNlKDAsUi5lbmNvZGluZ0xlbmd0aCksUzp6LnNsaWNlKFIuZW5jb2RpbmdMZW5ndGgpfSksbSh6LlImJnouUywiU2lnbmF0'@;
put 'dXJlIHdpdGhvdXQgUiBvciBTIiksUi5pc1BvaW50KHouUikmJih0aGlzLl9SPXouUiksei5TIGluc3RhbmNlb2YgYWUmJih0aGlzLl9TPXouUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheSh6LlIpP3ouUjp6LlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoei5T'@;
put 'KT96LlM6ei5TZW5jb2RlZH1sZShPLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksbGUoTywiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSksbGUoTywiUmVuY29k'@;
put 'ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksbGUoTywiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLE8ucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxPLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiB4LmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sYXQuZXhwb3J0cz1PfSwyNzI3NDphdD0+e2F0LmV4cG9ydHM9e2RvdWJsZXM6'@;
put 'e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJj'@;
put 'NjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMz'@;
put 'ZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRl'@;
put 'MjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0'@;
put 'ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5'@;
put 'ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFk'@;
put 'MGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJj'@;
put 'OGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2Rj'@;
put 'ZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUw'@;
put 'OGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4'@;
put 'ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFi'@;
put 'ZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2Zh'@;
put 'YzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5'@;
put 'YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0Yzhl'@;
put 'MzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4'@;
put 'MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3'@;
put 'NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5'@;
put 'MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkw'@;
put 'YmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNh'@;
put 'YWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1'@;
put 'NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNh'@;
put 'YjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJj'@;
put 'N2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5'@;
put 'NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJh'@;
put 'MzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2Nzhk'@;
put 'ZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0'@;
put 'YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2'@;
put 'ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdk'@;
put 'MmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2'@;
put 'NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3'@;
put 'ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4'@;
put 'YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1'@;
put 'ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5'@;
put 'ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0Mzlh'@;
put 'NDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2'@;
put 'Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJh'@;
put 'ODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3'@;
put 'MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4Mjdm'@;
put 'YmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3'@;
put 'YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQy'@;
put 'NGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4'@;
put 'YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5'@;
put 'NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIx'@;
put 'YTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0'@;
put 'NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5'@;
put 'ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5'@;
put 'YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0'@;
put 'MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2'@;
put 'ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNk'@;
put 'NjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVj'@;
put 'MDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUx'@;
put 'Y2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2'@;
put 'MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2Zl'@;
put 'YjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4'@;
put 'MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhh'@;
put 'YzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRi'@;
put 'YTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5'@;
put 'YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFk'@;
put 'MjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRh'@;
put 'ZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1'@;
put 'MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUw'@;
put 'MjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJm'@;
put 'YTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgz'@;
put 'MjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4'@;
put 'NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTky'@;
put 'NmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVl'@;
put 'NjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgx'@;
put 'NzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5'@;
put 'NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4'@;
put 'MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJk'@;
put 'YzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkz'@;
put 'MyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMw'@;
put 'ZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1'@;
put 'MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMz'@;
put 'NTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVj'@;
put 'Y2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAw'@;
put 'Y2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMw'@;
put 'MWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2Mx'@;
put 'OCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3'@;
put 'OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdm'@;
put 'ODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3'@;
put 'YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1'@;
put 'YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNm'@;
put 'ZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1'@;
put 'ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZl'@;
put 'Il0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2Ey'@;
put 'YzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4'@;
put 'Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3'@;
put 'NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMy'@;
put 'Mzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0'@;
put 'ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1'@;
put 'MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0'@;
put 'NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3'@;
put 'MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2'@;
put 'ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJl'@;
put 'ODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2Qw'@;
put 'OGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2'@;
put 'ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2'@;
put 'ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2'@;
put 'Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMw'@;
put 'MmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2'@;
put 'MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1'@;
put 'ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3Njdl'@;
put 'ZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkx'@;
put 'NjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJh'@;
put 'MmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUi'@;
put 'LCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVj'@;
put 'OWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJk'@;
put 'MmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4'@;
put 'MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2Zj'@;
put 'ZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTlj'@;
put 'Nzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGEx'@;
put 'ODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsi'@;
put 'ZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5'@;
put 'NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThj'@;
put 'ZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdm'@;
put 'MDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVl'@;
put 'OThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5'@;
put 'YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFm'@;
put 'YjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZm'@;
put 'MGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0'@;
put 'NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTli'@;
put 'OWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2Rj'@;
put 'YjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2Yjlk'@;
put 'NTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBm'@;
put 'YjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3'@;
put 'YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0'@;
put 'ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBj'@;
put 'ZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2'@;
put 'MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBi'@;
put 'YWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0'@;
put 'YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0'@;
put 'ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5'@;
put 'NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFh'@;
put 'Y2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUw'@;
put 'MThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQx'@;
put 'ZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5'@;
put 'ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZm'@;
put 'ZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMx'@;
put 'Yzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2'@;
put 'MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUy'@;
put 'Y2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3'@;
put 'NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzEx'@;
put 'ZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2'@;
put 'NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDll'@;
put 'ZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUz'@;
put 'ODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBi'@;
put 'MDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2Mx'@;
put 'MGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4'@;
put 'M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0'@;
put 'NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZj'@;
put 'ZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3Yzgz'@;
put 'Y2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5'@;
put 'YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBm'@;
put 'MTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3'@;
put 'NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3'@;
put 'ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYw'@;
put 'NTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNm'@;
put 'NzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDQ2NzY3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9SWUseD1GKDMxMzg3KSxtPUYoNTc3OTgpLGxlPUYoNzgyNDcpO2FlLmFzc2VydD1tLGFlLnRvQXJyYXk9bGUudG9BcnJheSxhZS56ZXJv'@;
put 'Mj1sZS56ZXJvMixhZS50b0hleD1sZS50b0hleCxhZS5lbmNvZGU9bGUuZW5jb2RlLGFlLmdldE5BRj1mdW5jdGlvbiBNKEksayxFKXt2YXIgaj1uZXcgQXJyYXkoTWF0aC5tYXgoSS5iaXRMZW5ndGgoKSxFKSsxKTtqLmZpbGwoMCk7Zm9yKHZhciBWPTE8PGsrMSxCPUkuY2xvbmUoKSxZPTA7'@;
put 'WTxqLmxlbmd0aDtZKyspe3ZhciBYLFU9Qi5hbmRsbihWLTEpO0IuaXNPZGQoKT9CLmlzdWJuKFg9VT4oVj4+MSktMT8oVj4+MSktVTpVKTpYPTAsaltZXT1YLEIuaXVzaHJuKDEpfXJldHVybiBqfSxhZS5nZXRKU0Y9ZnVuY3Rpb24gTyhJLGspe3ZhciBFPVtbXSxbXV07ST1JLmNsb25lKCks'@;
put 'az1rLmNsb25lKCk7Zm9yKHZhciBCLGo9MCxWPTA7SS5jbXBuKC1qKT4wfHxrLmNtcG4oLVYpPjA7KXt2YXIgVSxxLFk9SS5hbmRsbigzKStqJjMsWD1rLmFuZGxuKDMpK1YmMzszPT09WSYmKFk9LTEpLDM9PT1YJiYoWD0tMSksVT0xJlk/MyE9KEI9SS5hbmRsbig3KStqJjcpJiY1IT09Qnx8'@;
put 'MiE9PVg/WTotWTowLEVbMF0ucHVzaChVKSxxPTEmWD8zIT0oQj1rLmFuZGxuKDcpK1YmNykmJjUhPT1CfHwyIT09WT9YOi1YOjAsRVsxXS5wdXNoKHEpLDIqaj09PVUrMSYmKGo9MS1qKSwyKlY9PT1xKzEmJihWPTEtViksSS5pdXNocm4oMSksay5pdXNocm4oMSl9cmV0dXJuIEV9LGFlLmNh'@;
put 'Y2hlZFByb3BlcnR5PWZ1bmN0aW9uIFIoSSxrLEUpe3ZhciBqPSJfIitrO0kucHJvdG90eXBlW2tdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbal0/dGhpc1tqXTp0aGlzW2pdPUUuY2FsbCh0aGlzKX19LGFlLnBhcnNlQnl0ZXM9ZnVuY3Rpb24geihJKXtyZXR1cm4ic3RyaW5n'@;
put 'Ij09dHlwZW9mIEk/YWUudG9BcnJheShJLCJoZXgiKTpJfSxhZS5pbnRGcm9tTEU9ZnVuY3Rpb24gSyhJKXtyZXR1cm4gbmV3IHgoSSwiaGV4IiwibGUiKX19LDMxMzg3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFH'@;
put 'KXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBN'@;
put 'KEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikp'@;
put 'fXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig4NTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBS'@;
put 'KEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7'@;
put 'Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVs'@;
put 'bCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChE'@;
put 'KTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYp'@;
put 'LG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixE'@;
put 'LE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVu'@;
put 'Z3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0'@;
put 'aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVu'@;
put 'Z3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0x'@;
put 'LGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5s'@;
put 'ZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJz'@;
put 'ZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgp'@;
put 'Zm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16'@;
put 'KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zv'@;
put 'cih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/'@;
put 'dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhp'@;
put 'cy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5l'@;
put 'Z2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2'@;
put 'YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9'@;
put 'WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2'@;
put 'LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2'@;
put 'ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsr'@;
put 'KXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4'@;
put 'ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3Io'@;
put 'dmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+'@;
put 'PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBK'@;
put 'PXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQh'@;
put 'PTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3Ro'@;
put 'P2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBi'@;
put 'aXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIs'@;
put 'RCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9Zywi'@;
put 'Ynl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKysp'@;
put 'dj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5'@;
put 'cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYm'@;
put 'KEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9'@;
put 'MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7'@;
put 'aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0'@;
put 'aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhp'@;
put 'cy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3Ro'@;
put 'aXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53'@;
put 'b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRo'@;
put 'aXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQp'@;
put 'Zm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhv'@;
put 'cihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhp'@;
put 'cy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBO'@;
put 'PTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNb'@;
put 'SF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9y'@;
put 'bVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0w'@;
put 'LEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+'@;
put 'MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1m'@;
put 'dW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhp'@;
put 'cyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIp'@;
put 'O3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRo'@;
put 'aXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1Nd'@;
put 'PTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tT'@;
put 'XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgp'@;
put 'e3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+'@;
put 'Pj4xMyxRZT0wfE5bNF0sbHQ9ODE5MSZRZSxQZT1RZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxvdD04MTkxJnplLHV0PXplPj4+MTMs'@;
put 'TXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8'@;
put 'Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxRdD0wfGdbNl0sRHQ9ODE5MSZRdCxwdD1RdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0s'@;
put 'Um49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBQbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3'@;
put 'PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhQbj4+PjI2KXwwLFBuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxX'@;
put 'bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRo'@;
put 'LmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5p'@;
put 'bXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxw'@;
put 'PShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUs'@;
put 'aG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditN'@;
put 'YXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGgu'@;
put 'aW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24p'@;
put 'fDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStN'@;
put 'YXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01h'@;
put 'dGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditN'@;
put 'YXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGgu'@;
put 'aW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p'@;
put 'bXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24p'@;
put 'fDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStN'@;
put 'YXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5pbXVs'@;
put 'KHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUs'@;
put 'SW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChvdCxDbikscD0ocD1NYXRoLmltdWwob3QsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditN'@;
put 'YXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGgu'@;
put 'aW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVs'@;
put 'KFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'T2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsSW4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5p'@;
put 'bXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxw'@;
put 'PShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChvdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKG90LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVs'@;
put 'KE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUs'@;
put 'd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8'@;
put 'MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXww'@;
put 'KStNYXRoLmltdWwoamUsSW4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxS'@;
put 'bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRo'@;
put 'LmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwob3QsSG4pfDAscD0ocD1wK01hdGguaW11bChvdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9'@;
put 'ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01h'@;
put 'dGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5p'@;
put 'bXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChvdCxobil8MCxwPShwPXArTWF0aC5pbXVsKG90LHd0KXww'@;
put 'KStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'WWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkm'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChvdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01h'@;
put 'dGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5p'@;
put 'bXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytN'@;
put 'YXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwob3QscnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChvdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5p'@;
put 'bXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwo'@;
put 'VGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8m'@;
put 'PTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChvdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01h'@;
put 'dGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5p'@;
put 'bXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChvdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKG90LHp0KXww'@;
put 'KStNYXRoLmltdWwodXQsSW4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxS'@;
put 'bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1NYXRo'@;
put 'LmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsSW4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwob3QseG4pfDAscD0ocD1wK01hdGguaW11bChvdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5p'@;
put 'bXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxw'@;
put 'PShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKG90LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgo'@;
put 'dz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgo'@;
put 'dz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1QbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxD'@;
put 'WzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0'@;
put 'aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcs'@;
put 'YixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1h'@;
put 'dGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEw'@;
put 'ODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5'@;
put 'cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWct'@;
put 'MSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShD'@;
put 'LGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltK'@;
put 'K2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1q'@;
put 'ZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEp'@;
put 'KWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFy'@;
put 'IGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7'@;
put 'QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShi'@;
put 'KSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJy'@;
put 'YXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4p'@;
put 'LHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlz'@;
put 'LmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0s'@;
put 'TS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBE'@;
put 'LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'YiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31y'@;
put 'ZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJv'@;
put 'dG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1E'@;
put 'JTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5z'@;
put 'cXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8'@;
put 'MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1I'@;
put 'KXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJu'@;
put 'IG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5n'@;
put 'dGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9'@;
put 'MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMu'@;
put 'd29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxI'@;
put 'KXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxu'@;
put 'KGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIi'@;
put 'PT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQp'@;
put 'LzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5'@;
put 'cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRp'@;
put 'dmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMu'@;
put 'd29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJl'@;
put 'ciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVu'@;
put 'Z3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1'@;
put 'cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtm'@;
put 'b3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShD'@;
put 'PSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRz'@;
put 'W2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkm'@;
put 'JihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxl'@;
put 'bmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0p'@;
put 'KygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZl'@;
put 'Xj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRo'@;
put 'aXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVn'@;
put 'YXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8o'@;
put 'Qz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9'@;
put 'OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53'@;
put 'b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5t'@;
put 'b2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1E'@;
put 'LmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5t'@;
put 'b2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zv'@;
put 'cih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxD'@;
put 'PW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2Oysr'@;
put 'SixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEp'@;
put 'O2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1'@;
put 'YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6'@;
put 'RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09k'@;
put 'ZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4u'@;
put 'aXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0'@;
put 'aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigx'@;
put 'KTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXty'@;
put 'ZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49'@;
put 'ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMu'@;
put 'd29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsr'@;
put 'KSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRo'@;
put 'aXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMu'@;
put 'bmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8'@;
put 'dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9'@;
put 'PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNt'@;
put 'cG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5w'@;
put 'cm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihi'@;
put 'KXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJl'@;
put 'ZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9'@;
put 'Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMu'@;
put 'cmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFk'@;
put 'ZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlz'@;
put 'LnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNo'@;
put 'bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVs'@;
put 'PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVk'@;
put 'LCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRo'@;
put 'aXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5y'@;
put 'ZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVk'@;
put 'JiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3'@;
put 'IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxs'@;
put 'KHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZm'@;
put 'ZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxs'@;
put 'fWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0'@;
put 'aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVl'@;
put 'LnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxI'@;
put 'PShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9'@;
put 'PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUu'@;
put 'c3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1i'@;
put 'LndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEw'@;
put 'Ojl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05'@;
put 'NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5j'@;
put 'dGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIp'@;
put 'e2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9'@;
put 'bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUu'@;
put 'X3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVu'@;
put 'Y3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIo'@;
put 'YikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVu'@;
put 'Y3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNt'@;
put 'cG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9'@;
put 'ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlv'@;
put 'bihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9'@;
put 'LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9y'@;
put 'KHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0'@;
put 'TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5l'@;
put 'LmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14'@;
put 'ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihi'@;
put 'LEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109'@;
put 'dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhp'@;
put 'cy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0p'@;
put 'O3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252'@;
put 'ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11'@;
put 'bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlz'@;
put 'dWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygp'@;
put 'fHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3Jl'@;
put 'dHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIy'@;
put 'KSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw4MjAxNjphdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWUsSWU9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxGPUllJiYiZnVuY3Rpb24iPT10eXBlb2YgSWUuYXBwbHk/SWUuYXBwbHk6ZnVuY3Rpb24o'@;
put 'ZWUsdGUsb2Upe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlZSx0ZSxvZSl9O2FlPUllJiYiZnVuY3Rpb24iPT10eXBlb2YgSWUub3duS2V5cz9JZS5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oZWUpe3JldHVybiBPYmplY3QuZ2V0'@;
put 'T3duUHJvcGVydHlOYW1lcyhlZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZWUpKX06ZnVuY3Rpb24oZWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlZSl9O3ZhciBtPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZWUpe3JldHVybiBlZSE9ZWV9O2Z1'@;
put 'bmN0aW9uIGxlKCl7bGUuaW5pdC5jYWxsKHRoaXMpfWF0LmV4cG9ydHM9bGUsYXQuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIFkocSxlZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZSh1ZSl7cS5yZW1vdmVMaXN0ZW5lcihlZSxoZSksb2UodWUpfWZ1bmN0'@;
put 'aW9uIGhlKCl7ImZ1bmN0aW9uIj09dHlwZW9mIHEucmVtb3ZlTGlzdGVuZXImJnEucmVtb3ZlTGlzdGVuZXIoImVycm9yIixzZSksdGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1VKHEsZWUsaGUse29uY2U6ITB9KSwiZXJyb3IiIT09ZWUmJmZ1bmN0aW9uIFgocSxlZSx0ZSl7ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIHEub24mJlUocSwiZXJyb3IiLGVlLHRlKX0ocSxzZSx7b25jZTohMH0pfSl9LGxlLkV2ZW50RW1pdHRlcj1sZSxsZS5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsbGUucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLGxlLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQg'@;
put 'MDt2YXIgTT0xMDtmdW5jdGlvbiBPKHEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBxKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBxKX1mdW5jdGlvbiBSKHEpe3JldHVy'@;
put 'biB2b2lkIDA9PT1xLl9tYXhMaXN0ZW5lcnM/bGUuZGVmYXVsdE1heExpc3RlbmVyczpxLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24geihxLGVlLHRlLG9lKXt2YXIgc2UsaGUsdWU7aWYoTyh0ZSksdm9pZCAwPT09KGhlPXEuX2V2ZW50cyk/KGhlPXEuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51'@;
put 'bGwpLHEuX2V2ZW50c0NvdW50PTApOih2b2lkIDAhPT1oZS5uZXdMaXN0ZW5lciYmKHEuZW1pdCgibmV3TGlzdGVuZXIiLGVlLHRlLmxpc3RlbmVyP3RlLmxpc3RlbmVyOnRlKSxoZT1xLl9ldmVudHMpLHVlPWhlW2VlXSksdm9pZCAwPT09dWUpdWU9aGVbZWVdPXRlLCsrcS5fZXZlbnRzQ291'@;
put 'bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgdWU/dWU9aGVbZWVdPW9lP1t0ZSx1ZV06W3VlLHRlXTpvZT91ZS51bnNoaWZ0KHRlKTp1ZS5wdXNoKHRlKSwoc2U9UihxKSk+MCYmdWUubGVuZ3RoPnNlJiYhdWUud2FybmVkKXt1ZS53YXJuZWQ9ITA7dmFyIGNlPW5ldyBFcnJvcigiUG9z'@;
put 'c2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK3VlLmxlbmd0aCsiICIrU3RyaW5nKGVlKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtjZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRl'@;
put 'ZFdhcm5pbmciLGNlLmVtaXR0ZXI9cSxjZS50eXBlPWVlLGNlLmNvdW50PXVlLmxlbmd0aCxmdW5jdGlvbiB4KHEpe2NvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKHEpfShjZSl9cmV0dXJuIHF9ZnVuY3Rpb24gSygpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdl'@;
put 'dC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gSShxLGVl'@;
put 'LHRlKXt2YXIgb2U9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OnEsdHlwZTplZSxsaXN0ZW5lcjp0ZX0sc2U9Sy5iaW5kKG9lKTtyZXR1cm4gc2UubGlzdGVuZXI9dGUsb2Uud3JhcEZuPXNlLHNlfWZ1bmN0aW9uIGsocSxlZSx0ZSl7dmFyIG9lPXEuX2V2ZW50cztpZih2b2lkIDA9'@;
put 'PT1vZSlyZXR1cm5bXTt2YXIgc2U9b2VbZWVdO3JldHVybiB2b2lkIDA9PT1zZT9bXToiZnVuY3Rpb24iPT10eXBlb2Ygc2U/dGU/W3NlLmxpc3RlbmVyfHxzZV06W3NlXTp0ZT9mdW5jdGlvbiBCKHEpe2Zvcih2YXIgZWU9bmV3IEFycmF5KHEubGVuZ3RoKSx0ZT0wO3RlPGVlLmxlbmd0aDsr'@;
put 'K3RlKWVlW3RlXT1xW3RlXS5saXN0ZW5lcnx8cVt0ZV07cmV0dXJuIGVlfShzZSk6aihzZSxzZS5sZW5ndGgpfWZ1bmN0aW9uIEUocSl7dmFyIGVlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1lZSl7dmFyIHRlPWVlW3FdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0ZSlyZXR1cm4gMTtpZih2'@;
put 'b2lkIDAhPT10ZSlyZXR1cm4gdGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIGoocSxlZSl7Zm9yKHZhciB0ZT1uZXcgQXJyYXkoZWUpLG9lPTA7b2U8ZWU7KytvZSl0ZVtvZV09cVtvZV07cmV0dXJuIHRlfWZ1bmN0aW9uIFUocSxlZSx0ZSxvZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHEu'@;
put 'b24pb2Uub25jZT9xLm9uY2UoZWUsdGUpOnEub24oZWUsdGUpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVk'@;
put 'IHR5cGUgJyt0eXBlb2YgcSk7cS5hZGRFdmVudExpc3RlbmVyKGVlLGZ1bmN0aW9uIHNlKGhlKXtvZS5vbmNlJiZxLnJlbW92ZUV2ZW50TGlzdGVuZXIoZWUsc2UpLHRlKGhlKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkobGUsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEw'@;
put 'LGdldDpmdW5jdGlvbigpe3JldHVybiBNfSxzZXQ6ZnVuY3Rpb24ocSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxPDB8fG0ocSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9u'@;
put 'LW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytxKyIuIik7TT1xfX0pLGxlLmluaXQ9ZnVuY3Rpb24oKXsodm9pZCAwPT09dGhpcy5fZXZlbnRzfHx0aGlzLl9ldmVudHM9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0'@;
put 'ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LGxlLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe2lmKCJudW1iZXIiIT10eXBlb2YgZWV8fGVlPDB8fG0oZWUpKXRocm93IG5ldyBS'@;
put 'YW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZWUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWVlLHRoaXN9LGxlLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gUih0aGlzKX0sbGUucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGU9W10sb2U9MTtvZTxhcmd1bWVudHMubGVuZ3RoO29lKyspdGUucHVzaChhcmd1bWVudHNbb2VdKTt2YXIgc2U9ImVycm9yIj09PWVlLGhlPXRoaXMuX2V2ZW50cztpZih2b2lk'@;
put 'IDAhPT1oZSlzZT1zZSYmdm9pZCAwPT09aGUuZXJyb3I7ZWxzZSBpZighc2UpcmV0dXJuITE7aWYoc2Upe3ZhciB1ZTtpZih0ZS5sZW5ndGg+MCYmKHVlPXRlWzBdKSx1ZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IHVlO3ZhciBjZT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyh1ZT8i'@;
put 'ICgiK3VlLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgY2UuY29udGV4dD11ZSxjZX12YXIgRz1oZVtlZV07aWYodm9pZCAwPT09RylyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgRylGKEcsdGhpcyx0ZSk7ZWxzZXt2YXIgYj1HLmxlbmd0aCxEPWooRyxiKTtmb3Iob2U9MDtvZTxiOysr'@;
put 'b2UpRihEW29lXSx0aGlzLHRlKX1yZXR1cm4hMH0sbGUucHJvdG90eXBlLm9uPWxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuIHoodGhpcyxlZSx0ZSwhMSl9LGxlLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiB6'@;
put 'KHRoaXMsZWUsdGUsITApfSxsZS5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuIE8odGUpLHRoaXMub24oZWUsSSh0aGlzLGVlLHRlKSksdGhpc30sbGUucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oZWUsdGUpe3JldHVybiBPKHRlKSx0aGlzLnBy'@;
put 'ZXBlbmRMaXN0ZW5lcihlZSxJKHRoaXMsZWUsdGUpKSx0aGlzfSxsZS5wcm90b3R5cGUub2ZmPWxlLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlLGhlLHVlLGNlO2lmKE8odGUpLHZvaWQgMD09PShzZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlz'@;
put 'O2lmKHZvaWQgMD09PShvZT1zZVtlZV0pKXJldHVybiB0aGlzO2lmKG9lPT09dGV8fG9lLmxpc3RlbmVyPT09dGUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIHNlW2VlXSxzZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0'@;
put 'KCJyZW1vdmVMaXN0ZW5lciIsZWUsb2UubGlzdGVuZXJ8fHRlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygb2Upe2ZvcihoZT0tMSx1ZT1vZS5sZW5ndGgtMTt1ZT49MDt1ZS0tKWlmKG9lW3VlXT09PXRlfHxvZVt1ZV0ubGlzdGVuZXI9PT10ZSl7Y2U9b2VbdWVdLmxpc3RlbmVyLGhl'@;
put 'PXVlO2JyZWFrfWlmKGhlPDApcmV0dXJuIHRoaXM7MD09PWhlP29lLnNoaWZ0KCk6ZnVuY3Rpb24gVihxLGVlKXtmb3IoO2VlKzE8cS5sZW5ndGg7ZWUrKylxW2VlXT1xW2VlKzFdO3EucG9wKCl9KG9lLGhlKSwxPT09b2UubGVuZ3RoJiYoc2VbZWVdPW9lWzBdKSx2b2lkIDAhPT1zZS5yZW1v'@;
put 'dmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZWUsY2V8fHRlKX1yZXR1cm4gdGhpc30sbGUucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlZSl7dmFyIHRlLG9lLHNlO2lmKHZvaWQgMD09PShvZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lm'@;
put 'KHZvaWQgMD09PW9lLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8odGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09b2VbZWVdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9'@;
put 'T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgb2VbZWVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgdWUsaGU9T2JqZWN0LmtleXMob2UpO2ZvcihzZT0wO3NlPGhlLmxlbmd0aDsrK3NlKSJyZW1vdmVMaXN0ZW5lciIhPT0odWU9aGVbc2VdKSYmdGhpcy5yZW1vdmVBbGxM'@;
put 'aXN0ZW5lcnModWUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHRlPW9lW2VlXSkpdGhpcy5yZW1vdmVM'@;
put 'aXN0ZW5lcihlZSx0ZSk7ZWxzZSBpZih2b2lkIDAhPT10ZSlmb3Ioc2U9dGUubGVuZ3RoLTE7c2U+PTA7c2UtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGVlLHRlW3NlXSk7cmV0dXJuIHRoaXN9LGxlLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3JldHVybiBrKHRoaXMsZWUsITAp'@;
put 'fSxsZS5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXtyZXR1cm4gayh0aGlzLGVlLCExKX0sbGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbihxLGVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgcS5saXN0ZW5lckNvdW50P3EubGlzdGVuZXJDb3VudChlZSk6RS5jYWxsKHEs'@;
put 'ZWUpfSxsZS5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1FLGxlLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/YWUodGhpcy5fZXZlbnRzKTpbXX19LDM2NTA1OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig3NTgy'@;
put 'OSk7YXQuZXhwb3J0cz1mdW5jdGlvbiBtKGxlLE0sTyxSKXtpZihhZS5pc0J1ZmZlcihsZSl8fChsZT1hZS5mcm9tKGxlLCJiaW5hcnkiKSksTSYmKGFlLmlzQnVmZmVyKE0pfHwoTT1hZS5mcm9tKE0sImJpbmFyeSIpKSw4IT09TS5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0'@;
put 'IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciB6PU8vOCxLPWFlLmFsbG9jKHopLEk9YWUuYWxsb2MoUnx8MCksaz1hZS5hbGxvYygwKTt6PjB8fFI+MDspe3ZhciBFPW5ldyB4O0UudXBkYXRlKGspLEUudXBkYXRlKGxlKSxNJiZFLnVwZGF0ZShNKSxrPUUu'@;
put 'ZGlnZXN0KCk7dmFyIGo9MDtpZih6PjApe3ZhciBWPUsubGVuZ3RoLXo7aj1NYXRoLm1pbih6LGsubGVuZ3RoKSxrLmNvcHkoSyxWLDAsaiksei09an1pZihqPGsubGVuZ3RoJiZSPjApe3ZhciBCPUkubGVuZ3RoLVIsWT1NYXRoLm1pbihSLGsubGVuZ3RoLWopO2suY29weShJLEIsaixqK1kp'@;
put 'LFItPVl9fXJldHVybiBrLmZpbGwoMCkse2tleTpLLGl2Okl9fX0sNjAzODA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0MykuQnVmZmVyLHg9Rig5Njc0NSkuVHJhbnNmb3JtO2Z1bmN0aW9uIE0oTyl7eC5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPWFlLmFsbG9jVW5zYWZl'@;
put 'KE8pLHRoaXMuX2Jsb2NrU2l6ZT1PLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9Rig2NjY5OCkoTSx4KSxNLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8sUix6KXt2YXIgSz1udWxsO3RyeXt0aGlzLnVwZGF0ZShP'@;
put 'LFIpfWNhdGNoKEkpe0s9SX16KEspfSxNLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIFI9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKHope1I9en1PKFIpfSxNLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyxSKXtpZihmdW5jdGlvbiBsZShPLFIp'@;
put 'e2lmKCFhZS5pc0J1ZmZlcihPKSYmInN0cmluZyIhPXR5cGVvZiBPKXRocm93IG5ldyBUeXBlRXJyb3IoUisiIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXIiKX0oTywiRGF0YSIpLHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO2Fl'@;
put 'LmlzQnVmZmVyKE8pfHwoTz1hZS5mcm9tKE8sUikpO2Zvcih2YXIgej10aGlzLl9ibG9jayxLPTA7dGhpcy5fYmxvY2tPZmZzZXQrTy5sZW5ndGgtSz49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBJPXRoaXMuX2Jsb2NrT2Zmc2V0O0k8dGhpcy5fYmxvY2tTaXplOyl6W0krK109T1tLKytd'@;
put 'O3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtLPE8ubGVuZ3RoOyl6W3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU9bSysrXTtmb3IodmFyIGs9MCxFPTgqTy5sZW5ndGg7RT4wOysrayl0aGlzLl9sZW5ndGhba10rPUUsKEU9dGhpcy5fbGVuZ3RoW2tdLzQyOTQ5NjcyOTZ8'@;
put 'MCk+MCYmKHRoaXMuX2xlbmd0aFtrXS09NDI5NDk2NzI5NipFKTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE8pe2lmKHRo'@;
put 'aXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgUj10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1PJiYoUj1SLnRvU3RyaW5nKE8pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7'@;
put 'Zm9yKHZhciB6PTA7ejw0Oysreil0aGlzLl9sZW5ndGhbel09MDtyZXR1cm4gUn0sTS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sYXQuZXhwb3J0cz1NfSw3MTA3NjooYXQsSWUsRik9Pnt2YXIgYWU9'@;
put 'SWU7YWUudXRpbHM9RigxOTg3NSksYWUuY29tbW9uPUYoOTIwODUpLGFlLnNoYT1GKDU3NjU4KSxhZS5yaXBlbWQ9Rig0ODM0NCksYWUuaG1hYz1GKDc2MTkyKSxhZS5zaGExPWFlLnNoYS5zaGExLGFlLnNoYTI1Nj1hZS5zaGEuc2hhMjU2LGFlLnNoYTIyND1hZS5zaGEuc2hhMjI0LGFlLnNo'@;
put 'YTM4ND1hZS5zaGEuc2hhMzg0LGFlLnNoYTUxMj1hZS5zaGEuc2hhNTEyLGFlLnJpcGVtZDE2MD1hZS5yaXBlbWQucmlwZW1kMTYwfSw5MjA4NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig1Nzc5OCk7ZnVuY3Rpb24gbSgpe3RoaXMucGVuZGluZz1udWxs'@;
put 'LHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10'@;
put 'aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9SWUuQmxvY2tIYXNoPW0sbS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE0sTyl7aWYoTT1hZS50'@;
put 'b0FycmF5KE0sTyksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KE0pOk0sdGhpcy5wZW5kaW5nVG90YWwrPU0ubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIFI9KE09dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVs'@;
put 'dGE4O3RoaXMucGVuZGluZz1NLnNsaWNlKE0ubGVuZ3RoLVIsTS5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLE09YWUuam9pbjMyKE0sMCxNLmxlbmd0aC1SLHRoaXMuZW5kaWFuKTtmb3IodmFyIHo9MDt6PE0ubGVuZ3RoO3orPXRoaXMuX2Rl'@;
put 'bHRhMzIpdGhpcy5fdXBkYXRlKE0seix6K3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxtLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSx4KG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdChNKX0sbS5wcm90b3R5'@;
put 'cGUuX3BhZD1mdW5jdGlvbigpe3ZhciBNPXRoaXMucGVuZGluZ1RvdGFsLE89dGhpcy5fZGVsdGE4LFI9Ty0oTSt0aGlzLnBhZExlbmd0aCklTyx6PW5ldyBBcnJheShSK3RoaXMucGFkTGVuZ3RoKTt6WzBdPTEyODtmb3IodmFyIEs9MTtLPFI7SysrKXpbS109MDtpZihNPDw9MywiYmlnIj09'@;
put 'PXRoaXMuZW5kaWFuKXtmb3IodmFyIEk9ODtJPHRoaXMucGFkTGVuZ3RoO0krKyl6W0srK109MDt6W0srK109MCx6W0srK109MCx6W0srK109MCx6W0srK109MCx6W0srK109TT4+PjI0JjI1NSx6W0srK109TT4+PjE2JjI1NSx6W0srK109TT4+PjgmMjU1LHpbSysrXT0yNTUmTX1lbHNlIGZv'@;
put 'cih6W0srK109MjU1Jk0seltLKytdPU0+Pj44JjI1NSx6W0srK109TT4+PjE2JjI1NSx6W0srK109TT4+PjI0JjI1NSx6W0srK109MCx6W0srK109MCx6W0srK109MCx6W0srK109MCxJPTg7STx0aGlzLnBhZExlbmd0aDtJKyspeltLKytdPTA7cmV0dXJuIHp9fSw3NjE5MjooYXQsSWUsRik9'@;
put 'PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig1Nzc5OCk7ZnVuY3Rpb24gbShsZSxNLE8pe2lmKCEodGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbShsZSxNLE8pO3RoaXMuSGFzaD1sZSx0aGlzLmJsb2NrU2l6ZT1sZS5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9bGUu'@;
put 'b3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChhZS50b0FycmF5KE0sTykpfWF0LmV4cG9ydHM9bSxtLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihNKXtNLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKE09KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShN'@;
put 'KS5kaWdlc3QoKSkseChNLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgTz1NLmxlbmd0aDtPPHRoaXMuYmxvY2tTaXplO08rKylNLnB1c2goMCk7Zm9yKE89MDtPPE0ubGVuZ3RoO08rKylNW09dXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKE0pLE89'@;
put 'MDtPPE0ubGVuZ3RoO08rKylNW09dXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKE0pfSxtLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTSxPKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUoTSxPKSx0aGlzfSxtLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oTSl7'@;
put 'cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KE0pfX0sNDgzNDQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTIwODUpLG09YWUucm90bDMyLGxlPWFlLnN1bTMyLE09YWUuc3VtMzJfMyxP'@;
put 'PWFlLnN1bTMyXzQsUj14LkJsb2NrSGFzaDtmdW5jdGlvbiB6KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6O1IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj0i'@;
put 'bGl0dGxlIn1mdW5jdGlvbiBLKFksWCxVLHEpe3JldHVybiBZPD0xNT9YXlVecTpZPD0zMT9YJlV8flgmcTpZPD00Nz8oWHx+VSlecTpZPD02Mz9YJnF8VSZ+cTpYXihVfH5xKX1mdW5jdGlvbiBrKFkpe3JldHVybiBZPD0xNT8xMzUyODI5OTI2Olk8PTMxPzE1NDg2MDM2ODQ6WTw9NDc/MTgz'@;
put 'NjA3MjY5MTpZPD02Mz8yMDUzOTk0MjE3OjB9YWUuaW5oZXJpdHMoeixSKSxJZS5yaXBlbWQxNjA9eix6LmJsb2NrU2l6ZT01MTIsei5vdXRTaXplPTE2MCx6LmhtYWNTdHJlbmd0aD0xOTIsei5wYWRMZW5ndGg9NjQsei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYLFUpe2Zvcih2YXIg'@;
put 'cT10aGlzLmhbMF0sZWU9dGhpcy5oWzFdLHRlPXRoaXMuaFsyXSxvZT10aGlzLmhbM10sc2U9dGhpcy5oWzRdLGhlPXEsdWU9ZWUsY2U9dGUsRz1vZSxiPXNlLEQ9MDtEPDgwO0QrKyl7dmFyIEg9bGUobShPKHEsSyhELGVlLHRlLG9lKSxYW0VbRF0rVV0sKFk9RCk8PTE1PzA6WTw9MzE/MTUx'@;
put 'ODUwMDI0OTpZPD00Nz8xODU5Nzc1MzkzOlk8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksVltEXSksc2UpO3E9c2Usc2U9b2Usb2U9bSh0ZSwxMCksdGU9ZWUsZWU9SCxIPWxlKG0oTyhoZSxLKDc5LUQsdWUsY2UsRyksWFtqW0RdK1VdLGsoRCkpLEJbRF0pLGIpLGhlPWIsYj1HLEc9bShj'@;
put 'ZSwxMCksY2U9dWUsdWU9SH12YXIgWTtIPU0odGhpcy5oWzFdLHRlLEcpLHRoaXMuaFsxXT1NKHRoaXMuaFsyXSxvZSxiKSx0aGlzLmhbMl09TSh0aGlzLmhbM10sc2UsaGUpLHRoaXMuaFszXT1NKHRoaXMuaFs0XSxxLHVlKSx0aGlzLmhbNF09TSh0aGlzLmhbMF0sZWUsY2UpLHRoaXMuaFsw'@;
put 'XT1IfSx6LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKFgpe3JldHVybiJoZXgiPT09WD9hZS50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6YWUuc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgRT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwx'@;
put 'MCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxqPVs1LDE0LDcsMCw5LDIsMTEsNCwx'@;
put 'Myw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwz'@;
put 'LDksMTFdLFY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYs'@;
put 'NSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLEI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMs'@;
put 'Nyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSw1NzY1ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7SWUuc2hhMT1GKDc1MDEwKSxJZS5zaGEyMjQ9Rig4MzU3OCksSWUuc2hhMjU2PUYo'@;
put 'OTc4NTcpLEllLnNoYTM4ND1GKDY4NzIzKSxJZS5zaGE1MTI9Rig0NTMwNCl9LDc1MDEwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDkyMDg1KSxtPUYoNzIyMSksbGU9YWUucm90bDMyLE09YWUuc3VtMzIsTz1hZS5zdW0zMl81LFI9bS5mdF8xLHo9eC5C'@;
put 'bG9ja0hhc2gsSz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gSSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSTt6LmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3'@;
put 'MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9YWUuaW5oZXJpdHMoSSx6KSxhdC5leHBvcnRzPUksSS5ibG9ja1NpemU9NTEyLEkub3V0U2l6ZT0xNjAsSS5obWFjU3RyZW5ndGg9ODAsSS5wYWRMZW5ndGg9NjQsSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihFLGop'@;
put 'e2Zvcih2YXIgVj10aGlzLlcsQj0wO0I8MTY7QisrKVZbQl09RVtqK0JdO2Zvcig7QjxWLmxlbmd0aDtCKyspVltCXT1sZShWW0ItM11eVltCLThdXlZbQi0xNF1eVltCLTE2XSwxKTt2YXIgWT10aGlzLmhbMF0sWD10aGlzLmhbMV0sVT10aGlzLmhbMl0scT10aGlzLmhbM10sZWU9dGhpcy5o'@;
put 'WzRdO2ZvcihCPTA7QjxWLmxlbmd0aDtCKyspe3ZhciB0ZT1+fihCLzIwKSxvZT1PKGxlKFksNSksUih0ZSxYLFUscSksZWUsVltCXSxLW3RlXSk7ZWU9cSxxPVUsVT1sZShYLDMwKSxYPVksWT1vZX10aGlzLmhbMF09TSh0aGlzLmhbMF0sWSksdGhpcy5oWzFdPU0odGhpcy5oWzFdLFgpLHRo'@;
put 'aXMuaFsyXT1NKHRoaXMuaFsyXSxVKSx0aGlzLmhbM109TSh0aGlzLmhbM10scSksdGhpcy5oWzRdPU0odGhpcy5oWzRdLGVlKX0sSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihFKXtyZXR1cm4iaGV4Ij09PUU/YWUudG9IZXgzMih0aGlzLmgsImJpZyIpOmFlLnNwbGl0MzIodGhpcy5o'@;
put 'LCJiaWciKX19LDgzNTc4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDk3ODU3KTtmdW5jdGlvbiBtKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBtO3guY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcw'@;
put 'Mjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfWFlLmluaGVyaXRzKG0seCksYXQuZXhwb3J0cz1tLG0uYmxvY2tTaXplPTUxMixtLm91dFNpemU9MjI0LG0uaG1hY1N0cmVuZ3RoPTE5MixtLnBhZExlbmd0aD02NCxtLnByb3RvdHlw'@;
put 'ZS5fZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiJoZXgiPT09TT9hZS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDk3ODU3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDky'@;
put 'MDg1KSxtPUYoNzIyMSksbGU9Rig1Nzc5OCksTT1hZS5zdW0zMixPPWFlLnN1bTMyXzQsUj1hZS5zdW0zMl81LHo9bS5jaDMyLEs9bS5tYWozMixJPW0uczBfMjU2LGs9bS5zMV8yNTYsRT1tLmcwXzI1NixqPW0uZzFfMjU2LFY9eC5CbG9ja0hhc2gsQj1bMTExNjM1MjQwOCwxODk5NDQ3NDQx'@;
put 'LDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQw'@;
put 'MjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcy'@;
put 'MDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0'@;
put 'LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5'@;
put 'MzI1Mjk4XTtmdW5jdGlvbiBZKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWSkpcmV0dXJuIG5ldyBZO1YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1'@;
put 'XSx0aGlzLms9Qix0aGlzLlc9bmV3IEFycmF5KDY0KX1hZS5pbmhlcml0cyhZLFYpLGF0LmV4cG9ydHM9WSxZLmJsb2NrU2l6ZT01MTIsWS5vdXRTaXplPTI1NixZLmhtYWNTdHJlbmd0aD0xOTIsWS5wYWRMZW5ndGg9NjQsWS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVLHEpe2Zvcih2'@;
put 'YXIgZWU9dGhpcy5XLHRlPTA7dGU8MTY7dGUrKyllZVt0ZV09VVtxK3RlXTtmb3IoO3RlPGVlLmxlbmd0aDt0ZSsrKWVlW3RlXT1PKGooZWVbdGUtMl0pLGVlW3RlLTddLEUoZWVbdGUtMTVdKSxlZVt0ZS0xNl0pO3ZhciBvZT10aGlzLmhbMF0sc2U9dGhpcy5oWzFdLGhlPXRoaXMuaFsyXSx1'@;
put 'ZT10aGlzLmhbM10sY2U9dGhpcy5oWzRdLEc9dGhpcy5oWzVdLGI9dGhpcy5oWzZdLEQ9dGhpcy5oWzddO2ZvcihsZSh0aGlzLmsubGVuZ3RoPT09ZWUubGVuZ3RoKSx0ZT0wO3RlPGVlLmxlbmd0aDt0ZSsrKXt2YXIgSD1SKEQsayhjZSkseihjZSxHLGIpLHRoaXMua1t0ZV0sZWVbdGVdKSxO'@;
put 'PU0oSShvZSksSyhvZSxzZSxoZSkpO0Q9YixiPUcsRz1jZSxjZT1NKHVlLEgpLHVlPWhlLGhlPXNlLHNlPW9lLG9lPU0oSCxOKX10aGlzLmhbMF09TSh0aGlzLmhbMF0sb2UpLHRoaXMuaFsxXT1NKHRoaXMuaFsxXSxzZSksdGhpcy5oWzJdPU0odGhpcy5oWzJdLGhlKSx0aGlzLmhbM109TSh0'@;
put 'aGlzLmhbM10sdWUpLHRoaXMuaFs0XT1NKHRoaXMuaFs0XSxjZSksdGhpcy5oWzVdPU0odGhpcy5oWzVdLEcpLHRoaXMuaFs2XT1NKHRoaXMuaFs2XSxiKSx0aGlzLmhbN109TSh0aGlzLmhbN10sRCl9LFkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oVSl7cmV0dXJuImhleCI9PT1VP2Fl'@;
put 'LnRvSGV4MzIodGhpcy5oLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw2ODcyMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig0NTMwNCk7ZnVuY3Rpb24gbSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG0pKXJldHVybiBuZXcgbTt4LmNhbGwo'@;
put 'dGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4Mzks'@;
put 'MTIwMzA2MjgxMywzMjA0MDc1NDI4XX1hZS5pbmhlcml0cyhtLHgpLGF0LmV4cG9ydHM9bSxtLmJsb2NrU2l6ZT0xMDI0LG0ub3V0U2l6ZT0zODQsbS5obWFjU3RyZW5ndGg9MTkyLG0ucGFkTGVuZ3RoPTEyOCxtLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKE0pe3JldHVybiJoZXgiPT09'@;
put 'TT9hZS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sNDUzMDQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTIwODUpLG09Rig1Nzc5OCksbGU9YWUucm90cjY0X2hpLE09'@;
put 'YWUucm90cjY0X2xvLE89YWUuc2hyNjRfaGksUj1hZS5zaHI2NF9sbyx6PWFlLnN1bTY0LEs9YWUuc3VtNjRfaGksST1hZS5zdW02NF9sbyxrPWFlLnN1bTY0XzRfaGksRT1hZS5zdW02NF80X2xvLGo9YWUuc3VtNjRfNV9oaSxWPWFlLnN1bTY0XzVfbG8sQj14LkJsb2NrSGFzaCxZPVsxMTE2'@;
put 'MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYw'@;
put 'OTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgw'@;
put 'LDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5'@;
put 'NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgz'@;
put 'MjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1'@;
put 'MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYs'@;
put 'NDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIz'@;
put 'NDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4'@;
put 'NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQs'@;
put 'MTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUx'@;
put 'NTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gWCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFgpKXJldHVybiBuZXcgWDtCLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0'@;
put 'NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9WSx0aGlzLlc9'@;
put 'bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gVShILE4sZyxDLFMpe3ZhciB2PUgmZ15+SCZTO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHEoSCxOLGcsQyxTLHYpe3ZhciBwPU4mQ15+TiZ2O3JldHVybiBwPDAmJihwKz00Mjk0OTY3Mjk2KSxwfWZ1bmN0aW9uIGVlKEgs'@;
put 'TixnLEMsUyl7dmFyIHY9SCZnXkgmU15nJlM7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gdGUoSCxOLGcsQyxTLHYpe3ZhciBwPU4mQ15OJnZeQyZ2O3JldHVybiBwPDAmJihwKz00Mjk0OTY3Mjk2KSxwfWZ1bmN0aW9uIG9lKEgsTil7dmFyIHY9bGUoSCxOLDI4KV5s'@;
put 'ZShOLEgsMilebGUoTixILDcpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHNlKEgsTil7dmFyIHY9TShILE4sMjgpXk0oTixILDIpXk0oTixILDcpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIGhlKEgsTil7dmFyIHY9bGUoSCxOLDE0KV5s'@;
put 'ZShILE4sMTgpXmxlKE4sSCw5KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiB1ZShILE4pe3ZhciB2PU0oSCxOLDE0KV5NKEgsTiwxOCleTShOLEgsOSk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gY2UoSCxOKXt2YXIgdj1sZShILE4sMSle'@;
put 'bGUoSCxOLDgpXk8oSCxOLDcpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIEcoSCxOKXt2YXIgdj1NKEgsTiwxKV5NKEgsTiw4KV5SKEgsTiw3KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBiKEgsTil7dmFyIHY9bGUoSCxOLDE5KV5sZShO'@;
put 'LEgsMjkpXk8oSCxOLDYpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIEQoSCxOKXt2YXIgdj1NKEgsTiwxOSleTShOLEgsMjkpXlIoSCxOLDYpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWFlLmluaGVyaXRzKFgsQiksYXQuZXhwb3J0cz1YLFguYmxvY2tT'@;
put 'aXplPTEwMjQsWC5vdXRTaXplPTUxMixYLmhtYWNTdHJlbmd0aD0xOTIsWC5wYWRMZW5ndGg9MTI4LFgucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9dGhpcy5XLFM9MDtTPDMyO1MrKylDW1NdPU5bZytTXTtmb3IoO1M8Qy5sZW5ndGg7Uys9Mil7dmFy'@;
put 'IHY9YihDW1MtNF0sQ1tTLTNdKSxwPUQoQ1tTLTRdLENbUy0zXSksdz1DW1MtMTRdLEo9Q1tTLTEzXSxuZT1jZShDW1MtMzBdLENbUy0yOV0pLGRlPUcoQ1tTLTMwXSxDW1MtMjldKSxmZT1DW1MtMzJdLHhlPUNbUy0zMV07Q1tTXT1rKHYscCx3LEosbmUsZGUsZmUseGUpLENbUysxXT1FKHYs'@;
put 'cCx3LEosbmUsZGUsZmUseGUpfX0sWC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOLGcpe3RoaXMuX3ByZXBhcmVCbG9jayhOLGcpO3ZhciBDPXRoaXMuVyxTPXRoaXMuaFswXSx2PXRoaXMuaFsxXSxwPXRoaXMuaFsyXSx3PXRoaXMuaFszXSxKPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0s'@;
put 'ZGU9dGhpcy5oWzZdLGZlPXRoaXMuaFs3XSx4ZT10aGlzLmhbOF0sTGU9dGhpcy5oWzldLEZlPXRoaXMuaFsxMF0sT2U9dGhpcy5oWzExXSxqZT10aGlzLmhbMTJdLFdlPXRoaXMuaFsxM10sS2U9dGhpcy5oWzE0XSxZZT10aGlzLmhbMTVdO20odGhpcy5rLmxlbmd0aD09PUMubGVuZ3RoKTtm'@;
put 'b3IodmFyIFFlPTA7UWU8Qy5sZW5ndGg7UWUrPTIpe3ZhciBsdD1LZSxQZT1ZZSxiZT1oZSh4ZSxMZSksQWU9dWUoeGUsTGUpLFRlPVUoeGUsMCxGZSwwLGplKSxxZT1xKDAsTGUsMCxPZSwwLFdlKSxYZT10aGlzLmtbUWVdLFVlPXRoaXMua1tRZSsxXSxodD1DW1FlXSxNZT1DW1FlKzFdLERl'@;
put 'PWoobHQsUGUsYmUsQWUsVGUscWUsWGUsVWUsaHQsTWUpLHplPVYobHQsUGUsYmUsQWUsVGUscWUsWGUsVWUsaHQsTWUpO2x0PW9lKFMsdiksUGU9c2UoUyx2KSxiZT1lZShTLDAscCwwLEopLEFlPXRlKDAsdiwwLHcsMCxuZSk7dmFyIG90PUsobHQsUGUsYmUsQWUpLHV0PUkobHQsUGUsYmUs'@;
put 'QWUpO0tlPWplLFllPVdlLGplPUZlLFdlPU9lLEZlPXhlLE9lPUxlLHhlPUsoZGUsZmUsRGUsemUpLExlPUkoZmUsZmUsRGUsemUpLGRlPUosZmU9bmUsSj1wLG5lPXcscD1TLHc9dixTPUsoRGUsemUsb3QsdXQpLHY9SShEZSx6ZSxvdCx1dCl9eih0aGlzLmgsMCxTLHYpLHoodGhpcy5oLDIs'@;
put 'cCx3KSx6KHRoaXMuaCw0LEosbmUpLHoodGhpcy5oLDYsZGUsZmUpLHoodGhpcy5oLDgseGUsTGUpLHoodGhpcy5oLDEwLEZlLE9lKSx6KHRoaXMuaCwxMixqZSxXZSkseih0aGlzLmgsMTQsS2UsWWUpfSxYLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKE4pe3JldHVybiJoZXgiPT09Tj9h'@;
put 'ZS50b0hleDMyKHRoaXMuaCwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzIyMTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIHg9RigxOTg3NSkucm90cjMyO2Z1bmN0aW9uIGxlKGssRSxqKXtyZXR1cm4gayZFXn5rJmp9ZnVuY3Rpb24gTShrLEUsail7cmV0dXJuIGsm'@;
put 'RV5rJmpeRSZqfWZ1bmN0aW9uIE8oayxFLGope3JldHVybiBrXkVean1JZS5mdF8xPWZ1bmN0aW9uIG0oayxFLGosVil7cmV0dXJuIDA9PT1rP2xlKEUsaixWKToxPT09a3x8Mz09PWs/TyhFLGosVik6Mj09PWs/TShFLGosVik6dm9pZCAwfSxJZS5jaDMyPWxlLEllLm1hajMyPU0sSWUucDMy'@;
put 'PU8sSWUuczBfMjU2PWZ1bmN0aW9uIFIoayl7cmV0dXJuIHgoaywyKV54KGssMTMpXngoaywyMil9LEllLnMxXzI1Nj1mdW5jdGlvbiB6KGspe3JldHVybiB4KGssNileeChrLDExKV54KGssMjUpfSxJZS5nMF8yNTY9ZnVuY3Rpb24gSyhrKXtyZXR1cm4geChrLDcpXngoaywxOCleaz4+PjN9'@;
put 'LEllLmcxXzI1Nj1mdW5jdGlvbiBJKGspe3JldHVybiB4KGssMTcpXngoaywxOSleaz4+PjEwfX0sMTk4NzU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpO2Z1bmN0aW9uIG0oRCxIKXtyZXR1cm4hKDU1Mjk2IT0oNjQ1MTImRC5jaGFyQ29kZUF0'@;
put 'KEgpKXx8SDwwfHxIKzE+PUQubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZELmNoYXJDb2RlQXQoSCsxKSl9ZnVuY3Rpb24gTyhEKXtyZXR1cm4oRD4+PjI0fEQ+Pj44JjY1MjgwfEQ8PDgmMTY3MTE2ODB8KDI1NSZEKTw8MjQpPj4+MH1mdW5jdGlvbiB6KEQpe3JldHVybiAxPT09RC5sZW5ndGg/'@;
put 'IjAiK0Q6RH1mdW5jdGlvbiBLKEQpe3JldHVybiA3PT09RC5sZW5ndGg/IjAiK0Q6Nj09PUQubGVuZ3RoPyIwMCIrRDo1PT09RC5sZW5ndGg/IjAwMCIrRDo0PT09RC5sZW5ndGg/IjAwMDAiK0Q6Mz09PUQubGVuZ3RoPyIwMDAwMCIrRDoyPT09RC5sZW5ndGg/IjAwMDAwMCIrRDoxPT09RC5s'@;
put 'ZW5ndGg/IjAwMDAwMDAiK0Q6RH1JZS5pbmhlcml0cz14LEllLnRvQXJyYXk9ZnVuY3Rpb24gbGUoRCxIKXtpZihBcnJheS5pc0FycmF5KEQpKXJldHVybiBELnNsaWNlKCk7aWYoIUQpcmV0dXJuW107dmFyIE49W107aWYoInN0cmluZyI9PXR5cGVvZiBEKWlmKEgpe2lmKCJoZXgiPT09SClm'@;
put 'b3IoKEQ9RC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVuZ3RoJTIhPTAmJihEPSIwIitEKSxDPTA7QzxELmxlbmd0aDtDKz0yKU4ucHVzaChwYXJzZUludChEW0NdK0RbQysxXSwxNikpfWVsc2UgZm9yKHZhciBnPTAsQz0wO0M8RC5sZW5ndGg7QysrKXt2YXIgUz1ELmNoYXJDb2Rl'@;
put 'QXQoQyk7UzwxMjg/TltnKytdPVM6UzwyMDQ4PyhOW2crK109Uz4+NnwxOTIsTltnKytdPTYzJlN8MTI4KTptKEQsQyk/KFM9NjU1MzYrKCgxMDIzJlMpPDwxMCkrKDEwMjMmRC5jaGFyQ29kZUF0KCsrQykpLE5bZysrXT1TPj4xOHwyNDAsTltnKytdPVM+PjEyJjYzfDEyOCxOW2crK109Uz4+'@;
put 'NiY2M3wxMjgsTltnKytdPTYzJlN8MTI4KTooTltnKytdPVM+PjEyfDIyNCxOW2crK109Uz4+NiY2M3wxMjgsTltnKytdPTYzJlN8MTI4KX1lbHNlIGZvcihDPTA7QzxELmxlbmd0aDtDKyspTltDXT0wfERbQ107cmV0dXJuIE59LEllLnRvSGV4PWZ1bmN0aW9uIE0oRCl7Zm9yKHZhciBIPSIi'@;
put 'LE49MDtOPEQubGVuZ3RoO04rKylIKz16KERbTl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gSH0sSWUuaHRvbmw9TyxJZS50b0hleDMyPWZ1bmN0aW9uIFIoRCxIKXtmb3IodmFyIE49IiIsZz0wO2c8RC5sZW5ndGg7ZysrKXt2YXIgQz1EW2ddOyJsaXR0bGUiPT09SCYmKEM9TyhDKSksTis9SyhD'@;
put 'LnRvU3RyaW5nKDE2KSl9cmV0dXJuIE59LEllLnplcm8yPXosSWUuemVybzg9SyxJZS5qb2luMzI9ZnVuY3Rpb24gSShELEgsTixnKXt2YXIgQz1OLUg7YWUoQyU0PT0wKTtmb3IodmFyIFM9bmV3IEFycmF5KEMvNCksdj0wLHA9SDt2PFMubGVuZ3RoO3YrKyxwKz00KVNbdl09KCJiaWciPT09'@;
put 'Zz9EW3BdPDwyNHxEW3ArMV08PDE2fERbcCsyXTw8OHxEW3ArM106RFtwKzNdPDwyNHxEW3ArMl08PDE2fERbcCsxXTw8OHxEW3BdKT4+PjA7cmV0dXJuIFN9LEllLnNwbGl0MzI9ZnVuY3Rpb24gayhELEgpe2Zvcih2YXIgTj1uZXcgQXJyYXkoNCpELmxlbmd0aCksZz0wLEM9MDtnPEQubGVu'@;
put 'Z3RoO2crKyxDKz00KXt2YXIgUz1EW2ddOyJiaWciPT09SD8oTltDXT1TPj4+MjQsTltDKzFdPVM+Pj4xNiYyNTUsTltDKzJdPVM+Pj44JjI1NSxOW0MrM109MjU1JlMpOihOW0MrM109Uz4+PjI0LE5bQysyXT1TPj4+MTYmMjU1LE5bQysxXT1TPj4+OCYyNTUsTltDXT0yNTUmUyl9cmV0dXJu'@;
put 'IE59LEllLnJvdHIzMj1mdW5jdGlvbiBFKEQsSCl7cmV0dXJuIEQ+Pj5IfEQ8PDMyLUh9LEllLnJvdGwzMj1mdW5jdGlvbiBqKEQsSCl7cmV0dXJuIEQ8PEh8RD4+PjMyLUh9LEllLnN1bTMyPWZ1bmN0aW9uIFYoRCxIKXtyZXR1cm4gRCtIPj4+MH0sSWUuc3VtMzJfMz1mdW5jdGlvbiBCKEQs'@;
put 'SCxOKXtyZXR1cm4gRCtIK04+Pj4wfSxJZS5zdW0zMl80PWZ1bmN0aW9uIFkoRCxILE4sZyl7cmV0dXJuIEQrSCtOK2c+Pj4wfSxJZS5zdW0zMl81PWZ1bmN0aW9uIFgoRCxILE4sZyxDKXtyZXR1cm4gRCtIK04rZytDPj4+MH0sSWUuc3VtNjQ9ZnVuY3Rpb24gVShELEgsTixnKXt2YXIgdj1n'@;
put 'K0RbSCsxXT4+PjA7RFtIXT0odjxnPzE6MCkrTitEW0hdPj4+MCxEW0grMV09dn0sSWUuc3VtNjRfaGk9ZnVuY3Rpb24gcShELEgsTixnKXtyZXR1cm4oSCtnPj4+MDxIPzE6MCkrRCtOPj4+MH0sSWUuc3VtNjRfbG89ZnVuY3Rpb24gZWUoRCxILE4sZyl7cmV0dXJuIEgrZz4+PjB9LEllLnN1'@;
put 'bTY0XzRfaGk9ZnVuY3Rpb24gdGUoRCxILE4sZyxDLFMsdixwKXt2YXIgdz0wLEo9SDtyZXR1cm4gdys9KEo9SitnPj4+MCk8SD8xOjAsdys9KEo9SitTPj4+MCk8Uz8xOjAsRCtOK0Mrdisodys9KEo9SitwPj4+MCk8cD8xOjApPj4+MH0sSWUuc3VtNjRfNF9sbz1mdW5jdGlvbiBvZShELEgs'@;
put 'TixnLEMsUyx2LHApe3JldHVybiBIK2crUytwPj4+MH0sSWUuc3VtNjRfNV9oaT1mdW5jdGlvbiBzZShELEgsTixnLEMsUyx2LHAsdyxKKXt2YXIgbmU9MCxkZT1IO3JldHVybiBuZSs9KGRlPWRlK2c+Pj4wKTxIPzE6MCxuZSs9KGRlPWRlK1M+Pj4wKTxTPzE6MCxuZSs9KGRlPWRlK3A+Pj4w'@;
put 'KTxwPzE6MCxEK04rQyt2K3crKG5lKz0oZGU9ZGUrSj4+PjApPEo/MTowKT4+PjB9LEllLnN1bTY0XzVfbG89ZnVuY3Rpb24gaGUoRCxILE4sZyxDLFMsdixwLHcsSil7cmV0dXJuIEgrZytTK3ArSj4+PjB9LEllLnJvdHI2NF9oaT1mdW5jdGlvbiB1ZShELEgsTil7cmV0dXJuKEg8PDMyLU58'@;
put 'RD4+Pk4pPj4+MH0sSWUucm90cjY0X2xvPWZ1bmN0aW9uIGNlKEQsSCxOKXtyZXR1cm4oRDw8MzItTnxIPj4+Tik+Pj4wfSxJZS5zaHI2NF9oaT1mdW5jdGlvbiBHKEQsSCxOKXtyZXR1cm4gRD4+Pk59LEllLnNocjY0X2xvPWZ1bmN0aW9uIGIoRCxILE4pe3JldHVybihEPDwzMi1OfEg+Pj5O'@;
put 'KT4+PjB9fSw5MjQ0NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzEwNzYpLHg9Rig3ODI0NyksbT1GKDU3Nzk4KTtmdW5jdGlvbiBsZShNKXtpZighKHRoaXMgaW5zdGFuY2VvZiBsZSkpcmV0dXJuIG5ldyBsZShNKTt0aGlzLmhhc2g9TS5oYXNoLHRoaXMucHJlZFJlc2lz'@;
put 'dD0hIU0ucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9TS5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVs'@;
put 'bDt2YXIgTz14LnRvQXJyYXkoTS5lbnRyb3B5LE0uZW50cm9weUVuY3x8ImhleCIpLFI9eC50b0FycmF5KE0ubm9uY2UsTS5ub25jZUVuY3x8ImhleCIpLHo9eC50b0FycmF5KE0ucGVycyxNLnBlcnNFbmN8fCJoZXgiKTttKE8ubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3Vn'@;
put 'aCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KE8sUix6KX1hdC5leHBvcnRzPWxlLGxlLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihPLFIseil7dmFyIEs9Ty5jb25jYXQoUikuY29uY2F0KHopO3RoaXMuSz1uZXcgQXJyYXkodGhp'@;
put 'cy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIEk9MDtJPHRoaXMuVi5sZW5ndGg7SSsrKXRoaXMuS1tJXT0wLHRoaXMuVltJXT0xO3RoaXMuX3VwZGF0ZShLKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1'@;
put 'Nn0sbGUucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBhZS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxsZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPKXt2YXIgUj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7TyYmKFI9Ui51cGRhdGUo'@;
put 'TykpLHRoaXMuSz1SLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksTyYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKE8pLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRo'@;
put 'aXMuVikuZGlnZXN0KCkpfSxsZS5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKE8sUix6LEspeyJzdHJpbmciIT10eXBlb2YgUiYmKEs9eix6PVIsUj1udWxsKSxPPXgudG9BcnJheShPLFIpLHo9eC50b0FycmF5KHosSyksbShPLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91'@;
put 'Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKE8uY29uY2F0KHp8fFtdKSksdGhpcy5fcmVzZWVkPTF9LGxlLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihPLFIseixLKXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJ'@;
put 'bnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgUiYmKEs9eix6PVIsUj1udWxsKSx6JiYoej14LnRvQXJyYXkoeixLfHwiaGV4IiksdGhpcy5fdXBkYXRlKHopKTtmb3IodmFyIEk9W107SS5sZW5ndGg8TzspdGhpcy5WPXRoaXMu'@;
put 'X2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxJPUkuY29uY2F0KHRoaXMuVik7dmFyIGs9SS5zbGljZSgwLE8pO3JldHVybiB0aGlzLl91cGRhdGUoeiksdGhpcy5fcmVzZWVkKysseC5lbmNvZGUoayxSKX19LDU1ODMzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rigy'@;
put 'NDE3OSkuQnVmZmVyO0llLl9kYmNzPUs7Zm9yKHZhciB4PS0xLG09LTIsbGU9LTEwLE09LTFlMyxPPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspT1t6XT14O2Z1bmN0aW9uIEsoaixWKXtpZih0aGlzLmVuY29kaW5nTmFtZT1qLmVuY29kaW5nTmFtZSwhail0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkRCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIWoudGFibGUpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit0aGlzLmVuY29kaW5nTmFtZSsiJyBoYXMgbm8gZGF0YS4iKTt2YXIgQj1qLnRhYmxlKCk7dGhpcy5kZWNvZGVUYWJsZXM9W10sdGhpcy5kZWNv'@;
put 'ZGVUYWJsZXNbMF09Ty5zbGljZSgwKSx0aGlzLmRlY29kZVRhYmxlU2VxPVtdO2Zvcih2YXIgWT0wO1k8Qi5sZW5ndGg7WSsrKXRoaXMuX2FkZERlY29kZUNodW5rKEJbWV0pO3RoaXMuZGVmYXVsdENoYXJVbmljb2RlPVYuZGVmYXVsdENoYXJVbmljb2RlLHRoaXMuZW5jb2RlVGFibGU9W10s'@;
put 'dGhpcy5lbmNvZGVUYWJsZVNlcT1bXTt2YXIgWD17fTtpZihqLmVuY29kZVNraXBWYWxzKWZvcihZPTA7WTxqLmVuY29kZVNraXBWYWxzLmxlbmd0aDtZKyspe3ZhciBVPWouZW5jb2RlU2tpcFZhbHNbWV07aWYoIm51bWJlciI9PXR5cGVvZiBVKVhbVV09ITA7ZWxzZSBmb3IodmFyIHE9VS5m'@;
put 'cm9tO3E8PVUudG87cSsrKVhbcV09ITB9aWYodGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsMCxYKSxqLmVuY29kZUFkZClmb3IodmFyIGVlIGluIGouZW5jb2RlQWRkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLmVuY29kZUFkZCxlZSkmJnRoaXMuX3NldEVuY29kZUNo'@;
put 'YXIoZWUuY2hhckNvZGVBdCgwKSxqLmVuY29kZUFkZFtlZV0pO2lmKHRoaXMuZGVmQ2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bVi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKV0sdGhpcy5kZWZDaGFyU0I9PT14JiYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVUYWJs'@;
put 'ZVswXVsiPyJdKSx0aGlzLmRlZkNoYXJTQj09PXgmJih0aGlzLmRlZkNoYXJTQj0iPyIuY2hhckNvZGVBdCgwKSksImZ1bmN0aW9uIj09dHlwZW9mIGouZ2IxODAzMCl7dGhpcy5nYjE4MDMwPWouZ2IxODAzMCgpO3ZhciB0ZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsb2U9dGhpcy5kZWNv'@;
put 'ZGVUYWJsZXNbdGVdPU8uc2xpY2UoMCksc2U9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLGhlPXRoaXMuZGVjb2RlVGFibGVzW3NlXT1PLnNsaWNlKDApO2ZvcihZPTEyOTtZPD0yNTQ7WSsrKXt2YXIgY2U9dGhpcy5kZWNvZGVUYWJsZXNbTS10aGlzLmRlY29kZVRhYmxlc1swXVtZXV07Zm9y'@;
put 'KHE9NDg7cTw9NTc7cSsrKWNlW3FdPU0tdGV9Zm9yKFk9MTI5O1k8PTI1NDtZKyspb2VbWV09TS1zZTtmb3IoWT00ODtZPD01NztZKyspaGVbWV09bX19ZnVuY3Rpb24gSShqLFYpe3RoaXMubGVhZFN1cnJvZ2F0ZT0tMSx0aGlzLnNlcU9iaj12b2lkIDAsdGhpcy5lbmNvZGVUYWJsZT1WLmVu'@;
put 'Y29kZVRhYmxlLHRoaXMuZW5jb2RlVGFibGVTZXE9Vi5lbmNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT1WLmRlZkNoYXJTQix0aGlzLmdiMTgwMzA9Vi5nYjE4MDMwfWZ1bmN0aW9uIGsoaixWKXt0aGlzLm5vZGVJZHg9MCx0aGlzLnByZXZCdWY9YWUuYWxsb2MoMCks'@;
put 'dGhpcy5kZWNvZGVUYWJsZXM9Vi5kZWNvZGVUYWJsZXMsdGhpcy5kZWNvZGVUYWJsZVNlcT1WLmRlY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPVYuZGVmYXVsdENoYXJVbmljb2RlLHRoaXMuZ2IxODAzMD1WLmdiMTgwMzB9ZnVuY3Rpb24gRShqLFYpe2lmKGpbMF0+Vily'@;
put 'ZXR1cm4tMTtmb3IodmFyIEI9MCxZPWoubGVuZ3RoO0I8WS0xOyl7dmFyIFg9QitNYXRoLmZsb29yKChZLUIrMSkvMik7altYXTw9Vj9CPVg6WT1YfXJldHVybiBCfUsucHJvdG90eXBlLmVuY29kZXI9SSxLLnByb3RvdHlwZS5kZWNvZGVyPWssSy5wcm90b3R5cGUuX2dldERlY29kZVRyaWVO'@;
put 'b2RlPWZ1bmN0aW9uKGope2Zvcih2YXIgVj1bXTtqPjA7aj4+PTgpVi5wdXNoKDI1NSZqKTswPT1WLmxlbmd0aCYmVi5wdXNoKDApO2Zvcih2YXIgQj10aGlzLmRlY29kZVRhYmxlc1swXSxZPVYubGVuZ3RoLTE7WT4wO1ktLSl7dmFyIFg9QltWW1ldXTtpZihYPT14KUJbVltZXV09TS10aGlz'@;
put 'LmRlY29kZVRhYmxlcy5sZW5ndGgsdGhpcy5kZWNvZGVUYWJsZXMucHVzaChCPU8uc2xpY2UoMCkpO2Vsc2V7aWYoIShYPD1NKSl0aHJvdyBuZXcgRXJyb3IoIk92ZXJ3cml0ZSBieXRlIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiwgYWRkcjogIitqLnRvU3RyaW5nKDE2KSk7Qj10aGlzLmRl'@;
put 'Y29kZVRhYmxlc1tNLVhdfX1yZXR1cm4gQn0sSy5wcm90b3R5cGUuX2FkZERlY29kZUNodW5rPWZ1bmN0aW9uKGope3ZhciBWPXBhcnNlSW50KGpbMF0sMTYpLEI9dGhpcy5fZ2V0RGVjb2RlVHJpZU5vZGUoVik7ViY9MjU1O2Zvcih2YXIgWT0xO1k8ai5sZW5ndGg7WSsrKXt2YXIgWD1qW1ld'@;
put 'O2lmKCJzdHJpbmciPT10eXBlb2YgWClmb3IodmFyIFU9MDtVPFgubGVuZ3RoOyl7dmFyIHE9WC5jaGFyQ29kZUF0KFUrKyk7aWYoNTUyOTY8PXEmJnE8NTYzMjApe3ZhciBlZT1YLmNoYXJDb2RlQXQoVSsrKTtpZighKDU2MzIwPD1lZSYmZWU8NTczNDQpKXRocm93IG5ldyBFcnJvcigiSW5j'@;
put 'b3JyZWN0IHN1cnJvZ2F0ZSBwYWlyIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK2pbMF0pO0JbVisrXT02NTUzNisxMDI0KihxLTU1Mjk2KSsoZWUtNTYzMjApfWVsc2UgaWYoNDA4MDxxJiZxPD00MDk1KXtmb3IodmFyIHRlPTQwOTUtcSsyLG9lPVtdLHNlPTA7c2U8dGU7'@;
put 'c2UrKylvZS5wdXNoKFguY2hhckNvZGVBdChVKyspKTtCW1YrK109bGUtdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5kZWNvZGVUYWJsZVNlcS5wdXNoKG9lKX1lbHNlIEJbVisrXT1xfWVsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBYKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0'@;
put 'IHR5cGUgJyIrdHlwZW9mIFgrIicgZ2l2ZW4gaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIralswXSk7dmFyIGhlPUJbVi0xXSsxO2ZvcihVPTA7VTxYO1UrKylCW1YrK109aGUrK319aWYoVj4yNTUpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgY2h1bmsgaW4gIit0aGlz'@;
put 'LmVuY29kaW5nTmFtZSsiIGF0IGFkZHIgIitqWzBdKyI6IHRvbyBsb25nIitWKX0sSy5wcm90b3R5cGUuX2dldEVuY29kZUJ1Y2tldD1mdW5jdGlvbihqKXt2YXIgVj1qPj44O3JldHVybiB2b2lkIDA9PT10aGlzLmVuY29kZVRhYmxlW1ZdJiYodGhpcy5lbmNvZGVUYWJsZVtWXT1PLnNsaWNl'@;
put 'KDApKSx0aGlzLmVuY29kZVRhYmxlW1ZdfSxLLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhcj1mdW5jdGlvbihqLFYpe3ZhciBCPXRoaXMuX2dldEVuY29kZUJ1Y2tldChqKSxZPTI1NSZqO0JbWV08PWxlP3RoaXMuZW5jb2RlVGFibGVTZXFbbGUtQltZXV1bLTFdPVY6QltZXT09eCYmKEJbWV09'@;
put 'Vil9LEsucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihqLFYpe3ZhciBVLEI9alswXSxZPXRoaXMuX2dldEVuY29kZUJ1Y2tldChCKSxYPTI1NSZCO1lbWF08PWxlP1U9dGhpcy5lbmNvZGVUYWJsZVNlcVtsZS1ZW1hdXTooVT17fSxZW1hdIT09eCYmKFVbLTFdPVlbWF0p'@;
put 'LFlbWF09bGUtdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKFUpKTtmb3IodmFyIHE9MTtxPGoubGVuZ3RoLTE7cSsrKXt2YXIgZWU9VVtCXTsib2JqZWN0Ij09dHlwZW9mIGVlP1U9ZWU6KFU9VVtCXT17fSx2b2lkIDAhPT1lZSYmKFVbLTFdPWVl'@;
put 'KSl9VVtCPWpbai5sZW5ndGgtMV1dPVZ9LEsucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGU9ZnVuY3Rpb24oaixWLEIpe2Zvcih2YXIgWT10aGlzLmRlY29kZVRhYmxlc1tqXSxYPTA7WDwyNTY7WCsrKXt2YXIgVT1ZW1hdLHE9VitYO0JbcV18fChVPj0wP3RoaXMuX3NldEVuY29kZUNoYXIo'@;
put 'VSxxKTpVPD1NP3RoaXMuX2ZpbGxFbmNvZGVUYWJsZShNLVUscTw8OCxCKTpVPD1sZSYmdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtsZS1VXSxxKSl9fSxJLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXtmb3IodmFyIFY9YWUuYWxsb2Moai5sZW5ndGgq'@;
put 'KHRoaXMuZ2IxODAzMD80OjMpKSxCPXRoaXMubGVhZFN1cnJvZ2F0ZSxZPXRoaXMuc2VxT2JqLFg9LTEsVT0wLHE9MDs7KXtpZigtMT09PVgpe2lmKFU9PWoubGVuZ3RoKWJyZWFrO3ZhciBlZT1qLmNoYXJDb2RlQXQoVSsrKX1lbHNlIGVlPVgsWD0tMTtpZig1NTI5Njw9ZWUmJmVlPDU3MzQ0'@;
put 'KWlmKGVlPDU2MzIwKXtpZigtMT09PUIpe0I9ZWU7Y29udGludWV9Qj1lZSxlZT14fWVsc2UtMSE9PUI/KGVlPTY1NTM2KzEwMjQqKEItNTUyOTYpKyhlZS01NjMyMCksQj0tMSk6ZWU9eDtlbHNlLTEhPT1CJiYoWD1lZSxlZT14LEI9LTEpO3ZhciB0ZT14O2lmKHZvaWQgMCE9PVkmJmVlIT14'@;
put 'KXt2YXIgb2U9WVtlZV07aWYoIm9iamVjdCI9PXR5cGVvZiBvZSl7WT1vZTtjb250aW51ZX0ibnVtYmVyIj09dHlwZW9mIG9lP3RlPW9lOm51bGw9PW9lJiZ2b2lkIDAhPT0ob2U9WVstMV0pJiYodGU9b2UsWD1lZSksWT12b2lkIDB9ZWxzZSBpZihlZT49MCl7dmFyIHNlPXRoaXMuZW5jb2Rl'@;
put 'VGFibGVbZWU+PjhdO2lmKHZvaWQgMCE9PXNlJiYodGU9c2VbMjU1JmVlXSksdGU8PWxlKXtZPXRoaXMuZW5jb2RlVGFibGVTZXFbbGUtdGVdO2NvbnRpbnVlfWlmKHRlPT14JiZ0aGlzLmdiMTgwMzApe3ZhciBoZT1FKHRoaXMuZ2IxODAzMC51Q2hhcnMsZWUpO2lmKC0xIT1oZSl7dGU9dGhp'@;
put 'cy5nYjE4MDMwLmdiQ2hhcnNbaGVdKyhlZS10aGlzLmdiMTgwMzAudUNoYXJzW2hlXSksVltxKytdPTEyOStNYXRoLmZsb29yKHRlLzEyNjAwKSx0ZSU9MTI2MDAsVltxKytdPTQ4K01hdGguZmxvb3IodGUvMTI2MCksdGUlPTEyNjAsVltxKytdPTEyOStNYXRoLmZsb29yKHRlLzEwKSxWW3Er'@;
put 'K109NDgrKHRlJT0xMCk7Y29udGludWV9fX10ZT09PXgmJih0ZT10aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSksdGU8MjU2P1ZbcSsrXT10ZTp0ZTw2NTUzNj8oVltxKytdPXRlPj44LFZbcSsrXT0yNTUmdGUpOihWW3ErK109dGU+PjE2LFZbcSsrXT10ZT4+OCYyNTUsVltxKytdPTI1NSZ0'@;
put 'ZSl9cmV0dXJuIHRoaXMuc2VxT2JqPVksdGhpcy5sZWFkU3Vycm9nYXRlPUIsVi5zbGljZSgwLHEpfSxJLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZigtMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZXx8dm9pZCAwIT09dGhpcy5zZXFPYmope3ZhciBqPWFlLmFsbG9jKDEwKSxWPTA7aWYodGhp'@;
put 'cy5zZXFPYmope3ZhciBCPXRoaXMuc2VxT2JqWy0xXTt2b2lkIDAhPT1CJiYoQjwyNTY/altWKytdPUI6KGpbVisrXT1CPj44LGpbVisrXT0yNTUmQikpLHRoaXMuc2VxT2JqPXZvaWQgMH1yZXR1cm4tMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZSYmKGpbVisrXT10aGlzLmRlZmF1bHRDaGFyU2lu'@;
put 'Z2xlQnl0ZSx0aGlzLmxlYWRTdXJyb2dhdGU9LTEpLGouc2xpY2UoMCxWKX19LEkucHJvdG90eXBlLmZpbmRJZHg9RSxrLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihqKXt2YXIgVj1hZS5hbGxvYygyKmoubGVuZ3RoKSxCPXRoaXMubm9kZUlkeCxZPXRoaXMucHJldkJ1ZixYPXRoaXMucHJl'@;
put 'dkJ1Zi5sZW5ndGgsVT0tdGhpcy5wcmV2QnVmLmxlbmd0aDtYPjAmJihZPWFlLmNvbmNhdChbWSxqLnNsaWNlKDAsMTApXSkpO2Zvcih2YXIgZWU9MCx0ZT0wO2VlPGoubGVuZ3RoO2VlKyspe3ZhciBxLG9lPWVlPj0wP2pbZWVdOllbZWUrWF07aWYoISgocT10aGlzLmRlY29kZVRhYmxlc1tC'@;
put 'XVtvZV0pPj0wKSlpZihxPT09eCllZT1VLHE9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKTtlbHNlIGlmKHE9PT1tKXt2YXIgc2U9VT49MD9qLnNsaWNlKFUsZWUrMSk6WS5zbGljZShVK1gsZWUrMStYKSxoZT0xMjYwMCooc2VbMF0tMTI5KSsxMjYwKihzZVsxXS00OCkr'@;
put 'MTAqKHNlWzJdLTEyOSkrKHNlWzNdLTQ4KSx1ZT1FKHRoaXMuZ2IxODAzMC5nYkNoYXJzLGhlKTtxPXRoaXMuZ2IxODAzMC51Q2hhcnNbdWVdK2hlLXRoaXMuZ2IxODAzMC5nYkNoYXJzW3VlXX1lbHNle2lmKHE8PU0pe0I9TS1xO2NvbnRpbnVlfWlmKCEocTw9bGUpKXRocm93IG5ldyBFcnJv'@;
put 'cigiaWNvbnYtbGl0ZSBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJsZSB2YWx1ZSAiK3ErIiBhdCAiK0IrIi8iK29lKTtmb3IodmFyIGNlPXRoaXMuZGVjb2RlVGFibGVTZXFbbGUtcV0sRz0wO0c8Y2UubGVuZ3RoLTE7RysrKVZbdGUrK109MjU1JihxPWNlW0ddKSxWW3Rl'@;
put 'KytdPXE+Pjg7cT1jZVtjZS5sZW5ndGgtMV19aWYocT42NTUzNSl7cS09NjU1MzY7dmFyIGI9NTUyOTYrTWF0aC5mbG9vcihxLzEwMjQpO1ZbdGUrK109MjU1JmIsVlt0ZSsrXT1iPj44LHE9NTYzMjArcSUxMDI0fVZbdGUrK109MjU1JnEsVlt0ZSsrXT1xPj44LEI9MCxVPWVlKzF9cmV0dXJu'@;
put 'IHRoaXMubm9kZUlkeD1CLHRoaXMucHJldkJ1Zj1VPj0wP2ouc2xpY2UoVSk6WS5zbGljZShVK1gpLFYuc2xpY2UoMCx0ZSkudG9TdHJpbmcoInVjczIiKX0say5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBqPSIiO3RoaXMucHJldkJ1Zi5sZW5ndGg+MDspe2orPXRoaXMuZGVm'@;
put 'YXVsdENoYXJVbmljb2RlO3ZhciBWPXRoaXMucHJldkJ1Zi5zbGljZSgxKTt0aGlzLnByZXZCdWY9YWUuYWxsb2MoMCksdGhpcy5ub2RlSWR4PTAsVi5sZW5ndGg+MCYmKGorPXRoaXMud3JpdGUoVikpfXJldHVybiB0aGlzLm5vZGVJZHg9MCxqfX0sMzI1NTQ6KGF0LEllLEYpPT57InVzZSBz'@;
put 'dHJpY3QiO2F0LmV4cG9ydHM9e3NoaWZ0amlzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigyNzAxNCl9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn0sZW5jb2RlU2tpcFZhbHM6W3tmcm9tOjYwNzM2LHRvOjYzODA4fV19LGNzc2hpZnRqaXM6InNo'@;
put 'aWZ0amlzIixtc2thbmppOiJzaGlmdGppcyIsc2ppczoic2hpZnRqaXMiLHdpbmRvd3MzMWo6InNoaWZ0amlzIixtczMxajoic2hpZnRqaXMiLHhzamlzOiJzaGlmdGppcyIsd2luZG93czkzMjoic2hpZnRqaXMiLG1zOTMyOiJzaGlmdGppcyIsOTMyOiJzaGlmdGppcyIsY3A5MzI6InNoaWZ0'@;
put 'amlzIixldWNqcDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMzE1MzIpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUyMDNlIjoxMjZ9fSxnYjIzMTI6ImNwOTM2IixnYjIzMTI4MDoiY3A5MzYiLGdiMjMxMjE5ODA6ImNwOTM2Iixjc2diMjMxMjoiY3A5MzYiLGNz'@;
put 'aXNvNThnYjIzMTI4MDoiY3A5MzYiLGV1Y2NuOiJjcDkzNiIsd2luZG93czkzNjoiY3A5MzYiLG1zOTM2OiJjcDkzNiIsOTM2OiJjcDkzNiIsY3A5MzY6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDEzMzM2KX19LGdiazp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEYoMTMzMzYpLmNvbmNhdChGKDQ0MzQ2KSl9fSx4Z2JrOiJnYmsiLGlzb2lyNTg6ImdiayIsZ2IxODAzMDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMTMzMzYpLmNvbmNhdChGKDQ0MzQ2KSl9LGdiMTgwMzA6ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'RigzNjI1OCl9LGVuY29kZVNraXBWYWxzOlsxMjhdLGVuY29kZUFkZDp7Ilx1MjBhYyI6NDE2OTl9fSxjaGluZXNlOiJnYjE4MDMwIix3aW5kb3dzOTQ5OiJjcDk0OSIsbXM5NDk6ImNwOTQ5Iiw5NDk6ImNwOTQ5IixjcDk0OTp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEYoNzczNDgpfX0sY3NldWNrcjoiY3A5NDkiLGNza3NjNTYwMTE5ODc6ImNwOTQ5IixldWNrcjoiY3A5NDkiLGlzb2lyMTQ5OiJjcDk0OSIsa29yZWFuOiJjcDk0OSIsa3NjNTYwMTE5ODc6ImNwOTQ5Iixrc2M1NjAxMTk4OToiY3A5NDkiLGtzYzU2MDE6ImNwOTQ5Iix3aW5kb3dzOTUwOiJj'@;
put 'cDk1MCIsbXM5NTA6ImNwOTUwIiw5NTA6ImNwOTUwIixjcDk1MDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoNzQyODQpfX0sYmlnNToiYmlnNWhrc2NzIixiaWc1aGtzY3M6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBGKDc0Mjg0KS5jb25j'@;
put 'YXQoRig2MzQ4MCkpfSxlbmNvZGVTa2lwVmFsczpbNDE2NzZdfSxjbmJpZzU6ImJpZzVoa3NjcyIsY3NiaWc1OiJiaWc1aGtzY3MiLHh4YmlnNToiYmlnNWhrc2NzIn19LDQ0NjU3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGFlPVtGKDI3NjQ4KSxGKDkyODQ0KSxGKDQzMjgw'@;
put 'KSxGKDc4MzU0KSxGKDcxNzY0KSxGKDY0NzczKSxGKDIwNTAzKSxGKDU1ODMzKSxGKDMyNTU0KV0seD0wO3g8YWUubGVuZ3RoO3grKyl7dmFyIG09YWVbeF07Zm9yKHZhciBsZSBpbiBtKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtLGxlKSYmKEllW2xlXT1tW2xlXSl9'@;
put 'fSwyNzY0ODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiB4KEssSSl7dGhpcy5lbmM9Sy5lbmNvZGluZ05hbWUsdGhpcy5ib21Bd2FyZT1LLmJvbUF3YXJlLCJiYXNlNjQiPT09dGhpcy5lbmM/dGhpcy5lbmNvZGVyPU86ImNlc3U4Ij09'@;
put 'PXRoaXMuZW5jJiYodGhpcy5lbmM9InV0ZjgiLHRoaXMuZW5jb2Rlcj1SLCJcdXsxZjRhOX0iIT09YWUuZnJvbSgiZWRhMGJkZWRiMmE5IiwiaGV4IikudG9TdHJpbmcoKSYmKHRoaXMuZGVjb2Rlcj16LHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPUkuZGVmYXVsdENoYXJVbmljb2RlKSl9YXQu'@;
put 'ZXhwb3J0cz17dXRmODp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sY2VzdTg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LHVuaWNvZGUxMXV0Zjg6InV0ZjgiLHVjczI6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LHV0ZjE2bGU6InVjczIiLGJpbmFyeTp7dHlw'@;
put 'ZToiX2ludGVybmFsIn0sYmFzZTY0Ont0eXBlOiJfaW50ZXJuYWwifSxoZXg6e3R5cGU6Il9pbnRlcm5hbCJ9LF9pbnRlcm5hbDp4fSx4LnByb3RvdHlwZS5lbmNvZGVyPU0seC5wcm90b3R5cGUuZGVjb2Rlcj1sZTt2YXIgbT1GKDcyMDI0KS5zO2Z1bmN0aW9uIGxlKEssSSl7bS5jYWxsKHRo'@;
put 'aXMsSS5lbmMpfWZ1bmN0aW9uIE0oSyxJKXt0aGlzLmVuYz1JLmVuY31mdW5jdGlvbiBPKEssSSl7dGhpcy5wcmV2U3RyPSIifWZ1bmN0aW9uIFIoSyxJKXt9ZnVuY3Rpb24geihLLEkpe3RoaXMuYWNjPTAsdGhpcy5jb250Qnl0ZXM9MCx0aGlzLmFjY0J5dGVzPTAsdGhpcy5kZWZhdWx0Q2hh'@;
put 'clVuaWNvZGU9SS5kZWZhdWx0Q2hhclVuaWNvZGV9bS5wcm90b3R5cGUuZW5kfHwobS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSksbGUucHJvdG90eXBlPW0ucHJvdG90eXBlLE0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe3JldHVybiBhZS5mcm9tKEssdGhpcy5lbmMpfSxNLnBy'@;
put 'b3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe3ZhciBJPShLPXRoaXMucHJldlN0citLKS5sZW5ndGgtSy5sZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPUsuc2xpY2UoSSksSz1LLnNsaWNlKDAsSSksYWUuZnJvbShLLCJiYXNlNjQiKX0s'@;
put 'Ty5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIGFlLmZyb20odGhpcy5wcmV2U3RyLCJiYXNlNjQiKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPWFlLmFsbG9jKDMqSy5sZW5ndGgpLGs9MCxFPTA7RTxLLmxlbmd0aDtFKyspe3ZhciBqPUsuY2hhckNv'@;
put 'ZGVBdChFKTtqPDEyOD9JW2srK109ajpqPDIwNDg/KElbaysrXT0xOTIrKGo+Pj42KSxJW2srK109MTI4Kyg2MyZqKSk6KElbaysrXT0yMjQrKGo+Pj4xMiksSVtrKytdPTEyOCsoaj4+PjYmNjMpLElbaysrXT0xMjgrKDYzJmopKX1yZXR1cm4gSS5zbGljZSgwLGspfSxSLnByb3RvdHlwZS5l'@;
put 'bmQ9ZnVuY3Rpb24oKXt9LHoucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST10aGlzLmFjYyxrPXRoaXMuY29udEJ5dGVzLEU9dGhpcy5hY2NCeXRlcyxqPSIiLFY9MDtWPEsubGVuZ3RoO1YrKyl7dmFyIEI9S1tWXTsxMjghPSgxOTImQik/KGs+MCYmKGorPXRoaXMuZGVm'@;
put 'YXVsdENoYXJVbmljb2RlLGs9MCksQjwxMjg/ais9U3RyaW5nLmZyb21DaGFyQ29kZShCKTpCPDIyND8oST0zMSZCLGs9MSxFPTEpOkI8MjQwPyhJPTE1JkIsaz0yLEU9MSk6ais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOms+MD8oST1JPDw2fDYzJkIsRSsrLDA9PS0tayYmKGorPTI9PT1F'@;
put 'JiZJPDEyOCYmST4wfHwzPT09RSYmSTwyMDQ4P3RoaXMuZGVmYXVsdENoYXJVbmljb2RlOlN0cmluZy5mcm9tQ2hhckNvZGUoSSkpKTpqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZX1yZXR1cm4gdGhpcy5hY2M9SSx0aGlzLmNvbnRCeXRlcz1rLHRoaXMuYWNjQnl0ZXM9RSxqfSx6LnByb3Rv'@;
put 'dHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgSz0wO3JldHVybiB0aGlzLmNvbnRCeXRlcz4wJiYoSys9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpLEt9fSw3MTc2NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiB4KE0sTyl7aWYoIU0pdGhy'@;
put 'b3cgbmV3IEVycm9yKCJTQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCFNLmNoYXJzfHwxMjghPT1NLmNoYXJzLmxlbmd0aCYmMjU2IT09TS5jaGFycy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIitNLnR5cGUrIicgaGFzIGluY29ycmVjdCAn'@;
put 'Y2hhcnMnIChtdXN0IGJlIG9mIGxlbiAxMjggb3IgMjU2KSIpO2lmKDEyOD09PU0uY2hhcnMubGVuZ3RoKXtmb3IodmFyIFI9IiIsej0wO3o8MTI4O3orKylSKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHopO00uY2hhcnM9UitNLmNoYXJzfXRoaXMuZGVjb2RlQnVmPWFlLmZyb20oTS5jaGFycywi'@;
put 'dWNzMiIpO3ZhciBLPWFlLmFsbG9jKDY1NTM2LE8uZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCkpO2Zvcih6PTA7ejxNLmNoYXJzLmxlbmd0aDt6KyspS1tNLmNoYXJzLmNoYXJDb2RlQXQoeildPXo7dGhpcy5lbmNvZGVCdWY9S31mdW5jdGlvbiBtKE0sTyl7dGhpcy5lbmNv'@;
put 'ZGVCdWY9Ty5lbmNvZGVCdWZ9ZnVuY3Rpb24gbGUoTSxPKXt0aGlzLmRlY29kZUJ1Zj1PLmRlY29kZUJ1Zn1JZS5fc2Jjcz14LHgucHJvdG90eXBlLmVuY29kZXI9bSx4LnByb3RvdHlwZS5kZWNvZGVyPWxlLG0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKE0pe2Zvcih2YXIgTz1hZS5hbGxv'@;
put 'YyhNLmxlbmd0aCksUj0wO1I8TS5sZW5ndGg7UisrKU9bUl09dGhpcy5lbmNvZGVCdWZbTS5jaGFyQ29kZUF0KFIpXTtyZXR1cm4gT30sbS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxsZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTSl7Zm9yKHZhciBPPXRoaXMuZGVjb2RlQnVmLFI9'@;
put 'YWUuYWxsb2MoMipNLmxlbmd0aCksej0wLEs9MCxJPTA7STxNLmxlbmd0aDtJKyspUltLPTIqSV09T1t6PTIqTVtJXV0sUltLKzFdPU9beisxXTtyZXR1cm4gUi50b1N0cmluZygidWNzMiIpfSxsZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fX0sMjA1MDM6YXQ9PnsidXNlIHN0cmljdCI7'@;
put 'YXQuZXhwb3J0cz17NDM3OiJjcDQzNyIsNzM3OiJjcDczNyIsNzc1OiJjcDc3NSIsODUwOiJjcDg1MCIsODUyOiJjcDg1MiIsODU1OiJjcDg1NSIsODU2OiJjcDg1NiIsODU3OiJjcDg1NyIsODU4OiJjcDg1OCIsODYwOiJjcDg2MCIsODYxOiJjcDg2MSIsODYyOiJjcDg2MiIsODYzOiJjcDg2'@;
put 'MyIsODY0OiJjcDg2NCIsODY1OiJjcDg2NSIsODY2OiJjcDg2NiIsODY5OiJjcDg2OSIsODc0OiJ3aW5kb3dzODc0Iiw5MjI6ImNwOTIyIiwxMDQ2OiJjcDEwNDYiLDExMjQ6ImNwMTEyNCIsMTEyNToiY3AxMTI1IiwxMTI5OiJjcDExMjkiLDExMzM6ImNwMTEzMyIsMTE2MToiY3AxMTYxIiwx'@;
put 'MTYyOiJjcDExNjIiLDExNjM6ImNwMTE2MyIsMTI1MDoid2luZG93czEyNTAiLDEyNTE6IndpbmRvd3MxMjUxIiwxMjUyOiJ3aW5kb3dzMTI1MiIsMTI1Mzoid2luZG93czEyNTMiLDEyNTQ6IndpbmRvd3MxMjU0IiwxMjU1OiJ3aW5kb3dzMTI1NSIsMTI1Njoid2luZG93czEyNTYiLDEyNTc6'@;
put 'IndpbmRvd3MxMjU3IiwxMjU4OiJ3aW5kb3dzMTI1OCIsMjg1OTE6Imlzbzg4NTkxIiwyODU5MjoiaXNvODg1OTIiLDI4NTkzOiJpc284ODU5MyIsMjg1OTQ6Imlzbzg4NTk0IiwyODU5NToiaXNvODg1OTUiLDI4NTk2OiJpc284ODU5NiIsMjg1OTc6Imlzbzg4NTk3IiwyODU5ODoiaXNvODg1'@;
put 'OTgiLDI4NTk5OiJpc284ODU5OSIsMjg2MDA6Imlzbzg4NTkxMCIsMjg2MDE6Imlzbzg4NTkxMSIsMjg2MDM6Imlzbzg4NTkxMyIsMjg2MDQ6Imlzbzg4NTkxNCIsMjg2MDU6Imlzbzg4NTkxNSIsMjg2MDY6Imlzbzg4NTkxNiIsd2luZG93czg3NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIw'@;
put 'YWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3'@;
put 'XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUw'@;
put 'ZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRl'@;
put 'XHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sd2luODc0OiJ3aW5kb3dzODc0IixjcDg3NDoid2luZG93czg3NCIsd2luZG93czEyNTA6e3R5cGU6Il9z'@;
put 'YmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUy'@;
put 'MTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAx'@;
put 'NWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhk'@;
put 'YVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAx'@;
put 'NzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LHdpbjEyNTA6IndpbmRvd3MxMjUwIixjcDEyNTA6IndpbmRvd3MxMjUwIix3aW5kb3dzMTI1MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0'@;
put 'MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZc'@;
put 'eGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0'@;
put 'MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFc'@;
put 'dTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0'@;
put 'NGRcdTA0NGVcdTA0NGYifSx3aW4xMjUxOiJ3aW5kb3dzMTI1MSIsY3AxMjUxOiJ3aW5kb3dzMTI1MSIsd2luZG93czEyNTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5'@;
put 'XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFc'@;
put 'eGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4'@;
put 'ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhm'@;
put 'ZFx4ZmVceGZmIn0sd2luMTI1Mjoid2luZG93czEyNTIiLGNwMTI1Mjoid2luZG93czEyNTIiLHdpbmRvd3MxMjUzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZk'@;
put 'XHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5'@;
put 'YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1'@;
put 'MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LHdpbjEyNTM6'@;
put 'IndpbmRvd3MxMjUzIixjcDEyNTM6IndpbmRvd3MxMjUzIix3aW5kb3dzMTI1NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4'@;
put 'YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlc'@;
put 'eGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSx3'@;
put 'aW4xMjU0OiJ3aW5kb3dzMTI1NCIsY3AxMjU0OiJ3aW5kb3dzMTI1NCIsd2luZG93czEyNTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVc'@;
put 'eGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1MDViYVx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1'@;
put 'MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVk'@;
put 'Ylx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCJ9LHdpbjEyNTU6IndpbmRvd3MxMjU1IixjcDEyNTU6IndpbmRvd3MxMjU1'@;
put 'Iix3aW5kb3dzMTI1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIw'@;
put 'MjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhi'@;
put 'OFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1'@;
put 'XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRc'@;
put 'dTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIn0sd2luMTI1Njoid2luZG93czEyNTYiLGNwMTI1Njoid2luZG93czEyNTYiLHdpbmRvd3MxMjU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAx'@;
put 'ZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZm'@;
put 'ZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDEx'@;
put 'OFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0'@;
put 'XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSJ9LHdpbjEyNTc6IndpbmRv'@;
put 'd3MxMjU3IixjcDEyNTc6IndpbmRvd3MxMjU3Iix3aW5kb3dzMTI1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIy'@;
put 'XHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhk'@;
put 'OVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIw'@;
put 'YWJceGZmIn0sd2luMTI1ODoid2luZG93czEyNTgiLGNwMTI1ODoid2luZG93czEyNTgiLGlzbzg4NTkxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5'@;
put 'NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJk'@;
put 'XHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZc'@;
put 'eGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODU5MToiaXNvODg1OTEiLGlzbzg4NTkyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4'@;
put 'ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDJkOFx1MDE0MVx4YTRcdTAxM2RcdTAxNWFceGE3XHhhOFx1MDE2'@;
put 'MFx1MDE1ZVx1MDE2NFx1MDE3OVx4YWRcdTAxN2RcdTAxN2JceGIwXHUwMTA1XHUwMmRiXHUwMTQyXHhiNFx1MDEzZVx1MDE1Ylx1MDJjN1x4YjhcdTAxNjFcdTAxNWZcdTAxNjVcdTAxN2FcdTAyZGRcdTAxN2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3'@;
put 'XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEw'@;
put 'ZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sY3AyODU5MjoiaXNvODg1OTIiLGlzbzg4NTkzOnt0eXBlOiJfc2JjcyIsY2hh'@;
put 'cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEyNlx1MDJkOFx4YTNceGE0XHVmZmZkXHUw'@;
put 'MTI0XHhhN1x4YThcdTAxMzBcdTAxNWVcdTAxMWVcdTAxMzRceGFkXHVmZmZkXHUwMTdiXHhiMFx1MDEyN1x4YjJceGIzXHhiNFx4YjVcdTAxMjVceGI3XHhiOFx1MDEzMVx1MDE1Zlx1MDExZlx1MDEzNVx4YmRcdWZmZmRcdTAxN2NceGMwXHhjMVx4YzJcdWZmZmRceGM0XHUwMTBhXHUwMTA4'@;
put 'XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHVmZmZkXHhkMVx4ZDJceGQzXHhkNFx1MDEyMFx4ZDZceGQ3XHUwMTFjXHhkOVx4ZGFceGRiXHhkY1x1MDE2Y1x1MDE1Y1x4ZGZceGUwXHhlMVx4ZTJcdWZmZmRceGU0XHUwMTBiXHUwMTA5XHhlN1x4ZThceGU5XHhlYVx4ZWJc'@;
put 'eGVjXHhlZFx4ZWVceGVmXHVmZmZkXHhmMVx4ZjJceGYzXHhmNFx1MDEyMVx4ZjZceGY3XHUwMTFkXHhmOVx4ZmFceGZiXHhmY1x1MDE2ZFx1MDE1ZFx1MDJkOSJ9LGNwMjg1OTM6Imlzbzg4NTkzIixpc284ODU5NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4'@;
put 'ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMzhcdTAxNTZceGE0XHUwMTI4XHUwMTNiXHhhN1x4YThcdTAxNjBcdTAxMTJc'@;
put 'dTAxMjJcdTAxNjZceGFkXHUwMTdkXHhhZlx4YjBcdTAxMDVcdTAyZGJcdTAxNTdceGI0XHUwMTI5XHUwMTNjXHUwMmM3XHhiOFx1MDE2MVx1MDExM1x1MDEyM1x1MDE2N1x1MDE0YVx1MDE3ZVx1MDE0Ylx1MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAx'@;
put 'MThceGNiXHUwMTE2XHhjZFx4Y2VcdTAxMmFcdTAxMTBcdTAxNDVcdTAxNGNcdTAxMzZceGQ0XHhkNVx4ZDZceGQ3XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x1MDE2OFx1MDE2YVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDEx'@;
put 'N1x4ZWRceGVlXHUwMTJiXHUwMTExXHUwMTQ2XHUwMTRkXHUwMTM3XHhmNFx4ZjVceGY2XHhmN1x4ZjhcdTAxNzNceGZhXHhmYlx4ZmNcdTAxNjlcdTAxNmJcdTAyZDkifSxjcDI4NTk0OiJpc284ODU5NCIsaXNvODg1OTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4'@;
put 'ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDAzXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUw'@;
put 'NDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1'@;
put 'MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0'@;
put 'MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ1M1x1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1'@;
put 'MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxjcDI4NTk1OiJpc284ODU5NSIsaXNvODg1OTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZc'@;
put 'eDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHVmZmZkXHVmZmZkXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYwY1x4YWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWJcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWZcdWZmZmRcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFc'@;
put 'dTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2'@;
put 'NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NTk2OiJpc284ODU5NiIsaXNvODg1OTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4'@;
put 'MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUyMDE4XHUyMDE5XHhhM1x1MjBhY1x1MjBhZlx4YTZceGE3'@;
put 'XHhhOFx4YTlcdTAzN2FceGFiXHhhY1x4YWRcdWZmZmRcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHUwMzg1XHUwMzg2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUw'@;
put 'Mzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2Iy'@;
put 'XHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUw'@;
put 'M2NlXHVmZmZkIn0sY3AyODU5NzoiaXNvODg1OTciLGlzbzg4NTk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5'@;
put 'XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHUyMDE3XHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUw'@;
put 'NWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sY3AyODU5ODoiaXNvODg1OTgiLGlzbzg4NTk5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkw'@;
put 'XHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4Yjlc'@;
put 'eGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUx'@;
put 'XHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIn0sY3AyODU5OToiaXNvODg1OTkiLGlzbzg4NTkxMDp7dHlwZToi'@;
put 'X3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMTJcdTAxMjJc'@;
put 'dTAxMmFcdTAxMjhcdTAxMzZceGE3XHUwMTNiXHUwMTEwXHUwMTYwXHUwMTY2XHUwMTdkXHhhZFx1MDE2YVx1MDE0YVx4YjBcdTAxMDVcdTAxMTNcdTAxMjNcdTAxMmJcdTAxMjlcdTAxMzdceGI3XHUwMTNjXHUwMTExXHUwMTYxXHUwMTY3XHUwMTdlXHUyMDE1XHUwMTZiXHUwMTRiXHUwMTAw'@;
put 'XHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx4Y2ZceGQwXHUwMTQ1XHUwMTRjXHhkM1x4ZDRceGQ1XHhkNlx1MDE2OFx4ZDhcdTAxNzJceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhl'@;
put 'NVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExN1x4ZWRceGVlXHhlZlx4ZjBcdTAxNDZcdTAxNGRceGYzXHhmNFx4ZjVceGY2XHUwMTY5XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x4ZmRceGZlXHUwMTM4In0sY3AyODYwMDoiaXNvODg1OTEwIixpc284ODU5MTE6e3R5cGU6Il9z'@;
put 'YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUw'@;
put 'ZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFm'@;
put 'XHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2'@;
put 'XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODYwMToiaXNvODg1OTExIixpc284ODU5MTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc'@;
put 'eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUyMDFkXHhhMlx4YTNceGE0XHUyMDFlXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x1MjAxY1x4'@;
put 'YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhk'@;
put 'NVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYz'@;
put 'XHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MjAxOSJ9LGNwMjg2MDM6Imlzbzg4NTkxMyIsaXNvODg1OTE0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4'@;
put 'Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MWUwMlx1MWUwM1x4YTNcdTAxMGFcdTAxMGJcdTFlMGFceGE3XHUxZTgwXHhhOVx1MWU4Mlx1MWUwYlx1MWVmMlx4YWRceGFlXHUwMTc4'@;
put 'XHUxZTFlXHUxZTFmXHUwMTIwXHUwMTIxXHUxZTQwXHUxZTQxXHhiNlx1MWU1Nlx1MWU4MVx1MWU1N1x1MWU4M1x1MWU2MFx1MWVmM1x1MWU4NFx1MWU4NVx1MWU2MVx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNzRc'@;
put 'eGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZcdTFlNmFceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxNzZceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDE3NVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx1MWU2Ylx4'@;
put 'ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3N1x4ZmYifSxjcDI4NjA0OiJpc284ODU5MTQiLGlzbzg4NTkxNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5'@;
put 'M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHUwMTYwXHhhN1x1MDE2MVx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTdkXHhiNVx4YjZceGI3XHUwMTdlXHhiOVx4'@;
put 'YmFceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFc'@;
put 'eGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NjA1OiJpc284ODU5MTUiLGlzbzg4NTkxNjp7dHlwZToiX3NiY3Mi'@;
put 'LGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMDVcdTAxNDFcdTIwYWNc'@;
put 'dTIwMWVcdTAxNjBceGE3XHUwMTYxXHhhOVx1MDIxOFx4YWJcdTAxNzlceGFkXHUwMTdhXHUwMTdiXHhiMFx4YjFcdTAxMGNcdTAxNDJcdTAxN2RcdTIwMWRceGI2XHhiN1x1MDE3ZVx1MDEwZFx1MDIxOVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhcdTAxN2NceGMwXHhjMVx4YzJcdTAxMDJceGM0'@;
put 'XHUwMTA2XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExMFx1MDE0M1x4ZDJceGQzXHhkNFx1MDE1MFx4ZDZcdTAxNWFcdTAxNzBceGQ5XHhkYVx4ZGJceGRjXHUwMTE4XHUwMjFhXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRcdTAxMDdceGU2XHhlN1x4ZThc'@;
put 'eGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTExXHUwMTQ0XHhmMlx4ZjNceGY0XHUwMTUxXHhmNlx1MDE1Ylx1MDE3MVx4ZjlceGZhXHhmYlx4ZmNcdTAxMTlcdTAyMWJceGZmIn0sY3AyODYwNjoiaXNvODg1OTE2IixjcDQzNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4'@;
put 'ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBc'@;
put 'eGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1'@;
put 'NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUw'@;
put 'M2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTQz'@;
put 'NzoiY3A0MzciLGNzaWJtNDM3OiJjcDQzNyIsY3A3Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUw'@;
put 'M2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2'@;
put 'XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUy'@;
put 'NTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2Nh'@;
put 'XHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNzM3OiJjcDcz'@;
put 'NyIsY3NpYm03Mzc6ImNwNzM3IixjcDc3NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAxMDZceGZjXHhlOVx1MDEwMVx4ZTRcdTAxMjNceGU1XHUwMTA3XHUwMTQyXHUwMTEzXHUwMTU2XHUwMTU3XHUwMTJiXHUwMTc5XHhjNFx4YzVceGM5XHhlNlx4YzZcdTAxNGRceGY2XHUwMTIyXHhhMlx1'@;
put 'MDE1YVx1MDE1Ylx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x4YTRcdTAxMDBcdTAxMmFceGYzXHUwMTdiXHUwMTdjXHUwMTdhXHUyMDFkXHhhNlx4YTlceGFlXHhhY1x4YmRceGJjXHUwMTQxXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAxMDRcdTAxMGNcdTAxMThc'@;
put 'dTAxMTZcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxMmVcdTAxNjBcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxNzJcdTAxNmFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAxN2RcdTAxMDVcdTAxMGRcdTAxMTlcdTAx'@;
put 'MTdcdTAxMmZcdTAxNjFcdTAxNzNcdTAxNmJcdTAxN2VcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBceGQzXHhkZlx1MDE0Y1x1MDE0M1x4ZjVceGQ1XHhiNVx1MDE0NFx1MDEzNlx1MDEzN1x1MDEzYlx1MDEzY1x1MDE0Nlx1MDExMlx1MDE0NVx1MjAxOVx4YWRc'@;
put 'eGIxXHUyMDFjXHhiZVx4YjZceGE3XHhmN1x1MjAxZVx4YjBcdTIyMTlceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTc3NToiY3A3NzUiLGNzaWJtNzc1OiJjcDc3NSIsY3A4NTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVh'@;
put 'XHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFc'@;
put 'dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4'@;
put 'YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZc'@;
put 'eGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODUwOiJjcDg1MCIsY3NpYm04NTA6ImNwODUwIixjcDg1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUx'@;
put 'XHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3'@;
put 'YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1'@;
put 'NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUw'@;
put 'MTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAifSxpYm04NTI6ImNwODUyIixjc2libTg1MjoiY3A4NTIi'@;
put 'LGNwODU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ1Mlx1MDQwMlx1MDQ1M1x1MDQwM1x1MDQ1MVx1MDQwMVx1MDQ1NFx1MDQwNFx1MDQ1NVx1MDQwNVx1MDQ1Nlx1MDQwNlx1MDQ1N1x1MDQwN1x1MDQ1OFx1MDQwOFx1MDQ1OVx1MDQwOVx1MDQ1YVx1MDQwYVx1MDQ1Ylx1MDQwYlx1MDQ1'@;
put 'Y1x1MDQwY1x1MDQ1ZVx1MDQwZVx1MDQ1Zlx1MDQwZlx1MDQ0ZVx1MDQyZVx1MDQ0YVx1MDQyYVx1MDQzMFx1MDQxMFx1MDQzMVx1MDQxMVx1MDQ0Nlx1MDQyNlx1MDQzNFx1MDQxNFx1MDQzNVx1MDQxNVx1MDQ0NFx1MDQyNFx1MDQzM1x1MDQxM1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkz'@;
put 'XHUyNTAyXHUyNTI0XHUwNDQ1XHUwNDI1XHUwNDM4XHUwNDE4XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwNDM5XHUwNDE5XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwNDNhXHUwNDFhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUy'@;
put 'NTZjXHhhNFx1MDQzYlx1MDQxYlx1MDQzY1x1MDQxY1x1MDQzZFx1MDQxZFx1MDQzZVx1MDQxZVx1MDQzZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDQxZlx1MDQ0Zlx1MjU4MFx1MDQyZlx1MDQ0MFx1MDQyMFx1MDQ0MVx1MDQyMVx1MDQ0Mlx1MDQyMlx1MDQ0M1x1MDQyM1x1MDQzNlx1'@;
put 'MDQxNlx1MDQzMlx1MDQxMlx1MDQ0Y1x1MDQyY1x1MjExNlx4YWRcdTA0NGJcdTA0MmJcdTA0MzdcdTA0MTdcdTA0NDhcdTA0MjhcdTA0NGRcdTA0MmRcdTA0NDlcdTA0MjlcdTA0NDdcdTA0MjdceGE3XHUyNWEwXHhhMCJ9LGlibTg1NToiY3A4NTUiLGNzaWJtODU1OiJjcDg1NSIsY3A4NTY6'@;
put 'e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3'@;
put 'XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHhhM1x1ZmZmZFx4ZDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFlXHhhY1x4YmRceGJjXHVmZmZkXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdWZmZmRcdWZmZmRcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx1ZmZmZFx1MjU4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFmXHhi'@;
put 'NFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU2OiJjcDg1NiIsY3NpYm04NTY6ImNwODU2IixjcDg1Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4'@;
put 'ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1MDEzMFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhh'@;
put 'Ylx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1'@;
put 'MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNiXHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0XHhhZFx4YjFc'@;
put 'dWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTc6ImNwODU3Iixjc2libTg1NzoiY3A4NTciLGNwODU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4'@;
put 'XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUy'@;
put 'NTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4'@;
put 'ZDBceGNhXHhjYlx4YzhcdTIwYWNceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4Zjdc'@;
put 'eGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1ODoiY3A4NTgiLGNzaWJtODU4OiJjcDg1OCIsY3A4NjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTNceGUwXHhjMVx4ZTdceGVhXHhjYVx4ZThceGNkXHhkNFx4ZWNceGMzXHhjMlx4'@;
put 'YzlceGMwXHhjOFx4ZjRceGY1XHhmMlx4ZGFceGY5XHhjY1x4ZDVceGRjXHhhMlx4YTNceGQ5XHUyMGE3XHhkM1x4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4ZDJceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFc'@;
put 'dTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1'@;
put 'NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNj'@;
put 'Nlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MDoiY3A4NjAiLGNzaWJtODYwOiJjcDg2MCIsY3A4NjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4'@;
put 'ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUy'@;
put 'MzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVl'@;
put 'XHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5'@;
put 'M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxp'@;
put 'Ym04NjE6ImNwODYxIixjc2libTg2MToiY3A4NjEiLGNwODYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVl'@;
put 'MVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1'@;
put 'MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2'@;
put 'Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5'@;
put 'XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYyOiJjcDg2MiIsY3NpYm04NjI6ImNwODYyIixjcDg2Mzp7dHlwZToiX3Ni'@;
put 'Y3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhjMlx4ZTBceGI2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUyMDE3XHhjMFx4YTdceGM5XHhjOFx4Y2FceGY0XHhjYlx4Y2ZceGZiXHhmOVx4YTRceGQ0XHhkY1x4YTJceGEzXHhkOVx4ZGJcdTAxOTJceGE2XHhiNFx4ZjNceGZhXHhhOFx4'@;
put 'YjhceGIzXHhhZlx4Y2VcdTIzMTBceGFjXHhiZFx4YmNceGJlXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNc'@;
put 'dTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1'@;
put 'ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2Zc'@;
put 'eGIyXHUyNWEwXHhhMCJ9LGlibTg2MzoiY3A4NjMiLGNzaWJtODYzOiJjcDg2MyIsY3A4NjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5'@;
put 'XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkXHUwNjZhJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YjBceGI3XHUyMjE5XHUyMjFhXHUyNTkyXHUyNTAwXHUy'@;
put 'NTAyXHUyNTNjXHUyNTI0XHUyNTJjXHUyNTFjXHUyNTM0XHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHUwM2IyXHUyMjFlXHUwM2M2XHhiMVx4YmRceGJjXHUyMjQ4XHhhYlx4YmJcdWZlZjdcdWZlZjhcdWZmZmRcdWZmZmRcdWZlZmJcdWZlZmNcdWZmZmRceGEwXHhhZFx1ZmU4Mlx4YTNceGE0'@;
put 'XHVmZTg0XHVmZmZkXHVmZmZkXHVmZThlXHVmZThmXHVmZTk1XHVmZTk5XHUwNjBjXHVmZTlkXHVmZWExXHVmZWE1XHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVmZWQxXHUwNjFiXHVmZWIxXHVmZWI1XHVmZWI5XHUwNjFmXHhh'@;
put 'Mlx1ZmU4MFx1ZmU4MVx1ZmU4M1x1ZmU4NVx1ZmVjYVx1ZmU4Ylx1ZmU4ZFx1ZmU5MVx1ZmU5M1x1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1ZmVhN1x1ZmVhOVx1ZmVhYlx1ZmVhZFx1ZmVhZlx1ZmViM1x1ZmViN1x1ZmViYlx1ZmViZlx1ZmVjMVx1ZmVjNVx1ZmVjYlx1ZmVjZlx4YTZceGFj'@;
put 'XHhmN1x4ZDdcdWZlYzlcdTA2NDBcdWZlZDNcdWZlZDdcdWZlZGJcdWZlZGZcdWZlZTNcdWZlZTdcdWZlZWJcdWZlZWRcdWZlZWZcdWZlZjNcdWZlYmRcdWZlY2NcdWZlY2VcdWZlY2RcdWZlZTFcdWZlN2RcdTA2NTFcdWZlZTVcdWZlZTlcdWZlZWNcdWZlZjBcdWZlZjJcdWZlZDBcdWZlZDVc'@;
put 'dWZlZjVcdWZlZjZcdWZlZGRcdWZlZDlcdWZlZjFcdTI1YTBcdWZmZmQifSxpYm04NjQ6ImNwODY0Iixjc2libTg2NDoiY3A4NjQiLGNwODY1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4'@;
put 'YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy'@;
put 'NFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1'@;
put 'MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUy'@;
put 'MjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODY1OiJjcDg2NSIsY3NpYm04NjU6ImNwODY1IixjcDg2Njp7dHlwZToiX3NiY3MiLGNoYXJz'@;
put 'OiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFc'@;
put 'dTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1'@;
put 'NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRc'@;
put 'dTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0'@;
put 'NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtODY2OiJjcDg2NiIsY3NpYm04NjY6ImNwODY2IixjcDg2OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzODZcdWZmZmRceGI3XHhhY1x4YTZcdTIwMThcdTIwMTlcdTAzODhcdTIwMTVcdTAzODlcdTAzOGFcdTAzYWFcdTAzOGNcdWZmZmRcdWZmZmRcdTAzOGVcdTAzYWJceGE5XHUwMzhmXHhiMlx4YjNcdTAzYWNceGEzXHUwM2Fk'@;
put 'XHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUwM2NjXHUwM2NkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHhiZFx1MDM5OFx1MDM5OVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUyNTYzXHUy'@;
put 'NTUxXHUyNTU3XHUyNTVkXHUwMzllXHUwMzlmXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwM2EwXHUwM2ExXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5'@;
put 'XHUwM2IxXHUwM2IyXHUwM2IzXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwM2I0XHUwM2I1XHUyNTgwXHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwMzg0XHhhZFx4YjFc'@;
put 'dTAzYzVcdTAzYzZcdTAzYzdceGE3XHUwM2M4XHUwMzg1XHhiMFx4YThcdTAzYzlcdTAzY2JcdTAzYjBcdTAzY2VcdTI1YTBceGEwIn0saWJtODY5OiJjcDg2OSIsY3NpYm04Njk6ImNwODY5IixjcDkyMjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2'@;
put 'XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx1MjAz'@;
put 'ZVx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTYwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4'@;
put 'ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3ZFx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTYxXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3ZVx4ZmYi'@;
put 'fSxpYm05MjI6ImNwOTIyIixjc2libTkyMjoiY3A5MjIiLGNwMTA0Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZlODhceGQ3XHhmN1x1ZjhmNlx1ZjhmNVx1ZjhmNFx1ZjhmN1x1ZmU3MVx4ODhcdTI1YTBcdTI1MDJcdTI1MDBcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdWZlNzlcdWZlN2Jc'@;
put 'dWZlN2RcdWZlN2ZcdWZlNzdcdWZlOGFcdWZlZjBcdWZlZjNcdWZlZjJcdWZlY2VcdWZlY2ZcdWZlZDBcdWZlZjZcdWZlZjhcdWZlZmFcdWZlZmNceGEwXHVmOGZhXHVmOGY5XHVmOGY4XHhhNFx1ZjhmYlx1ZmU4Ylx1ZmU5MVx1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1MDYwY1x4YWRcdWZl'@;
put 'YTdcdWZlYjNcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlYjdcdTA2MWJcdWZlYmJcdWZlYmZcdWZlY2FcdTA2MWZcdWZlY2JcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2Mjlc'@;
put 'dTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdWZlYzdcdTA2MzlcdTA2M2FcdWZlY2NcdWZlODJcdWZlODRcdWZlOGVcdWZlZDNcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2'@;
put 'NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZlZDdcdWZlZGJcdWZlZGZcdWY4ZmNcdWZlZjVcdWZlZjdcdWZlZjlcdWZlZmJcdWZlZTNcdWZlZTdcdWZlZWNcdWZlZTlcdWZmZmQifSxpYm0x'@;
put 'MDQ2OiJjcDEwNDYiLGNzaWJtMTA0NjoiY3AxMDQ2IixjcDExMjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlc'@;
put 'eDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDkwXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUwNDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1'@;
put 'MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQz'@;
put 'M1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1'@;
put 'MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ5MVx1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxpYm0xMTI0OiJjcDExMjQiLGNzaWJtMTEyNDoiY3AxMTI0IixjcDExMjU6e3R5cGU6Il9zYmNzIixjaGFyczoi'@;
put 'XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUw'@;
put 'NDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYy'@;
put 'XHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUy'@;
put 'NTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRk'@;
put 'XHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDkwXHUwNDkxXHUwNDA0XHUwNDU0XHUwNDA2XHUwNDU2XHUwNDA3XHUwNDU3XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtMTEyNToiY3AxMTI1Iixjc2libTExMjU6ImNwMTEyNSIsY3AxMTI5Ont0eXBlOiJfc2JjcyIsY2hh'@;
put 'cnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdc'@;
put 'dTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNl'@;
put 'XHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhm'@;
put 'M1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExMjk6ImNwMTEyOSIsY3NpYm0xMTI5OiJjcDExMjkiLGNwMTEzMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4'@;
put 'YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBlODhcdTBlYWFcdTBlOGFcdTBlOGRcdTBlOTRcdTBlOTVcdTBlOTZcdTBlOTdcdTBl'@;
put 'OTlcdTBlOWFcdTBlOWJcdTBlOWNcdTBlOWRcdTBlOWVcdTBlOWZcdTBlYTFcdTBlYTJcdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWJcdTBlYWRcdTBlYWVcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYWZcdTBlYjBcdTBlYjJcdTBlYjNcdTBlYjRcdTBlYjVcdTBlYjZcdTBlYjdcdTBlYjhcdTBlYjlc'@;
put 'dTBlYmNcdTBlYjFcdTBlYmJcdTBlYmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYzBcdTBlYzFcdTBlYzJcdTBlYzNcdTBlYzRcdTBlYzhcdTBlYzlcdTBlY2FcdTBlY2JcdTBlY2NcdTBlY2RcdTBlYzZcdWZmZmRcdTBlZGNcdTBlZGRcdTIwYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlZDBcdTBlZDFcdTBlZDJcdTBlZDNcdTBlZDRcdTBlZDVcdTBlZDZcdTBlZDdcdTBlZDhcdTBlZDlcdWZmZmRcdWZmZmRceGEyXHhhY1x4YTZcdWZmZmQifSxpYm0x'@;
put 'MTMzOiJjcDExMzMiLGNzaWJtMTEzMzoiY3AxMTMzIixjcDExNjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTQ4XHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBj'@;
put 'XHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUw'@;
put 'ZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHUwZTQ5XHUwZTRhXHUwZTRiXHUyMGFjXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQz'@;
put 'XHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHhhMlx4YWNceGE2XHhhMCJ9LGli'@;
put 'bTExNjE6ImNwMTE2MSIsY3NpYm0xMTYxOiJjcDExNjEiLGNwMTE2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNceDgxXHg4Mlx4ODNceDg0XHUyMDI2XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJc'@;
put 'dTIwMTNcdTIwMTRceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBl'@;
put 'MTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZc'@;
put 'dTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBl'@;
put 'NGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpYm0xMTYyOiJjcDExNjIiLGNzaWJtMTE2MjoiY3AxMTYyIixjcDEx'@;
put 'NjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJc'@;
put 'eGEzXHUyMGFjXHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5'@;
put 'XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVc'@;
put 'eGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTYzOiJjcDExNjMiLGNzaWJtMTE2MzoiY3AxMTYzIixtYWNjcm9hdGlhbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5'@;
put 'XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVcdTAxNjBcdTIxMjJc'@;
put 'eGI0XHhhOFx1MjI2MFx1MDE3ZFx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUyMjA2XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDE2MVx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTdlXHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MDEwNlx4YWJcdTAxMGNcdTIwMjZceGEw'@;
put 'XHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUwMTEwXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1ZmZmZFx4YTlcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHhjNlx4YmJcdTIwMTNceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx1MDEwN1x4YzFcdTAxMGRceGM4XHhj'@;
put 'ZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHUwMTExXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAzYzBceGNiXHUwMmRhXHhiOFx4Y2FceGU2XHUwMmM3In0sbWFjY3lyaWxsaWM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0'@;
put 'XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUy'@;
put 'MDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBh'@;
put 'XHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZc'@;
put 'dTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0'@;
put 'NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sbWFjZ3JlZWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIx'@;
put 'MjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhh'@;
put 'NVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIw'@;
put 'MTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUw'@;
put 'M2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIn0sbWFjaWNlbGFuZDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhk'@;
put 'MVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4'@;
put 'XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUw'@;
put 'MTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZm'@;
put 'ZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1'@;
put 'XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRc'@;
put 'dTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIw'@;
put 'MWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUw'@;
put 'MTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbmlhOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhl'@;
put 'Ylx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx1MDEwMlx1MDE1ZVx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1'@;
put 'MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTAzXHUwMTVmXHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUy'@;
put 'MDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHUwMTYyXHUwMTYzXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1'@;
put 'MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdGhhaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGFiXHhiYlx1MjAyNlx1Zjg4Y1x1Zjg4Zlx1Zjg5Mlx1Zjg5NVx1Zjg5OFx1Zjg4Ylx1Zjg4ZVx1Zjg5MVx1Zjg5NFx1Zjg5N1x1MjAxY1x1MjAx'@;
put 'ZFx1Zjg5OVx1ZmZmZFx1MjAyMlx1Zjg4NFx1Zjg4OVx1Zjg4NVx1Zjg4Nlx1Zjg4N1x1Zjg4OFx1Zjg4YVx1Zjg4ZFx1Zjg5MFx1Zjg5M1x1Zjg5Nlx1MjAxOFx1MjAxOVx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBl'@;
put 'MGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVc'@;
put 'dTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZlZmZcdTIwMGJcdTIwMTNcdTIwMTRcdTBlM2ZcdTBlNDBcdTBl'@;
put 'NDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTIxMjJcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlceGFlXHhhOVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCJ9LG1hY3R1cmtpc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFc'@;
put 'eGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4'@;
put 'XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVc'@;
put 'dTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxt'@;
put 'YWN1a3JhaW5lOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1'@;
put 'MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBcdTA0OTBceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVc'@;
put 'dTA0NTZceGI1XHUwNDkxXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1'@;
put 'MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2Nc'@;
put 'dTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sa29pOHI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEw'@;
put 'XHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBc'@;
put 'dTI1NTFcdTI1NTJcdTA0NTFcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTI1NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1'@;
put 'NmFcdTI1NmJcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUw'@;
put 'NDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIx'@;
put 'XHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUy'@;
put 'NTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0'@;
put 'NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUw'@;
put 'NDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3'@;
put 'XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUw'@;
put 'NDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHJ1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUyY1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5'@;
put 'MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkx'@;
put 'XHUwNDVlXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUwNDBlXHhhOVx1MDQ0ZVx1MDQzMFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQz'@;
put 'OFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1'@;
put 'MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQyY1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtv'@;
put 'aTh0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Ylx1MDQ5M1x1MjAxYVx1MDQ5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDRiM1x1MjAzOVx1MDRiMlx1MDRiN1x1MDRiNlx1ZmZmZFx1MDQ5YVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1'@;
put 'MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDRlZlx1MDRlZVx1MDQ1MVx4YTRcdTA0ZTNceGE2XHhhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWJceGFjXHhhZFx4YWVcdWZmZmRceGIwXHhiMVx4YjJcdTA0MDFcdWZmZmRcdTA0ZTJc'@;
put 'eGI2XHhiN1x1ZmZmZFx1MjExNlx1ZmZmZFx4YmJcdWZmZmRcdWZmZmRcdWZmZmRceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQw'@;
put 'XHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUw'@;
put 'NDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sYXJtc2NpaTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4'@;
put 'Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHUwNTg3XHUwNTg5KShceGJiXHhhYlx1MjAxNC5cdTA1NWQsLVx1MDU4YVx1MjAyNlx1MDU1'@;
put 'Y1x1MDU1Ylx1MDU1ZVx1MDUzMVx1MDU2MVx1MDUzMlx1MDU2Mlx1MDUzM1x1MDU2M1x1MDUzNFx1MDU2NFx1MDUzNVx1MDU2NVx1MDUzNlx1MDU2Nlx1MDUzN1x1MDU2N1x1MDUzOFx1MDU2OFx1MDUzOVx1MDU2OVx1MDUzYVx1MDU2YVx1MDUzYlx1MDU2Ylx1MDUzY1x1MDU2Y1x1MDUzZFx1'@;
put 'MDU2ZFx1MDUzZVx1MDU2ZVx1MDUzZlx1MDU2Zlx1MDU0MFx1MDU3MFx1MDU0MVx1MDU3MVx1MDU0Mlx1MDU3Mlx1MDU0M1x1MDU3M1x1MDU0NFx1MDU3NFx1MDU0NVx1MDU3NVx1MDU0Nlx1MDU3Nlx1MDU0N1x1MDU3N1x1MDU0OFx1MDU3OFx1MDU0OVx1MDU3OVx1MDU0YVx1MDU3YVx1MDU0'@;
put 'Ylx1MDU3Ylx1MDU0Y1x1MDU3Y1x1MDU0ZFx1MDU3ZFx1MDU0ZVx1MDU3ZVx1MDU0Zlx1MDU3Zlx1MDU1MFx1MDU4MFx1MDU1MVx1MDU4MVx1MDU1Mlx1MDU4Mlx1MDU1M1x1MDU4M1x1MDU1NFx1MDU4NFx1MDU1NVx1MDU4NVx1MDU1Nlx1MDU4Nlx1MDU1YVx1ZmZmZCJ9LHJrMTA0ODp7dHlw'@;
put 'ZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0OWFcdTA0YmFcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZm'@;
put 'ZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0OWJcdTA0YmJcdTA0NWZceGEwXHUwNGIwXHUwNGIxXHUwNGQ4XHhhNFx1MDRlOFx4YTZceGE3XHUwNDAxXHhhOVx1MDQ5Mlx4YWJceGFjXHhhZFx4YWVcdTA0YWVceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDRlOVx4YjVceGI2XHhiN1x1MDQ1'@;
put 'MVx1MjExNlx1MDQ5M1x4YmJcdTA0ZDlcdTA0YTJcdTA0YTNcdTA0YWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0'@;
put 'MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2Zc'@;
put 'dTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx0Y3ZuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHhkYVx1MWVlNFx4MDNcdTFlZWFcdTFlZWNcdTFlZWVceDA3XGJc'@;
put 'dFxuXHZcZlxyXHgwZVx4MGZceDEwXHUxZWU4XHUxZWYwXHUxZWYyXHUxZWY2XHUxZWY4XHhkZFx1MWVmNFx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2Rl'@;
put 'ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGMwXHUxZWEyXHhjM1x4YzFcdTFlYTBcdTFlYjZcdTFlYWNceGM4XHUxZWJhXHUxZWJjXHhjOVx1MWViOFx1MWVjNlx4Y2NcdTFlYzhcdTAxMjhceGNkXHUxZWNhXHhkMlx1MWVjZVx4ZDVceGQzXHUxZWNjXHUxZWQ4XHUxZWRjXHUxZWRl'@;
put 'XHUxZWUwXHUxZWRhXHUxZWUyXHhkOVx1MWVlNlx1MDE2OFx4YTBcdTAxMDJceGMyXHhjYVx4ZDRcdTAxYTBcdTAxYWZcdTAxMTBcdTAxMDNceGUyXHhlYVx4ZjRcdTAxYTFcdTAxYjBcdTAxMTFcdTFlYjBcdTAzMDBcdTAzMDlcdTAzMDNcdTAzMDFcdTAzMjNceGUwXHUxZWEzXHhlM1x4ZTFc'@;
put 'dTFlYTFcdTFlYjJcdTFlYjFcdTFlYjNcdTFlYjVcdTFlYWZcdTFlYjRcdTFlYWVcdTFlYTZcdTFlYThcdTFlYWFcdTFlYTRcdTFlYzBcdTFlYjdcdTFlYTdcdTFlYTlcdTFlYWJcdTFlYTVcdTFlYWRceGU4XHUxZWMyXHUxZWJiXHUxZWJkXHhlOVx1MWViOVx1MWVjMVx1MWVjM1x1MWVjNVx1'@;
put 'MWViZlx1MWVjN1x4ZWNcdTFlYzlcdTFlYzRcdTFlYmVcdTFlZDJcdTAxMjlceGVkXHUxZWNiXHhmMlx1MWVkNFx1MWVjZlx4ZjVceGYzXHUxZWNkXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWQxXHUxZWQ5XHUxZWRkXHUxZWRmXHUxZWUxXHUxZWRiXHUxZWUzXHhmOVx1MWVkNlx1MWVlN1x1MDE2'@;
put 'OVx4ZmFcdTFlZTVcdTFlZWJcdTFlZWRcdTFlZWZcdTFlZTlcdTFlZjFcdTFlZjNcdTFlZjdcdTFlZjlceGZkXHUxZWY1XHUxZWQwIn0sZ2VvcmdpYW5hY2FkZW15Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2'@;
put 'XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhh'@;
put 'OVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEw'@;
put 'ZGNcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZWZcdTEwZjBcdTEwZjFcdTEwZjJcdTEwZjNcdTEwZjRcdTEwZjVcdTEwZjZceGU3XHhl'@;
put 'OFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sZ2VvcmdpYW5wczp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAy'@;
put 'MFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4'@;
put 'YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUxMGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGYxXHUxMGQ3XHUxMGQ4XHUx'@;
put 'MGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGYyXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGYzXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVhXHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGY0XHUxMGVmXHUxMGYwXHUxMGY1'@;
put 'XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxwdDE1NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0OTZcdTA0OTJcdTA0ZWVcdTA0OTNcdTIwMWVc'@;
put 'dTIwMjZcdTA0YjZcdTA0YWVcdTA0YjJcdTA0YWZcdTA0YTBcdTA0ZTJcdTA0YTJcdTA0OWFcdTA0YmFcdTA0YjhcdTA0OTdcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA0YjNcdTA0YjdcdTA0YTFcdTA0ZTNcdTA0YTNcdTA0OWJcdTA0YmJcdTA0YjlceGEw'@;
put 'XHUwNDBlXHUwNDVlXHUwNDA4XHUwNGU4XHUwNDk4XHUwNGIwXHhhN1x1MDQwMVx4YTlcdTA0ZDhceGFiXHhhY1x1MDRlZlx4YWVcdTA0OWNceGIwXHUwNGIxXHUwNDA2XHUwNDU2XHUwNDk5XHUwNGU5XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0ZDlceGJiXHUwNDU4XHUwNGFhXHUwNGFiXHUw'@;
put 'NDlkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJh'@;
put 'XHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUw'@;
put 'NDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdmlzY2lpOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx1MWViMlx4MDNceDA0XHUxZWI0XHUxZWFhXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x1MWVm'@;
put 'Nlx4MTVceDE2XHgxN1x4MThcdTFlZjhceDFhXHgxYlx4MWNceDFkXHUxZWY0XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUxZWEwXHUxZWFlXHUx'@;
put 'ZWIwXHUxZWI2XHUxZWE0XHUxZWE2XHUxZWE4XHUxZWFjXHUxZWJjXHUxZWI4XHUxZWJlXHUxZWMwXHUxZWMyXHUxZWM0XHUxZWM2XHUxZWQwXHUxZWQyXHUxZWQ0XHUxZWQ2XHUxZWQ4XHUxZWUyXHUxZWRhXHUxZWRjXHUxZWRlXHUxZWNhXHUxZWNlXHUxZWNjXHUxZWM4XHUxZWU2XHUwMTY4'@;
put 'XHUxZWU0XHUxZWYyXHhkNVx1MWVhZlx1MWViMVx1MWViN1x1MWVhNVx1MWVhN1x1MWVhOVx1MWVhZFx1MWViZFx1MWViOVx1MWViZlx1MWVjMVx1MWVjM1x1MWVjNVx1MWVjN1x1MWVkMVx1MWVkM1x1MWVkNVx1MWVkN1x1MWVlMFx1MDFhMFx1MWVkOVx1MWVkZFx1MWVkZlx1MWVjYlx1MWVm'@;
put 'MFx1MWVlOFx1MWVlYVx1MWVlY1x1MDFhMVx1MWVkYlx1MDFhZlx4YzBceGMxXHhjMlx4YzNcdTFlYTJcdTAxMDJcdTFlYjNcdTFlYjVceGM4XHhjOVx4Y2FcdTFlYmFceGNjXHhjZFx1MDEyOFx1MWVmM1x1MDExMFx1MWVlOVx4ZDJceGQzXHhkNFx1MWVhMVx1MWVmN1x1MWVlYlx1MWVlZFx4'@;
put 'ZDlceGRhXHUxZWY5XHUxZWY1XHhkZFx1MWVlMVx1MDFiMFx4ZTBceGUxXHhlMlx4ZTNcdTFlYTNcdTAxMDNcdTFlZWZcdTFlYWJceGU4XHhlOVx4ZWFcdTFlYmJceGVjXHhlZFx1MDEyOVx1MWVjOVx1MDExMVx1MWVmMVx4ZjJceGYzXHhmNFx4ZjVcdTFlY2ZcdTFlY2RcdTFlZTVceGY5XHhm'@;
put 'YVx1MDE2OVx1MWVlN1x4ZmRcdTFlZTNcdTFlZWUifSxpc282NDZjbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNc'@;
put 'eDFkXHgxZVx4MWYgIVwiI1x4YTUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saXNvNjQ2anA6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx'@;
put 'NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1x4YTVdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saHByb21hbjg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4'@;
put 'XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhjMFx4YzJceGM4XHhjYVx4Y2JceGNlXHhjZlx4YjRcdTAyY2JcdTAyYzZceGE4XHUwMmRjXHhkOVx4ZGJcdTIwYTRc'@;
put 'eGFmXHhkZFx4ZmRceGIwXHhjN1x4ZTdceGQxXHhmMVx4YTFceGJmXHhhNFx4YTNceGE1XHhhN1x1MDE5Mlx4YTJceGUyXHhlYVx4ZjRceGZiXHhlMVx4ZTlceGYzXHhmYVx4ZTBceGU4XHhmMlx4ZjlceGU0XHhlYlx4ZjZceGZjXHhjNVx4ZWVceGQ4XHhjNlx4ZTVceGVkXHhmOFx4ZTZceGM0'@;
put 'XHhlY1x4ZDZceGRjXHhjOVx4ZWZceGRmXHhkNFx4YzFceGMzXHhlM1x4ZDBceGYwXHhjZFx4Y2NceGQzXHhkMlx4ZDVceGY1XHUwMTYwXHUwMTYxXHhkYVx1MDE3OFx4ZmZceGRlXHhmZVx4YjdceGI1XHhiNlx4YmVcdTIwMTRceGJjXHhiZFx4YWFceGJhXHhhYlx1MjVhMFx4YmJceGIxXHVm'@;
put 'ZmZkIn0sbWFjaW50b3NoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZj'@;
put 'XHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhh'@;
put 'Y1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4'@;
put 'YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LGFzY2lpOnt0eXBlOiJf'@;
put 'c2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LHRpczYyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThc'@;
put 'dTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBl'@;
put 'MzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZc'@;
put 'dTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifX19LDY0NzczOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ezEwMDI5OiJtYWNjZW50ZXVybyIsbWFjY2VudGV1'@;
put 'cm86e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZc'@;
put 'eGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEyZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1'@;
put 'MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAxNTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVj'@;
put 'YVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRcdTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcw'@;
put 'XHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzcifSw4MDg6ImNwODA4IixpYm04MDg6ImNwODA4IixjcDgwODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0'@;
put 'MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJc'@;
put 'dTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1'@;
put 'NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThc'@;
put 'dTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0'@;
put 'NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx1MjBhY1x1MjVhMFx4YTAifSxtaWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUw'@;
put 'NDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4'@;
put 'XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUy'@;
put 'NTAwXHUyNTNjXHUyNTYzXHUyNTUxXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTEwXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyMTE2XHhhN1x1MjU1N1x1MjU1ZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1'@;
put 'MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJc'@;
put 'dTI1YTBceGEwIn0sY3A3MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceGU5XHhlMlx4ODRceGUwXHg4Nlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4OGRceDhlXHg4Zlx4OTBcdTA2NTFcdTA2NTJceGY0XHhhNFx1MDY0MFx4ZmJceGY5XHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0'@;
put 'XHhhM1x1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUy'@;
put 'NTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5'@;
put 'XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQxXHhiNVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0'@;
put 'YVx1MjI2MVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxhc2NpaThiaXQ6ImFzY2lpIix1c2FzY2lpOiJhc2NpaSIsYW5zaXgzNDoiYXNjaWkiLGFuc2l4MzQxOTY4OiJhc2NpaSIsYW5z'@;
put 'aXgzNDE5ODY6ImFzY2lpIixjc2FzY2lpOiJhc2NpaSIsY3AzNjc6ImFzY2lpIixpYm0zNjc6ImFzY2lpIixpc29pcjY6ImFzY2lpIixpc282NDZ1czoiYXNjaWkiLGlzbzY0NmlydjoiYXNjaWkiLHVzOiJhc2NpaSIsbGF0aW4xOiJpc284ODU5MSIsbGF0aW4yOiJpc284ODU5MiIsbGF0aW4z'@;
put 'OiJpc284ODU5MyIsbGF0aW40OiJpc284ODU5NCIsbGF0aW41OiJpc284ODU5OSIsbGF0aW42OiJpc284ODU5MTAiLGxhdGluNzoiaXNvODg1OTEzIixsYXRpbjg6Imlzbzg4NTkxNCIsbGF0aW45OiJpc284ODU5MTUiLGxhdGluMTA6Imlzbzg4NTkxNiIsY3Npc29sYXRpbjE6Imlzbzg4NTkx'@;
put 'Iixjc2lzb2xhdGluMjoiaXNvODg1OTIiLGNzaXNvbGF0aW4zOiJpc284ODU5MyIsY3Npc29sYXRpbjQ6Imlzbzg4NTk0Iixjc2lzb2xhdGluY3lyaWxsaWM6Imlzbzg4NTk1Iixjc2lzb2xhdGluYXJhYmljOiJpc284ODU5NiIsY3Npc29sYXRpbmdyZWVrOiJpc284ODU5NyIsY3Npc29sYXRp'@;
put 'bmhlYnJldzoiaXNvODg1OTgiLGNzaXNvbGF0aW41OiJpc284ODU5OSIsY3Npc29sYXRpbjY6Imlzbzg4NTkxMCIsbDE6Imlzbzg4NTkxIixsMjoiaXNvODg1OTIiLGwzOiJpc284ODU5MyIsbDQ6Imlzbzg4NTk0IixsNToiaXNvODg1OTkiLGw2OiJpc284ODU5MTAiLGw3OiJpc284ODU5MTMi'@;
put 'LGw4OiJpc284ODU5MTQiLGw5OiJpc284ODU5MTUiLGwxMDoiaXNvODg1OTE2Iixpc29pcjE0OiJpc282NDZqcCIsaXNvaXI1NzoiaXNvNjQ2Y24iLGlzb2lyMTAwOiJpc284ODU5MSIsaXNvaXIxMDE6Imlzbzg4NTkyIixpc29pcjEwOToiaXNvODg1OTMiLGlzb2lyMTEwOiJpc284ODU5NCIs'@;
put 'aXNvaXIxNDQ6Imlzbzg4NTk1Iixpc29pcjEyNzoiaXNvODg1OTYiLGlzb2lyMTI2OiJpc284ODU5NyIsaXNvaXIxMzg6Imlzbzg4NTk4Iixpc29pcjE0ODoiaXNvODg1OTkiLGlzb2lyMTU3OiJpc284ODU5MTAiLGlzb2lyMTY2OiJ0aXM2MjAiLGlzb2lyMTc5OiJpc284ODU5MTMiLGlzb2ly'@;
put 'MTk5OiJpc284ODU5MTQiLGlzb2lyMjAzOiJpc284ODU5MTUiLGlzb2lyMjI2OiJpc284ODU5MTYiLGNwODE5OiJpc284ODU5MSIsaWJtODE5OiJpc284ODU5MSIsY3lyaWxsaWM6Imlzbzg4NTk1IixhcmFiaWM6Imlzbzg4NTk2IixhcmFiaWM4OiJpc284ODU5NiIsZWNtYTExNDoiaXNvODg1'@;
put 'OTYiLGFzbW83MDg6Imlzbzg4NTk2IixncmVlazoiaXNvODg1OTciLGdyZWVrODoiaXNvODg1OTciLGVjbWExMTg6Imlzbzg4NTk3IixlbG90OTI4OiJpc284ODU5NyIsaGVicmV3OiJpc284ODU5OCIsaGVicmV3ODoiaXNvODg1OTgiLHR1cmtpc2g6Imlzbzg4NTk5Iix0dXJraXNoODoiaXNv'@;
put 'ODg1OTkiLHRoYWk6Imlzbzg4NTkxMSIsdGhhaTg6Imlzbzg4NTkxMSIsY2VsdGljOiJpc284ODU5MTQiLGNlbHRpYzg6Imlzbzg4NTkxNCIsaXNvY2VsdGljOiJpc284ODU5MTQiLHRpczYyMDA6InRpczYyMCIsdGlzNjIwMjUyOTE6InRpczYyMCIsdGlzNjIwMjUzMzA6InRpczYyMCIsMWU0'@;
put 'OiJtYWNyb21hbiIsMTAwMDY6Im1hY2dyZWVrIiwxMDAwNzoibWFjY3lyaWxsaWMiLDEwMDc5OiJtYWNpY2VsYW5kIiwxMDA4MToibWFjdHVya2lzaCIsY3NwYzhjb2RlcGFnZTQzNzoiY3A0MzciLGNzcGM3NzViYWx0aWM6ImNwNzc1Iixjc3BjODUwbXVsdGlsaW5ndWFsOiJjcDg1MCIsY3Nw'@;
put 'Y3A4NTI6ImNwODUyIixjc3BjODYybGF0aW5oZWJyZXc6ImNwODYyIixjcGdyOiJjcDg2OSIsbXNlZToiY3AxMjUwIixtc2N5cmw6ImNwMTI1MSIsbXNhbnNpOiJjcDEyNTIiLG1zZ3JlZWs6ImNwMTI1MyIsbXN0dXJrOiJjcDEyNTQiLG1zaGVicjoiY3AxMjU1Iixtc2FyYWI6ImNwMTI1NiIs'@;
put 'd2luYmFsdHJpbToiY3AxMjU3IixjcDIwODY2OiJrb2k4ciIsMjA4NjY6ImtvaThyIixpYm04Nzg6ImtvaThyIixjc2tvaThyOiJrb2k4ciIsY3AyMTg2Njoia29pOHUiLDIxODY2OiJrb2k4dSIsaWJtMTE2ODoia29pOHUiLHN0cmsxMDQ4MjAwMjoicmsxMDQ4Iix0Y3ZuNTcxMjoidGN2biIs'@;
put 'dGN2bjU3MTIxOiJ0Y3ZuIixnYjE5ODg4MDoiaXNvNjQ2Y24iLGNuOiJpc282NDZjbiIsY3Npc28xNGppc2M2MjIwcm86ImlzbzY0NmpwIixqaXNjNjIyMDE5NjlybzoiaXNvNjQ2anAiLGpwOiJpc282NDZqcCIsY3NocHJvbWFuODoiaHByb21hbjgiLHI4OiJocHJvbWFuOCIscm9tYW44OiJo'@;
put 'cHJvbWFuOCIseHJvbWFuODoiaHByb21hbjgiLGlibTEwNTE6Imhwcm9tYW44IixtYWM6Im1hY2ludG9zaCIsY3NtYWNpbnRvc2g6Im1hY2ludG9zaCJ9fSw0MzI4MDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiB4KCl7fWZ1bmN0aW9u'@;
put 'IG0oKXt9ZnVuY3Rpb24gbGUoKXt0aGlzLm92ZXJmbG93Qnl0ZT0tMX1mdW5jdGlvbiBNKEssSSl7dGhpcy5pY29udj1JfWZ1bmN0aW9uIE8oSyxJKXt2b2lkIDA9PT0oSz1LfHx7fSkuYWRkQk9NJiYoSy5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1JLmljb252LmdldEVuY29kZXIoInV0Zi0x'@;
put 'NmxlIixLKX1mdW5jdGlvbiBSKEssSSl7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9S3x8e30sdGhpcy5pY29udj1JLmljb252fWZ1bmN0aW9uIHooSyxJKXt2YXIgaz1JfHwidXRmLTE2bGUiO2lmKEsu'@;
put 'bGVuZ3RoPj0yKWlmKDI1ND09S1swXSYmMjU1PT1LWzFdKWs9InV0Zi0xNmJlIjtlbHNlIGlmKDI1NT09S1swXSYmMjU0PT1LWzFdKWs9InV0Zi0xNmxlIjtlbHNle2Zvcih2YXIgRT0wLGo9MCxWPU1hdGgubWluKEsubGVuZ3RoLUsubGVuZ3RoJTIsNjQpLEI9MDtCPFY7Qis9MikwPT09S1tC'@;
put 'XSYmMCE9PUtbQisxXSYmaisrLDAhPT1LW0JdJiYwPT09S1tCKzFdJiZFKys7aj5FP2s9InV0Zi0xNmJlIjpqPEUmJihrPSJ1dGYtMTZsZSIpfXJldHVybiBrfUllLnV0ZjE2YmU9eCx4LnByb3RvdHlwZS5lbmNvZGVyPW0seC5wcm90b3R5cGUuZGVjb2Rlcj1sZSx4LnByb3RvdHlwZS5ib21B'@;
put 'd2FyZT0hMCxtLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEk9YWUuZnJvbShLLCJ1Y3MyIiksaz0wO2s8SS5sZW5ndGg7ays9Mil7dmFyIEU9SVtrXTtJW2tdPUlbaysxXSxJW2srMV09RX1yZXR1cm4gSX0sbS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxsZS5wcm90'@;
put 'b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoMD09Sy5sZW5ndGgpcmV0dXJuIiI7dmFyIEk9YWUuYWxsb2MoSy5sZW5ndGgrMSksaz0wLEU9MDtmb3IoLTEhPT10aGlzLm92ZXJmbG93Qnl0ZSYmKElbMF09S1swXSxJWzFdPXRoaXMub3ZlcmZsb3dCeXRlLGs9MSxFPTIpO2s8Sy5sZW5ndGgt'@;
put 'MTtrKz0yLEUrPTIpSVtFXT1LW2srMV0sSVtFKzFdPUtba107cmV0dXJuIHRoaXMub3ZlcmZsb3dCeXRlPWs9PUsubGVuZ3RoLTE/S1tLLmxlbmd0aC0xXTotMSxJLnNsaWNlKDAsRSkudG9TdHJpbmcoInVjczIiKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sSWUudXRmMTY9TSxN'@;
put 'LnByb3RvdHlwZS5lbmNvZGVyPU8sTS5wcm90b3R5cGUuZGVjb2Rlcj1SLE8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoSyl9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LFIucHJvdG90'@;
put 'eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goSyksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPUsubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDE2KXJldHVybiIiO3ZhciBJPXooSz1hZS5jb25jYXQodGhpcy5pbml0aWFs'@;
put 'Qnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoSSx0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoSyl9'@;
put 'LFIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciBLPWFlLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksST16KEssdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihJLHRoaXMub3B0aW9u'@;
put 'cyk7dmFyIGs9dGhpcy5kZWNvZGVyLndyaXRlKEspLEU9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBFP2srRTprfXJldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw5Mjg0NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiB4KEssSSl7'@;
put 'dGhpcy5pY29udj1JLHRoaXMuYm9tQXdhcmU9ITAsdGhpcy5pc0xFPUsuaXNMRX1mdW5jdGlvbiBtKEssSSl7dGhpcy5pc0xFPUkuaXNMRSx0aGlzLmhpZ2hTdXJyb2dhdGU9MH1mdW5jdGlvbiBsZShLLEkpe3RoaXMuaXNMRT1JLmlzTEUsdGhpcy5iYWRDaGFyPUkuaWNvbnYuZGVmYXVsdENo'@;
put 'YXJVbmljb2RlLmNoYXJDb2RlQXQoMCksdGhpcy5vdmVyZmxvdz1udWxsfWZ1bmN0aW9uIE0oSyxJKXt0aGlzLmljb252PUl9ZnVuY3Rpb24gTyhLLEkpe3ZvaWQgMD09PShLPUt8fHt9KS5hZGRCT00mJihLLmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPUkuaWNvbnYuZ2V0RW5jb2RlcihLLmRl'@;
put 'ZmF1bHRFbmNvZGluZ3x8InV0Zi0zMmxlIixLKX1mdW5jdGlvbiBSKEssSSl7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9S3x8e30sdGhpcy5pY29udj1JLmljb252fWZ1bmN0aW9uIHooSyxJKXt2YXIg'@;
put 'az1JfHwidXRmLTMybGUiO2lmKEsubGVuZ3RoPj00KWlmKDY1Mjc5PT09Sy5yZWFkVUludDMyQkUoMCkpaz0idXRmLTMyYmUiO2Vsc2UgaWYoNjUyNzk9PT1LLnJlYWRVSW50MzJMRSgwKSlrPSJ1dGYtMzJsZSI7ZWxzZXtmb3IodmFyIEU9MCxqPTAsVj0wLEI9MCxZPU1hdGgubWluKEsubGVu'@;
put 'Z3RoLUsubGVuZ3RoJTQsMTI4KSxYPTA7WDxZO1grPTQpe3ZhciBVPUtbWF0scT1LW1grMV0sZWU9S1tYKzJdLHRlPUtbWCszXTsoMCE9PVV8fHE+MTYpJiYrK2osKDAhPT10ZXx8ZWU+MTYpJiYrK0UsMD09PVUmJjA9PT1xJiYwPT09ZWUmJjAhPT10ZSYmQisrLDAhPT1VJiYwPT09cSYmMD09'@;
put 'PWVlJiYwPT09dGUmJlYrK31qPEU/az0idXRmLTMyYmUiOkU8aiYmKGs9InV0Zi0zMmxlIiksQj5WP2s9InV0Zi0zMmJlIjpCPFYmJihrPSJ1dGYtMzJsZSIpfXJldHVybiBrfUllLl91dGYzMj14LEllLnV0ZjMybGU9e3R5cGU6Il91dGYzMiIsaXNMRTohMH0sSWUudXRmMzJiZT17dHlwZToi'@;
put 'X3V0ZjMyIixpc0xFOiExfSxJZS51Y3M0bGU9InV0ZjMybGUiLEllLnVjczRiZT0idXRmMzJiZSIseC5wcm90b3R5cGUuZW5jb2Rlcj1tLHgucHJvdG90eXBlLmRlY29kZXI9bGUsbS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPWFlLmZyb20oSywidWNzMiIpLGs9YWUu'@;
put 'YWxsb2MoMipJLmxlbmd0aCksRT10aGlzLmlzTEU/ay53cml0ZVVJbnQzMkxFOmsud3JpdGVVSW50MzJCRSxqPTAsVj0wO1Y8SS5sZW5ndGg7Vis9Mil7dmFyIEI9SS5yZWFkVUludDE2TEUoViksWT01NTI5Njw9QiYmQjw1NjMyMDtpZih0aGlzLmhpZ2hTdXJyb2dhdGUpe2lmKCFZJiY1NjMy'@;
put 'MDw9QiYmQjw1NzM0NCl7RS5jYWxsKGssNjU1MzYrKHRoaXMuaGlnaFN1cnJvZ2F0ZS01NTI5Njw8MTB8Qi01NjMyMCksaiksais9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MDtjb250aW51ZX1FLmNhbGwoayx0aGlzLmhpZ2hTdXJyb2dhdGUsaiksais9NH1ZP3RoaXMuaGlnaFN1cnJvZ2F0ZT1C'@;
put 'OihFLmNhbGwoayxCLGopLGorPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTApfXJldHVybiBqPGsubGVuZ3RoJiYoaz1rLnNsaWNlKDAsaikpLGt9LG0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7dmFyIEs9YWUuYWxsb2MoNCk7cmV0dXJuIHRoaXMuaXNM'@;
put 'RT9LLndyaXRlVUludDMyTEUodGhpcy5oaWdoU3Vycm9nYXRlLDApOksud3JpdGVVSW50MzJCRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCksdGhpcy5oaWdoU3Vycm9nYXRlPTAsS319LGxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZigwPT09Sy5sZW5ndGgpcmV0dXJuIiI7dGhpcy5v'@;
put 'dmVyZmxvdyYmKEs9YWUuY29uY2F0KFt0aGlzLm92ZXJmbG93LEtdKSk7dmFyIEk9Sy5sZW5ndGgtSy5sZW5ndGglNDtLLmxlbmd0aCE9PUk/KHRoaXMub3ZlcmZsb3c9Sy5zbGljZShJKSxLPUsuc2xpY2UoMCxJKSk6dGhpcy5vdmVyZmxvdz1udWxsO2Zvcih2YXIgaz1hZS5hbGxvYyhJKSxF'@;
put 'PTAsaj0wO2o8STtqKz00KXt2YXIgVj10aGlzLmlzTEU/Sy5yZWFkVUludDMyTEUoaik6Sy5yZWFkVUludDMyQkUoaik7aWYoVjw2NTUzNilrLndyaXRlVUludDE2TEUoVixFKSxFKz0yO2Vsc2UgaWYoVj4xMTE0MTExKWsud3JpdGVVSW50MTZMRSh0aGlzLmJhZENoYXIsRSksRSs9MjtlbHNl'@;
put 'e3ZhciBZPTU2MzIwKygxMDIzJihWLT02NTUzNikpO2sud3JpdGVVSW50MTZMRSg1NTI5NnxWPj4xMCxFKSxrLndyaXRlVUludDE2TEUoWSxFKz0yKSxFKz0yfX1yZXR1cm4gay5zbGljZSgwLEUpLnRvU3RyaW5nKCJ1Y3MyIil9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLm92'@;
put 'ZXJmbG93PW51bGx9LEllLnV0ZjMyPU0sSWUudWNzND1NLE0ucHJvdG90eXBlLmVuY29kZXI9TyxNLnByb3RvdHlwZS5kZWNvZGVyPVIsTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShLKX0sTy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaChLKSx0aGlzLmluaXRpYWxCeXRlc0xlbis9Sy5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MzIpcmV0dXJu'@;
put 'IiI7dmFyIGs9eihhZS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoayx0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xl'@;
put 'bj0wfXJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoSyl9LFIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciBLPWFlLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksST16KEssdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRo'@;
put 'aXMuaWNvbnYuZ2V0RGVjb2RlcihJLHRoaXMub3B0aW9ucyk7dmFyIGs9dGhpcy5kZWNvZGVyLndyaXRlKEspLEU9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBFP2srRTprfXJldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw3ODM1NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFl'@;
put 'PUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiB4KFksWCl7dGhpcy5pY29udj1YfUllLnV0Zjc9eCxJZS51bmljb2RlMTF1dGY3PSJ1dGY3Iix4LnByb3RvdHlwZS5lbmNvZGVyPWxlLHgucHJvdG90eXBlLmRlY29kZXI9TSx4LnByb3RvdHlwZS5ib21Bd2FyZT0hMDt2YXIgbT0vW15BLVphLXow'@;
put 'LTknXChcKSwtXC5cLzpcPyBcblxyXHRdKy9nO2Z1bmN0aW9uIGxlKFksWCl7dGhpcy5pY29udj1YLmljb252fWZ1bmN0aW9uIE0oWSxYKXt0aGlzLmljb252PVguaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIifWxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZ'@;
put 'KXtyZXR1cm4gYWUuZnJvbShZLnJlcGxhY2UobSxmdW5jdGlvbihYKXtyZXR1cm4iKyIrKCIrIj09PVg/IiI6dGhpcy5pY29udi5lbmNvZGUoWCwidXRmMTYtYmUiKS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvPSskLywiIikpKyItIn0uYmluZCh0aGlzKSkpfSxsZS5wcm90b3R5cGUu'@;
put 'ZW5kPWZ1bmN0aW9uKCl7fTtmb3IodmFyIE89L1tBLVphLXowLTlcLytdLyxSPVtdLHo9MDt6PDI1Njt6KyspUlt6XT1PLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZSh6KSk7dmFyIEs9IisiLmNoYXJDb2RlQXQoMCksST0iLSIuY2hhckNvZGVBdCgwKSxrPSImIi5jaGFyQ29kZUF0KDApO2Z1'@;
put 'bmN0aW9uIEUoWSxYKXt0aGlzLmljb252PVh9ZnVuY3Rpb24gaihZLFgpe3RoaXMuaWNvbnY9WC5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09YWUuYWxsb2MoNiksdGhpcy5iYXNlNjRBY2N1bUlkeD0wfWZ1bmN0aW9uIFYoWSxYKXt0aGlzLmljb252PVguaWNvbnYs'@;
put 'dGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIifU0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWD0iIixVPTAscT10aGlzLmluQmFzZTY0LGVlPXRoaXMuYmFzZTY0QWNjdW0sdGU9MDt0ZTxZLmxlbmd0aDt0ZSsrKWlmKHEpe2lmKCFSW1lbdGVdXSl7aWYo'@;
put 'dGU9PVUmJllbdGVdPT1JKVgrPSIrIjtlbHNle3ZhciBvZT1lZStZLnNsaWNlKFUsdGUpLnRvU3RyaW5nKCk7WCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9WVt0ZV0hPUkmJnRlLS0sVT10ZSsxLHE9ITEsZWU9IiJ9fWVsc2UgWVt0ZV09PUsm'@;
put 'JihYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUsdGUpLCJhc2NpaSIpLFU9dGUrMSxxPSEwKTtpZihxKXt2YXIgc2U9KG9lPWVlK1kuc2xpY2UoVSkudG9TdHJpbmcoKSkubGVuZ3RoLW9lLmxlbmd0aCU4O2VlPW9lLnNsaWNlKHNlKSxvZT1vZS5zbGljZSgwLHNlKSxYKz10aGlzLmlj'@;
put 'b252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cSx0aGlzLmJhc2U2NEFjY3VtPWVlLFh9LE0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3Zh'@;
put 'ciBZPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYoWT10aGlzLmljb252LmRlY29kZShhZS5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIsWX0s'@;
put 'SWUudXRmN2ltYXA9RSxFLnByb3RvdHlwZS5lbmNvZGVyPWosRS5wcm90b3R5cGUuZGVjb2Rlcj1WLEUucHJvdG90eXBlLmJvbUF3YXJlPSEwLGoucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWD10aGlzLmluQmFzZTY0LFU9dGhpcy5iYXNlNjRBY2N1bSxxPXRoaXMuYmFz'@;
put 'ZTY0QWNjdW1JZHgsZWU9YWUuYWxsb2MoNSpZLmxlbmd0aCsxMCksdGU9MCxvZT0wO29lPFkubGVuZ3RoO29lKyspe3ZhciBzZT1ZLmNoYXJDb2RlQXQob2UpOzMyPD1zZSYmc2U8PTEyNj8oWCYmKHE+MCYmKHRlKz1lZS53cml0ZShVLnNsaWNlKDAscSkudG9TdHJpbmcoImJhc2U2NCIpLnJl'@;
put 'cGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSx0ZSkscT0wKSxlZVt0ZSsrXT1JLFg9ITEpLFh8fChlZVt0ZSsrXT1zZSxzZT09PWsmJihlZVt0ZSsrXT1JKSkpOihYfHwoZWVbdGUrK109ayxYPSEwKSxYJiYoVVtxKytdPXNlPj44LFVbcSsrXT0yNTUmc2UscT09VS5sZW5ndGgm'@;
put 'Jih0ZSs9ZWUud3JpdGUoVS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLHRlKSxxPTApKSl9cmV0dXJuIHRoaXMuaW5CYXNlNjQ9WCx0aGlzLmJhc2U2NEFjY3VtSWR4PXEsZWUuc2xpY2UoMCx0ZSl9LGoucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBZPWFlLmFs'@;
put 'bG9jKDEwKSxYPTA7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJih0aGlzLmJhc2U2NEFjY3VtSWR4PjAmJihYKz1ZLndyaXRlKHRoaXMuYmFzZTY0QWNjdW0uc2xpY2UoMCx0aGlzLmJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLnJlcGxhY2UoLz0r'@;
put 'JC8sIiIpLFgpLHRoaXMuYmFzZTY0QWNjdW1JZHg9MCksWVtYKytdPUksdGhpcy5pbkJhc2U2ND0hMSksWS5zbGljZSgwLFgpfTt2YXIgQj1SLnNsaWNlKCk7QlsiLCIuY2hhckNvZGVBdCgwKV09ITAsVi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYPSIiLFU9MCxxPXRo'@;
put 'aXMuaW5CYXNlNjQsZWU9dGhpcy5iYXNlNjRBY2N1bSx0ZT0wO3RlPFkubGVuZ3RoO3RlKyspaWYocSl7aWYoIUJbWVt0ZV1dKXtpZih0ZT09VSYmWVt0ZV09PUkpWCs9IiYiO2Vsc2V7dmFyIG9lPWVlK1kuc2xpY2UoVSx0ZSkudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKTtYKz10aGlz'@;
put 'Lmljb252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1ZW3RlXSE9SSYmdGUtLSxVPXRlKzEscT0hMSxlZT0iIn19ZWxzZSBZW3RlXT09ayYmKFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSx0ZSksImFzY2lpIiksVT10ZSsxLHE9ITApO2lmKHEpe3ZhciBz'@;
put 'ZT0ob2U9ZWUrWS5zbGljZShVKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpKS5sZW5ndGgtb2UubGVuZ3RoJTg7ZWU9b2Uuc2xpY2Uoc2UpLG9lPW9lLnNsaWNlKDAsc2UpLFgrPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgWCs9'@;
put 'dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVKSwiYXNjaWkiKTtyZXR1cm4gdGhpcy5pbkJhc2U2ND1xLHRoaXMuYmFzZTY0QWNjdW09ZWUsWH0sVi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIFk9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3Ro'@;
put 'PjAmJihZPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixZfX0sNjMwMTg6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhZShtLGxlKXt0aGlz'@;
put 'LmVuY29kZXI9bSx0aGlzLmFkZEJPTT0hMH1mdW5jdGlvbiB4KG0sbGUpe3RoaXMuZGVjb2Rlcj1tLHRoaXMucGFzcz0hMSx0aGlzLm9wdGlvbnM9bGV8fHt9fUllLlByZXBlbmRCT009YWUsYWUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLmFkZEJPTSYmKG09Ilx1'@;
put 'ZmVmZiIrbSx0aGlzLmFkZEJPTT0hMSksdGhpcy5lbmNvZGVyLndyaXRlKG0pfSxhZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sSWUuU3RyaXBCT009eCx4LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihtKXt2YXIgbGU9dGhpcy5kZWNvZGVy'@;
put 'LndyaXRlKG0pO3JldHVybiB0aGlzLnBhc3N8fCFsZXx8KCJcdWZlZmYiPT09bGVbMF0mJihsZT1sZS5zbGljZSgxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnN0cmlwQk9NJiZ0aGlzLm9wdGlvbnMuc3RyaXBCT00oKSksdGhpcy5wYXNzPSEwKSxsZX0seC5wcm90b3R5cGUu'@;
put 'ZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDUzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyLHg9Rig2MzAxOCksbT1hdC5leHBvcnRzO20uZW5jb2RpbmdzPW51bGwsbS5kZWZhdWx0Q2hhclVuaWNvZGU9Ilx1ZmZmZCIs'@;
put 'bS5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU9Ij8iLG0uZW5jb2RlPWZ1bmN0aW9uKFIseixLKXtSPSIiKyhSfHwiIik7dmFyIEk9bS5nZXRFbmNvZGVyKHosSyksaz1JLndyaXRlKFIpLEU9SS5lbmQoKTtyZXR1cm4gRSYmRS5sZW5ndGg+MD9hZS5jb25jYXQoW2ssRV0pOmt9LG0uZGVjb2RlPWZ1'@;
put 'bmN0aW9uKFIseixLKXsic3RyaW5nIj09dHlwZW9mIFImJihtLnNraXBEZWNvZGVXYXJuaW5nfHwoY29uc29sZS5lcnJvcigiSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtp'@;
put 'bi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZyIpLG0uc2tpcERlY29kZVdhcm5pbmc9ITApLFI9YWUuZnJvbSgiIisoUnx8IiIpLCJiaW5hcnkiKSk7dmFyIEk9bS5nZXREZWNvZGVyKHosSyksaz1JLndyaXRlKFIpLEU9SS5lbmQoKTtyZXR1cm4gRT9rK0U6a30s'@;
put 'bS5lbmNvZGluZ0V4aXN0cz1mdW5jdGlvbihSKXt0cnl7cmV0dXJuIG0uZ2V0Q29kZWMoUiksITB9Y2F0Y2h7cmV0dXJuITF9fSxtLnRvRW5jb2Rpbmc9bS5lbmNvZGUsbS5mcm9tRW5jb2Rpbmc9bS5kZWNvZGUsbS5fY29kZWNEYXRhQ2FjaGU9e30sbS5nZXRDb2RlYz1mdW5jdGlvbihSKXtt'@;
put 'LmVuY29kaW5nc3x8KG0uZW5jb2RpbmdzPUYoNDQ2NTcpKTtmb3IodmFyIHo9bS5fY2Fub25pY2FsaXplRW5jb2RpbmcoUiksSz17fTs7KXt2YXIgST1tLl9jb2RlY0RhdGFDYWNoZVt6XTtpZihJKXJldHVybiBJO3ZhciBrPW0uZW5jb2RpbmdzW3pdO3N3aXRjaCh0eXBlb2Ygayl7Y2FzZSJz'@;
put 'dHJpbmciOno9azticmVhaztjYXNlIm9iamVjdCI6Zm9yKHZhciBFIGluIGspS1tFXT1rW0VdO0suZW5jb2RpbmdOYW1lfHwoSy5lbmNvZGluZ05hbWU9eiksej1rLnR5cGU7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIEsuZW5jb2RpbmdOYW1lfHwoSy5lbmNvZGluZ05hbWU9eiksST1u'@;
put 'ZXcgayhLLG0pLG0uX2NvZGVjRGF0YUNhY2hlW0suZW5jb2RpbmdOYW1lXT1JLEk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAnIitSKyInIChzZWFyY2hlZCBhczogJyIreisiJykiKX19fSxtLl9jYW5vbmljYWxpemVFbmNvZGluZz1mdW5jdGlv'@;
put 'bihPKXtyZXR1cm4oIiIrTykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC86XGR7NH0kfFteMC05YS16XS9nLCIiKX0sbS5nZXRFbmNvZGVyPWZ1bmN0aW9uKFIseil7dmFyIEs9bS5nZXRDb2RlYyhSKSxJPW5ldyBLLmVuY29kZXIoeixLKTtyZXR1cm4gSy5ib21Bd2FyZSYmeiYmei5hZGRCT00m'@;
put 'JihJPW5ldyB4LlByZXBlbmRCT00oSSx6KSksSX0sbS5nZXREZWNvZGVyPWZ1bmN0aW9uKFIseil7dmFyIEs9bS5nZXRDb2RlYyhSKSxJPW5ldyBLLmRlY29kZXIoeixLKTtyZXR1cm4gSy5ib21Bd2FyZSYmISh6JiYhMT09PXouc3RyaXBCT00pJiYoST1uZXcgeC5TdHJpcEJPTShJLHopKSxJ'@;
put 'fTt2YXIgbGU9dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLnZlcnNpb25zJiZwcm9jZXNzLnZlcnNpb25zLm5vZGU7aWYobGUpe3ZhciBNPWxlLnNwbGl0KCIuIikubWFwKE51bWJlcik7KE1bMF0+MHx8TVsxXT49MTApJiZGKDY5MzMxKShtKSxGKDE5NTI3KShtKX19LDIyNjAxOihhdCxJ'@;
put 'ZSk9PntJZS5yZWFkPWZ1bmN0aW9uKEYsYWUseCxtLGxlKXt2YXIgTSxPLFI9OCpsZS1tLTEsej0oMTw8UiktMSxLPXo+PjEsST0tNyxrPXg/bGUtMTowLEU9eD8tMToxLGo9RlthZStrXTtmb3Ioays9RSxNPWomKDE8PC1JKS0xLGo+Pj0tSSxJKz1SO0k+MDtNPTI1NipNK0ZbYWUra10says9'@;
put 'RSxJLT04KTtmb3IoTz1NJigxPDwtSSktMSxNPj49LUksSSs9bTtJPjA7Tz0yNTYqTytGW2FlK2tdLGsrPUUsSS09OCk7aWYoMD09PU0pTT0xLUs7ZWxzZXtpZihNPT09eilyZXR1cm4gTz9OYU46MS8wKihqPy0xOjEpO08rPU1hdGgucG93KDIsbSksTS09S31yZXR1cm4oaj8tMToxKSpPKk1h'@;
put 'dGgucG93KDIsTS1tKX0sSWUud3JpdGU9ZnVuY3Rpb24oRixhZSx4LG0sbGUsTSl7dmFyIE8sUix6LEs9OCpNLWxlLTEsST0oMTw8SyktMSxrPUk+PjEsRT0yMz09PWxlP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxqPW0/MDpNLTEsVj1tPzE6LTEsQj1hZTwwfHwwPT09YWUm'@;
put 'JjEvYWU8MD8xOjA7Zm9yKGFlPU1hdGguYWJzKGFlKSxpc05hTihhZSl8fGFlPT09MS8wPyhSPWlzTmFOKGFlKT8xOjAsTz1JKTooTz1NYXRoLmZsb29yKE1hdGgubG9nKGFlKS9NYXRoLkxOMiksYWUqKHo9TWF0aC5wb3coMiwtTykpPDEmJihPLS0seio9MiksKGFlKz1PK2s+PTE/RS96OkUq'@;
put 'TWF0aC5wb3coMiwxLWspKSp6Pj0yJiYoTysrLHovPTIpLE8raz49ST8oUj0wLE89SSk6TytrPj0xPyhSPShhZSp6LTEpKk1hdGgucG93KDIsbGUpLE8rPWspOihSPWFlKk1hdGgucG93KDIsay0xKSpNYXRoLnBvdygyLGxlKSxPPTApKTtsZT49ODtGW3gral09MjU1JlIsais9VixSLz0yNTYs'@;
put 'bGUtPTgpO2ZvcihPPU88PGxlfFIsSys9bGU7Sz4wO0ZbeCtqXT0yNTUmTyxqKz1WLE8vPTI1NixLLT04KTtGW3grai1WXXw9MTI4KkJ9fSw2NjY5ODphdD0+e2F0LmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oRixhZSl7YWUmJihGLnN1cGVyXz1h'@;
put 'ZSxGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkYsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbihGLGFlKXtpZihhZSl7Ri5zdXBlcl89YWU7dmFyIHg9ZnVuY3Rpb24oKXt9O3gu'@;
put 'cHJvdG90eXBlPWFlLnByb3RvdHlwZSxGLnByb3RvdHlwZT1uZXcgeCxGLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GfX19LDc1ODI5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjY5OCkseD1GKDYwMzgwKSxtPUYoODQzKS5CdWZmZXIsbGU9bmV3IEFycmF5KDE2KTtmdW5j'@;
put 'dGlvbiBNKCl7eC5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIE8oayxFKXtyZXR1cm4gazw8RXxrPj4+MzItRX1mdW5jdGlvbiBSKGssRSxqLFYsQixZLFgpe3Jl'@;
put 'dHVybiBPKGsrKEUmanx+RSZWKStCK1l8MCxYKStFfDB9ZnVuY3Rpb24geihrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhFJlZ8aiZ+VikrQitZfDAsWCkrRXwwfWZ1bmN0aW9uIEsoayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoRV5qXlYpK0IrWXwwLFgpK0V8MH1mdW5jdGlvbiBJKGss'@;
put 'RSxqLFYsQixZLFgpe3JldHVybiBPKGsrKGpeKEV8flYpKStCK1l8MCxYKStFfDB9YWUoTSx4KSxNLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPWxlLEU9MDtFPDE2OysrRSlrW0VdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqRSk7dmFyIGo9dGhpcy5fYSxWPXRo'@;
put 'aXMuX2IsQj10aGlzLl9jLFk9dGhpcy5fZDtqPVIoaixWLEIsWSxrWzBdLDM2MTQwOTAzNjAsNyksWT1SKFksaixWLEIsa1sxXSwzOTA1NDAyNzEwLDEyKSxCPVIoQixZLGosVixrWzJdLDYwNjEwNTgxOSwxNyksVj1SKFYsQixZLGosa1szXSwzMjUwNDQxOTY2LDIyKSxqPVIoaixWLEIsWSxr'@;
put 'WzRdLDQxMTg1NDgzOTksNyksWT1SKFksaixWLEIsa1s1XSwxMjAwMDgwNDI2LDEyKSxCPVIoQixZLGosVixrWzZdLDI4MjE3MzU5NTUsMTcpLFY9UihWLEIsWSxqLGtbN10sNDI0OTI2MTMxMywyMiksaj1SKGosVixCLFksa1s4XSwxNzcwMDM1NDE2LDcpLFk9UihZLGosVixCLGtbOV0sMjMz'@;
put 'NjU1Mjg3OSwxMiksQj1SKEIsWSxqLFYsa1sxMF0sNDI5NDkyNTIzMywxNyksVj1SKFYsQixZLGosa1sxMV0sMjMwNDU2MzEzNCwyMiksaj1SKGosVixCLFksa1sxMl0sMTgwNDYwMzY4Miw3KSxZPVIoWSxqLFYsQixrWzEzXSw0MjU0NjI2MTk1LDEyKSxCPVIoQixZLGosVixrWzE0XSwyNzky'@;
put 'OTY1MDA2LDE3KSxqPXooaixWPVIoVixCLFksaixrWzE1XSwxMjM2NTM1MzI5LDIyKSxCLFksa1sxXSw0MTI5MTcwNzg2LDUpLFk9eihZLGosVixCLGtbNl0sMzIyNTQ2NTY2NCw5KSxCPXooQixZLGosVixrWzExXSw2NDM3MTc3MTMsMTQpLFY9eihWLEIsWSxqLGtbMF0sMzkyMTA2OTk5NCwy'@;
put 'MCksaj16KGosVixCLFksa1s1XSwzNTkzNDA4NjA1LDUpLFk9eihZLGosVixCLGtbMTBdLDM4MDE2MDgzLDkpLEI9eihCLFksaixWLGtbMTVdLDM2MzQ0ODg5NjEsMTQpLFY9eihWLEIsWSxqLGtbNF0sMzg4OTQyOTQ0OCwyMCksaj16KGosVixCLFksa1s5XSw1Njg0NDY0MzgsNSksWT16KFks'@;
put 'aixWLEIsa1sxNF0sMzI3NTE2MzYwNiw5KSxCPXooQixZLGosVixrWzNdLDQxMDc2MDMzMzUsMTQpLFY9eihWLEIsWSxqLGtbOF0sMTE2MzUzMTUwMSwyMCksaj16KGosVixCLFksa1sxM10sMjg1MDI4NTgyOSw1KSxZPXooWSxqLFYsQixrWzJdLDQyNDM1NjM1MTIsOSksQj16KEIsWSxqLFYs'@;
put 'a1s3XSwxNzM1MzI4NDczLDE0KSxqPUsoaixWPXooVixCLFksaixrWzEyXSwyMzY4MzU5NTYyLDIwKSxCLFksa1s1XSw0Mjk0NTg4NzM4LDQpLFk9SyhZLGosVixCLGtbOF0sMjI3MjM5MjgzMywxMSksQj1LKEIsWSxqLFYsa1sxMV0sMTgzOTAzMDU2MiwxNiksVj1LKFYsQixZLGosa1sxNF0s'@;
put 'NDI1OTY1Nzc0MCwyMyksaj1LKGosVixCLFksa1sxXSwyNzYzOTc1MjM2LDQpLFk9SyhZLGosVixCLGtbNF0sMTI3Mjg5MzM1MywxMSksQj1LKEIsWSxqLFYsa1s3XSw0MTM5NDY5NjY0LDE2KSxWPUsoVixCLFksaixrWzEwXSwzMjAwMjM2NjU2LDIzKSxqPUsoaixWLEIsWSxrWzEzXSw2ODEy'@;
put 'NzkxNzQsNCksWT1LKFksaixWLEIsa1swXSwzOTM2NDMwMDc0LDExKSxCPUsoQixZLGosVixrWzNdLDM1NzI0NDUzMTcsMTYpLFY9SyhWLEIsWSxqLGtbNl0sNzYwMjkxODksMjMpLGo9SyhqLFYsQixZLGtbOV0sMzY1NDYwMjgwOSw0KSxZPUsoWSxqLFYsQixrWzEyXSwzODczMTUxNDYxLDEx'@;
put 'KSxCPUsoQixZLGosVixrWzE1XSw1MzA3NDI1MjAsMTYpLGo9SShqLFY9SyhWLEIsWSxqLGtbMl0sMzI5OTYyODY0NSwyMyksQixZLGtbMF0sNDA5NjMzNjQ1Miw2KSxZPUkoWSxqLFYsQixrWzddLDExMjY4OTE0MTUsMTApLEI9SShCLFksaixWLGtbMTRdLDI4Nzg2MTIzOTEsMTUpLFY9SShW'@;
put 'LEIsWSxqLGtbNV0sNDIzNzUzMzI0MSwyMSksaj1JKGosVixCLFksa1sxMl0sMTcwMDQ4NTU3MSw2KSxZPUkoWSxqLFYsQixrWzNdLDIzOTk5ODA2OTAsMTApLEI9SShCLFksaixWLGtbMTBdLDQyOTM5MTU3NzMsMTUpLFY9SShWLEIsWSxqLGtbMV0sMjI0MDA0NDQ5NywyMSksaj1JKGosVixC'@;
put 'LFksa1s4XSwxODczMzEzMzU5LDYpLFk9SShZLGosVixCLGtbMTVdLDQyNjQzNTU1NTIsMTApLEI9SShCLFksaixWLGtbNl0sMjczNDc2ODkxNiwxNSksVj1JKFYsQixZLGosa1sxM10sMTMwOTE1MTY0OSwyMSksaj1JKGosVixCLFksa1s0XSw0MTQ5NDQ0MjI2LDYpLFk9SShZLGosVixCLGtb'@;
put 'MTFdLDMxNzQ3NTY5MTcsMTApLEI9SShCLFksaixWLGtbMl0sNzE4Nzg3MjU5LDE1KSxWPUkoVixCLFksaixrWzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStqfDAsdGhpcy5fYj10aGlzLl9iK1Z8MCx0aGlzLl9jPXRoaXMuX2MrQnwwLHRoaXMuX2Q9dGhpcy5fZCtZfDB9LE0u'@;
put 'cHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTAp'@;
put 'LHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgaz1tLmFsbG9jVW5z'@;
put 'YWZlKDE2KTtyZXR1cm4gay53cml0ZUludDMyTEUodGhpcy5fYSwwKSxrLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLGsud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksay53cml0ZUludDMyTEUodGhpcy5fZCwxMiksa30sYXQuZXhwb3J0cz1NfSw0ODYwNjooYXQsSWUsRik9Pnt2YXIgYWU9Rig2'@;
put 'MDMwMykseD1GKDYwMDgyKTtmdW5jdGlvbiBtKGxlKXt0aGlzLnJhbmQ9bGV8fG5ldyB4LlJhbmR9YXQuZXhwb3J0cz1tLG0uY3JlYXRlPWZ1bmN0aW9uKE0pe3JldHVybiBuZXcgbShNKX0sbS5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbihNKXt2YXIgTz1NLmJpdExlbmd0aCgpLFI9'@;
put 'TWF0aC5jZWlsKE8vOCk7ZG97dmFyIHo9bmV3IGFlKHRoaXMucmFuZC5nZW5lcmF0ZShSKSl9d2hpbGUoei5jbXAoTSk+PTApO3JldHVybiB6fSxtLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKE0sTyl7dmFyIFI9Ty5zdWIoTSk7cmV0dXJuIE0uYWRkKHRoaXMuX3JhbmRiZWxvdyhS'@;
put 'KSl9LG0ucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oTSxPLFIpe3ZhciB6PU0uYml0TGVuZ3RoKCksSz1hZS5tb250KE0pLEk9bmV3IGFlKDEpLnRvUmVkKEspO098fChPPU1hdGgubWF4KDEsei80OHwwKSk7Zm9yKHZhciBrPU0uc3VibigxKSxFPTA7IWsudGVzdG4oRSk7RSsrKTtmb3IodmFy'@;
put 'IGo9TS5zaHJuKEUpLFY9ay50b1JlZChLKTtPPjA7Ty0tKXt2YXIgWT10aGlzLl9yYW5kcmFuZ2UobmV3IGFlKDIpLGspO1ImJlIoWSk7dmFyIFg9WS50b1JlZChLKS5yZWRQb3coaik7aWYoMCE9PVguY21wKEkpJiYwIT09WC5jbXAoVikpe2Zvcih2YXIgVT0xO1U8RTtVKyspe2lmKDA9PT0o'@;
put 'WD1YLnJlZFNxcigpKS5jbXAoSSkpcmV0dXJuITE7aWYoMD09PVguY21wKFYpKWJyZWFrfWlmKFU9PT1FKXJldHVybiExfX1yZXR1cm4hMH0sbS5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbihNLE8pe3ZhciBSPU0uYml0TGVuZ3RoKCksej1hZS5tb250KE0pLEs9bmV3IGFlKDEpLnRv'@;
put 'UmVkKHopO098fChPPU1hdGgubWF4KDEsUi80OHwwKSk7Zm9yKHZhciBJPU0uc3VibigxKSxrPTA7IUkudGVzdG4oayk7aysrKTtmb3IodmFyIEU9TS5zaHJuKGspLGo9SS50b1JlZCh6KTtPPjA7Ty0tKXt2YXIgVj10aGlzLl9yYW5kcmFuZ2UobmV3IGFlKDIpLEkpLEI9TS5nY2QoVik7aWYo'@;
put 'MCE9PUIuY21wbigxKSlyZXR1cm4gQjt2YXIgWT1WLnRvUmVkKHopLnJlZFBvdyhFKTtpZigwIT09WS5jbXAoSykmJjAhPT1ZLmNtcChqKSl7Zm9yKHZhciBYPTE7WDxrO1grKyl7aWYoMD09PShZPVkucmVkU3FyKCkpLmNtcChLKSlyZXR1cm4gWS5mcm9tUmVkKCkuc3VibigxKS5nY2QoTSk7'@;
put 'aWYoMD09PVkuY21wKGopKWJyZWFrfWlmKFg9PT1rKXJldHVybihZPVkucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZChNKX19cmV0dXJuITF9fSw2MDMwMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0'@;
put 'aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShH'@;
put 'LGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12'@;
put 'YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoNTY2MTkpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihH'@;
put 'LGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zv'@;
put 'cih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwh'@;
put 'PT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8'@;
put 'MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxt'@;
put 'KEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxO'@;
put 'KSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0'@;
put 'aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9'@;
put 'MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0'@;
put 'aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxn'@;
put 'PTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVu'@;
put 'Z3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VI'@;
put 'ZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZv'@;
put 'cihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihi'@;
put 'LEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3Io'@;
put 'dmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3Ro'@;
put 'aXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMu'@;
put 'c3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdh'@;
put 'dGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3Ro'@;
put 'KytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFy'@;
put 'IEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVsw'@;
put 'LDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0'@;
put 'MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9'@;
put 'Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7'@;
put 'Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2'@;
put 'MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZh'@;
put 'ciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0y'@;
put 'NiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10'@;
put 'aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0w'@;
put 'OylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9i'@;
put 'Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0'@;
put 'cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQp'@;
put 'fSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5'@;
put 'dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9'@;
put 'dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBl'@;
put 'Ll9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihI'@;
put 'Kz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIs'@;
put 'RD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lm'@;
put 'KHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVy'@;
put 'biBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgr'@;
put 'K109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMu'@;
put 'aXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlz'@;
put 'LmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29y'@;
put 'ZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVy'@;
put 'biB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlz'@;
put 'KX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZv'@;
put 'cig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Io'@;
put 'Yil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMu'@;
put 'Y2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0w'@;
put 'O048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hd'@;
put 'Jn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1T'@;
put 'aWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxD'@;
put 'PTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2'@;
put 'O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVu'@;
put 'Y3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMp'@;
put 'LHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTty'@;
put 'ZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlz'@;
put 'Lm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02'@;
put 'NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2'@;
put 'YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+'@;
put 'MTMsUWU9MHxOWzRdLGx0PTgxOTEmUWUsUGU9UWU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0sb3Q9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10'@;
put 'PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdb'@;
put 'NF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsUXQ9MHxnWzZdLER0PTgxOTEmUXQscHQ9UXQ+Pj4xMyxZdD0wfGdbN10sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLFJu'@;
put 'PTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgUG49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1N'@;
put 'YXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoUG4+Pj4yNil8MCxQbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24p'@;
put 'fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5p'@;
put 'bXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11'@;
put 'bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0o'@;
put 'cD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01hdGguaW11bCh4'@;
put 'ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhu'@;
put 'KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0'@;
put 'aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9dytNYXRoLmlt'@;
put 'dWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXww'@;
put 'LHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0'@;
put 'aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9'@;
put 'dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0'@;
put 'aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9dytNYXRoLmlt'@;
put 'dWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXww'@;
put 'LHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0'@;
put 'aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwoamUsSXQpfDAsdj12K01hdGguaW11bCh4'@;
put 'ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsSW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLElu'@;
put 'KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwob3QsQ24pLHA9KHA9TWF0aC5pbXVsKG90LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0'@;
put 'aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9dytNYXRoLmlt'@;
put 'dWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQ'@;
put 'ZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9l'@;
put 'LHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxJbil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11'@;
put 'bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0o'@;
put 'cD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwob3QsV24pfDAscD0ocD1wK01hdGguaW11bChvdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChN'@;
put 'ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0'@;
put 'KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAs'@;
put 'dz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsSW4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkr'@;
put 'TWF0aC5pbXVsKGplLEluKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsUm4p'@;
put 'fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5p'@;
put 'bXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKG90LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYr'@;
put 'TWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRo'@;
put 'LmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11'@;
put 'bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhw'@;
put 'Pj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwob3QsaG4pfDAscD0ocD1wK01hdGguaW11bChvdCx3dCl8MCkr'@;
put 'TWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11'@;
put 'bChsdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsSW4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFll'@;
put 'LHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02'@;
put 'NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGguaW11bChvdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRo'@;
put 'LmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11'@;
put 'bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsSW4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLEluKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0'@;
put 'aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwob3QsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11'@;
put 'bChYZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRl'@;
put 'LHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02'@;
put 'NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsSXQpLHY9ditNYXRoLmltdWwob3QsRHQpfDAscD0ocD1wK01hdGguaW11bChvdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRo'@;
put 'LmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11'@;
put 'bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhw'@;
put 'Pj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwob3QsSW4pfDAscD0ocD1wK01hdGguaW11bChvdCx6dCl8MCkr'@;
put 'TWF0aC5pbXVsKHV0LEluKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsUm4p'@;
put 'fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSW4pLHA9KHA9TWF0aC5p'@;
put 'bXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LEluKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKG90LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwob3Qsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11'@;
put 'bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0o'@;
put 'cD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChvdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9'@;
put 'dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9'@;
put 'TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09UG4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sx'@;
put 'M109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGgu'@;
put 'aW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIs'@;
put 'RCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRo'@;
put 'Lm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4'@;
put 'NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBl'@;
put 'Ll9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEs'@;
put 'Yj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxi'@;
put 'LEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitm'@;
put 'ZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2ZlXT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9lLGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9amUp'@;
put 'fX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlm'@;
put 'b3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBn'@;
put 'PTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8'@;
put 'RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiks'@;
put 'SD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5'@;
put 'KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0'@;
put 'aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5j'@;
put 'b25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0u'@;
put 'cHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53'@;
put 'b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIp'@;
put 'LG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0'@;
put 'dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3Rv'@;
put 'dHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUy'@;
put 'NjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3Fy'@;
put 'KCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2'@;
put 'LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7'@;
put 'Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBt'@;
put 'KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3Ro'@;
put 'KSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7'@;
put 'cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndv'@;
put 'cmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7'@;
put 'cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihi'@;
put 'KX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09'@;
put 'dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8y'@;
put 'NjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5s'@;
put 'ZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBl'@;
put 'b2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZl'@;
put 'PTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndv'@;
put 'cmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIi'@;
put 'PT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0'@;
put 'aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJu'@;
put 'IHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9y'@;
put 'KGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0o'@;
put 'MHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tn'@;
put 'XT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYo'@;
put 'Zz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5n'@;
put 'dGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSso'@;
put 'MHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49'@;
put 'MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlz'@;
put 'LmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0'@;
put 'aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9'@;
put 'dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfTox'@;
put 'PT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29y'@;
put 'ZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9k'@;
put 'fSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5k'@;
put 'aXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9k'@;
put 'bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3Io'@;
put 'dmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1u'@;
put 'ZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0os'@;
put 'bmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtp'@;
put 'ZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIo'@;
put 'TiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQu'@;
put 'Y2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQo'@;
put 'KSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlz'@;
put 'dWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhp'@;
put 'cy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7'@;
put 'Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0'@;
put 'dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1'@;
put 'bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndv'@;
put 'cmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyks'@;
put 'dGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlz'@;
put 'Lm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5l'@;
put 'Z2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09'@;
put 'dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRo'@;
put 'aXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09'@;
put 'dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBu'@;
put 'KGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJv'@;
put 'dG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7'@;
put 'cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIs'@;
put 'dGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJl'@;
put 'ZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQo'@;
put 'dGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5y'@;
put 'ZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwo'@;
put 'dGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1m'@;
put 'dW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwi'@;
put 'cmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlz'@;
put 'LnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVk'@;
put 'TmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYm'@;
put 'IWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBN'@;
put 'KGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0'@;
put 'aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZm'@;
put 'ZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1m'@;
put 'dW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhp'@;
put 'cy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5w'@;
put 'cm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0o'@;
put 'RD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1E'@;
put 'LnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNw'@;
put 'bGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53'@;
put 'b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5'@;
put 'fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3'@;
put 'Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rp'@;
put 'b24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtp'@;
put 'ZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5l'@;
put 'dyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92'@;
put 'ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0'@;
put 'aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIp'@;
put 'Ll9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0'@;
put 'aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBu'@;
put 'KDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1'@;
put 'bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o'@;
put 'YixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1'@;
put 'ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2'@;
put 'YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExl'@;
put 'bmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5j'@;
put 'bXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9'@;
put 'cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixE'@;
put 'KXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRo'@;
put 'aXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMu'@;
put 'c3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTty'@;
put 'ZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVy'@;
put 'dFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9'@;
put 'ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3Vi'@;
put 'KE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8'@;
put 'RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1'@;
put 'cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikp'@;
put 'Ll9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sNTc3OTg6YXQ9PntmdW5jdGlvbiBJZShGLGFlKXtpZighRil0aHJvdyBuZXcgRXJyb3IoYWV8fCJBc3NlcnRpb24gZmFpbGVkIil9YXQuZXhwb3J0cz1JZSxJZS5lcXVhbD1mdW5jdGlvbihhZSx4LG0pe2lmKGFlIT14KXRo'@;
put 'cm93IG5ldyBFcnJvcihtfHwiQXNzZXJ0aW9uIGZhaWxlZDogIithZSsiICE9ICIreCl9fSw3ODI0NzooYXQsSWUpPT57InVzZSBzdHJpY3QiO3ZhciBGPUllO2Z1bmN0aW9uIHgobGUpe3JldHVybiAxPT09bGUubGVuZ3RoPyIwIitsZTpsZX1mdW5jdGlvbiBtKGxlKXtmb3IodmFyIE09IiIs'@;
put 'Tz0wO088bGUubGVuZ3RoO08rKylNKz14KGxlW09dLnRvU3RyaW5nKDE2KSk7cmV0dXJuIE19Ri50b0FycmF5PWZ1bmN0aW9uIGFlKGxlLE0pe2lmKEFycmF5LmlzQXJyYXkobGUpKXJldHVybiBsZS5zbGljZSgpO2lmKCFsZSlyZXR1cm5bXTt2YXIgTz1bXTtpZigic3RyaW5nIiE9dHlwZW9m'@;
put 'IGxlKXtmb3IodmFyIFI9MDtSPGxlLmxlbmd0aDtSKyspT1tSXT0wfGxlW1JdO3JldHVybiBPfWlmKCJoZXgiPT09TSlmb3IoKGxlPWxlLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKGxlPSIwIitsZSksUj0wO1I8bGUubGVuZ3RoO1IrPTIpTy5wdXNoKHBhcnNl'@;
put 'SW50KGxlW1JdK2xlW1IrMV0sMTYpKTtlbHNlIGZvcihSPTA7UjxsZS5sZW5ndGg7UisrKXt2YXIgej1sZS5jaGFyQ29kZUF0KFIpLEs9ej4+OCxJPTI1NSZ6O0s/Ty5wdXNoKEssSSk6Ty5wdXNoKEkpfXJldHVybiBPfSxGLnplcm8yPXgsRi50b0hleD1tLEYuZW5jb2RlPWZ1bmN0aW9uKE0s'@;
put 'Tyl7cmV0dXJuImhleCI9PT1PP20oTSk6TX19LDgzMjc0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYWYiLHttb250aHM6IkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNf'@;
put 'U2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTb25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0Rv'@;
put 'bmRlcmRhZ19WcnlkYWdfU2F0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NYV9EaV9Xb19Eb19Wcl9TYSIuc3BsaXQoIl8iKSxtZXJpZGllbVBhcnNlOi92bXxubS9pLGlzUE06'@;
put 'ZnVuY3Rpb24obSl7cmV0dXJuL15ubSQvaS50ZXN0KG0pfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDEyP00/InZtIjoiVk0iOk0/Im5tIjoiTk0ifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N'@;
put 'IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltWYW5kYWcgb21dIExUIixuZXh0RGF5OiJbTVx4ZjRyZSBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltHaXN0ZXIg'@;
put 'b21dIExUIixsYXN0V2VlazoiW0xhYXNdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib29yICVzIixwYXN0OiIlcyBnZWxlZGUiLHM6IiduIHBhYXIgc2Vrb25kZXMiLHNzOiIlZCBzZWtvbmRlcyIsbToiJ24gbWludXV0IixtbToiJWQgbWludXRl'@;
put 'IixoOiInbiB1dXIiLGhoOiIlZCB1cmUiLGQ6IiduIGRhZyIsZGQ6IiVkIGRhZSIsTToiJ24gbWFhbmQiLE1NOiIlZCBtYWFuZGUiLHk6IiduIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3Jl'@;
put 'dHVybiBtKygxPT09bXx8OD09PW18fG0+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2MTg2NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1mdW5jdGlvbihSKXtyZXR1cm4gMD09PVI/MDoxPT09Uj8x'@;
put 'OjI9PT1SPzI6UiUxMDA+PTMmJlIlMTAwPD0xMD8zOlIlMTAwPj0xMT80OjV9LG09e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2'@;
put 'MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0'@;
put 'YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRc'@;
put 'dTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1'@;
put 'MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2'@;
put 'MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYzM1x1MDYy'@;
put 'N1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRhXHUwNjQ4'@;
put 'XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0N1x1MDYz'@;
put 'MSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1MDY0N1x1'@;
put 'MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjI3'@;
put 'XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxsZT1mdW5jdGlvbihSKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oeixLLEksayl7dmFyIEU9eCh6KSxqPW1bUl1beCh6KV07cmV0dXJuIDI9PT1FJiYoaj1qW0s/MDoxXSksai5yZXBsYWNlKC8lZC9pLHopfX0sTT1bIlx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1'@;
put 'MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDYyN1x1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOSIsIlx1MDYyM1x1MDY0OFx1MDYyYSIsIlx1MDYz'@;
put 'M1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2FlLmRlZmluZUxvY2Fs'@;
put 'ZSgiYXItZHoiLHttb250aHM6TSxtb250aHNTaG9ydDpNLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYy'@;
put 'MV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJf'@;
put 'Iiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYz'@;
put 'M19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9y'@;
put 'bWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1'@;
put 'bmN0aW9uKFIpe3JldHVybiJcdTA2NDUiPT09Un0sbWVyaWRpZW06ZnVuY3Rpb24oUix6LEspe3JldHVybiBSPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUw'@;
put 'NjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBc'@;
put 'dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJm'@;
put 'IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOmxlKCJzIiksc3M6bGUoInMiKSxtOmxlKCJtIiksbW06'@;
put 'bGUoIm0iKSxoOmxlKCJoIiksaGg6bGUoImgiKSxkOmxlKCJkIiksZGQ6bGUoImQiKSxNOmxlKCJNIiksTU06bGUoIk0iKSx5OmxlKCJ5IikseXk6bGUoInkiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6'@;
put 'NH19KX0oRigxNjY3NikpfSwxNzA3ODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFyLWt3Iix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUw'@;
put 'NjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJh'@;
put 'X1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUw'@;
put 'NjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhf'@;
put 'XHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2'@;
put 'MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIx'@;
put 'X1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMz'@;
put 'X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3Jt'@;
put 'YXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2'@;
put 'NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJk'@;
put 'ZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6'@;
put 'ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4'@;
put 'XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1'@;
put 'MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIs'@;
put 'eXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19KX0oRigxNjY3NikpfSw3Nzc3NjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoi'@;
put 'NiIsNzoiNyIsODoiOCIsOToiOSIsMDoiMCJ9LG09ZnVuY3Rpb24oeil7cmV0dXJuIDA9PT16PzA6MT09PXo/MToyPT09ej8yOnolMTAwPj0zJiZ6JTEwMDw9MTA/Mzp6JTEwMD49MTE/NDo1fSxsZT17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUw'@;
put 'NjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFc'@;
put 'dTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRh'@;
put 'XHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2'@;
put 'NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUw'@;
put 'NjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3'@;
put 'XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1'@;
put 'MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUw'@;
put 'NjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2'@;
put 'MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5'@;
put 'XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1'@;
put 'XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LE09ZnVuY3Rpb24oeil7cmV0dXJuIGZ1bmN0aW9uKEssSSxrLEUpe3ZhciBqPW0oSyksVj1sZVt6XVttKEspXTtyZXR1cm4gMj09PWomJihWPVZbST8wOjFdKSxWLnJlcGxhY2UoLyVkL2ksSyl9fSxPPVsiXHUwNjRhXHUw'@;
put 'NjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUw'@;
put 'NjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUw'@;
put 'NjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07YWUuZGVmaW5lTG9jYWxlKCJhci1seSIse21vbnRoczpPLG1vbnRoc1Nob3J0Ok8sd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9c'@;
put 'dTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVc'@;
put 'dTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1'@;
put 'MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYy'@;
put 'ZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExM'@;
put 'OiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oeil7cmV0dXJuIlx1MDY0NSI9PT16fSxtZXJpZGllbTpmdW5jdGlvbih6LEssSSl7cmV0dXJuIHo8MTI/Ilx1MDYzNSI6'@;
put 'Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1MDYzOVx1'@;
put 'MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5'@;
put 'XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy'@;
put 'ZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6TSgicyIpLHNzOk0oInMiKSxtOk0oIm0iKSxtbTpNKCJtIiksaDpNKCJoIiksaGg6TSgiaCIpLGQ6TSgiZCIpLGRkOk0oImQiKSxNOk0oIk0iKSxNTTpNKCJNIikseTpNKCJ5IikseXk6TSgi'@;
put 'eSIpfSxwcmVwYXJzZTpmdW5jdGlvbih6KXtyZXR1cm4gei5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHope3JldHVybiB6LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oSyl7cmV0dXJuIHhbS119KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6'@;
put 'Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sNTY3ODk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhci1tYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1'@;
put 'MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYz'@;
put 'NFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1'@;
put 'MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRh'@;
put 'XHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUw'@;
put 'NjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYy'@;
put 'N1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjI3XHUwNjJkXHUwNjJmX1x1MDYyN1x1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0'@;
put 'YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdE'@;
put 'YXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUw'@;
put 'NjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0'@;
put 'V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxh'@;
put 'c3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYy'@;
put 'Ylx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGho'@;
put 'OiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZc'@;
put 'dTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2ODk3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUw'@;
put 'NjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxtPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2Iiwi'@;
put 'XHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiYXItc2EiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3'@;
put 'XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUw'@;
put 'NjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1No'@;
put 'b3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0'@;
put 'OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhfXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUw'@;
put 'NjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2'@;
put 'MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2'@;
put 'MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYy'@;
put 'OFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJp'@;
put 'ZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybiJcdTA2NDUiPT09TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1'@;
put 'MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6'@;
put 'ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2Vl'@;
put 'azoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2'@;
put 'NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQg'@;
put 'XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5'@;
put 'Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihPKXtyZXR1cm4g'@;
put 'bVtPXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDcxNTg1'@;
put 'OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYXItdG4iLHttb250aHM6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMz'@;
put 'X1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUw'@;
put 'NjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFc'@;
put 'dTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2'@;
put 'NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1'@;
put 'MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUw'@;
put 'NjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'U2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUw'@;
put 'NjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI'@;
put 'Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2Mzlc'@;
put 'dTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYz'@;
put 'OVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUw'@;
put 'NjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2'@;
put 'NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3'@;
put 'XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUw'@;
put 'NjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjIwOTc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIs'@;
put 'NToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUw'@;
put 'NjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sbGU9ZnVuY3Rpb24oSyl7cmV0dXJuIDA9PT1LPzA6MT09PUs/MToyPT09Sz8yOkslMTAwPj0zJiZLJTEwMDw9MTA/MzpLJTEwMD49MTE/NDo1fSxNPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJc'@;
put 'dTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYy'@;
put 'YVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2'@;
put 'NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1'@;
put 'MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNc'@;
put 'dTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2'@;
put 'MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUg'@;
put 'XHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBc'@;
put 'dTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1'@;
put 'MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUi'@;
put 'LCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2'@;
put 'MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sTz1mdW5jdGlvbihLKXtyZXR1cm4gZnVuY3Rpb24oSSxrLEUsail7dmFyIFY9bGUoSSksQj1NW0tdW2xlKEkpXTtyZXR1cm4gMj09PVYmJihCPUJbaz8wOjFdKSxCLnJlcGxhY2UoLyVkL2ksSSl9fSxSPVsi'@;
put 'XHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4IiwiXHUwNjRh'@;
put 'XHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUw'@;
put 'NjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07YWUuZGVmaW5lTG9jYWxlKCJhciIse21vbnRoczpSLG1vbnRoc1Nob3J0OlIsd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1'@;
put 'MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVc'@;
put 'dTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1'@;
put 'MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46'@;
put 'Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0gWVlZ'@;
put 'WSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oSyl7cmV0dXJuIlx1MDY0NSI9PT1LfSxtZXJpZGllbTpmdW5jdGlvbihLLEksayl7cmV0dXJuIEs8MTI/Ilx1'@;
put 'MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3IFx1'@;
put 'MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMg'@;
put 'XHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6'@;
put 'e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6TygicyIpLHNzOk8oInMiKSxtOk8oIm0iKSxtbTpPKCJtIiksaDpPKCJoIiksaGg6TygiaCIpLGQ6TygiZCIpLGRkOk8oImQiKSxNOk8oIk0iKSxNTTpPKCJNIikseTpPKCJ5Iiks'@;
put 'eXk6TygieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihLKXtyZXR1cm4gSy5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEkpe3JldHVybiBtW0ldfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0s'@;
put 'cG9zdGZvcm1hdDpmdW5jdGlvbihLKXtyZXR1cm4gSy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEkpe3JldHVybiB4W0ldfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDE1NjExOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihh'@;
put 'ZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiItaW5jaSIsNToiLWluY2kiLDg6Ii1pbmNpIiw3MDoiLWluY2kiLDgwOiItaW5jaSIsMjoiLW5jaSIsNzoiLW5jaSIsMjA6Ii1uY2kiLDUwOiItbmNpIiwzOiItXHhmY25jXHhmYyIsNDoiLVx4ZmNuY1x4ZmMiLDEwMDoiLVx4ZmNuY1x4ZmMiLDY6'@;
put 'Ii1uY1x1MDEzMSIsOToiLXVuY3UiLDEwOiItdW5jdSIsMzA6Ii11bmN1Iiw2MDoiLVx1MDEzMW5jXHUwMTMxIiw5MDoiLVx1MDEzMW5jXHUwMTMxIn07YWUuZGVmaW5lTG9jYWxlKCJheiIse21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3Nl'@;
put 'bnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydFx1MDI1OXNpX1x4YzdcdTAyNTlyXHUwMTVm'@;
put 'XHUwMjU5bmJcdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5X0NceGZjbVx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX0NceGZjbVx1MDI1OV9cdTAxNWVcdTAyNTluYlx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJCYXpfQnpFX1x4'@;
put 'YzdBeF9ceGM3XHUwMjU5cl9DQXhfQ1x4ZmNtX1x1MDE1ZVx1MDI1OW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkJ6X0JFX1x4YzdBX1x4YzdcdTAyNTlfQ0FfQ1x4ZmNfXHUwMTVlXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6'@;
put 'IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3NhYmFo'@;
put 'IHNhYXRdIExUIixuZXh0V2VlazoiW2dcdTAyNTlsXHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXHUwMjU5bl0gTFQiLGxhc3RXZWVrOiJba2VceGU3XHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixzYW1lRWxz'@;
put 'ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHUwMjU5dnZcdTAyNTlsIixzOiJiaXIgbmVceGU3XHUwMjU5IHNhbml5XHUwMjU5IixzczoiJWQgc2FuaXlcdTAyNTkiLG06ImJpciBkXHUwMjU5cWlxXHUwMjU5IixtbToiJWQgZFx1MDI1OXFpcVx1MDI1'@;
put 'OSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIGlsIix5eToiJWQgaWwifSxtZXJpZGllbVBhcnNlOi9nZWNcdTAyNTl8c1x1MDI1OWhcdTAyNTlyfGdceGZjbmRceGZjenxheFx1MDE1'@;
put 'ZmFtLyxpc1BNOmZ1bmN0aW9uKGxlKXtyZXR1cm4vXihnXHhmY25kXHhmY3p8YXhcdTAxNWZhbSkkLy50ZXN0KGxlKX0sbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8iZ2VjXHUwMjU5IjpsZTwxMj8ic1x1MDI1OWhcdTAyNTlyIjpsZTwxNz8iZ1x4ZmNuZFx4ZmN6Ijoi'@;
put 'YXhcdTAxNWZhbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDEzMW5jXHUwMTMxfGluY2l8bmNpfFx4ZmNuY1x4ZmN8bmNcdTAxMzF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24obGUpe2lmKDA9PT1sZSlyZXR1cm4gbGUrIi1cdTAxMzFuY1x1MDEzMSI7dmFyIE09bGUl'@;
put 'MTA7cmV0dXJuIGxlKyh4W01dfHx4W2xlJTEwMC1NXXx8eFtsZT49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDYyNDU5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oTSxPLFIpe3JldHVybiJt'@;
put 'Ij09PVI/Tz8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoiaCI9PT1SP08/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQz'@;
put 'MFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6TSsiICIrZnVuY3Rpb24geChNLE8pe3ZhciBSPU0uc3BsaXQoIl8iKTtyZXR1cm4gTyUxMD09MSYmTyUxMDAhPTExP1JbMF06TyUxMD49MiYmTyUxMDw9NCYmKE8lMTAwPDEwfHxPJTEwMD49MjApP1JbMV06UlsyXX0oe3NzOk8/Ilx1'@;
put 'MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQz'@;
put 'X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOk8/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0'@;
put 'M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZc'@;
put 'dTA0M2QiLGhoOk8/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUw'@;
put 'NDU2XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1'@;
put 'MDQ1MVx1MDQzZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwXHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1'@;
put 'MDQzNFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtSXSwrTSl9YWUuZGVmaW5lTG9jYWxlKCJiZSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDMwXHUw'@;
put 'NDMzXHUwNDMwX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQ0N1x1MDQ0ZFx1'@;
put 'MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzBcdTA0NDFc'@;
put 'dTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJc'@;
put 'dTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDRiX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2Ff'@;
put 'XHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRj'@;
put 'X1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQ0'@;
put 'MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzMFx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNF9cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDQxXHUwNDMwXHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MV9cdTA0NDJcdTA0NDBc'@;
put 'dTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQ1Nlx1MDQzZl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Ml9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDNkXHUw'@;
put 'NDM1XHUwNDM2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUw'@;
put 'NDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1'@;
put 'MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1'@;
put 'MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJc'@;
put 'dTA0MzAiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDIzXHUwNDQzXHUwNDVlXSA/KD86XHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQ0M1x1MDQ0ZSk/ID9cXSA/ZGRk'@;
put 'ZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0'@;
put 'MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1N'@;
put 'TSBZWVlZIFx1MDQzMy4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDUxXHUwNDNkXHUwNDNkXHUwNDRmIFx1MDQ1ZV0gTFQiLG5leHREYXk6IltcdTA0MTdcdTA0MzBcdTA0NWVcdTA0NDJcdTA0'@;
put 'NDBcdTA0MzAgXHUwNDVlXSBMVCIsbGFzdERheToiW1x1MDQyM1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNDIzXSBkZGRkIFtcdTA0NWVdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXko'@;
put 'KSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCBbXHUwNDVlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUw'@;
put 'NDQzXHUwNDNiXHUwNDRiXSBkZGRkIFtcdTA0NWVdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzZlx1MDQ0MFx1MDQzMFx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDQzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0MzBc'@;
put 'dTA0M2JcdTA0NGNcdTA0M2FcdTA0NTYgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtLG1tOm0saDptLGhoOm0sZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjIixkZDptLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06bSx5OiJcdTA0'@;
put 'MzNcdTA0M2VcdTA0MzQiLHl5Om19LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YnxcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGJ8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMC8saXNQTTpmdW5j'@;
put 'dGlvbihNKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwKSQvLnRlc3QoTSl9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGIiOk08MTI/Ilx1MDQ0MFx1MDQz'@;
put 'MFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YiI6TTwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDU2fFx1MDQ0YnxcdTA0MzNcdTA0MzApLyxvcmRpbmFsOmZ1'@;
put 'bmN0aW9uKE0sTyl7c3dpdGNoKE8pe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBNJTEwIT0yJiZNJTEwIT0zfHxNJTEwMD09MTJ8fE0lMTAwPT0xMz9NKyItXHUwNDRiIjpNKyItXHUwNDU2IjtjYXNlIkQiOnJldHVybiBNKyItXHUwNDMzXHUwNDMw'@;
put 'IjtkZWZhdWx0OnJldHVybiBNfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sOTE4MjU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJiZyIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQw'@;
put 'XHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUw'@;
put 'NDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1'@;
put 'MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M19cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQz'@;
put 'Zlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxp'@;
put 'dCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFc'@;
put 'dTA0NDBcdTA0NGZcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDRhXHUwNDQwXHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0NDFcdTA0NGFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2Rh'@;
put 'eXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDRhXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu'@;
put 'OiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQg'@;
put 'TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMl0g'@;
put 'TFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQzMl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDFjXHUwNDM4'@;
put 'XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzhcdTA0NGZdIGRkZGQgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6'@;
put 'IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0ICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzggJXMiLHM6Ilx1MDQzZFx1MDQ0Zlx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0'@;
put 'NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUw'@;
put 'NDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLHc6Ilx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzMCIsd3c6IiVkIFx1MDQ0'@;
put 'MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzOCIsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIix5OiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIl'@;
put 'ZCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVu'@;
put 'Y3Rpb24obSl7dmFyIGxlPW0lMTAsTT1tJTEwMDtyZXR1cm4gMD09PW0/bSsiLVx1MDQzNVx1MDQzMiI6MD09PU0/bSsiLVx1MDQzNVx1MDQzZCI6TT4xMCYmTTwyMD9tKyItXHUwNDQyXHUwNDM4IjoxPT09bGU/bSsiLVx1MDQzMlx1MDQzOCI6Mj09PWxlP20rIi1cdTA0NDBcdTA0MzgiOjc9'@;
put 'PT1sZXx8OD09PWxlP20rIi1cdTA0M2NcdTA0MzgiOm0rIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw3NTkxODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImJtIix7bW9udGhzOiJa'@;
put 'YW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NXHUwMjVia2Fsb19adXdcdTAyNWJua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU1x1MDI1YnRhbmJ1cnVrYWxvX1x1MDI1NGt1dFx1MDI1NGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2FsbyIu'@;
put 'c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWmFuX0Zld19NYXJfQXdpX01cdTAyNWJfWnV3X1p1bF9VdGlfU1x1MDI1YnRfXHUwMjU0a3VfTm93X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiS2FyaV9OdFx1MDI1Ym5cdTAyNWJuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikthcl9OdFx1MDI1Yl9UYXJfQXJhX0FsYV9KdW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJLYV9OdF9UYV9Bcl9BbF9KdV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9N'@;
put 'TS9ZWVlZIixMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIixMTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIixMTExMOiJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIn0sY2FsZW5kYXI6e3Nh'@;
put 'bWVEYXk6IltCaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHREYXk6IltTaW5pIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RvbiBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3REYXk6IltLdW51IGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3RcdTAyNWJt'@;
put 'XHUwMjVibmVuIGxcdTAyNWJyXHUwMjViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMga1x1MDI1NG5cdTAyNTQiLHBhc3Q6ImEgYlx1MDI1YiAlcyBiXHUwMjU0IixzOiJzYW5nYSBkYW1hIGRhbWEiLHNzOiJzZWtvbmRpICVkIixtOiJtaW5pdGkga2VsZW4i'@;
put 'LG1tOiJtaW5pdGkgJWQiLGg6ImxcdTAyNWJyXHUwMjViIGtlbGVuIixoaDoibFx1MDI1YnJcdTAyNWIgJWQiLGQ6InRpbGUga2VsZW4iLGRkOiJ0aWxlICVkIixNOiJrYWxvIGtlbGVuIixNTToia2FsbyAlZCIseToic2FuIGtlbGVuIix5eToic2FuICVkIn0sd2Vlazp7ZG93OjEsZG95OjR9'@;
put 'fSl9KEYoMTY2NzYpKX0sNDk2ODM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJc'@;
put 'dTA5ZWYiLDA6Ilx1MDllNiJ9LG09eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07YWUuZGVmaW5lTG9j'@;
put 'YWxlKCJibi1iZCIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUw'@;
put 'OThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5Yzdc'@;
put 'dTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0'@;
put 'KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUw'@;
put 'OTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWEx'@;
put 'XHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9c'@;
put 'dTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThc'@;
put 'dTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1'@;
put 'MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDli'@;
put 'Ml9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBc'@;
put 'dTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURh'@;
put 'eToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1'@;
put 'MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUw'@;
put 'OWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZc'@;
put 'dTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUw'@;
put 'OWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDll'@;
put 'YVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUw'@;
put 'OWJlXHUwOWE0fFx1MDlhZFx1MDljYlx1MDliMHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmV8XHUwOWIw'@;
put 'XHUwOWJlXHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PU8/TTw0P006TSsxMjoiXHUwOWFkXHUwOWNiXHUwOWIwIj09PU98fCJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiPT09Tz9NOiJcdTA5YTZc'@;
put 'dTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiPT09Tz9NPj0zP006TSsxMjoiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PU98fCJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIp'@;
put 'e3JldHVybiBNPDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6TTw2PyJcdTA5YWRcdTA5Y2JcdTA5YjAiOk08MTI/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6TTwxNT8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIjpNPDE4PyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIi'@;
put 'Ok08MjA/Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDM0MDY1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsx'@;
put 'OiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxtPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIs'@;
put 'Ilx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiYm4iLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJc'@;
put 'dTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDlj'@;
put 'MVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5'@;
put 'YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUw'@;
put 'OWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlm'@;
put 'X1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIw'@;
put 'X1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlh'@;
put 'NFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5Yjhc'@;
put 'dTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3Bs'@;
put 'aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2'@;
put 'XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBc'@;
put 'dTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUw'@;
put 'OWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5'@;
put 'YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThm'@;
put 'XHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIs'@;
put 'ZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6'@;
put 'IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1h'@;
put 'dDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDli'@;
put 'Zlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09TyYmTT49NHx8Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1PJiZNPDV8fCJc'@;
put 'dTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09Tz9NKzEyOk19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOk08MTA/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6TTwxNz8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUw'@;
put 'OWIwIjpNPDIwPyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwxMTAzNDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwZjIx'@;
put 'IiwyOiJcdTBmMjIiLDM6Ilx1MGYyMyIsNDoiXHUwZjI0Iiw1OiJcdTBmMjUiLDY6Ilx1MGYyNiIsNzoiXHUwZjI3Iiw4OiJcdTBmMjgiLDk6Ilx1MGYyOSIsMDoiXHUwZjIwIn0sbT17Ilx1MGYyMSI6IjEiLCJcdTBmMjIiOiIyIiwiXHUwZjIzIjoiMyIsIlx1MGYyNCI6IjQiLCJcdTBmMjUi'@;
put 'OiI1IiwiXHUwZjI2IjoiNiIsIlx1MGYyNyI6IjciLCJcdTBmMjgiOiI4IiwiXHUwZjI5IjoiOSIsIlx1MGYyMCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImJvIix7bW9udGhzOiJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDRcdTBmMGJcdTBmNTRcdTBmN2NfXHUw'@;
put 'ZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY2Nlx1MGY3NFx1MGY1OFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBm'@;
put 'NTZcdTBmNWVcdTBmNzJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjYzXHUwZjk0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGZiMlx1MGY3NFx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBm'@;
put 'MGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjYyXHUwZjkyXHUwZmIxXHUwZjUxXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGY0'@;
put 'Mlx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyXHUwZjBi'@;
put 'XHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZjVmXHUwZmIzXHUwZjBiMV9cdTBmNWZcdTBmYjNcdTBmMGIyX1x1'@;
put 'MGY1Zlx1MGZiM1x1MGYwYjNfXHUwZjVmXHUwZmIzXHUwZjBiNF9cdTBmNWZcdTBmYjNcdTBmMGI1X1x1MGY1Zlx1MGZiM1x1MGYwYjZfXHUwZjVmXHUwZmIzXHUwZjBiN19cdTBmNWZcdTBmYjNcdTBmMGI4X1x1MGY1Zlx1MGZiM1x1MGYwYjlfXHUwZjVmXHUwZmIzXHUwZjBiMTBfXHUwZjVm'@;
put 'XHUwZmIzXHUwZjBiMTFfXHUwZjVmXHUwZmIzXHUwZjBiMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnRSZWdleDovXihcdTBmNWZcdTBmYjNcdTBmMGJcZHsxLDJ9KS8sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjQ5XHUwZjcyXHUw'@;
put 'ZjBiXHUwZjU4XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUw'@;
put 'ZjBiXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTRcdTBmMGJcdTBmNjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUw'@;
put 'ZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjU4XHUwZjcy'@;
put 'XHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZcdTBmNzRfXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY2Nlx1MGZhNFx1MGY3'@;
put 'YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZjQ5XHUwZjcyX1x1MGY1Zlx1MGZiM19cdTBmNThcdTBmNzJcdTBmNDJfXHUwZjYzXHUwZmI3XHUwZjQyX1x1MGY1NVx1MGY3NFx1MGY2Ml9cdTBmNjZcdTBmNDRcdTBmNjZfXHUwZjY2XHUwZmE0'@;
put 'XHUwZjdhXHUwZjUzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxl'@;
put 'bmRhcjp7c2FtZURheToiW1x1MGY1MVx1MGY3Mlx1MGYwYlx1MGY2Mlx1MGY3Mlx1MGY0NF0gTFQiLG5leHREYXk6IltcdTBmNjZcdTBmNDRcdTBmMGJcdTBmNDlcdTBmNzJcdTBmNTNdIExUIixuZXh0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NVx1MGZiMlx1'@;
put 'MGY0Mlx1MGYwYlx1MGY2Mlx1MGY5N1x1MGY3YVx1MGY2Nlx1MGYwYlx1MGY1OF0sIExUIixsYXN0RGF5OiJbXHUwZjQxXHUwZjBiXHUwZjY2XHUwZjQ0XSBMVCIsbGFzdFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNThc'@;
put 'dTBmNTBcdTBmNjBcdTBmMGJcdTBmNThdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBmNjNcdTBmMGIiLHBhc3Q6IiVzIFx1MGY2Nlx1MGY5NFx1MGY1M1x1MGYwYlx1MGY2MyIsczoiXHUwZjYzXHUwZjU4XHUwZjBiXHUwZjY2XHUwZjQ0Iixz'@;
put 'czoiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjQ2XHUwZjBkIixtOiJcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNThcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLG1tOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNTgiLGg6Ilx1MGY0Nlx1MGY3NFx1'@;
put 'MGYwYlx1MGY1YVx1MGY3Y1x1MGY1MVx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsaGg6IiVkIFx1MGY0Nlx1MGY3NFx1MGYwYlx1MGY1YVx1MGY3Y1x1MGY1MSIsZDoiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixkZDoiJWQgXHUwZjQ5'@;
put 'XHUwZjcyXHUwZjUzXHUwZjBiIixNOiJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLE1NOiIlZCBcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTYiLHk6Ilx1MGY2M1x1MGY3Y1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIseXk6IiVk'@;
put 'IFx1MGY2M1x1MGY3YyJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTBmMjFcdTBmMjJcdTBmMjNcdTBmMjRcdTBmMjVcdTBmMjZcdTBmMjdcdTBmMjhcdTBmMjlcdTBmMjBdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlv'@;
put 'bihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Y3xcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZcdTBmMGJcdTBmNDBcdTBmNjZ8XHUwZjQ5XHUwZjcyXHUw'@;
put 'ZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0fFx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MnxcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTBmNThc'@;
put 'dTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MiPT09TyYmTT49NHx8Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI9PT1PJiZNPDV8fCJcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDIiPT09Tz9NKzEyOk19LG1lcmlkaWVtOmZ1'@;
put 'bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MiOk08MTA/Ilx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NiI6TTwxNz8iXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0IjpN'@;
put 'PDIwPyJcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDIiOiJcdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJcdTBmNThcdTBmN2MifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwyNzY3MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug'@;
put 'c3RyaWN0IjtmdW5jdGlvbiB4KEIsWSxYKXtyZXR1cm4gQisiICIrZnVuY3Rpb24gTShCLFkpe3JldHVybiAyPT09WT9mdW5jdGlvbiBPKEIpe3ZhciBZPXttOiJ2IixiOiJ2IixkOiJ6In07cmV0dXJuIHZvaWQgMD09PVlbQi5jaGFyQXQoMCldP0I6WVtCLmNoYXJBdCgwKV0rQi5zdWJzdHJp'@;
put 'bmcoMSl9KEIpOkJ9KHttbToibXVudXRlbm4iLE1NOiJtaXoiLGRkOiJkZXZlemgifVtYXSxCKX1mdW5jdGlvbiBsZShCKXtyZXR1cm4gQj45P2xlKEIlMTApOkJ9dmFyIFI9Wy9eZ2VuL2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9ebWV1L2ksL15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ks'@;
put 'L15nb3UvaSwvXmVvcy9pLC9eZ3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sej0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVi'@;
put 'cnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksaj1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTthZS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJHZW52ZXJfQ1x1MDJiY2h3ZXZyZXJfTWV1cnpoX0VicmVsX01h'@;
put 'ZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJHZW5fQ1x1MDJiY2h3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VsX0x1bl9NZXVyemhfTWVy'@;
put 'Y1x1MDJiY2hlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZTpqLGZ1bGxX'@;
put 'ZWVrZGF5c1BhcnNlOlsvXnN1bC9pLC9ebHVuL2ksL15tZXVyemgvaSwvXm1lcmNbXHUwMmJjXCddaGVyL2ksL155YW91L2ksL15nd2VuZXIvaSwvXnNhZG9ybi9pXSxzaG9ydFdlZWtkYXlzUGFyc2U6Wy9eU3VsL2ksL15MdW4vaSwvXk1ldS9pLC9eTWVyL2ksL15ZYW8vaSwvXkd3ZS9pLC9e'@;
put 'U2FkL2ldLG1pbldlZWtkYXlzUGFyc2U6aixtb250aHNSZWdleDp6LG1vbnRoc1Nob3J0UmVnZXg6eixtb250aHNTdHJpY3RSZWdleDovXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6'@;
put 'dSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGdlbnxjW1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxtb250aHNQYXJzZTpSLGxvbmdNb250aHNQYXJzZTpSLHNob3J0TW9udGhzUGFyc2U6Uixsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI'@;
put 'Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSIsTExMOiJEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIaXppdiBkYV0gTFQi'@;
put 'LG5leHREYXk6IltXYXJjXHUwMmJjaG9hemggZGFdIExUIixuZXh0V2VlazoiZGRkZCBbZGFdIExUIixsYXN0RGF5OiJbRGVjXHUwMmJjaCBkYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNldCBkYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImEtYmVubiAlcyIs'@;
put 'cGFzdDoiJXMgXHUwMmJjem8iLHM6InVuIG5lYmV1ZCBzZWdvbmRlbm5vXHhmOSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOngsaDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOngsTToidXIgbWl6IixNTTp4LHk6InVyIGJsb2F6Iix5eTpmdW5jdGlv'@;
put 'biBtKEIpe3N3aXRjaChsZShCKSl7Y2FzZSAxOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgOTpyZXR1cm4gQisiIGJsb2F6IjtkZWZhdWx0OnJldHVybiBCKyIgdmxvYXoifX19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oYVx4ZjF8dmV0KS8sb3JkaW5hbDpmdW5jdGlvbihC'@;
put 'KXtyZXR1cm4gQisoMT09PUI/ImFceGYxIjoidmV0Iil9LHdlZWs6e2RvdzoxLGRveTo0fSxtZXJpZGllbVBhcnNlOi9hLm0ufGcubS4vLGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuImcubS4iPT09Qn0sbWVyaWRpZW06ZnVuY3Rpb24oQixZLFgpe3JldHVybiBCPDEyPyJhLm0uIjoiZy5tLiJ9'@;
put 'fSl9KEYoMTY2NzYpKX0sMzgxNTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8pe3ZhciBSPWxlKyIgIjtzd2l0Y2goTyl7Y2FzZSJzcyI6cmV0dXJuIFIrKDE9PT1sZT8ic2VrdW5kYSI6Mj09PWxlfHwzPT09bGV8fDQ9PT1s'@;
put 'ZT8ic2VrdW5kZSI6InNla3VuZGkiKTtjYXNlIm0iOnJldHVybiBNPyJqZWRuYSBtaW51dGEiOiJqZWRuZSBtaW51dGUiO2Nhc2UibW0iOnJldHVybiBSKygxPT09bGU/Im1pbnV0YSI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4gTT8i'@;
put 'amVkYW4gc2F0IjoiamVkbm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiBSKygxPT09bGU/InNhdCI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gUisoMT09PWxlPyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIFIrKDE9PT1sZT8ibWpl'@;
put 'c2VjIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBSKygxPT09bGU/ImdvZGluYSI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8iZ29kaW5lIjoiZ29kaW5hIil9fWFlLmRlZmluZUxvY2FsZSgiYnMiLHttb250aHM6ImphbnVhcl9m'@;
put 'ZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxp'@;
put 'dCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3Vi'@;
put 'LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoi'@;
put 'RC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBb'@;
put 'bmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1'@;
put 'XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBkZGRkIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1'@;
put 'OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDoiZGFuIixkZDp4LE06Im1qZXNlYyIsTU06eCx5'@;
put 'OiJnb2RpbnUiLHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw1NDI4NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUo'@;
put 'ImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJfbWFyXHhlN19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyXHhlN19kJ2Fi'@;
put 'cmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWln'@;
put 'X2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJk'@;
put 'Zy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2R0X2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6'@;
put 'IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZLCBIOm1tIn0s'@;
put 'Y2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F2dWkgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbZGVtXHhlMCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxuZXh0'@;
put 'V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthaGlyIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIltlbF0gZGRkZCBbcGFzc2F0IGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVucyBzZWdvbnMiLHNzOiIlZCBzZWdvbnMiLG06InVu'@;
put 'IG1pbnV0IixtbToiJWQgbWludXRzIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmVzIixkOiJ1biBkaWEiLGRkOiIlZCBkaWVzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNvcyIseToidW4gYW55Iix5eToiJWQgYW55cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhl'@;
put 'OHxhKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXt2YXIgTT0xPT09bT8iciI6Mj09PW0/Im4iOjM9PT1tPyJyIjo0PT09bT8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1sZXx8IlciPT09bGUpJiYoTT0iYSIpLG0rTX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNzI2MTY6ZnVu'@;
put 'Y3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9e2Zvcm1hdDoibGVkZW5fXHhmYW5vcl9iXHUwMTU5ZXplbl9kdWJlbl9rdlx1MDExYnRlbl9cdTAxMGRlcnZlbl9cdTAxMGRlcnZlbmVjX3NycGVuX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkamVuX2xp'@;
put 'c3RvcGFkX3Byb3NpbmVjIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6ImxlZG5hX1x4ZmFub3JhX2JcdTAxNTllem5hX2R1Ym5hX2t2XHUwMTFidG5hX1x1MDEwZGVydm5hX1x1MDEwZGVydmVuY2Vfc3JwbmFfelx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqbmFfbGlzdG9wYWR1X3Byb3NpbmNl'@;
put 'Ii5zcGxpdCgiXyIpfSxtPSJsZWRfXHhmYW5vX2JcdTAxNTllX2R1Yl9rdlx1MDExYl9cdTAxMGR2bl9cdTAxMGR2Y19zcnBfelx4ZTFcdTAxNTlfXHUwMTU5XHhlZGpfbGlzX3BybyIuc3BsaXQoIl8iKSxsZT1bL15sZWQvaSwvXlx4ZmFuby9pLC9eYlx1MDE1OWUvaSwvXmR1Yi9pLC9ea3Zc'@;
put 'dTAxMWIvaSwvXihcdTAxMGR2bnxcdTAxMGRlcnZlbiR8XHUwMTBkZXJ2bmEpL2ksL14oXHUwMTBkdmN8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlKS9pLC9ec3JwL2ksL156XHhlMVx1MDE1OS9pLC9eXHUwMTU5XHhlZGovaSwvXmxpcy9pLC9ecHJvL2ldLE09L14obGVkZW58XHhmYW5v'@;
put 'cnxiXHUwMTU5ZXplbnxkdWJlbnxrdlx1MDExYnRlbnxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3Zc'@;
put 'dTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2k7ZnVuY3Rpb24gTyhLKXtyZXR1cm4gSz4xJiZLPDUmJjEhPX5+KEsvMTApfWZ1bmN0aW9uIFIoSyxJLGssRSl7dmFyIGo9SysiICI7c3dpdGNoKGspe2Nhc2UicyI6cmV0dXJuIEl8'@;
put 'fEU/InBceGUxciBzZWt1bmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJzZWt1bmR5Ijoic2VrdW5kIik6aisic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBJPyJtaW51dGEiOkU/Im1pbnV0dSI6Im1pbnV0b3UiO2Nhc2UibW0iOnJldHVybiBJ'@;
put 'fHxFP2orKE8oSyk/Im1pbnV0eSI6Im1pbnV0Iik6aisibWludXRhbWkiO2Nhc2UiaCI6cmV0dXJuIEk/ImhvZGluYSI6RT8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIEl8fEU/aisoTyhLKT8iaG9kaW55IjoiaG9kaW4iKTpqKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4g'@;
put 'SXx8RT8iZGVuIjoiZG5lbSI7Y2FzZSJkZCI6cmV0dXJuIEl8fEU/aisoTyhLKT8iZG55IjoiZG5ceGVkIik6aisiZG55IjtjYXNlIk0iOnJldHVybiBJfHxFPyJtXHUwMTFic1x4ZWRjIjoibVx1MDExYnNceGVkY2VtIjtjYXNlIk1NIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJtXHUwMTFic1x4'@;
put 'ZWRjZSI6Im1cdTAxMWJzXHhlZGNcdTAxNmYiKTpqKyJtXHUwMTFic1x4ZWRjaSI7Y2FzZSJ5IjpyZXR1cm4gSXx8RT8icm9rIjoicm9rZW0iO2Nhc2UieXkiOnJldHVybiBJfHxFP2orKE8oSyk/InJva3kiOiJsZXQiKTpqKyJsZXR5In19YWUuZGVmaW5lTG9jYWxlKCJjcyIse21vbnRoczp4'@;
put 'LG1vbnRoc1Nob3J0Om0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14obGVkZW58bGVkbmF8XHhmYW5vcmF8XHhmYW5vcnxiXHUwMTU5ZXplbnxiXHUwMTU5ZXpuYXxkdWJlbnxkdWJuYXxrdlx1MDExYnRlbnxrdlx1MDExYnRuYXxcdTAxMGRl'@;
put 'cnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58c3JwbmF8elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58XHUwMTU5XHhlZGpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDov'@;
put 'XihsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoibmVkXHUwMTFi'@;
put 'bGVfcG9uZFx1MDExYmxceGVkX1x4ZmF0ZXJceGZkX3N0XHUwMTU5ZWRhX1x1MDEwZHR2cnRla19wXHhlMXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVfcG9fXHhmYXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fXHhm'@;
put 'YXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSIsbDoi'@;
put 'RC4gTS4gWVlZWSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyB2XSBMVCIsbmV4dERheToiW3pceGVkdHJhIHZdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVy'@;
put 'biJbdl0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZlIHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6cmV0dXJuIlt2ZSBcdTAxMGR0dnJ0ZWsgdl0gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcFx4ZTF0ZWsgdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IHZdIExUIn19LGxhc3RE'@;
put 'YXk6Ilt2XHUwMTBkZXJhIHZdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51bG91IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbbWludWxceGU5XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJb'@;
put 'bWludWxvdSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW21pbnVsb3Ugc29ib3R1IHZdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwXHUw'@;
put 'MTU5ZWQgJXMiLHM6UixzczpSLG06UixtbTpSLGg6UixoaDpSLGQ6UixkZDpSLE06UixNTTpSLHk6Uix5eTpSfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjcwNDk6ZnVuY3Rpb24oYXQs'@;
put 'SWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJjdiIse21vbnRoczoiXHUwNDNhXHUwNGQxXHUwNDQwXHUwNDNiXHUwNDMwXHUwNDQ3X1x1MDQzZFx1MDQzMFx1MDQ0MFx1MDRkMVx1MDQ0MV9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUw'@;
put 'NDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBcdTA0NDJcdTA0M2NcdTA0MzVfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MFx1MDQzYlx1MDQzMF9cdTA0MzBcdTA0MzJcdTA0ZDFcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRm'@;
put 'M1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzBcdTA0MzIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQzYVx1MDRkMVx1MDQ0MF9cdTA0M2RcdTA0MzBcdTA0NDBfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBcdTA0Mzlf'@;
put 'XHUwNGFiXHUwNGQ3XHUwNDQwX1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBfXHUwNDMwXHUwNDMyXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MzJcdTA0'@;
put 'NGJcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQyXHUwNDQzXHUwNDNkXHUwNDQyXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYlx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0'@;
put 'NGVcdTA0M2RcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiXHUwNDNkXHUwNDM1XHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2NcdTA0MzBcdTA0'@;
put 'NDJcdTA0M2FcdTA0NDNcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDRiXHUwNDQwX1x1MDQ0Mlx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYl9cdTA0NGRcdTA0NDBcdTA0M2RfXHUwNDQ4XHUw'@;
put 'NGQxXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDBfXHUwNDQyXHUwNDNkX1x1MDQ0Ylx1MDQ0Ml9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGFiX1x1MDQ0ZFx1MDQ0MF9cdTA0NDhcdTA0M2MiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs'@;
put 'TFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IllZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddIixMTEw6IllZWVkgW1x1MDRhYlx1'@;
put 'MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0'@;
put 'NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MWZcdTA0MzBcdTA0NGZcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVd'@;
put 'IixuZXh0RGF5OiJbXHUwNDJiXHUwNDQwXHUwNDMwXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdERheToiW1x1MDRkNlx1MDQzZFx1MDQzNVx1MDQ0MF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1'@;
put 'MDQzNV0iLG5leHRXZWVrOiJbXHUwNGFhXHUwNDM4XHUwNDQyXHUwNDM1XHUwNDQxXSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0V2VlazoiW1x1MDQxOFx1MDQ0MFx1MDQ0Mlx1MDQzZFx1MDRkN10gZGRkZCBMVCBbXHUwNDQxXHUw'@;
put 'NDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihtKXtyZXR1cm4gbSsoL1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiQvaS5leGVjKG0pPyJcdTA0NDBcdTA0MzVcdTA0M2QiOi9cdTA0YWJc'@;
put 'dTA0NDNcdTA0M2IkL2kuZXhlYyhtKT8iXHUwNDQyXHUwNDMwXHUwNDNkIjoiXHUwNDQwXHUwNDMwXHUwNDNkIil9LHBhc3Q6IiVzIFx1MDQzYVx1MDQzMFx1MDQ0Zlx1MDQzYlx1MDQzYlx1MDQzMCIsczoiXHUwNDNmXHUwNGQ3XHUwNDQwLVx1MDQzOFx1MDQzYSBcdTA0YWJcdTA0MzVcdTA0'@;
put 'M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLHNzOiIlZCBcdTA0YWJcdTA0MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLG06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNc'@;
put 'dTA0NDIiLGg6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGQ6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0NDNcdTA0'@;
put 'M2QiLE06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLE1NOiIlZCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLHk6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0YWJcdTA0NDNcdTA0M2IiLHl5OiIlZCBcdTA0YWJcdTA0NDNcdTA0M2IifSxkYXlPZk1vbnRo'@;
put 'T3JkaW5hbFBhcnNlOi9cZHsxLDJ9LVx1MDQzY1x1MDRkN1x1MDQ0OC8sb3JkaW5hbDoiJWQtXHUwNDNjXHUwNGQ3XHUwNDQ4Iix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw5OTE3MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZp'@;
put 'bmVMb2NhbGUoImN5Iix7bW9udGhzOiJJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9B'@;
put 'd3NfTWVkX0h5ZF9UYWNoX1JoYWciLnNwbGl0KCJfIiksd2Vla2RheXM6IkR5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJfRHlkZCBJYXVfRHlkZCBHd2VuZXJfRHlkZCBTYWR3cm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0xsdW5fTWF3X01lcl9J'@;
put 'YXVfR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTGxfTWFfTWVfSWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIs'@;
put 'TExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hlZGRpdyBhbV0gTFQiLG5leHREYXk6IltZZm9yeSBhbV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbV0gTFQiLGxhc3REYXk6IltEZG9lIGFtXSBMVCIsbGFz'@;
put 'dFdlZWs6ImRkZGQgW2Rpd2V0aGFmIGFtXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibWV3biAlcyIscGFzdDoiJXMgeW4gXHhmNGwiLHM6InljaHlkaWcgZWlsaWFkYXUiLHNzOiIlZCBlaWxpYWQiLG06Im11bnVkIixtbToiJWQgbXVudWQiLGg6ImF3ciIsaGg6'@;
put 'IiVkIGF3ciIsZDoiZGl3cm5vZCIsZGQ6IiVkIGRpd3Jub2QiLE06Im1pcyIsTU06IiVkIG1pcyIseToiYmx3eWRkeW4iLHl5OiIlZCBmbHluZWRkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLG9yZGluYWw6ZnVuY3Rpb24obSl7'@;
put 'dmFyIE09IiI7cmV0dXJuIG0+MjA/TT00MD09PW18fDUwPT09bXx8NjA9PT1tfHw4MD09PW18fDEwMD09PW0/ImZlZCI6ImFpbiI6bT4wJiYoTT1bIiIsImFmIiwiaWwiLCJ5ZGQiLCJ5ZGQiLCJlZCIsImVkIiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWciLCJm'@;
put 'ZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXVttXSksbStNfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyMDYwNTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImRhIix7bW9udGhzOiJqYW51YXJfZmVi'@;
put 'cnVhcl9tYXJ0c19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2Rh'@;
put 'eXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4bl9tYW5fdGlyX29uc190b3JfZnJlX2xceGY4ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9f'@;
put 'ZnJfbFx4ZjgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgW2QuXSBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxj'@;
put 'YWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHREYXk6IltpIG1vcmdlbiBrbC5dIExUIixuZXh0V2VlazoicFx4ZTUgZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQiLGxhc3RXZWVrOiJbaV0gZGRkZFtzIGtsLl0gTFQiLHNhbWVFbHNlOiJMIn0s'@;
put 'cmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoiZlx4ZTUgc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXQgbWludXQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlIixNOiJl'@;
put 'biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTMzOTU6ZnVuY3Rpb24oYXQsSWUsRil7'@;
put 'IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2xlKyIgVGFnZSIsbGUr'@;
put 'IiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbbGUrIiBNb25hdGUiLGxlKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbbGUrIiBKYWhyZSIsbGUrIiBKYWhyZW4iXX07cmV0'@;
put 'dXJuIE0/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZGUtYXQiLHttb250aHM6IkpceGU0bm5lcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv'@;
put 'cnQ6IkpceGU0bi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1Nh'@;
put 'bXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt'@;
put 'bSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4'@;
put 'dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6'@;
put 'InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp4LG1tOiIlZCBNaW51dGVuIixoOngsaGg6IiVkIFN0dW5kZW4iLGQ6eCxkZDp4LHc6eCx3dzoiJWQgV29jaGVuIixNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy'@;
put 'fVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDk5ODM1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxo'@;
put 'OlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltsZSsiIFRhZ2UiLGxlKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W2xlKyIgTW9uYXRlIixs'@;
put 'ZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2xlKyIgSmFocmUiLGxlKyIgSmFocmVuIl19O3JldHVybiBNP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoImRlLWNoIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9K'@;
put 'dW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhh'@;
put 'Y3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19G'@;
put 'cl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBI'@;
put 'SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6Ilts'@;
put 'ZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp4LG1tOiIlZCBNaW51dGVuIixoOngsaGg6IiVkIFN0dW5kZW4iLGQ6eCxkZDp4LHc6eCx3'@;
put 'dzoiJWQgV29jaGVuIixNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDk0MDEzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3Qi'@;
put 'O2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltsZSsiIFRhZ2UiLGxlKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIs'@;
put 'ImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W2xlKyIgTW9uYXRlIixsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2xlKyIgSmFocmUiLGxlKyIgSmFocmVuIl19O3JldHVybiBNP3pbT11bMF06eltPXVsxXX1hZS5k'@;
put 'ZWZpbmVMb2NhbGUoImRlIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9K'@;
put 'dW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNv'@;
put 'Ll9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExM'@;
put 'OiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2Vl'@;
put 'azoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoi'@;
put 'JWQgU2VrdW5kZW4iLG06eCxtbToiJWQgTWludXRlbiIsaDp4LGhoOiIlZCBTdHVuZGVuIixkOngsZGQ6eCx3Ongsd3c6IiVkIFdvY2hlbiIsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6'@;
put 'NH19KX0oRigxNjY3NikpfSwxNDU3MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1bIlx1MDc5Nlx1MDdhY1x1MDc4Mlx1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4YVx1MDdhY1x1MDc4NFx1MDdiMFx1MDc4M1x1MDdhYVx1'@;
put 'MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4OVx1MDdhN1x1MDc4M1x1MDdhOFx1MDc5N1x1MDdhYSIsIlx1MDc4N1x1MDdhZFx1MDc5NVx1MDdiMFx1MDc4M1x1MDdhOVx1MDc4ZFx1MDdhYSIsIlx1MDc4OVx1MDdhZCIsIlx1MDc5Nlx1MDdhYlx1MDc4Mlx1MDdiMCIsIlx1MDc5Nlx1'@;
put 'MDdhYVx1MDc4ZFx1MDdhNlx1MDc4N1x1MDdhOCIsIlx1MDc4N1x1MDdhZlx1MDc4ZVx1MDdhNlx1MDc5MFx1MDdiMFx1MDc5M1x1MDdhYSIsIlx1MDc5MFx1MDdhY1x1MDc5NVx1MDdiMFx1MDc5M1x1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc4N1x1'@;
put 'MDdhZVx1MDc4Nlx1MDdiMFx1MDc5M1x1MDdhZlx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc4Mlx1MDdhZVx1MDc4OFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc5MVx1MDdhOFx1MDc5MFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdh'@;
put 'Nlx1MDc4M1x1MDdhYSJdLG09WyJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThcdTA3ODdcdTA3YjBcdTA3OGNcdTA3YTYiLCJcdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTYiLCJcdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBcdTA3OGVcdTA3YTdcdTA3ODNcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3'@;
put 'OGJcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdcdTA3OTBcdTA3YjBcdTA3OGFcdTA3YTZcdTA3OGNcdTA3YTgiLCJcdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YWEiLCJcdTA3ODBcdTA3YWVcdTA3ODJcdTA3YThcdTA3ODBcdTA3YThcdTA3ODNcdTA3YWEiXTth'@;
put 'ZS5kZWZpbmVMb2NhbGUoImR2Iix7bW9udGhzOngsbW9udGhzU2hvcnQ6eCx3ZWVrZGF5czptLHdlZWtkYXlzU2hvcnQ6bSx3ZWVrZGF5c01pbjoiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4X1x1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNl9cdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBfXHUwNzg0'@;
put 'XHUwN2FhXHUwNzhiXHUwN2E2X1x1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN19cdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFfXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvTS9ZWVlZIixMTDoi'@;
put 'RCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA3ODlcdTA3ODZ8XHUwNzg5XHUwNzhhLyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybiJcdTA3ODlcdTA3OGEiPT09TX0sbWVyaWRpZW06ZnVu'@;
put 'Y3Rpb24oTSxPLFIpe3JldHVybiBNPDEyPyJcdTA3ODlcdTA3ODYiOiJcdTA3ODlcdTA3OGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDc4OVx1MDdhOFx1MDc4N1x1MDdhNlx1MDc4Ylx1MDdhYV0gTFQiLG5leHREYXk6IltcdTA3ODlcdTA3YTdcdTA3OGJcdTA3YTZcdTA3ODlcdTA3YTdd'@;
put 'IExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1x1MDc4N1x1MDdhOFx1MDc4N1x1MDdiMFx1MDc5NFx1MDdhY10gTFQiLGxhc3RXZWVrOiJbXHUwNzhhXHUwN2E3XHUwNzg3XHUwN2E4XHUwNzhjXHUwN2FhXHUwNzg4XHUwN2E4XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0'@;
put 'aXZlVGltZTp7ZnV0dXJlOiJcdTA3OGNcdTA3YWNcdTA3ODNcdTA3YWRcdTA3OGVcdTA3YTZcdTA3ODdcdTA3YTggJXMiLHBhc3Q6Ilx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhOFx1MDc4Mlx1MDdiMCAlcyIsczoiXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUw'@;
put 'N2FhXHUwNzg2XHUwN2FlXHUwNzg1XHUwN2FjXHUwNzg3XHUwN2IwIixzczoiZCUgXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhIixtOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWNcdTA3ODdcdTA3YjAiLG1tOiJcdTA3ODlcdTA3'@;
put 'YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWEgJWQiLGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIsaGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhYSAlZCIsZDoiXHUwNzhiXHUw'@;
put 'N2FhXHUwNzg4XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixkZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzkwXHUwN2IwICVkIixNOiJcdTA3ODlcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLE1NOiJcdTA3ODlcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLHk6Ilx1'@;
put 'MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIseXk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhYSAlZCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rp'@;
put 'b24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjcsZG95OjEyfX0pfShGKDE2Njc2KSl9LDMxODU5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZWwiLHttb250aHNOb21pbmF0aXZlRWw6'@;
put 'Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I5XHUwM2Jm'@;
put 'XHUwM2MyX1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNhZlx1MDNiYlx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWNcdTAzYWNcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JkXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiYlx1MDNiOVx1MDNi'@;
put 'Zlx1MDNjMl9cdTAzOTFcdTAzY2RcdTAzYjNcdTAzYmZcdTAzYzVcdTAzYzNcdTAzYzRcdTAzYmZcdTAzYzJfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjZVx1MDNiMlx1MDNj'@;
put 'MVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWRcdTAzYmZcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyIi5zcGxpdCgiXyIpLG1vbnRoc0dlbml0aXZlRWw6'@;
put 'Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwM2MxXHUwM2M0XHUwM2FmXHUwM2Jm'@;
put 'XHUwM2M1X1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWNcdTAzYjFcdTAzOTBcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYlx1MDNhZlx1MDNi'@;
put 'Zlx1MDNjNV9cdTAzOTFcdTAzYzVcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYzNcdTAzYzRcdTAzYmZcdTAzYzVfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjOVx1MDNiMlx1MDNj'@;
put 'MVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWRcdTAzYmZcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1Ii5zcGxpdCgiXyIpLG1vbnRoczpmdW5jdGlvbihs'@;
put 'ZSxNKXtyZXR1cm4gbGU/InN0cmluZyI9PXR5cGVvZiBNJiYvRC8udGVzdChNLnN1YnN0cmluZygwLE0uaW5kZXhPZigiTU1NTSIpKSk/dGhpcy5fbW9udGhzR2VuaXRpdmVFbFtsZS5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWxbbGUubW9udGgoKV06dGhpcy5fbW9udGhzTm9t'@;
put 'aW5hdGl2ZUVsfSxtb250aHNTaG9ydDoiXHUwMzk5XHUwM2IxXHUwM2JkX1x1MDNhNlx1MDNiNVx1MDNiMl9cdTAzOWNcdTAzYjFcdTAzYzFfXHUwMzkxXHUwM2MwXHUwM2MxX1x1MDM5Y1x1MDNiMVx1MDNjYV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRfXHUwMzk5XHUwM2JmXHUwM2M1XHUw'@;
put 'M2JiX1x1MDM5MVx1MDNjNVx1MDNiM19cdTAzYTNcdTAzYjVcdTAzYzBfXHUwMzlmXHUwM2JhXHUwM2M0X1x1MDM5ZFx1MDNiZlx1MDNiNV9cdTAzOTRcdTAzYjVcdTAzYmEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDM5YVx1MDNjNVx1MDNjMVx1MDNiOVx1MDNiMVx1MDNiYVx1MDNhZV9c'@;
put 'dTAzOTRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYWRcdTAzYzFcdTAzYjFfXHUwM2E0XHUwM2MxXHUwM2FmXHUwM2M0XHUwM2I3X1x1MDNhNFx1MDNiNVx1MDNjNFx1MDNhY1x1MDNjMVx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYWRcdTAzYmNcdTAzYzBcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2Ix'@;
put 'XHUwM2MxXHUwM2IxXHUwM2MzXHUwM2JhXHUwM2I1XHUwM2M1XHUwM2FlX1x1MDNhM1x1MDNhY1x1MDNiMlx1MDNiMlx1MDNiMVx1MDNjNFx1MDNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAzOWFcdTAzYzVcdTAzYzFfXHUwMzk0XHUwM2I1XHUwM2M1X1x1MDNhNFx1MDNjMVx1'@;
put 'MDNiOV9cdTAzYTRcdTAzYjVcdTAzYzRfXHUwM2EwXHUwM2I1XHUwM2JjX1x1MDNhMFx1MDNiMVx1MDNjMV9cdTAzYTNcdTAzYjFcdTAzYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDM5YVx1MDNjNV9cdTAzOTRcdTAzYjVfXHUwM2E0XHUwM2MxX1x1MDNhNFx1MDNiNV9cdTAzYTBc'@;
put 'dTAzYjVfXHUwM2EwXHUwM2IxX1x1MDNhM1x1MDNiMSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZT4xMT9PPyJcdTAzYmNcdTAzYmMiOiJcdTAzOWNcdTAzOWMiOk8/Ilx1MDNjMFx1MDNiYyI6Ilx1MDNhMFx1MDM5YyJ9LGlzUE06ZnVuY3Rpb24obGUp'@;
put 'e3JldHVybiJcdTAzYmMiPT09KGxlKyIiKS50b0xvd2VyQ2FzZSgpWzBdfSxtZXJpZGllbVBhcnNlOi9bXHUwM2EwXHUwMzljXVwuP1x1MDM5Yz9cLj8vaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIs'@;
put 'TExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyRWw6e3NhbWVEYXk6IltcdTAzYTNcdTAzYWVcdTAzYmNcdTAzYjVcdTAzYzFcdTAzYjEge31dIExUIixuZXh0RGF5OiJbXHUwMzkxXHUwM2NkXHUwM2MxXHUwM2I5XHUwM2Jm'@;
put 'IHt9XSBMVCIsbmV4dFdlZWs6ImRkZGQgW3t9XSBMVCIsbGFzdERheToiW1x1MDNhN1x1MDNiOFx1MDNiNVx1MDNjMiB7fV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDY9PT10aGlzLmRheSgpPyJbXHUwM2M0XHUwM2JmIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1'@;
put 'MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiZl0gZGRkZCBbe31dIExUIjoiW1x1MDNjNFx1MDNiN1x1MDNiZCBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYjddIGRkZGQgW3t9XSBMVCJ9LHNhbWVFbHNlOiJM'@;
put 'In0sY2FsZW5kYXI6ZnVuY3Rpb24obGUsTSl7dmFyIE89dGhpcy5fY2FsZW5kYXJFbFtsZV0sUj1NJiZNLmhvdXJzKCk7cmV0dXJuIGZ1bmN0aW9uIHgobGUpe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZsZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09'@;
put 'T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxlKX0oTykmJihPPU8uYXBwbHkoTSkpLE8ucmVwbGFjZSgie30iLFIlMTI9PTE/Ilx1MDNjM1x1MDNjNFx1MDNiNyI6Ilx1MDNjM1x1MDNjNFx1MDNiOVx1MDNjMiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwM2MzXHUwM2I1ICVz'@;
put 'IixwYXN0OiIlcyBcdTAzYzBcdTAzYzFcdTAzYjlcdTAzYmQiLHM6Ilx1MDNiYlx1MDNhZlx1MDNiM1x1MDNiMSBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLHNzOiIlZCBcdTAzYjRcdTAzYjVcdTAzYzVc'@;
put 'dTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLG06Ilx1MDNhZFx1MDNiZFx1MDNiMSBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzY2MiLG1tOiIlZCBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWMiLGg6Ilx1MDNiY1x1MDNhZlx1'@;
put 'MDNiMSBcdTAzY2VcdTAzYzFcdTAzYjEiLGhoOiIlZCBcdTAzY2VcdTAzYzFcdTAzYjVcdTAzYzIiLGQ6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEiLGRkOiIlZCBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjVcdTAzYzIiLE06Ilx1MDNhZFx1MDNiZFx1MDNi'@;
put 'MVx1MDNjMiBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjFcdTAzYzIiLE1NOiIlZCBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjVcdTAzYzIiLHk6Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYmZcdTAzYzIiLHl5OiIlZCBcdTAzYzdcdTAzYzFc'@;
put 'dTAzY2NcdTAzYmRcdTAzYjlcdTAzYjEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwM2I3LyxvcmRpbmFsOiIlZFx1MDNiNyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNTU3ODU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmlj'@;
put 'dCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1hdSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01h'@;
put 'eV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJk'@;
put 'ZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRd'@;
put 'IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoi'@;
put 'JWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTAp'@;
put 'PyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo0fX0pfShGKDE2Njc2KSl9LDgzNzkyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tY2EiLHttb250aHM6'@;
put 'IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxp'@;
put 'dCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dl'@;
put 'X1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiWVlZWS1NTS1ERCIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0sY2FsZW5k'@;
put 'YXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6'@;
put 'e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250'@;
put 'aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9'@;
put 'PT1sZT8icmQiOiJ0aCIpfX0pfShGKDE2Njc2KSl9LDU3NjUxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tZ2IiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3Rf'@;
put 'U2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1Ro'@;
put 'dXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExU'@;
put 'UzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4'@;
put 'dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vj'@;
put 'b25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx'@;
put 'LDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDgxOTI5OmZ1'@;
put 'bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4taWUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNw'@;
put 'bGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g'@;
put 'WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5'@;
put 'IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFu'@;
put 'IGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3Zh'@;
put 'ciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTk4MTg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmlj'@;
put 'dCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1pbCIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01h'@;
put 'eV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRk'@;
put 'LCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQi'@;
put 'LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBk'@;
put 'YXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRo'@;
put 'IjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX19KX0oRigxNjY3NikpfSw2NjEyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4taW4iLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hf'@;
put 'QXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlf'@;
put 'TW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxv'@;
put 'bmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQi'@;
put 'LG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFn'@;
put 'byIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJz'@;
put 'In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6'@;
put 'MCxkb3k6Nn19KX0oRigxNjY3NikpfSwyNDkwMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLW56Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJl'@;
put 'cl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9G'@;
put 'cmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1t'@;
put 'OnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2Vl'@;
put 'azoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRz'@;
put 'IixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0o'@;
put 'c3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNzI3MjE6ZnVuY3Rp'@;
put 'b24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1zZyIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQo'@;
put 'Il8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'U2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZ'@;
put 'IixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0'@;
put 'XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhv'@;
put 'dXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBs'@;
put 'ZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTUxNTk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7'@;
put 'YWUuZGVmaW5lTG9jYWxlKCJlbyIse21vbnRoczoiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hXHUwMTZkZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFydF9h'@;
put 'cHJfbWFqX2p1bl9qdWxfYVx1MDE2ZGdfc2VwdF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZGltYW5cdTAxMDlvX2x1bmRvX21hcmRvX21lcmtyZWRvX1x1MDEzNWFcdTAxNmRkb192ZW5kcmVkb19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltX2x1bl9t'@;
put 'YXJkX21lcmtfXHUwMTM1YVx1MDE2ZF92ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9cdTAxMzVhX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJbbGFdIERbLWFu'@;
put 'IGRlXSBNTU1NLCBZWVlZIixMTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovW2Fw'@;
put 'XVwudFwubS9pLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuInAiPT09bS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbT4xMT9NPyJwLnQubS4iOiJQLlQuTS4iOk0/ImEudC5tLiI6IkEuVC5NLiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb'@;
put 'SG9kaWFcdTAxNmQgamVdIExUIixuZXh0RGF5OiJbTW9yZ2FcdTAxNmQgamVdIExUIixuZXh0V2VlazoiZGRkZFtuIGplXSBMVCIsbGFzdERheToiW0hpZXJhXHUwMTZkIGplXSBMVCIsbGFzdFdlZWs6IltwYXNpbnRhbl0gZGRkZFtuIGplXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp'@;
put 'bWU6e2Z1dHVyZToicG9zdCAlcyIscGFzdDoiYW50YVx1MDE2ZCAlcyIsczoia2Vsa2FqIHNla3VuZG9qIixzczoiJWQgc2VrdW5kb2oiLG06InVudSBtaW51dG8iLG1tOiIlZCBtaW51dG9qIixoOiJ1bnUgaG9ybyIsaGg6IiVkIGhvcm9qIixkOiJ1bnUgdGFnbyIsZGQ6IiVkIHRhZ29qIixN'@;
put 'OiJ1bnUgbW9uYXRvIixNTToiJWQgbW9uYXRvaiIseToidW51IGphcm8iLHl5OiIlZCBqYXJvaiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1hLyxvcmRpbmFsOiIlZGEiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDExNzgwOmZ1bmN0aW9uKGF0LEllLEYpeyFm'@;
put 'dW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxtPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8i'@;
put 'KSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLE09L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVt'@;
put 'YnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJv'@;
put 'X21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1IubW9udGgoKV06'@;
put 'eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmlj'@;
put 'dFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJkb21p'@;
put 'bmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3Zp'@;
put 'X3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExM'@;
put 'TDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIiso'@;
put 'MSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMi'@;
put 'OiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBz'@;
put 'ZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVz'@;
put 'ZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyMzQ2ODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15m'@;
put 'ZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmll'@;
put 'bWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcy1teCIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlv'@;
put 'X2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0s'@;
put 'bW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98'@;
put 'ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNf'@;
put 'bWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtk'@;
put 'ZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikr'@;
put 'Il0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3Mi'@;
put 'LG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQg'@;
put 'YVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KEYoMTY2NzYpKX0sNDQ5Mzg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFl'@;
put 'KXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLGxlPVsvXmVu'@;
put 'ZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJy'@;
put 'ZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMtdXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJy'@;
put 'aWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNS'@;
put 'ZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14o'@;
put 'ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNf'@;
put 'bWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiTU0vREQvWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBE'@;
put 'IFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5o'@;
put 'b3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExU'@;
put 'In0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixz'@;
put 'czoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4g'@;
put 'YVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDIxOTU0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3Zh'@;
put 'ciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxtPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFy'@;
put 'L2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLE09L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2ll'@;
put 'bWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9f'@;
put 'YWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJl'@;
put 'Z2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/'@;
put 'fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNf'@;
put 'anVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy'@;
put 'c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0i'@;
put 'fSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRX'@;
put 'ZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVy'@;
put 'biJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRv'@;
put 'IixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5'@;
put 'T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oRigxNjY3NikpfSwxMTQ1MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0'@;
put 'IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17czpbIm1ceGY1bmUgc2VrdW5kaSIsIm1ceGY1bmkgc2VrdW5kIiwicGFhciBzZWt1bmRpdCJdLHNzOltsZSsic2VrdW5kaSIsbGUrInNla3VuZGl0Il0sbTpbIlx4ZmNoZSBtaW51dGkiLCJceGZja3MgbWludXQiXSxtbTpbbGUrIiBtaW51'@;
put 'dGkiLGxlKyIgbWludXRpdCJdLGg6WyJceGZjaGUgdHVubmkiLCJ0dW5kIGFlZ2EiLCJceGZja3MgdHVuZCJdLGhoOltsZSsiIHR1bm5pIixsZSsiIHR1bmRpIl0sZDpbIlx4ZmNoZSBwXHhlNGV2YSIsIlx4ZmNrcyBwXHhlNGV2Il0sTTpbImt1dSBhamEiLCJrdXUgYWVnYSIsIlx4ZmNrcyBr'@;
put 'dXUiXSxNTTpbbGUrIiBrdXUiLGxlKyIga3V1ZCJdLHk6WyJceGZjaGUgYWFzdGEiLCJhYXN0YSIsIlx4ZmNrcyBhYXN0YSJdLHl5OltsZSsiIGFhc3RhIixsZSsiIGFhc3RhdCJdfTtyZXR1cm4gTT96W09dWzJdP3pbT11bMl06eltPXVsxXTpSP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVM'@;
put 'b2NhbGUoImV0Iix7bW9udGhzOiJqYWFudWFyX3ZlZWJydWFyX21ceGU0cnRzX2FwcmlsbF9tYWlfanV1bmlfanV1bGlfYXVndXN0X3NlcHRlbWJlcl9va3Rvb2Jlcl9ub3ZlbWJlcl9kZXRzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphYW5fdmVlYnJfbVx4ZTRydHNfYXByX21h'@;
put 'aV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMiLnNwbGl0KCJfIiksd2Vla2RheXM6InBceGZjaGFwXHhlNGV2X2VzbWFzcFx4ZTRldl90ZWlzaXBceGU0ZXZfa29sbWFwXHhlNGV2X25lbGphcFx4ZTRldl9yZWVkZV9sYXVwXHhlNGV2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv'@;
put 'cnQ6IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0i'@;
put 'LExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUXHhlNG5hLF0gTFQiLG5leHREYXk6IltIb21tZSxdIExUIixuZXh0V2VlazoiW0pceGU0cmdtaW5lXSBkZGRkIExUIixsYXN0RGF5OiJbRWlsZSxdIExUIixsYXN0V2VlazoiW0VlbG1pbmVdIGRk'@;
put 'ZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0cmFzdCIscGFzdDoiJXMgdGFnYXNpIixzOngsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6IiVkIHBceGU0ZXZhIixNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov'@;
put 'XGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQ0Njk3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZXUiLHttb250aHM6InVydGFycmlsYV9vdHNhaWxhX21hcnR4b2Ff'@;
put 'YXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLiIuc3BsaXQoIl8iKSxt'@;
put 'b250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImlnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLiIuc3BsaXQoIl8iKSx3'@;
put 'ZWVrZGF5c01pbjoiaWdfYWxfYXJfYXpfb2dfb2xfbHIiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSIsTExMOiJZWVlZW2tv'@;
put 'XSBNTU1NW3Jlbl0gRFthXSBISDptbSIsTExMTDoiZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLGw6IllZWVktTS1EIixsbDoiWVlZWVtrb10gTU1NIERbYV0iLGxsbDoiWVlZWVtrb10gTU1NIERbYV0gSEg6bW0iLGxsbGw6ImRkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6'@;
put 'bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2dhdXJdIExUW2V0YW5dIixuZXh0RGF5OiJbYmloYXJdIExUW2V0YW5dIixuZXh0V2VlazoiZGRkZCBMVFtldGFuXSIsbGFzdERheToiW2F0em9dIExUW2V0YW5dIixsYXN0V2VlazoiW2F1cnJla29dIGRkZGQgTFRbZXRhbl0iLHNhbWVFbHNlOiJM'@;
put 'In0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhcnJ1IixwYXN0OiJkdWVsYSAlcyIsczoic2VndW5kbyBiYXR6dWsiLHNzOiIlZCBzZWd1bmRvIixtOiJtaW51dHUgYmF0IixtbToiJWQgbWludXR1IixoOiJvcmR1IGJhdCIsaGg6IiVkIG9yZHUiLGQ6ImVndW4gYmF0IixkZDoiJWQgZWd1'@;
put 'biIsTToiaGlsYWJldGUgYmF0IixNTToiJWQgaGlsYWJldGUiLHk6InVydGUgYmF0Iix5eToiJWQgdXJ0ZSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw1MjkwMDpmdW5jdGlvbihhdCxJ'@;
put 'ZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNmYxIiwyOiJcdTA2ZjIiLDM6Ilx1MDZmMyIsNDoiXHUwNmY0Iiw1OiJcdTA2ZjUiLDY6Ilx1MDZmNiIsNzoiXHUwNmY3Iiw4OiJcdTA2ZjgiLDk6Ilx1MDZmOSIsMDoiXHUwNmYwIn0sbT17Ilx1MDZmMSI6IjEi'@;
put 'LCJcdTA2ZjIiOiIyIiwiXHUwNmYzIjoiMyIsIlx1MDZmNCI6IjQiLCJcdTA2ZjUiOiI1IiwiXHUwNmY2IjoiNiIsIlx1MDZmNyI6IjciLCJcdTA2ZjgiOiI4IiwiXHUwNmY5IjoiOSIsIlx1MDZmMCI6IjAifTthZS5kZWZpbmVMb2NhbGUoImZhIix7bW9udGhzOiJcdTA2OThcdTA2MjdcdTA2'@;
put 'NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZc'@;
put 'dTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0'@;
put 'NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1'@;
put 'MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0'@;
put 'Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2Mjhc'@;
put 'dTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5'@;
put 'XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1'@;
put 'MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDci'@;
put 'LnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjJjX1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIs'@;
put 'TEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxfFx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2Mjdc'@;
put 'dTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybi9cdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8udGVzdChNKX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDEyPyJcdTA2NDJcdTA2MjhcdTA2'@;
put 'NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSI6Ilx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDVcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJh'@;
put 'XSBMVCIsbmV4dERheToiW1x1MDY0MVx1MDYzMVx1MDYyZlx1MDYyNyBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDZjY1x1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNc'@;
put 'dTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjdlXHUwNmNjXHUwNjM0XSBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjJmXHUwNjMxICVzIixwYXN0OiIlcyBcdTA2N2VcdTA2Y2Nc'@;
put 'dTA2MzQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLG06Ilx1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLG1tOiIlZCBcdTA2MmZcdTA2'@;
put 'NDJcdTA2Y2NcdTA2NDJcdTA2NDciLGg6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGQ6Ilx1MDZjY1x1MDZhOSBcdTA2MzFcdTA2NDhcdTA2MzIiLGRkOiIlZCBcdTA2MzFcdTA2NDhcdTA2MzIiLE06Ilx1'@;
put 'MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2NDciLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDciLHk6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUw'@;
put 'NmYwLVx1MDZmOV0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LGRheU9m'@;
put 'TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTA2NDUvLG9yZGluYWw6IiVkXHUwNjQ1Iix3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sNDk3NzU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9Im5vbGxhIHlrc2kga2Frc2kga29s'@;
put 'bWUgbmVsalx4ZTQgdmlpc2kga3V1c2kgc2VpdHNlbVx4ZTRuIGthaGRla3NhbiB5aGRla3NceGU0biIuc3BsaXQoIiAiKSxtPVsibm9sbGEiLCJ5aGRlbiIsImthaGRlbiIsImtvbG1lbiIsIm5lbGpceGU0biIsInZpaWRlbiIsImt1dWRlbiIseFs3XSx4WzhdLHhbOV1dO2Z1bmN0aW9uIGxl'@;
put 'KFIseixLLEkpe3ZhciBrPSIiO3N3aXRjaChLKXtjYXNlInMiOnJldHVybiBJPyJtdXV0YW1hbiBzZWt1bm5pbiI6Im11dXRhbWEgc2VrdW50aSI7Y2FzZSJzcyI6az1JPyJzZWt1bm5pbiI6InNla3VudGlhIjticmVhaztjYXNlIm0iOnJldHVybiBJPyJtaW51dXRpbiI6Im1pbnV1dHRpIjtj'@;
put 'YXNlIm1tIjprPUk/Im1pbnV1dGluIjoibWludXV0dGlhIjticmVhaztjYXNlImgiOnJldHVybiBJPyJ0dW5uaW4iOiJ0dW50aSI7Y2FzZSJoaCI6az1JPyJ0dW5uaW4iOiJ0dW50aWEiO2JyZWFrO2Nhc2UiZCI6cmV0dXJuIEk/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0IjtjYXNlImRk'@;
put 'IjprPUk/InBceGU0aXZceGU0biI6InBceGU0aXZceGU0XHhlNCI7YnJlYWs7Y2FzZSJNIjpyZXR1cm4gST8ia3V1a2F1ZGVuIjoia3V1a2F1c2kiO2Nhc2UiTU0iOms9ST8ia3V1a2F1ZGVuIjoia3V1a2F1dHRhIjticmVhaztjYXNlInkiOnJldHVybiBJPyJ2dW9kZW4iOiJ2dW9zaSI7Y2Fz'@;
put 'ZSJ5eSI6az1JPyJ2dW9kZW4iOiJ2dW90dGEifXJldHVybiBmdW5jdGlvbiBNKFIseil7cmV0dXJuIFI8MTA/ej9tW1JdOnhbUl06Un0oUixJKSsiICIra31hZS5kZWZpbmVMb2NhbGUoImZpIix7bW9udGhzOiJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVf'@;
put 'a2VzXHhlNGt1dV9oZWluXHhlNGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc1x4ZTRfaGVpblx4ZTRfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUi'@;
put 'LnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3Vf'@;
put 'bWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bdGFdIFlZWVkiLExMTDoiRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLExMTEw6ImRkZGQsIERvIE1NTU1b'@;
put 'dGFdIFlZWVksIFtrbG9dIEhILm1tIixsOiJELk0uWVlZWSIsbGw6IkRvIE1NTSBZWVlZIixsbGw6IkRvIE1NTSBZWVlZLCBba2xvXSBISC5tbSIsbGxsbDoiZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3RceGU0blx4ZTRceGU0bl0gW2tsb10g'@;
put 'TFQiLG5leHREYXk6IltodW9tZW5uYV0gW2tsb10gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9dIExUIixsYXN0RGF5OiJbZWlsZW5dIFtrbG9dIExUIixsYXN0V2VlazoiW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4'@;
put 'ZTRceGU0c3RceGU0IixwYXN0OiIlcyBzaXR0ZW4iLHM6bGUsc3M6bGUsbTpsZSxtbTpsZSxoOmxlLGhoOmxlLGQ6bGUsZGQ6bGUsTTpsZSxNTTpsZSx5OmxlLHl5OmxlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9'@;
put 'fSl9KEYoMTY2NzYpKX0sNjQyODI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVf'@;
put 'Tm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1Nh'@;
put 'YmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJN'@;
put 'TS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3Nh'@;
put 'IHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNl'@;
put 'Z3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRh'@;
put 'b24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3JldHVybiBtfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4NDIzNjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2Nh'@;
put 'bGUoImZvIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2Fwclx4ZWRsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9v'@;
put 'a3Rfbm92X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW5hZGFndXJfdFx4ZmRzZGFndXJfbWlrdWRhZ3VyX2hceGYzc2RhZ3VyX2ZyXHhlZGdnamFkYWd1cl9sZXlnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX3RceGZkc19t'@;
put 'aWtfaFx4ZjNzX2ZyXHhlZF9sZXkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGUxX3RceGZkX21pX2hceGYzX2ZyX2xlIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExM'@;
put 'OiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGNkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhjZCBtb3JnaW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGNkIGdq'@;
put 'XHhlMXIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBzdHVdIGRkZGQgW2tsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidW0gJXMiLHBhc3Q6IiVzIHNceGVkXHhmMGFuaSIsczoiZlx4ZTEgc2VrdW5kIixzczoiJWQgc2VrdW5kaXIiLG06ImVpbiBtaW51'@;
put 'dHR1ciIsbW06IiVkIG1pbnV0dGlyIixoOiJlaW4gdFx4ZWRtaSIsaGg6IiVkIHRceGVkbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToiZWluIG1ceGUxbmFceGYwdXIiLE1NOiIlZCBtXHhlMW5hXHhmMGlyIix5OiJlaXR0IFx4ZTFyIix5eToiJWQgXHhlMXIifSxkYXlPZk1v'@;
put 'bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTI4MzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJmci1jYSIse21vbnRoczoiamFudmll'@;
put 'cl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0'@;
put 'Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUu'@;
put 'X3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIs'@;
put 'TExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJb'@;
put 'SGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIs'@;
put 'bW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFs'@;
put 'OmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbSsoMT09PW0/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsoMT09PW0/InJlIjoiZSIpfX19KX0oRigxNjY3NikpfSwyMTQx'@;
put 'MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImZyLWNoIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4'@;
put 'ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21h'@;
put 'cmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh'@;
put 'cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpv'@;
put 'dXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1'@;
put 'dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1v'@;
put 'aXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJl'@;
put 'dHVybiBtKygxPT09bT8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKygxPT09bT8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4OTM2MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbGU9LyhqYW52'@;
put 'XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj98amFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJl'@;
put 'fGRceGU5Y2VtYnJlKS9pLE09Wy9eamFudi9pLC9eZlx4ZTl2ci9pLC9ebWFycy9pLC9eYXZyL2ksL15tYWkvaSwvXmp1aW4vaSwvXmp1aWwvaSwvXmFvXHhmYnQvaSwvXnNlcHQvaSwvXm9jdC9pLC9ebm92L2ksL15kXHhlOWMvaV07YWUuZGVmaW5lTG9jYWxlKCJmciIse21vbnRoczoiamFu'@;
put 'dmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9z'@;
put 'ZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNSZWdleDpsZSxtb250aHNTaG9ydFJlZ2V4OmxlLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxu'@;
put 'b3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/KS9pLG1vbnRoc1BhcnNlOk0sbG9uZ01vbnRoc1Bh'@;
put 'cnNlOk0sc2hvcnRNb250aHNQYXJzZTpNLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM'@;
put 'TDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRk'@;
put 'ZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVy'@;
put 'ZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIix3OiJ1bmUgc2VtYWluZSIsd3c6IiVkIHNlbWFpbmVzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfCkvLG9y'@;
put 'ZGluYWw6ZnVuY3Rpb24oUix6KXtzd2l0Y2goeil7Y2FzZSJEIjpyZXR1cm4gUisoMT09PVI/ImVyIjoiIik7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIFIrKDE9PT1SPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIFIrKDE9PT1SPyJy'@;
put 'ZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDY2OTg0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21haV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxp'@;
put 'dCgiXyIpLG09Imphbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpO2FlLmRlZmluZUxvY2FsZSgiZnkiLHttb250aHM6Imphbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGlt'@;
put 'YmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gTT8vLU1NTS0vLnRlc3QoTyk/bVtNLm1vbnRoKCldOnhbTS5tb250aCgpXTp4fSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzbmVpbl9tb2FuZGVp'@;
put 'X3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNpX01vX1RpX1dvX1RvX0ZyX1NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy'@;
put 'c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hqb2Vk'@;
put 'IG9tXSBMVCIsbmV4dERheToiW21vYXJuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbXHhmNGZyXHhmYm5lXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9lciAlcyIs'@;
put 'cGFzdDoiJXMgbHluIixzOiJpbiBwZWFyIHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW5ceGZhdCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4iLGQ6ImllbiBkZWkiLGRkOiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06IiVkIG1vYW5u'@;
put 'ZW4iLHk6ImllbiBqaWVyIix5eToiJWQgamllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihNKXtyZXR1cm4gTSsoMT09PU18fDg9PT1NfHxNPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2'@;
put 'NzYpKX0sOTM5NjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJnYSIse21vbnRoczpbIkVhblx4ZTFpciIsIkZlYWJocmEiLCJNXHhlMXJ0YSIsIkFpYnJlXHhlMW4iLCJCZWFsdGFpbmUiLCJNZWl0aGVhbWgiLCJJXHhmYWls'@;
put 'IiwiTFx4ZmFuYXNhIiwiTWVceGUxbiBGXHhmM21oYWlyIiwiRGVpcmVhZGggRlx4ZjNtaGFpciIsIlNhbWhhaW4iLCJOb2xsYWlnIl0sbW9udGhzU2hvcnQ6WyJFYW4iLCJGZWFiaCIsIk1ceGUxcnQiLCJBaWIiLCJCZWFsIiwiTWVpdGgiLCJJXHhmYWlsIiwiTFx4ZmFuIiwiTS5GLiIsIkQu'@;
put 'Ri4iLCJTYW1oIiwiTm9sbCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEXHhlOSBEb21obmFpZ2giLCJEXHhlOSBMdWFpbiIsIkRceGU5IE1ceGUxaXJ0IiwiRFx4ZTkgQ1x4ZTlhZGFvaW4iLCJEXHhlOWFyZGFvaW4iLCJEXHhlOSBoQW9pbmUiLCJEXHhlOSBTYXRoYWlybiJd'@;
put 'LHdlZWtkYXlzU2hvcnQ6WyJEb21oIiwiTHVhbiIsIk1ceGUxaXJ0IiwiQ1x4ZTlhZCIsIkRceGU5YXIiLCJBb2luZSIsIlNhdGgiXSx3ZWVrZGF5c01pbjpbIkRvIiwiTHUiLCJNXHhlMSIsIkNceGU5IiwiRFx4ZTkiLCJBIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6'@;
put 'IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbm5pdSBhZ10gTFQiLG5leHREYXk6IltBbVx4ZTFyYWNoIGFnXSBMVCIsbmV4'@;
put 'dFdlZWs6ImRkZGQgW2FnXSBMVCIsbGFzdERheToiW0lublx4ZTkgYWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNhaXRlXSBbYWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpICVzIixwYXN0OiIlcyBceGYzIHNoaW4iLHM6ImNceGZhcGxhIHNvaWNpbmQi'@;
put 'LHNzOiIlZCBzb2ljaW5kIixtOiJuXHhmM2ltXHhlOWFkIixtbToiJWQgblx4ZjNpbVx4ZTlhZCIsaDoidWFpciBhbiBjaGxvaWciLGhoOiIlZCB1YWlyIGFuIGNobG9pZyIsZDoibFx4ZTEiLGRkOiIlZCBsXHhlMSIsTToibVx4ZWQiLE1NOiIlZCBtXHhlZG9ubmEiLHk6ImJsaWFpbiIseXk6'@;
put 'IiVkIGJsaWFpbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oeil7cmV0dXJuIHorKDE9PT16PyJkIjp6JTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDc4ODQ5OmZ1bmN0aW9uKGF0'@;
put 'LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZ2QiLHttb250aHM6WyJBbSBGYW9pbGxlYWNoIiwiQW4gR2VhcnJhbiIsIkFtIE1ceGUwcnQiLCJBbiBHaWJsZWFuIiwiQW4gQ1x4ZThpdGVhbiIsIkFuIHQtXHhkMmdtaGlvcyIsIkFuIHQtSXVjaGFy'@;
put 'IiwiQW4gTFx4ZjluYXN0YWwiLCJBbiB0LVN1bHRhaW4iLCJBbiBEXHhlMG1oYWlyIiwiQW4gdC1TYW1oYWluIiwiQW4gRFx4ZjliaGxhY2hkIl0sbW9udGhzU2hvcnQ6WyJGYW9pIiwiR2VhciIsIk1ceGUwcnQiLCJHaWJsIiwiQ1x4ZThpdCIsIlx4ZDJnbWgiLCJJdWNoIiwiTFx4ZjluIiwi'@;
put 'U3VsdCIsIkRceGUwbWgiLCJTYW1oIiwiRFx4ZjliaCJdLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6WyJEaWRceGYybWhuYWljaCIsIkRpbHVhaW4iLCJEaW1ceGUwaXJ0IiwiRGljaWFkYWluIiwiRGlhcmRhb2luIiwiRGloYW9pbmUiLCJEaXNhdGhhaXJuZSJdLHdlZWtkYXlzU2hv'@;
put 'cnQ6WyJEaWQiLCJEaWwiLCJEaW0iLCJEaWMiLCJEaWEiLCJEaWgiLCJEaXMiXSx3ZWVrZGF5c01pbjpbIkRceGYyIiwiTHUiLCJNXHhlMCIsIkNpIiwiQXIiLCJIYSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQg'@;
put 'TU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQW4tZGl1Z2ggYWlnXSBMVCIsbmV4dERheToiW0EtbVx4ZTBpcmVhY2ggYWlnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FpZ10gTFQiLGxh'@;
put 'c3REYXk6IltBbi1kXHhlOCBhaWddIExUIixsYXN0V2VlazoiZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImFubiBhbiAlcyIscGFzdDoiYmhvIGNoaW9ubiAlcyIsczoiYmVhZ2FuIGRpb2dhbiIsc3M6IiVkIGRpb2dhbiIs'@;
put 'bToibWlvbmFpZCIsbW06IiVkIG1pb25haWRlYW4iLGg6InVhaXIiLGhoOiIlZCB1YWlyZWFuIixkOiJsYXRoYSIsZGQ6IiVkIGxhdGhhIixNOiJtXHhlY29zIixNTToiJWQgbVx4ZWNvc2FuIix5OiJibGlhZGhuYSIseXk6IiVkIGJsaWFkaG5hIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov'@;
put 'XGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbih6KXtyZXR1cm4geisoMT09PXo/ImQiOnolMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMzQyNzM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUu'@;
put 'ZGVmaW5lTG9jYWxlKCJnbCIse21vbnRoczoieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1XHhmMW9feHVsbG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGVjZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inhhbi5fZmViLl9tYXIuX2Fici5fbWFp'@;
put 'Ll94dVx4ZjEuX3h1bC5fYWdvLl9zZXQuX291dC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRvbWluZ29fbHVuc19tYXJ0ZXNfbVx4ZTlyY29yZXNfeG92ZXNfdmVucmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJk'@;
put 'b20uX2x1bi5fbWFyLl9tXHhlOXIuX3hvdi5fdmVuLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tXHhlOV94b192ZV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3Mi'@;
put 'LEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUgIisoMSE9'@;
put 'PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFceGUxICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbIisoMSE9PXRoaXMu'@;
put 'aG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltvbnRlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTEiOiJhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbb10gZGRkZCBbcGFzYWRvICIrKDEhPT10aGlzLmhvdXJzKCk/'@;
put 'Ilx4ZTFzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihtKXtyZXR1cm4gMD09PW0uaW5kZXhPZigidW4iKT8ibiIrbToiZW4gIittfSxwYXN0OiJoYWkgJXMiLHM6InVucyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBt'@;
put 'aW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmhhIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhi'@;
put 'YS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0MDYyMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17czpbIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDkyZlx1MDkz'@;
put 'ZSBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLCJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5NDcgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sc3M6W2xlKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUw'@;
put 'OTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLG06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0Mlx1MDkxZiJdLG1t'@;
put 'OltsZSsiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDIiXSxoOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBc'@;
put 'dTA5MzVcdTA5MzAiXSxoaDpbbGUrIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyIl0sZDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUw'@;
put 'OTI2XHUwOTQwXHUwOTM4Il0sZGQ6W2xlKyIgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkyNlx1MDk0MFx1MDkzOCJdLE06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUw'@;
put 'OTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0YiJdLE1NOltsZSsiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZc'@;
put 'dTA5MjhcdTA5NDciXSx5OlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzgiXSx5eTpbbGUrIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDJcdTA5'@;
put 'MjhcdTA5NDAiLGxlKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyIl19O3JldHVybiBSP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFsb25lOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2Vc'@;
put 'dTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0'@;
put 'Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUw'@;
put 'OTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1'@;
put 'MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1'@;
put 'MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5NDdcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQyXHUwOTI4XHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1'@;
put 'MDkxY1x1MDk0MVx1MDkzMlx1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUw'@;
put 'OTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5'@;
put 'MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4'@;
put 'XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDAuX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5'@;
put 'MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJf'@;
put 'IiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTJmXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUw'@;
put 'OTMwX1x1MDkyY1x1MDkzZlx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQ3XHUwOTI4XHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6'@;
put 'Ilx1MDkwNlx1MDkyZlx1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzMuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0Ll9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1'@;
put 'MDkzNlx1MDk0N1x1MDkyOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNl9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdfXHUwOTM4XHUwOTQxX1x1MDkzNlx1MDk0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNl'@;
put 'RXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExUUzoiQSBoOm1tOnNzIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExM'@;
put 'TDoiRCBNTU1NIFlZWVkgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1t'@;
put 'IFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MmZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJiXHUwOTNlXHUwOTMyXHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyXSBMVCIsbmV4dFdlZWs6IltcdTA5MmJcdTA5'@;
put 'NDFcdTA5MjFcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYlx1MDkzZVx1MDkxZlx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBh'@;
put 'c3Q6IiVzIFx1MDkwNlx1MDkyNlx1MDk0MFx1MDkwMiIsczp4LHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDp4LGRkOngsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwOTM1XHUwOTQ3XHUwOTMwKS8sb3JkaW5hbDpmdW5jdGlvbihsZSxNKXty'@;
put 'ZXR1cm4iRCI9PT1NP2xlKyJcdTA5MzVcdTA5NDdcdTA5MzAiOmxlfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwfFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMnxcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5'@;
put 'MzBcdTA5M2VcdTA5MDJ8XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIDEyPT09bGUmJihsZT0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIj09PU0/bGU8ND9sZTpsZSsxMjoiXHUwOTM4XHUwOTE1XHUwOTNlXHUw'@;
put 'OTMzXHUwOTQwXHUwOTAyIj09PU0/bGU6Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI9PT1NP2xlPjEyP2xlOmxlKzEyOiJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciPT09TT9sZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7'@;
put 'cmV0dXJuIGxlPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI6bGU8MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI6bGU8MTY/Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI6bGU8MjA/Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkx'@;
put 'Y1x1MDk0NyI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCJ9fSl9KEYoMTY2NzYpKX0sNjI2OTY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e3M6WyJ0aG9kZGVhIHNla29uZGFtbmkiLCJ0aG9kZGUgc2Vr'@;
put 'b25kIl0sc3M6W2xlKyIgc2Vrb25kYW1uaSIsbGUrIiBzZWtvbmQiXSxtOlsiZWthIG1pbnRhbiIsImVrIG1pbnV0Il0sbW06W2xlKyIgbWludGFtbmkiLGxlKyIgbWludGFtIl0saDpbImVrYSB2b3JhbiIsImVrIHZvciJdLGhoOltsZSsiIHZvcmFtbmkiLGxlKyIgdm9yYW0iXSxkOlsiZWth'@;
put 'IGRpc2FuIiwiZWsgZGlzIl0sZGQ6W2xlKyIgZGlzYW1uaSIsbGUrIiBkaXMiXSxNOlsiZWthIG1ob2luZWFuIiwiZWsgbWhvaW5vIl0sTU06W2xlKyIgbWhvaW5lYW1uaSIsbGUrIiBtaG9pbmUiXSx5OlsiZWthIHZvcnNhbiIsImVrIHZvcm9zIl0seXk6W2xlKyIgdm9yc2FtbmkiLGxlKyIg'@;
put 'dm9yc2FtIl19O3JldHVybiBSP3pbT11bMF06eltPXVsxXX1hZS5kZWZpbmVMb2NhbGUoImdvbS1sYXRuIix7bW9udGhzOntzdGFuZGFsb25lOiJKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyIi5zcGxpdCgi'@;
put 'XyIpLGZvcm1hdDoiSmFuZXJhY2hlYV9GZWJyZXJhY2hlYV9NYXJzYWNoZWFfQWJyaWxhY2hlYV9NYWlhY2hlYV9KdW5hY2hlYV9KdWxhaWFjaGVhX0Fnb3N0YWNoZWFfU2V0ZW1icmFjaGVhX090dWJyYWNoZWFfTm92ZW1icmFjaGVhX0RlemVtYnJhY2hlYSIuc3BsaXQoIl8iKSxpc0Zvcm1h'@;
put 'dDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NYXJzX0Fici5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0Jp'@;
put 'cmVzdGFyX1N1a3Jhcl9Tb24ndmFyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFpX1NtX01vX0J1X0JyX1N1X1NuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbdmF6dGFdIixMVFM6IkEgaDptbTpzcyBbdmF6dGFdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFt2YXp0YV0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFd'@;
put 'IixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBaXpdIExUIixuZXh0RGF5OiJbRmFsZWFtXSBMVCIsbmV4dFdlZWs6IltGdWRkbG9dIGRkZGRbLF0gTFQiLGxhc3REYXk6IltLYWxdIExUIixsYXN0V2VlazoiW0ZhdHRsb10gZGRk'@;
put 'ZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIGFkaW0iLHM6eCxzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDp4LE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpm'@;
put 'dW5jdGlvbihsZSxNKXtyZXR1cm4iRCI9PT1NP2xlKyJlciI6bGV9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obGUsTSl7cmV0dXJuIDEyPT09bGUmJihsZT0wKSwicmF0aSI9PT1N'@;
put 'P2xlPDQ/bGU6bGUrMTI6InNva2FsbGltIj09PU0/bGU6ImRvbnBhcmFtIj09PU0/bGU+MTI/bGU6bGUrMTI6InNhbmplIj09PU0/bGUrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJyYXRpIjpsZTwxMj8ic29rYWxsaW0iOmxlPDE2PyJkb25wYXJh'@;
put 'bSI6bGU8MjA/InNhbmplIjoicmF0aSJ9fSl9KEYoMTY2NzYpKX0sNjY5Mjg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGFlNyIsMjoiXHUwYWU4IiwzOiJcdTBhZTkiLDQ6Ilx1MGFlYSIsNToiXHUwYWViIiw2OiJcdTBhZWMiLDc6'@;
put 'Ilx1MGFlZCIsODoiXHUwYWVlIiw5OiJcdTBhZWYiLDA6Ilx1MGFlNiJ9LG09eyJcdTBhZTciOiIxIiwiXHUwYWU4IjoiMiIsIlx1MGFlOSI6IjMiLCJcdTBhZWEiOiI0IiwiXHUwYWViIjoiNSIsIlx1MGFlYyI6IjYiLCJcdTBhZWQiOiI3IiwiXHUwYWVlIjoiOCIsIlx1MGFlZiI6IjkiLCJc'@;
put 'dTBhZTYiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJndSIse21vbnRoczoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWVcdTBhYmVc'@;
put 'dTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmXHUwYWIyX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlXHUwYTg4X1x1MGE5MVx1MGE5N1x1MGFiOFx1MGFjZFx1MGE5Zl9cdTBhYjhcdTBhYWFcdTBh'@;
put 'Y2RcdTBhOWZcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhOFx1MGFiNVx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzdcdTBhYWVcdTBhY2RcdTBh'@;
put 'YWNcdTBhYjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMS5fXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxLl9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIw'@;
put 'XHUwYWJmLl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZS5fXHUwYTkxXHUwYTk3Ll9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzcuX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZC5fXHUwYWE4XHUwYWI1XHUwYWM3Ll9c'@;
put 'dTBhYTFcdTBhYmZcdTBhYjhcdTBhYzcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGFiMFx1MGFiNVx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjhcdTBhY2JcdTBhYWVcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIz'@;
put 'XHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFh'@;
put 'OFx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhYjBcdTBhYjVcdTBhYmZfXHUwYWI4XHUwYWNiXHUwYWFlX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM19cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMx'@;
put 'X1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGFiMF9cdTBhYjhcdTBhY2JfXHUwYWFlXHUwYTgyX1x1MGFhY1x1MGFjMV9cdTBhOTdcdTBhYzFfXHUwYWI2XHUwYWMxX1x1MGFiNiIuc3BsaXQoIl8i'@;
put 'KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExUUzoiQSBoOm1tOnNzIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ'@;
put 'WVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTg2XHUwYTljXSBMVCIsbmV4dERh'@;
put 'eToiW1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGE5N1x1MGE4N1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLGxhc3RXZWVrOiJbXHUwYWFhXHUwYWJlXHUwYTliXHUwYWIyXHUwYWJlXSBkZGRkLCBMVCIsc2FtZUVs'@;
put 'c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYWFlXHUwYWJlIixwYXN0OiIlcyBcdTBhYWFcdTBhYjlcdTBhYzdcdTBhYjJcdTBhYmUiLHM6Ilx1MGE4NVx1MGFhZVx1MGFjMVx1MGE5NSBcdTBhYWFcdTBhYjNcdTBhY2IiLHNzOiIlZCBcdTBhYjhcdTBhYzdcdTBhOTVcdTBh'@;
put 'ODJcdTBhYTEiLG06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLG1tOiIlZCBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLGg6Ilx1MGE4Zlx1MGE5NSBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGhoOiIlZCBcdTBhOTVcdTBhYjJcdTBhYmVc'@;
put 'dTBhOTUiLGQ6Ilx1MGE4Zlx1MGE5NSBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLGRkOiIlZCBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLE06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLE1NOiIlZCBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBh'@;
put 'Y2IiLHk6Ilx1MGE4Zlx1MGE5NSBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjciLHl5OiIlZCBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjcifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwYWU3XHUwYWU4XHUwYWU5XHUwYWVhXHUwYWViXHUwYWVjXHUwYWVkXHUw'@;
put 'YWVlXHUwYWVmXHUwYWU2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhYjBcdTBhYmVcdTBhYTR8XHUwYWFjXHUwYWFh'@;
put 'XHUwYWNiXHUwYWIwfFx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMHxcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTBhYjBcdTBhYmVcdTBhYTQiPT09Tz9NPDQ/TTpNKzEyOiJcdTBhYjhcdTBhYjVcdTBh'@;
put 'YmVcdTBhYjAiPT09Tz9NOiJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiPT09Tz9NPj0xMD9NOk0rMTI6Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI9PT1PP00rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwYWIwXHUwYWJlXHUwYWE0IjpNPDEw'@;
put 'PyJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiOk08MTc/Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI6TTwyMD8iXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIjoiXHUwYWIwXHUwYWJlXHUwYWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjQ4MDQ6ZnVuY3Rpb24oYXQs'@;
put 'SWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJoZSIse21vbnRoczoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUw'@;
put 'NWU4XHUwNWQ5XHUwNWRjX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVkNVx1MDVlMVx1MDVkOF9cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQw'@;
put 'XHUwNWQ1XHUwNWU3XHUwNWQ4XHUwNWQ1XHUwNWQxXHUwNWU4X1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZDFcdTA1ZTgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVmM19cdTA1ZTRcdTA1'@;
put 'ZDFcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZjNfXHUwNWUxXHUwNWU0'@;
put 'XHUwNWQ4XHUwNWYzX1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVmM19cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZjNfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWYzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1ZThcdTA1ZDBcdTA1ZTlcdTA1ZDVcdTA1ZGZfXHUwNWU5XHUwNWUwXHUwNWQ5X1x1MDVl'@;
put 'OVx1MDVkY1x1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZThcdTA1ZDFcdTA1ZDlcdTA1ZTJcdTA1ZDlfXHUwNWQ3XHUwNWRlXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDFcdTA1ZWEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNWQw'@;
put 'XHUwNWYzX1x1MDVkMVx1MDVmM19cdTA1ZDJcdTA1ZjNfXHUwNWQzXHUwNWYzX1x1MDVkNFx1MDVmM19cdTA1ZDVcdTA1ZjNfXHUwNWU5XHUwNWYzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1ZDBfXHUwNWQxX1x1MDVkMl9cdTA1ZDNfXHUwNWQ0X1x1MDVkNV9cdTA1ZTkiLnNwbGl0'@;
put 'KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkiLExMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBbXHUwNWQxXU1NTU0gWVlZWSBISDptbSIsbDoiRC9N'@;
put 'L1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNWQ0XHUwNWQ5XHUwNWQ1XHUwNWRkIFx1MDVkMVx1MDViZV1MVCIsbmV4dERheToiW1x1MDVkZVx1MDVkN1x1MDVl'@;
put 'OCBcdTA1ZDFcdTA1YmVdTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA1ZDFcdTA1ZTlcdTA1ZTJcdTA1ZDRdIExUIixsYXN0RGF5OiJbXHUwNWQwXHUwNWVhXHUwNWRlXHUwNWQ1XHUwNWRjIFx1MDVkMVx1MDViZV1MVCIsbGFzdFdlZWs6IltcdTA1ZDFcdTA1ZDlcdTA1ZDVcdTA1ZGRdIGRkZGQg'@;
put 'W1x1MDVkNFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkNVx1MDVkZiBcdTA1ZDFcdTA1ZTlcdTA1ZTJcdTA1ZDRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA1ZDFcdTA1ZTJcdTA1ZDVcdTA1ZDMgJXMiLHBhc3Q6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSAl'@;
put 'cyIsczoiXHUwNWRlXHUwNWUxXHUwNWU0XHUwNWU4IFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkNVx1MDVlYSIsc3M6IiVkIFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkNVx1MDVlYSIsbToiXHUwNWQzXHUwNWU3XHUwNWQ0IixtbToiJWQgXHUwNWQzXHUwNWU3XHUwNWQ1XHUwNWVhIixoOiJcdTA1'@;
put 'ZTlcdTA1ZTJcdTA1ZDQiLGhoOmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWU5XHUwNWUyXHUwNWVhXHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWU5XHUwNWUyXHUwNWQ1XHUwNWVhIn0sZDoiXHUwNWQ5XHUwNWQ1XHUwNWRkIixkZDpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/'@;
put 'Ilx1MDVkOVx1MDVkNVx1MDVkZVx1MDVkOVx1MDVkOVx1MDVkZCI6bSsiIFx1MDVkOVx1MDVkZVx1MDVkOVx1MDVkZCJ9LE06Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOSIsTU06ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTlcdTA1ZDlcdTA1ZDlc'@;
put 'dTA1ZGQiOm0rIiBcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTlcdTA1ZDlcdTA1ZGQifSx5OiJcdTA1ZTlcdTA1ZTBcdTA1ZDQiLHl5OmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWU5XHUwNWUwXHUwNWVhXHUwNWQ5XHUwNWQ5XHUwNWRkIjptJTEwPT0wJiYxMCE9PW0/bSsiIFx1MDVl'@;
put 'OVx1MDVlMFx1MDVkNCI6bSsiIFx1MDVlOVx1MDVlMFx1MDVkOVx1MDVkZCJ9fSxtZXJpZGllbVBhcnNlOi9cdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1'@;
put 'MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWQxXHUwNWQ1'@;
put 'XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMS9pLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuL14oXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVk'@;
put 'MVx1MDVlMlx1MDVlOFx1MDVkMSkkLy50ZXN0KG0pfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDU/Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOm08MTA/Ilx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6'@;
put 'bTwxMj9NPydcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2JzoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6bTwxOD9NPydcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2JzoiXHUwNWQwXHUwNWQ3XHUwNWU4'@;
put 'XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6Ilx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSJ9fSl9KEYoMTY2NzYpKX0sMjMwMTU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDk2NyIsMjoi'@;
put 'XHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LG09eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIs'@;
put 'Ilx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn0sbGU9Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzB8XHUwOTJiXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkw'@;
put 'NVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJ8XHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVc'@;
put 'dTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1MDkyOFx1MDkzNXxcdTA5MjhcdTA5MzVcdTA5MDIvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMnxcdTA5MjZcdTA5M2ZcdTA5MzgvaV07YWUuZGVmaW5lTG9jYWxlKCJoaSIse21vbnRoczp7Zm9ybWF0OiJcdTA5MWNcdTA5MjhcdTA5'@;
put 'MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFc'@;
put 'dTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJj'@;
put 'XHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkx'@;
put 'YV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1'@;
put 'MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUw'@;
put 'OTNjXHUwOTMwLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4Ll9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTA1XHUwOTE3Ll9cdTA5MzhcdTA5M2ZcdTA5MjQuX1x1MDkw'@;
put 'NVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi5fXHUwOTI4XHUwOTM1Ll9cdTA5MjZcdTA5M2ZcdTA5MzguIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1'@;
put 'MDkwMlx1MDkxN1x1MDkzMlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9c'@;
put 'dTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJfXHUwOTJjXHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1'@;
put 'MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0'@;
put 'KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkEgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIs'@;
put 'TExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpbL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMC9pLC9eXHUwOTJlXHUwOTNlXHUwOTMw'@;
put 'XHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5'@;
put 'MTVcdTA5NGRcdTA5MWZcdTA5NDIvaSwvXlx1MDkyOFx1MDkzNS9pLC9eXHUwOTI2XHUwOTNmXHUwOTM4L2ldLG1vbnRoc1JlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1'@;
put 'MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkw'@;
put 'OD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMw'@;
put 'fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5'@;
put 'MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250'@;
put 'aHNTaG9ydFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNl'@;
put 'XHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJ8XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDh8XHUwOTFjXHUw'@;
put 'OTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNHxcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUw'@;
put 'OTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVwuP3xcdTA5MjZc'@;
put 'dTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyYlx1MDkzY1x1'@;
put 'MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDA/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFj'@;
put 'XHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4P3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjQ/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0P1wuP3xcdTA5'@;
put 'MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzA/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDky'@;
put 'ZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzA/KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1'@;
put 'MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXC4/fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkz'@;
put 'NVwuP3xcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmFcdTA5'@;
put 'M2ZcdTA5MWJcdTA5MzJcdTA5NDddIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5MmVcdTA5NDdcdTA5MDIiLHBhc3Q6IiVzIFx1MDkyYVx1MDkzOVx1MDkzMlx1MDk0NyIsczoiXHUwOTE1XHUwOTQxXHUwOTFiIFx1MDkzOVx1MDk0MCBcdTA5'@;
put 'MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBcdTA5MThcdTA5MDJc'@;
put 'dTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MDJcdTA5MWZcdTA5NDciLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5NDciLE1NOiIlZCBc'@;
put 'dTA5MmVcdTA5MzlcdTA5NDBcdTA5MjhcdTA5NDciLHk6Ilx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzciLHl5OiIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzcifSxwcmVwYXJzZTpmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5'@;
put 'XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKHope3JldHVybiBtW3pdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvXGQvZyxmdW5jdGlvbih6KXtyZXR1cm4geFt6XX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5'@;
put 'MzBcdTA5M2VcdTA5MjR8XHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5fFx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMHxcdTA5MzZcdTA5M2VcdTA5MmUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihSLHope3JldHVybiAxMj09PVImJihSPTApLCJcdTA5MzBcdTA5M2VcdTA5MjQiPT09ej9S'@;
put 'PDQ/UjpSKzEyOiJcdTA5MzhcdTA5NDFcdTA5MmNcdTA5MzkiPT09ej9SOiJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiPT09ej9SPj0xMD9SOlIrMTI6Ilx1MDkzNlx1MDkzZVx1MDkyZSI9PT16P1IrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihSLHosSyl7cmV0dXJuIFI8'@;
put 'ND8iXHUwOTMwXHUwOTNlXHUwOTI0IjpSPDEwPyJcdTA5MzhcdTA5NDFcdTA5MmNcdTA5MzkiOlI8MTc/Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI6UjwyMD8iXHUwOTM2XHUwOTNlXHUwOTJlIjoiXHUwOTMwXHUwOTNlXHUwOTI0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYo'@;
put 'MTY2NzYpKX0sMTcxMzQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8pe3ZhciBSPWxlKyIgIjtzd2l0Y2goTyl7Y2FzZSJzcyI6cmV0dXJuIFIrKDE9PT1sZT8ic2VrdW5kYSI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ic2Vr'@;
put 'dW5kZSI6InNla3VuZGkiKTtjYXNlIm0iOnJldHVybiBNPyJqZWRuYSBtaW51dGEiOiJqZWRuZSBtaW51dGUiO2Nhc2UibW0iOnJldHVybiBSKygxPT09bGU/Im1pbnV0YSI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4gTT8iamVkYW4g'@;
put 'c2F0IjoiamVkbm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiBSKygxPT09bGU/InNhdCI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gUisoMT09PWxlPyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIFIrKDE9PT1sZT8ibWplc2VjIjoy'@;
put 'PT09bGV8fDM9PT1sZXx8ND09PWxlPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBSKygxPT09bGU/ImdvZGluYSI6Mj09PWxlfHwzPT09bGV8fDQ9PT1sZT8iZ29kaW5lIjoiZ29kaW5hIil9fWFlLmRlZmluZUxvY2FsZSgiaHIiLHttb250aHM6e2Zvcm1hdDoic2lqZVx1'@;
put 'MDEwZG5qYV92ZWxqYVx1MDEwZGVfb1x1MDE3ZXVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYSIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzaWplXHUwMTBkYW5qX3ZlbGphXHUwMTBkYV9vXHUwMTdl'@;
put 'dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJzaWouX3ZlbGouX29cdTAxN2V1Ll90cmEuX3N2aS5fbGlwLl9zcnAuX2tvbC5fcnVqLl9saXMuX3N0dS5fcHJv'@;
put 'LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX1x1MDEwZGV0Ll9w'@;
put 'ZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTSBZWVlZ'@;
put 'IixMTEw6IkRvIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEbyBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVy'@;
put 'biJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUw'@;
put 'MTBkZXIgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb1x1'@;
put 'MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3Byb1x1MDE2MWxpXSBkZGRkIFt1XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6InBhciBzZWt1bmRpIixz'@;
put 'czp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6ImRhbiIsZGQ6eCxNOiJtamVzZWMiLE1NOngseToiZ29kaW51Iix5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTA2NzA6ZnVuY3Rpb24o'@;
put 'YXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9InZhc1x4ZTFybmFwIGhceGU5dGZcdTAxNTFuIGtlZGRlbiBzemVyZFx4ZTFuIGNzXHhmY3RceGY2cnRceGY2a1x4ZjZuIHBceGU5bnRla2VuIHN6b21iYXRvbiIuc3BsaXQoIiAiKTtmdW5jdGlvbiBtKE8sUix6LEsp'@;
put 'e3ZhciBJPU87c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIEt8fFI/Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmMiOiJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJzcyI6cmV0dXJuIEkrKEt8fFIpPyIgbVx4ZTFzb2RwZXJjIjoiIG1ceGUxc29kcGVyY2UiO2Nhc2UibSI6cmV0'@;
put 'dXJuImVneSIrKEt8fFI/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJtbSI6cmV0dXJuIEkrKEt8fFI/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJoIjpyZXR1cm4iZWd5IisoS3x8Uj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiaGgiOnJldHVybiBJKyhLfHxSPyIgXHhmM3JhIjoiIFx4'@;
put 'ZjNyXHhlMWphIik7Y2FzZSJkIjpyZXR1cm4iZWd5IisoS3x8Uj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiZGQiOnJldHVybiBJKyhLfHxSPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJNIjpyZXR1cm4iZWd5IisoS3x8Uj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlIk1NIjpyZXR1cm4g'@;
put 'SSsoS3x8Uj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlInkiOnJldHVybiJlZ3kiKyhLfHxSPyIgXHhlOXYiOiIgXHhlOXZlIik7Y2FzZSJ5eSI6cmV0dXJuIEkrKEt8fFI/IiBceGU5diI6IiBceGU5dmUiKX1yZXR1cm4iIn1mdW5jdGlvbiBsZShPKXtyZXR1cm4oTz8iIjoiW21c'@;
put 'eGZhbHRdICIpKyJbIit4W3RoaXMuZGF5KCldKyJdIExUWy1rb3JdIn1hZS5kZWZpbmVMb2NhbGUoImh1Iix7bW9udGhzOiJqYW51XHhlMXJfZmVicnVceGUxcl9tXHhlMXJjaXVzX1x4ZTFwcmlsaXNfbVx4ZTFqdXNfalx4ZmFuaXVzX2pceGZhbGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9v'@;
put 'a3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbVx4ZTFyYy5fXHhlMXByLl9tXHhlMWouX2pceGZhbi5falx4ZmFsLl9hdWcuX3N6ZXB0Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdl'@;
put 'ZWtkYXlzOiJ2YXNceGUxcm5hcF9oXHhlOXRmXHUwMTUxX2tlZGRfc3plcmRhX2NzXHhmY3RceGY2cnRceGY2a19wXHhlOW50ZWtfc3pvbWJhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ2YXNfaFx4ZTl0X2tlZGRfc3plX2NzXHhmY3RfcFx4ZTluX3N6byIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c01pbjoidl9oX2tfc3plX2NzX3Bfc3pvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVkuIE1NTU0gRC4iLExMTDoiWVlZWS4gTU1NTSBELiBIOm1tIixMTExMOiJZWVlZLiBNTU1NIEQuLCBkZGRk'@;
put 'IEg6bW0ifSxtZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oTyl7cmV0dXJuInUiPT09Ty5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oTyxSLHope3JldHVybiBPPDEyPyEwPT09ej8iZGUiOiJERSI6ITA9PT16PyJkdSI6IkRVIn0sY2FsZW5k'@;
put 'YXI6e3NhbWVEYXk6IlttYV0gTFRbLWtvcl0iLG5leHREYXk6Iltob2xuYXBdIExUWy1rb3JdIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiBsZS5jYWxsKHRoaXMsITApfSxsYXN0RGF5OiJbdGVnbmFwXSBMVFsta29yXSIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gbGUuY2FsbCh0'@;
put 'aGlzLCExKX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgbVx4ZmFsdmEiLHBhc3Q6IiVzIixzOm0sc3M6bSxtLG1tOm0saDptLGhoOm0sZDptLGRkOm0sTTptLE1NOm0seTptLHl5Om19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoi'@;
put 'JWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0NTIzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiaHktYW0iLHttb250aHM6e2Zvcm1hdDoiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYx'@;
put 'XHUwNTgwXHUwNTZiX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1N2ZcdTA1NmJfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZjXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZFx1MDU2'@;
put 'Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZFx1MDU2Yl9cdTA1N2RcdTA1NjVcdTA1N2FcdTA1N2ZcdTA1'@;
put 'NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTcwXHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NjRcdTA1NjVcdTA1'@;
put 'NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmIiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1NzRcdTA1'@;
put 'NjFcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZjX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkX1x1MDU4NVx1MDU2M1x1'@;
put 'MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZF9cdTA1N2RcdTA1NjVcdTA1N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTcwXHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1'@;
put 'MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NjRcdTA1NjVcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA1NzBcdTA1NzZcdTA1N2VfXHUwNTgzXHUwNTdmXHUwNTgwX1x1MDU3NFx1MDU4MFx1MDU3Zl9cdTA1'@;
put 'NjFcdTA1N2FcdTA1ODBfXHUwNTc0XHUwNTc1XHUwNTdkX1x1MDU3MFx1MDU3Nlx1MDU3ZF9cdTA1NzBcdTA1NmNcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTdkX1x1MDU3ZFx1MDU3YVx1MDU3Zl9cdTA1NzBcdTA1NmZcdTA1N2ZfXHUwNTc2XHUwNTc0XHUwNTYyX1x1MDU2NFx1MDU2Zlx1MDU3'@;
put 'ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNTZmXHUwNTZiXHUwNTgwXHUwNTYxXHUwNTZmXHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2Zlx1MDU3OFx1MDU4Mlx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJc'@;
put 'dTA1NjlcdTA1NmJfXHUwNTc5XHUwNTc4XHUwNTgwXHUwNTY1XHUwNTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3MFx1MDU2Ylx1MDU3Nlx1MDU2M1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJcdTA1NjFcdTA1Njlf'@;
put 'XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTYxXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgy'@;
put 'XHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJc'@;
put 'dTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIixMTExMOiJk'@;
put 'ZGRkLCBEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNTYxXHUwNTc1XHUwNTdkXHUwNTg1XHUwNTgwXSBMVCIsbmV4dERheToiW1x1MDU3ZVx1MDU2MVx1MDU3Mlx1MDU2OF0gTFQiLGxhc3REYXk6IltcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZd'@;
put 'IExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFtcdTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA1NjFcdTA1NzZcdTA1ODFcdTA1NjFcdTA1NmVdIGRkZGQgW1x1MDU4NVx1MDU4'@;
put 'MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNTcwXHUwNTY1XHUwNTdmXHUwNTc4IixwYXN0OiIlcyBcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2IiLHM6Ilx1MDU3NFx1MDU2YiBcdTA1ODRcdTA1'@;
put 'NjFcdTA1NzZcdTA1NmIgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixzczoiJWQgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixtOiJcdTA1ODBcdTA1NzhcdTA1N2FcdTA1NjUiLG1tOiIlZCBcdTA1ODBc'@;
put 'dTA1NzhcdTA1N2FcdTA1NjUiLGg6Ilx1MDU2YVx1MDU2MVx1MDU3NCIsaGg6IiVkIFx1MDU2YVx1MDU2MVx1MDU3NCIsZDoiXHUwNTg1XHUwNTgwIixkZDoiJWQgXHUwNTg1XHUwNTgwIixNOiJcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLE1NOiIlZCBcdTA1NjFcdTA1NzRcdTA1NmJcdTA1'@;
put 'N2QiLHk6Ilx1MDU3Zlx1MDU2MVx1MDU4MFx1MDU2YiIseXk6IiVkIFx1MDU3Zlx1MDU2MVx1MDU4MFx1MDU2YiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MXxcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1'@;
put 'N2VcdTA1NjF8XHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3Ni8saXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXihcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2Vc'@;
put 'dTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2KSQvLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0pe3JldHVybiBtPDQ/Ilx1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MSI6bTwxMj8iXHUwNTYxXHUwNTdjXHUw'@;
put 'NTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxIjptPDE3PyJcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjEiOiJcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsx'@;
put 'LDJ9fFxkezEsMn0tKFx1MDU2Ylx1MDU3NnxcdTA1ODBcdTA1NjQpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpjYXNlIkRERG8iOnJldHVybiAxPT09bT9tKyItXHUwNTZiXHUwNTc2IjptKyItXHUwNTgwXHUwNTY0IjtkZWZh'@;
put 'dWx0OnJldHVybiBtfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sOTkyMzM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJpZCIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVu'@;
put 'aV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuaW5fU2VsYXNh'@;
put 'X1JhYnVfS2FtaXNfSnVtYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixM'@;
put 'VFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sbWVyaWRpZW1I'@;
put 'b3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJwYWdpIj09PWxlP206InNpYW5nIj09PWxlP20+PTExP206bSsxMjoic29yZSI9PT1sZXx8Im1hbGFtIj09PWxlP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDExPyJwYWdpIjpt'@;
put 'PDE1PyJzaWFuZyI6bTwxOT8ic29yZSI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltCZXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZW1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6'@;
put 'ImRkZGQgW2xhbHUgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsYWx1IixzOiJiZWJlcmFwYSBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZW1lbml0IixtbToiJWQgbWVuaXQiLGg6InNlamFtIixoaDoiJWQg'@;
put 'amFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDk0NjkzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3Qi'@;
put 'O2Z1bmN0aW9uIHgoTSl7cmV0dXJuIE0lMTAwPT0xMXx8TSUxMCE9MX1mdW5jdGlvbiBtKE0sTyxSLHope3ZhciBLPU0rIiAiO3N3aXRjaChSKXtjYXNlInMiOnJldHVybiBPfHx6PyJub2trcmFyIHNla1x4ZmFuZHVyIjoibm9ra3J1bSBzZWtceGZhbmR1bSI7Y2FzZSJzcyI6cmV0dXJuIHgo'@;
put 'TSk/SysoT3x8ej8ic2VrXHhmYW5kdXIiOiJzZWtceGZhbmR1bSIpOksrInNla1x4ZmFuZGEiO2Nhc2UibSI6cmV0dXJuIE8/Im1ceGVkblx4ZmF0YSI6Im1ceGVkblx4ZmF0dSI7Y2FzZSJtbSI6cmV0dXJuIHgoTSk/SysoT3x8ej8ibVx4ZWRuXHhmYXR1ciI6Im1ceGVkblx4ZmF0dW0iKTpP'@;
put 'P0srIm1ceGVkblx4ZmF0YSI6SysibVx4ZWRuXHhmYXR1IjtjYXNlImhoIjpyZXR1cm4geChNKT9LKyhPfHx6PyJrbHVra3VzdHVuZGlyIjoia2x1a2t1c3R1bmR1bSIpOksrImtsdWtrdXN0dW5kIjtjYXNlImQiOnJldHVybiBPPyJkYWd1ciI6ej8iZGFnIjoiZGVnaSI7Y2FzZSJkZCI6cmV0'@;
put 'dXJuIHgoTSk/Tz9LKyJkYWdhciI6Sysoej8iZGFnYSI6ImRceGY2Z3VtIik6Tz9LKyJkYWd1ciI6Sysoej8iZGFnIjoiZGVnaSIpO2Nhc2UiTSI6cmV0dXJuIE8/Im1ceGUxbnVceGYwdXIiOno/Im1ceGUxbnVceGYwIjoibVx4ZTFudVx4ZjBpIjtjYXNlIk1NIjpyZXR1cm4geChNKT9PP0sr'@;
put 'Im1ceGUxbnVceGYwaXIiOksrKHo/Im1ceGUxbnVceGYwaSI6Im1ceGUxbnVceGYwdW0iKTpPP0srIm1ceGUxbnVceGYwdXIiOksrKHo/Im1ceGUxbnVceGYwIjoibVx4ZTFudVx4ZjBpIik7Y2FzZSJ5IjpyZXR1cm4gT3x8ej8iXHhlMXIiOiJceGUxcmkiO2Nhc2UieXkiOnJldHVybiB4KE0p'@;
put 'P0srKE98fHo/Ilx4ZTFyIjoiXHhlMXJ1bSIpOksrKE98fHo/Ilx4ZTFyIjoiXHhlMXJpIil9fWFlLmRlZmluZUxvY2FsZSgiaXMiLHttb250aHM6Imphblx4ZmFhcl9mZWJyXHhmYWFyX21hcnNfYXByXHhlZGxfbWFceGVkX2pceGZhblx4ZWRfalx4ZmFsXHhlZF9ceGUxZ1x4ZmFzdF9zZXB0'@;
put 'ZW1iZXJfb2t0XHhmM2Jlcl9uXHhmM3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hXHhlZF9qXHhmYW5falx4ZmFsX1x4ZTFnXHhmYV9zZXBfb2t0X25ceGYzdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4'@;
put 'ZTFudWRhZ3VyX1x4ZmVyaVx4ZjBqdWRhZ3VyX21pXHhmMHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mXHhmNnN0dWRhZ3VyX2xhdWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fXHhmZXJpX21pXHhmMF9maW1fZlx4ZjZzX2xhdSIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c01pbjoiU3VfTVx4ZTFfXHhkZXJfTWlfRmlfRlx4ZjZfTGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0iLExMTEw6ImRkZGQs'@;
put 'IEQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGVkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhlMSBtb3JndW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGVkIGdceGU2ciBrbC5dIExUIixsYXN0V2VlazoiW3Nc'@;
put 'eGVkXHhmMGFzdGFdIGRkZGQgW2tsLl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVmdGlyICVzIixwYXN0OiJmeXJpciAlcyBzXHhlZFx4ZjBhbiIsczptLHNzOm0sbSxtbTptLGg6ImtsdWtrdXN0dW5kIixoaDptLGQ6bSxkZDptLE06bSxNTTptLHk6bSx5eTpt'@;
put 'fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNzgxMTg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJpdC1jaCIse21vbnRo'@;
put 'czoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92'@;
put 'X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIp'@;
put 'LHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZ'@;
put 'WVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbGxlXSBMVCIsbGFzdERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgp'@;
put 'PyJbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCI6IltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihtKXtyZXR1cm4oL15bMC05XS4rJC8udGVzdChtKT8idHJhIjoiaW4iKSsiICIrbX0scGFzdDoiJXMgZmEi'@;
put 'LHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5p'@;
put 'In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjM5MzY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJpdCIse21v'@;
put 'bnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRf'@;
put 'bm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9tZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1N'@;
put 'IFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbT2dnaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbRG9tYW5pIGEiKyh0aGlzLmhvdXJz'@;
put 'KCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVy'@;
put 'biJbSWVyaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltMYSBzY29yc2FdIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMu'@;
put 'aG91cnMoKT8iICI6ImxsJyIpKyJdTFQiOiJbTG8gc2NvcnNvXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidHJhICVzIixwYXN0OiIlcyBmYSIsczoi'@;
put 'YWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoiJWQgc2V0dGltYW5lIixNOiJ1biBtZXNlIixNTToi'@;
put 'JWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4Njg3MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug'@;
put 'c3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJSIn0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToi'@;
put 'XHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIsYWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIsbmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2'@;
put 'LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5MjdcdTZiNjMiLG5hcnJvdzoiXHUzMzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6Ilx1MzM3ZSIsYWJicjoiTSJ9LHtzaW5jZToi'@;
put 'MDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Ilx1ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1MTQzXHU1MjRkIixuYXJyb3c6IkJDIixhYmJy'@;
put 'OiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8oXHU1MTQzfFxkKylcdTVlNzQvLGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIlx1NTE0MyI9PT1sZVsxXT8xOnBhcnNlSW50KGxlWzFdfHxtLDEwKX0sbW9udGhzOiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80'@;
put 'XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4Xzlc'@;
put 'dTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2ZGNcdTY1ZTVfXHU5MWQxXHU2NmRjXHU2'@;
put 'NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQx'@;
put 'X1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3'@;
put 'MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1'@;
put 'NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJcdTUzNDhcdTVmOGMiPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj8iXHU1MzQ4XHU1MjRkIjoiXHU1MzQ4XHU1ZjhjIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2Fc'@;
put 'dTY1ZTVdIExUIixuZXh0RGF5OiJbXHU2NjBlXHU2NWU1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24obSl7cmV0dXJuIG0ud2VlaygpIT09dGhpcy53ZWVrKCk/IltcdTY3NjVcdTkwMzFdZGRkZCBMVCI6ImRkZGQgTFQifSxsYXN0RGF5OiJbXHU2NjI4XHU2NWU1XSBMVCIsbGFzdFdlZWs6ZnVu'@;
put 'Y3Rpb24obSl7cmV0dXJuIHRoaXMud2VlaygpIT09bS53ZWVrKCk/IltcdTUxNDhcdTkwMzFdZGRkZCBMVCI6ImRkZGQgTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTY1ZTUvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNl'@;
put 'InkiOnJldHVybiAxPT09bT8iXHU1MTQzXHU1ZTc0IjptKyJcdTVlNzQiO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIG0rIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gbX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NjU3MFx1'@;
put 'NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToiJWRcdTUyMDYiLGg6IjFcdTY2NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIxXHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3MDgiLHk6IjFcdTVlNzQiLHl5OiIl'@;
put 'ZFx1NWU3NCJ9fSl9KEYoMTY2NzYpKX0sNjg3MTA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVy'@;
put 'X09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0'@;
put 'dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01N'@;
put 'L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxl'@;
put 'KXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiZW5qaW5nIj09PWxlP206InNpeWFuZyI9PT1sZT9tPj0xMT9tOm0rMTI6InNvbnRlbiI9PT1sZXx8Im5kYWx1Ij09PWxlP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDExPyJlbmppbmciOm08MTU/InNpeWFu'@;
put 'ZyI6bTwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RX'@;
put 'ZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIs'@;
put 'bW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sMTcxMjU6ZnVu'@;
put 'Y3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBkMFx1MTBkYVx1'@;
put 'MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4'@;
put 'XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUw'@;
put 'XHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19cdTEwZDdcdTEw'@;
put 'ZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUxXHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1MTBlMl9cdTEw'@;
put 'ZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1MTBkMFx1MTBk'@;
put 'Ylx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1MTBkMFx1MTBl'@;
put 'MFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEwZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUx'@;
put 'MGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUx'@;
put 'MGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8XHUxMGU4XHUx'@;
put 'MGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVcdTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUxMGUwX1x1MTBl'@;
put 'OFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6'@;
put 'bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRbLVx1MTBkNlx1'@;
put 'MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdlZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRc'@;
put 'dTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihtKXtyZXR1cm4gbS5yZXBsYWNlKC8oXHUxMGVjXHUx'@;
put 'MGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihsZSxNLE8pe3JldHVybiJcdTEwZDgiPT09Tz9NKyJcdTEwZThcdTEw'@;
put 'ZDgiOk0rTysiXHUxMGU4XHUxMGQ4In0pfSxwYXN0OmZ1bmN0aW9uKG0pe3JldHVybi8oXHUxMGVjXHUxMGQwXHUxMGRiXHUxMGQ4fFx1MTBlY1x1MTBlM1x1MTBkN1x1MTBkOHxcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDh8XHUxMGQzXHUxMGU2XHUxMGQ0fFx1MTBkN1x1MTBkNVx1'@;
put 'MTBkNCkvLnRlc3QobSk/bS5yZXBsYWNlKC8oXHUxMGQ4fFx1MTBkNCkkLywiXHUxMGQ4XHUxMGUxIFx1MTBlY1x1MTBkOFx1MTBkYyIpOi9cdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgvLnRlc3QobSk/bS5yZXBsYWNlKC9cdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgkLywiXHUxMGVjXHUxMGRh'@;
put 'XHUxMGQ4XHUxMGUxIFx1MTBlY1x1MTBkOFx1MTBkYyIpOm19LHM6Ilx1MTBlMFx1MTBkMFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkY1x1MTBkOFx1MTBkYlx1MTBkNCBcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDgiLHNzOiIlZCBcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDgiLG06Ilx1MTBlY1x1'@;
put 'MTBlM1x1MTBkN1x1MTBkOCIsbW06IiVkIFx1MTBlY1x1MTBlM1x1MTBkN1x1MTBkOCIsaDoiXHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4IixoaDoiJWQgXHUxMGUxXHUxMGQwXHUxMGQwXHUxMGQ3XHUxMGQ4IixkOiJcdTEwZDNcdTEwZTZcdTEwZDQiLGRkOiIlZCBcdTEwZDNcdTEw'@;
put 'ZTZcdTEwZDQiLE06Ilx1MTBkN1x1MTBkNVx1MTBkNCIsTU06IiVkIFx1MTBkN1x1MTBkNVx1MTBkNCIseToiXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4Iix5eToiJWQgXHUxMGVjXHUxMGQ0XHUxMGRhXHUxMGQ4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovMHwxLVx1MTBkYVx1MTBkOHxc'@;
put 'dTEwZGJcdTEwZDQtXGR7MSwyfXxcZHsxLDJ9LVx1MTBkNC8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gMD09PW0/bToxPT09bT9tKyItXHUxMGRhXHUxMGQ4IjptPDIwfHxtPD0xMDAmJm0lMjA9PTB8fG0lMTAwPT0wPyJcdTEwZGJcdTEwZDQtIittOm0rIi1cdTEwZDQifSx3ZWVrOntk'@;
put 'b3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw4MjQ2MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1MDQ1NiIsMjoiLVx1MDQ0OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIsNDoiLVx1MDQ0'@;
put 'OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1MDQ0YiIsNzoiLVx1MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0NGIiLDIwOiItXHUwNDQ4XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIsNDA6Ii1cdTA0'@;
put 'NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0OFx1MDQ0YiIsNzA6Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUwNDQ4XHUwNDU2In07YWUuZGVmaW5lTG9jYWxlKCJrayIse21vbnRoczoiXHUwNDliXHUw'@;
put 'NDMwXHUwNGEzXHUwNDQyXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQ5Ylx1MDQzZlx1MDQzMFx1MDQzZF9cdTA0M2RcdTA0MzBcdTA0NDNcdTA0NDBcdTA0NGJcdTA0MzdfXHUwNDQxXHUwNGQ5XHUwNDQzXHUwNDU2XHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzY1x1MDQ0Ylx1MDQ0MF9cdTA0M2Nc'@;
put 'dTA0MzBcdTA0NDNcdTA0NDFcdTA0NGJcdTA0M2NfXHUwNDQ4XHUwNDU2XHUwNDNiXHUwNDM0XHUwNDM1X1x1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0Ylx1MDQzN19cdTA0OWJcdTA0NGJcdTA0NDBcdTA0M2FcdTA0YWZcdTA0MzlcdTA0MzVcdTA0M2FfXHUwNDliXHUwNDMwXHUwNDM3XHUwNDMw'@;
put 'XHUwNDNkX1x1MDQ5Ylx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQzMF9cdTA0MzZcdTA0MzVcdTA0M2JcdTA0NDJcdTA0M2VcdTA0OWJcdTA0NDFcdTA0MzBcdTA0M2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ5Ylx1MDQzMFx1MDRhM19cdTA0MzBcdTA0OWJcdTA0M2ZfXHUw'@;
put 'NDNkXHUwNDMwXHUwNDQzX1x1MDQ0MVx1MDRkOVx1MDQ0M19cdTA0M2NcdTA0MzBcdTA0M2NfXHUwNDNjXHUwNDMwXHUwNDQzX1x1MDQ0OFx1MDQ1Nlx1MDQzYl9cdTA0NDJcdTA0MzBcdTA0M2NfXHUwNDliXHUwNDRiXHUwNDQwX1x1MDQ5Ylx1MDQzMFx1MDQzN19cdTA0OWJcdTA0MzBcdTA0'@;
put 'NDBfXHUwNDM2XHUwNDM1XHUwNDNiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MzZcdTA0MzVcdTA0M2FcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM0XHUwNGFmXHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDQzNVx1MDQzOVx1MDQ0'@;
put 'MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0ZDlcdTA0NDBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDMxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNlx1MDRiMVx1MDQzY1x1MDQzMF9cdTA0NDFcdTA0MzVcdTA0'@;
put 'M2RcdTA0MzFcdTA0NTYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDM2XHUwNDM1XHUwNDNhX1x1MDQzNFx1MDRhZlx1MDQzOV9cdTA0NDFcdTA0MzVcdTA0MzlfXHUwNDQxXHUwNGQ5XHUwNDQwX1x1MDQzMVx1MDQzNVx1MDQzOV9cdTA0MzZcdTA0YjFcdTA0M2NfXHUwNDQxXHUw'@;
put 'NDM1XHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzZcdTA0M2FfXHUwNDM0XHUwNDM5X1x1MDQ0MVx1MDQzOV9cdTA0NDFcdTA0NDBfXHUwNDMxXHUwNDM5X1x1MDQzNlx1MDQzY19cdTA0NDFcdTA0M2QiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs'@;
put 'TFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNDU2XHUwNDNkIFx1MDQ0MVx1MDQz'@;
put 'MFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MTVcdTA0NDBcdTA0NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6Iltc'@;
put 'dTA0MWFcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2FcdTA0MzVcdTA0M2QgXHUwNDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNGEzXSBkZGRkIFtcdTA0NDFcdTA0MzBc'@;
put 'dTA0OTNcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0NTZcdTA0NDhcdTA0NTZcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6IiVzIFx1MDQzMVx1MDRiMVx1MDQ0MFx1MDQ0Ylx1MDQzZCIsczoiXHUwNDMxXHUwNDU2XHUwNDQwXHUw'@;
put 'NDNkXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVk'@;
put 'IFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQz'@;
put 'ZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1MDQzOSIseToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9u'@;
put 'dGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0OFx1MDQ1NnxcdTA0NDhcdTA0NGIpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUrKHhbbGVdfHx4W2xlJTEwXXx8eFtsZT49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDc3Mzk5OmZ1'@;
put 'bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTE3ZTEiLDI6Ilx1MTdlMiIsMzoiXHUxN2UzIiw0OiJcdTE3ZTQiLDU6Ilx1MTdlNSIsNjoiXHUxN2U2Iiw3OiJcdTE3ZTciLDg6Ilx1MTdlOCIsOToiXHUxN2U5IiwwOiJcdTE3ZTAifSxtPXsi'@;
put 'XHUxN2UxIjoiMSIsIlx1MTdlMiI6IjIiLCJcdTE3ZTMiOiIzIiwiXHUxN2U0IjoiNCIsIlx1MTdlNSI6IjUiLCJcdTE3ZTYiOiI2IiwiXHUxN2U3IjoiNyIsIlx1MTdlOCI6IjgiLCJcdTE3ZTkiOiI5IiwiXHUxN2UwIjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5'@;
put 'OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUx'@;
put 'N2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBc'@;
put 'dTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3'@;
put 'YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZc'@;
put 'dTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1'@;
put 'MTdkMFx1MTc5M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJcdTE3YjZcdTE3OWFfXHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdjZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJc'@;
put 'dTE3OWFfXHUxNzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUx'@;
put 'N2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N'@;
put 'IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NS8saXNQTTpmdW5jdGlvbihNKXtyZXR1cm4i'@;
put 'XHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PU19LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3'@;
put 'OTBcdTE3ZDJcdTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUx'@;
put 'N2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5Zlx1MTdiN1x1MTc5Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUx'@;
put 'N2NkXHUxNzk4XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkzIixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3'@;
put 'OTNcdTE3ZDJcdTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1'@;
put 'MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBc'@;
put 'dTE3ZDJcdTE3ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1MTdjMiIsTU06IiVkIFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2'@;
put 'In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8sb3JkaW5hbDoiXHUxNzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRcdTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3'@;
put 'ZTlcdTE3ZTBdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDM4NzIwOmZ1bmN0aW9uKGF0LEll'@;
put 'LEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTBjZTciLDI6Ilx1MGNlOCIsMzoiXHUwY2U5Iiw0OiJcdTBjZWEiLDU6Ilx1MGNlYiIsNjoiXHUwY2VjIiw3OiJcdTBjZWQiLDg6Ilx1MGNlZSIsOToiXHUwY2VmIiwwOiJcdTBjZTYifSxtPXsiXHUwY2U3IjoiMSIs'@;
put 'Ilx1MGNlOCI6IjIiLCJcdTBjZTkiOiIzIiwiXHUwY2VhIjoiNCIsIlx1MGNlYiI6IjUiLCJcdTBjZWMiOiI2IiwiXHUwY2VkIjoiNyIsIlx1MGNlZSI6IjgiLCJcdTBjZWYiOiI5IiwiXHUwY2U2IjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgia24iLHttb250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNi'@;
put 'NVx1MGNiMFx1MGNiZl9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUw'@;
put 'YzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1'@;
put 'MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJc'@;
put 'dTBjOWNcdTBjYThfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNj'@;
put 'ZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUw'@;
put 'Y2I1XHUwY2M2XHUwYzgyX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUw'@;
put 'Y2I1XHUwY2JlXHUwY2IwX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWNcdTBjYzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1'@;
put 'MGNiMFx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBj'@;
put 'YjNfXHUwY2FjXHUwY2MxXHUwY2E3X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNh'@;
put 'ZVx1MGM4Ml9cdTBjYWNcdTBjYzFfXHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDpt'@;
put 'bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3XHUwYzgyXHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGNhOFx1'@;
put 'MGNiZlx1MGNhOFx1MGNjZFx1MGNhOFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2MyXHUwY2E4XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUwYzgyXHUwY2E0XHUwY2IwIixwYXN0OiIl'@;
put 'cyBcdTBjYjlcdTBjYmZcdTBjODJcdTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1MGNjMSBcdTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIlZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBjYzZcdTBjODJcdTBjYTFcdTBjYzFcdTBj'@;
put 'OTdcdTBjYjNcdTBjYzEiLG06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjOTdcdTBjODJcdTBjOWZcdTBj'@;
put 'YzYiLGhoOiIlZCBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdc'@;
put 'dTBjYjNcdTBjYzEiLE1NOiIlZCBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIlZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjcifSxwcmVwYXJzZTpmdW5jdGlvbihN'@;
put 'KXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2VkXHUwY2VlXHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlv'@;
put 'bihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1'@;
put 'MGNhOHxcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiPT09Tz9NPDQ/TTpNKzEyOiJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdc'@;
put 'dTBjY2RcdTBjOTdcdTBjYzYiPT09Tz9NOiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiPT09Tz9NPj0xMD9NOk0rMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI9PT1PP00rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0'@;
put 'dXJuIE08ND8iXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjpNPDEwPyJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOk08MTc/Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI6TTwyMD8i'@;
put 'XHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKE0pe3JldHVybiBNKyJcdTBjYThcdTBjYzZcdTBj'@;
put 'ZDUifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw4NTMwNjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZk'@;
put 'NF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2'@;
put 'ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3'@;
put 'YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDpt'@;
put 'bSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIs'@;
put 'bmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiXHVjNWI0XHVjODFjIExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMg'@;
put 'XHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1tOiIlZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVk'@;
put 'XHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIG0r'@;
put 'Ilx1Yzc3YyI7Y2FzZSJNIjpyZXR1cm4gbSsiXHVjNmQ0IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rIlx1YzhmYyI7ZGVmYXVsdDpyZXR1cm4gbX19LG1lcmlkaWVtUGFyc2U6L1x1YzYyNFx1YzgwNHxcdWM2MjRcdWQ2YzQvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuIlx1YzYyNFx1ZDZj'@;
put 'NCI9PT1tfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDEyPyJcdWM2MjRcdWM4MDQiOiJcdWM2MjRcdWQ2YzQifX0pfShGKDE2Njc2KSl9LDgyOTk1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2NjEiLDI6Ilx1'@;
put 'MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxtPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJc'@;
put 'dTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LGxlPVsiXHUwNmE5XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIsIlx1MDYzNFx1MDY0OFx1MDYyOFx1MDYyN1x1'@;
put 'MDYyYSIsIlx1MDYyNlx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDY0Nlx1MDZjY1x1MDYzM1x1MDYyN1x1MDY0NiIsIlx1MDYyNlx1MDYyN1x1MDZjY1x1MDYyN1x1MDYzMSIsIlx1MDYyZFx1MDY0OFx1MDYzMlx1MDZkNVx1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyYVx1'@;
put 'MDZkNVx1MDY0NVx1MDY0NVx1MDY0OFx1MDYzMiIsIlx1MDYyNlx1MDYyN1x1MDYyOCIsIlx1MDYyNlx1MDZkNVx1MDZjY1x1MDY0NFx1MDY0OFx1MDY0OFx1MDY0NCIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2NDNcdTA2ZDVcdTA2NDUi'@;
put 'LCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDZhOVx1MDZkNVx1MDY0NSJdO2FlLmRlZmluZUxvY2FsZSgia3UiLHtt'@;
put 'b250aHM6bGUsbW9udGhzU2hvcnQ6bGUsd2Vla2RheXM6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUw'@;
put 'NjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2'@;
put 'NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdc'@;
put 'dTIwMGNcdTA2NDVfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJj'@;
put 'XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2Vf'@;
put 'XHUwNjQ3X1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0g'@;
put 'WVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwY3xcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MvLGlzUE06ZnVuY3Rpb24oTyl7cmV0dXJuL1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1'@;
put 'MDYzMVx1MDY0N1x1MjAwYy8udGVzdChPKX0sbWVyaWRpZW06ZnVuY3Rpb24oTyxSLHope3JldHVybiBPPDEyPyJcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MiOiJcdTA2MjZcdTA2Y2VcdTA2NDhcdTA2MjdcdTA2MzFcdTA2NDdcdTIwMGMifSxjYWxlbmRhcjp7'@;
put 'c2FtZURheToiW1x1MDYyNlx1MDY0N1x1MjAwY1x1MDY0NVx1MDYzMVx1MDZjNiBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0RGF5OiJbXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3XHUwNjQ2XHUwNmNjIFx1MDY0M1x1MDYyN1x1MDYy'@;
put 'YVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNjQ4XHUwNmNlXHUwNjQ2XHUwNmNlIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0'@;
put 'NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDRcdTA2NDdcdTIwMGMgJXMiLHBhc3Q6IiVzIixzOiJcdTA2ODZcdTA2'@;
put 'NDdcdTIwMGNcdTA2NDZcdTA2MmYgXHUwNjg2XHUwNjMxXHUwNjQzXHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIixzczoiXHUwNjg2XHUwNjMxXHUwNjQzXHUwNjQ3XHUyMDBjICVkIixtOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUw'@;
put 'NjQ3XHUyMDBjXHUwNjQzIixtbToiJWQgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUwNjQ3XHUyMDBjXHUwNjQzIixoOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixoaDoiJWQgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4'@;
put 'XHUwNjQ1XHUwNmNlXHUwNjMxIixkOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjk1XHUwNmM2XHUwNjk4IixkZDoiJWQgXHUwNjk1XHUwNmM2XHUwNjk4IixNOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNmFmIixNTToiJWQgXHUwNjQ1XHUw'@;
put 'NjI3XHUwNjQ2XHUwNmFmIix5OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjMzXHUwNjI3XHUwNmI1Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNmI1In0scHJlcGFyc2U6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1'@;
put 'MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihSKXtyZXR1cm4gbVtSXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihSKXtyZXR1cm4geFtSXX0pLnJlcGxhY2UoLywv'@;
put 'ZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSw4Nzc5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXswOiItXHUwNDQ3XHUwNGFmIiwxOiItXHUwNDQ3XHUwNDM4IiwyOiItXHUwNDQ3XHUwNDM4IiwzOiItXHUw'@;
put 'NDQ3XHUwNGFmIiw0OiItXHUwNDQ3XHUwNGFmIiw1OiItXHUwNDQ3XHUwNDM4Iiw2OiItXHUwNDQ3XHUwNDRiIiw3OiItXHUwNDQ3XHUwNDM4Iiw4OiItXHUwNDQ3XHUwNDM4Iiw5OiItXHUwNDQ3XHUwNDQzIiwxMDoiLVx1MDQ0N1x1MDQ0MyIsMjA6Ii1cdTA0NDdcdTA0NGIiLDMwOiItXHUw'@;
put 'NDQ3XHUwNDQzIiw0MDoiLVx1MDQ0N1x1MDQ0YiIsNTA6Ii1cdTA0NDdcdTA0YWYiLDYwOiItXHUwNDQ3XHUwNDRiIiw3MDoiLVx1MDQ0N1x1MDQzOCIsODA6Ii1cdTA0NDdcdTA0MzgiLDkwOiItXHUwNDQ3XHUwNDQzIiwxMDA6Ii1cdTA0NDdcdTA0YWYifTthZS5kZWZpbmVMb2NhbGUoImt5'@;
put 'Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMw'@;
put 'XHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0'@;
put 'NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9c'@;
put 'dTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUw'@;
put 'NDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQxNlx1MDQzNVx1MDQzYVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTRcdTA0YWZcdTA0MzlcdTA0NDhcdTA0ZTlcdTA0M2NcdTA0MzFcdTA0YWZfXHUw'@;
put 'NDI4XHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQyOFx1MDQzMFx1MDQ0MFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTFcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE2XHUwNDQzXHUwNDNjXHUw'@;
put 'NDMwX1x1MDQxOFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MTZcdTA0MzVcdTA0M2FfXHUwNDE0XHUwNGFmXHUwNDM5X1x1MDQyOFx1MDQzNVx1MDQzOV9cdTA0MjhcdTA0MzBcdTA0NDBfXHUwNDExXHUwNDM1XHUwNDM5X1x1'@;
put 'MDQxNlx1MDQ0M1x1MDQzY19cdTA0MThcdTA0NDhcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxNlx1MDQzYV9cdTA0MTRcdTA0MzlfXHUwNDI4XHUwNDM5X1x1MDQyOFx1MDQ0MF9cdTA0MTFcdTA0MzlfXHUwNDE2XHUwNDNjX1x1MDQxOFx1MDQ0OCIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0'@;
put 'MzNcdTA0YWZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFz'@;
put 'dERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQ0ZFx1MDQ0ZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDRlOVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0M2RdIGRkZGQgW1x1MDQz'@;
put 'YVx1MDRhZlx1MDQzZFx1MDRhZl0gW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDNjXHUwNDQzXHUwNDQwXHUwNDQzXHUw'@;
put 'NDNkIixzOiJcdTA0MzFcdTA0MzhcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDdcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNjXHUw'@;
put 'NGFmXHUwNDNkXHUwNGU5XHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAg'@;
put 'XHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRi'@;
put 'XHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ3XHUwNDM4fFx1MDQ0N1x1MDQ0YnxcdTA0NDdcdTA0YWZ8XHUwNDQ3XHUwNDQzKS8sb3JkaW5hbDpmdW5jdGlvbihsZSl7cmV0dXJuIGxlKyh4W2xlXXx8eFtsZSUxMF18fHhbbGU+PTEwMD8xMDA6bnVsbF0p'@;
put 'fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw2MjA1NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KFIseixLLEkpe3ZhciBrPXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdl'@;
put 'ciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50IiwiZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIHo/a1tLXVswXTprW0tdWzFdfWZ1bmN0aW9uIE0oUil7aWYoUj1wYXJzZUludChSLDEwKSxpc05hTihSKSlyZXR1'@;
put 'cm4hMTtpZihSPDApcmV0dXJuITA7aWYoUjwxMClyZXR1cm4gNDw9UiYmUjw9NztpZihSPDEwMCl7dmFyIHo9UiUxMDtyZXR1cm4gTSgwPT09ej9SLzEwOnopfWlmKFI8MWU0KXtmb3IoO1I+PTEwOylSLz0xMDtyZXR1cm4gTShSKX1yZXR1cm4gTShSLz0xZTMpfWFlLmRlZmluZUxvY2FsZSgi'@;
put 'bGIiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0ZXJ6X0Ficlx4ZWJsbF9NZWVfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWJyLl9NcnouX0Fici5fTWVlX0p1bi5fSnVsLl9B'@;
put 'dWcuX1NlcHQuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm5kZWdfTVx4ZTlpbmRlZ19EXHhlYm5zY2hkZWdfTVx4ZWJ0dHdvY2hfRG9ubmVzY2hkZWdfRnJlaWRlZ19TYW1zY2hkZWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y'@;
put 'dDoiU28uX01ceGU5Ll9EXHhlYi5fTVx4ZWIuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NXHhlOV9EXHhlYl9NXHhlYl9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIFtBdWVyXSIsTFRT'@;
put 'OiJIOm1tOnNzIFtBdWVyXSIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGF1dCB1bV0gTFQiLHNhbWVFbHNlOiJM'@;
put 'IixuZXh0RGF5OiJbTXVlciB1bV0gTFQiLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQiLGxhc3REYXk6IltHXHhlYnNjaHRlciB1bV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMjpjYXNlIDQ6cmV0dXJuIltMZXNjaHRlbl0gZGRkZCBbdW1dIExUIjtk'@;
put 'ZWZhdWx0OnJldHVybiJbTGVzY2h0ZV0gZGRkZCBbdW1dIExUIn19fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBtKFIpe3JldHVybiBNKFIuc3Vic3RyKDAsUi5pbmRleE9mKCIgIikpKT8iYSAiK1I6ImFuICIrUn0scGFzdDpmdW5jdGlvbiBsZShSKXtyZXR1cm4gTShSLnN1YnN0'@;
put 'cigwLFIuaW5kZXhPZigiICIpKSk/InZpcnUgIitSOiJ2aXJ1biAiK1J9LHM6ImUgcHVlciBTZWtvbm5lbiIsc3M6IiVkIFNla29ubmVuIixtOngsbW06IiVkIE1pbnV0dGVuIixoOngsaGg6IiVkIFN0b25uZW4iLGQ6eCxkZDoiJWQgRGVlZyIsTTp4LE1NOiIlZCBNXHhlOWludCIseTp4LHl5'@;
put 'OiIlZCBKb2VyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmR